Курсовая работа: Разработка программы подбора туристической путевки

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Если пользователь авторизован с правами администратора, то программа выведет соответствующее сообщение (рисунок 9).

Рисунок 9 - Авторизация пользователя (администратора)

Модуль администратора

Далее программа запускает диалоговое взаимодействие с пользователем путём отображения пронумерованных пунктов меню и запросом у пользователя ввода желаемого номера. На рисунке 10 показано главное меню модуля администратора.

Рисунок 10 - Главное меню модуля администратора

На рисунке 11 показано меню «Управление аккаунтами».

Рисунок 11 - Меню «Управление аккаунтами»

На рисунке 12 показано меню «Работа с файлом данных».

Рисунок 12 - Меню «Работа с файлом данных»

На рисунке 13 показано меню «Работа с данными маршрутов».

Рисунок 13 - Меню «Работа с данными маршрутов»

На рисунке 14 показано меню «Поиск маршрута».

Рисунок 14 - Меню «Поиск маршрута»

На рисунке 15 показано меню «Сортировка».

Рисунок 15 - Меню «Сортировка»

На рисунке 16 показан пример вывода всех учётных записей пользователей.

Рисунок 16 - Просмотр всех учётных записей пользователей

На рисунке 17 показан пример добавления новой учётной записи пользователя.

Рисунок 17 - Добавление новой учётной записи пользователя

На рисунке 18 показан пример изменения существующей учётной записи пользователя.

Рисунок 18 - Изменение учётной записи пользователя

На рисунке 19 показан пример удаления существующей учётной записи пользователя.

Рисунок 19 - Удаление учётной записи пользователя

На рисунке 20 показан пример создания нового файла данных с маршрутами. Файл автоматически становится активным.

Рисунок 20 - Создание файла данных

На рисунке 21 показан пример открытия файла данных с маршрутами.

Рисунок 21 - Открытие файла данных.

На рисунке 22 показан пример удаления существующего файла данных с маршрутами.

Рисунок 22 - Удаление файла данных маршрутов.

На рисунке 23 показан пример добавления новой записи об маршруте.

Рисунок 23 - Добавление маршрута

На рисунке 24 показан пример вывода всех маршрутов

Рисунок 24 - Просмотр всех маршрутов

На рисунке 25 показан пример изменения существующей записи маршрута.

Рисунок 25 - Изменение записи маршрута

На рисунке 26 показан пример удаления существующей записи путевки.

Рисунок 26 - Удаление записи

На рисунке 27 показан пример вывода списка маршрутов на которых можно прибыть в пункт назначения за 12 часов до указанного времени.

Рисунок 27 - Показ маршрутов для прибытия за 12 часов до указанного времени

На рисунке 28 показан пример поиска помаршрутов по номеру рейса. Программа выполняет поиск вхождения введённого значения с учётом регистра.

Рисунок 28 - Поиск маршрута по номеру рейса

На рисунке 29 показан пример поиска маршрута по типу автобуса. Программа выполняет поиск введённого значения с учётом регистра.

Рисунок 29 - Поиск маршрута по типу автобуса

На рисунке 30 показан пример поиска маршрута по пункту назначения. Программа выполняет поиск введённого значения с учётом регистра.

Рисунок 30 - Поиск маршрута по пункту назначения

На рисунке 31 показан пример вывода маршрутов, отсортированных по номеру рейса в порядке возрастания.

Рисунок 31 - Сортировка маршрутов по номеру рейса

На рисунке 32 показан пример вывода маршрутов, отсортированных по типу автобуса в порядке возрастания.

Рисунок 32 - Сортировка маршрутов по типу автобуса

На рисунке 33 показан пример вывода маршрутов, отсортированных по пункту назначения в порядке возрастания.

Рисунок 33 - Сортировка маршрутов по пункту назначения

Модуль пользователя

Если пользователь авторизован с правами пользователя, то программа выведет соответствующее сообщение (рисунок 34).

