Смекни!
smekni.com

ЛИСП-реализация основных операций над базами данных (стр. 2 из 2)

Функциональные модели и блок-схемы решения задачи представлены на рисунках 1, 2, 3, 4, 5.

Условные обозначения:

POS – позиция вставки;

LST – список сотрудников;

AT – добавляемый элемент;

FM – фамилия сотрудника;

PAYM – оклад сотрудника.

Рисунок 1 – Блок-схема решения задачи для функции INSERT

Рисунок 2 – Блок-схема решения задачи для функции DELETE

Рисунок 3 – Блок-схема решения задачи для функции GET_PEOPLE_PAYMANT

Рисунок 4 – Блок-схема решения задачи для функции CHANGE_DATA

Рисунок 5 – Блок-схема решения задачи для функции GET_PEOPLE


4 Программная реализация решения задачи

;ПОЛУЧАЕМ ИЗ ФАЙЛА СПИСОК СОТРУДНИКОВ

(SETF EMPLOYEE 0)

(SETQ INPUT_STREAM (OPEN " D:\EMPLOYEE.TXT" :DIRECTION :INPUT))

(SETQ EMPLOYEE (READ INPUT_STREAM))

(CLOSE INPUT_STREAM)

;ОСНОВНЫЕ ОПЕРАЦИИ: ВСТАВКА, УДАЛЕНИЕ, ВЫБОРКА, ИЗМЕНЕНИЕ

;ВСТАВКА

(DEFUN INSERT (POS LST AT)

(COND

((NULL LST) (CONS AT NIL))

((EQL POS 0) (CONS AT LST))

(T (CONS (CAR LST) (INSERT (- POS 1) (CDR LST) AT)))

)

)

;ВСТАВКА ЭЛЕМЕНТА AT В ПОЗИЦИЮ POS СПИСКА LST

;УДАЛЕНИЕ

(DEFUN DELETE (FM LST)

(COND

((NULL LST) NIL)

((EQL FM (CAR (CAR LST))) (CDR LST))

(T (CONS (CAR LST) (DELETE FM (CDR LST))))

)

)

;УДАЛЕНИЕ ПО ФАМИЛИИ ЗАПИСИ ИЗ СПИСКА

;ВЫБОРКА ЗАРПЛАТЫ СОТРУДНИКА ПО ЕГО ФАМИЛИИ

(DEFUN GET_PEOPLE_PAYMANT (FM LST)

(COND

((NULL LST) NIL)

((EQUAL FM (CAR (CAR LST))) (CADR (CAR LST)))

(T (GET_PEOPLE_PAYMANT FM (CDR LST)))

)

)

;ВЫБОРКА ЛЮДЕЙ С ЗАРПЛАТОЙ PAYM

(DEFUN GET_PEOPLE (PAYM LST OUTPUT_STREAM)

(COND

((NULL LST) NIL)

((EQUAL PAYM (CADR (CAR LST)))

(PROGN

(PRINT (CAR (CAR LST)) OUTPUT_STREAM)

(GET_PEOPLE PAYM (CDR LST) OUTPUT_STREAM)

)

)

(T (GET_PEOPLE PAYM (CDR LST) OUTPUT_STREAM))

)

)

;ИЗМЕНИЕ ЗАРПЛАТЫ СОТРУДНИКА

;ИЩЕМ СОТРУДНИКА ПО ЕГО ФАМИЛИИ

;МЕНЯЕМ ДАННЫЕ

(DEFUN CHANGE_DATA (FM PAYM LST)

(COND

((NULL LST) NIL)

((EQUAL FM (CAR (CAR LST))) (SETF (CADR (CAR LST)) PAYM))

(T (CHANGE_DATA FM PAYM (CDR LST)))

)

)

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

;ДОБАВЛЯЕМ СОТРУДНИКОВ

;ПОЛУЧАЕМ ИЗ ФАЙЛА НОВЫХ СОТРУДНИКОВ

(SETF NEW_EMPLOYEE 0)

