Программа обработки данных в библиотеке
Пояснительная записка к курсовой работе по дисциплине “Основы алгоритмизации и программирования”
Выполнил : студент гр. 96-ВВ3 Митиков Р.О.
Пензенский государственный университет, Кафедра “Вычислительная Техника”
Пенза 1998
Введение
С момента появления первых образцов персональных компьютеров прошло не так уж и много времени,но сейчас без них уже немыслимо огромное количество областей человеческой деятельности - экономика , управление , наука , инженерное дело , издательское дело , образование , культура и т.д.
Интерес к персональным компьютерам постоянно растет,а круг их пользователей непрерывно расширяется.В число пользователей ПЭВМ вовлекаются как новички в компьютерном деле,так и специалисты по другим классам ЭВМ.
Язык С++ - универсальный язык общего назначения, область приложений которого - программирование систем в самом широком смысле. Кроме этого, С++ успешно используется как во многих приложениях, так и в мощных операционных системах. Реализация С++ осуществлена для машин в диапазоне от самых простых персональных компьютеров до самых мощных суперкомпьютеров и для всех операционных систем.
1 Постановка задачи
Задача курсовой работы состоит в разработке на языке программирования С++ программы обработки данных в библиотеке , которая должна осуществлять следующие функции:
1) Ввод данных о книгах , имеющихся в библиотеке:название книги , автор , количество экземпляров , порядковый номер , стоимость книги
2) Вывод информации на экран (в файл) по запросу о книгах , имеющихся в библиотеке: читальном зале , абонементе , хранилище по названию , автору, тематике.
3) Сбор статистики о книгах одного автора с разными названиями.
4) Построение графической диаграммы для пункта по выбору.
Работа программы должна быть организована с использованием меню.
Программу разработать на языке С++ v.3.1.
2 Метод решения задачи
Анализируя постановку задачи становится ясно , что для её решения необходимо применить метод многофункционального программирования - этот метод основан на разбиении программы на отдельные функциональные модули , которые вызываются из основной программы в процессе её работы.
В основе разработки такой программы лежит низходящее программирование - т.е. сначала разрабатывается основная программа - в данном случае программа ввода текста на экран , обработки функциональных клавиш и меню , с помощью выбора пунктов которого будет в дальнейшем организовываться её работа. При выборе того или иного пункта меню или нажатии функциональной клавиши будет вызываться одна или несколько подпрограмм , но на начальном этапе разработки программы методом нисходящего программирования вместо этих подпрограмм ставяться "заглушки" - пустые подпрограммы , которые в процессе разработки будут заменяться программами , выполняющими определённую функцию.
3 Описание логического представления данных
Входными данными в программе являются:
Файл базы данных , который записан на диске в файле librarym.dat.
Данные , которые в процессе работы программы можно добавить , удалить или отредактировать.
Выходными данными в программе являются:
Данные , сортированные по названию или автору
Результат поиска по заданной маске
График
Файл базы данных , который записывается на диск в файл librarym.dat при завершении работы программы.
Данные об книге хранятся в массиве структур типа books:
Структура books:
Поле | Тип | Название |
name | строка 30 символов типа char | Название |
fio | строка 30 символов типа char | Автор |
num | int | Количество |
price | float | Стоимость |
number | long | Порядковый номер |
loc | int | Расположение |
ss | int | Тематика |
nn | int | Номер по названию |
nf | int | Номер по автору |
Глобальные переменные программы:
Поле | Тип | Название |
cdt | массив переменных типа books на 501 элемент | Массив данных о странах |
cnum | Int | Количество книг |
sort | Char | тип сортировки |
ftm | Char | Расположение |
6 Спецификация на функциональные модули
6.1 Функция cmp
Строка вызова: | if (cmp(cdt[n].name,cdt[500].name)&&cmp(cdt[n].fio,cdt[500].fio)&& (cdt[n].price>=cdt[500].price)) |
Назначение: | Осуществляет сравнение строки с маской |
Функции: | Просматривает последовательно заданную строку , и если в ней найдена маска , то возвращается 1 , если нет - 0. |
Логические переменные: | *a (char) - указатель на строку *b (char) - указатель на маску для поиска |
Внутренние переменные: | k (int) - результат сравнения n (int) - счётчик |
Вызывает функции: | нет |
Вызывается из: | index , find |
6.2 Функция output
Строка вызова: | output(sv,sk) |
Назначение: | Осуществляет вывод на экран списка книг |
Функции: | Очистка экрана , вывод 10 элементов , если элемент выбран , выделение цветом , вывод данных о книге на экран. |
Логические переменные: | sv,sk (int) - координаты первого элемента на экране |
Внутренние переменные: | n (int) - счётчик m (int) - временная переменная nd (int) - порядковый номер данной книги |
Вызывает функции: | нет |
Вызывается из: | scroll |
6.3 Функция menu
Строка вызова: | st=menu(30,5,"Добавить в список " "Удалить из списка " "Редактировать " "По Автору " "По Названию " "Выход в главное меню" "\x0") st=menu(30,5," Список книг " " Поиск по маске " " Количество книг " " Выход из программы " "\x0") st=menu(40,6," Расположение: " " Читальный зал " " Абонемент " " Хранилище " "\x0") |
Назначение: | Осуществляет обработку меню |
Функции: | Вывод меню на экран , опрос клавиатуры , при нажатии клавиш управления курсором (вверх , вниз) перемещение цветового курсора по пунктам меню , выбор определённого пункта меню при нажатии клавиши с номером пункта меню , при нажатии клавиши Enter возвращается номер выбранного пункта меню , при нажатии клавиши Esc возвращается -1. |
Логические переменные: | *capt (char) - указатель на текст меню x,y - координаты вывода меню на экран |
Внутренние переменные: | n,m (int) - Счетчики num (int) - Количество пунктов k (int) - Выбранный пункт *pt (char) - Временный указатель на символ c (char) - Считанный с клавиатуры символ |
Вызывает функции: | нет |
Вызывается из: | scroll , main |
6.4 Функция sinput
Строка вызова: | SInput(cdt[ed].name,30,35,6) SInput(cdt[ed].fio,30,35,8) SInput(name,40,20,23) |
Назначение: | Осуществляет ввод строки. |
Функции: | Вывод пустой строки , установка координат , вывод строки запроса, считывание строки посимвольно с клавиатуры , выход , если нажата клавиша Enter или Esc , если нажата Esc то строка не записывается. |
Логические переменные: | *s (char) - указатель на строку lng (int) - максимальная длина x,y - координаты ввода |
Внутренние переменные: | rs[100] (char) - Временная строка n (int) - Счетчик c (char) - Введённый с клавиатуры символ |
Вызывает функции: | нет |
Вызывается из: | edit , find |
6.5 Функция dinput
Строка вызова: | cdt[ed].price=DInput(35,10) cdt[ed].number=DInput(35,12) cdt[ed].num=DInput(35,14) |
Назначение: | Осуществляет ввод числа. |
Функции: | Вывод пустой строки , установка координат , вывод строки запроса, считывание строки посимвольно с клавиатуры , получение введённого числа , выход , если нажата клавиша Enter или Esc , если нажата Esc то число не записывается. |
Логические переменные: | *s (char) - указатель на строку lng (int) - максимальная длина x,y - координаты ввода |
Внутренние переменные: | s[100] (char) - Временная строка * сtpe (char) - указатель на сторку rs (double) - Результат n (int) - Счетчик c (char) - Введённый с клавиатуры символ |
Вызывает функции: | нет |
Вызывается из: | edit |
6.6 Функция graph
Строка вызова: | graph() |
Назначение: | Осуществляет построения столбчатой диаграммы по распределению книг . |
Функции: | Определение масштаба , построение осей координат , вывод диаграммы , ожидание нажатия пользователем клавиши. |
Логические переменные: | нет |
Внутренние переменные: | drv,mode (int) - для инициализации графики c (int) - Цвет k1,k2,k3 (int) - количество книг n (int) - Счетчик m (int) - Масштаб |
Вызывает функции: | нет |
Вызывается из: | main |
6.7 Функция index
Строка вызова: | index() |
Назначение: | Осуществляет индексирование массива - назначение номеров элементов по алфавиту для каждого поля записи. |
Функции: | Cтирание старых индексов , перебор всех возможных мест хранения , индексация по автору , поиск наименьшего , индексация по названию , поиск наименьшего. |
Логические переменные: | нет |
Внутренние переменные: | n,m (int) - счётчики tm (int) - перебор тем mxc (char[100]) - значение наименьшей строки nm (int) - номер очередного элемента |
Вызывает функции: | cmp |
Вызывается из: | scroll |
6.8 Функция edit