Mówię na wstępie, że program nie jest ukończony. Ale próbuje co pewien czas kompilować, żeby wyłapywać mniejsze lub większe błędy, które mogą zmieniać całą strukturę programu.
Mam dwa błędy jeden dziwny a drugi może prze zemnie(razem czy osobno?).
Oto błędy:
projekt1.pas(160,22) Error: Illegal qualifier
projekt1.pas(160,24) Fatal: Syntax error, ")" expected but "." found
projekt1.pas(0) Fatal: Compilation aborted
Pierwszy odpowiada za tą linijkę:
- if ((tablica[i].s) > (tablica[i+1].s)) then**
W tym programie zastosowałem sortowanie bąbelkowe, s to jest ustawiana na sztywno zmienna w stringu gdzie przechowuje dane co chce sortować np wg numeru faktury i przekazuje numer, i tu jest problem z drugim. Czy ta myśl jest dobra ? Czy ten program można skrócić ? Dziękuje za wszelkie uwagi. Działam na FPC.
To jest cały kod
program nazwa;
uses crt;
type
Data_wystawienia=record
Data:integer;
Miesiac:integer;
Rok:integer;
end;
Data_oplacenia=record
Data:integer;
Miesiac:integer;
Rok:integer;
end;
faktura=record
numer : integer;
numer_klienta : integer;
sposob_oplaty : string[10];
suma_netto :integer;
upust :integer;
Data:Data_wystawienia;
Data1:Data_oplacenia;
Vat:integer;
end;
var
Tablica : array[1 .. 50] of faktura;
plik_faktur : file of faktura;
plik : string;
procedure wczytaj(plik:string; x:integer; var q:integer);
var i : integer;
begin
repeat
writeln('Podaj ilosc faktur. (nie wiecej niz 50)');
readln(q);
until (q >= 1) and (q <= 50);
writeln('Wczytywanie danych do programu.');
for i := 1 to q do
begin
with tablica[i] do
begin
Writeln('Podaj dane ', i, ' faktury: ');
Write('Podaj numer faktury: ');
readln(numer);
Write('Podaj numer klienta: ');
readln(numer_klienta);
//repeat
Write('Podaj sposob zaplaty (gotowka/kredyt): ');
readln(sposob_oplaty);
//until Upcase(sposob_oplaty) in (['GOTOWKA','KREDYT']);
Write('Podaj sume netto: ');
readln(suma_netto);
Write('Podaj ilosc upustu: ');
readln(upust);
Write('Podaj date wystawienia faktury: ');
with tablica[i].Data do
begin
writeln('Podaj date: ') ;
readln(Data);
writeln('Podaj miesiac: ');
readln(Miesiac);
writeln('Podaj rok: ');
readln(Rok);
end;
Writeln('Podaj date oplacenia: ');
with tablica[i].Data1 do
begin
writeln('Podaj date: ') ;
readln(Data);
writeln('Podaj miesiac: ');
readln(Miesiac);
writeln('Podaj rok: ');
readln(Rok);
writeln('Podaj ilosc VAT - u.');
readln(vat);
end;
end;
writeln('Byla to faktura nr.', i);
writeln('Aby kontynuowac wcisnij ENTER.');
readln;
end;
Assign(plik_faktur, plik);
if x = 1 then
begin
Reset(plik_faktur);
Seek(plik_faktur, filesize(plik_faktur));
end
else
Rewrite(plik_faktur);
for i := 1 to q do
Write(plik_faktur, Tablica[I]);
Writeln('Utworzylem plik z danymi.');
Writeln('Aby kontynuowac wcisnij ENTER');
Close(plik_faktur);
Readln;
end;
procedure wypisz(plik : string);
var i : integer;
begin
writeln('Wypisanie danych z pliku: ');
assign(plik_faktur, plik);
reset(plik_faktur);
for i := 1 to filesize(plik_faktur) do
begin
read(plik_faktur, Tablica[i]);
with tablica[i] do
begin
Writeln('Dane o ', i, ' fakturze: ');
Write('Numer faktury: ');
writeln(numer);
Write('Numer klienta: ');
writeln(numer_klienta);
Write('Sposob zaplaty: ');
writeln(sposob_oplaty);
writeln('Suma netto: ');
writeln(suma_netto);
writeln('Ilosc upustu: ');
writeln(upust);
with tablica[i].Data do
begin
writeln('Data wystawienia faktury: ');
writeln('Dzien: ');
writeln(Data);
writeln('Miesiac: ');
writeln(Miesiac);
writeln('Rok: ');
writeln(Rok);
end;
with tablica[i].Data1 do
begin
writeln('Data zaplaty faktury: ');
writeln('Dzien: ');
writeln(Data);
writeln('Miesiac: ');
writeln(Miesiac);
writeln('Rok: ');
writeln(Rok);
end;
writeln('Vat: ');
writeln(vat);
writeln('Byly to informacje o fakturze nr.',i);
writeln('Aby kontynuowac wcisnij ENTER.');
end;
readln;
end;
Close(plik_faktur);
end;
procedure babelkowe(s:string; var tablica:faktura);
var j,p,i:integer; x:faktura;
begin
for j:=filesize(plik_faktur) downto 1 do
begin
p := 1;
for i := 1 to j do
if ((tablica[i].s) > (tablica[i+1].s)) then
begin
x := tablica[i]; tablica[i] := tablica[i+1]; tablica[i+1] := x;
p := 0;
end;
if p = 1 then break;
end;
end;
procedure sortowanie;
var z:byte; s:string;
begin
repeat
writeln('Wedlug czego chcesz posortowac dane ?');
writeln('1 - Numer faktury.');
writeln('2 - Numer klienta');
writeln('3 - Sposob zaplaty');
writeln('4 - Suma netto');
writeln('5 - Upust');
writeln('Data wystawienia faktury');
writeln('6 - Dzien.');
writeln('7 - Miesiac');
writeln('8 - Rok.');
writeln('Date oplacenia faktury');
writeln('9 - Dzien.');
writeln('10 - Miesiac');
writeln('11 - Rok.');
readln(z);
until (z>=1) and (z<=7);
case z of
1:
begin
writeln('Sortuje');
Delay(2000);
s:='numer';
babelkowe(s,tablica);
writeln('Dane zostaly posortowane wg Numeru faktury.');
writeln('Aby kontynuowac wcisnij ENTER');
readln;
end;
2:
begin
writeln('Sortuje');
s:='numer_klienta';
babelkowe(s,tablica);
Delay(2000);
writeln('Dane zostaly posortowane wg');
end;
function FileExists(const FileName : string) : Boolean;
var F : file;
begin
{$I-}
Assign(F, FileName);
Reset(F);
Close(F);
{$I+}
FileExists := IOResult = 0;
end;
procedure wybor(var plik : string; var q : integer);
var a, x, z : integer; label Rammus; // KOTWICA
begin
writeln('Podaj nazwe pliku: ');
Readln(plik);
if FileExists(plik) then
begin
Rammus :
repeat
writeln('Plik o danej nazwie istnieje. Mozesz teraz skorzystac z nastepujacych funkcji:');
writeln('1 - Podanie nowej nazwy pliku');
writeln('2 - Skasowanie zawartosci pliku i zapisanie w nim nowych informacji.');
writeln('3 - Dopisanie danych na koncu pliku.');
readln(a);
case a of
1 :
begin
writeln('Podaj nowa nazwe: ');
Readln(plik);
if FileExists(plik) then goto Rammus;
writeln('Zmieniono nazwe pliku na: ', plik);
end;
2 :
begin
writeln('Kasuje zawartosc pliku.');
Delay(4000);
wczytaj(plik, x, q);
end;
3 :
begin
writeln('Dopisywanie danych na koncu pliku');
x := 1;
wczytaj(plik, x, q);
end;
else
begin
writeln('Bledny wybor.');
z := 1;
end;
end;
until z <> 1;
end;
end;