Sortowanie rekordów w bazie danych.

0

Witam.

Skleiłem jaki oto program, chciałem dodać sortowanie ale nie działa mi to niestety. Może mi ktoś powiedzieć co jest nie tak?

 
program baza;
uses
  crt;

type
   ksiegarnia = record
      tytul, autor, rok, numer:string[20];
      cena: Real;
      ilosc:Byte;
   end;

var
    Klaw,
    Klawisz2:char;
    Licznik:byte;
    t1,p1:byte;
    plik:text;
    p2:single;
    r:array[1..50] of ksiegarnia;

procedure wprowadz;
begin
   clrscr;

   Licznik:=Licznik+1;
   write('Tytul             : ');
   readln(r[Licznik].tytul);
   write('Autor             : ');
   readln(r[Licznik].autor);
   write('Rok    : ');
   readln(r[Licznik].rok);
   write('Numer ISBN: ');
   readln(r[Licznik].numer);
   write('Cena              : ');
   readln(r[Licznik].cena);
   write('Ilosc             : ');
   readln(r[Licznik].ilosc);
end;

procedure pusta;
begin
   writeln('Baza jest aktualnie pusta. Dodaj nowe wpisy lub wczytaj juz istniejace z pliku');
   writeln;
   writeln('Nacisnij jakis klawisz...');
   Klawisz2:=readkey;
end;


procedure wyswietl;
begin
   if Licznik=0
   then
      pusta
   else
   begin
      writeln('Tytul             : ', r[t1].tytul);
      writeln('Autor             : ', r[t1].autor );
      writeln('Rok            : ', r[t1].rok);
      writeln('Numer ISBN: ', r[t1].numer);
      writeln('Cena              : ', r[t1].cena:4:2);
      writeln('Ilosc             : ', r[t1].ilosc);
      writeln('Wartosc           : ', (r[t1].ilosc*r[t1].cena):4:2);
      writeln;
   end
end;

procedure edytuj;
begin
  clrscr;
  if Licznik=0
  then
     pusta
  else
   begin
      writeln('Ktory wpis chcesz edytować (1..', Licznik, ')');
      readln(t1);
      write('Nowy tytul             : ');
      readln(r[t1].tytul);
      write('Nowy autor             : ');
      readln(r[t1].autor);
      write('Nowy rok wydania    : ');
      readln(r[t1].rok);
      write('Nowy numer ISBN: ');
      readln(r[t1].numer);
      write('Nowa cena              : ');
      readln(r[t1].cena);
      write('Nowa ilosc             : ');
      readln(r[t1].ilosc);
   end
end;

procedure wszystko;
begin
  clrscr;
  if (Licznik<>0) then
  begin
     t1:=0;
     repeat
        t1:=t1+1;
        wyswietl;
     until t1=Licznik;
  end
end;

procedure zapisz;
begin
  if Licznik=0 then
   begin
      clrscr;
      pusta;
   end
  else
   begin
      assign(plik, 'BAZA.txt');
      rewrite(plik);

      writeln(plik, Licznik);
      t1:=0;
      repeat
         t1:=t1+1;

         writeln(plik, r[t1].tytul);
         writeln(plik, r[t1].autor);
         writeln(plik, r[t1].rok);
         writeln(plik, r[t1].numer);
         writeln(plik, r[t1].cena);
         writeln(plik, r[t1].ilosc);

      until t1=Licznik;
      close(plik);
   end
end;

procedure czytaj;
begin
  assign(plik, 'BAZA.txt');
  reset(plik);
  readln(plik, Licznik);
  t1:=0;
  repeat
    t1:=t1+1;

    readln(plik, r[t1].tytul);
    readln(plik, r[t1].autor);
    readln(plik, r[t1].rok);
    readln(plik, r[t1].numer);
    readln(plik, r[t1].cena);
    readln(plik, r[t1].ilosc);

  until t1=Licznik;
  close(plik);
end;

