КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Библиографический список. Основные результаты курсовой работы
Основные результаты курсовой работы 1. Разработана программа «База данных авиакомпании СИБИРЬ». 2. Программа считывает данные из файла и записывает модифицированную базу в тот же файл при желании на то пользователя. 3. Программа позволяет осуществлять поиск в базе данных по месту назначения, а также по месту назначения и времени вылета. 4. Программа позволяет редактировать данные из базы в режиме диалога: возможно покупать билеты и редактировать время вылета. 5. Программа протестирована для всех возможных ситуаций. В этих ситуациях программа работает корректно. Непредсказуемых результатов не возникает. 6. Разработано руководство оператора для данной программы. 1. Павловская Т.А. С/С++. Программирование на языке высокого уровня. – СПб.: Питер, 2008. – 461 с.: ил. 2. Панюкова Т.А., Панюков А.В. Языки и методы программирование: Учебное пособие. – М.: Книжный дом «Либроком», 2013. – 144 с. ПРИЛОЖЕНИЕ. Текст программы #include <cstdlib> #include <iostream> #include <ios> #include <iomanip> #include <fstream> #include <locale>
using namespace std;
const int cF=30;//Максимальная длина строки
//Структура для хранения данных о времени struct Time{ int hr; //часы int min; //минуты };
//Структура для хранения списка с информацией о совершаемых рейсах struct Flight{ int Num; //номер рейса char Destination [cF];//пункт назначения Time Dep; //время вылета int way; //время в пути int FreePlace; //наличие свободных мест Flight *Next; //Указатель на следующий элемент списка };
Flight *head; //Указатель на голову списка
//************ Прототипы использованных функций (оглавление) ******************* Flight* Add(Flight * head, const Flight& fl); int Menu(); Flight NewFlight(); Flight * ReadBase (char *FileName); void FilePrint (char *FileName, Flight *head); void Print (Flight *head); int BuyTicket(Flight * head); int EditFlight(Flight * head); void FindFlight (Flight *head); void FindTimeAndDestination (Flight *pv, char *Place, Time t); void FindDestination (Flight *pv, char *Place); Flight *FindNum(Flight * pv, int Num, Flight **prev); Flight *Remove(Flight *head); int GetNumFlight();
//*********** ДОБАВЛЕНИЕ РЕЙСА В СПИСОК ************************************** Flight* Add(Flight * head, const Flight& fl){ //Формирование нового элемента Flight * pv=new Flight; *pv=fl; pv->Next=0; if (head){ //Если список не пуст Flight* tmp=head; while(tmp->Next) tmp=tmp->Next;//Поиск конца списка tmp->Next=pv; //Присоединение нового элемента }else head=pv; return head; }
//************ Запрос по номеру рейса ****************************************** int GetNumFlight(){ int cNum; cout<<"Введите номер рейса\n"; cin>>cNum; return cNum; }
//*********** Удаление рейса по номеру ***************************************** Flight *Remove(Flight **head){ int N=GetNumFlight();//Ввод номера удаляемого рейса Flight *prev; Flight *pv=FindNum(head,N, &prev); if (pv){ //Если удаляемый элемент найден if (pv==head) //Если удаление из начала списка head=head->Next; else //Удаление из середины или конца списка prev->Next=pv->Next; delete pv; //Освобождение памяти из-под элемента } return head; }
//************ Поиск рейса по номеру ******************************************* Flight *FindNum(Flight * pv, int Num, Flight **prev){ *prev=0; while (pv){ // Пока не достигли конца списка... if (pv->Num==Num){ //Если номер рейса текущего элемента совпадает с искомым... // Вывести информацию о найденном рейсе на экран cout<<(pv->Destination)<<" "<<(pv->Dep.hr)<<" "<<(pv->Dep.min); cout<<" "<<(pv->way)<<" "<<(pv->FreePlace)<<"\n"; //Возврат из функции: может быть только одна запись с указанным номером рейса return pv; } // Переход к следующему элементу списка *prev=pv; pv=pv->Next; } //Если список просмотрен, но ничего не выведено на экран, значит, //рейса с заданным номером нет в базе cout<<"Рейс с номером "<<Num<<" не найден\n"; return 0; }
// ************** Поиск рейса по месту назначения ****************************** void FindDestination (Flight *pv, char *Place){ cout<<"\n Найденные рейсы:\n"; while (pv){// Пока не достигли конца списка... //Если название направления совпадает с тем, которое необходимо найти if (strstr(pv->Destination,Place)){ // Вывести информацию на экран. Возврат из функции не осуществляется // так как в одном направлении может быть несколько рейсов cout<<(pv->Num)<<" "<<(pv->Destination)<<" "<<(pv->Dep.hr)<<" "<<(pv->Dep.min); cout<<" "<<(pv->way)<<" "<<(pv->FreePlace)<<"\n"; } // Переход к следующему элементу списка pv=pv->Next; } } // *************** Поиск рейса по месту назначения и времени вылета ************ void FindTimeAndDestination (Flight *pv, char *Place, Time t){ while (pv){// Пока не достигли конца списка... //Если название направления и время вылета совпадает с тем, что необходимо найти if (strstr(pv->Destination,Place)&&(pv->Dep.hr==t.hr && pv->Dep.min==t.min)){ // Вывести информацию на экран. Возврат из функции не осуществляется // так как в одном направлении может быть несколько рейсов в одно и то же время //(хотя и маловероятно ^_^) cout<<(pv->Num)<<" "<<(pv->Destination)<<" "<<(pv->Dep.hr)<<" "<<(pv->Dep.min); cout<<" "<<(pv->way)<<" "<<(pv->FreePlace)<<"\n"; } // Переход к следующему элементу списка pv=pv->Next; } }
// ******************** Функция поиска ***************************************** void FindFlight (Flight *head){ char B[cF]; //Временная переменная для ввода места назначения //Объявляется в начале функции, т.к. она искользуется в 2 ветках switch Time t; //Временная переменная для ввода времени вылета int option; //Переменная, в которой сохраняется номер выбранного пункта меню
//Вывод меню на экран cout<<"Выберите режим поиска:\n"; cout<<"1 - Поиск по месту назначения\n"; cout<<"2 - Поиск по месту назначения и времени вылета\n"; cout<<"0 - Выход из меню\n"; //Ввод с клавиатуры выбранного пункта cin>>option; //Обработка ввода и вызов соответствующих функций switch (option){ case 0:{return;} case 1: { cout<<"Введите место назначения\n"; cin>>B; FindDestination(head,B); break; } case 2:{ cout<<"Введите место назначения\n"; cin>>B; do{ cout<<"Введите время вылета\n"; cin>>t.hr>>t.min; }while(t.hr>23||t.min>59); FindTimeAndDestination(head,B,t); break; } default: cout<<"Неверный режим\n"; }//switch } //****************** Покупка билета ******************************************** int BuyTicket(Flight * head){ int N; // Номер рейса int s; //Количество покупаемых билетов N=GetNumFlight(); //Ввод номера рейса // Поиск рейса по номеру Flight *prev; Flight *pv=FindNum(head,N,&prev); //Если рейс не найден, прекратить выполнение функции if (!pv) return 1; //Оформление покупки билетов cout<<"Сколько билетов куплено?\n"; cin>>s; //Если количество приобретаемых билетов больше, чем количество свободных мест, //сообщить клиенту о невозможности совершения покупки if (s>pv->FreePlace) cout<<"К сожалению, недостаточно свободных мест на рейсе.\n"; else{ //Оформить покупку и уменьшить количество доступных для продажи мест cout<<"Поздравляем с покупкой!"; pv->FreePlace-=s; } return 0; } //****************** Корректировка сведений ************************************ int EditFlight(Flight * head){ int N=GetNumFlight(); //Ввести номер рейса Time B; //Время вылета //Поиск рейса по номеру Flight *prev; Flight *pv=FindNum(head,N,&prev); //Если рейс не найден, прекратить выполнение функции if (!pv) return 1; //Корректировка времени вылета рейса //Значения вводятся в цикле do...while до тех пор, пока они не будут введены //корректно: часы <24, а минуты <60. do{ cout<<"Введите новое время вылета\n"; cin>>B.hr>>B.min; }while(B.hr>23||B.min>59); //Сохранить введенные значения в соответствующее поле найденного элемента pv->Dep=B; return 0; } // ******************* Вывод базы на экран ************************************* void Print (Flight *head){ //Перейти в голову списка Flight* pv=head; //Вывести шапку таблицы БД cout<<"----------------------------------------------------------------------------\n"; cout<<"|Номер |\t Направление |\t Вылет |\t В пути (мин) |\t Своб.мест |\n"; cout<<"----------------------------------------------------------------------------\n"; //Просмотреть последовательно весь список и вывести его на экран построчно //функция setw(N) используется, чтобы установить ширину табличного поля (в символах) // символ - "\t" - табуляция while (pv){ cout<<"|"<<setw(5)<<(pv->Num)<<"|\t"<<setw(20)<<(pv->Destination); cout<<"|\t"<<(pv->Dep.hr)<<":"<<(pv->Dep.min); cout<<"\t|"<<setw(20)<<(pv->way)<<"|\t"<<(pv->FreePlace)<<"\t|\n"; cout<<"----------------------------------------------------------------------------\n"; pv=pv->Next; } } //****************** Вывод базы в файл ***************************************** void FilePrint (char *FileName, Flight *head){ //Открыть файл с именем, хранящимся в переменной FileName для перезаписи. //Будем работать с выходным потоком ofstream out; out.open(FileName); //Если не удалось открыть файл - сообщить об ошибке if (!out){ cout<<"Ошибка открытия файла\n"; return; } //Перейти в голову списка Flight* pv=head; //Вывести последовательно все записи из списка в файл. Оформление отсутствует while (pv){ out<<(pv->Num)<<"\t"<<(pv->Destination)<<"\t"<<(pv->Dep.hr)<<" "<<(pv->Dep.min); out<<"\t"<<(pv->way)<<"\t"<<(pv->FreePlace)<<"\n"; pv=pv->Next; } //Закрыть файл out.close(); } //******************* Чтение базы из файла ************************************ Flight * ReadBase (char *FileName){ //Открыть файл с именем, хранящимся в переменной FileName для чтения. //Будем работать с входным потоком ifstream in; Flight f, *head=0; in.open(FileName); //Если не удалось открыть файл - сообщить об ошибке if (!in){ cout<<"Ошибка открытия файла\n"; return 0; } //Считать данные из файла в переменную f (имеющую тип Flight) и вызвать //функцию добавления соответствующего элемента в список while (in>>(f.Num)>>(f.Destination)>>(f.Dep.hr)>>(f.Dep.min)>>(f.way)>>(f.FreePlace)){ head=Add(head,f); } //Закрыть файл in.close(); //Вернуть указатель на головной элемент списка return head; } //********************** Пополнение базы данных ******************************** Flight NewFlight(){ Flight f;// Временная переменная для сбора данных о рейсе //Ввод данных о рейсе с проверкой корректности ввода времени cout<<"Введите номер рейса\n"; cin>>f.Num; cout<<"Введите пункт назначения\n"; cin>>f.Destination; do{ cout<<"Введите время вылета\n"; cin>>f.Dep.hr>>f.Dep.min; }while(f.Dep.hr>23||f.Dep.min>59); cout<<"Введите время в пути (в минутах)\n"; cin>>f.way; cout<<"Введите количество свободных мест\n"; cin>>f.FreePlace; //В качестве возвращаемого значения передать введенную информацию return f; } // ******************* Пользовательское меню *********************************** int Menu(){ int option; //Выводить меню и запрашивать выбор одного из его пунктов, //пока не будет введено допустимое значение do{ cout<<"ВАС ПРИВЕТСТВУЕТ АВИАКОМПАНИЯ <<СИБИРЬ>>."; cout<<"ДЛЯ ДАЛЬНЕЙШЕЙ РАБОТЫ ВЫБЕРИТЕ ДЕЙСТВИЕ.\n"; cout<<"1 - Добавление нового рейса в базу\n"; cout<<"2 - Удаление рейса из базы\n"; cout<<"3 - Поиск рейса\n"; cout<<"4 - Корректировка времени вылета\n"; cout<<"5 - Покупка билета\n"; cout<<"6 - Вывод базы на экран\n"; cout<<"7 - Вывод базы в файл\n"; cout<<"0 - Выход\n"; cin>>option; }while (option<0||option>7); return option; } //****************************************************************************** int main(int argc, char *argv[]) { setlocale (LC_ALL, "Russian"); //Подключение кириллицы Flight * head=ReadBase("flights.txt"); //Считать базу из файла flights.txt if (!head){//Если база не существует, завершить выполнение программы cout<<"Невозможно сформировать список\n"; system("PAUSE"); return 1; } //До тех пор, пока пользователь не выбрал опцию "Выход", отображать меню //и выполнять выбранные действия. Номер действия является целочисленным значением, //возвращаемым функцией Menu() while (true){ switch(Menu()){ case 0: { system("pause"); return 0;}//Выход из программы case 1: { //Добавление записи Add(head, NewFlight()); cout<<"Запись добавлена в базу данных. Для просмотра базы нажмите 6.\n"; break;} case 2:{ //Удаление записи head=Remove(head); cout<<"Запись удалена из базы данных. Для просмотра базы нажмите 6.\n"; break;} case 3: { //Поиск записи FindFlight(head); break;} case 4: { //Редактирование времени вылета EditFlight(head); cout<<"Время вылета изменено. Для просмотра базы нажмите 6.\n"; break; } case 5: { //Покупка билета BuyTicket(head); cout<<"Покупка совершена. Для просмотра базы нажмите 6.\n"; break; } case 6:{ //Вывод базы на экран Print(head); break;} case 7:{ //Вывод базы в файл FilePrint("flights.txt", head); cout<<"Информация занесена в файл flights.txt. Для просмотра базы нажмите 6.\n"; break;} default:{ //Внезапно было возвращено недопустимое значение... cout<<"Непредусмотренная ситуация\n"; }; }//switch }//while system("PAUSE"); return EXIT_SUCCESS; }
Дата добавления: 2014-11-25; Просмотров: 597; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |