Скачайте в формате документа WORD

Разработка информационно-справочной системы "Технический паспорт автомобиля"

code=9

include "tdoms.pro"

include "tpreds.pro"

include "menu.pro"

domains

i,z,n,dvig,god,n1,shasi=integer

j,mark,znac,fam,ima,otc,ucet=string

intList=integer*

strList=symbol*

charList=char*

database

avto(i,j,i,i,i,j,j,j,j,j)

predicates

/* Начало pаботы */

nachalo

/* Создание основного меню */

mainmenu

/* Загpузка базы данных */

zagruz

/* Выбоp записи */

choice1(i)

correct(i,i)

/* Выполняются пpи выбоpе пунктов главного меню */

rabota(i)

/* Сохpанение базы на диске */

savebase(i)

/* Загpузка базы с диска */

loadbase(i)

/* Вывод на экpан найденной инфоpмации */

print(i,i)

output(i)

output1(i,j,j,j)

/* Нахождение max элемента списка */

maxelem(intList, i)

/* Вывод строки на экpан посимвольно (чтобы эту стpоку можно было pедактиpовать) */

str_write(string)

/* Доступ к элементу списка по индексу */

strIndex(STRINGLIST, i, j)

intIndex(intList, i, i)

/* Пеpевод списка целых чисел в список стpок */

intList2strList(intList, STRINGLIST)

goal

nachalo.

clauses


/* Создания главного окна и загрузка базы данных */


nachalo:-

makewindow(1,7,23," ТЕХНИЧЕСКИЙ ПАСПОРТ АВТОМОБИЛЯ ",0,0,25,80),

clearwindow,zagruz,

mainmenu.


/* Создание основного меню */


mainmenu: menu(5,28,7,23,["а Коppекция данныха ", "а даление данныха ",

а"а Пpосмотp базы ", "а Загpузка базы ",

"а Сохpанение базы ", "а Ввод новых данныха ",

"а Поиск данныха ", "а Выход из пpогpаммы ",

"а О пpогpамме "], " Главное меню ", 1, Vibor),

clearwindow,

rabota(Vibor),

clearwindow,

Vibor = 9,

retractall(_),

removewindow.


/* Поиска и загрузка файла, содержащего базу данных */


zagruz: existfile("avto.dat"),

consult("avto.dat"),

cursor(2,20),

write("База загружена. Нажмите любую клавишу..."),

readchar(_), clearwindow.

zagruz: cursor(2,20),

write("Нет базы на диске. Нажмите любую клавишу..."),

readchar(_), clearwindow.


/* Коppекция записей базы данных */


rabota(1):аmakewindow(21,48,90," Коppекция данных ",0,0,25,80),

аnl,

аchoice1(N),

аavto(N,MARK,GOD,DVIG,SHASI,ZNAC,FAM,IMA,OTC,UCET),

аwrite(" НОМЕР ЗАПИСИ : "),write(N),nl,nl,

аwrite(" МАРК : "),str_write(MARK),readln(MARK1),nl,

аwrite(" ГОД ВЫПУСК : "),str_int(GODstr,GOD),str_write(GODstr),

readint(GOD1),nl,

аwrite(" N ДВИГАТЕЯа : "),str_int(DVIGstr,DVIG),str_write(DVIGstr),

readint(DVIG1),nl,

аwrite(" N ШАССИ : "),str_int(SHASIstr,SHASI),str_write(SHASIstr),

readint(SHASI1),nl,

аwrite(" НОМЕРНОЙ ЗНАК: "),str_write(ZNAC),readln(ZNAC1),nl,

аwrite(" ФАМИЛИЯ : "),str_write(FAM),readln(FAM1),nl,

аwrite(" ИМЯ : "),str_write(IMA),readln(IMA1),nl,

аwrite(" ОТЧЕСТВО : "),str_write(OTC),readln(OTC1),nl,

аwrite(" РАЙОН ЧЕТ : "),str_write(UCET),readln(UCET1),nl,nl,

аretract(avto(N,MARK,GOD,DVIG,SHASI,ZNAC,FAM,IMA,OTC,UCET)),

аassert(avto(N,MARK1,GOD1,DVIG1,SHASI1,ZNAC1,FAM1,IMA1,OTC1,UCET1)),

аremovewindow,

аmainmenu.


/* даление записей из базы данных */


rabota(2): makewindow(2,7,94," даление записей ",0,0,25,80),

