Требования к программе
Разработка программы подбора туристической путевки.
Туристическая компания содержит сведения о предлагаемых путевках: тип путевки (отдых, экскурсионный тур, лечение, шопинг, круиз), страна пребывания, вид транспорта, количество дней, питание (завтраки/все включено), стоимость.
Индивидуальное задание: вывести все путевки требуемого типа (вводится с клавиатуры) стоимостью менее x в порядке убывания стоимости.
Общее для всех вариантов задание: реализовать авторизацию для входа в систему (без регистрации!), функционал администратора и функционал пользователя, как минимум три вида поиска, как минимум три вида сортировки (см. более подробно - в общих требованиях к курсовой работе).
Исходные требования к курсовой работе
разработка программа алгоритм
Язык программирования С++.
Среда разработки Microsoft Visual Studio версии 2010 и выше.
Вид приложения - консольное.
Парадигма программирования - объектно-ориентированная.
Способ организации данных - поля соответствующих классов.
Способ хранения данных - файл типа txt.
Каждая логически завершенная задача программы должна быть реализована в виде метода.
Функциональные требования к курсовой работе
Первым этапом работы программы является авторизация - предоставление прав. В рамках данного этапа необходимо считать данные учетной записи пользователей следующего вида:
login;
password;
role (данное поле служит для разделения в правах администраторов и пользователей).
После ввода пользователем своих персональных данных (логина и пароля) и сверки с информацией, находящейся в файле пользователя, необходимо предусмотреть возможность входа в качестве администратора (в этом случае, например, role = admin) или в качестве пользователя (в этом случае, например, role = users).
Если база данных с учетными записями пользователей не существует, то необходимо её программно создать и записать учетные данные администратора.
Регистрация новых пользователей в системе предусмотрена. Данную задачу выполняет администратор в режиме работы с учетными записями пользователей.
Вторым этапом работы программы является собственно работа с данными, которая становится доступной только после прохождения авторизации. Данные хранятся в фале.
Для работы с данными должны быть предусмотрены два функциональных модуля: модуль администратора и модуль пользователя.
Модуль администратора включает следующие подмодули (с указанием функциональных возможностей) :
Управление аккаунтами:
Просмотр всех аккаунтов;
Добавление нового аккаунта;
Редактирование данных аккаунта;
Удаление аккаунта;
Назад.
Работа с файлом данных:
Создание файла данных;
Открытие файла данных;
Удаление файла данных;
Назад.
Работа с данными:
Просмотр всех путевок;
Удаление путевки;
Добавление путевки;
Редактирование информации путевки;
Поиск путевки:
Тип путевки;
Страна пребывания;
Стоимость.
Сортировка:
Тип путевки;
Страна пребывания;
Стоимость.
Поиск рейсов с указанным типом путевки;
Назад.
Модуль пользователя включает подмодуль работы с данными со следующими функциональными возможностями:
Просмотреть все расписание;
Покатать все рейсы с прибытием не позднее чем за 12 часов до указанного времени;
Поиск:
Номер рейса;
Тип автобуса;
Пункт назначения.
Сортировк:
Номер рейса;
Тип автобуса;
Пункт назначения.
Для реализации перечисленных модулей/подмодулей необходимо создавать меню с соответствующими пунктами.
Предусмотреть:
обработку исключительных ситуаций:
имя пользователя или пароль не верны;
запись с указанным идентификатором не найдена;
пользователь с таким именем уже существует;
ведённые данные не соответствуют формату поля;
возможность возврата назад (навигация) ;
запрос на подтверждение удаления вида «Вы действительно хотите удалить файл (запись)?»;
вывод сообщения об успешности создания/редактирования/удаления файла/записи.
Требования к программной реализации
Все переменные и константы должны иметь осмысленные имена в рамках тематики варианта к курсовой работе.
Имена функций должны быть осмысленными и строится по принципу «глагол + существительное». Если функция выполняет какую-либо проверку и возвращает результат типа bool, то ее название должно начинаться с глагола is (например, isFileExist, isUnicLogin).
Код не должен содержать неименованных числовых констант (так называемых «магических» чисел), неименованных строковых констант (например, имен файлов и др.). Подобного рода информацию следует выносить в глобальные переменные с атрибутом const. По правилам хорошего стиля программирования тексты всех информационных сообщений, выводимых пользователю в ответ на его действия, также оформляются как константы.
Код необходимо комментировать (как минимум в части нетривиальной логики).
Код не должен дублироваться - для этого существуют методы и функции.
Одна функция решает только одну задачу (например, не допускается в одной функции считывать данные из файла и выводить их на консоль - это две разные функции). При этом внутри функции возможен вызов других функций.
Следует избегать длинных функций и глубокой вложенности: текст функции должен умещаться на один экран, а вложенность блоков и операторов должна быть не более трёх.
Конструирование программы
Реализация программы будет осуществляться на языке С++ в IDE-среде Microsoft Visual Studio 2017. Программа будет компилироваться и использоваться в операционных системах семейства Microsoft Windows версии 7 и выше.
Разработка структуры программы
Согласно требованиям к программе, необходимо наличие исполняемой программы, которая работает с базой пользователей программы и базой путевок. Следовательно, с точки зрения верхней архитектуры программы, можно выделить два основных модуля: модуль работы с базой пользователей и модуль работы с базой путевок. На рисунке 1 показаны основные модули программы.
Рисунок 1 - Основные модули программы
Функция аутентификации пользователя заключается в проверке существования данных пользователей введённого логина и соответствующего ему пароля. Авторизация пользователя подразумевает получение его роли из файла данных и предоставление ему соответствующих привилегий. Задачи аутентификации пользователя и запрос его роли можно реализовать в отдельном модуле либо непосредственно в модуле управления данными пользователей.
После успешной авторизации пользователя создаётся пользовательская сессия с соответствующими привилегиями, согласно роли пользователя. Сессия администратора имеет полный доступ к модулям управления обеими базами данных, а сессия пользователя, в свою очередь, имеет доступ только к модулю управления базой данных пациентов в режиме «только для чтения».
Программа подразумевает наличие консольного пользовательского интерфейса. Для организации связи слоёв интерфейса пользователя, логики и доменной модели выбран паттерн «MVC» (Model-View-Controller). В качестве модели (Model) здесь выступают модули управления данными.
Связь сессий пользователей с модулями управления данными будут осуществляться через контроллеры (Controller). Так, для сессии администратора требуется доступ к контроллеру базы пользователей и к контроллеру базы справочной автовокзала, а сессии пользователя - только к контроллеру базы справочной автовокзала.
На рисунке 2 показаны взаимосвязи основных классов программы.
Рисунок 2 - UML-диаграмма основных классов
Выбор способа организации данных
Пароль должен храниться в памяти максимально короткое время, необходимое для вычисления секретного ключа. Потому класс не содержит поля для хранения пароля. Секретный ключ, формируемый на основе пароля, хранится в базе данных и необходим только для проверки корректности вводимого пользователем пароля при прохождении процедуры аутентификации. Следовательно, хранение секретного ключа также не требуется в полях класса Accounts.
Для представления в программе объекта Рейс вводится класс Flights, содержащий: номер рейса, тип автобуса, пункт назначения, время отправления, время прибытия в конечный пункт.
class Flights
{
public:
Flights () ;
~Flights () ;
struct flight {
string typeTour;
string hostCountry;
string typeTransport;
int amountDays;
string food;
int cost;
};
}
В качестве БД был выбран текстовый файл.
Программа обслуживает данные, хранимые в двух базах данных: базе данных пользователей и базе данных автовокзала. Эти базы имеют различные схемы данных.
Схема базы данных пользователей
Для базы данных пользователей требуется хранить имя пользователя (login), пароль (password) и прот пользователя (role). Схема базы данных пользователей показана на рисунке 3.
|
login |
password |
role |
|
|
root |
root |
admin |
Рисунок 3- Схема базы данных пользователей
Схема базы путевок
База данных путевок, согласно требованиям, должна содержать следующую информацию:
Тип путевки;
Страна пребывания;
Вид транспорта;
Количество дней пребывания;
Питания;
Стоимость.
Схема базы данных показана на рисунке 4.
|
typeTour |
hostCountry |
typeTransport |
amountDays |
food |
const |
|
Разработка перечня пользовательских функций программы
Ниже приведено описание публичных интерфейсов всех основных классов.
class Flights
{
public:
Flights () ;
~Flights () ;
struct flight {
string typeTour;
string hostCountry;
string typeTransport;
int amountDays;
string food;
int cost;
};
}
class Accounts
{
public:
Accounts () ;
~Accounts () ;
struct account {
string login;
string password;
string role;
};
}
Разработка алгоритмов работы программы
Алгоритм функции main
Функция main является точкой входа в программу, вызывает основные функции инициализации, создаёт объект класс Application и передаёт ему управление. На рисунке 5 показана блок-схема алгоритма функции main.
Рисунок 5 - Блок-схема алгоритма функции main
Алгоритм функции Accounts: : accounts
Метод accounts класса Accounts проверяет наличие БД пользователей и создает новую БД вместе с 1 пользователем при ее отсутствии (рисунок 6).
Рисунок 6 - Блок-схема алгоритма метода Application: : StartAndWaitExit
Алгоритм функции Flights: : editTour
Редактирование выбранной записи путевки. Из предложенного списка путевок выбирается конкретная запись с последующим изменением ее значений.
Алгоритм метода editTour класса Flights показан на рисунке 7.
Рисунок 7 - Блок-схема алгоритма метода editFlight
Описание работы программы
При запуске программа пытается найти и открыть базу данных пользователей. Если база не найдена, то программа предлагает создать её. При создании новой базы необходимо сразу добавить в неё учётную запись.
Поиск и создание файла базы данных пользователей производится в текущей директории программы. Имя файла прописано в коде программы: «accounts. txt».
Если база данных успешно открыта, то программа проверяет в ней наличие учётных записей администратора и, если их нет, предлагает добавить (рисунок 8).
Рисунок 8 - Создание базы данных пользователей при запуске программы
Авторизация
После успешного открытия базы данных пользователей (только для чтения) программа запрашивает учётные записи пользователя (логин и пароль) для его авторизации до тех пор, пока авторизация не будет успешно пройдена, либо пока пользователь не решит отменить процедуру входа: в этом случае программа завершит работу.
Для проверки корректности ввода логина и пароля программа обращается напрямую к текстовому файлу пользователей, который инкапсулирует алгоритм обработки и проверки пароля и его соответствия имени пользователя.
После успешной аутентификации пользователя программа получает из текстового файла пользователей роль аутентифицированного пользователя и авторизует его, создав соответствующую роли сессию: сессию администратора, которой будет соответствовать в дальнейшем описании модуль администратора либо сессию пользователя, которой будет соответствовать модуль пользователя.