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

База данных Аудитории на языке ЛИСП

.doc
Скачиваний:
9
Добавлен:
01.05.2014
Размер:
79.87 Кб
Скачать

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

Системные свойства символа.

Задание:

Задача 5

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

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

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

Задание 5.2. Внести изменения в запись с определенным номером аудитории (изменив ее вместимость). Выяснить, какие лекционные аудитории, рассчитанные на число студентов не меньше заданного, имеются в определенном корпусе.

Печатное имя символа -- уникальная последовательность знаков в

коде ASCII, которая используется интерпретатором для идентификации

символа при вводе информации и при выводе значения символа. Печатное

имя символа не может быть изменено.

Текущим значением символа может быть любой объект muLISPа,

включая и сам этот символ. По умолчанию значением символа является сам

этот символ.

Список свойств представляет собой множество пар вида:

<индикатор_свойства значение_свойства>

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

Если к символу обращаются, как к функции (то есть он стоит на

первом месте в списке), то определение функции, ассоциированной с этим

символом, применяется к аргументам вызова. Если с символом не было ас-

социировано определение функции, то происходит прерывание и выдается

сообщение об ошибке:

Undefined Function <печатное_имя_символа>

Назначение

Печатное имя символа

Текущее значение

Список свойств

Определение функции

Распечатать меню

prmenu

prmenu

nil

Проверка принадлежит ли элемент списку

member

member

List El

Function-value

Добавление ряда свойств

newart

newart

NewEl

Function-value

Добавление нового ряда(вызов newart )

newartEl

newartEl

Распечатка ряда

pr

pr

pa

Распечатка заглавия данных и вызов pr

prdata

prdata

Меню для изменения данных

wrmenuch

wrmenuch

nil

Поск по номеру в списке

find

find

List Num

Function-value

Изменение данных выбранного в меню свойства

changedata

changedata

num Choice Newdata

Function-value

Ввод значений(которое надо изменить и на которое надо изменить)

chrat

chrat

nil

Вывод по аудитории количесва в неей спецоборудования

find1

find1

List Cath

Function-value

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

search1

search1

nil

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

find2

find2

List bu mi

Function-value

Вывод списа аудиторий

printaudlist

printaudlist

List

Ввод\вывод данных для поиска вместительных аудиторий по номеру корпуса и минимально нужному количеству мест

search2

search2

Nil

Выполнение необходимых действий

action

action

X

Вывод меню

menu

menu

Nil

Вид базы данных:

Имя атрибутов

номер аудитории

корпус

Этаж

вместимость

принадлежность определенной кафедре

число мест, оснащенных специальным оборудованием

Pr1

1

1

1

10

Math

10

. . .

PrN

N

N

1

10

Math

0

Вывод:

Построенная программа реализует задачу 5 в полном объеме.

Приложения:

Исходный файл.