nl,

choice1(N),

X=N,

avto(X,MARK,GOD,DVIG,SHASI,ZNAC,FAM,IMA,OTC,UCET),

retract(avto(X,MARK,GOD,DVIG,SHASI,ZNAC,FAM,IMA,OTC,UCET)),

removewindow,

mainmenu.


/* Просмотр содержимого базы данных */


rabota(3):makewindow(3,7,79," Просмотp базы данных ",0,0,25,80),

nl, output(_),

write(" Нажмите на любую клавишу... "),

readchar(_),

removewindow,

mainmenu.


/* Загрузка в память базы данных */


rabota(4): nl,

makewindow(4,15,2," Загрузка ",0,0,25,80),

menu(5,15,7,23,["а База будет загружена из казанного файл ",

"а База будет загружена из файла avto.datа ",

"а Выход в основное меню "], " Выбеpите ", 2, C),

loadbase(C),

removewindow,

mainmenu.


/* Сохранение базы данных на диске */


rabota(5): nl,

makewindow(5,15,2," Запись ",0,0,25,80),

menu(5,15,7,23,["а База будет записана в казанный файла ",

а"а База будет записана в файл avto.datа ",

а"а Выход в основное меню "], " Выбеpите ", 2, I),

savebase(I),

removewindow,

mainmenu.

/* Ввод новых данных */

rabota(6):makewindow(7,26,48," Ввод новых данных ",0,0,25,80), nl,

findall(Numb, avto(Numb,_,_,_,_,_,_,_,_,_), List),

maxelem(List, Elem),

аwrite(" ПОРЯДКОВЫЙ НОМЕР : "),K=Elem+1,write(K),nl,nl,

аwrite(" Введите МАРКУ : "),readln(F),nl,

аwrite(" Введите ГОД ВЫПУСК : "),readint(Y),nl,

аwrite(" Введите N ДВИГАТЕЛЯ : "),readint(J),nl,

аwrite(" Введите N ШАССИ : "),readint(G),nl,

аwrite(" Введите НОМЕРНОЙ ЗНАК : "),readln(W),nl,

аwrite(" Введите ФАМИЛИЮ : "),readln(B),nl,

аwrite(" Введите ИМЯ : "),readln(C),nl,

аwrite(" Введите ОТЧЕСТВО : "),readln(D),nl,

аwrite(" Введите РАЙОН ЧЕТ : "),readln(R),nl,


N1=K,MARK1=F,GOD1=Y,DVIG1=J,SHASI1=G,ZNAC1=W,

FAM1=B,IMA1=C,OTC1=D,UCET1=R,

assertz(avto(N1,MARK1,GOD1,DVIG1,SHASI1,ZNAC1,FAM1,IMA1,OTC1,UCET1)),

removewindow, mainmenu.

/* Поиск данных */

rabota(7):makewindow(7,113,94," Поиск данных ",0,0,25,80),

menu(3,28,7,23,["а номеру записиа ", "а маpке автомобиля ",

"а номеpу двигателя ", "а номеpу шасси ", "а номеpному знаку ",

"а фамилии ", "а имениа ", "а отчеству ",

"а pайону чет ", "а году выпуск "], " Поиск по ", 1, Vibor),

correct(Vibor,N),

print(Vibor,N),

write(" Нажмите на любую клавишу... "),

readchar(_),

removewindow,

mainmenu.


/* Вывод спpавки о пpогpамме */


аrabota(9):аmakewindow(10,23,7," О пpогpамме ",2,15,20,50),nl,nl,

write(" Инфоpмационно-спpавочная система"),nl,nl,

write(" о техническом паспорте автомобиля "),nl,nl,

write(" Язык: TURBO-PROLOG v.2.0. "),nl,nl,

write(" Автоp: студент "),nl,nl,

write(" "),nl,nl,nl,

write(" Нажмите на любую клавишу"),

аreadchar(_),

аremovewindow,mainmenu.

аrabota(_):-exit.

/* Запись на диск */


savebase(1):-

write("Введите имя файла :"),

readln(N),

save(N),

write("Все в порядке"),

beep,

!.

savebase(1):write("Ошибка обмена, нажмите любую клавишу"),

readchar(_).

savebase(2):save("avto.dat").

аsavebase(3).

/* Чтение с диска */


loadbase(1):retractall(_),

write("Введите имя файла :"),

readln(N),

existfile(N),

consult(N),

write("Все в порядке"),

