Электронный журнал
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
Государственное образовательное учреждение высшего
профессионального образования
Нижегородский
государственный университет
Экономический факультет
Кафедра
экономической информатики
Курсовая работа
По дисциплине: «Высокоуровневые методы информатики и программирования»
на тему:
«Электронный
журнал»
Выполнил(а) студент(ка)
2-го курса очного отделения
Группы
Научный
руководитель:
Нижний Новгород, 2011 год
Содержание
| Введение………………………………………………………… |
3 |
| Глава 1. Выбор метода реализации……………………...………………... | 5 |
| 1.1 Обоснование
выбора языка программирования… |
5 |
| Техническое
описание языка программирования…………………… |
6 |
| 1.3
Технические требования к |
7 |
| Глава 2. Теоретические основы……………………...…………………… | 8 |
| 2.1Динамические массивы …………………………………………………... | 8 |
| 2.2Динамическое
распределение памяти ……………………… |
9 |
| 2.3
Классы …………………………………………………………… |
9 |
| 2.4
Структуры ……………………...……………………… |
10 |
| Глава 3. Руководство программиста……………………...……………… | 12 |
| Глава 4. Руководство пользователя ……………………...………………. | 15 |
| Глава 5. Математическое и программное обеспечение ………………. | 16 |
| 5.1.Математическое
обеспечение……………………...…………………… |
16 |
| 5.2.Спецификация
функций ……………………...…………………………. |
19 |
| Глава 6. Тестирование программы ……………………...……………….. | 25 |
| Заключение…………………………………………………. |
31 |
| Список
литературы…………………………………………………… |
32 |
| Приложение…………………………………………………. |
33 |
Данная курсовая работа посвящена разработке и реализации программы на языке С++ с использованием класса динамических массивов структур «Электронный журнал».
Программа
обеспечивает возможность создания файла
и хранения в нем информации о вызываемом
городе, заказываемом номере телефона,
ФИО заказчика, номере телефона заказчика
и длительности оплаченного разговора
а также выполнение требуемых функций
по работе с этими данными. Курсовая содержит
руководство пользователя, описание разработанных
функций, листинг и тестирование программы,
блок-схемы алгоритмов всех используемых
функций и тестирование программы.
Цель работы заключается в создание программы на языке С++ с использованием динамических массивов структур для обработки базы данных «Электронный журнал», представленной виде следующей таблицы:
| N | ФИО | Город | C номера | На номер | Время | Ед. |
Постановка задачи: разработать программу на С++ с использованием динамических массивов структур. Обработка данных должна включать следующие функции:
1) создание новой базы данных ;
2) редактирование базы данных ;
4) дополнение базы данных новыми записями ;
5) удаление записей из базы данных ;
6) поиск в базе данных ( по одному и двум поисковым признакам) с выводом на экране найденных записей или сообщения о неуспешном поиске;
7)сортировку данных по заданному полю (с сохранением в файле результатов сортировки).
Программа
должна обеспечивать режим доступа
к функциям в виде меню в режиме
консоли.
Глава
1. Выбор
метода реализации
1.1
Обоснование выбора
языка программирования
Microsoft Visual Studio 2008 - один из самых популярнейших систем программирования. Он является объектно-ориентированным языком высокого уровня. Его среда прекрасно подходит для разработки приложений практически любого типа. Можно создавать мощные автономные приложения, служебные утилиты, математические задачи, игры, библиотеки dll, файлы ресурсов, затратив на это меньше времени, чем при работе с любым другим языком программирования. Различные технологии позволяет писать приложения с поддержкой Internet, возможности которых ограничиваются только фантазией программиста. MS Visual Studio 2008 содержит графическую среду, в которой можно наглядно контролировать экранные формы и управляющие элементы, используемые в ваших приложениях.
Новой возможностью для программиста является создание программы с максимально удобным для пользователя диалоговым интерфейсом, использующим такие средства, как световое меню, кнопки, переключатели, а также возможность использовать новый стиль оформления, который широко используется в операционной системе Windows XP. Иначе говоря, эта система позволяет создавать программы, обеспечивающие ввод/вывод данных в режиме диалога с использованием указанных средств.
Также в MS Visual Studio 2008 можно создавать программы не только на языке C++, но и на языках C#, VB и прочих.
Для
быстрого создания диалоговых программ
можно использовать MFC, то есть это базовый
набор классов, написанных на языке С++
и предназначенных для упрощения и ускорения
процесса программирования под Windows. Перед
изучением библиотеки MFC и ее использованием
для создания Windows-приложений, следует
вспомнить, как работает сама Windows и каковы
принципы взаимодействия программ с ней,
какова структура типичной Windows-программы.
1.2
Техническое описание
языка программирования
Основная
программная единица на языке
С++ - это текстовый файл с названием
<имя>.cpp, где cpp – принятое расширение
для программ на С++, а имя выбирается достаточно
произвольно. Для подключения таких файлов
к проекту, используется директива препроцессора
#include. Эта директива вставляет в программу
заранее подготовленные тексты из включаемых
файлов. Сформированный таким образом
измененный текст программы поступает
на компиляцию.
В алфавит языка С++ входят:
- прописные и строчные буквы латинского алфавита;
- цифры 0, 1, 2, 3, 4, 5, 6, 7, 8, 9;
-
специальные знаки: " {}
, | [] () + -
/ % \ ; '
: ? < = > _ !
& # ~ ^ . *
Из символов алфавита формируются лексемы языка:
- идентификаторы;
- ключевые (зарезервированные) слова;
- константы;
- знаки операций;
- разделители (знаки
пунктуации).
Для определения и описания переменных основных типов используются следующие ключевые слова, каждое из которых в отдельности может выступать в качестве имени типа:
- char (символьный);
- short (короткий целый);
- int (целый);
- long (длинный целый);
- float (вещественный);
- double (вещественный с удвоенной точностью);
- void (отсутствие значения).
При определении переменных их можно сразу инициализировать, то есть присвоить начальное значение.
Также
в определении типа может использоваться
одновременно несколько служебных
слов (long double <имя>), то есть объявляется
переменная <имя> вещественного типа
повышенной точности.
1.3
Технические требования
к компьютеру для решения
задачи
Для работы программы необходимы следующие ресурсы:
- процессор: Pentium 4 (а также другие современные процессоры других производителей);
- объем оперативной памяти: 512 Мбайт;
- место на жестком диске: 25 Мбайт;
- операционная система: Windows 2000, Windows XP, Windows 2003, Windows Vista, Windows 7;
-
устройство чтения компакт-
- манипулятор типа мышь;
-
устройство ввода (клавиатура).
Глава
2. Теоретические
основы
2.1Динамические массивы
Динамическим считается массив, который способен в любой момент изменять свой размер. Эта возможность обеспечивается за счет динамического выделения памяти под массив. При этом удобно создать класс, который является оболочкой для данного массива, отвечает за выделение и освобождение памяти под массив, а также обеспечивает доступ к элементам массива.
Когда пользователь создает объект класса-оболочки, конструктор класса выделяет память под массив, который имеет либо указанный пользователем размер, либо размер, заданный по умолчанию. Если по мере заполнения массива вся выделенная память окажется занятой, то при добавлении очередного элемента выделенная ранее память освобождается, все хранящиеся в массиве значения сохраняются во временном массиве. Затем выделяется память под массив большего размера и в него помещаются сохраненные значения. Таким образом, изменение размера массива происходит автоматически, невидимо для пользователя.
Память под данные выделяется либо на этапе компиляции (в этом случае необходимый объем должен быть известен до начала выполнения программы, то есть задан в виде константы), либо во время выполнения программы с помощью операции new или функции mallос (необходимый объем должен быть известен до распределения памяти). В обоих случаях выделяется непрерывный участок памяти.
Динамические структуры широко применяют
и для более эффективной работы с данными,
размер которых известен, особенно для
решения задач сортировки, поскольку упорядочивание
динамических структур не требует перестановки
элементов, а сводится к изменению указателей
на эти элементы.
2.2Динамическое
распределение памяти
Для С++ - программы существует два основных способа хранения информации в основной памяти компьютера. Первый состоит в использовании переменных. Область памяти, предоставляемая переменными, закрепляется за ними во время компиляции и не может быть изменена при выполнении программы. Второй способ заключается в использовании С++-системы динамического распределения памяти.
Система динамического
Динамическое выделение памяти
– это получение программной памяти
во время ее выполнения. Благодаря этой
системе программа может создавать переменные
во время выполнения, причем в нужном (в
зависимости от ситуации) количестве.
Динамическое выделение памяти для тех
или иных целей – важная составляющая
почти всех реальных программ.
2.3
Классы
Класс определяет новый тип данных, который задает формат объекта. Класс включает как данные, так и код, предназначенный для выполнения над этими данными. Следовательно, класс связывает данные с кодом. В С++ спецификация класса используется для построения объектов. Объекты – это экземпляр класса. По сути, класс представляет собой набор планов, которые определяют, как строить объект. Важно помнить, что класс – это логическая абстракция, которая реально не существует до тех пор, пока не будет создан объект этого класса, то есть то, что станет физическим представлением этого класса в памяти компьютера.
Определяя класс, объявляются данные которые он содержит, и код, который выполняется над этими данными.
В классе данные объявляются в виде переменных, а код оформляется в виде функций. Функции и переменные, составляющие класс, называются его членами. Таким образом, переменная, объявленная в классе, называется членом данных, а функция, объявленная в классе, называется функцией-членом.
Объявление класса начинается с ключевого слова class.
Объявление класса синтаксически подобно объявлению структуры.
По умолчанию члены класса
являются закрытыми (private-
В С++ класс создает новый тип
данных, который можно использовать
для создания объектов. В частности,
класс создает логическую
2.4
Структуры
Структура – это группа
В С++ структура представляет собой коллекцию объединенных общим именем переменных, которая обеспечивает удобное средство хранения родственных данных в одном месте. Структуры – это совокупный тип данных, поскольку они состоят из нескольких различных, но логически связанных переменных. По тем же причинам их иногда называют составными или конгломератными типами данных.
Прежде чем будет создан
Член структуры – это
В общем случае все члены структуры должны быть логически связанны
друг
с другом.
Глава 3. Руководство программиста
Описание
разработанных функций
3.1.Информационное
обеспечение
Таблица 1. Перечень классов
| № | Идентификатор | Описание | |
| 1 | elem | Класс, содержащий элементы списка | |
| 2 | list | Класс, содержащий непосредственно список с элементами и функции, обеспечивающие работу с ним | |
| Таблица 2. Описание функций класса elem | |||
| № | Идентификатор | Тип данных | Описание |
| 1 | operator = | elem | Функция, осуществляющая перегрузку оператора копирования элементов |
| Таблица 3. Описание других элементов класса elem | |||
| № | Идентификатор | Тип данных | Описание |
| Общедоступные (public) | |||
| 1 | teleph | Символьный | заказываемый номер телефона |
| 2 | tel | Символьный | номер телефона заказчика |
| 3 | name | Символьный | ФИО заказчика |
| 4 | city | Символьный | вызываемый город |
| 5 | time | Целочисленный беззнаковый | длительность оплаченного разговора, в секундах |
| 6 | index | Целочисленный беззнаковый | Номер заказа в общей очереди |
| 7 | next | elem | указатель на следующий элемент списка |
| 8 | prev | elem | указатель на предыдущий элемент списка |
| Таблица 4. Описание функцийкласса list | |||
| № | Идентификатор | Тип данных | Описание |
| 1 | indexing | Функция, не возвращающая значение | Функция по изменению нумерации списка в связи со вставкой или удалением элемента |
| 2 | getElem | elem | Функция, осуществляющая получение указателя на элемент в списке по его номеру в списке |
| 3 | addElem | Функция, не возвращающая значение | Функция, осуществляющая добавление элемента в список |
| 4 | findCity | elem | Функция, осуществляющая поиск номера заказа для заданного города |
| 5 | removeElem | Функция, не возвращающая значение | Функция, осуществляющая удаление элемента по его номеру |
| 6 | add | Функция, не возвращающая значение | Функция по добавлению заказа в список |
| 7 | remove | Функция, не возвращающая значение | Функция, осуществляющая удаление элемента по его номеру |
| 8 | operator<< | Поток вывода (ostream) | Функция, осуществляющая перегрузку оператора вывода списка |
| 9 | sortTime | Функция, не возвращающая значение | Функция, осуществляющая сортировку списка по длительности разговора |
| 10 | printCallsToCity | Функция, не возвращающая значение | Функция, осуществляющая вывод списка звонков в указанный город |
| Таблица 5. Описание других элементов класса list | |||
| № | Идентификатор | Тип данных | Описание |
| Защищенные члены (private) | |||
| 1 | head | elem | указатель на начальный элемент списка |
| 2 | tail | elem | указатель на конечный элемент списка |
| 3 | N | Целочисленное беззнаковое | количество элементов в списке |
| Таблица 6.Описание входных данных | |||
| № | Идентификатор | Тип данных | Описание |
| 1 | teleph | Символьный | заказываемый номер телефона |
| 2 | tel | Символьный | номер телефона заказчика |
| 3 | name | Символьный | ФИО заказчика |
| 4 | city | Символьный | вызываемый город |
| 5 | time | Целочисленный беззнаковый | длительность оплаченного разговора, в секундах |
| 6 | index | Целочисленный беззнаковый | Порядковый номер элемента |
| Таблица 7. Описание выходных данных | |||
| № | Идентификатор | Тип данных | Описание |
| 1 | ls | list | Список заказов |
Глава
4.
Руководство пользователя
Необходимо создать автоматизированное рабочее место (АРМ) диспетчера междугородней телефонной станции (МТС). Диспетчер МТС работает с ЭВМ в режиме меню. Поступающие заказы хранятся в памяти ЭВМ, то есть ведется электронный журнал.
Требования к решению задачи.
По каждому заказу хранятся:
- вызываемый город;
- заказываемый номер телефона;
- ФИО заказчика;
- номер телефона заказчика;
-
длительность оплаченного
Задача должна решаться с помощью диалоговой системы, позволяющей выполнить :
- прием заказа;
-
исполнение очередного заказа(
- определение номера заказа в общей очереди заказов;
- определение номера заказа для заданного города;
- включение срочного заказа в очередь под номером N;
- формирование списка заказов в заданный город;
- упорядочение
заказов по возрастанию
Глава 5. Математическое и программное обеспечение
Алгоритм решения задачи
1.Математическое обеспечение:
- Описание ограничений на входную информацию
- Time> 0
- Index > 0
- Структурная декомпозиция.
Формирование списка.
- Прием заказа
- Удаление заказа
- Включение заказа в список
- Вывод списка на экран
- Формирование списка в указанный город и вывод списка
- Сортировка по времени разговора и вывод списка
- Организация интерфейса пользователя
- Описание алгоритма решения.
- drawMenu
- Применяем оператор Switch
- Описываем все возможные варианты работы с меню
- main
- Описываем переменные, присваиваем значения.
- Вызов функции drawmenu уровня 0
- Оператор Switch
- Работа с блоком «Управление списком»
- Вызов функции drawmenu уровня 1
- Цикл пока key≠0
- Оператор switch
- Добавление заказа
- Ввод данных
- Вызов функции add
- Добавление срочного заказа
- Ввод данных
- Вызов функции add
- Удаление заказа
- Выбор порядкового номера заказа для удаления
- Вызов функции remove
- Формирование общего списка
- Вывод списка на экран
- Формирование списка в указанный город
- Ввод названия города из списка
- Вызов функции printCallsToCity
- Сортировка относительно длительности разговора
- Вызов функции sortTime
- Вывод списка на экран
- Конец цикла
- Работа с блоком «О программе»
- Вызов функции drawmenu уровня 2
- Цикл пока key ≠ 0
- Блок выхода из меню
- Цикл пока не нажата клавиша esc
- Если нажат enter возврат к меню
- indexing
- Объявляем переменные
- Проходим по списку и изменяем нумерацию
- getElem
- Объявляем переменные
- Если индекс некорректен (>=Nили<0) то возвращаем NULL
- Цикл пока не конец списка
- Если нашли номер, возвращаем указатель на него
- В противном случае идем дальше
- Возвращаем NULL
- addElem
- Объявление переменных
- Если конец списка
- Делаем новый элемент «Хвостом» списка
- Если список пуст
- Вставляем элемент
- Если начало списка
- Делаем новый элемент «Головой» списка
- В противном случае вставляем элемент перед указанным номером
- Вызов функции indexing
- Увеличиваем число элементов списка на 1
- findCity
- Объявляем переменные
- Указатель на элемент в списке при помощи функции getElemставим на номер искомого элемента
- Цикл пока есть список
- Если название совпадает с искомым
- описываем его номер
- Возвращаем указатель на элемент в списке
- Переставляем указатель на следующий элемент
- Зануляем номер элемента с которого надо начинать поиск
- аdd
- Объявляем переменные
- Проверяем условия, при которых могут возникнуть ошибки
- Создаем новый элемент списка
- Копируем в него все необходимые параметры
- Применяем функцию addElem
- remove
- Объявляем переменные
- Если не найден номер, то выводим сообщение о том, что номер не найден
- Если указатель на предыдущий элемент не NULL, то при помощи двух указателей «затираем дырку» в списке
- В противном случае, если конец списка, делаем «хвостом» предыдущий элемент
- Затираем указатель
- Вызов функции indexing
- operator<<
- Объявляем переменные
- Устанавливаем выравнивание слева
- Выводим табличкой данные
- sortTime
- Объявление переменных
- Ставим указатель на начало списка, в «голову»
- Цикл пока можно передвинуть указатель на следующий элемент
- Приравниваем два указателя: один к указателю, указанному как «голова», другой к указателю на элемент, следующий за «головой»
- Цикл пока есть следующий элемент
- Ставим указатель на позицию элемента, следующего за «головой»
- Сравниваем время
- Сортировка пузырьком
- Передвигаем указатель на следующую позицию
- Конец цикла
- Передвигаем указатель на следующую позицию
- Конец цикла
- printCallsToCity
- Объявляем переменные
- Если не найден город, выводим сообщение об ошибке
- Вызываем функцию findCity
- Выравниваем по левому краю
- Выводим табличку на экран
1.2.Спецификация функций
| 1. Функция indexing – для изменения нумерации списка в связи со вставкой или удалением элемента | |||||
| 1.1. Возвращаемые значения - отсутствуют | |||||
| 1.2. Параметры - отсутствуют | |||||
| 1.3. Локальные переменные | |||||
| № | Идентификатор | Тип | Описание | ||
| 1 | tmp | elem | Указатель на элемент | ||
| 2 | id | Цилочисленноебеззнаковое | Номер элемента | ||
| 2. ФункцияgetElem–для получения указателя на элемент в списке по его номеру в списке | |||||
| 1.1. Возвращаемые значения | |||||
| № | Идентификатор | Тип | Описание | ||
| 1 | tmp | elem | Указатель на элемент | ||
| 1.2. Параметры | |||||
| № | Идентификатор | Тип | Описание | ||
| 1 | index | Целочисленное беззнаковое | Номер элемента в списке | ||
| 1.3. Локальные переменные | |||||
| № | Идентификатор | Тип | Описание | ||
| 1 | tmp | elem | Указатель на элемент списка | ||
| 2. ФункцияaddElem–для добавления элемента в список | |||||
| 2.1. Возвращаемые значения - отсутствуют | |||||
| 2.2. Параметры | |||||
| № | Идентификатор | Тип | Описание | ||
| 1 | element | elem | Указатель на новый элемент списка | ||
| 2.3. Локальные переменные | |||||
| № | Идентификатор | Тип | Описание | ||
| 1 | id | Целочисленное безнаковое | номер | ||
| 2 | f | elem | Указатель на элемент списка | ||
| 3. ФункцияfindCity–для поиска элемента по указанному городу | |||||
| 3.1. Возвращаемые значения | |||||
| № | Идентификатор | Тип | Описание | ||
| 1 | tmp | elem | Указатель на элемент списка | ||
| 3.2. Параметры | |||||
| № | Идентификатор | Тип | Описание | ||
| 1 | id | Целочисленное беззнаковое | номер | ||
| 2 | City | символьный | Указатель на искомый город | ||
| 3.3. Локальные переменные | |||||
| № | Идентификатор | Тип | Описание | ||
| 1 | tmp | elem | Указатель на элемент списка | ||
| 4. Функцияadd - для добавления нового элемента в список | |||||
| 4.1. Возвращаемые значения - отсутствуют | |||||
| 4.2. Параметры | |||||
| № | Идентификатор | Тип | Описание | ||
| 1 | Teleph | Символьный | Указатель на номер вызываемого абонента | ||
| 2 | Tel | Символьный | Указатель на номер вызывающего абонента | ||
| 3 | Name | Символьный | Указатель на имя абонента | ||
| 4 | city | Символьный | Указатель на город | ||
| 5 | time | Целочисленный беззнаковый | Время разговора | ||
| 6 | index | Целочисленный беззнаковый | Номер позиции, в какую необходимо добавить элемент списка | ||
| 4.3. Локальные переменные | |||||
| № | Идентификатор | Тип | Описание | ||
| 1 | tmp | elem | Указатель на элемент списка | ||
| 5. Функцияremove–для удаления элемента по его номеру | |||||
| 5.1. Возвращаемые значения - отсутствуют | |||||
| 5.2. Параметры – отсутствуют | |||||
| № | Идентификатор | Тип | Описание | ||
| 1 | index | Целочисленный беззнаковый | Номер позиции | ||
| 5.3. Локальные переменные | |||||
| № | Идентификатор | Тип | Описание | ||
| 1 | tmp | elem | Указатель на элемент списка | ||
| 2 | Tmp2 | elem | Указатель на элемент списка | ||
| 6. Функция operator<<–для вывода списка в виде таблицы на экран. | |||||
| 6.1. Возвращаемые значения | |||||
| № | Идентификатор | Тип | Описание | ||
| 1 | stream | оstream (системный класс для управления выводом) | Переменная для вывода на экран | ||
| 6.2. Параметры | |||||
| № | Идентификатор | Тип | Описание | ||
| 1 | stream | оstream (системный класс для управления выводом) | Переменная для вывода на экран | ||
| 2 | ls | list | Список звонков | ||
| 6.3. Локальные переменные | |||||
| № | Идентификатор | Тип | Описание | ||
| 1 | tmp | elem | Указатель на элемент списка | ||
| 7. ФункцияsortTime–для сортировки списка по времени разговора | |||||
| 7.1. Возвращаемые значения - отсутствуют | |||||
| 7.2. Параметры - отсутствуют | |||||
| 7.3. Локальные переменные | |||||
| № | Идентификатор | Тип | Описание | ||
| 1 | tmp | elem | Указатель на элемент списка | ||
| 2 | tmp2 | elem | Указатель на элемент списка | ||
| 3 | f | elem | Указатель на элемент списка | ||
| 4 | t | elem | Указатель на элемент списка | ||
| 5 | srt | elem | Переменная для сортировки данных | ||
| 8. ФункцияprintCallsToCity – для выводазвонков в указанный город | |||||
| 8.1. Возвращаемые значения - отсутствуют | |||||
| 8.2. Параметры | |||||
| № | Идентификатор | Тип | Описание | ||
| 1 | City | символьный | Указатель на город | ||
| 8.3. Локальные переменные | |||||
| № | Идентификатор | Тип | Описание | ||
| 1 | i | Целочисленный | Универсальный счетчик | ||
| беззнаковый | |||||
| 2 | id | Целочисленный | Номер элемента | ||
| беззнаковый | |||||
| 9. ФункцияdrawMenu - для отрисовки меню | |||||
| 9.1. Возвращаемые значения - отсутствуют | |||||
| 9.2. Параметры | |||||
| № | Идентификатор | Тип | Описание | ||
| 1 | Level | Целочисленное беззнаковое | Уровень вложенности | ||
| 9.3. Локальные переменные | |||||
| № | Идентификатор | Тип | Описание | ||
| 1 | i | Целочисленный | Универсальный счетчик | ||
| беззнаковый | |||||