ТЕОРЕТИЧЕСКОЕ ОБОСНОВАНИЕ РАБОТЫ
1.1 Разработка базы данных
Разрабатываемая база данных должна использоваться для поиска информации о соревнованиях, спортивных сооружениях, спортсменах и спортивных клубах. Каждый спортсмен будет характеризоваться фамилией, именем и отчеством; категорией максимальной сложности (мастерства) и специализируемыми видами спорта. Каждый спортивный клуб будет характеризоваться названием и администратором клуба. Спортивное сооружение будет характеризоваться названием сооружения и типом покрытия, а также вместительностью. Соревнование будет характеризоваться индивидуальным названием соревнования, датой начала соревнования, временем начала соревнования и категорией сложности соревнования.
Итак, выделены следующие типы связей для описания некоторого соревнования с учетом поставленной задачи:
• спортсмен;
• клуб;
• сооружение;
• вид спорта.
Для организации связи между сущностями спортсменов и клубов следует ввести идентификационный номер сущности клуба, который будет указываться в соответствующем поле сущности спортсмена. Связь сущностей спортсмена и видов спорта, которыми он занимается, организуется посредством идентификационного номера сущности вида спорта, которые указываются в соответствующем списке и информации о спортсменах. Для того, что бы связать сущность сооружения, в которых проходят соревнования, и сущность соревнования следует также ввести идентификационные номера сущности сооружений, которые будут указываться в сущности о соревнованиях. Спортсмены клубов участвуют в соревнованиях, для этого в сущности о соревнованиях указывается идентификационный номер клуба. Для связи тренера и клуба необходимо ввести идентификационный номер сущности тренера в клубе, а также ввести в сущность о тренерах номер вида клуба для связи с сущностью о видах.
В программе будут работать следующие предикаты:
1. Для описания спортсмена использован предикат
sportsm(IDman,name,katsl, type_spis ,IDkl),
где IDman – идентификационный номер спортсмена;
name – структура фамилии, имени и отчества, состоящая из
следующих компонентов:
name = fio(surname,nm,parname),
surname – фамилия спортсмена,
nm – имя спортсмена,
parname – отчество спортсмена;
katsl – присвоенная категория мастерства (сложности);
type_spis – список видов спорта.;
IDkl – идентификационный номер клуба.
2. Для описания клуба использован предикат
klub(IDkl,nazv,IDtrener,IDv),
где IDkl – идентификационный номер клуба;
nazv - название клуба;
IDtrener– идентификационный номер тренера клуба;
IDv - идентификационный номер вида спорта;
3. Для описания спортивного сооружения использован предикат
sooruzhen(IDsoor,t_start,t_end,mesta),
где IDm – идентификационный номер сооружения;
t_start – название спортивного сооружения;
t_end – тип покрытия сооружения;
mesta – вместительность спортивного сооружения.
4. Для описания соревнования использован предикат
sorevnov(IDs,specp,IDkl,IDsoor,Data,Time,katslozh),
где IDs – идентификационный номер соревнования;
specp – название или специализация соревнования;
IDkl – индивидуальный номер клуба, который представлял спортсмена,
IDsoor – идентификационный номер спортивного сооружения, в котором проводилось соревнование,
Data – структура даты, состоящая из следующих компонентов:
Data = data(day,month,year),
day – день,
month – месяц,
year – год,
Time – структура времени, состоящая из следующих компонентов:
Time = time(hour,minutes),
hour – часы,
minutes – минуты,
katslozh – категория сложности соревнования.
5. Для описания видов спорта использован предикат
vid(IDv,nvid,IDtrener),
где IDv – идентификационный номер вида спорта;
nvid - название вида спорта;
IDtrener – идентификационный номер тренера вида спорта;
6. Для описания тренеров использован предикат
trener(IDtrener,name,IDv),
где IDtrener – идентификационный номер тренера;
name - имя тренера;
IDv – идентификационный номер вида спорта;
Для определения типов данных необходимо определить, какие значения будут иметь аргументы предикатов.
Используем тип integer:
для номера спортсмена и категории мастерства, пройденного им соревнования;
для номера спортивного клуба, количества спортсменов в клубе;
для номера спортивного сооружения, вместительности сооружения;
для составляющих даты - дня, месяца, года;
для составляющих времени - часов, минут.
для номера видов спорта и номера тренеров.
Используем тип string:
для ФИО спортсменов;
для названия клубов;
для названия и типа покрытия спортивного сооружения.
для названия видов спорта;
для имен тренеров;
для названия соревнований;
Сформированная база знаний будет храниться в файлах с расширением *.txt. Каждая отдельная сущность, с относящимися к ней атрибутами, будет храниться в отдельном файле с соответствующем названием: файл DBS.txt содержит информацию о спортсменах, файл DBSOR.txt – о соревнованиях, файл DBK.txt – информацию о спортивных клубах, файл DBV.txt – информацию о видах спорта, файл DBtrener.txt – информацию о тренерах, файлы DBSOOR.txt – о спортивных сооружениях.
При обращении к базе знаний необходимая информация загружается в ОЗУ из файла *.txt внутренней базы с указанным именем.
1.2 Разработка базы знаний
После заполнения базы данных фактами необходимо определить правила, позволяющие осуществлять поиск по базе, то есть разработать базу знаний.
В работе программы используются следующие предикаты базы знаний:
1) Предикат print_sportsm(IDi,name,kats,IDv,IDkl) осуществляет выборку и вывод на экран информации о спортсменах;
2) Предикат print_klub(IDv,IDkl,nazv,tren) осуществляет выборку и вывод на экран информации о клубах;
3) Предикат print_soor(IDsoor,t_start,t_en,mesta) осуществляет выборку и вывод на экран информации о сооружениях;
4) Предикат print_vid(IDv,nvid,trener) осуществляет выборку и вывод на экран информации о видах спорта;
5) Предикат print_sorevn(IDs,specp,IDman,IDkl,IDsoor,Data,Time,katslozh) осуществляет выборку и вывод на экран информации о соревнованиях;
6) Предикаты proverka_sports(integer),proverka_kl(integer), proverka_soor(integer),proverka_sorev(integer), proverka_vid(integer) выполняют проверку на наличие существования определённого идентификационного (уникального) номера в каждой базе данных.
7) Предикат print_trener(IDtrener,name,IDv) осуществляет выборку и вывод на экран информации о тренерах;
Вывод на экран таблицы спортсменов осуществляется последовательным выводом атрибутов данной сущности, т.е. фамилии, имени, отчества спортсмена, категории мастерства и видов спорта:
print_sportsm(IDman,fio(Surname,Nm,Parname),Katsl,IDv,IDkl):- table_sports,
/*прорисовка «шапки» таблицы*/
sportsm(IDman,fio(Surname,Nm,Parname),Katsl,IDv,IDkl),
write("|"),writef("%12 ",Surname), /*вывод ФИО студента*/
frontchar(Nm,C1,_),write(C1),
write("."),frontchar(Parname,C2,_),write(C2),/*вывод инициалов студента*/
write(". |"),writef("%3",Katsl),write("|"),/*вывод категории мастерства спортсмена*/
writef("%10",NVid),write(" |"), /*вывод вида спорта спортсмена*/
writef("%3",Nazv),nl, /*вывод названия клуба к которому относится спортсмен*/
Предикаты print_soor, print_klub, print_sorevn, print_vid, print_sorevn1 работают по такому же принципу, как и предикат вывода на экран информации о спортсменах – print_sportsm.
Работу предикатов, выполняющих проверку на уникальность заданного идентификационного номера, рационально рассмотреть на примере предиката proverka_sports. Принцип работы предиката proverka_sports заключается в сопоставлении некоторого номера спортсмена с имеющимися в базе номерами спортсменов, в случае, если указанный номер спортсмена существует, то об этом сообщается, в противном случае, разрешается выполнять последующие операции, в данном случае – добавление спортсмена с таким номером.
proverka_sports(IDi):-sportsm(IDi,fio(_,_,_),_,_,_),!,nl, /*проверка на существование в базе указанного номера спортсмена*/
write("Yzhe syschestvyet zapis s takoj ID!!!"),nl, /*сообщение о существовании такой записи*/
write("Nazhmite lyubyyu klavishy"),
readchar(_),vibor2(1);dobavlenie(1,IDi). /* переход к функции добавления записи*/
|