Обработка динамической базы данных средствами языка Пролог. Предметная область "Тренажёрный зал"

Создание программного обеспечения, организующего базу данных тренажёрного зала. Описание предметной области; предикаты языка Пролог для работы с БД: ввод/вывод, управление окнами. Разработка структуры базы данных, интерфейс; содержание файла "Zal.ddb".

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 07.06.2013
Размер файла 821,6 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Институт (факультет) информационных технологий

Кафедра математического и программного обеспечения ЭВМ

Специальность 230400.62

КУРСОВАЯ РАБОТА

по дисциплине

Функциональное и логическое программирование

на тему:

Обработка динамической базы данных средствами языка Пролог. Предметная область «Тренажёрный зал»

Выполнила студентка группы 1ИС-210

Игнатьева Валентина Викторовна

Руководитель: доцент

Майтама Елена Вячеславовна

Череповец - 2013

Оглавление:

  • Задание
  • Введение
  • 1. Описание предметной области
  • 2. Теоретические положения
    • 2.1 Способы представления базы данных
    • 2.2 Предикаты пролога для работы с БД
      • 2.2.1 Предикаты ввода/вывода
      • 2.2.2 Предикаты управления окнами
  • 3. Разработка структуры базы данных
  • 4. Действия с БД
  • 5. Результаты работы программы
    • 5.1 Интерфейс программы
    • 5.2 Содержание файла базы данных «Zal.ddb»
  • Заключение
  • Список литературы
  • Приложение 1
    • Листинг программы

Задание

Задание на курсовую работу по дисциплине «Функциональное и логическое программирование»

Выдано студентке Игнатьевой Валентине

гр. 1ИС-210

Тема: Обработка динамической базы данных средствами языка Пролог.

Предметная область:

Тренажёрный зал

Задание: для выбранной предметной области спроектировать структуру базы данных. Средствами языка логического программирования Пролог реализовать программное обеспечение для обработки данных. ПО должно выполнять следующие функции: ввод данных, просмотр данных, поиск по запросу, добавление, удаление данных. По окончании работы данные сохранять в файле, в начале сеанса данные загружать из файла. Для взаимодействия с пользователем реализовать дружеский оконный интерфейс.

Введение

Базы данных являются очень важным инструментом для решения проблем хранения информации. Ведение баз данных является наиболее удобным и подходящим способом, предусматривающим обработку, редактирование больших объемов информации, её удаление и добавление в базу. Потому проектирование баз данных на сегодняшний день является очень актуальным вопросом.

Функциональные зависимости, связанные с реляционными базами данных, могут выражаться логическими программами, составленными из фактов и правил. Логические программы можно рассматривать как мощное расширение реляционной базы данных.

Prolog -- это логический язык программирования для символических, нечисловых вычислений. Он особенно хорошо приспособлен для решения проблем, которые касаются объектов и отношений между объектами.

В декларативном языке ПРОЛОГ программист описывает саму проблему и основные правила ее решения, оставляя за системой поиск конкретных действий, приводящих к решению. Поэтому ПРОЛОГ справедливо считается языком более высокого уровня, чем Си или Паскаль. Внешним выражением этого факта является то, что текст программы на ПРОЛОГе может быть в десять раз короче текста программы на Паскале, решающей ту же задачу.

ПРОЛОГ может использоваться при разработке экспертных систем, а также для следующих задач:

- доказательства теорем и вывода решений в задачах;

- дифференцировании, интегрировании и т. д.;

- разработки упрощенных версий систем ИИ;

-создания естественно-языковых интерфейсов для существующих программ;

- перевода текстов с одного языка на другой, в том числе - с одного языка программирования на другой;

- создания базы данных.

Логическая база данных на Prolog строится из множества фактов и правил.

Особую роль в интерпретаторе на Prolog играют конкретные запросы к базам знаний, на которые система логического программирования генерирует ответы «истина» и «ложь». Для обобщённых запросов с переменными в качестве аргументов созданная система на Prolog выводит конкретные данные в подтверждение истинности обобщённых сведений и правил вывода.

Именно поэтому, для разработки баз данных удобно использовать язык программирования Prolog.

1. Описание предметной области

Предметной областью данной разработки является база данных «Тренажёрный зал». База данных тренажёрного зала включает в себя информацию о его тренерах и клиентах.

В программе отражены следующие данные:

1. Информация о тренерах:

· Фамилия, имя, отчество тренера

· Телефон

· Зал

2. Информация о клиентах:

· Фамилия, имя, отчество клиента

· Телефон

· Посещаемый зал

· Фамилия тренера

Программа предоставляет следующие возможности:

1. Вывод базы

2. Добавление в базу

3. Удаление из базы

4. Редактирование

5. Поиск клиента

6. Поиск тренера

7. Сохранение изменений

8. Выход из базы

2. Теоретические положения

2.1 Способы представления базы данных

Существует пять способов представления базы данных на языке Пролог:

· Элементы в виде фактов;

· Атрибуты в виде фактов;

В качестве фактов используются отдельные атрибуты (свойства) информационных элементов. Один из атрибутов должен выступать в качестве ключа, объединяющего все остальные свойства.

· Список структур;

БД можно считать потоком целостных информационных элементов. На языке Пролог это представляется в виде списка структур. Каждый элемент списка - это целостный информационный элемент.

· Рекурсивный список;

Каждая структура соответствует записи БД. Рекурсивные структуры в данном случае аналогичны односвязным спискам, в которых один из аргументов каждой записи указывает на следующую запись.

· Бинарное дерево;

Каждый узел дерева соответствует записи БД. Смысл использования ДД заключается в том, чтобы хранить информацию в отсортированном виде.

В разработанной базе данных используется первый способ представления - представление элементов в виде фактов.

