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

Постановка задачи:

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

Записать информацию в РБД.

Задание 3.1. Выяснить, какие учебные пособия есть в библиотеке по определенной дисциплине. Сколько экземпляров книг разных типов есть по указанной дисциплине. В случае. Если учебная литература по указанной дисциплине отсутствует, вывести текст служебной записки от директора библиотеки проректору по учебной работе.

Задание 3.2. Реализовать следующие функции: а) Внести изменения в информацию, хранящуюся в базе данных. В связи с утерей некоторого экземпляра книги либо заменой определенного учебного пособия на новое. б) По заданным имени автора и названию книги определить число имеющихся в библиотеке экземпляров.

Анализ задания:

Сама база хранится в файле “database.lsp”.

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

-Загрузка базы данных из файла.

-Сохранение базы данных в файле.

-Просмотр содержимого базы данных.

-Добавление элемента в базу

-Удаление элемента из базы

-Определение количества экземпляров книг с определенным названием и именем автора.

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

Сценарий диалога с пользователем:

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

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

База данных представляет собой список символов. Каждый символ-элемент базы. Каждый элемент хранит данные об авторе, названии, шифре, дисциплине, типе книги, с использованием списка свойств. Таким образом базу данных можно представить в следующем виде:

Пусть база содержит три элемента: book1, book2, book3

Шифр

Автор

Название

Дисциплина

тип

Book1

111A-44

Иванов И П

Основы электротехники

ТОЭ

Учебник

Book2

354C-82

Смирнов А Л

Основы логического мышления

Логика

Методические указания

Book3

887B-12

Сидоров Е В

Физика-оптика

Физика

Лабораторный практикум

(serq database ‘(book1 book2 book3))

Таблица параметров функций программы:

1. Блок функций, отвечающих за загрузку базы:

(Loadbook ) -читает из файла одну запись и формирует элемент базы.

(load) производит чтение всего файла, последовательным вызовом функции Loadbook.

(LoadDB) производит чтение заданного файла, выводит на экран сообщения пользователю.

2. Блок функций, отвечающих за сохранение базы:

(Zapis book) записывает одну запись в файл.

(Save baza) последовательным вызовом (Zapis book), сохраняет всю базу данных.

(SaveDB baza) производит запись заданного файла, выводит на экран сообщения пользователю.

3. Блок функций, отвечающих за просмотр базы:

(PrintEl book)выводит на экран отдельную запись.

(PrintAll baza) выводит на экран все записи списка baza.

(PrintDB baza)выводит на экран всю базу данных с соответствующими пояснениями.

4. Блок функций, отвечающих за вставку элемента в базу:

(InsertBook baza) производит всиавку элемента в базу. Поля записи задаются с клавиатуры.

5. Блок функций, отвечающих за удаление элемента из базы:

(delEl book) выводит на экран запись-кандидата на удаление, и удаляет выбранный.

(DelAll baza) выводит поочередно все элементы базы данных.

(delDB baza) производит удаление выбранного элемента, выводит на экран сообщения пользователю.

6. Блок функций, отвечающих за поиск записей в базе:

(Poisk baza) производит поиск по заданным полям- имени автора и названия и виводит найденную запись на экран.

(PoiskDB baza) публикует результаты поиска.

7. функция меню:

(Menu) описывает меню программы, производит вызов всех остальных функций.

Вывод:

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

Кроме того в программе замена элемента производится вызовом двух функций: удаления и вставки. Их можно объединить в одну- замены.

Текст программы:

;----Zagruzka bazi dannih---------------------------------------------------

(defun LoadBook ()

(setq book (read-line))

(put book shifr (read-line))

(put book avtor (read-line))

(put book nazv (read-line))

(put book disc (read-line))

(put book type (read-line))

(setq db (cons book db))

)

(defun Load ()

(if (eql (read-line) "************************")

()(progn (LoadBook)(Load))

)

)

