pascal - baza danych (problem)

Forum Rozmawiamy
Odpowiedz
08.10.2011 14:46
1
odpowiedz
PkSrlz
71
Konsul

pascal - baza danych (problem)

bazę robiłem na podstawie bazy znajomego to jest jego baza:

Program ProstaBazaDanych;

Const

cMaxKsiazek = 1024; ‹ Maksymalna ilość rekordów w bazie ›
cBoolStr : Array [Boolean] Of String [3] = ('nie', 'tak');
‹ Stała pomocna przy wypisywaniu wartości typu Boolean ›

Type

tBKsiazka = ‹ Rekord książki ›
Record
Tytul : String;
Autor : String [50];
Wydawnictwo : String [50];
Rok : Word;
Pozyczona : Boolean;
End;

tBaza = Array [0..cMaxKsiazek-1] Of tBKsiazka; ‹ Tablica z rekordami ›
tBFile = File Of tBKsiazka; ‹ Typ pliku zawierającego rekordy tBKsiazka ›

Var

Nazwa : String; ‹ Zmienne opisujące bazę ›
Baza : tBaza;
Ilosc : Word;

Wybor : Char; ‹ Zmienna pomocnicza dla menu ›

‹ - Wejście i wyjście ------------------------------------------------------ ›

Procedure Wczytaj(I: Word); ‹ Wczytywanie rekordu o indeksie I ›
Var
S : String; ‹ Zmienna pomocnicza ›

Begin
If (I<Ilosc) Then ‹ Typ Word i tak nie zawiera wartości ujemnych ›
With Baza Do ‹ Do tego służy instrukcja wiążąca ›
Begin
WriteLn('Podaj informacje o książce ', I, ':');
Write('Tytuł... ');
If (Tytul<>'') Then Write('[', Tytul, '] ');
ReadLn(Tytul);
Write('Autor... ');
If (Autor<>'') Then Write('[', Autor, '] ');
ReadLn(Autor);
Write('Wydawnictwo... ');
If (Wydawnictwo<>'') Then Write('[', Wydawnictwo, '] ');
ReadLn(Wydawnictwo);
Write('Rok... ');
If (Rok<>0) Then Write('[', Rok, '] ');
ReadLn(Rok);
Write('Czy tak książka jest pożyczona? [', cBoolStr[Pozyczona], '] ');
ReadLn(S);
Pozyczona:=(S='tak');
End;
End;


Procedure Wypisz(I: Word); ‹ Wypisywanie jednego rekordu o indeksie I ›
Begin
If (I<Ilosc) Then
With Baza Do
Begin
Write(' ', I, '. ');
Write(Autor, ' - ', '"', Tytul, '", wyd. ');
Write(Wydawnictwo, ' ', Rok, '. Pożyczona: ', cBoolStr[Pozyczona], '.');
WriteLn;
End;
End;

‹ - Wejście i wyjście koniec ----------------------------------------------- ›

‹ - Operacje na danych ----------------------------------------------------- ›

Procedure Pokaz; ‹ Procedura pokazuje zakres rekordów z bazy ›
Var
I, Ia, Ib : Word;

Begin
Write('Podaj dolną granicę indeksów książek, które chcesz pokazać... ');
ReadLn(Ia);
Write('Podaj górną granicę [', cMaxKsiazek, ' dla wszystkich rekordów]... ');
ReadLn(Ib);
WriteLn;
For I:=Ia To Ib Do
Wypisz(I);
End;

Procedure Edytuj; ‹ Procedura służy do edycji danego rekordu w bazie ›
Var
I : Word;

Begin
Write('Podaj indeks rekordu, który chcesz edytować... ');
ReadLn(I);
WriteLn;
Wczytaj(I);
If (I>=Ilosc) Then
WriteLn('Taki rekord nie istnieje - nie możesz go edytować.');
End;

Procedure Dodaj; ‹ Procedura dodaje, a następnie pozwala na edycję rekordu ›
Begin
If (Ilosc<cMaxKsiazek) Then
Begin
Inc(Ilosc); ‹ Zwiększamy ilość ksiązek w bazie ›
WriteLn;
Wczytaj(Ilosc-1); ‹ Edytujemy ostatni rekord ›
End
Else
WriteLn('Baza jest pełna - nie można dodać więcej książek.');
End;

