Функциональные модели и блок-схемы решения задачи представлены на рисунках 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 с.