|
МИНОБРНАУКИ РОССИИ федеральное государственное бюджетное образовательное учреждение высшего образования «Балтийский государственный технический университет «ВОЕНМЕХ» им. Д.Ф. Устинова» (БГТУ «ВОЕНМЕХ» им. Д.Ф. Устинова») |
||||
БГТУ.СМК–Ф–4.2–К5–02 |
|||||
Факультет |
|
И |
|
Информационные и управляющие системы |
|
|
|
шифр |
|
наименование |
|
Кафедра |
|
И5 |
|
Информационные системы и программная инженерия |
|
|
|
шифр |
|
наименование |
|
Дисциплина |
|
Программирование на ЯВУ |
|||
КУРСОВОЙ ПРОЕКТ
на тему
Разработка простейшей базы данных |
|
|
Выполнил студент группы |
|
О401Б |
|||
Ситева С. Б. |
|||||
Фамилия И.О. |
|||||
РУКОВОДИТЕЛЬ |
|||||
Ракова И. К. |
|
|
|||
Фамилия И.О. Подпись |
|||||
Оценка |
|
|
|||
«_____» |
|
2021 г. |
|||
Разработать программу, которая реализует информационно–справочную систему на базе файла структур со следующими возможностями: создание файла, просмотр содержимого файла, добавление, корректировка и удаление данных, осуществление выполнения запросов в соответствии с индивидуальных заданием. Поиск данных в файле выполнять по ключевому полю. Для организации интерфейса взаимодействия с пользователем использовать меню.
Создать базу данных содержащую сведения расписании поездов: пункт назначения, номер поезда, тип поезда (скорый, сапсан, пассажирский), время отправления, время в пути. Вывести сведения о поездах, отправляющихся в Саратов определенный временной период. Найти поезд определенного типа, доезжающий до Саратова за наименьшее время.
Выбор структуры данных очень важен, т.к. от правильности выбора зависит эффективность и универсальность программы. Существует различные способы обработки и хранения данных: массив [3], файл [4].
Обработка данных на основе массива, все данные записываются в специально созданный массив, где каждый элемент массива – одна запись. Преимущества: уменьшение запросов к файловой системе. Недостатки: увеличение используемой оперативной памяти и время обращения к каждому элементу. Также, массив имеет ограниченный возможный размер по памяти, в файле же только емкостью диска. В массиве данные нужно вводить каждый раз вначале работы, так как данные хранятся в оперативной памяти и не сохраняются после окончания работы с ним.
Обработка данных на основе файла структур и переменной структуры [5], данные считываются последовательно из бинарного файла, который содержит необходимые данные, в переменную в виде записи, обрабатывается запись и считывается следующая запись из файла, пока исходный файл не закончится. Преимущества: уменьшение используемой оперативной памяти по сравнению с массивом. Недостатки: увеличение запросов к файловой системе по сравнению с массивом из – за того, что для создания или обращения записи требуется обращаться к бинарному файлу. Данные в файле сохраняются и после окончания работы с ним, поэтому не требуется вводить каждый раз вначале работы по сравнению с массивом.
Для курсовой работы была выбрана обработка данных на основе бинарного файла структур и переменной структуры.
Программа состоит из главной программы и 10 пользовательских функций.
В языке программирования C глобальные (внешние) переменные объявляются вне какой–либо функции. С их помощью удобно организовывать обмен данными между функциями. Так как имя бинарного файла и экземпляр структуры нуждаются в объявлении в практически каждой функции программы, то их лучше объявить глобально: FILE *f – идентификация потока на файл.
Структурная организация файла программы на языке C, содержащего несколько функций, может выглядеть немного по–разному. Так как выполнение начинается с main(), то ей должны быть известны спецификации (имена, количество и тип параметров, тип возвращаемого значения) всех функций, которые из нее вызываются. Отсюда следует, что объявляться функции должны до того, как будут вызваны. Прототипы функций объявлены перед главной программой.
Пользовательский интерфейс осуществлен с помощью системы меню.
Пользователю предлагается ввести имя файла, далее производится очистка экрана и вывод текста меню, включающий в себя следующие пункты:
1. Просмотр задания.
2. Создать и добавить.
3. Поиск рейса по временному промежутку.
4. Поиск рейса по номеру.
5. Поиск самого быстрого рейса.
6. Просмотр информации о рейсах.
7. Удаление.
8. Редактирование.
9. Выход.
Пользователь вводит номер пункта меню и вызывается соответствующая функция. Программа заканчивает работу, когда выбран пункт меню 9 – «Выход».
Работа с меню осуществляется с помощью функции menu(char* file_name).
Назначение: добавление новой информации в файл.
Входные данные: file – указатель на файл.
Выходные данные: отсутствуют.
Вспомогательные переменные:
– int i счетчик в цикле.
– int n количество новых записей.
Описание работы функции: открытие в режиме дополнения и проверка правильности открытия бинарного файла, куда будет добавляться информация. Далее вводится n, количество новых записей. С помощью цикла с счетчиком, который выполняется n раз, добавляется информация по рейсам в следующем порядке: name.arrivial – пункт прибытия, name.number – номер поезда, name.type – тип поезда, name.time_departure_hour – час времени отправления, name.time_departure_minute – минуты времени отправления, name.time_travel_hour – количество часов в пути, name.time_travel_minute – количество минут (без целых часов) в пути. Введенная информация по каждой структуре записывается в бинарный файл. Закрытие файла.
Назначение: вывод структуры на экран.
Входные данные: name – переменная типа структуры.
Выходные данные: отсутствуют.
Вспомогательные переменные: отсутствуют.
Описание работы функции: чтобы сохранить правильный вид формата времени для минут, например, 12 часов 5 минут должно выглядеть таким образом «12:05», а не «12:5», использован вывод с помощью условия. В условии проверяется нужен ли при выводе 0, и если число меньше 10, то добавляется 0.
Назначение: вывод на экран содержимого файла в графленом виде.
Входные данные: file – указатель на файл.
Выходные данные: отсутствуют.
Вспомогательные переменные: отсутствуют.
Описание работы функции: открытие в режиме чтения и проверка правильности открытия файла. Вывод шапки таблицы. С помощью цикла с условием, чтение до конца файла, вывод содержимого таблицы, информация по каждой структуре выводится функцией ticketOut(struct train name). Закрытие файла.
Назначение: нахождение рейсов в определенном временном промежутке.
Входные данные: file – указатель на файл.
Выходные данные: отсутствуют.
Вспомогательные переменные:
– int time_first_hour – час в начальной границе временного промежутка.
– int time_first_min – минуты в начальной границе временного промежутка.
– int time_second_hour – час в конечной границе временного промежутка.
– int time_second_min – минуты в конечной границе временного промежутка.
– int time_first – общее время в минутах начальной границы временного промежутка.
– int time_second – общее время в минутах конечной границы временного промежутка.
– int n – номер структуры, изначально равно 0.
– int nal – индикатор наличия подходящих рейсов, изначально равно 1.
– char station[15] – искомый пункт назначения.
Описание работы функции: открытие в режиме чтения и проверка правильности открытия бинарного файла. Ввод искомого пункта назначения station. Ввод начальной и конечной границы временного промежутка в формате часы и минуты через пробел соответственно time_first_hour, time_first_min, time_second_hour, time_second_min. Подсчет времени в минутах для каждой границы. В цикле с условием, чтение до конца файла, каждая структура проверяется сначала по совпадению пункта назначения рейса и искомого пункта назначения, затем на вхождения во временной промежуток с помощью подсчета времени в минутах. Если подходящие рейсы находятся, то при первом нахождении выводится шапка таблицы, индикатор n принимает значение 0, вывод структуры с помощью функции ticketOut(struct train name), вывод нижней границы таблицы. Если же подходящих рейсов не нашлось, то индикатор n не меняет своего значения, равен 1, выводится уведомление на экран «Подходящих рейсов не найдено, выберите другое время». Закрытие файла.
САНКТ–ПЕТЕРБУРГ
2021 г.
СОДЕРЖАНИЕ
1 Постановка задачи 5
2 Описание структуры данных 6
3 Общая структура программы 7
3.1 Состав программы 7
3.2 Описание пользовательского интерфейса 7
4 Описание функций 9
4.1 Функция addInf(char* file) 9
4.2 Функция ticketOut(struct train name) 9
4.3 Функция show(char* file) 10
4.4 Функция searchDeparture(char* file) 10
4.5 Функция searchNum(char* file) 11
4.6 Функция searchTravel(char* file) 12
4.7 Функция del(char* file1) 13
4.8 Функция printFile() 13
4.9 Функция edit(char* file) 14
4.10 Функция menu(char* file_name) 15
5 Результаты работы программы 16
ЗАКЛЮЧЕНИЕ 21
СПИСОК ЛИТЕРАТУРЫ 22
ПРИЛОЖЕНИЕ А 23
В современной инженерной деятельности при решении практических задач компьютер используется не только как инструмент для вычислений, но и как машина для быстрой обработки информации. Работа инженера в наше время зачастую связана с необходимостью работать с большими наборами данных. Таким образом, возникает необходимость их хранения, структуризации и систематизации, приведения информации к виду, с которым будет легко и удобно работать в дальнейшем, и т.д.
Актуальность данной темы заключается в том, что существует много неструктурированной информации. Поднимается вопрос о ее хранении, обработке, обеспечении оперативного доступа к ней, поиска и обновления. Для решения этой проблемы используются базы данных, которые позволяют достичь этого всего.
База данных – это файл (или группа файлов), представляющий собой упорядоченный набор записей, имеющих единообразную структуру и организованных по единому шаблону (как правило, в табличном виде). При работе с базами данных чаще всего выполняются следующие операции: создание таблиц в базе данных, поиск и сортировка информации по запросам, добавление и удаление записей. Она тесно связана с информационной системой, которая обеспечивает накапливание, хранение и обработку данных с целью поддержки информационных процессов какого–либо вида деятельности.
Целью курсовой работы является разработка программы, реализующей информационно – справочную систему на базе файла структур. Система должна обеспечить следующие возможности:
– возможность оперативного доступа к данным;
– возможность обновления данных;
– возможность удаления данных;
– возможность добавления данных.
Для достижения поставленной цели должны быть решены следующие задачи:
– проанализировано задание;
– изучены структуры данных для реализации поставленной задачи;
– разработан алгоритм решения задачи;
– написана программа на основании разработанного алгоритма;
– проведено тестирование программы и анализ результатов ее работы.
Курсовая работа должна быть выполнена с учетом требований технологии структурного программирования. Использование принципов структурного программирования [1] позволяет создавать логически простые и понятные программы.
Принципы структурного программирования заключаются в следующем:
– Разработка программы ведётся пошагово, методом «сверху вниз». (Нисходящее программирование метод пошаговой детализации);
– Модульность (метод пошаговой детализации позволяет разбить алгоритм на части (модули), каждая из которых решает самостоятельную подзадачу);
– Использование при разработке алгоритма базовых алгоритмических структур (следование, ветвление, цикл) [2].
Курсовая работа включает в себя шесть разделов. В первом разделе содержится формулировка задания. Во втором – описывается структура данных (общие сведения и используемая структура данных). В третьем разделе описывается общая структура программы (подключённые библиотеки и пользовательские функции). В четвёртом – приводится описание интерфейса. В пятом – приводится описание всех используемых в программе функций. В шестом разделе приведены результаты тестирования программы (с иллюстрациями).
Назначение: редактирование информации о рейсе
Входные данные: file – указатель на файл.
Выходные данные: лтсутствуют.
Вспомогательные переменные:
– int n – номер структуры, изначально равен 0.
– int num – номер рейса для редактирования.
– int point – номер пункта меню.
– int tmp – индикатор наличия искомого рейса, изначально равен 1.
Описание работы функции: открытие в режиме чтения и записи, проверка на правильность открытия файла. Ввод номера рейса для редактирования num. При нахождении рейса с искомым номером, меняется значение индикатора tmp на 0, выводится шапка таблицы и информация о записи с помощью функции ticketOut(struct train name). Далее выводится меню редактирования:
Выберите поле для редактирования:
1. Номер поезда.
2. Пункт назначения.
3. Тип поезда.
4. Время отправления.
5. Время пути.
6. Изменить запись полностью.
Пользователь вводит номер пункта меню и с помощью условий изменяется информация о рейсе. После чего записывается информация в файл и он закрывается. Если рейса с таким номером не обнаружено и tmp = 1, то выводится уведомление «Нет записи о рейсе с введённым номером.».
Назначение: главное меню через который осуществлен пользовательский интерфейс.
Входные данные: file_name – указатель на файл.
Выходные данные: отсутствуют.
Вспомогательные переменные:
– int intem – номер пункта меню.
Описание работы функции: пользователь вводит номер пункта меню и вызывается соответствующая функция. Программа заканчивает работу, когда выбран пункт меню 9 – «Выход».
Ввод имени файла пользователем показан на рисунке 1.
Рисунок 1 – Ввод имени файла
Очистка экрана после ввода имени файла и вывод текста меню на экран. На рисунке 2 можно видеть, что пользователю предоставляется выбор позиции, ввод номера которой он осуществляет под текстом меню.
Рисунок 2 – Меню
Просмотр задания соответствует пункту меню 1. На рисунке 3 представлен текст задания.
Рисунок 3 – Вывод текста задания, соответствует 1 пункту меню
Чтобы добавить записи о рейсах, пользователю необходимо выбрать пункт меню 2; работа функции представлена на рисунке 4.
Для поиска рейса в определенный временной промежуток, пользователю необходимо выбрать пункт 3; работа функции представлена на рисунке 5.
Если пользователь знает номер рейса, он может просмотреть информацию о нем выбрав 4 пункт; работа функции представлена на рисунке 6.
Рисунок 4 – Добавление новых записей о рейсах, соответствует 2 пункту меню
Рисунок 5 – Поиск рейса в определенный временной промежуток, соответствует 3 пункту меню