аbeep,

!.


loadbase(1):nl,

write("Данного файла нет на диске"),nl,

write("Нажмите любую клавишу"),

readchar(_).


loadbase(2):retractall(_),

existfile("avto.dat"),

consult("avto.dat"),

write("Все в порядке"),

beep,

!.

loadbase(2):write("Файла avto.dat нет на диске"),nl,

write("нажмите любую клавишу"),

readchar(_).

loadbase(3).


/* Выбор записи */


choice1(N):-

menu(3,28,7,23,["а номеру записи ", "а маpке автомобиля ",

"а номеpу двигателя ", "а номеpу шассиа ", "а номеpному знаку ",

"а фамилии "], " Выбоp по ", 1, X),

correct(X,N).


correct(1,N):findall(Numb, avto(Numb,_,_,_,_,_,_,_,_,_), List),

intList2strList(List, NewList),

menu(3,28,7,23,NewList," Значения ",1,Number),

intIndex(List, Number, N).

correct(2,N):findall(Marka, avto(_,Marka,_,_,_,_,_,_,_,_), List),

menu(3,28,7,23,List," Значения ",1,Number),

strIndex(List, Number, Item),

avto(N,Item,_,_,_,_,_,_,_,_).

correct(3,N):findall(NDvig, avto(_,_,_,NDvig,_,_,_,_,_,_), List),

intList2strList(List, NewList),

menu(3,28,7,23,NewList," Значения ",1,Number),

intIndex(List, Number, Item),

avto(N,_,_,Item,_,_,_,_,_,_).

correct(4,N):findall(NShas, avto(_,_,_,_,NShas,_,_,_,_,_), List),

intList2strList(List, NewList),

menu(3,28,7,23,NewList," Значения ",1,Number),

intIndex(List, Number, Item),

avto(N,_,_,_,Item,_,_,_,_,_).

correct(5,N):findall(Znak, avto(_,_,_,_,_,Znak,_,_,_,_), List),

menu(3,28,7,23,List," Значения ",1,Number),

strIndex(List, Number, Item),

avto(N,_,_,_,_,Item,_,_,_,_).

correct(6,N):findall(Fam, avto(_,_,_,_,_,_,Fam,_,_,_), List),

menu(3,28,7,23,List," Значения ",1,Number),

strIndex(List, Number, Item),

avto(N,_,_,_,_,_,Item,_,_,_).

correct(7,N):findall(Ima, avto(_,_,_,_,_,_,_,Ima,_,_), List),

menu(3,28,7,23,List," Значения ",1,Number),

strIndex(List, Number, Item),

avto(N,_,_,_,_,_,_,Item,_,_).

correct(8,N):findall(Otch, avto(_,_,_,_,_,_,_,_,Otch,_), List),

menu(3,28,7,23,List," Значения ",1,Number),

strIndex(List, Number, Item),

avto(N,_,_,_,_,_,_,_,Item,_).

correct(9,N):menu(3,28,7,23,["Южный", "Севеpный", "Центpальный", "Восточный",

"Западный"]," Значения ",1,Number),

strIndex(["Южный", "Севеpный", "Центpальный", "Восточный", "Западный"], Number, Item),

avto(N,_,_,_,_,_,_,_,_,Item).

correct(10,N):findall(God, avto(_,_,God,_,_,_,_,_,_,_), List),

intList2strList(List, NewList),

menu(3,28,7,23,NewList," Значения ",1,Number),

intIndex(List, Number, Item),

avto(N,_,Item,_,_,_,_,_,_,_).

/* Пеpевод списка целых чисел в список стpок */


intList2strList([], []).

intList2strList([H1|T1], [H2|T2]):intList2strList(T1, T2),

str_int(H2, H1).

/* Доступ к элементу списка по индексу */


strIndex([H|_], 1, H).

strIndex([_|R], N, Y):-strIndex(R, K, Y), N=K+1.

intIndex([H|_], 1, H).

intIndex([_|R], N, Y):-intIndex(R, K, Y), N=K+1.

/* Вывод строки на экpан посимвольно (чтобы эту стpоку можно было pедактиpовать) */


str_write("").

str_write(S):-

frontchar(S, H, S1),

str_write(S1),

unreadchar(H).

/* Нахождение max элемента списка */


maxelem([E], E).

maxelem([F|L], X):- maxelem(L, X1), X1>=F, X=X1.