Внутренняя база данных содержит факты, описывающие два предиката:

1.Тренер. Имеет пять аргументов. Первый аргумент - фамилия тренера, второй - имя тренера, третий - отчество тренера, четвёртый - телефон, пятый - зал, в котором тренер проводит занятия.

trener(fam_tr,im_tr,ot_tr,telephone,zal)

2. Клиент. Имеет шесть аргументов. Первый аргумент - фамилия клиента, второй - имя клиента, третий - отчество клиента, четвёртый - телефон, пятый - посещаемый зал, шестой - фамилия тренера.

klient(fam_kl,im_kl,ot_kl,telephone,zal,fam_tr)

При запуске программы появляется меню, из которого пользователь может выбрать, какое действие с базой он хотел бы осуществить.

2.2 Предикаты пролога для работы с БД

Для работы в БД в Турбо-Прологе существуют следующие предикаты.

2.2.1 Предикаты ввода/вывода

1. Предикат write - Записывает заданные значения на текущее устройство вывода. В качестве аргумента используется список переменных и/или констант. Наряду с константами и переменными может использоваться также и обратный слеш. Он встречается в следующих комбинациях:

\n - выдаётся пробел;

\t - происходит переход к следующей позиции табуляции;

Синтаксис: write(A1,А2,А3,…)

Пример: write("Vvedite_familiyu: \n") - записывает «фамилию» введенную пользователем с клавиатуры на текущее устройство вывода. Пробел.

2. Предикат nl - перевод строки.

3. Предикат reachar - читает символ с текущего устройства ввода.Синтаксис: reachar(СимвПеременная)

4. Предикат readln - читает строку.Синтаксис: readln(Строка)

5. Предикат reading - читает целое число.Синтаксис: reading(ЦелаяПеременная)

6. Предикат readreal - читает вещественное число.Синтаксис: readreal(Переменная)

2.2.2 Предикаты управления окнами

1. Предикат makewindow - создает новое окно.

Синтаксис: makewindow(НомОкна,АтрЭкрана,АтрРамки,Заголовок,Строка,Столбец,Высота,Ширина) Пример: makewindow(4,112,112,"Добавить",0,0,25,80)

2. Предикат shiftwindow - меняет текущее окно или считывает номер текущего окна. Синтаксис: shiftwindow(НомОкна), НомОкна: integerПример: shiftwindow(4) - активирует окно номер 4.

2.2.3 Предикаты для работы с динамическими БД

База данных называется динамической, если во время работы программы из нее можно удалять утверждения и добавлять новые. База может быть записана на диск и считана с диска в оперативную память. Предикаты динамической БД должны быть предварительно описаны в разделе database.

1. Предикат save - сохраняет находящуюся в оперативной памяти базу данных в текстовом файле.

Синтаксис: save(имя_файла.*расширение)Пример: для того, чтобы сохранить содержимое БД в файле с именем zal.ddb, требуется предикат: save("zal.ddb ").

2. Предикат retract - удаляет факт из базы данных.Синтаксис: retract(Факт)Пример: retractall(uchitel(_,_,_,_,_,_)) - очищает всю оперативную память от фактов предикаты uchitel.

3. Предикат consult - добавляет текстовый файл в базу данных.Синтаксис: consult(ИмяФайлаDOS)Пример: consult("zal.ddb ") - добавляем текстовый файл " zal.ddb " в базу данных.

Текстовый файл может быть, например, создан в результате выполнения предиката save. Этот файл содержит факты, которые должны быть описаны в разделе database. Выполнение предиката consult не будет успешным, если в этом файле имеются синтаксические ошибки.

4. Предикат assert - добавляет факт.

5. Предикат asserta - добавляет факт в начало

6. Предикат assertz - добавляет факт в конец базы данных.Синтаксис: assert(Факт)Добавляет факт в базу данных.

7. Предикат fail - осуществляет вынужденное, неудачное завершение выполнения предиката и таким образом инициализирует бектрекинг.

3. Разработка структуры базы данных

База данных «Тренажёрный зал» может быть представлена в виде двух таблиц.

Таблица 1

Тренеры

Фамилия тренера

Имя тренера

Отчество тренера

Телефон

Зал

String

String

String

String

String

Таблица 2

Клиенты

Фамилия клиента

Имя клиента

Отчество клиента

Телефон

Посещаемый зал

Фамилия тренера

String

String

String

String

String

String

Данные таблицы находятся в третьей нормальной форме (3NF) , т.е. они атомарны, все атрибуты связаны с первичным ключом, и ни один из ее не ключевых атрибутов не зависит функционально от любого другого не ключевого атрибута. Связь между таблицами осуществляется по внешнему ключу - полю «Фамилия тренера».

В разделе database объявляются предикаты динамической базы данных, т.е. те предикаты, которые можно будет программно добавлять и удалять.

database

trener(fam_tr,im_tr,ot_tr,telephone,zal)

klient(fam_kl,im_kl,ot_kl,telephone,zal,fam_tr)

В языке TProlog существуют следующие стандартные типы областей значений:- symbol, string, char - для работы с символами;- integer, real - для работы с числами.

В разделе domains объявляются новые пользовательские типы данных, соответствующие введенным полям.

domains

fam_tr,im_tr,ot_tr,fam_kl,im_kl,ot_kl,zal,telephone=String

TProlog различает верхний и нижний регистр. Например, названия полей со строковыми типами должны начинаться с прописных букв, а названия числовых полей - с заглавных.

В разделе predicates объявляются имена и области значений всех предикатов, используемых программой.

Predicates

klients(fam_kl,im_kl,ot_kl,telephone,zal,fam_tr)

klients1(Fam_kl,Im_kl,Ot_kl,Telephone,Zal,Fam_tr)

