C课程设计航空售票管理系统_第1页
C课程设计航空售票管理系统_第2页
C课程设计航空售票管理系统_第3页
C课程设计航空售票管理系统_第4页
C课程设计航空售票管理系统_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

年4月19日C课程设计航空售票管理系统文档仅供参考内蒙古科技大学本科生《C++程序设计》课程设计说明书题目:航空售票管理系统学生姓名:完美主义学号:XXXXXXXX专业:计算科学与技术班级:计-1班指导教师:XXX【摘要】随着科技的发展和人们生活水平的日益提高,人们在不断追求更加快捷的交通方式以满足人们快节奏的生活方式,航空系统在交通系统中已扮演着一个越来越重要的角色。然而,交通的快捷离不开信息的快捷。随着随着计算机的发展和普及,人们的生活方式发生了巨大的改变,计算机在代替和延伸脑力劳动方面发挥着越来越重要的作用。在交通系统中,有大量的数据需要被处理,而这些工作有人来完成几乎是不可能的,而交给计算机处理,就能够很好地满足我们的需求。航空售票管理系统能够根据乘客和管理人员的要求,进行方便快速的查询、购票、退票和管理等工作。本文介绍了简易航空售票管理系统的实现过程。【关键词】航空售票管理系统动态数组类和对象文件操作运算符重载多文件结构

成绩评定标准课程设计的验收答辩采取“讲解程序+提问+即时编程”的方式。考核项目评价质量成绩程序功能完全实现,并能经过答辩。(60%)A能完全正确回答提问;B问题回答的基本意思正确;C不能回答或回答错误,抽取程序小的功能即时编程,能完成;D不能回答或回答错误,即时编程无法完成;程序设计符合面向对象的思想和原则,结构合理(15)A程序结构层次分明,提取出各个实体类,类的设计合理;B程序结构层次分明,具有客户类和服务类;C类的设计基本正确;D几乎在一个类或者方法中实现了大部分的逻辑,结构不够清晰;程序的风格(10%)A遵守编码规范,有良好的风格;以下问题每出现一项成绩降一个等级:1.类、方法和变量命名不符合规范;2.方法和属性前缺少注释;3.程序没有适当缩进;设计说明书(15%)从以下几方面考核:1.结构完整2.图表正确3.文字通顺4.版面工整