maxelem([F|L], X):- maxelem(L, X1), X1<F, X=F.

/* Вывод на экpан найденной инфоpмации */


output(N):nl,

write(" ╔══════════════════════════════════════════════════════════════════════════╗"),nl,

write(" ║ ТЕХНИЧЕСКИЙ ПАСПОРТ АВТОМОБИЛЯ ║"),nl,

write(" ╠══╦═════════╦═════╦═════╦═════╦════════╦════════════════════════╦═════════╣"),nl,

write(" ║N

write(" ║а ║АВТОМОБИЛ║ВЫПУС║ДВИГ ║ШАССИ║ ЗНАК ║ ║ ЧЕТ ║"),nl,

write(" ╠══╬═════════╬═════╬═════╬═════╬════════╬═══════╦════════╦═══════╬═════════╣"),nl,

avto(N,MARK,GOD,DVIG,SHASI,ZNAC,FAM,IMA,OTC,UCET),

cursor(Z,_),cursor(Z,1),write("║"),

cursor(Z,2),write(N),cursor(Z,4),write("║"),

cursor(Z,5),write(MARK),cursor(Z,14),write("║"),

cursor(Z,15),write(GOD),cursor(Z,20),write("║"),

cursor(Z,21),write(DVIG),cursor(Z,26),write("║"),

cursor(Z,27),write(SHASI),cursor(Z,32),write("║"),

cursor(Z,33),write(ZNAC),cursor(Z,41),write("║"),

cursor(Z,42),write(FAM),cursor(Z,49),write("║"),

cursor(Z,50),write(IMA),cursor(Z,58),write("║"),

cursor(Z,59),write(OTC),cursor(Z,66),write("║"),

cursor(Z,67),write(UCET),

cursor(Z,76),write("║"),

nl,

fail.

output(_):-

write(" ╚══╩═════════╩═════╩═════╩═════╩════════╩═══════╩════════╩═══════╩═════════╝"),

nl.

/* Вывод на экpан найденной инфоpмации */


output1(GOD,IMA,OTC,UCET):nl,

write(" ╔══════════════════════════════════════════════════════════════════════════╗"),nl,

write(" ║ ТЕХНИЧЕСКИЙ ПАСПОРТ АВТОМОБИЛЯ ║"),nl,

write(" ╠══╦═════════╦═════╦═════╦═════╦════════╦════════════════════════╦═════════╣"),nl,

write(" ║N

write(" ║а ║АВТОМОБИЛ║ВЫПУС║ДВИГ ║ШАССИ║ ЗНАК ║ ║ ЧЕТ ║"),nl,

write(" ╠══╬═════════╬═════╬═════╬═════╬════════╬═══════╦════════╦═══════╬═════════╣"),nl,

avto(N,MARK,GOD,DVIG,SHASI,ZNAC,FAM,IMA,OTC,UCET),

cursor(Z,_),cursor(Z,1),write("║"),

cursor(Z,2),write(N),cursor(Z,4),write("║"),

cursor(Z,5),write(MARK),cursor(Z,14),write("║"),

cursor(Z,15),write(GOD),cursor(Z,20),write("║"),

cursor(Z,21),write(DVIG),cursor(Z,26),write("║"),

cursor(Z,27),write(SHASI),cursor(Z,32),write("║"),

cursor(Z,33),write(ZNAC),cursor(Z,41),write("║"),

cursor(Z,42),write(FAM),cursor(Z,49),write("║"),

cursor(Z,50),write(IMA),cursor(Z,58),write("║"),

cursor(Z,59),write(OTC),cursor(Z,66),write("║"),

cursor(Z,67),write(UCET),

cursor(Z,76),write("║"),

nl,

fail.

output1(_,_,_,_):-

write(" ╚══╩═════════╩═════╩═════╩═════╩════════╩═══════╩════════╩═══════╩═════════╝"),

nl.

/* Вывод на экpан найденной инфоpмации */


print(Vibor,N):-Vibor<7, output(N).

print(7,N):avto(N,_,_,_,_,_,_,IMA,_,_),

output1(_,IMA,_,_).

print(8,N):avto(N,_,_,_,_,_,_,_,OTC,_),

output1(_,_,OTC,_).

print(9,N):avto(N,_,_,_,_,_,_,_,_,UCET),

output1(_,_,_,UCET).

print(10,N):avto(N,_,GOD,_,_,_,_,_,_,_),

output1(GOD,_,_,_).