2 ПРАКТИЧЕСКОЕ ОБОСНОВАНИЕ РАБОТЫ
2.1 Разработка оконного интерфейса
Для более удобного взаимодействия пользователя с программой существует возможность разработки оконного интерфейса. Окно – это прямоугольная область на экране дисплея, которая ведет себя подобно целому экрану. Использование окон позволяет выводить информацию на часть экрана, не затрагивая уже имеющегося в других местах изображения. В Прологе можно одновременно организовывать на экране несколько окон. Одно из них считается активным, и достаточно просто перейти от одного активного окна к другому, не указывая вновь его характеристики.
Для работы с окнами существую следующие предикаты:
1. Предикат makewindow – создание окна. Перечислим аргументы предиката в порядке их следования: номер окна, цвет экрана и текста, цвет рамки, позиция верхней строки, позиция левой колонки, число строк, число колонок;
2. Предикат removewindow – удаление окна;
3. Предикат clearwindow – осуществляет очистку содержимого окна;
4. Предикат shiftwindow – выполняет активизацию окна, номер окна указывается в аргументе при вызове предиката;
5. Предикат cursor – выполняет перемещение курсора в требуемое место окна, заданно двумя целыми числами: номером строки и номером колонки.
2.2 Описание меню
В данной программе реализованы меню (Приложение 2):
showmenu - главное меню, в котором содержатся пункты вывода информации базы данных, а также осуществляется выход из программы и вызов следующих подменю:
1) menu_ydalenie – меню удаления данных из базы;
2) menu_dobavlenie – меню добавления данных в базу;
3) menu_poisk – меню поиска данных в базе, которое в свою очередь может вызывать ещё 4 подменю:
a) menu_poisk_sportsmena – поиск спортсмена по критериям,
b) menu_poisk_kluba – поиск клуба по критериям,
c) menu_poisk_sooruzheniya – поиск сооружения по критериям,
d) menu_poisk_sorevnovaniya – поиск соревнования по критериям;
4) menu_zapros – меню запросов.
Реализация главного меню:
showmenu:-
shiftwindow(1),clearwindow,
cursor(2,1),write("1 - spisok sportsmenov"),nl,
cursor(3,1),write("2 - spisok klubov"),nl,
cursor(4,1),write("3 - spisok sooruzhenij"),nl,
cursor(5,1),write("4 - spisok sorevnovanij"),nl,
cursor(6,1),write("5 - ydalenie"),nl,
cursor(7,1),write("6 - dobavlenie"),nl,
cursor(8,1),write("7 - soxranenie"), nl,
cursor(9,1),write("8 - poisk"),nl,
cursor(10,1),write("9 - zaprosi"),nl,
cursor(11,1),write("10 - vixod").
Все подменю реализованы по одному принципу, представим программный код одного из них (menu_ydalenie):
menu_ydalenie:- clearwindow,
cursor(2,1),write("1 - sportsmena"),nl,
cursor(3,1),write("2 - kluba"),nl,
cursor(4,1),write("3 - soruzheniya"),nl,
cursor(5,1),write("4 - sorevnovaniya"),nl,
cursor(6,1),write("5 - vozvrat v glavnoe menu"),nl,nl,
cursor(8,1),write("Vvedite punkt menu ->"),readint(C),
C>=1,C<=5,!,vibor1(C);vibor1(5).
Для завершения работы с программой необходимо выбрать пункт главного меню программы 10 – vixod. После выбора данного пункта пользователю будет предложено сохранить изменения, произведенные им в базе данных. После чего база данных сохраняется, и удаляются из оперативной памяти все записи, предикат removewindow удаляет три созданных окна, или это происходит без сохранения изменений в базе:
vibor(10):-
clearwindow,write("Soxranitizmeneniya?(y/n)"),readchar(Ch),Ch='y', clearwindow, save_db, nl, write("Dlya vixoda nazhmite lybyyu klavishy"), readchar(_), ret, removewindow, removewindow, removewindow; ret,
removewindow, removewindow, removewindow.
2.3 Организация работы с динамической базой данных
В данной курсовой работе информация содержится в динамической базе данных:
- о спортсменах
database -db_sportsm
sportsm(IDi,name,katsl,L);
- о клубах
database -db_klub
klub(IDg,nazv,kol,specg,nvid);
- о сооружениях
database -db_soor
sooruzhen(IDm,mnach,mzav,prot);
- о видах спорта
database -db_vid
vid(IDv,nvid,trener);
- о соревнованиях
database -db_sorev
sorevnov(IDp,specp,IDi,IDg,IDm,Data,Time,katslozh).
- о тренерах
database -db_trener
trener(IDtrener,name,IDv)
Данные для работы с динамической базой данных о спортивных организациях города используется в следующих предикатах:
1) load_db – использует предикат consult для загрузки фактов базы данных;
2) dobavlenie – использует стандартный предикат asseertz для добавления новой записи;
3) save_db – использует предикат save для сохранения базы данных в файл;
4) ret – использует предикат retract для удаления всех записей из оперативной памяти при выходе из программы.
Предикат load_db осуществляет загрузку фактов базы данных из файлов в оперативную память:
load_db:-
existfile("dbs.txt"),/*проверка существования файла с
именем dbs.txt, содержащего информацию о спортсменах*/
consult("dbs.txt",db_sportsm),/*загрузка во внутреннюю базу db_sportsm*/
existfile("dbk.txt"),/*проверка существования файла с
именем dbk.txt, содержащего информацию о спортивных клубах*/
consult("dbk.txt",db_klub), /*загрузка во внутреннюю базу db_klub*/
existfile("dbsoor.txt"),/*проверка существования файла с
именем dbsoor.txt, содержащего информацию о сооружениях*/
consult("dbsoor.txt",db_soor), /*загрузка во внутреннюю базу db_soor*/
existfile("dbsor.txt"),/*проверка существования файла с именем dbsor.txt, содержащего информацию о соревнованиях*/
consult("dbsor.txt",db_sorev). /*загрузка во внутреннюю базу db_sorev*/
existfile("dbv.txt"),/*проверка существования файла с именем dbv.txt, содержащего информацию о видах спорта*/
consult("dbvsor.txt",db_vid). /*загрузка во внутреннюю базу db_vid*/
existfile("dbtrener.txt"),/*проверка существования файла с именем dbtrener.txt, содержащего информацию о тренерах*/
consult("dbtrener.txt",db_trener). /*загрузка во внутреннюю базу db_trener*/
Предикат save_db основан на использовании стандартного предиката save, который сохраняет из внутренней базы данные во внешнюю:
save_db:-
save("dbs.txt",db_sportsm),/*сохранение из внутренней базы db_sportsm в файл dbs.txt*/
save("dbk.txt",db_klub), /*сохранение из внутренней базы db_klub в файл dbk.txt */
save("dbsoor.txt",db_soor), /*сохранение из внутренней базы db_soor в файл dbsoor.txt */
save("dbsor.txt",db_sorev), /*сохранение из внутренней базы db_sorev в файл dbsor.txt */
save("dbv.txt",db_vid), /*сохранение из внутренней базы db_sorev в файл dbv.txt */
save("dbtrener.txt",db_trener), /*сохранение из внутренней базы db_trener в файл dbtrener.txt */
write("Vse soxraneno").
Для удаления всех записей из внутренних баз данных используетя предикат ret:
ret:-
retractall(_),
retractall(_,db_sportsm),/*удаление всех записей из внутренней базы db_sportsm*/
retractall(_,db_klub), /*удаление всех записей из внутренней базы db_ klub*/
retractall(_,db_soor), /*удаление всех записей из внутренней базы db_ soor*/
retractall(_,db_sorev). /*удаление всех записей из внутренней базы db_ sorev*/
|