目录第一章问题描述 1第二章问题分析 22.1阐述你对问题的理解、解决问题的方案说明 22.2系统功能模块的划分 2第三章数据模型 43.1相关数据结构的说明 43.2类的设计 43.3程序结构说明,即程序各个部分之间如何协调来完成任务 53.4全局变量,重要形式参数、局部变量等等,它们的命名及用途解释 6第四章算法描述 74.1解题算法的设计思路介绍 74.2画出程序流程图 7第五章设计总结 12附录 13参考文献 32………………………问题描述1.1该航空售票管理系统必须用C++语言进行设计,要能体现C++语言的特性。1.2该系统至少要能提供下列服务:录入航班信息,格式为:航班号起始终点起飞时间经济舱票价剩余座位mu2164包头北京20:3061087可不定时地增加航班数据。(2)浏览航班信息,可显示出所有航班,如果当前系统时间超过了某航班的起飞时间,则显示“此次航班已发出”的提示信息。(3)查询路线:可按航班编号查询,可按起始站,终点站查询(4)订票和退票功能A:查询航班编号或站点。当剩余座位数大于0,而且当前系统时间小于起飞时间时才能售票,售票后自动更新剩余座位数。B:退票时,输入退票的班次,当本班航班未发出时才能退票,退票后自动更新剩余座位数。问题分析从对问题的描述能够知道,我们需要建立的是具有能对数据录入,追加,浏览,检索和修改功能的软件。由于乘客的数量较大且不固定,因此选择用动态数组来保存乘客的基本信息:航班号、起始站名、终点站名、起飞时间、经济参票价、余票量等等。因此我们建立一个能够动态增长的数组,在必要的时候将数组的内容保存到文件中。系统主要实现的操作和功能是:录入航班信息、浏览航班信息、查询航线、订票功能、退票功能。要实现这些功能,首先要使程序能实现查找功能,在查找出到有效信息的前提之下,经过链表的赋值,更新信息和删除退票人信息,满足客户的要求。阐述你对问题的理解、解决问题的方案说明根据系统功能要求,能够将问题解决分为以下步骤:(1)分析系统中的各个实体之间的关系及其属性和行为;(2)根据问题描述,设计系统的类层次;(3)完成类层次中各个类的描述(包括属性和方法);(4)完成类中各个成.员函数的定义;(5)完成系统的应用模块;(6)功能调试;(7)完成系统总结报告以及系统使用说明书。系统功能模块的划分该系统总共包含四大功能模块:更新航班信息功能模块该模块为对航班信息的操作,仅向管理员开放使用,普通用户不能使用该功能对航班信息进行操作,故进入该功能需进行身份验证。该模块又被分为五个子功能模块——信息库的重建、信息的插入、修改、删除和清空数据。浏览航班信息完成将文件中的航班信息按照要求格式全部输出。查询航班信息能够实现按航班号和按站点的查询并将查询到的信息输出。订票和退票系统该模块根据订票和退票操作的相似性,将这两种操作放在一起。另外,由于各模块函数是直接对文件进行操作,因此各功能模块是相互独立的。数据模型相关数据结构的说明本系统用到的容器主要是动态增长的vector,使用该容器需用头文件#include<vector>,其经过语句vector<Flight>v_array;申请了一个能够动态增长的数组。该数组的元素类Flight的对象,经过语句Flightfly;v_array.push_back(fly);可实现数组v_array的增长。该容器用来存放航班类Flight的对象,使用该容器能够能够存放个数不确定的对象,且能够方便地进行访问。类的设计程序中一共定义了两个类:Flight类和Traffic_system类。在Flight类里定义了私有数据成员m_fnum[10]表示航班号,m_ftime[2]表示起飞时间,charm_fstar[18]表示起始站,m_fdestination[18]表示终点站,m_fprice表示票价,m_fseat表示票数;定义了共有的成员函数boolSetInfo()用来设置航班信息,friendistream&operator>>(istream&in,Flight&cp)用来重载提取运算符>>,friendostream&operator<<(ostream&out,Flight&cp)用来重载插入运算符<<,voidDisplay()用来输出航班信息,boolBook()用来订票,voidRefund()用来退票,boolIf_takeoff()用来判断是否起飞,boolIf_deleted()用来判断该航班是否被删除,boolIf_match(char(*p)[18],charta)用来判断航班号或站点名是否相同。另一个类为Traffic_system类,其中定义了私有数据成员m_sum和v_array,v_array是数组名,用来存放航班类对象,m_sum表示数组v_array中航班类对象的个数;还定义了私有的成员函数voidRead_file()用来读取文件,voidSave_file()用来保存数据到文件,以及公有的数据成员函数voidManage()用来管理航班信息,voidScan()用来浏览航班信息,intSearch(intinvoke=0)完成查询功能,voidBookRefund()用来订票和退票。两个类之间是组合的关系,其中Flight类是Traffic_system类的子类。程序结构说明,即程序各个部分之间如何协调来完成任务程序的结构图如下:主函数主函数订票和退票浏览航班信息查询航班信息更新航班信息订票和退票浏览航班信息查询航班信息更新航班信息插入信息删除全部删除信息修改信息重新创立信息库插入信息删除全部删除信息修改信息重新创立信息库保存文件保存文件读取文件读取文件如上图,程序中各功能模块所需的数据都直接取自文件,这样保证了各模块的独立性和数据的安全性。而且只有相应的模块进行写的操作,而且数据的写入不必依赖其它模块,这样使用户能够仅使用其中某一项功能,而不必进行多余的操作。全局变量,重要形式参数、局部变量等等,它们的命名及用途解释整个程序中未使用全局变量。重要形参A)提取运算符重载函数istream&operator>>(istream&in,Flight&cp)中使用了形参in和cp,形参in为引用“istream&”,与该函数的返回值相同,故能够将该函数的返回值传给该形参,实现“>>”操作符的连续使用。形参cp为引用“Flight&”,实现了对Flight类对象的输入重载。B)插入运算符重载函数ostream&operator<<(ostream&out,Flight&cp)中使用了形参out和cp,其作用与上面类似。C)函数boolFlight::If_match(char(*p)[18],charta)中使用了形参p和ta,形参p为指向字符数组的指针,它用来指向一个大小为18的字符数组;形参ta为字符型,其作用是使该函数区分航班号和站点名两种比较。D)函数intTraffic_system::Search(intinvoke=0)中使用了形参invoke,该形参为int型并设置默认参数0,其作用为区分调用者,以便输出相应的提示信息。算法描述解题算法的设计思路介绍首先根据问题描述抽象出一个航班类,封装了航班的数据信息和方法。数据里主要有航班的航班号、起飞时间、站点等信息,方法主要是对该类中数据的值的输入、输出对本班次机票的管理,对时间、站名等的核对,另外为了方便对文件的输出和读取,还以友元的形式重载了提取和插入运算符。由于有航班有多组,为了方便管理各个对象,因此有定义了一个Traffic_system类,将Flight类的对象作为Traffic_system类的数据成员。Traffic_system类中还定义了两个私有的成员函数完成对文件的读写。共有的成员函数主要是Manage(),voidScan(),Search(intinvoke=0)和BookRefund(),用来完成系统的几大功能。画出程序流程图文件“航空售票管理系统v-1.0.cpp”中主函数流程图——main()tab=0tab=0tab=5tab=4清屏订票和退票break;break;tab=3tab=2tab=1开始输入tab输出菜单浏览管理查询break;break;break;YNYYYYYNNNN结束文件“class/Traffic_system.cpp”中类中Traffic_system中浏览函数——voidScan()开始开始重建i<m_sum删除全部删除全部返回m_su=0读文件i<=0输出表头YNNY

