Создание динамической базы данных Turbo Prolog 2.0
Формулировка задачи:
Здравствуйте, делаю лабораторные работы по Turbo Prolog, столкнулась с таким заданием. Дан код:
Задача состоит в следующем:
Модифицируйте программу, добавив в меню пункты:
1) Вывод списка игроков.
2) Сохранение данных в файл.
3) Выборка данных по 1 из трех критериев.
У меня получилось сразу сделать охранение бд в файл.
Domains p_name,k_name, pos, college = string p_number, height, weight, nfl_exp = integer Database dplayer(p_name, k_name,p_number,pos, height,weight,nfl_exp, college) Predicates repeat do_mbase assert_database menu process(integer) clear_database player(p_name, k_name,p_number,pos, height,weight,nfl_exp, college) error Goal do_mbase. Clauses repeat. repeat:-repeat. /*База данных футбол*/ player("Иванов Иван","Спартак",13,"з", 205,90,3, "ГГПИ"). player("Петров Петр","Динамо",96,"пз", 185,78,4, "ГТК"). player("Сидоров Денис","Локомотив",69,"в", 190,88,2, "ГТУ"). player("Васечкин Илья","Торпедо",5,"в", 195,80,5, "ГГПИ"). player("Алексеев Дима","ЦСКА",1,"н", 165,67,2, "ГТК"). player("Карпов Павел","Зенит",12,"н",170,74,1, "ГКК"). /*конец начальных данных*/ assert_database:- player(P_name,K_name,P_number,Pos,Height,Weight,Nfl_exp,College), assertz(dplayer(P_name,K_name,P_number,Pos,Height,Weight,Nfl_exp, College)), fail. assert_database:-!. clear_database:- retract(dplayer(_,_,_,_,_,_,_,_)), fail. clear_database:-!. do_mbase :- assert_database, makewindow(1,7,7," FOOTBALL DATABASE ",0,0,25,80), menu, clear_database. menu :- repeat, clearwindow, nl, write(" ************************************* "),nl, write(" * 1. Добавление нового игрока в БД * "),nl, write(" * 2. Удаление игрока из БД * "),nl, write(" * 3. Просмотр данных * "),nl, write(" * 4. Выход из программы * "),nl, write(" ************************************* "),nl, write(" Пожалуйста, сделайте свой выбор 1, 2, 3 or 4 : "), readint(Vibor),nl,process(Vibor),Vibor = 4,!. /* Добавление информации об игроке в БД */ process(1) :- makewindow(2,7,7,"Добавление данных",2,20,18,58),shiftwindow(2), write("Введите, пожалуйста:"),nl, write("Имя игрока: "), readln(P_name), write("Название клуба: "), readln(K_name), write("Номер игрока: "), readint(P_num), write("Позицию: "), readln(Pos), write("Рост: "), readint(Ht), write("Вес: "), readint(Wt), write("Стаж выступлений: "), readint(Exp), write("Название учебного заведения: "), readln(College), assertz(dplayer(P_name, K_name, P_num,Pos,Ht,Wt,Exp, College)), write(P_name," добавлен в БД"), nl,!, write("Press space bar. "), readchar(_), removewindow, shiftwindow(1). /* Удаление */ process(2) :- makewindow(3,7,7,"Удаление данных",10,30,7,40),shiftwindow(3), write("Введите имя удаляемого игрока: "), readln(P_name), retract(dplayer(P_name,_,_,_,_,_,_,_)), write(P_name," удален из БД "), nl, !, write("Press space bar."), readchar(_), removewindow, shiftwindow(1). /* Просмотр данных об игроке*/ process(3) :- makewindow(4,7,7," Просмотр ", 7,30,16,47), shiftwindow(4), write("Введите имя для просмотра: "), readln(P_name), dplayer(P_name,T_name,P_number,Pos,Ht,Wt,Exp,College),nl, write(" Имя игрока : ",P_name),nl, write(" Название клуба : ",T_name),nl, write(" Номер игрока : ",P_number),nl, write(" Позиция : ",Pos),nl, write(" Рост : ",Ht), nl, write(" Вес : ",Wt),nl, write(" Стаж выступлений : ",Exp), nl, write(" Учебное заведение : ",College),nl, nl,!, write("Press space bar"), readchar(_), removewindow, shiftwindow(1). process(3) :- makewindow(5,7,7," Неудача ",14,7,5,60), shiftwindow(5), write("К сожалению, данных нет."),nl, write("Извините, пока!"),nl,!, write("Press space bar."),readchar(_), removewindow,shiftwindow(1). /* Выход */ process(4) :- write("До новых встреч! "),readchar(_),exit. /*Обработка ошибки*/ process(Vibor):- Vibor<1, error; Vibor>5, error. error:- write("Пожалуйста выберите число от 1 до 4"), write("(Press the spase bar to continue)"),readchar(_).
Domains p_name, k_name, pos, college = string p_number, height, weight, nfl_exp = integer Database dplayer(p_name, k_name, p_number, pos, height, weight, nfl_exp, college) Predicates repeat do_mbase assert_database menu process(integer) clear_database player(p_name, k_name, p_number,pos,height,weight,nfl_exp,college) error Goal do_mbase. Clauses repeat. repeat if repeat. player("Ivanov Ivan", "Spartak",13,"centerdf",205,90,3,"GGPI"). player("Petrov Petr", "Dinamo",96,"dfright",185,78,4,"GTK"). player("Sidorov Denis","Locomotiv",69,"V",190,88,2,"GTU"). player("Vasechkin Ilya","Torpedo",5,"V",195,80,5,"GGPI"). player("Alekseev Dima","CKA",1,"n",165,67,2,"GTK"). player("Karpov Pavel","Zenit",12,"n",170,74,1,"GKK"). assert_database if player(P_name,K_name,P_number,Pos,Height,Weight,Nfl_exp,College), assertz(dplayer(P_name,K_name,P_number,Pos,Height,Weight,Nfl_exp,College)),fail. assert_database if !. clear_database if !. do_mbase if assert_database, makewindow(1,7,7," FOOTBALL DATABASE ",0,0,25,80), menu, clear_database. menu if repeat,clearwindow,nl, write(" *********************************** "),nl, write(" * 1. Add new player in database * "),nl, write(" * 2. Delete player of database * "),nl, write(" * 3. Watching database * "),nl, write(" * 4. Save Database * "),nl, write(" * 5. Exit programm * "),nl, write(" *********************************** "),nl, write(" Please, make your choice 1, 2, 3,4 or 5 : "), readint(Vibor),nl,process(Vibor),Vibor = 5,!. process(1) if makewindow(2,7,7,"Dobavlenie dannix",2,20,18,58),shiftwindow(2), write("Write, please:"),nl, write("Player name: "), readln(P_name), write("Name of club: "), readln(K_name), write("Player number: "), readint(P_num), write("Position: "), readln(Pos), write("Height: "), readint(Ht), write("Weight: "), readint(Wt), write("Game years: "), readint(Exp), write("Name of college: "), readln(College), assertz(dplayer(P_name, K_name, P_num,Pos,Ht,Wt,Exp,College)), write(P_name," Added in database"), nl,!, write("Press space bar. "), readchar(_), removewindow, shiftwindow(1). process(2) if makewindow(3,7,7,"Delete databaase",10,30,7,40),shiftwindow(3), write("Write a delete player name: "), readln(P_name), retract(dplayer(P_name,_,_,_,_,_,_,_)), write(P_name," Deleted in database "), nl, !, write("Press space bar."), readchar(_), removewindow, shiftwindow(1). process(3) if makewindow(4,7,7," Watching ",7,30,16,47), shiftwindow(4), write(" Name for wattching: "), readln(P_name), dplayer(P_name,T_name,P_number,Pos,Ht,Wt,Exp,College),nl, write(" Player name : ",P_name),nl, write(" Name of club : ",T_name),nl, write(" Player number : ",P_number),nl, write(" Position : ",Pos),nl, write(" Height : ",Ht),nl, write(" Weight : ",Wt),nl, write(" Game years : ",Exp),nl, write(" University : ",College),nl,nl,!, write(" Press space bar"), readchar(_), removewindow, shiftwindow(1). process(3) if makewindow(5,7,7," Unluck ",14,7,5,60), shiftwindow(5), write("Nope Database "),nl, write("Goodbuy "),nl,!, write("Press the space bar,"),readchar(_), removewindow,shiftwindow(1). process(4) if write("Enter filename: "), readln(Fname), save(Fname),menu. process(5) if write(" See comeback "), readchar(_),exit. process(Vibor) if Vibor < 1, error; Vibor>6, error. error if write("Please take a nubmer 1 to 5"), write(" (Press the space bar to continue)"),readchar(_).
Решение задачи: «Создание динамической базы данных Turbo Prolog 2.0»
textual
Листинг программы
printDatabase :- player(X,Y,Z...), % сколько их там у Вас, не знаю % потом можно сделать какие-то проверки write(X,Y,Z..), % выводим одну строку fail. % завершаем ветку неуспехом - переход по базе printDatabase. % вторая ветка выполнится, когда база кончится
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д