Скачиваний:
19
Добавлен:
01.05.2014
Размер:
332.29 Кб
Скачать

Содержательная постановка задачи.

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

Таблица, представляющая базу данных.

Объекты (№ ауд.)

Корпус

Этаж

Вместимость

Кафедра

Специализированных раб/мест

3324

3

3

100

ВМ-2

2

3322

3

3

10

ВМ-2

12

3402

3

4

15

МОЭВМ

10

3401

3

4

20

МОЭВМ

12

3403

3

4

17

МОЭВМ

15

Таблица системных свойств символа в muLISP.

Операции

value

property

Function definition

Print name

Назначение

Set[dest,src]

Put [symb,key,obj]

defun

set

Изменение

Set[symb,key]

put

defun

-

Чтение

Имя символа

get

getd

-

Если не определено, то чтение

Print name

NIL

Undefined function

-

Описание интерфейса программы:

Меню программы располагается на черном фоне и имеет следующее представление:

Пользователю предлагается сделать выбор от 1-ого до 8-ми.

При выборе пункта «1» меню будет запущена процедура загрузки базы из файла. Пользователь должен будет ввести имя файла. Интерфейс представлен на снимке окна программы (ЧБ вариант).

В случае если файл не найден, будет выведено сообщение об ошибке.

При выборе пункта «2» меню будет запущена процедура сохранения базы в файла. Пользователь должен будет ввести имя файла. Интерфейс представлен на снимке окна программы (ЧБ вариант).

В результате будет сформирован файл mylis со следующим содержимым:

BEGIN FILE BAZE

3403

3

4

17

MOEBM

15

3401

3

4

20

MOEBM

12

3402

3

4

15

MOEBM

10

3322

3

3

10

BM-2

12

3324

3

3

100

BM-2

2

END FILE BAZE

(RETURN)

При выборе пункта «3» меню будет запущена процедура печати базы в файла. Пользователь должен будет ввести имя файла. Интерфейс представлен на снимке окна программы (ЧБ вариант).

В результате будет сформирован файл ttt со следующим содержимым:

Аудитория: 3403

Корпус: 3 Этаж: 4 Вместимость: 17 Кафедра: MOEBM Оборудованных мест: 15

Аудитория: 3401

Корпус: 3 Этаж: 4 Вместимость: 20 Кафедра: MOEBM Оборудованных мест: 12

Аудитория: 3402

Корпус: 3 Этаж: 4 Вместимость: 15 Кафедра: MOEBM Оборудованных мест: 10

Аудитория: 3322

Корпус: 3 Этаж: 3 Вместимость: 10 Кафедра: BM-2 Оборудованных мест: 12

Аудитория: 3324

Корпус: 3 Этаж: 3 Вместимость: 100 Кафедра: BM-2 Оборудованных мест: 2

При выборе пункта «4» меню будет запущена процедура создания новой базы. Пользователь должен будет выбрать действие. Интерфейс представлен на снимке окна программы (ЧБ вариант).

При выборе пункта «5» меню будет запущена процедура добавления нового элемента в базу. Пользователь должен будет ввести номер аудитории, корпус, этаж, вместимость, кафедру и количество оборудованных мест. Интерфейс представлен на снимке окна программы (ЧБ вариант).

При выборе пункта «6» меню будет запущена процедура просмотра содержимого базы. Интерфейс представлен на снимке окна программы (ЧБ вариант).

Программа позволяет обрабатывать запрос о количестве специализированных рабочих мест принадлежащих кафедре. Для этого нужно выбрать пункт меню «7» , ввести название кафедры. ЧБ вариант вывода программы:

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