klients2(Fam_kl,Im_kl,Ot_kl,Telephone,Zal,Fam_tr)

klients3(Fam_kl,Im_kl,Ot_kl,Telephone,Zal,Fam_tr)

treners(fam_tr,im_tr,ot_tr,telephone,zal)

treners1(fam_tr,im_tr,ot_tr,telephone,zal)

treners2(fam_tr,im_tr,ot_tr,telephone,zal)

vivod_kl(fam_kl,im_kl,ot_kl,telephone,zal,fam_tr)

vivod1_kl(fam_kl,im_kl,ot_kl,telephone,zal,fam_tr)

vivod_tr(fam_tr,im_tr,ot_tr,telephone,zal)

vivod1_tr(fam_tr,im_tr,ot_tr,telephone,zal)

m(char)

menu

start

mm(char)

mmm(char)

mmm1(char)

u(char)

d(char)

r(char)

mr(char)

v(char)

p(char)

p1(char)

4. Действия с БД

Программа содержит следующие программные модули:

1. Вывод базы

В новом окне осуществляется вывод базы данных тренажёрного зала.

vivod1_kl(fam_kl,im_kl,ot_kl,telephone,zal,fam_tr),

vivod1_tr(fam_tr,im_tr,ot_tr,telephone,zal),

2. Добавление в базу

В базу данных в новом окне в диалоговом режиме вносят новые записи.

а) Клиента

write("Vvedite familiyu"),nl,

readln(Fam_kl),

write("Vvedite imya"),nl,

readln(Im_kl),

write("Vvedite otchestvo"), nl,

readln(Ot_kl),

write("Vvedite telephone"), nl,

readln(Telephone),

write("Vvedite poseschaemy zal"), nl,

readln(Zal),

write("Vvedite familiyu trenera"), nl,

readln(Fam_tr),

assert(klient(fam_kl,im_kl,ot_kl,telephone,zal,fam_tr)),

б) Тренера

Осуществляется аналогично добавлению нового клиента.

3. Удаление из базы

Производится удаление существующей записи из базы данных, при этом задаётся вопрос на подтверждение/отмену удаления.

а) Клиента

write("Vvedite familiyu"), nl,

readln(Fam_kl),

klients(fam_kl,im_kl,ot_kl,telephone,zal,fam_tr),

write(" Familiya_klienta:", fam_kl),nl,

write(" Imya_klienta:", im_kl ),nl,

write("Otchestvo_klienta:", ot_kl ),nl,

write(" Telephone_klienta:", telephone), nl,

write(" Poseschaemy_zal:", zal), nl,

write(" Familiya_trenera:", fam_tr), nl,nl,

write("Vi uvereni?"), nl,

write("1 -da"), nl,

write("2 -net"), nl,

readchar(C),

mmm(C).

mmm('1'):-write("Vvedite familiyu"), nl,

readln(Fam_kl),

retract(klient(fam_kl,_,_,_,_,_)),

menu.

mmm('2'):-menu.

б) Тренера

4. Редактирование

Существующие записи можно редактировать, выбрав необходимый для изменения атрибут.

write("Vvedite familiyu"), nl,

readln(Fam_kl),

klients(fam_kl,im_kl,ot_kl,telephone,zal,fam_tr),

write(" Familiya_klienta:", fam_kl),nl,

write(" Imya_klienta:", im_kl ),nl,

write(" Otchestvo_klienta:", ot_kl ),nl,

write(" Telephone_klienta:", telephone), nl,

write(" Poseschaemy_zal:", zal), nl,

write(" Familiya_trenera:", fam_tr), nl,nl,

write("4to budem redaktirovat?"), nl, //выбор

write("1-Familiya_klienta"),nl,

write("2-Imya_klienta"),nl,

write("3-Otchestvo_klienta"),nl,

write("4-Telephone_klienta"), nl,

write("5-Poseschaemy_zal"), nl,

write("6-Familiya_trenera"), nl,

readchar(C),

mm(C).

mm('1'):-makewindow(8,7,3,"Red",5,5,15,60),

write("Vvedite familiyu"),nl,

readln(Fam_kl),

klients(fam_kl,im_kl,ot_kl,telephone,zal,fam_tr),

write("Vvedite novuyu familiyu"),nl,

readln(Fam_kl_new),

retract(klient(fam_kl,_,_,_,_,_)),

assert(klient(fam_kl_new,im_kl,ot_kl,telephone,zal,fam_tr)), menu.

5. Поиск клиента

В базе данных осуществляется поиск клиента:

1. По фамилии

write("Vvedite familiyu"), nl,

readln(Fam_kl),

klients(fam_kl,im_kl,ot_kl,telephone,zal,fam_tr),

write(" Familiya_klienta:", fam_kl),nl,

write(" Imya_klienta:", im_kl ),nl,

write("Otchestvo_klienta:", ot_kl ),nl,

write(" Telephone_klienta:", telephone), nl,

write(" Poseschaemy_zal:", zal), nl,

write(" Familiya_trenera:", fam_tr), nl,nl,

readchar(_),

3. По номеру телефона

4. По посещаемому залу

5. По фамилии тренера

6. Поиск тренера

Осуществляется аналогично поиску клиента

1. По фамилии

2. По номеру телефона

3. По посещаемому залу

2. Сохранение изменений

В базе данных сохраняются произведённые изменения

save("zal.ddb"),

consult("zal.ddb"),

3. Выход из базы

save("zal.ddb"),

consult("zal.ddb")

база данный тренажерный зал

5. Результаты работы программы

5.1 Интерфейс программы

Рис. 1. Главное меню программы

При нажатии на 1 появится окно «База тренажерного зала» с возможностью выбора «Базы тренеров» и «Базы клиентов»