(defun prmenu (lambda (Nil)

(wrs)

(clear-screen)

(eql (print '#1_save_to_file)

(print '#2_new_article)

(print '#3_view_the_table)

(print '#4_change_data)

(print '#5_the_first_search)

(print '#6_the_second_search)

(print '#7_exit)

)

(set-cursor 10 0)

(eql (print 'Enter_your_choice: ))

(terpri)

)

)

(defun member (lambda (List El)

(cond ((Null List) Nil )

((Eql (car List) El) T )

(T (member (cdr List) El) )

)

)

)

(defun newart (lambda (NewEl)

(eql (print 'Input_an_aud_number:))

(put NewEl 'number (read N))

(eql (print 'Input_an_building_number:))

(put NewEl 'building (read B))

(eql (print 'Input_an_floor_number:))

(put NewEl 'floor (read F))

(eql (print 'Input_a_volume:))

(put NewEl 'volume (read V))

(eql (print 'Input_a_cathedra:))

(put NewEl 'cathedra (read C))

(eql (print 'Input_a_devices_number:))

(put NewEl 'devices (read D))

(SetQ p (cons NewEl p))

)

)

(defun newartEl (lambda

(clear-screen)

(eql (print 'Input_a_row_name:))

(setq nname (read Name))

(cond ( (eql T (member p nname)) (newartEl))

(T (newart nName))

)

)

)

(defun pr(lambda (pa)

(cond ( (not (NULL pa) )

(eql (prin1 (car pa))

(prin1 '-----)

(prin1 (get (car pa) 'number))

(prin1 '-------)

(prin1 (get (car pa) 'building))

(prin1 '--------)

(prin1 (get (car pa) 'Floor))

(prin1 '------)

(prin1 (get (car pa) 'Volume))

(prin1 '-------)

(prin1 (get (car pa) 'cathedra))

(prin1 '--------)

(print (get (car pa) 'devices))

)

(pr (cdr pa))

)

)

)

)

(defun prdata(lambda

(clear-screen)

(eql (print 'Name__Number__Building__Floor__Volume__cathedra__devices))

(eql (print '------------------------------------------------------------))

(pr p)

(read)

)

)

(defun wrmenuch(lambda (NIL)

(wrs)

(clear-screen)

(eql (print '#1_change_the_building_number)

(print '#2_change_the_floor_number)

(print '#3_change_the_volume)

(print '#4_change_the_cathedra_name)

(print '#5_change_the_devices_number)

)

(set-cursor 10 0)

(eql (print 'Enter_your_choice: ))

(terpri)

)

)

(defun find (lambda (List Num)

(cond ((Null List) Nil)

((eql (get (car List) 'Number) Num) (car List))

(T (find (cdr List) Num))

)

)

)

(defun changedata(lambda (num Choice Newdata)

(cond ( (not (eql (setq pn (find P Num)) Nil))

(cond ((eql Choice 1) (put pn 'building Newdata))

((eql Choice 2) (put pn 'floor Newdata))

((eql Choice 3) (put pn 'volume Newdata))

((eql Choice 4) (put pn 'cathedra Newdata))

((eql Choice 5) (put pn 'devices Newdata))

))

)

)

)

(defun chrat(lambda (NIL)

(wrmenuch)

(setq Choice (read))

(eql (print 'Input_an_aud_number:))

(setq Num (read))

(eql (print 'Input_a_new_meaning:))

(setq Newdata (read))

(changedata Num Choice Newdata)

(read)

)

)

(defun find1(lambda (List Cath)

(cond ((Null List) 0)

((eql (get (car list) 'cathedra) Cath) (+ (get (car list) 'devices) (find1 (cdr List) cath)))

(T (find1 (cdr list) cath))

)

)

)

(defun search1(lambda (nil)

(eql (print 'Input_a_cathedra_name:))

(setq Cath (read))

(eql (print 'The_devices_quantity_is:))

(eql (print (find1 P Cath)))

(read)

)

)

(defun find2(lambda (List bu mi)

(cond ((Null List) '())

((and (eql (get (car list) 'building) bu) (> (get (car list) 'volume) (- mi 1))) (cons (car list) (find2 (cdr List) bu mi)))

(T (find2 (cdr list) bu mi))

)

)

)

(defun printaudlist(lambda (List)

(cond (( not (Null List))

(eql (print (get (car List) 'Number)))

(printaudlist (cdr List))

))

)

)

(defun search2(lambda (Nil)

(eql (print 'Input_a_building_number:))

(setq Building (read))

(eql (print 'Input_a_min_volume:))

(setq MinQ (read))

(eql (print 'The_sizeble_auditoriums_are:))

(printaudlist (find2 P Building MinQ))

(read)

)

)

(defun action (lambda (X)

(cond ( (eql X 1) (save X3) )

( (eql X 2) (newartel) )

( (eql X 3) (prdata) )

( (eql X 4) (chrat) )

( (eql X 5) (search1) )

( (eql X 6) (search2) )

)

(cond ((< X 7) (menu))

(T (system))

)

)

)

(defun menu (lambda (Nil)

(prmenu)

(rds)

(action (read X))

)

)

(menu)

(load X3)