(SETQ INPUT_STREAM (OPEN " D:\ADD EMPLOYEE.TXT" :DIRECTION :INPUT))

(SETQ NEW_EMPLOYEE (READ INPUT_STREAM))

(CLOSE INPUT_STREAM)

;ДОБАВЛЯЕМ

(DO

((I 0))

((>= I (LENGTH NEW_EMPLOYEE)) EMPLOYEE)

(SETQ EMPLOYEE (INSERT 0 EMPLOYEE (NTH I NEW_EMPLOYEE)))

(SETQ I (+ I 1))

)

;ЗАПИСЫВАЕМ РЕЗУЛЬТАТ ДОБАВЛЕНИЯ СОТРУДНИКОВ

(SETQ OUTPUT_STREAM (OPEN " D:\ADD_RESULT.TXT" :DIRECTION :OUTPUT))

(PRINT EMPLOYEE OUTPUT_STREAM)

(TERPRI OUTPUT_STREAM)

(CLOSE OUTPUT_STREAM)

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

;УДАЛЯЕМ СОТРУДНИКОВ

ПОЛУЧАЕМ ФАМИЛИИ СОТРУДНИКОВ КОТОРЫХ НАДО УДАЛИТЬ

(SETF FM 0)

(SETQ INPUT_STREAM (OPEN " D:\DEL_EMPLOYEE.TXT" :DIRECTION :INPUT))

(SETQ FM (READ INPUT_STREAM))

(CLOSE INPUT_STREAM)

;УДАЛЯЕМ

(DO

((I 0))

((>= I (LENGTH NUM)) EMPLOYEE)

(SETQ EMPLOYEE (DELETE (NTH I FM) EMPLOYEE ))

(SETQ I (+ I 1))

)

;ЗАПИСЫВАЕМ РЕЗУЛЬТАТ УДАЛЕНИЯ СОТРУДНИКОВ

(SETQ OUTPUT_STREAM (OPEN " D:\DEL_RESULT.TXT" :DIRECTION :OUTPUT))

(PRINT EMPLOYEE OUTPUT_STREAM)

(TERPRI OUTPUT_STREAM)

(CLOSE OUTPUT_STREAM)

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

;ВЫБОРКА ЗАРПЛАТЫ СОТРУДНИКА ПО ЕГО ФАМИЛИИ

(SETF FM 0)

(SETQ INPUT_STREAM (OPEN " D:\FM.TXT" :DIRECTION :INPUT))

(SETQ FM (READ INPUT_STREAM))

(CLOSE INPUT_STREAM)

(SETQ RES NIL)

;ВЫБИРАЕМ ЗАРПЛАТУ

(DO

((I 0))

((>= I (LENGTH FM)) EMPLOYEE)

(SETQ RES (INSERT I RES (GET_PEOPLE_PAYMANT (NTH I FM) EMPLOYEE) ))

(SETQ I (+ I 1))

)

;ЗАПИСЫВАЕМ РЕЗУЛЬТАТ ВЫБОРКИ ЗАРПЛАТЫ СОТРУДНИКОВ

(SETQ OUTPUT_STREAM (OPEN " D:\PAYMANT.TXT" :DIRECTION :OUTPUT))

(PRINT RES OUTPUT_STREAM)

(TERPRI OUTPUT_STREAM)

(CLOSE OUTPUT_STREAM)

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

;ВЫБОРКА ЛЮДЕЙ С ЗАРПЛАТОЙ PAYM

(SETF PAYM 0)

(SETQ INPUT_STREAM (OPEN " D:\PAYM.TXT" :DIRECTION :INPUT))

(SETQ PAYM (READ INPUT_STREAM))

(CLOSE INPUT_STREAM)

;ЗАПИСЫВАЕМ РЕЗУЛЬТАТ ВЫБОРКИ СОТРУДНИКОВ ПО ЗАРПЛАТЕ