(SETQ BAZE '("3324" "3322" "3402" "3401" "3403"))

(PUT "3324" KORPUS "3")

(PUT "3324" ETAGE "3")

(PUT "3324" VMESTIMOST "100")

(PUT "3324" KAFEDRA "BM-2")

(PUT "3324" MESTSOBORUDOVANIEM 2)

(PUT "3322" KORPUS "3")

(PUT "3322" ETAGE "3")

(PUT "3322" VMESTIMOST "10")

(PUT "3322" KAFEDRA "BM-2")

(PUT "3322" MESTSOBORUDOVANIEM 12)

(PUT "3402" KORPUS "3")

(PUT "3402" ETAGE "4")

(PUT "3402" VMESTIMOST "15")

(PUT "3402" KAFEDRA "MOEBM")

(PUT "3402" MESTSOBORUDOVANIEM 10)

(PUT "3401" KORPUS "3")

(PUT "3401" ETAGE "4")

(PUT "3401" VMESTIMOST "20")

(PUT "3401" KAFEDRA "MOEBM")

(PUT "3401" MESTSOBORUDOVANIEM 12)

(PUT "3403" KORPUS "3")

(PUT "3403" ETAGE "4")

(PUT "3403" VMESTIMOST "17")

(PUT "3403" KAFEDRA "MOEBM")

(PUT "3403" MESTSOBORUDOVANIEM 15)

(LOOP (EVAL (READ)))

;-------------------------------------------------------------------------------

(SETQ ERRORLF

"Ошибка. Файл испорчен, либо не содержит базы. База не загружена. Нажмите ENTER")

(DEFUN ERRORNB ()

(FOREGROUND-COLOR 12)

(WRITE-STRING "Ошибка. База пуста. Нажмите ENTER")

(FOREGROUND-COLOR 7)

(READ-LINE)

)

;-------------------------------------------------------------------------------

(DEFUN OUT (SYM)

(FOREGROUND-COLOR 8)

(WRITE-STRING "Аудитория: ") (FOREGROUND-COLOR 14)

(WRITE-STRING SYM) (FOREGROUND-COLOR 8) (TERPRI)

(WRITE-STRING "Корпус: ") (FOREGROUND-COLOR 14)

(WRITE-STRING (GET SYM KORPUS)) (FOREGROUND-COLOR 8)

(WRITE-STRING " Этаж: ") (FOREGROUND-COLOR 14)

(WRITE-STRING (GET SYM ETAGE)) (FOREGROUND-COLOR 8)

(WRITE-STRING " Вместимость: ") (FOREGROUND-COLOR 14)

(WRITE-STRING (GET SYM VMESTIMOST)) (FOREGROUND-COLOR 8)

(WRITE-STRING " Кафедра: ") (FOREGROUND-COLOR 14)

(WRITE-STRING (GET SYM KAFEDRA)) (FOREGROUND-COLOR 8)

(WRITE-STRING " Оборудованных мест: ") (FOREGROUND-COLOR 14)

(PRIN1 (GET SYM MESTSOBORUDOVANIEM))

(FOREGROUND-COLOR 8) (TERPRI 2)

); END (DEFUN OUT)

;-------------------------------------------------------------------------------

(DEFUN OUTALL (BAZ)

(IF (NULL BAZE) (PROGN (ERRORNB)(RETURN)))

(IF (NULL BAZ)()(PROGN (OUT (CAR BAZ))(OUTALL (CDR BAZ)))

)

); END (DEFUN OUTALL)

;-------------------------------------------------------------------------------

(DEFUN ADD (BAZ)

(READ-LINE)

(FOREGROUND-COLOR 10)

(WRITE-STRING " ДОБАВЛЕНИЕ ЭЛЕМЕНТА")

(FOREGROUND-COLOR 7)

(TERPRI 2)

(WRITE-STRING "Введите номер аудитории ")

(SETQ SYM (READ-LINE))

(WRITE-STRING "Введите корпус ")

(PUT SYM KORPUS (READ-LINE))

(WRITE-STRING "Введите этаж ")

(PUT SYM ETAGE (READ-LINE))

(WRITE-STRING "Введите вместимость ")

(PUT SYM VMESTIMOST (READ-LINE))

(WRITE-STRING "Введите кафедру ")

(PUT SYM KAFEDRA (READ-LINE))

(WRITE-STRING "Введите количество оборудованных мест ")

(PUT SYM MESTSOBORUDOVANIEM (READ-LINE))

(SETQ BAZE (CONS SYM BAZ))

(WRITE-STRING "В базу добавлен новый элемент. Нажмите ENTER")

); END ADD

;-------------------------------------------------------------------------------

(DEFUN PRINT (BAZ)

(READ-LINE)

(IF (NULL BAZ) (PROGN (ERRORNB)(RETURN)))

(FOREGROUND-COLOR 10)

(WRITE-STRING " Вывод БАЗЫ ")

(TERPRI 2)

(TERPRI 2) (FOREGROUND-COLOR 7)

(WRITE-STRING "Введите имя файла в который должна быть выведена база ")

(FOREGROUND-COLOR 10)

(WRS (READ-LINE))

(FOREGROUND-COLOR 7)

(OUTALL BAZ)

(SETQ *PRINTER-ECHO* NIL)

(WRS)

(RDS)

(FOREGROUND-COLOR 7)

(WRITE-STRING "База распечатана успешно. Нажмите ENTER")

(READ-LINE)

)

;-------------------------------------------------------------------------------

(DEFUN OF (SYM)

(TERPRI 1)

(WRITE-STRING SYM)

(TERPRI 1)

(WRITE-STRING (GET SYM KORPUS))

(TERPRI 1)

(WRITE-STRING (GET SYM ETAGE))

(TERPRI 1)

(WRITE-STRING (GET SYM VMESTIMOST))

(TERPRI 1)

(WRITE-STRING (GET SYM KAFEDRA))

(TERPRI 1)

(PRIN1 (GET SYM MESTSOBORUDOVANIEM))

(TERPRI 1)

)

;-------------------------------------------------------------------------------

(DEFUN OAF (BAZ)

(IF (NULL BAZ)()(PROGN (OF (CAR BAZ))(OAF (CDR BAZ)))

)

)

;-------------------------------------------------------------------------------

(DEFUN SAVE (BAZ)

(READ-LINE)

(IF (NULL BAZ) (PROGN (ERRORNB)(RETURN)))

(FOREGROUND-COLOR 10)

(WRITE-STRING " СОХРАНЕНИЕ БАЗЫ ")(FOREGROUND-COLOR 7)

(TERPRI 2)

(WRITE-STRING "Введите имя файла в котором должна быть сохранена база ")

(FOREGROUND-COLOR 10)

(WRS (READ-LINE))

(FOREGROUND-COLOR 7)

(WRITE-STRING "BEGIN FILE BAZE") (TERPRI 1)

(OAF BAZ)

(WRITE-STRING "END FILE BAZE")(TERPRI 1)

(WRITE-STRING "(RETURN)")

(WRS)

(RDS)

(WRITE-STRING "База сохранена успешно. Нажмите ENTER")

(READ-LINE)

)

;-------------------------------------------------------------------------------

(DEFUN CLEAR ()

(SETQ BAZE '())

)

;-------------------------------------------------------------------------------

(DEFUN NEW ()

(FOREGROUND-COLOR 12)

(READ-LINE)

(WRITE-STRING

" ВНИМАНИЕ. При выполнении данной операци текущая база будет УНИЧТОЖЕНА.")

(TERPRI 2)

(FOREGROUND-COLOR 7)

(WRITE-STRING "Вы уверенны, что хотите продолжить? ")

(FOREGROUND-COLOR 14)

(WRITE-STRING "1-НЕТ Любой другой символ-ДА ")

(FOREGROUND-COLOR 7)

(IF (EQL 1 (READ))

(RETURN)

(PROGN(CLEAR)

(WRITE-STRING "Создана новая база. Нажмите ENTER")

(READ-LINE)(READ-LINE)

)

)

)

;-------------------------------------------------------------------------------

(DEFUN AF ()

(SETQ SYM (READ-LINE))

(PUT SYM KORPUS (READ-LINE))

(PUT SYM ETAGE (READ-LINE))

(PUT SYM VMESTIMOST (READ-LINE))

(PUT SYM KAFEDRA (READ-LINE))

(PUT INT MESTSOBORUDOVANIEM (READ-LINE))

(SETQ BAZE (CONS SYM BAZE))

)

;-------------------------------------------------------------------------------

(DEFUN LB ()

(IF (EQL (READ-LINE) "END FILE BAZE")

()

(PROGN (AF)(LB))

)

)

;-------------------------------------------------------------------------------

(DEFUN LOAD ()

(READ-LINE)

(FOREGROUND-COLOR 10)

(WRITE-STRING " ЗАГРУЗКА БАЗЫ ")

(TERPRI 2) (FOREGROUND-COLOR 7)

(WRITE-STRING "Введите имя файла с базой ")

(FOREGROUND-COLOR 10)

(RDS (READ-LINE))

(FOREGROUND-COLOR 7)

(IF (EQL (READ-LINE) "BEGIN FILE BAZE")

(PROGN (CLEAR)

(LB)

(RDS)

(WRITE-STRING "База загружена успешно. Нажмите ENTER")

(READ-LINE)

)

(PROGN (RDS)

(FOREGROUND-COLOR 12)

(WRITE-STRING ERRORLF)

(READ-LINE)

(FOREGROUND-COLOR 8)

)

)

)

;-------------------------------------------------------------------------------

(DEFUN FAUDIT (B K N)

(IF (NULL B) (RETURN))

(IF (EQL (GET (CAR B) K) N) (SETQ NUM (+ NUM (ABS(GET (CAR B) MESTSOBORUDOVANIEM))) ) )

(FAUDIT (CDR B) K N)

)

;-------------------------------------------------------------------------------

(DEFUN HOWMANY (BAZ)

(SETQ KEY KAFEDRA)

(SETQ NUM 0)

(FOREGROUND-COLOR 10)

(WRITE-STRING " ПОИСК")

(FOREGROUND-COLOR 7)

(TERPRI 2)

(READ-LINE)

(WRITE-STRING " Введите кафедру ")

(SETQ NAME (READ-LINE))

(FAUDIT BAZ KEY NAME)

(TERPRI 1)

(FOREGROUND-COLOR 14)

(IF (EQL NUM 0)

(WRITE-STRING " Аудиторий принадлежащей этой кафедре в базе нет.")

(PROGN

(WRITE-STRING "Найдено ")

(PRIN1 NUM)

(WRITE-STRING " мест принадлежащих кафедра.")

)

)

(FOREGROUND-COLOR 7)

(TERPRI 1)

(WRITE-STRING "Нажмите ENTER")

(READ-LINE)

)

;-------------------------------------------------------------------------------

(DEFUN HELLO ()

(READ-LINE)

(CLEAR-SCREEN)

(WRITE-STRING "Лабораторная работа 3. Выполнил: ")(FOREGROUND-COLOR 14)

(WRITE-STRING "Баскаков Ю.Н.")(FOREGROUND-COLOR 7)

(WRITE-STRING " гр.")(FOREGROUND-COLOR 14)

(WRITE-STRING " 2351")(FOREGROUND-COLOR 7)

(TERPRI 5)

)

;-------------------------------------------------------------------------------

(DEFUN MAIN ()

(RDS)

(FOREGROUND-COLOR 10)

(WRITE-STRING " ГЛАВНОЕ МЕНЮ ")

(FOREGROUND-COLOR 7) (TERPRI 2)

(WRITE-STRING " Выберите нужный пункт.")

(TERPRI 1)

(WRITE-STRING " 1 Загрузка базы.")

(TERPRI 1)

(WRITE-STRING " 2 Сохранение базы.")

(TERPRI 1)

(WRITE-STRING " 3 Печать базы.")

(TERPRI 1)

(WRITE-STRING " 4 Создать новую базу.")

(TERPRI 1)

(WRITE-STRING " 5 Добавить новый элемент.")

(TERPRI 1)

(WRITE-STRING " 6 Просмотр базы.")

(TERPRI 1)

(WRITE-STRING " 7 Сколько обектов обл. зад. св-ом")

(TERPRI 1)

(WRITE-STRING " 8 Выход.")

(TERPRI 2)

(WRITE-STRING " ")

(FOREGROUND-COLOR 10)

(SETQ VAR (READ))

(FOREGROUND-COLOR 7)

(IF (EQL VAR 1)

(PROGN (CLEAR-SCREEN)(LOAD)(CLEAR-SCREEN)(MAIN)(RETURN)))

(IF (EQL VAR 2)

(PROGN (CLEAR-SCREEN)(SAVE BAZE)(CLEAR-SCREEN)(MAIN)(RETURN)))

(IF (EQL VAR 3)

(PROGN (CLEAR-SCREEN)(PRINT BAZE)(CLEAR-SCREEN)(MAIN)(RETURN)))

(IF (EQL VAR 4)

(PROGN (CLEAR-SCREEN)(NEW)(CLEAR-SCREEN)(MAIN)(RETURN)))

(IF (EQL VAR 5)

(PROGN (CLEAR-SCREEN)(ADD BAZE)(CLEAR-SCREEN)(MAIN)(RETURN)))

(IF (EQL VAR 7)

(PROGN (CLEAR-SCREEN)(HOWMANY BAZE)(CLEAR-SCREEN)(MAIN)(RETURN)))

(IF (EQL VAR 8)(SYSTEM) )

(IF (EQL VAR 6)

(PROGN (CLEAR-SCREEN)

(READ-LINE)

(OUTALL BAZE)

(IF (NULL BAZE) ()

(PROGN(WRITE-STRING "Нажмите ENTER")

(READ-LINE)))

(CLEAR-SCREEN)

(MAIN)

(RETURN)

)

)

(CLEAR-SCREEN)

(FOREGROUND-COLOR 12)

(WRITE-STRING "Вы сделали некорректный выбор")

(FOREGROUND-COLOR 7)

(TERPRI 3)

(MAIN)

(RETURN)

)

;-------------------------------------------------------------------------------

(HELLO)

(MAIN)

(RETURN)

9

Соседние файлы в папке База данных Расписание на языке ЛИСП