Рис. 2. Выбор базы данных

При нажатии на 1 появится новое окно, в котором отражены сведения о тренерах тренажёрного зала.

Рис. 3. База данных тренеров

При нажатии на 2 - сведения о клиентах тренажёрного зала

Рис. 4. База данных клиентов

При нажатии на 2 в главном меню откроется новое окно, в котором также на выбор предоставляется возможность добавления новых записей в базы данных.

Рис. 5. Добавление нового тренера

При нажатии на 3 в главном меню появится окно «Удаление».

Рис. 6. Удаление записи

При нажатии на 4 в главном меню появится окно «Редактирование» с возможностью выбора атрибута, который будет отредактирован.

Рис. 6. Редактирование записи

При нажатии на 5 в главном меню появится окно «Поиск клиента» с возможностью выбора.

Рис. 7. Поиск клиента

Рис. 8. Поиск клиента по фамилии

При нажатии на 5 в главном меню появится окно «Поиск тренера»

Рис. 9. Поиск тренера

Рис. 10. Поиск тренера по фамилии

При нажатии на 7 в главном меню произведённые изменения будут сохранены.

При нажатии на 0 выход из базы данных.

5.2 Содержание файла базы данных «Zal.ddb»

trener("Ivanov","Petr","Ivanovich","63-54-21","bassein")

trener("Fomichev","Michail","Aleksandrovich","75-23-68","pauerlifting")

trener("Bublik","Iosif","Petrovich","89-21-67","basketbol")

trener("Zaycev","Feofan","Prokopyevich","56-90-87","bassein")

trener("Vilkina","Marfa","Ivanovna","90-43-65","trenazery")

klient("Vasilyeva","Zoya","Varfolomeevna","54-98-67","trenazery","Vilkina")

klient("Fedotov","Aleksey","Michailovich","67-34-90","bassein","Zaycev")

klient("Kuzykin","Veneamin","Andreevich","89-43-90","pauerlifting","Fomichev")

klient("Repkina","Margarita","Vitalyevna","54-00-67","trenazery","Vilkina")

klient("Pupkin","Aleksey","Michailovich","67-34-90","bassein","Zaycev")

klient("Krotov","Veneamin","Ilyich","89-43-23","pauerlifting","Fomichev")

klient("Gromov","Gennadiy","Varfolomeevich","87-98-67","trenazery","Vilkina")

klient("Fedotova","Alena","Petrovna","67-34-90","bassein","Zaycev")

klient("Kuzykina","Valeriya","Andreevna","89-27-90","pauerlifting","Fomichev")

klient("Paholkov","Igor","Alekseevich","54-98-67","basketbol","Bublik")

klient("Fedotov","Aleksey","Michailovich","67-34-90","basketbol","Bublik")

klient("Kot","Valeriy","Andreevich","89-22-90","pauerlifting","Fomichev")

Заключение

Результатом данной курсовой работы стало программное обеспечение, организующее базу данных тренажёрного зала, которая включает в себя базу данных тренеров и базу данных клиентов тренажёрного зала.

Программа позволяет просматривать существующие базы данных, добавлять новые записи, редактировать и удалять уже существующие, а также организует поиск по фамилии клиента и тренера.

Дружественный интерфейс программы облегчает работу в базе данных.

В ходе выполнения задания были изучены и закреплены знания по разработке и созданию баз данных с помощью логического языка программирования Турбо Пролог, а также предикаты для работы с внешними базами данных и операции над данными в них.

Список литературы

1. Курс лекций по логическому программированию

2. Методические указания по выполнению лабораторных работ по дисциплине «Функциональное и логическое программирование» Часть 2. Логическое программирование. Череповец, 2003 г.

3. Информатика и программирование, Язык программирования Prolog.

4. Братко «Пролог в искусственном интеллекте»

5. Янсон «TProlog»

Приложение 1

Листинг программы

project "Trenazerniy_zal"

domains

fam_tr,im_tr,ot_tr,fam_kl,im_kl,ot_kl,zal,telephone=String

file=f

database

trener(fam_tr,im_tr,ot_tr,telephone,zal)

klient(fam_kl,im_kl,ot_kl,telephone,zal,fam_tr)

predicates

odn

zan(Zal)

od

tr(Fam_tr)

za

z(Zal)

klients(fam_kl,im_kl,ot_kl,telephone,zal,fam_tr)

klients1(Fam_kl,Im_kl,Ot_kl,Telephone,Zal,Fam_tr)

klients2(Fam_kl,Im_kl,Ot_kl,Telephone,Zal,Fam_tr)

klients3(Fam_kl,Im_kl,Ot_kl,Telephone,Zal,Fam_tr)

treners(fam_tr,im_tr,ot_tr,telephone,zal)

treners1(fam_tr,im_tr,ot_tr,telephone,zal)

treners2(fam_tr,im_tr,ot_tr,telephone,zal)

vivod_kl(fam_kl,im_kl,ot_kl,telephone,zal,fam_tr)

vivod1_kl(fam_kl,im_kl,ot_kl,telephone,zal,fam_tr)

vivod_tr(fam_tr,im_tr,ot_tr,telephone,zal)

vivod1_tr(fam_tr,im_tr,ot_tr,telephone,zal)

m(char)

menu

start

mm(char)

mmm(char)

mmm1(char)

u(char)

d(char)

r(char)

mr(char)

v(char)

p(char)

p1(char)

clauses

klients(Fam_kl,Im_kl,Ot_kl,Telephone,Zal,Fam_tr):-klient(Fam_kl,Im_kl,Ot_kl,Telephone,Zal,Fam_tr),!.

klients(_,"Net inform", "Net inform", "Net inform", "Net inform","Net inform").

