{ STUDENT.C Copyright (c) TrSek alias Zdeno Sekerak } { Databaza studentov, zaradeni, vyradenie, triedenie } { Vsetko sa uklada do suboru pre neskorsie pouzitie } { } { Datum:28.05.96 http://www.trsek.com } #include "stdio.h" #include "conio.h" #include "alloc.h" #include "string.h" #include "stdlib.h" #define SUBOR "student.dat" #define MAX_STR 512 typedef struct stud { char* meno; char* priez; int rocnik; char* odbor; long evcis; void* prev; void* next; } student; // zozbrazi hlavnu stranku void Hlavna(int poc) { clrscr(); printf("Databaza studentov (pocet=%d)\n", poc); printf("--------------------------------\n"); printf(" 1. Zadanie noveho studenta\n"); printf(" 2. Oprava udajov studenta\n"); printf(" 3. Vymazanie studenta\n"); printf(" 4. Zotriedenie podla priezviska\n"); printf(" 5. Prehlad podla rocnikov\n"); printf(" 0. Koniec\n"); printf("--------------------------------\n"); printf("Zadaj volbu (0..5):"); } // opyta sa na cislo rocnika int OpytajRocnik(void) { int roc; printf("\nZadaj ktory rocnik chces vypisat. Rocnik:"); scanf("%d", &roc); return roc; } // opyta sa a pocka na stlacenie klavesu void OtazkaKoniec(void) { printf("\nOperacia ukoncena. Stlac enter."); getchar(); getch(); } // vypise vsetkych z rocnika void VypisRocnik(student* st, int rocnik) { printf("\nMeno a Priezvisko, rocnik, odbor, evcis\n"); printf("---------------------------------------\n"); while(st != NULL) { if( st->rocnik == rocnik ) { printf("%s %s, %d, %s, %d\n", st->meno, st->priez, st->rocnik, st->odbor, st->evcis ); } // dalsi zaznam st = st->next; } } // vyzve na zadanie jednoho studenta void ZadajZaznam(student* st) { printf("\n\n"); printf("Zadaj meno :"); mstrcpy( &(st->meno), mscanf()); printf("Zadaj priezvisko:"); mstrcpy( &(st->priez), mscanf()); printf("Zadaj rocnik :"); st->rocnik = atoi(mscanf()); printf("Zadaj obdor :"); mstrcpy( &(st->odbor), mscanf()); printf("Zadaj evidencne cislo:"); st->evcis = atol(mscanf()); } // ukaze zaznam studenta void UkazZaznam(student* st) { printf("\n\n"); printf("Meno :%s\n", st->meno ); printf("Priezvisko:%s\n", st->priez ); printf("Rocnik :%d\n", st->rocnik ); printf("Obdor :%s\n", st->odbor ); printf("Evidencne cislo:%ld\n", st->evcis ); } // opyta sa na evidnce cislo a opravy zaznam void OpravZaznam(student* st) { long evcis; printf("\n"); printf("Zadaj evidence cislo studenta:"); evcis = atol(mscanf()); // budeme hladat cislo while( st != NULL ) { if( st->evcis == evcis ) { UkazZaznam(st); ZadajZaznam(st); return; } // dalsi zaznam st = st->next; } // nenasiel printf("Lutujem ale takyto zaznam neexistuje.\n"); } // zmaze celu databazu a uvolni pamat void ZmazVsetko(student* start) { student* pom; while(start != NULL) { pom = start->next; // uvolnime string free(start->meno); free(start->priez); free(start->odbor); // uvolnime aj strukturu free(start); start = pom; } } // zisti celkovy pocet zaznamov int ZistiPocet(student* st) { int poc=0; while(st != NULL) { poc++; st = st->next; } return poc; } // precita zo suboru student* PrecitajDatabazu(student** start) { FILE* f; student* st=*start; f=fopen( SUBOR, "r"); // subor zatial neexistuje if(f==NULL) return *start; // postupne bude vycitavat while(!feof(f)) { st = PridajZaznam(st); // ak je to prvy zaznam if( *start==NULL ) *start = st; } // uzavrieme fclose(f); return st; } // ulozi do suboru void UlozDatabazu(student* st) { FILE* f; f=fopen( SUBOR, "w"); // subor sa neda otvorit if(f==NULL) { printf("Chyba zapisu na disk. Disk je pravdepodobne chraneny proti zapisu."); return; } // vsetky zapiseme while(st != NULL) { st = st->prev; } // uzavrieme fclose(f); } // hlavny program void main() { student* start=NULL; char ch; int poc; // vycita databazu zo suboru student.dat start = PrecitajDatabazu(&start); poc = ZistiPocet(start); // opyta sa co ma robit do { Hlavna(poc); ch=getche(); switch(ch) { case '1': start = PridajZaznam(start); ZadajZaznam(start); poc++; break; case '2': OpravZaznam(start); OtazkaKoniec(); break; case '3': VymazZaznam(&start,&poc); break; case '4': Usporiadaj(&start); OtazkaKoniec(); break; case '5': VypisRocnik(start, OpytajRocnik()); OtazkaKoniec(); break; } }while(ch != '0'); // vycisti pamat UlozDatabazu(start); ZmazVsetko(start); }