Программа обработки данных в библиотеке
Пояснительная записка к курсовой работе по дисциплине “Основы алгоритмизации и программирования”
Выполнил : студент гр. 96-ВВ3 Митиков Р.О.
Пензенский государственный университет, Кафедра “Вычислительная Техника”
Пенза 1998
Введение
С момента появления первых образцов персональных компьютеров прошло не так уж и много времени,но сейчас без них уже немыслимо огромное количество областей человеческой деятельности - экономика , управление , наука , инженерное дело , издательское дело , образование , культура и т.д.
Интерес к персональным компьютерам постоянно растет,а круг их пользователей непрерывно расширяется.В число пользователей ПЭВМ вовлекаются как новички в компьютерном деле,так и специалисты по другим классам ЭВМ.
Язык С++ - универсальный язык общего назначения, область приложений которого - программирование систем в самом широком смысле. Кроме этого, С++ успешно используется как во многих приложениях, так и в мощных операционных системах. Реализация С++ осуществлена для машин в диапазоне от самых простых персональных компьютеров до самых мощных суперкомпьютеров и для всех операционных систем.
Постановка задачи
Задача курсовой работы состоит в разработке на языке программирования С++ программы обработки данных в библиотеке , которая должна осуществлять следующие функции:
1) Ввод данных о книгах , имеющихся в библиотеке:название книги , автор , количество экземпляров , порядковый номер , стоимость книги
2) Вывод информации на экран (в файл) по запросу о книгах , имеющихся в библиотеке: читальном зале , абонементе , хранилище по названию , автору, тематике.
3) Сбор статистики о книгах одного автора с разными названиями.
4) Построение графической диаграммы для пункта по выбору.
Работа программы должна быть организована с использованием меню.
Программу разработать на языке С++ v.3.1.
Метод решения задачи
Анализируя постановку задачи становится ясно , что для её решения необходимо применить метод многофункционального программирования - этот метод основан на разбиении программы на отдельные функциональные модули , которые вызываются из основной программы в процессе её работы.
В основе разработки такой программы лежит низходящее программирование - т.е. сначала разрабатывается основная программа - в данном случае программа ввода текста на экран , обработки функциональных клавиш и меню , с помощью выбора пунктов которого будет в дальнейшем организовываться её работа. При выборе того или иного пункта меню или нажатии функциональной клавиши будет вызываться одна или несколько подпрограмм , но на начальном этапе разработки программы методом нисходящего программирования вместо этих подпрограмм ставяться "заглушки" - пустые подпрограммы , которые в процессе разработки будут заменяться программами , выполняющими определённую функцию.
Описание логического представления данных
Входными данными в программе являются:
Файл базы данных , который записан на диске в файле 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
Строка вызова:
| edit(cnum-1)
edit(n)
edit(500)
|
Назначение:
| Осуществляет редактирование элемента массива.
|
Функции:
| Ввод данных , вывод одного из полей структуры , опрос клавиатуры , выбор действия - редактирование поля или выход (клавиша Esc).
|
Логические
переменные:
| ed (int) - номер элемента массива
|
Внутренние
переменные:
| n (int) - счётчик
en (int) - редактируемое поле
c (char) - Введённый с клавиатуры символ
|
Вызывает функции:
| sinput , dinput
|
Вызывается из:
| scroll
|
6.9 Функция find
Строка вызова:
| find()
|
Назначение:
| Осуществляет поиск элемента в заданной строке по заданной маске.
|
Функции:
| Поиск элемента , Возврат результатов в файл или на экран.
|
Логические
переменные:
| нет
|
Внутренние
переменные:
| n (int) - счётчик
*F(file - файл ввода
name[50] (char) - Имя файла
|
Вызывает функции:
| cmp , sinput
|
Вызывается из:
| main
|
6.10 Функция scroll
Строка вызова:
| scroll ()
|
Назначение:
| Осуществляет обработку списка.
|
Функции:
| Вывод списка на экран , ввод символа с клавиатуры, обработка символа , в воодветствии с нажатой клавишей вызов меню , выбор пункта меню , выполнение действия , выход.
|
Логические
переменные:
| нет
|
Внутренние
переменные:
| st (int) - номер выбранного пункта меню
n (int) - счётчик
c (char) - Введённый с клавиатуры символ
sv , sk (int) - первый элемент на экране и положение курсора
|
Вызывает функции:
| output , menu , edit , index.
|
Вызывается из:
| main
|
6.11 Функция load
Строка вызова:
| load()
|
Назначение:
| Осуществляет загрузку базы данных из файла.
|
Функции:
| Открытие файла с именем librarym.dat , чтение количества строк в массиве , чтение данных в массив , закрытие файла.
|
Логические
переменные:
| нет
|
Внутренние
переменные:
| *f (file) - указатель на файл
|
Вызывает функции:
| нет
|
Вызывается из:
| main
|
6.12 Функция save
Строка вызова:
| save()
|
Назначение:
| Осуществляет запись базы данных в файл.
|
Функции:
| Открытие файла librarym.dat , запись количества элементов , запись данных в файл , закрытие файла.
|
Логические
переменные:
| нет
|
Внутренние
переменные:
| *f (file) - указатель на файл
|
Вызывает функции:
| нет
|
Вызывается из:
| main
|
6.13 Основная программа - main
Назначение:
| Осуществляет установку начальных значений , чтение базы данных из файла , обработку , запись базы данных в файл.
|
Функции:
| Установка начальных значений переменных , вызов функции чтения данных из файла , вызов функции обработки , обработку меню, поиск по маске , построение диаграммы , вызов функции записи в файл ,установка параметров , выход из программы.
|
Вызывает функции:
| load , save , scroll , menu , find , graph.
|