klients1(Fam_kl,Im_kl,Ot_kl,Telephone,Zal,Fam_tr):-klient(Fam_kl,Im_kl,Ot_kl,Telephone,Zal,Fam_tr),!.

klients1("Net inform", "Net inform", "Net inform",_, "Net inform","Net inform").

klients2(Fam_kl,Im_kl,Ot_kl,Telephone,Zal,Fam_tr):-klient(Fam_kl,Im_kl,Ot_kl,Telephone,Zal,Fam_tr),!.

klients2("Net inform", "Net inform", "Net inform", "Net inform",_,"Net inform").

klients3(Fam_kl,Im_kl,Ot_kl,Telephone,Zal,Fam_tr):-klient(Fam_kl,Im_kl,Ot_kl,Telephone,Zal,Fam_tr),!.

klients3("Net inform", "Net inform", "Net inform", "Net inform","Net inform",_).

vivod_kl(Fam_kl,Im_kl,Ot_kl,Telephone,Zal,Fam_tr):-klient(Fam_kl,Im_kl,Ot_kl,Telephone,Zal,Fam_tr).

vivod1_kl(Fam_kl,Im_kl,Ot_kl,Telephone,Zal,Fam_tr):-vivod_kl(Fam_kl,Im_kl,Ot_kl,Telephone,Zal,Fam_tr), write(Fam_kl," ", Im_kl, " ", Ot_kl," ", Telephone, " ", Zal," ",Fam_tr, "\n"), nl, fail.

odn:-klient(Fam_kl,Im_kl,Ot_kl,_,Zal,_),write("No inform!"),write(Fam_kl," ",Im_kl," ",Ot_kl),nl,fail.

zan(Zal):-klient(Fam_kl,Im_kl,Ot_kl,_,Zal,_),write(Fam_kl," ",Im_kl," ",Ot_kl),nl.

od:-klient(Fam_kl,Im_kl,Ot_kl,_,_,Fam_tr),write("No inform!"),write(Fam_kl," ",Im_kl," ",Ot_kl),nl,fail.

tr(Fam_tr):-klient(Fam_kl,Im_kl,Ot_kl,_,_,Fam_tr),write(Fam_kl," ",Im_kl," ",Ot_kl),nl.

za:-trener(Fam_tr,Im_tr,Ot_tr,_,Zal),write("No inform!"),write(Fam_tr," ",Im_tr," ",Ot_tr),nl,fail.

z(Zal):-trener(Fam_tr,Im_tr,Ot_tr,_,Zal),write(Fam_tr," ",Im_tr," ",Ot_tr),nl.

treners(Fam_tr,Im_tr,Ot_tr,Telephone,Zal):-trener(Fam_tr,Im_tr,Ot_tr,Telephone,Zal),!.

treners(_,"Net inform", "Net inform", "Net inform", "Net inform").

treners1(Fam_tr,Im_tr,Ot_tr,Telephone,Zal):-trener(Fam_tr,Im_tr,Ot_tr,Telephone,Zal),!.

treners1("Net inform", "Net inform", "Net inform",_, "Net inform").

treners2(Fam_tr,Im_tr,Ot_tr,Telephone,Zal):-trener(Fam_tr,Im_tr,Ot_tr,Telephone,Zal),!.

treners2("Net inform", "Net inform", "Net inform", "Net inform",_).

vivod_tr(Fam_tr,Im_tr,Ot_tr,Telephone,Zal):-trener(Fam_tr,Im_tr,Ot_tr,Telephone,Zal).

vivod1_tr(Fam_tr,Im_tr,Ot_tr,Telephone,Zal):-vivod_tr(Fam_tr,Im_tr,Ot_tr,Telephone,Zal), write(Fam_tr, " ", Im_tr, " ", Ot_tr, " ", Telephone, " ", Zal, "\n"), nl,fail.

menu:- makewindow(1,7,3,"Trenazerniy_zal",0,0,25,80),

clearwindow,

write("1-Baza trenazernogo zala"),nl,

write("2-Dobavlenie"),nl,

write("3-Udalenie"),nl,

write("4-Redaktirovanie"), nl,

write("5-Poisk klienta"), nl,

write("6-Poisk trenera"), nl,

write("7-Sohranenie"), nl,

write("0-Vichod"),nl,

readchar(C),

m(C).

m('1'):- makewindow(2,7,3,"Baza trenazernogo zala",5,5,15,60),

clearwindow,

write("1-Vivod trenerov"),nl,

write("2-Vivod klientov"),nl,

readchar(C),

v(C).

m('2'):- makewindow(3,7,3,"Dobavlenie novogo klienta",5,5,15,60),

clearwindow,

write("1-Dobavlenie novogo trenera"),nl,

write("2-Dobavlenie novogo klienta"),nl,

readchar(C),

d(C).

m('3'):-makewindow(4,7,3,"Udalenie",5,5,15,60),

clearwindow,

write("1-Udalenie trenera"),nl,

write("2-Udalenie klienta"),nl,

readchar(C),

u(C).

m('4'):-makewindow(5,7,3,"Redaktirovanie",5,5,15,60),

clearwindow,

write("1-Redaktirovanie trenera"),nl,

write("2-Redaktirovanie klienta"),nl,

readchar(C),

r(C).

m('5'):-makewindow(6,7,3,"Poisk klienta",5,5,15,60),

clearwindow,

write("1-Poisk po familii"),nl,

write("2-Pois po telefonu"),nl,

write("3-Pois po zalu"),nl,

write("4-Pois po treneru"),nl,

readchar(C),

p(C).

m('6'):-makewindow(7,7,3,"Poisk trenera",4,4,20,75),

write("1-Poisk po familii"),nl,

write("2-Pois po telefonu"),nl,

write("3-Pois po zalu"),nl,

