Baza Danych - Problem

0

Witam!
Mam do napisania bazę danych. Wybrałam, że będzie to baza biblioteki. Mój problem polega na tym, że pomimo, że program się kompiluje to przy wypisywaniu z pliku na ekranie nic się nie pojawia, jak również nie zapisuje do pliku.

Oto program:

program Biblioteka;
uses crt;

type

Tgatunek=(pamietnik,komedia,dramat);
Tksiazka=record
nr:integer;
tytul:string;
imie_autora:string[20];
nazwisko_autora:string[30];
rok_wydania:integer;
ilosc_stron:integer;
gatunek:Tgatunek;
end;

const
NAZWA_PLIKU='BibKasia.txt';
max_ksiazek=50;
nazwy_gatunkow:array[tgatunek] of string=('pamietnik','komedia','dramat');

var
ksiazka:array[1..max_ksiazek] of Tksiazka;
i,j,licz,y:byte;
c,x:char;
slowo:string;
aktualnie_osob,znalezionych:byte;
gt:Tgatunek;
pom:boolean;
plik,plik2: file of Tksiazka;
ksia:Tksiazka;
blad:byte;
k,u:integer;


procedure policz;
begin
aktualnie_osob:=0;
for i:=1 to max_ksiazek do
if ksiazka[i].tytul<>'' then
inc(aktualnie_osob);
end;

procedure dodaj;
begin
clrscr;
assign(plik, NAZWA_PLIKU);
rewrite(plik);
writeln('Podaj ile ksiazek chcesz dodac do bazy');
readln(u);
for k:=1 to u do

begin
inc(aktualnie_osob);
with ksiazka[aktualnie_osob] do
begin

writeln('**********DODAWANIE NOWYCH POZYCJI KSIAZKOWYCH**********');
writeln('Podaj tytul ksiazki: ');
readln(tytul);
writeln('Podaj imie autora: ');
readln(imie_autora);
writeln('Podaj nazwisko autora: ');
readln(nazwisko_autora);
writeln('Podaj rok wydania ksiazki:');
readln(rok_wydania);
writeln('Podaj ilosc stron ksiazki:');
readln(ilosc_stron);
repeat
pom:=false;
write('Podaj gatunek: '); readln(slowo);
for gt:=pamietnik to dramat do
if slowo=nazwy_gatunkow[gt] then
begin
gatunek:=gt;
pom:=true;
end;
if pom=false then
writeln('Zle podana gatunek. Podaj jeszcze raz ');
until pom=true;
nr:=aktualnie_osob;

end;
write(plik,ksia);
end;
close(plik);
end;


procedure dopisz;

begin
clrscr;
assign(plik,NAZWA_PLIKU);
reset(plik);
blad:=ioresult;
if (blad<>0) then
dodaj
else

begin
writeln('Podaj ile ksiazek chcesz dodac do bazy');
readln(u);
k:=0;
while not(eof(plik)) do
begin

seek(plik,k);
k:=k+1;
end;

for k:=1 to u do


begin
inc(aktualnie_osob);
with ksiazka[aktualnie_osob] do
begin

writeln('**********DODAWANIE NOWYCH POZYCJI KSIAZKOWYCH**********');
writeln('Podaj tytul ksiazki: ');
readln(tytul);
writeln('Podaj imie autora: ');
readln(imie_autora);
writeln('Podaj nazwisko autora: ');
readln(nazwisko_autora);
writeln('Podaj rok wydania ksiazki:');
readln(rok_wydania);
writeln('Podaj ilosc stron ksiazki:');
readln(ilosc_stron);
repeat
pom:=false;
write('Podaj gatunek: '); readln(slowo);
for gt:=pamietnik to dramat do
if slowo=nazwy_gatunkow[gt] then
begin
gatunek:=gt;
pom:=true;
end;
if pom=false then
writeln('Zle podana gatunek. Podaj jeszcze raz ');
until pom=true;
nr:=aktualnie_osob;
write(plik,ksia);
end;
close(plik);
end;
end;
end;

procedure pokaz_dane (encja:Tksiazka);

begin
writeln('Tytul : ');
readln(ksia.tytul);
writeln('Imie autora : ');
readln(ksia.imie_autora);
writeln('Nazwisko autora : ');
readln(ksia.nazwisko_autora);
writeln('Rok wydania : ');
readln(ksia.rok_wydania);
writeln('Gatunek : ');
readln(nazwy_gatunkow[gt]);

end;

procedure usun;
begin
Writeln('Podaj nr ksiazki ktora chcesz usunac: ');
readln(y);
writeln('Czy napewno usunac ksiazke o tytule: ',ksiazka[y].tytul);
writeln(' Autora: ',ksiazka[y].nazwisko_autora,' ',ksiazka[y].imie_autora,'?(t/n)');
repeat
readln(x);
if (x<>'t') and (x<>'n') then writeln('zly znak. wybierz t lub n');
until (x='t') or (x='n');
if x='t' then
begin
writeln('Ksiazka o numerze ',y,' - usunieto!');
ksiazka[y]:=ksiazka[aktualnie_osob];
with ksiazka[aktualnie_osob] do
begin
nazwisko_autora:='';
imie_autora:='';
tytul:='';
rok_wydania:=0;
ilosc_stron:=0;
nr:=0;

