program Tridni; uses crt; const MaxZaku = 30; JmenoSouboru = 'TRIDA.DAT'; type Zak = record Cislo : longint; Jmeno : string; Prumer : Real; end; SouborZaku = file of Zak; var Trida : array[1..MaxZaku]of Zak; PocetZaku : Integer; Data : SouborZaku; Prikaz : char; procedure Inicializace; begin PocetZaku := 0; assign(Data, JmenoSouboru); reset(Data); end; procedure UlozNaDisk(var Soubor : SouborZaku); var i : integer; begin close(Soubor); rewrite(Soubor); for i := 1 to PocetZaku do write(Soubor,Trida[i]); close(Soubor); writeln('Data se ukladaji do souboru ',JmenoSouboru,'.'); reset(Soubor); end; procedure NactiZDisku(var Soubor : SouborZaku); begin PocetZaku := 0; reset(Soubor); while not(eof(Soubor)) do begin PocetZaku := PocetZaku + 1; read(Soubor,Trida[PocetZaku]); end; writeln('Data se nacitaji ze souboru ',JmenoSouboru); close(Soubor); reset(Soubor); end; procedure NoviZaci; procedure PridejZaka; begin PocetZaku := PocetZaku + 1; with Trida[PocetZaku] do begin Cislo := PocetZaku; write('Jmeno a prijmeni : '); readln(Jmeno); if Jmeno <> '' then begin write('Prumer : '); readln(Prumer); end; end; end; begin writeln('Prazdne jmeno ukonci vstup.'); repeat PridejZaka; if PocetZaku = MaxZaku then writeln('Naplnena kapacita. Ukoncuji vstup.'); until (Trida[PocetZaku].Jmeno = '') or (PocetZaku = MaxZaku); if Trida[PocetZaku].Jmeno = '' then PocetZaku := PocetZaku - 1; UlozNaDisk(Data); end; procedure SeradAbecedne; var Pom : array[1..MaxZaku] of Zak; Min : Zak; i, j, k : integer; begin for i := 1 to PocetZaku do begin Pom[i].Cislo := Trida[i].Cislo; Pom[i].Jmeno := Trida[i].Jmeno; Pom[i].Prumer := Trida[i].Prumer; end; for i := 1 to PocetZaku-1 do begin Min.Cislo := Pom[i].Cislo; Min.Jmeno := Pom[i].Jmeno; Min.Prumer := Pom[i].Prumer; k := i; for j := i+1 to PocetZaku do if (Min.Jmeno > Pom[j].Jmeno) then begin Min.Cislo := Pom[j].Cislo; Min.Jmeno := Pom[j].Jmeno; Min.Prumer := Pom[j].Prumer; k := j; end; Pom[k].Cislo := Pom[i].Cislo; Pom[k].Jmeno := Pom[i].Jmeno; Pom[k].Prumer := Pom[i].Prumer; Pom[i].Cislo := Min.Cislo; Pom[i].Jmeno := Min.Jmeno; Pom[i].Prumer := Min.Prumer; end; for i := 1 to PocetZaku do with Pom[i] do writeln(Jmeno:35,' (prumer : ',Prumer:4:2,', poradove cislo : ',Cislo:4,')'); end; procedure SeradProspechove; var Pom : array[1..MaxZaku] of Zak; Min : Zak; i, j, k : integer; begin for i := 1 to PocetZaku do begin Pom[i].Cislo := Trida[i].Cislo; Pom[i].Jmeno := Trida[i].Jmeno; Pom[i].Prumer := Trida[i].Prumer; end; for i := 1 to PocetZaku-1 do begin Min.Cislo := Pom[i].Cislo; Min.Jmeno := Pom[i].Jmeno; Min.Prumer := Pom[i].Prumer; k := i; for j := i+1 to PocetZaku do if (Min.Prumer > Pom[j].Prumer) then begin Min.Cislo := Pom[j].Cislo; Min.Jmeno := Pom[j].Jmeno; Min.Prumer := Pom[j].Prumer; k := j; end; Pom[k].Cislo := Pom[i].Cislo; Pom[k].Jmeno := Pom[i].Jmeno; Pom[k].Prumer := Pom[i].Prumer; Pom[i].Cislo := Min.Cislo; Pom[i].Jmeno := Min.Jmeno; Pom[i].Prumer := Min.Prumer; end; for i := 1 to PocetZaku do with Pom[i] do writeln(Jmeno:35,' (prumer : ',Prumer:4:2,', poradove cislo : ',Cislo:4,')'); end; procedure RuseniZaku; var Koho : LongInt; procedure SmazZaka(Ktereho : LongInt); var Pom : Zak; i : LongInt; begin i := 0; if Trida[PocetZaku].Cislo = Ktereho then Dec(PocetZaku) else repeat Inc(i); if Trida[i].Cislo = Ktereho then begin Trida[i].Jmeno := Trida[PocetZaku].Jmeno; Trida[i].Prumer := Trida[PocetZaku].Prumer; Dec(PocetZaku); end; until i >= PocetZaku; end; begin write('Vloz cislo, ktereho zaka chces vypustit : '); readln(Koho); SmazZaka(Koho); UlozNaDisk(Data); end; procedure Hlavni_nabidka; begin textbackground(0); clrscr; textcolor(lightred); gotoxy(14,6); writeln('Program na demonstraci databaze zaku a prospechu'); gotoxy(28,8); writeln('David Padrta - IVT 3'); textcolor(lightred); gotoxy(16,11); writeln('ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ'); textcolor(white); gotoxy(16,12); writeln('Vkladani novych zaku : '); gotoxy(16,13); writeln('Ruseni zaku : '); gotoxy(16,14); writeln('Abecedni serazeni dat : '); gotoxy(16,15); writeln('Prospechove serazeni dat : '); textcolor(lightred); gotoxy(16,16); writeln('ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ'); textcolor(white); gotoxy(16,17); writeln('Ukonceni programu : '); textcolor(lightgreen); gotoxy(47,12); writeln('zmackni V nebo v'); gotoxy(47,13); writeln('zmackni R nebo r'); gotoxy(47,14); writeln('zmackni A nebo a'); gotoxy(47,15); writeln('zmackni P nebo p'); gotoxy(47,17); writeln('zmackni K nebo k'); end; BEGIN clrscr; Inicializace; NactiZDisku(Data); repeat Hlavni_nabidka; Prikaz := readkey; writeln; case Prikaz of 'v', 'V' : begin textcolor(white); clrscr; NoviZaci; writeln; writeln('Stiskni ENTER ...'); readln; end; 'r', 'R' : begin textcolor(white); clrscr; RuseniZaku; writeln; writeln('Stiskni ENTER ...'); readln; end; 'a', 'A' : begin textcolor(white); clrscr; SeradAbecedne; writeln; writeln('Stiskni ENTER ...'); readln; end; 'p', 'P' : begin textcolor(white); clrscr; SeradProspechove; writeln; writeln('Stiskni ENTER ...'); readln; end; end; until Prikaz in ['k','K']; UlozNaDisk(Data); END.