readchar(C),

p1(C).

m('7'):-makewindow(13,7,3,"Sohranenie",4,4,20,75),

save("zal.ddb"),

menu.

m('0'):- save("zal.ddb").

p('1'):-makewindow(26,7,3,"Poisk po familii",5,5,15,60),

write("Vvedite familiyu"), nl,

readln(Fam_kl),

klients(Fam_kl,Im_kl,Ot_kl,Telephone,Zal,Fam_tr),

write(" Familiya_klienta:", Fam_kl),nl,

write(" Imya_klienta:", Im_kl ),nl,

write("Otchestvo_klienta:", Ot_kl ),nl,

write(" Telephone_klienta:", Telephone), nl,

write(" Poseschaemy_zal:", Zal), nl,

write(" Familiya_trenera:", Fam_tr), nl,nl,

readchar(_),

menu.

p('2'):-makewindow(27,7,3,"Poisk po telephonu",5,5,15,60),

write("Vvedite telephone"), nl,

readln(Telephone),

klients1(Fam_kl,Im_kl,Ot_kl,Telephone,Zal,Fam_tr),

write(" Familiya_klienta:", Fam_kl),nl,

write(" Imya_klienta:", Im_kl ),nl,

write("Otchestvo_klienta:", Ot_kl ),nl,

write(" Telephone_klienta:", Telephone), nl,

write(" Poseschaemy_zal:", Zal), nl,

write(" Familiya_trenera:", Fam_tr), nl,nl,

readchar(_),

menu.

p('3'):-makewindow(28,7,3,"Poisk po zalu",5,5,15,60),

write("Vvedite poseschaemiy zal"), nl,

readln(Zal),

zan(Zal),

fail,

gotowindow(1),

menu.

p('4'):-makewindow(28,7,3,"Pois po treneru",5,5,15,60),

write("Vvedite familiyu trenera"), nl,

readln(Fam_tr),

tr(Fam_tr),

fail,

gotowindow(1),

menu.

p1('1'):-makewindow(29,7,3,"Poisk po familii",5,5,15,60),

write("Vvedite familiyu"), nl,

readln(Fam_tr),

treners(Fam_tr,Im_tr,Ot_tr,Telephone,Zal),

write(" Familiya_trenera:", Fam_tr),nl,

write(" Imya_trenera:", Im_tr),nl,

write(" Otchestvo_trenera:", Ot_tr),nl,

write(" Telephone_trenera:", Telephone), nl,

write(" Zal:", Zal), nl,nl,

readchar(_),

menu.

p1('2'):-makewindow(29,7,3,"Poisk po telefony",5,5,15,60),

write("Vvedite telephone"), nl,

readln(Telephone),

treners1(Fam_tr,Im_tr,Ot_tr,Telephone,Zal),

write(" Familiya_trenera:", Fam_tr),nl,

write(" Imya_trenera:", Im_tr),nl,

write(" Otchestvo_trenera:", Ot_tr),nl,

write(" Telephone_trenera:", Telephone), nl,

write(" Zal:", Zal), nl,nl,

readchar(_),

menu.

p1('3'):-makewindow(30,7,3,"Poisk po zalu",5,5,15,60),

write("Vvedite telephone"), nl,

readln(Zal),

z(Zal),

fail,

gotowindow(1),

menu.

mm('1'):-makewindow(8,7,3,"Familiya klienta",5,5,15,60),

write("Vvedite familiyu"),nl,

readln(Fam_kl),

klients(Fam_kl,Im_kl,Ot_kl,Telephone,Zal,Fam_tr),

write("Vvedite novuyu familiyu"),nl,

readln(Fam_kl_new),

retract(klient(Fam_kl,_,_,_,_,_)),

assert(klient(Fam_kl_new,Im_kl,Ot_kl,Telephone,Zal,Fam_tr)), menu.

mm('2'):-makewindow(9,7,3,"Imya klienta",5,5,15,60),

write("Vvedite familiyu"),nl,

readln(Fam_kl),

klients(Fam_kl,Im_kl,Ot_kl,Telephone,Zal,Fam_tr),

write("Vvedite novoe imya klienta"),nl,

readln(Im_kl_new),

retract(klient(Fam_kl,_,_,_,_,_)),

assert(klient(Fam_kl,Im_kl_new,Ot_kl,Telephone,Zal,Fam_tr)), menu.

mm('3'):-makewindow(10,7,3,"Otchestvo klienta",5,5,15,60),

write("Vvedite familiyu"),nl,

readln(Fam_kl),

klients(Fam_kl,Im_kl,Ot_kl,Telephone,Zal,Fam_tr),

write("Vvedite novoe otchestvo"),nl,

readln(Ot_kl_new),

retract(klient(Fam_kl,_,_,_,_,_)),

assert(klient(Fam_kl,Im_kl,Ot_kl_new,Telephone,Zal,Fam_tr)), menu.

mm('4'):-makewindow(11,7,3,"Telephone",5,5,15,60),

write("Vvedite familiyu"),nl,

readln(Fam_kl),

klients(Fam_kl,Im_kl,Ot_kl,Telephone,Zal,Fam_tr),

write("Vvedite noviy telephone"),nl,

readln(Telephone_new),

retract(klient(Fam_kl,_,_,_,_,_)),

assert(klient(Fam_kl,Im_kl,Ot_kl,Telephone_new,Zal,Fam_tr)), menu.

mm('5'):-makewindow(12,7,3,"Zal",5,5,15,60),

write("Vvedite familiyu"),nl,

readln(Fam_kl),

klients(Fam_kl,Im_kl,Ot_kl,Telephone,Zal,Fam_tr),

write("Vvedite noviy zal"),nl,

readln(Zal_new),

