| | 
15.01.2004, 23:22
# 1 swi-prolog - kann mir da wer helfen? hyhy!
wir haben in der schule die aufgabe bekommen nen bibliotheksprogramm in prolog zu realisieren!
ich bin soweit "fertig" ich habe zwar hier und da noch paar sache ndie ich noch machen will, abe rnicht bevor das problem gelöst ist!
also hier mal der quell code des programmes: Code: % Autor: Thomas
% EMail: thomas@saldix.de
% Datum: 14.01.2004
% Datei: programm.pl
% Zusaetzliche Datei: datensaetze.pl
%--begin: start
start:-
begruessung,
daten_laden,
menue.
%--end: start
%--begin: begruessung
begruessung:-
writeln('Herzlich Willkommen zur Bibliotheksverwaltung!'),nl.
%--end: begruessung
%--begin: daten laden
daten_laden:-
consult('datensaetze.pl').
%--end: daten laden
%--begin: menue
menue:-
nl,writeln('------ Main Menue------'),
writeln('Katalog................(1)'),
writeln('Leserdatei*************(2)'),
writeln('Ausleihe / Rueckgabe...(3)'),
writeln('Ende*******************(0)'),nl,
write('Ihre Wahl:'),
get_char(Ch),skip(10),
ausfuehren(Ch),
Ch \='0',!,menue.
%--end: menue
%--begin: katalog
ausfuehren('1'):-
katalog.
%--begin: katalog - menue
katalog:-
write('------ Katalog Menue ------'),nl,
writeln('Katalog Anzeigen.(1)'),
writeln('Buch hinzufuegen*(2)'),
writeln('Buch loeschen....(3)'),
writeln('Menue************(0)'),
write('Ihre Wahl:'),
get_char(Ch3),skip(10),
katalog(Ch3),
Ch3 \='0',!,katalog.
katalog.
%--end: katalog - menue
katalog('1'):-
write('------ Anzeige Katalog ------'),nl,
katalog(Titel,Autor,Jahr,Sig),
write('Titel: '),write(Titel),nl,
write('Autor: '),write(Autor),nl,
write('Erscheinungsjahr: '), write(Jahr),nl,
write('Signatur: '),write(Sig),nl,nl,fail.
katalog('1').
katalog('2'):-
write('------ Buch hinzufuegen ------'),nl,
writeln('Buchtitel?'),
lese_string(Titel),nl,
writeln('Autor?'),
lese_string(Autor),nl,
writeln('Erscheinungsjahr?'),
lese_string(Jahr),nl,
writeln('Buchsignaturr?'),
lese_string(Sig),nl,
assertz(katalog(Titel,Autor,Jahr,Sig)),speichern,nl.
katalog('2').
katalog('3'):-
buch_loeschen, speichern.
buch_loeschen:-
write('------ Buch loeschen ------'),nl,
writeln('Buchtitel?'), lese_string(Titel),nl,
writeln('Buchsignatur?'), lese_string(Sig),nl,
retract(katalog(Titel,_,_,Sig)),fail.
buch_loeschen.
%--end katalog
%--begin: leserdatei
ausfuehren('2'):-
leserdatei.
%--begin: katalog - menue
leserdatei:-
write('------ Leserdatei Menue ------'),nl,
writeln('Lesedatei Anzeigen.(1)'),
writeln('Leser hinzufuegen**(2)'),
writeln('Leser loeschen.....(3)'),
writeln('Menue**************(0)'),
write('Ihre Wahl:'),
get_char(Ch4),skip(10),
leserdatei(Ch4),
Ch4 \='0',!,leserdatei.
leserdatei.
%--end: katalog - menue
leserdatei('1'):-
write('------ Lerserdatei ------'),nl,
leserdatei(Lesernummer,Name,Vorname),
write('Lesernummer: '),write(Lesernummer),nl,
write('Nachname: '),write(Name),nl,
write('Vorname: '),write(Vorname),nl,nl,fail.
leserdatei('1').
leserdatei('2'):-
writeln('------ Leser hinzufuegen ------'),nl,
writeln('Lesernummer?'), lese_string(Lesernummer),nl,
writeln('Nachname?'), lese_string(Name),nl,
writeln('Vorname?'), lese_string(Vorname),nl,
assertz(leserdatei(Lesernummer,Name,Vorname)),speichern,nl.
leserdatei('3'):-
leser_loeschen, speichern.
leser_loeschen:-
writeln('------ Leser loeschen ------'),nl,
writeln('Lesernummer?'), lese_string(Lesernummer),nl,
writeln('Nachname?'), lese_string(Name),nl,
writeln('Vorname?'), lese_string(Vorname),nl,
retract(leserdatei(Lesernummer,Name,Vorname)),fail.
leser_loeschen.
%--end: leserdatei
%--begin: ausleihe
ausfuehren('3'):-
ausleihen.
%--begin: ausleihe - menue
ausleihen:-
write('------ Ausleihe / Rueckgabe Menue ------'),nl,
writeln('Ausgeliehen.(1)'),
writeln('Eingabe*****(2)'),
writeln('Loeschen....(3)'),
writeln('Menue*******(0)'),
write('Ihre Wahl:'),
get_char(Ch2),skip(10),
ausleihen(Ch2),
Ch2 \='0',!,ausleihen.
ausleihen.
%--end: ausleihe - menue
ausleihen('1'):-
write('------ Anzeige Ausgeliehen ------'),nl,
ausleihe(Sig,Lesernummer,Rueckgabedatum),
write('Signatur: '),write(Sig),nl,
write('Lesernummer: '),write(Lesernummer),nl,
write('Rueckgabedatum: '),write(Rueckgabedatum),nl,nl,fail.
ausleihen('1').
ausleihen('2'):-
write('------ Eingabe Ausleihen ------'),nl,
writeln('Buchsignatur?'),
lese_string(Sig),nl,
writeln('Lesernummer?'),
lese_string(Lesernummer),nl,
writeln('Rueckgabedatum?'),
lese_string(Rueckgabedatum),nl,
assertz(ausleihe(Sig,Lesernummer,Rueckgabedatum)),speichern,nl.
ausleihen('3'):-
rueckgabe, speichern.
rueckgabe:-
write('------ Rueckgabe ------'),nl,
writeln('Buchsignatur?'), lese_string(Sig),nl,
writeln('Lersernummer?'), lese_string(Lesernummer),nl,
retract(ausleihe(Sig,Lesernummer,_)),fail.
rueckgabe.
%--end: ausleihe
%-----------------------------------------------------------------------------
%--begin: speichern
speichern:-
writeln('Daten werden nun gepeichert....'),
tell('datensaetze.pl'),
listing(katalog),
listing(leserdatei),
listing(ausleihe),told,
writeln('Daten wurden gespeichert.....').
%--end: speihcern
lese_string(E):-
readln([E|_], _, _, " 0123456789",uppercase), !.
lese_string('').
mit der regel speichern, speicher man halt die die sachen in die datei datensaetze.pl ab! aber er hat da noch unendlcih viele sachen hinein!
hier der code von der datensaetze.pl: Code:
katalog :-
write('------ Katalog Menue ------'),
nl,
writeln('Katalog Anzeigen.(1)'),
writeln('Buch hinzufuegen*(2)'),
writeln('Buch loeschen....(3)'),
writeln('Menue************(0)'),
write('Ihre Wahl:'),
get_char(A),
skip(10),
katalog(A),
A\='0', !,
katalog.
katalog.
katalog('1') :-
write('------ Anzeige Katalog ------'),
nl,
katalog(A, B, C, D),
write('Titel: '),
write(A),
nl,
write('Autor: '),
write(B),
nl,
write('Erscheinungsjahr: '),
write(C),
nl,
write('Signatur: '),
write(D),
nl,
nl,
fail.
katalog('1').
katalog('2') :-
write('------ Buch hinzufuegen ------'),
nl,
writeln('Buchtitel?'),
lese_string(A),
nl,
writeln('Autor?'),
lese_string(B),
nl,
writeln('Erscheinungsjahr?'),
lese_string(C),
nl,
writeln('Buchsignaturr?'),
lese_string(D),
nl,
assertz(katalog(A, B, C, D)),
nl.
katalog('2').
katalog('3') :-
buch_loeschen.
:- dynamic katalog/4.
katalog(buch1, ich1, '1901', sig1).
katalog(buch2, ich2, '1902', sig2).
katalog(buch3, ich3, '1903', sig3).
katalog(ww, ww, ww, ww).
leserdatei :-
write('------ Leserdatei Menue ------'),
nl,
writeln('Lesedatei Anzeigen.(1)'),
writeln('Leser hinzufuegen**(2)'),
writeln('Leser loeschen.....(3)'),
writeln('Menue**************(0)'),
write('Ihre Wahl:'),
get_char(A),
skip(10),
leserdatei(A),
A\='0', !,
leserdatei.
leserdatei.
leserdatei('1') :-
write('------ Lerserdatei ------'),
nl,
leserdatei(A, B, C),
write('Lesernummer: '),
write(A),
nl,
write('Nachname: '),
write(B),
nl,
write('Vorname: '),
write(C),
nl,
nl,
fail.
leserdatei('1').
leserdatei('2') :-
writeln('------ Leser hinzufuegen ------'),
nl,
writeln('Lesernummer?'),
lese_string(A),
nl,
writeln('Nachname?'),
lese_string(B),
nl,
writeln('Vorname?'),
lese_string(C),
nl,
assertz(leserdatei(A, B, C)),
nl.
leserdatei('3') :-
leser_loeschen.
:- dynamic leserdatei/3.
leserdatei(lnum1, name1, vorname1).
leserdatei(lnum2, name2, vorname2).
leserdatei(lnum3, name3, vorname3).
:- dynamic ausleihe/3.
ausleihe(sig1, lnum1, '1.1.1904').
ausleihe(sig2, lnum2, '2.2.1904').
das einziegste was eigendlci hdrin stehen sollte ist: Code: :- dynamic katalog/4.
katalog(buch1, ich1, '1901', sig1).
katalog(buch2, ich2, '1902', sig2).
katalog(buch3, ich3, '1903', sig3).
katalog(ww, ww, ww, ww).
:- dynamic leserdatei/3.
leserdatei(lnum1, name1, vorname1).
leserdatei(lnum2, name2, vorname2).
leserdatei(lnum3, name3, vorname3).
:- dynamic ausleihe/3.
ausleihe(sig1, lnum1, '1.1.1904').
ausleihe(sig2, lnum2, '2.2.1904').
was ja an der ganzen sache am koriosisten ist das er vor ":- dynamic katalog/4." und vor ":- dynamic leserdatei/3" den ganen rotz schreibt, aber nicht vor ":- dynamic ausleihe/3." obwohl das speichern überhaupt nicht anders gelöst wurde!
weiß da einer rat?
EDIT: die datein angefügt! | | |
| |