Рисунок 34 - Авторизация пользователя (пользователь)

Программа запускает диалоговое взаимодействие с пользователем путём отображения пронумерованных пунктов меню и запросом у пользователя ввода желаемого номера (рисунок 35).

Рисунок 35 - Главное меню модуля пользователя

Снимки экрана для всех операций в модуле пользователя совпадают со снимками экрана соответствующих операций в модуле администратора.

Исключительные ситуации

Обработка исключительных ситуаций, как правило, занимает существенную часть кода программы. Это неизбежно, потому что программа без обработки ошибок и пограничных ситуаций выглядит для пользователя некачественной и может приводить к множеству негативных последствий: повреждению данных, неверной трактовке результатов работы программы, нагрузкой на службу поддержки или разработчика. В связи с этим, в программу встроено достаточно много проверок данных и результатов выполнения функций, обработок программных исключений, сопровождающихся уведомлением пользователя о проблеме и, при возможности, логичной реакцией на ситуацию либо прерыванием работы программы, если программа не смогла обработать исключительную ситуацию.

Первая, простейшая исключительная ситуация: введён неверный логин пользователя либо пароль. Программа сообщает об этом пользователю и спрашивает у пользователя, желает ли он повторить ввод данных (рисунок 36).

Рисунок 36 - Имя пользователя или пароль не верны

Введён верный логин, но неверный пароль. Программа сообщает об этом пользователю и спрашивает у пользователя, желает ли он повторить ввод данных (рисунок 37).

Рисунок 37 - Не верный пароль

При попытке создания новой учётной записи с именем, которое уже существует, программа выведет соответствующее сообщение об ошибке (рисунок 38).

Рисунок 38 - Попытка создания учётной записи пользователя с уже существующим именем

При работе с поиском по маршрутам при вводе информации которая не существует, программа выведет соответствующее сообщение об ошибке (рисунок 39).

Рисунок 39 - Поиск не дал результатов

Приложение А (обязательное)

Листинг кода с комментариями

Класс FlightsBus

#include «stdafx. h»

#include «Accounts. h»

#include «Flights. h»

#include <string>

using namespace std;

void main ()

{

string role = «false»;

string login, password;

setlocale (LC_CTYPE, «Russian») ;

Accounts accs;

Flights flights;

accs. accounts () ;

cout << «\tАВТОРИЗАЦИЯ\n»;

while (role == «false») {

cout << «Введите логин: «; cin >> login;

cout << «Введите пароль: «; cin >> password;

role = accs. auth (login, password) ;

}

if (role == «admin») {

int id;

cout << «\nВы авторизовались в качестве администратора. « << endl;

while (true) {

cout << «\n\tМЕНЮ АДМИНИСТРАТОРА» <<

«\n[1] Управление аккаунтами» <<

«\n[2] Работа с файлом данных» <<

«\n[3] Работа с данными\n»;

id = flights. checkint (3, «\nВведите номер операции: «) ;

switch (id)

{

case 1: accs. operation () ; break;

case 2:

flights. checkFile () ;

flights. operationFile () ; break;

case 3:

flights. checkFile () ;

flights. operationData () ; break;

default: break;

}

}

}

if (role == «users») {

int id;

cout << «Вы авторизовались в качестве пользователя» << endl;

flights. checkFile () ;

while (true) {

cout <<

«\n\tМЕНЮ ПОЛЬЗОВАТЕЛЯ» <<

«\n[1] Просмотреть все путевки» <<

«\n[2] Показать рейсы с указанным типом путевки» <<

«\n[3] Поиск» <<

«\n[4] Сортировка\n»;

id = flights. checkint (4, «\nВведите номер операции: «) ;

switch (id)

{

case 1: flights. getAllFlights () ; break;

case 2: flights. task () ; break;

case 3: flights. findFlight () ; break;

case 4: flights. sortingFlight () ; break;

default: break;

}

}

}

cin. get () ;

}