retract(klient(Fam_kl,_,_,_,_,_)),

assert(klient(Fam_kl,Im_kl,Ot_kl,Telephone,Zal_new,Fam_tr)),menu.

mm('6'):-makewindow(13,7,3,"Familiya trenera",5,5,15,60),

write("Vvedite familiyu"),nl,

readln(Fam_kl),

klients(Fam_kl,Im_kl,Ot_kl,Telephone,Zal,Fam_tr),

write("Vvedite novogo trenera"),nl,

readln(Fam_tr_new),

retract(klient(Fam_kl,_,_,_,_,_)),

assert(klient(Fam_kl,Im_kl,Ot_kl,Telephone,Zal,Fam_tr_new)), menu.

d('1'):-makewindow(14,7,3,"Dobavlenie novogo trenera",5,5,15,60),

write("Vvedite familiyu"),nl,

readln(Fam_tr),

write("Vvedite imya"),nl,

readln(Im_tr),

write("Vvedite otchestvo"), nl,

readln(Ot_tr),

write("Vvedite telephone"), nl,

readln(Telephone),

write("Vvedite zal"), nl,

readln(Zal),

assert(trener(Fam_tr,Im_tr,Ot_tr,Telephone,Zal)),

menu.

d('2'):-makewindow(15,7,3,"Dobavlenie novogo klienta",5,5,15,60),

write("Vvedite familiyu"),nl,

readln(Fam_kl),

write("Vvedite imya"),nl,

readln(Im_kl),

write("Vvedite otchestvo"), nl,

readln(Ot_kl),

write("Vvedite telephone"), nl,

readln(Telephone),

write("Vvedite poseschaemy zal"), nl,

readln(Zal),

write("Vvedite familiyu trenera"), nl,

readln(Fam_tr),

assert(klient(Fam_kl,Im_kl,Ot_kl,Telephone,Zal,Fam_tr)),

menu.

u('1'):-makewindow(16,7,3,"Udalenie trenera",5,5,15,60),

write("Vvedite familiyu"), nl,

readln(Fam_tr),

treners(Fam_tr,Im_tr,Ot_tr,Telephone,Zal),

write(" Familiya_trenera:", Fam_tr),nl,

write(" Imya_trenera:", Im_tr ),nl,

write("Otchestvo_trenera:", Ot_tr ),nl,

write(" Telephone_trenera:", Telephone), nl,

write("Zal:", Zal), nl,nl,

write("Vi uvereni?"), nl,

write("1 -da"), nl,

write("2 -net"), nl,

readchar(C),

mmm1(C).

u('2'):-makewindow(17,7,3,"Udalenie trenera",5,5,15,60),

write("Vvedite familiyu"), nl,

readln(Fam_kl),

klients(Fam_kl,Im_kl,Ot_kl,Telephone,Zal,Fam_tr),

write(" Familiya_klienta:", Fam_kl),nl,

write(" Imya_klienta:", Im_kl ),nl,

write("Otchestvo_klienta:", Ot_kl ),nl,

write(" Telephone_klienta:", Telephone), nl,

write(" Poseschaemy_zal:", Zal), nl,

write(" Familiya_trenera:", Fam_tr), nl,nl,

write("Vi uvereni?"), nl,

write("1 -da"), nl,

write("2 -net"), nl,

readchar(C),

mmm(C).

mmm('1'):-write("Vvedite familiyu"), nl,

readln(Fam_kl),

retract(klient(Fam_kl,_,_,_,_,_)),

menu.

mmm('2'):-menu.

mmm1('1'):-write("Vvedite familiyu"), nl,

readln(Fam_kl),

retract(trener(Fam_tr,_,_,_,_)),

menu.

mmm1('2'):-menu.

r('1'):-makewindow(18,7,3,"Redaktirovanie trenera",5,5,15,60),

write("Vvedite familiyu"), nl,

readln(Fam_tr),

treners(Fam_tr,Im_tr,Ot_tr,Telephone,Zal),

write(" Familiya_trenera:", Fam_tr),nl,

write(" Imya_trenera:", Im_tr ),nl,

write(" Otchestvo_trenera:", Ot_tr ),nl,

write(" Telephone_trenera:", Telephone), nl,

write(" Zal:", Zal), nl,

nl,

write("4to budem redaktirovat?"), nl,

write("1-Familiya_trenera"),nl,

write("2-Imya_trenera"),nl,

write("3-Otchestvo_trenera"),nl,

write("4-Telephone_trenera"), nl,

write("5-Zal"), nl,

readchar(C),

mr(C).

r('2'):-makewindow(19,7,3,"Redaktirovanie klienta",5,5,15,60),

write("Vvedite familiyu"), nl,

readln(Fam_kl),

klients(Fam_kl,Im_kl,Ot_kl,Telephone,Zal,Fam_tr),

write(" Familiya_klienta:", Fam_kl),nl,

write(" Imya_klienta:", Im_kl ),nl,

write(" Otchestvo_klienta:", Ot_kl ),nl,

write(" Telephone_klienta:", Telephone), nl,

write(" Poseschaemy_zal:", Zal), nl,

write(" Familiya_trenera:", Fam_tr), nl,nl,

write("4to budem redaktirovat?"), nl,

write("1-Familiya_klienta"),nl,

write("2-Imya_klienta"),nl,

write("3-Otchestvo_klienta"),nl,

write("4-Telephone_klienta"), nl,

write("5-Poseschaemy_zal"), nl,

write("6-Familiya_trenera"), nl,

readchar(C),

mm(C).

mr('1'):-makewindow(20,7,3,"Familiya_trenera",5,5,15,60),

write("Vvedite familiyu"),nl,

readln(Fam_tr),

treners(Fam_tr,Im_tr,Ot_tr,Telephone,Zal),