Procedure Usun; ‹ Procedura usuwa pewien zakres rekordów z bazy ›
Var
I, Ia, Ib, Il : Word;

Begin
Write('Podaj dolną granicę indeksów książek, które chcesz usunąć... ');
ReadLn(Ia);
Write('Podaj górną granicę... ');
ReadLn(Ib);
If (Ia<Ilosc) And (Ib<Ilosc) And (Ib>=Ia) Then
Begin
Il:=Ib-Ia+1;
For I:=Ib+1 To Ilosc-1 Do
Baza[I-Il]:=Baza;
For I:=Ilosc-Il To Ilosc-1 Do
With Baza Do
Begin
Tytul:='';
Autor:='';
Wydawnictwo:='';
Rok:=0;
Pozyczona:=False;
End;
Dec(Ilosc, Il);
End
Else
WriteLn('Nieprawidłowe granice - nie można usunąć rekordów.');
End;

‹ - Operacje na danych koniec ---------------------------------------------- ›

‹ - Operacje na plikach ---------------------------------------------------- ›

Procedure Otworz;
Var
F : tBFile; ‹ Ten typ powinien być zadeklarowany wcześniej ›

Begin
Write('Podaj nazwę pliku z bazą danych (ENTER - nowa baza)... ');
ReadLn(Nazwa);
If (Nazwa<>'') Then
Begin
Assign(F, Nazwa); ‹ Otwieramy plik o nazwie S ›
ReSet(F); ‹ Przygotowujemy plik do odczytu ›
While (Not EoF(F)) Do ‹ EoF(F: File) zwraca True jeśli jesteśmy ›
Begin ‹ na końcu pliku ›
Read(F, Baza[Ilosc]); ‹ Czytamy zmienną z pliku F ›
Inc(Ilosc);
End;
Close(F); ‹ Na koniec zamykamy plik ›
End;
End;


Procedure Zapisz;
Var
F : tBFile;
I : Word;

Begin
If (Nazwa='') Then
Begin
Write('Podaj nazwę pliku, do którego chcesz zapisać bazę... ');
ReadLn(Nazwa);
End;
Assign(F, Nazwa); ‹ Otwieramy plik ›
ReWrite(F); ‹ Czyścimy plik i przygotowujemy do zapisu ›
For I:=0 To Ilosc-1 Do
Write(F, Baza); ‹ Zapisujemy zmienną do pliku F ›
Close(F); ‹ Zamykamy plik ›
End;

‹ - Operacje na plikach koniec --------------------------------------------- ›

Begin
Ilosc:=0; ‹ Czyścimy bazę danych ›
WriteLn('Witaj w Prostej Bazie Danych!');
Otworz; ‹ Wczytujemy bazę z pliku ›
Repeat
WriteLn; ‹ Menu ›
WriteLn('Co chcesz zrobić?');
WriteLn(' 1. Pokazać rekord(y)');
WriteLn(' 2. Edytować rekord');
WriteLn(' 3. Dodać nowy rekord');
WriteLn(' 4. Usunąć rekord(y)');
WriteLn(' 5. Zapisać pracę i zakończyć działanie programu');
Write('Twój wybór [1-5]... ');
ReadLn(Wybor); ‹ Wybór użytkownika ›
WriteLn;
Case (Wybor) Of
'1' : Pokaz; ‹ Pokazujemy rekordy ›
'2' : Edytuj; ‹ Edytujemy rekord ›
'3' : Dodaj; ‹ Dodajemy rekord ›
'4' : Usun; ‹ Usuwamy rekordy ›
'5' : ‹ Nic ›;
Else WriteLn('Nie ma takiej opcji');
End;
Until (Wybor='5');
Zapisz; ‹ Zapisujemy bazę ›

End.

a to jest moja baza:

‹START›

program sklep;

const

cmaxfarb = 1024; ‹ <-- maksymalna ilosc rekordow w naszej bazie ›
cboolstr : array [Boolean] of string [3] = ('nie', 'tak');
‹ stała pomocna przy wypisywaniu wartości typu Boolean
bolean jest typem zmiennej przechowujący wartość prawda lub fałsz›

Type

tbfarba = ‹ rekord farby ›
record
Firma : string;
Przeznaczenie : string [50];
Rodzaj : string [50];
Cena : word;
Dostepnosc : boolean;
end;