Класс Flights

#pragma once

#include «stdafx. h»

#include <windows. h>

#include <iostream>

#include <fstream>

#include <string>

#include <cstring>

#include <vector>

#include <iomanip>

#include <algorithm>

using namespace std;

class Flights

{

public:

Flights () ;

~Flights () ;

struct flight {

string typeTour;

string hostCountry;

string typeTransport;

int amountDays;

string food;

int cost;

};

int operationData () {

string idd;

int id;

while (true) {

std: : cout <<

«\n\tРАБОТА С ДАННЫМИ МАРШРУТОВ» <<

«\n[1] Просмотр всех путевок» <<

«\n[2] Удаление путевки» <<

«\n[3] Добавление путевки» <<

«\n[4] Редактирование информации путевки» <<

«\n[5] Поиск путевки» <<

«\n[6] Сортировка» <<

«\n[7] Поиск рейсов с указанным типом путевки» <<

«\n[8] Назад\n»;

id = checkint (8, «\nВведите номер операции: «) ;

switch (id) {

case 1: getAllTours () ; break;

case 2: dellTours () ; break;

case 3: addTours () ; break;

case 4: editTour () ; break;

case 5: findTours () ; break;

case 6: sortingTour () ; break;

case 7: task () ; break;

case 8: return 0; break;

default:

break;

}

}

}

int operationFile () {

int id;

string idd;

while (true) {

std: : cout << «\n----------------» <<

«\nРабота с файлом данных» <<

«\n----------------» <<

«\n[1] Создание файла данных» <<

«\n[2] Открытие файла данных» <<

«\n[3] Удаление файла данных» <<

«\n[4] Назад\n»;

id = checkint (4, «\nВведите номер операции: «) ;

switch (id) {

case 1: createFile () ; break;

case 2: system («Tours. txt») ; break;

case 3: dell_file () ; break;

case 4: return 0; break;

default:

break;

}

}

}

int checkFile () {

std: : ifstream file («Tours. txt») ;

if (file. is_open ()) return 0;

else {

cout << «Файл с данными путевок отсутствует. «;

createFile () ;

}

return 0;

}

int createFile () {

vector<flight> fli;

SetConsoleCP (1251) ;

SetConsoleOutputCP (1251) ;

ofstream file («Tours. txt») ;

file. close () ;

std: : cout << «Список путевок успешно создан!»;

return 0;

}

int dell_file () {

remove («Tours. txt») == 0? cout << «\nФайл успешно удален\n»: cout << «\nПри удалении возникла ошибка. \n»;

return 0;

}

// Вывод информации о путевке по типу и сортировка по убыванию

int task () {

SetConsoleCP (1251) ;

SetConsoleOutputCP (1251) ;

int i;

string str;

std: : cout << «\nВведите тип путевки: «; std: : cin >> str;

vector<flight> fli = flights («Tours. txt») ;

for (i = 0; i < fli. size () ; i++) {

if (fli[i]. typeTour. find (str) == -1) {

fli. erase (fli. begin () + i) ;

i--;

}

}

struct sTypeTour {

bool operator () (const flight& lhs, const flight& rhs) const {

return lhs. typeTour < rhs. typeTour;

}

};

std: : sort (fli. begin (), fli. end (), sTypeTour ()) ;

flights (fli) ;

return 0;

}

int findTours () {

SetConsoleCP (1251) ;

SetConsoleOutputCP (1251) ;

int id;

string str;

std: : cout << «\nid list»

<< «\n[1] Тип путевки»

<< «\n[2] Страна пребывания»

<< «\n[3] Стоимость» << endl;

id = checkint (3, «\nвведите номер параметра по которому хотите искать: «) ;

std: : cout << «\nвведите слово или фразу для поиска: «; std: : cin >> str;

vector<flight> fli = flights («Tours. txt») ;

int i;

switch (id) {

case 1:

for (i = 0; i < fli. size () ; i++) {

if (fli[i]. typeTour. find (str) == -1) {

fli. erase (fli. begin () + i) ;

i--;

}

}

break;

case 2:

for (i = 0; i < fli. size () ; i++) {

if ((fli[i]. hostCountry). find (str) == -1) {

fli. erase (fli. begin () + i) ;

i--;

}

}

break;

case 3:

for (i = 0; i < fli. size () ; i++) {

if (to_string (fli[i]. cost). find (str) == -1) {

fli. erase (fli. begin () + i) ;

i--;

}

}

break;

default: break;

}

if (i == 0) std: : cout << «\nпоиск не дал результатов\n»;

else flights (fli) ;

return 0;

}

int sortingTour () {

int id;

vector<flight> fli = flights («Tours. txt») ;

cout << «\nID LIST»

<< «\n[1] Тип путевки»

<< «\n[2] Страна пребывания»

<< «\n[3] Стоимость» << endl;

id = checkint (3, «\nВведите номер параметра сортировки: «) ;

switch (id) {

case 1:

struct sTypeTour {

bool operator () (const flight& lhs, const flight& rhs) const {

return lhs. typeTour < rhs. typeTour;

}

};

std: : sort (fli. begin (), fli. end (), sTypeTour ()) ;

break;

case 2:

struct sHostCountry {

bool operator () (const flight& lhs, const flight& rhs) const {

return lhs. hostCountry < rhs. hostCountry;

}

};

std: : sort (fli. begin (), fli. end (), sHostCountry ()) ;

break;

case 3:

struct sCost {

bool operator () (const flight& lhs, const flight& rhs) const {

return lhs. cost < rhs. cost;

}

};

std: : sort (fli. begin (), fli. end (), sCost ()) ;

break;

default:

break;

}

flights (fli) ;

return 0;

}

int editTour () {

getAllTours () ;

int id;

SetConsoleCP (1251) ;

SetConsoleOutputCP (1251) ;

std: : cout << «\nВведите номер записи, которую желаете редактировать: «;

std: : cin >> id;

std: : vector<flight> fli = flights («Tours. txt») ;

std: : cout << «Введите тип путевки: «;

std: : cin >> fli[id]. typeTour;

std: : cout << «Введите страну пребывания: «;

std: : cin >> fli[id]. hostCountry;

std: : cout << «Введите вид транспорта: «;

std: : cin >> fli[id]. typeTransport;

std: : cout << «Введите количество дней пребывания: «;

std: : cin >> fli[id]. amountDays;

std: : cout << «Введите питание: «;

std: : cin >> fli[id]. food;

std: : cout << «Введите стоимость: «;

std: : cin >> fli[id]. cost;

ofstream file («Tour. txt», ios_base: : out | ios_base: : trunc) ;

for (int i = 0; i < fli. size () ; i++) file << fli[i]. typeTour + « « << fli[i]. hostCountry + « « << fli[i]. typeTransport + « « << to_string (fli[i]. amountDays) + « « << fli[i]. food +» « << to_string (fli[i]. cost) + «\n»;

cout << «\nИнформация путевки изменена! \n»;

file. close () ;

return 0;

}

int addTours () {

SetConsoleCP (1251) ;

SetConsoleOutputCP (1251) ;

ofstream file («Tours. txt», ios_base: : out | ios_base: : app) ;

flight fli;

std: : cout << «\nВведите тип путевки: «;

std: : cin >> fli. typeTour;

std: : cout << «\nВведите страну пребывания: «;

std: : cin >> fli. hostCountry;

std: : cout << «\nВведите вид транспорта: «;

std: : cin >> fli. typeTransport;

std: : cout << «\nВведите количество дней пребывания»;

std: : cin >> fli. amountDays;

std: : cout << «\nВведите притание «;

Источник: https://otherreferats.allbest.ru/download/1153537/