查询函数——Search(intinvoke=0)开始开始读文件输出提示信息输入tabtab=0返回-1tab=1输入str[0],str[1]输入str[0]i<m_sumNYta<=’1’ta<=’2’v_array[i].If_match(str,ta)返回iYNi++YYNNi<=0

订票退票函数BookRefund()tab=0tab=0tab=2tab=1开始输入tab输出菜单查询break;YYYNN结束订票保存查询break;退票保存设计总结此课程设计完成了对航线查询、订票、退票等功能的设计操作,而且为了插入和删除方便,运用动态数组做存储结构。此课程设计还包含了清屏功能以及退出功能。对程序在运行时输入错误操作的修改,提供了一定方便条件基本上能安全的运行,具备的功能符合题目的要求。用了文件的操作,是此程序的最大优点。程序写的还算简练,结构清晰,各个模块的分工和功能明确。经过两周的课程设计,我认识到把课堂上老师讲的知识运用到实际操作中的重要性。我这次课程设计的题目是航空订票系统,在开始阶段,根本无从下手,后来经过查阅一些相关资料和老师的耐心讲解,最终成功完成整个程序的设计。经过这次课设我对C++语言中的类的定义、运算符重载等知识有了进一步的理解,对流程图的画法更加熟练,对程序的开发思路有了一定的理解,我想这在以后的学习和工作中都会有帮助的,更使我意识到了学习C++语言的重要性。程序中运用了多文件结构,虽然程序不是太大,但多文件结构的使用是我模仿正规软件的结构来写的,我想这对我以后的提高有帮助。另外,对程序的不断调试,是我的查错能力有了很大的提高。附录【程序清单】文件——航空售票管理系统v-1.0.cpp#include<fstream>#include<iostream>usingnamespacestd;#include"class/Traffic_system.h"intmain(){ Traffic_systemcivil_aviation; //若文件不存在,则新建文件 ofstreamnewfile("flightinformation.txt",ios::app); if(!newfile) { cerr<<"文件\"flightinformation.txt\"无法打开!\n"; exit(2); } newfile.close(); inttab; while(1) { cout<<"\n>>>>>>>>>>>>>>>>>>>>>>>>>>欢迎进入航空售票管理系统<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<" <<"******主菜单:***********" <<"******1——更新航班信息(需管理员身份验证)2——浏览航班信息***********" <<"******3——查询航班信息4——订票和退票***********" <<"******5——清屏0——退出系统***********" <<"********************************************************************************" <<"你需要做什么?(选择0~4)"<<endl; cin>>tab; while(!(tab==1||tab==2||tab==3||tab==4||tab==5||tab==0)) { cout<<"请输入正确选择(0~4):"; cin>>tab; } switch(tab) { case1: { civil_aviation.Manage(); break; }//航线管理 case2: { civil_aviation.Scan(); break; }//订票办理 case3: { civil_aviation.Search(); break; }//退票办理 case4: { civil_aviation.BookRefund(); break; } case5:system("cls");break; case0:return0;//退出系统 } }}文件——class/Traffic_system.h#include<vector>usingnamespacestd;#include"flight.h"//用于对文件的操作classTraffic_system{public:Traffic_system(){ m_sum=0;}voidManage();//管理航班信息 voidScan();//浏览 intSearch(intinvoke=0);//查询功能 voidBookRefund();//订票和退票private: voidRead_file();//读取文件 voidSave_file();//保存文件private: intm_sum;//记录航班数 vector<Flight>v_array;//航班类数组};文件——class/Traffic_system.cpp#include<fstream>#include<iostream>usingnamespacestd;#include"Traffic_system.h"//读取文件voidTraffic_system::Read_file(){ ifstreamfile("flightinformation.txt"); if(!file) { cerr<<"文件\"flightinformation.txt\"无法打开!\n"; exit(1); } m_sum=0; while(!file.eof()) { Flightfly; v_array.push_back(fly);// file>>v_array[m_sum++]; } m_sum--;// file.close();}//保存文件voidTraffic_system::Save_file(){ ofstreamfile("flightinformation.txt",ios::trunc); if(!file) { cerr<<"文件\"flightinformation.txt\"无法打开!\n"; exit(2); } inti=-1; while(++i<m_sum) { if(!v_array[i].If_deleted()) { file<<v_array[i]; } } file.close();}//管理航班信息voidTraffic_system::Manage(){ charpassword[20];//用于存贮密码 inttimes=3; cout<<"登录系统需验证密码!"<<endl;//验证密码。三次错误后,就自动退出程序 do { times--; cout<<"请输入密码:(默认000)"; cin>>password; if(strcmp(password,"000")==0)//密码是“000” { times=-1; break; } elseif(times>0) cout<<"密码错误!\n剩余"<<times<<"次机会!"<<endl; }while(times>0); if(times!=-1) { cout<<"对不起!\n您不是管理员!不能使用此系统!"<<endl; return; } system("cls"); while(1) { inttab; cout<<"\n******************************欢迎使用航班信息管理系统**************************\n" <<"————————————————————————————————————————" <<"\t**\t>>1——重新创立信息库\t\t>>2——插入信息**\n\t**\t>>3——修改信息\t\t>>4——删除信息**\n\t**\t>>5——删除全部\t\t>>0——退出管理**\n" <<"————————————————————————————————————————" <<"你需要做什么?(选择0~5)"<<endl; cin>>tab; while(!(tab==1||tab==2||tab==3||tab==4||tab==5||tab==0)) { cout<<"请输入正确选择(0~5):"; cin>>tab; } switch(tab) { case1: { m_sum=0; Flightfly; cout<<"请进行信息录入。按“+”结束!\n"; do v_array.push_back(fly);// while(v_array[m_sum++].SetInfo()); break; } case2: { Read_file(); Flightfly; cout<<"请进行信息录入。按“+”结束!\n"; do v_array.push_back(fly);// while(v_array[m_sum++].SetInfo()); break; } case3: { charfnum[1][18]; Read_file(); cout<<"请输入您要修改信息的航班号:"; cin>>fnum[0]; inti=0; for(;i<m_sum;i++) { if(v_array[i].If_match(fnum,'1')) { cout<<"该航班的原信息为:\n" <<"———————————————————————————————————————\n" <<"丨航班号丨起始站丨终点站丨起飞时间丨票价丨余票丨" <<"———————————————————————————————————————\n"; v_array[i].Display(); cout<<"请输入正确信息!\n"; v_array[i].SetInfo(); m_sum++;//保持及总航线数不变 break; } } if(i==m_sum) { cout<<"抱歉!您要修改的信息不存在!"<<endl; return; } m_sum++;// break; } case4: { charfnum[1][18]; Flightempty;//声明"空"对象,用于删除 Read_file(); cout<<"请输入您要删除航班的航班号:"; cin>>fnum[0]; inti=0; for(;i<m_sum;i++) { if(v_array[i].If_match(fnum,'1')) { cout<<"您要删除的航班为:\n" <<"———————————————————————————————————————\n" <<"丨航班号丨起始站丨终点站丨起飞时间丨票价丨余票丨" <<"———————————————————————————————————————\n"; v_array[i].Display(); v_array[i]=empty; m_sum++;//保持及总航线数不变 break; } } if(i==m_sum) { cout<<"您要删除的信息不存在!"<<endl; return; } break; } case5:m_sum=1;break; case0:return; } cout<<"《确认\\Y》《取消\\N》\n请选择:"; charyn; do { cin>>yn; }while(!(yn=='Y'||yn=='y'||yn=='N'||yn=='n')); if(yn=='Y'||yn=='y') { m_sum--;//对应m_sum++ Save_file(); cout<<"操作成功!"<<endl; } }}//浏览voidTraffic_system::Scan(){ charc; Read_file(); if(m_sum==0) { cout<<"暂无信息!请等待管理人员更新!"; return; } cout<<"\t航班信息表:\n" <<"———————————————————————————————————————\n" <<"丨航班号丨起始站丨终点站丨起飞时间丨票价丨余票丨" <<"———————————————————————————————————————\n"; for(inti=0;i<m_sum;i++) v_array[i].Display(); cout<<"按任意键返回主菜单!"; cin>>c;}//查询功能intTraffic_system::Search(intinvoke){ inttab; Read_file(); cout<<"*************************************************************************\n***>>1——按航班号查询>>2——按站点查询>>0——返回***\n*************************************************************************\n请选择(0~2):" <<endl; cin>>tab; while(!(tab==1||tab==2||tab==0)) { cout<<"请输入正确选择(0~2):"; cin>>tab; } charstr[2][18],ta; if(tab==0) return-1; elseif(tab==1) { cout<<"请输入航班号:"; cin>>str[0]; ta='1'; } else { cout<<"请输入出发站:"; cin>>str[0]; cout<<"请输入终点站:"; cin>>str[1]; ta='2'; } for(inti=0;i<m_sum;i++) { if(v_array[i].If_match(str,ta)) { cout<<"您要查询的结果如下:\n" <<"———————————————————————————————————————\n" <<"丨航班号丨起始站丨终点站丨起飞时间丨票价丨余票丨" <<"———————————————————————————————————————" <<endl; v_array[i].Display(); if(invoke==0) { cout<<"按任意键返回主菜单!"; charc; cin>>c; } returni; } } cout<<"抱歉!您查询的航班不存在!"<<endl; return-1;}//订票和退票voidTraffic_system::BookRefund(){ while(1) { cout <<"**************************欢迎进入机票服务系统**********************\n\n" <<"——————————————————————————————————\n" <<"请选择:\t\t\t\t\t\t\t\t***\n***\t>>1——订票\t>>2——退票\t>>0——返回主菜单***\n" <<"——————————————————————————————————"<<endl; inttab; cin>>tab; while(!(tab==1||tab==2||tab==0)) { cout<<"请输入正确选择(0~2):"; cin>>tab; } charta; switch(tab) { case1: { cout<<"请先查找该航班:"<<endl; inti; i=Search(1); if(i!=-1&&v_array[i].Book()) { cout<<"《确认订票\\Y》《取消订票\\N》\n请选择:"; do { cin>>ta; }while(!(ta=='Y'||ta=='y'||ta=='N'||ta=='n')); if(ta=='Y'||ta=='y') { Save_file(); cout<<"订票成功!"<<endl; } } break; } case2: { charstr[1][18]; Read_file(); cout<<"请输入航班号:"; cin>>str[0]; inti=0; for(;i<m_sum;i++) { if(v_array[i].If_takeoff()) continue; if(v_array[i].If_match(str,'1')) { v_array[i].Refund(); cout<<"《确认退票\\Y》《取消退票\\N》\n请选择:"; do { cin>>ta; }while(!(ta=='Y'||ta=='y'||ta=='N'||ta=='n')); if(ta=='Y'||ta=='y') { Save_file(); cout<<"退票成功!"<<endl; } break; } } if(i==m_sum) { cout<<"不存在该航班或该航班已起飞!不能退票。"<<endl; break; } } case0:return; } }}文件——class/flight.hclassFlight{public: Flight() { m_fnum[0]='+'; } boolSetInfo();//设置航班信息 friendistream&operator>>(istream&in,Flight&cp);//提取运算符重载 friendostream&operator<<(ostream&out,Flight&cp);//插入运算符重载 voidDisplay();//输出航班信息 boolBook();//订票 voidRefund();//退票 boolIf_takeoff();//判断是否起飞 boolIf_deleted();//判断是否删除 boolIf_match(char(*p)[18],charta);//判断航班号或站点名是否相同private: charm_fnum[10];//航班号 intm_ftime[2];//起飞时间 charm_fstar[18];//起始站 charm_fdestination[18];//终点站 intm_fprice;//票价 intm_fseat;//票数};文件——class/flight.cpp#include<iostream>#include<string>#include<iomanip>#include<ctime>//time.hinCusingnamespacestd;#include<stdio.h>#include"flight.h"//<<运算符重载istream&operator>>(istream&in,Flight&cp){ in>>cp.m_fnum>>cp.m_fstar>>cp.m_fdestination>>cp.m_ftime[0]>>cp.m_ftime[1]>>cp.m_fprice>>cp.m_fseat; returnin;}ostream&operator<<(ostream&out,Flight&cp){ out<<cp.m_fnum<<""<<cp.m_fstar<<""<<cp.m_fdestination<<""<<cp.m_ftime[0]<<""<<cp.m_ftime[1]<<""<<cp.m_fprice<<""<<cp.m_fseat<<"\n"; returnout;}//获取系统时间intget_systemtime(){ time_tnow; structtm*fmt; time(&now); fmt=localtime(&now); return(fmt->tm_hour*60+fmt->tm_min);}//判断是否起飞boolFlight::If_takeoff(){ return(m_ftime[0]*60+m_ftime[1]<=get_systemtime());}//判断是否作废boolFlight::If_deleted(){ returnm_fnum[0]=='-';}//判断航班号或站点名是否相同boolFlight::If_match(char(*p)[18],charta){ if(ta=='1') return(!strcmp(m_fnum,p[0])); else return(!strcmp(m_fstar,p[0])&&!strcmp(m_fdestination,p[1]));}//设置航班信息boolFlight::SetInfo(){ cout<<"输入航班号:"; cin>>

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论