(defun LoadDB ()

(read-line)

(rds database.lsp)

(progn (setq db '())

(Load)

(rds)

(setq db (reverse db))

(background-color 2)

(clear-screen)

(write-string "Baza zagrugena iz \"database.lsp\". Push ENTER")

(read-line)

)

)

;----Sohranenie bazi--------------------------------------------------------

(defun Zapis (book)

(terpri 1)

(write-string book ) (terpri 1)

(write-string (get book shifr)) (terpri 1)

(write-string (get book avtor)) (terpri 1)

(write-string (get book nazv)) (terpri 1)

(write-string (get book disc)) (terpri 1)

(write-string (get book type)) (terpri 1)

)

(defun Save (baza)

(if (null baza)()(progn (Zapis (car baza))(Save (cdr baza)))

)

)

(defun SaveDB (baza)

(read-line)

(if (null baza) (progn (write-string "OshibkaBaza pusta.Push ENTER")(read-line)(return)))

(wrs database.lsp)

(Save baza)

(write-string "************************")(terpri 1)

(write-string "(RETURN)")

(wrs)

(rds)

(background-color 2)

(clear-screen)

(write-string "Baza dannin sohranena v \"database.lsp\". Push ENTER")

(read-line)

)

;----Prosmotr bazi----------------------------------------------------------

(defun PrintEl (book)

(write-string "**** Shifr: ")

(write-line (get book shifr))

(write-string "**** Avtor: ")

(write-line (get book avtor))

(write-string "**** Nazvanie: ")

(write-line (get book nazv))

(write-string "**** Disciplina: ")

(write-line (get book disc))

(write-string "**** Tip: ")

(write-line (get book type)) (terpri 2)

(read-line)

(clear-screen)

)

(defun PrintAll (baza)

(if (null baza)(progn (write-string "Konec bazi. Push ENTER") (read-line))

(progn (PrintEl (car baza))(PrintAll (cdr baza)))

)

)

(defun PrintDB (baza)

(progn (background-color 2)

(clear-screen)

(read-line)

(PrintAll baza)

(clear-screen)

(return)

)

)

;----Dobavlenie elementa v bazu----------------------------------------------

(defun InsertBook (baza)

(read-line)

(background-color 2)

(clear-screen)

(write-string "****** Dobavlenie elementa v bazu")

(terpri 2)

(write-string "Nazvanie ob'ekta: ")

(setq book (read-line))

(write-string "Avtor: ")

(put book avtor (read-line))

(write-string "Nazvanie: ")

(put book nazv (read-line))

(write-string "Shifr: ")

(put book shifr (read-line))

(write-string "Disciplina: ")

(put book disc (read)) (read-line)

(write-string "Tip: ")

(put book type (read-line))

(setq db (cons book baza))

(write-string "V bazu dobavlen element. Push ENTER")

(read-line)

)

;----Udalenie elementa iz bazi-----------------------------------------------

(setq bookbiz '())

(defun delEl (book)

(write-string "**** Shifr: ")

(write-line (get book shifr))

(write-string "**** Avtor: ")

(write-line (get book avtor))

(write-string "**** Nazvanie: ")

(write-line (get book nazv))

(write-string "**** Disciplina: ")

(write-line (get book disc))

(write-string "**** Tip: ")

(write-line (get book type))

(write-string "******Udalit etot element? Y-yez,N-no")

(setq vib (read))

(clear-screen)

(read-line)

(if (eql vib 'Y) (progn (write-string "Element udalen!") (read-line))

(progn (setq bookbiz (cons book bookbiz))))

(clear-screen)

)

(defun DelAll (baza)

(if (null baza)(progn (write-string "Konec bazi. Push ENTER") (read-line))

(progn (DelEl (car baza))(DelAll (cdr baza)))

)

)

(defun delDB (baza)

(progn (background-color 2)

(clear-screen)

(read-line)

(DelAll baza)

(clear-screen)

(setq db (reverse bookbiz))

(setq bookbiz '())

(return)

)

)

;----Opredelenie kolichestva ekzemplarov-------------------------------------

(defun Poisk (baza)

(background-color 2)

(clear-screen)

(if (null baza) (progn (Write-line "Baza pusta! Push ENTER.")(return)))

(write-string "*************Poisk")(terpri 2)

(read-line)

(write-string "**Vvedite nujnogo avtora: ")

(setq Navt (read-line))

(write-string "**Vvedite nujne nazvanie: ")

(setq Nnaz (read-line))

(setq baz baza)

(setq kol 0)

(loop

(cond ((null baz) (return nil)) )

(if (and (eq (get (car baz) avtor) Navt)

(eq (get (car baz) nazv) Nnaz))

(progn (PrintEl (car baz)) (setq kol (+ kol 1))))

(SETQ baz (CDR baz))

)

)

(defun PoiskDB (baza)

(Poisk baza)

(write-line "Kol-vo ekzemplarov: ")

(princ kol)

(read-line)

)

;----Vivod menu na ekran-----------------------------------------------------

(defun Menu ()

(background-color 1)

(clear-screen)

(rds)

(write-string "*******************Menu*******************") (terpri 1)

(write-string "*** 1 Zagruzit' bazu dannih ***") (terpri 1)

(write-string "*** 2 Sohranit' bazu dannih ***") (terpri 1)

(write-string "*** 3 Prosmotret' bazu dannih ***") (terpri 1)

(write-string "*** 4 Dobavit' element v bazu ***") (terpri 1)

(write-string "*** 5 Udalit' element iz bazi ***") (terpri 1)

(write-string "*** 6 Opredelenie kol-va ekzemplarov ***") (terpri 1)

(write-string "*** 0 Vihod ***") (terpri 1)

(write-string "******************************************") (terpri 2)

(write-string " Vash vibor: ")

(setq otv (read))

(cond ((eql otv 1) (progn (clear-screen) (LoadDB) (clear-screen) (Menu) (return)))

((eql otv 2) (progn (clear-screen) (SaveDB db) (clear-screen) (Menu) (return)))

((eql otv 3) (progn (clear-screen) (PrintDB db) (clear-screen) (Menu) (return)))

((eql otv 4) (progn (clear-screen) (InsertBook db) (clear-screen) (Menu) (return)))

((eql otv 5) (progn (clear-screen) (DelDB db) (clear-screen) (Menu) (return)))

((eql otv 6) (progn (clear-screen) (PoiskDB db) (clear-screen) (Menu) (return)))

((eql otv 0) (system))

)

(clear-screen)

(Menu)

(return)

)

(read-line)

(clear-screen)

(write-string "Mityagin S.A. gr 3342")

(terpri 5)

(clear-screen)

(Menu)

(return)

Соседние файлы в папке Лабораторная работа №3