write("Vvedite novuyu familiyu"),nl,

readln(Fam_tr_new),

retract(trener(Fam_tr,_,_,_,_)),

assert(trener(Fam_tr_new,Im_tr,Ot_tr,Telephone,Zal)), menu.

mr('2'):-makewindow(21,7,3,"Imya_trenera",5,5,15,60),

write("Vvedite familiyu"),nl,

readln(Fam_tr),

treners(Fam_tr,Im_tr,Ot_tr,Telephone,Zal),

write("Vvedite novoe imya trenera"),nl,

readln(Im_tr_new),

retract(trener(Fam_tr,_,_,_,_)),

assert(trener(Fam_tr,Im_tr_new,Ot_tr,Telephone,Zal)), menu.

mr('3'):-makewindow(22,7,3,"Otchestvo trenera",5,5,15,60),

write("Vvedite familiyu"),nl,

readln(Fam_tr),

treners(Fam_tr,Im_tr,Ot_tr,Telephone,Zal),

write("Vvedite novoe otchestvo"),nl,

readln(Ot_tr_new),

retract(trener(Fam_tr,_,_,_,_)),

assert(trener(Fam_tr,Im_tr,Ot_tr_new,Telephone,Zal)), menu.

mr('4'):-makewindow(23,7,3,"Telephone",5,5,15,60),

write("Vvedite familiyu"),nl,

readln(Fam_tr),

treners(Fam_tr,Im_tr,Ot_tr,Telephone,Zal),

write("Vvedite noviy telephone"),nl,

readln(Telephone_new),

retract(trener(Fam_tr,_,_,_,_)),

assert(trener(Fam_tr,Im_tr,Ot_tr,Telephone_new,Zal)), menu.

mr('5'):-makewindow(24,7,3,"Zal",5,5,15,60),

write("Vvedite familiyu"),nl,

readln(Fam_tr),

treners(Fam_tr,Im_tr,Ot_tr,Telephone,Zal),

write("Vvedite noviy zal"),nl,

readln(Zal_new),

retract(trener(Fam_tr,_,_,_,_)),

assert(trener(Fam_tr,Im_tr,Ot_tr,Telephone,Zal_new)),menu.

v('1'):-makewindow(25,7,3,"Trenery",5,5,15,60),

vivod1_tr(Fam_tr,Im_tr,Ot_tr,Telephone,Zal),

shiftwindow(1).

v('2'):-makewindow(26,7,3,"Klienty",5,5,15,60),

vivod1_kl(Fam_kl,Im_kl,Ot_kl,Telephone,Zal,Fam_tr),

shiftwindow(1).

start:-existfile("zal.ddb"),

consult("zal.ddb"),

openwrite(f,"zal.ddb"),

closefile(f),

menu.

GOAL

Start

Размещено на Allbest.ru


Подобные документы

  • Анализ предметной области и создание таблиц базы данных "Фирма по продаже запчастей". Простой выбор данных и обработка группирующих запросов с условием средствами MS SQL Server 2008. Создание хранимых процедур и функций, изменение структуры базы данных.

    курсовая работа [6,1 M], добавлен 16.12.2015

  • Определение понятия и общее описание базы данных как упорядоченной информационной системы на носителе информации. Описание предметной области и разработка приложения базы данных, содержащей информацию о расписании занятий, для преподавателей кафедры.

    курсовая работа [1,3 M], добавлен 08.08.2012

  • Основные функции системы управления базами данных - описание структуры базы данных, обработка данных и управление данными. Компьютерный магазин как предметная область, ее технико-экономические характеристики. Построение логической и физической моделей.

    курсовая работа [3,7 M], добавлен 02.07.2012

  • Цикл с выходом по выбору определенного пункта меню. Хранение данных о предметной области в текстовом файле. Загрузка данных из текстового файла, хранение, удаление, сохранение и обработка. Создание новой базы данных. Структура программного комплекса.

    курсовая работа [1,1 M], добавлен 19.01.2016

  • Анализ предметной области с использованием моделей методологии ARIS и разработка ER-диаграммы. Описание входной и выходной информации для проектирования реляционной базы данных. Разработка управляющих запросов и связей между ними с помощью языка SQL.

    курсовая работа [975,2 K], добавлен 30.01.2014

  • Разработка базы данных с информацией о сотрудниках, товарах, со справочником типов товаров средствами системы управления базами данных MySQL с помощью SQL-запросов. Разработка инфологической модели предметной области. Структура таблиц, полей базы данных.

    контрольная работа [648,7 K], добавлен 13.04.2012

  • Цели проектирования базы данных "Аэропорт": обработка информации о рейсах, расписании самолетов и билетах. Анализ предметной области. Принцип работы модели. Особенности реализации информационной системы. Среда программирования клиентского приложения.

    лабораторная работа [2,4 M], добавлен 07.01.2014

  • Создание программы для начисления заработной платы в Муниципальном учреждении "Центральная бухгалтерия управления образования". Описание предметной области. Выбор технологии языка и среды программирования. Проектирование архитектуры базы данных.

    дипломная работа [988,3 K], добавлен 19.01.2017

  • Особенности предметной области - накопительной и скидочной системы в магазине продажи одежды. Описание работы системы. Инфологическое проектирование модели базы данных. Схема "сущность-связь", нотация Питера Чена. Проектирование базы данных на языке SQL.

    курсовая работа [1,8 M], добавлен 26.02.2016

  • Описание объекта информатизации и предметной области. Анализ параметров объектов предметной области, сбор исходных данных. Архитектура проекта, создание интерфейса базы данных. Поиск по объектам, датам. Редактирование, отчеты. Назначение программы.

    курсовая работа [2,3 M], добавлен 20.01.2016

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.