procedure usun;
begin
  clrscr;
  if Licznik=0 then pusta
  else
   begin
      writeln('Podaj numer wpisu do usuniecia (1..', Licznik, ')');
      readln(t1);
   repeat
      r[t1].tytul:=  r[t1+1].tytul;
      r[t1].autor:=  r[t1+1].autor;
      r[t1].rok:= r[t1+1].rok;
      r[t1].numer:= r[t1+1].numer;
      r[t1].cena:=   r[t1+1].cena;
      r[t1].ilosc:=  r[t1+1].ilosc;
      t1:=t1+1;
   until t1=Licznik;
   Licznik:=Licznik-1;
   end
end;


procedure info;
begin
  if Licznik=0 then pusta
  else
   begin
   t1:=0;
   p1:=0;
   p2:=0;
   repeat
     t1:=t1+1;
     p1:=p1+r[t1].ilosc;
     p2:=p2+(r[t1].ilosc*r[t1].cena);
   until t1=Licznik;
   if p1=1
      then writeln('Posiadasz ', p1, ' ksiazke o wartosci ', p2:4:2, ' zl.');
   if (p1=2) or (p1=3) or (p1=4)
      then writeln('Posiadasz ', p1, ' ksiazki o lacznej wartosci ', p2:4:2, ' zl.');
   if p1>=5
      then writeln('Posiadasz ', p1, ' ksiazek o lacznej wartosci ', p2:4:2, ' zl.');

   writeln('Nacisnij jakis klawisz...');
   Klawisz2:=readkey;
   end
end;

procedure soruj_wg_nazwy(n:integer;var t:ksiegarnia);
var i,j:integer;
procedure zamien_dane(var a,b:ksiegarnia);
var c:ksiegarnia;
begin
  c:=a;
  a:=b;
  b:=c;
end;
begin
for i:=1 to n-1 do
  for j:=1 to n-i do
    if t[j].tytul>t[j+1].tytul then zamien_dane(t[j],t[j+1])

 end;
procedure sort;
begin
        Licznik:= 0;

   repeat
      writeln('1. Sorotwanie wedlug tytulu');
      writeln('2. Sortowanie wedlug autora');
      writeln('3. Sortowanie wedlug roku');
      writeln('4. Sortowanie wedlug ceny');
      writeln('5. Sortowanie wedlug roku wwydania');
      writeln('6. <-- Powrot ');

      repeat Klaw:= readkey; until (Klaw>='1') and (Klaw<='6');
      if Klaw='1' then sortuj;




      until Klaw='6';


end;

begin


   Licznik:= 0;

   repeat
      clrscr;
      writeln('1. Nowy wpis');
      writeln('2. Usun wpis');
      writeln('3. Wyswietlanie wpisu');
      writeln('4. Wyswietlanie wszystkich wpisw');
      writeln('5. Odczyt z pliku');
      writeln('6. Zapis do pliku');
      writeln('7. Stan zbioru ksiazek' );
      writeln('8. Sortuj');
      writeln('9. Koniec programu');
     

      repeat Klaw:= readkey; until (Klaw>='1') and (Klaw<='9');

      if Klaw='1' then wprowadz;
      if Klaw='2' then usun;
      if Klaw='3' then
        begin
           clrscr;
           write('Podaj numer wpisu (1..', Licznik, '): ');
           readln(t1);
           wyswietl;
           writeln;
           writeln('Wcisnij jakis klawisz...');
           Klawisz2:=readkey;
        end;
      if Klaw='4' then begin wszystko; info; end;
      if Klaw='5' then czytaj;
      if Klaw='6' then zapisz;
      if Klaw='7' then begin clrscr; info; end;
      if Klaw='8' then begin clrscr; sort; end;


   until Klaw='9';
end.
0
myju napisał(a):

Może mi ktoś powiedzieć co jest nie tak ?
To że brakuje kodu procedury sortuj którą próbujesz wywołać?

0

To już poprawiłem, nie potrafię napisać procedury która sprawę po tytule lub autorze.

1 użytkowników online, w tym zalogowanych: 0, gości: 1