end;
end;
policz;
for i:=1 to aktualnie_osob do
ksiazka[i].nr:=i;
end;

procedure ponazwisku;
begin
write('Podaj nazwisko autora : ');
readln(slowo);
clrscr;

for i:=1 to aktualnie_osob do
if slowo=ksiazka[i].nazwisko_autora then
begin
inc(znalezionych);
readln(i);
if znalezionych mod 2 = 0 then

begin
writeln('Nacisnij dowolny klawisz aby kontynuowac...');
x:=readkey;
clrscr;
if x=chr(27) then break;

end;
end;
end;

procedure pogatunku;

begin
write('Podaj gatunek: ');
readln(slowo);
clrscr;

for i:=1 to aktualnie_osob do
if slowo=nazwy_gatunkow[ksiazka[i].gatunek] then

begin
inc(znalezionych);
readln(i);
if znalezionych mod 2 = 0 then

begin
writeln('Nacisnij dowolny klawisz aby kontynuowac...');
x:=readkey;
clrscr;
if x=chr(27) then break;
end;
end;
end;



procedure wypisz;

begin
assign(plik,NAZWA_PLIKU);
reset(plik);
clrscr;
writeln('*****SPIS WSZYSTKICH KSIAZEK*****');
writeln('_________________________________');
while not (eof(plik)) do

begin
read(plik,ksia);
writeln('Tytul : ');
writeln(ksia.tytul);
writeln('Imie autora : ');
readln(ksia.imie_autora);
writeln('Nazwisko autora : ');
readln(ksia.nazwisko_autora);
writeln('Rok wydania : ');
readln(ksia.rok_wydania);
writeln('Ilosc stron : ');
readln(ksia.ilosc_stron);
writeln('Gatunek : ');
readln(nazwy_gatunkow[gt]);
writeln('_____________________________');
close(plik);

begin
inc(znalezionych);
readln(i);
if znalezionych mod 2 = 0 then

begin
writeln('Nacisnij dowolny klawisz aby kontynuowac...');
x:=readkey;
clrscr;
if x=chr(27) then break;

end;
end;
end;
end;
procedure menu;
begin
gotoxy(1,1);
writeln('r.',aktualnie_osob);
writeln('1 - Dodaj ksiazki do bazy');
writeln('2 - Wyswietlanie zawartosci biblioteki');
writeln('3 - wyszukaj osoby po gatunku');
writeln('4 - dodaj osobe');
writeln('5 - sortowanie po wieku (od najmlodszych)');
writeln('7 - usuwanie osob');
writeln('z - zakoncz');
c:=readkey;
case c of
'1': dodaj ;
{begin
clrscr;
for i:=1 to aktualnie_osob do
begin
readln(i);
if i mod 2 = 0 then
begin
writeln('Nacisnij dowolny klawisz aby kontynuowac...');
x:=readkey;
clrscr;
if x=chr(27) then break;
end;
end;
end; }
'2': wypisz;
'3': pogatunku;
'4': dodaj;
{'5': po_wieku;}
'7': usun;
{'q': zapis2;}
else c:='z';
end;
end;

begin

policz;
repeat
clrscr;

menu;
readkey;
until c='z';
end.
0

A kodu to w znaczniki nie łaska wrzucić..?

Jeśli nie sformatujesz kodu do stanu "czytelności" to nie sądzę, żeby komukolwiek chciało się go analizować; Poza tym jak masz problem z jedną funkcją/procedurą to wstaw jej kod + dodatkowe ważne informacje, a nie cały, którego 90% w ogóle nie dotyczy problemu;

Wątek przenoszę do działu dla początkujących, bo widać brakuje Ci informacji o podstawach kodzenia i szukania błędów w programie;

0

w dodaj() robisz rewrite, na pewno tak ma być?
kod jest koszmarnie nieczytelny, stosuj wcięcia.
używasz zmiennych globalnych jako zmiennych lokalnych (np. ksia). duplikujesz kod. usiłujesz zapisać do pliku string (zapisze się tylko wskaźnik; musisz zdefiniować długość < 256, żeby zamiast wskaźnika był po prostu ciąg danych). ogólnie - kod jest do tego stopnia nieczytelny, że nie widać co jest nie tak. close jest, reset jest, write jest, więc nie ma oczywistych nieprawidłowości.

przepisz to i porozmawiamy ponownie.

0

BYŁO!!!
http://4programmers.net/Forum/Newbie/211948-zapisywanie_rekord_do_pliku_oraz_ich_odczyt_w_programie?p=924726#id924726

Jak napisałem w wątku do którego link zamieściłem powyżej, chyba rzeczywiście machnę art tłumaczący jak oprogramować prostą 'bazę danych' opartą na rekordach...

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