Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Шумихин / Шумихин / Лабораторная работа №6 - Таран Е. Ю. (1)

.docx
Скачиваний:
10
Добавлен:
20.05.2015
Размер:
498.72 Кб
Скачать

Одесский национальный университет им. И.И.Мечникова

Министерство науки и образования Украины

Лабораторная работа №4

по курсу: «Специализированые

языки программирования»

выполнил студент III курса

гр. МОКС, Таран Евгений Юрьевич

Одесса 2012

Цель работы – создание справочной системы «Расписание занятий преподавателей кафедры». Программа разрабатывается на РЕАЛЬНЫХ данных ВАШЕЙ кафедры.

Работа должна содержать

  • описание предметной области. Рекомендуется использовать табличный способ описания формализма. Например

    Ф. И. О.

    Преподавателя

    Предмет

    Время

    курс

    День

    недели

    пара

    аудитория

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

    курс

    Шумихин С.А.

    Логическое программирование

    пятница

    11

    91

    ПМ

    3

    . . .

    . . .

    . . .

    . . .

    . . .

    . . .

  • Описание и назначение используемых доменов. Рекомендуется использовать в том числе и составные домены.

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

  • Система должна позволять давать пользователю ответы на следующие вопрос.

    • Педагогический состав кафедры

    • Перечень предметов, занятия по которым проводятся на кафедре

    • В какие дни недели и кем проводятся занятия по указанному курсу

    • Кто из преподавателей кафедры проводит занятия в указанный день недели

    • Расписание указанного преподавателя.

    • Когда, кто и по каким курсам проводит занятия в указанной студенческой группе

  • Запросы к системе, результаты работы системы.

  • Исходный текст программы в отдельном файле.

Т. к. в постановке задачи указано:

  • Исходный текст программы в отдельном файле.

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

Прежде чем получать ответы на заданные запросы необходимо создать и заполнить БД. В БД для описания расписания мы используем факты вида, para(lectorer/1, subject/1, time/3, course/2).

Lectorer(X) – ФИО лектора

Subject(X) – предмет который ведет лектор.

Time(A,B,C) – A – день недели, B – номер пары, C – аудитория.

Course(A,B) – A – название курса, B – курс.

Созданием БД занимается предикат createDB , который делает вначале динамическими выше описанные предикаты, а затем с помощью предиката assert добавляет информацию БД. Т. к. в SWI-прологе нет возможности описать (объявить) домены, или предикаты, то также не удалось найти, как дать название БД, и поэтому имя БД не давалось, но это не повлияло на работу программы. Информация по расписанию была взять из реального расписания кафедры МОКС.

После createDB мы может использовать написанные предикаты.

Также вначале добавим, что в коде будут использованы предикаты которые были описаны на парах – del и list_set.

Также используется предикат writelist, который выводит элементы списка поочередно с новой строки, для правильной, понятной подачи информации из запросов.

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

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

    • Педагогический состав кафедры

writeLectorer. – вначале мы с помощью предиката findall извлекаем имена преподавателей из всех фактов, а затем переводит список этих имен в множество, убирая повторяющиеся элементы, и выводит их предикатом writelist. Тестирование:

    • Перечень предметов, занятия по которым проводятся на кафедре

writeSubject - Предикат аналогичен предыдущему, только в нем мы извлекаем названия предметов.

    • В какие дни недели и кем проводятся занятия по указанному курсу

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

writeSubjectTimetable(X) – выделяет список дней недели по которые проводятся лекции по указанному курсу.

writeLectorerList(X,LIST) – предикат который вызывается в 1-ом предикате, и для каждого дня недели выбирает преподавателей, которые ведут данный курс.

Тестирование:

    • Кто из преподавателей кафедры проводит занятия в указанный день недели

writeLectorerInDay(X) - Этот предикат по выполнению похож на 1-ый и 2-ой. Мы извлекаем из БД для данного дня всех преподавателей, и затем удаляем повторяющиеся ФИО.

Тестирование:

    • Расписание указанного преподавателя.

writeLectorerTimetable(X) – данный предикат по алгоритму похож на 3-ий. Вначале мы извлекаем из БД все дни недели, в который содержится ФИО указанного преподавателя, затем используемый в нем предикат

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

    • Когда, кто и по каким курсам проводит занятия в указанной студенческой группе

Реализация этого запроса использует 3 предиката.

writeGroupTimetable(X,Y) (где X – название группы, Y – на каком курсе группа) вначале с помощью findall, для указанной группы выбирает вначале все дни, по которым у них ведут пары преподаватели кафедры МОКС. Далее

writeDayGT(X,Y,L) (X,Y – те же, L – список дней недели, полученный из предыдущего предиката) – для данного дня недели пишет его название, и для каждого дня недели вызывает предикат

writeGT(X,Y,H) (где H – определенный день недели) - для данной группы и данного дня недели, последовательно обращаясь к параметрам из предиката para, извлекает все название предметов, ФИО лекторов, и номер пары.

Тестирование:

Список возможных значений фактов, используемых в БД (для вызова предикатов, для которых в БД существуют соответствующие значения):

Lectorer: 'Petryshina T.I.' , 'Makogon V.S.' , Penko V.G.' , 'Shpinareva I.M.' , 'Lisitcina I.N.' , 'Trybina N.F.' .

Subject: 'Programmirovanie' , 'Bazi dannix' , Relycionaya algebra' , 'Arhitektyra programnogo obespecheniya' , 'Proektirovanie programnogo obespecheniya' , 'Obiektno orientirovanoe programmirovanie' , 'Shifrovanie dannix' , 'Teoriya programmirovaniya' , Analiz dannix' , 'Operacionnie systemi' , 'Mewprocessornoe vzaimodeictvie'

time(X,_,_): ponedelnik, vtornik, sreda, chetverg.

course(X,_): 'PM' , 'FIT'

course(_,Y): 1, 2, 3, 4, 5, 6.

Вывод

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