Witam!
Piszę bazę danych z użyciem stosów i wskaźników. Jest to baza danych z filmami. Baza jest już ukończona, lecz chciałbym dodać opcję wyświetlania Top 10 filmów wg ocen lecz kompletnie nie wiem jak się do tego zabrać :oops:
Programiści - pomóżcie! :roll:
program baza;
uses crt;
type
wdane=^dane;
dane=record
tytul:string[30];
rezyser:string[40];
ocena:real;
gatunek:string[15];
cenadvd:real;
wsk:wdane;
end;
plik=file of dane;
var
filmy:wdane;
p:plik;
procedure dodaj(var wierzcholek:wdane);
var
poprzedni:wdane;
pom:string;
begin
repeat
clrscr;
writeln('Wprowadź tytuł filmu... (pozostaw puste by zakończyć dopisywanie) '); readln(pom);
if pom <> '' then
begin
poprzedni:=wierzcholek;
new(wierzcholek);
with wierzcholek^ do begin
tytul:=pom;
write('Wprowadź imię i nazwisko reżysera... ');
readln(rezyser);
write('Wprowadź ocenę filmu... (w skali 0-10) ');
readln(ocena);
write('Wprowadź gatunek filmu... ');
readln(gatunek);
write('Wprowadź cenę DVD filmu...');
readln(cenadvd);
wsk:=poprzedni;
clrscr;
end;
end;
until pom='';
end;
procedure wyswietl(wierzcholek:wdane);
begin
clrscr;
while wierzcholek<>NIL do
begin
with wierzcholek^ do begin
writeln('Tytuł filmu: ',tytul);
Writeln('Reżyser: ',rezyser);
Writeln('Ocena: ',ocena:0:2);
Writeln('Gatunek: ',gatunek);
writeln('Cena DVD: ',cenadvd:0:2);
Writeln;
wierzcholek:=wsk;
end;
end;
readln;
end;
Procedure szukaj(wierzcholek:wdane);
var
szuk:string;
begin
Writeln('Podaj tytuł filmu, którego szukasz...');
readln(szuk);
while wierzcholek<>NIl do
begin
with wierzcholek^ do
If szuk=tytul then begin
writeln('Tytuł filmu: ',tytul);
Writeln('Reżyser: ',rezyser);
Writeln('Ocena: ',ocena:0:2);
Writeln('Gatunek: ',gatunek);
writeln('Cena DVD: ',cenadvd:0:2);
writeln;
end;
wierzcholek:=wierzcholek^.wsk;
end;
readln;
end;
Procedure adresnaz(wierzcholek:wdane);
var
szukane,szukanee:string;
begin
Writeln('Podaj tytuł filmu, którego szukasz...');
readln(szukane);
Writeln('Podaj reżysera, którego szukasz...');
readln(szukanee);
while wierzcholek<>NIl do
begin
with wierzcholek^ do begin
If (szukane=tytul) and (szukanee=rezyser) then begin
writeln('Tytuł filmu: ',tytul);
Writeln('Reżyser: ',rezyser);
Writeln('Ocena: ',ocena:0:2);
Writeln('Gatunek: ',gatunek);
Writeln('Cena DVD: ',cenadvd:0:2);
writeln;
end;
end;
wierzcholek:=wierzcholek^.wsk;
end;
readln;
end;
Procedure dodawanie(var wierzcholek:Wdane);
var
poprzedni:wdane;
pom:string;
begin
repeat
clrscr;
writeln('Wprowadź tytuł filmu... (naciśnij ENTER by zakończyć) ');
readln(pom);
if pom <> '' then
begin
poprzedni:=wierzcholek;
new(wierzcholek);
with wierzcholek^ do begin
tytul:=pom;
write('Wprowadź imię i nazwisko reżysera... ');
readln(rezyser);
write('Wprowadź ocenę... ');
readln(ocena);
write('Wprowadź gatunek...');
readln(gatunek);
write('Wprowadź cenę DVD...');
readln(cenadvd);
wsk:=poprzedni;
clrscr;
end;
end;
until pom='';
end;
Procedure zapisywanie(var wierzcholek:Wdane; var p:Plik);
var
pom:wdane;
begin
assign(p,'Stos');
rewrite(p);
while wierzcholek<> NIL do
begin
Write(p,wierzcholek^);
pom:=wierzcholek^.wsk;
dispose(wierzcholek);
wierzcholek:=pom;
end;
Close(p);
end;
Procedure odczytzpliku(var wierzcholek:Wdane;var p:Plik);
var
pom:dane;
poprzedni:wdane;
begin
assign(p,'Stos');
reset(p);
While not eof(p) do begin
poprzedni:=wierzcholek;
read(p,pom);
new(wierzcholek);
wierzcholek^.tytul:=pom.tytul;
wierzcholek^.rezyser:=pom.rezyser;
wierzcholek^.ocena:=pom.ocena;
wierzcholek^.gatunek:=pom.gatunek;
wierzcholek^.cenadvd:=pom.cenadvd;
wierzcholek^.wsk:=poprzedni;
end;
close(p);
end;
procedure menu(var p:plik;filmy:wdane);
var
caser:byte;
begin
repeat
clrscr;
writeln('-------------BAZA-----DANYCH-------------');
writeln('1 - Tworzenie nowego stosu' );
writeln('2 - Wyswietlanie zawartosci stosu' );
writeln('3 - Dopisywanie danych do stosu');
writeln('4 - Szukanie wg tytułu');
writeln('5 - Szukanie wg tytułu i reżysera');
writeln('6 - Odczyt danych z pliku');
writeln('7 - Zapis danych do pliku');
writeln('8 - Koniec pracy z programem');
readln(caser);
case caser of
1:dodaj(filmy);
2:wyswietl(filmy);
3:dodawanie(filmy);
4:szukaj(filmy);
5:adresnaz(filmy);
6:odczytzpliku(filmy,p);
7:zapisywanie(filmy,p);
end;
until caser=8;
end;
begin
clrscr;
filmy:=Nil;
writeln('Witam w bazie danych! (Wcisnij ENTER by kontynuowac...');
readln;
menu(p,filmy);
end.
Proszę o napisanie procedury top 10 :D