Программа учёта и выборки информации о странах
Пояснительная записка к курсовой работе по дисциплине “Основы алгоритмизации и программирования”
Выполнил : студент гр. 96-ВВ3 Бубнов А.В.
Пензенский государственный технический университет, Кафедра “Вычислительная Техника”
Пенза 1997
Введение
С момента появления первых образцов персональных компьютеров прошло не так уж и много времени,но сейчас без них уже немыслимо огромное количество областей человеческой деятельности - экономика , управление , наука , инженерное дело , издательское дело , образование , культура и т.д.
Интерес к персональным компьютерам постоянно растет,а круг их пользователей непрерывно расширяется.В число пользователей ПЭВМ вовлекаются как новички в компьютерном деле,так и специалисты по другим классам ЭВМ.
Язык С++ - универсальный язык общего назначения, область приложений которого - программирование систем в самом широком смысле. Кроме этого, С++ успешно используется как во многих приложениях, так и в мощных операционных системах. Реализация С++ осуществлена для машин в диапазоне от самых простых персональных компьютеров до самых мощных суперкомпьютеров и для всех операционных систем.
1 Постановка задачи
Задача курсовой работы состоит в разработке на языке программирования С++ программы учёта и выборки информации о странах , которая должна осуществлять следующие функции:
1) Ввод информации;
2) Запись информации в файл;
3) Вывод информации на экран;
4) Выборка информации по заданному признаку (комбинации признаков);
5) Сбор статистики по заданному признаку (2-3) и построение результатов статистики в виде линейной диаграммы.
Имена файлов задаются в диалоге с пользователем.
Работа программы должна быть организована с использованием меню.
Программу разработать на языке С++ v.3.1.
2 Метод решения задачи
Анализируя постановку задачи становится ясно , что для её решения необходимо применить метод многофункционального программирования - этот метод основан на разбиении программы на отдельные функциональные модули , которые вызываются из основной программы в процессе её работы.
В основе разработки такой программы лежит низходящее программирование - т.е. сначала разрабатывается основная программа - в данном случае программа ввода текста на экран , обработки функциональных клавиш и меню , с помощью выбора пунктов которого будет в дальнейшем организовываться её работа. При выборе того или иного пункта меню или нажатии функциональной клавиши будет вызываться одна или несколько подпрограмм , но на начальном этапе разработки программы методом нисходящего программирования вместо этих подпрограмм ставяться "заглушки" - пустые подпрограммы , которые в процессе разработки будут заменяться программами , выполняющими определённую функцию.
3 Описание логического представления данных
Входными данными в программе являются:
Файл базы данных , который записан на диске в файле country.dat.
Данные , которые в процессе работы программы можно добавить , удалить или отредактировать.
Выходными данными в программе являются:
Данные после сортировки;
Результат поиска по заданной маске;
График;
Файл базы данных , который записывается на диск в файл country.dat при завершении работы программы.
Данные об абоненте хранятся в массиве структур типа country:
Структура country:
Поле | Тип | Название |
name | строка 50 символов типа char | Название |
capt | строка 10 символов типа char | Столица |
population | double | Население |
money | строка 20 символов типа char | Денежная единица |
square | double | Площадь |
sp | int | Номер по населению |
ss | int | Номер по площади |
sn | int | Номер по названию |
Глобальные переменные программы:
Поле | Тип | Название |
cdt | массив переменных типа country на 301 элемент | Массив данных о странах |
cnum | int | Количество стран |
Sort | char | тип сортировки |
6 Спецификация на функциональные модули
6.1 Функция cmp
Строка вызова: | if (strcmp(cdt[n].name,mxc)<0) |
Назначение: | Осуществляет сравнение строки с маской |
Функции: | Просматривает последовательно заданную строку , и если в ней найдена маска , то возвращается 1 , если нет - 0. |
Логические переменные: | *a (char) - указатель на строку*b (char) - указатель на маску для поиска |
Внутренние переменные: | k (int) - результат сравненияn (int) - счётчик |
Вызывает функции: | нет |
Вызывается из: | index , find |
6.2 Функция output
Строка вызова: | output(sv,sk) |
Назначение: | Осуществляет вывод на экран списка cтран |
Функции: | Очистка экрана , вывод 10 элементов , если элемент выбран , выделение цветом , вывод данных о cтране на экран. |
Логические переменные: | sv,sk (int) - координаты первого элемента на экране |
Внутренние переменные: | n (int) - счётчикm (int) - временная переменная nd (int) - порядковый номер данной страны |
Вызывает функции: | нет |
Вызывается из: | scroll |
6.3 Функция menu
Строка вызова: | st=menu(30,5," Сортировка: " " по Населенности " " по Площади " " по Названию " " Поиск по маске " " Построение графика " " Выход из программы " "\x0");st=menu(54,10," по Населенности " " по Площади " "\x0");st=menu(30,5," Добавить в список " " Удалить из списка " " Редактировать " " Выход из программы " "\x0"); |
Назначение: | Осуществляет обработку меню |
Функции: | Вывод меню на экран , опрос клавиатуры , при нажатии клавиш управления курсором (вверх , вниз) перемещение цветового курсора по пунктам меню , выбор определённого пункта меню при нажатии клавиши с номером пункта меню , при нажатии клавиши Enter возвращается номер выбранного пункта меню , при нажатии клавиши Esc возвращается -1. |
Логические переменные: | *capt (char) - указатель на текст менюx,y - координаты вывода меню на экран |
Внутренние переменные: | n,m (int) - Счетчикиnum (int) - Количество пунктовk (int) - Выбранный пункт*pt (char) - Временный указатель на символc (char) - Считанный с клавиатуры символ |
Вызывает функции: | нет |
Вызывается из: | scroll |
6.4 Функция sinput
Строка вызова: | SInput(cdt[ed].name,45,35,6);SInput(cdt[ed].capt,30,35,8);SInput(cdt[ed].money,20,35,10); |
Назначение: | Осуществляет ввод строки. |
Функции: | Вывод пустой строки , установка координат , вывод строки запроса, считывание строки посимвольно с клавиатуры , выход , если нажата клавиша Enter или Esc , если нажата Esc то строка не записывается. |
Логические переменные: | *s (char) - указатель на строкуlng (int) - максимальная длинаx,y - координаты ввода |
Внутренние переменные: | rs[100] (char) - Временная строкаn (int) - Счетчикc (char) - Введённый с клавиатуры символ |
Вызывает функции: | нет |
Вызывается из: | edit |
6.5 Функция dinput
Строка вызова: | cdt[ed].population=DInput(35,12);cdt[ed].square=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(st); |
Назначение: | Осуществляет построения графика по населённости и по полщади стран. |
Функции: | Определение масштаба , построение осей координат , вывод графика на экран , ожидание нажатия пользователем клавиши. |
Логические переменные: | str (int) - номер страны |
Внутренние переменные: | drv,mode (int) - для инициализации графикиmx (int) - Масштаб по хx (int) - хn (int) - Счетчикpy (int) - Прошлое значение Y для первой линииppy (int) - Прошлое значение Y для второй линии |
Вызывает функции: | Нет |
Вызывается из: | Scroll |
6.7 Функция index
Строка вызова: | index() |
Назначение: | Осуществляет индексирование массива - назначение номеров элементов по алфавиту для каждого поля записи. |
Функции: | Cтирание старых индексов , индексация по площади , индексация по населению , индексация по названию. |
Логические переменные: | нет |
Внутренние переменные: | n,m (int) - счётчикиmx (double) - значение наименьшего элементаmxc (char) - значение наибольшего названияnm (int) - номер очередного элемента |
Вызывает функции: | cmp |
Вызывается из: | scroll |
6.8 Функция edit
Строка вызова: | edit(300);edit(cnum-1);edit(n); |
Назначение: | Осуществляет редактирование элемента массива. |
Функции: | Ввод данных , вывод одного из полей структуры , опрос клавиатуры , выбор действия - редактирование поля или выход (клавиша Esc). |
Логические переменные: | ed (int) - номер элемента массива |
Внутренние переменные: | n (int) - счётчикen (int) - номер пункта менюc (char) - Введённый с клавиатуры символ |
Вызывает функции: | sinput , dinput |
Вызывается из: | scroll |
6.9 Функция find