tbaza = array [0..cmaxfarb-1] Of tbfarb; ‹ <-- tablica z rekordami ›
tbfile = file Of tbfarba; ‹ <-- typ pliku zawierajacego dane tbfarba ›

var

nazwa : string; ‹ <-- zmienne opisujace baze ›
baza : tbaza;
ilosc : word;

wybor : char; ‹ <-- zdeklarowana zmienna pomocnicza do menu ›

‹poczatek procedury›

procedure wczytaj(I: word); ‹ <-- wczytywany jest rekord o indeksie I ›
var
s : string; ‹ <-- kolejna zmienna pomocnicza ›

begin
if (I<ilosc) then
with Baza do
begin
writeln('prosze o podanie firmy, ktora produkuje interesujaca Cie farbe ', I, ':');
Write('Firma... ');
if (Firma<>'') then write('[', Firma, '] ');
readln(Firma);
write('Przeznaczenie... ');
if (Przeznaczenie<>'') then write('[', Przeznaczenie, '] ');
readln(Przeznaczenie);
write('Rodzaj... ');
if (Rodzaj<>'') then write('[', Rodzaj, '] ');
readln(Rodzaj);
write('Cena... ');
if (Cena<>0) then write('[', Cena, '] ');
readln(Cena;
write('Czy farba jest dostepna na magazynie? [', cboolstr[Dostepnosc], '] ');
readln(s);
Dostepnosc:=(s='tak');
end;
end;
‹koniec procedury›

‹poczatek procedury›

procedure wypisz(I: word); ‹<-- wypisywanie jednego rekordu o indeksie I ›
begin
uf (I<ilosc) then
with baza do
begin
write(' ', I, '. ');
write(Przeznaczenie, ' - ', '"', Firma, '", rodz. ');
write(Wydawnictwo, ' ', Cena, '. Dostepnosc: ', cboolstr[Dostepnosc], '.');
writeln;
end;
end;

‹koniec procedury›

‹operacje na danych›

procedure pokaz; ‹ <-- procedura ma za zadanie pokazywac zakres rekordow ›
var
I, Ia, Ib : word;

begin
write('Podaj dolną granicę indeksów książek, które chcesz pokazać... ');
readln(Ia);
write('Podaj górną granicę [', cmaxfarb, ' dla wszystkich rekordów]... ');
readln(Ib);
writeln;
for I:=Ia to Ib do
wypisz(I);
end;


procedure edytuj; ‹ <-- procedura sluzaca do edycji danego rekordu ›
var
I : word;

begin
write('prosze podac indeks rekordu, który chcesz edytować... ');
readln(I);
writeln;
wczytaj(I);
if (I>=ilosc) then
writeLn('niestety podany przez Ciebie rekord nie istnieje - nie możesz go edytować.');
end;

procedure dodaj; ‹ <-- procedura odpowiedzialna za dodawanie ale rownież pozwala na edycję rekordu ›
begin
if (ilosc<cmaxfarb) then
begin
inc(ilosc); ‹ <-- zwiekszamy ilosc farb w bazie ›
writeln;
wczytaj(ilosc-1); ‹ <-- edycja ostatniego rekordu ›
end
else
writeln('przepraszamy, nasza baza jest pelna - nie można dodać więcej farb.');
end;

procedure usun; ‹ <-- procedura odpowiedzialna za usuwanie z pewnego zakresu ›
var
I, Ia, Ib, Il : word;

begin
write('prosze podac dolną granicę indeksów farb, które chcesz usunąć... ');
readln(Ia);
write('prosze podac górną granicę... ');
readLn(Ib);
if (Ia<ilosc) and (Ib<ilosc) and (Ib>=Ia) then
begin
Il:=Ib-Ia+1;
for I:=Ib+1 to ilosc-1 do
baza[I-Il]:=baza;
for I:=ilosc-Il to ilosc-1 do
with baza do
begin
Firma:='';
Przeznaczenie:='';
Rodzaj:='';
Cena:=0;
Dostepnosc:=false;
end;
dec(ilosc, Il);
end
else
writeln('niestety ale podane granice sa nieprawidlowe - nie można usunąć rekordów.');
end;

‹koniec operacji na danych›

‹poczatek operacji na plikach ›

procedure otworz;
var
f : tbfile; ‹ <-- ten typ powinien byc zdeklarowany wczesniej... ›

begin
write('podaj nazwę pliku z bazą danych (ENTER - nowa baza)... ');
readln(nazwa);
if (nazwa<>'') then
begin
assign(f, nazwa); ‹ <-- otwieramy plik o nazwie S ›
reset(f); ‹ <-- plik jest przygotowywany do odczytu ›
while (not EoF(f)) do ‹ EoF(f: file) zwraca true jeśli jesteśmy ›
begin ‹ na końcu pliku ›
read(f, baza[ilosc]); ‹ <-- czytamy zmienna z pliku F ›
inc(ilosc);
end;
close(f); ‹ <-- zamykamy nasz plik ›
end;
end;


procedure zapisz; ‹jak sama jej nazwa wskazuje, procedura bedzie odpowiedzialna za zapis danych›
var
f : tbfile;
I : word;

begin
if (nazwa='') then
begin
write('prosze podac nazwe pliku, do ktorego chcesz zapisac baze danych... ');
readln(nazwa);
end;
assign(f, nazwa); ‹ <-- otwieramy nasz plik ›
rewrite(f); ‹ <-- czyscimy plik oraz przygotowujemy do zapisu ›
for I:=0 to ilosc-1 do
write(f, baza); ‹ <-- zapisujemy zmienna do pliku F ›
close(F); ‹ <-- zamykamy nasz plik ›
end;

‹ koniec operacji na plikach›


begin
ilosc:=0; ‹ <-- w tym miejscu czyścimy naszą bazę danych "sklepu z farbami" ›
writeLn('Dominik i Kamil witaja Cie w swoim sklepie!');
otworz; ‹ <-- baza jest wczytywana z pliku ›
repeat
writeLn; ‹ menu naszej bazy danych ›
writeLn('Co chcesz zrobić?');
writeLn(' 1. Pokazać rekord(y)');
writeLn(' 2. Edytować rekord');
writeLn(' 3. Dodać nowy rekord');
writeLn(' 4. Usunąć rekord(y)');
writeLn(' 5. Zapisać pracę i zakończyć działanie programu');
write('Twój wybór [1-5]... ');
readln(wybor); ‹ wybór użytkownika ›
writeln;
case (wybor) of
'1' : Pokaz; ‹ <-- pokazujemy rekordy ›
'2' : Edytuj; ‹ <-- edytujemy rekordy ›
'3' : Dodaj; ‹ <-- dodajemy rekordy ›
'4' : Usun; ‹ <-- usuwamy rekordy ›
'5' : ‹ nic ›;
else writeln('nie ma takiej opcji w naszym menu');
end;
until (wybor='5');
zapisz; ‹ zapisujemy nasza baze ›

End.

‹STOP›

pascala niby się nie używa no ale w naszej szkole jeszcze jednak jest ale nie ważne... mam problem gdyż pozmieniałem zmienne tak by działała pod moją i kumpla, z którym robiliśmy potrzeby, np. zmienne o nazwie "Ksiażki" pozmieniałem na "Farby" tak by pasowały do naszego sklepu... lecz podczas próby kompilowanie wyskakuje nam:

lul.pas<52,25> Error: identifiter not fount "Firma"
lul.pas<52,52> Error: identifiter not fount "Firma"
lul.pas<27,43> Error: error in type definiction

oraz kilka z "Przeznaczenie"
Error: identifiter not found "Przeznaczenie"
oraz kilka z "Rodzaj"
Error: identifiter not found "Rodzaj"
oraz kilka z "Cena"
Error: identifiter not found "Cena"
a na samym dole raportu:
Error: syntax error, ">" expected but ";" found

czy może ktoś zerknąć i powiedzieć, w którym miejscu są błędy? zdaję sobie sprawę, że baza nie jest idealna ale taka też nie ma być

dzięki z góry za pomoc:)

Forum Forum Rozmawiamy
Odpowiedz

GRYOnline.pl:

Facebook GRYOnline.pl Instagram GRYOnline.pl X GRYOnline.pl Discord GRYOnline.pl TikTok GRYOnline.pl Podcast GRYOnline.pl WhatsApp GRYOnline.pl LinkedIn GRYOnline.pl Forum GRYOnline.pl

tvgry.pl:

YouTube tvgry.pl TikTok tvgry.pl Instagram tvgry.pl Discord tvgry.pl Facebook tvgry.pl