(SETQ OUTPUT_STREAM (OPEN " D:\PEOPLE.TXT" :DIRECTION :OUTPUT))

;ВЫБИРАЕМ ЛЮДЕЙ

(GET_PEOPLE PAYM EMPLOYEE OUTPUT_STREAM)

(TERPRI OUTPUT_STREAM)

(CLOSE OUTPUT_STREAM)

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

;ИЗМЕНИЕ ЗАРПЛАТЫ СОТРУДНИКА

;ИЩЕМ СОТРУДНИКА ПО ЕГО ФАМИЛИИ

;МЕНЯЕМ ДАННЫЕ

(SETF FM 0)

(SETQ INPUT_STREAM (OPEN " D:\CHANGE.TXT" :DIRECTION :INPUT))

(SETQ FM (READ INPUT_STREAM))

(CLOSE INPUT_STREAM)

(CHANGE_DATA (CAR FM) (CADR FM) EMPLOYEE)

;ЗАПИСЫВАЕМ РЕЗУЛЬТАТ ИЗМЕНЕНИЯ ЗАРПЛАТЫ

(SETQ OUTPUT_STREAM (OPEN " D:\NEW_EMPLOYEE.TXT" :DIRECTION :OUTPUT))

(PRINT EMPLOYEE OUTPUT_STREAM)

(TERPRI OUTPUT_STREAM)

(CLOSE OUTPUT_STREAM)

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


5 Пример выполнения программы

Пример 1.

Рисунок 6 - Список сотрудников

Рисунок 7 - Список сотрудников, которых нужно добавить

Рисунок 8 - Результат операции добавления

Пример 2.

Рисунок 9 - Список сотрудников

Рисунок 10 - Список сотрудников, которых нужно удалить

Рисунок 11 – Результат операции удаления

Пример 3.

Рисунок 12 - Список сотрудников

Рисунок 13 – Список сотрудников, оклад которых нужно узнать

Рисунок 14 – Результат операции выбора зарплаты по заданной фамилии

Пример 4.

Рисунок 15 - Список сотрудников

Рисунок 16 – Оклад

Рисунок 17 – Результат операции выбора сотрудника по заданному окладу


Пример 5.

Рисунок 18 - Список сотрудников

Рисунок 19 - Новый оклад сотрудника

Рисунок 20 - Результат операции модификации


Заключение

Хранение и использование информации с использованием баз данных имеет решающее значение в настоящее время в большинстве предметных областей. Одно из назначений базы данных - предоставление информации пользователям.

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


Список использованных источников и литературы

1. База данных – Википедия [Электронный ресурс] – Режим доступа: http://ru.wikipedia.org/wiki/База_данных

2. Бронштейн, И.Н. Справочник по математике для инженеров и учащихся втузов [Текст] / И.Н. Бронштейн, К.А. Семендяев. – М.: Наука, 2007. – 708 с.

3. Дейт, К.Д. Введение в системы базы данных [Текст] / К.Д. Дейт – М.: Вильямс, 2006. С.1328.

4. Конноли Т. Базы данных. Проектирование, реализация и сопровождение. Теория и практика. [Электронный ресурс] / Т. Конноли, Б.Каролин – М.: Вильямс, 2003. С. 1436.

5. Симанков, В.С. Основы функционального программирования [Текст] / В.С. Симанков, Т.Т. Зангиев, И.В. Зайцев. – Краснодар: КубГТУ, 2002. – 160 с.

6. .Степанов, П.А. Функциональное программирование на языке Lisp. [Электронный ресурс] / П.А.Степанов, А.В.Бржезовский. – М.: ГУАП, 2003. С. 79.

7. Хомоненко, А.Д. Базы данных. Учебник для высших учебных заведений [Текст] / А.Д. Хомоненко, В.М. Цыганков, М.Г. Мальцев. – М.: Корона, 2004. С.736.

8. Хювенен Э. Мир Лиспа [Текст] / Э. Хювенен, Й. Сеппянен. – М.: Мир, 1990. – 460 с.