收藏 分销(赏)

C--课程设计-民航售票系统.docx

上传人:胜**** 文档编号:2683422 上传时间:2024-06-04 格式:DOCX 页数:36 大小:155.35KB 下载积分:10 金币
下载 相关 举报
C--课程设计-民航售票系统.docx_第1页
第1页 / 共36页
C--课程设计-民航售票系统.docx_第2页
第2页 / 共36页


点击查看更多>>
资源描述
C++面向对象课程设计 民航订票系统 院 系: 计算机科学技术学院 班 级: 网络工程15-2 组 长: 组 员: 指导教师: 2016年06月14日 目 录 1概述 1 1.1研究背景及意义 1 1.2任务概述 1 2需求分析 2 2.1客户功能 2 2.2管理员功能 2 2.3操作方法 2 3总体设计 5 3.1功能结构图 5 3.2模块分析 5 3.2.1添加航线 5 3.2.2查询航班  5 3.2.3预订订票  6 3.2.4退机票 6 3.3数据结构设计 6 (一)、本系统要用到的库函数: 6 (二)、航空类的定义 6 (三)菜单类的定义 8 (四)、接口设计 8 4详细设计 9 4.1 算法设计说明  9 4.2函数实现模块 10 4.2.1 主控函数main() 10 4.2.2客户订票void book() 函数 10 4.2.3客户退票void back() 函数 11 4.2.4客户查询void query() 函数 12 4.2.5管理员航班信息录入模块 13 4.2.6文件写入void writetofile()函数 14 4.2.7控制台的调用system() 14 5程序调试与测试 15 5.1颜色选择 15 5.2利用递归调用实现返回上级菜单或者主菜单 15 5.3倒计时退出界面 15 I 5.4管理员权限限定 16 5.5后台管理界面 16 6总结 17 7程序清单 18 II 1概述 本文采用C++作为前台开发工具,VC6.0作为程序代码的实现,旨在实现对现有飞机订票系统中遇到的各种情况进行良好的改进,是作为嵌入式系统应用于机场的良好软件。 1.1研究背景及意义 随着时代的进步,社会分工的不断细化,各个行业的联系不断密切,人们出行越来越多,出行的方式也是百花齐放。作为空中的重要交通工具,飞机航空系统也在不断得到优化,其中重要的一项就是飞机航空订票系统。因此好的订票系统关系着人们的日常出行方便与否,设计并编制出符合人们需要的航空订票系统是一项繁重而艰巨的任务,需要我们认真去完成。 1.2任务概述 假定民航机场有n个航班,每个航班有一个航班号、确定的航线(出发地、目的地)、确定的飞行时间和飞机票总数,旅客数。该系统需实现下列服务: 1. 航班信息录入功能; 2. 航班信息浏览功能 3. 查询航线(出发地、目的地查询) 4. 承办订票和退票业务 2需求分析 2.1客户功能 1、航线查询功能:  根据输入的起止城市信息查询航班,并显示其详细信息(起飞时间、到达时间、航班号、余票量)。 2、客票预订功能:   根据输入的航班号和数量预订机票,办理手续并进行信息核对。 2.2管理员功能 1、 添加功能:   添加一个航班的信息,包括航班号、行程、起飞时间、到达时间、机型、全价、座位总数 。 2、将航班信息写入文件。 2.3操作方法 民航订票系统的主界面如下所示:  *------ 中国民航欢迎您!------*       ================================= --------* 1、客户 *-------- --------* 2、管理员 *-------- --------* 3、退出程序运行 *-------- == =============================== (1) 、选择1进入普通用户菜单:   *------ 您好,欢迎使用本系统办理订票业务------* = ================================= --------* 1、承办订票业务 *-------- --------* 2、承办退票业务 *-------- --------* 3、查询航班 *-------- --------* 4、退出程序的运行 *-------- == ================================ 选择1进入订票模块:   请输入您要订购的航班号 n23dt  请输入您要订购的机票数量 2 订票成功! 选2进入退票模块: 请输入日期: 航班: 退票成功! 选择3进入航班查询信息模块:   请输入起始地点  北京  请输入目的地点  南京  出发地点  目的地点  起飞时间    航班号 余票 北京       南京      05:43      Bn23dt      100 查找已完成  按任意键返回菜单 (2)、选择2进入管理员菜单: *------ 后台管理系统------* ================================= --------* 1、录入航班信息 *-------- --------* 2、将数据写入文件 *-------- --------* 3、退出程序的运行 *-------- == =============================== 请输入对应操作序号进行相应操作: 选择1录入航班信息 请输入您要添加的航班种数: 请输入您要添加的航班信息:  出发地点:       南京  目的地点:       北京  起飞时间:  时:5  分:43 航班号: Bn23dt  星期几:四 您输入的信息是:  种数 出发地点  目的地点  起飞时间    航班号    星期几 余票 3 南京       北京      05:43     Bn23dt    四 100 选择2将信息写入文件. 选择3退出菜单. 3总体设计 3.1功能结构图 根据需求分析,该系统的功能结构图如下所示: 民航订票系统 管理员模块 客户模块 将信息写入文件 退机票 预定客票 查询航班 添加航 班 按航线查询 图3-1系统结构示意图 3.2模块分析 3.2.1添加航线 系统将提示用户输入新添加的航班的信息,插入在链表中。 3.2.2查询航班  首先由用户输入要查找的起始地点,然后系统用查找函数查找,然后系统就调用输出函数,输出所查找的航班资料。  3.2.3预订订票    由用户输入航班号和订票数目,系统判断能满足用户需求则输出“订票成功”信息 3.2.4退机票 首先由用户输入要退的航班,然后调用删除函数,删除该航班的已订状态。 3.3数据结构设计 (一)、本系统要用到的库函数: #include<iostream> #include<fstream> #include<string> #include<windows.h> (二)、航空类的定义 class Plane { public: char start_place[40];//起点 char name[40];//终点站名 char number[10];//航班号 char week[7];//星期几飞行 char day[40];//日期 int left;//余票额 int n;//与数组flag一起确定客户订票状态 public: int flag[20];//订票状态数组,-1为预订票,1为已定票,0为初始化状态 Plane()//构造函数 { name[0]='\0'; number[0]='\0'; week[0]='\0'; day[0]='\0'; left=M; n=0;//数组从0开始计数 for(int i=0;i<20;i++) flag[i]=0; } void init()//初始化每种飞机票 { cout<<"请输入起点:"; cin>>start_place; cout<<"请输入终点:"; cin>>name; cout<<"请输入航班号:"; cin>>number; cout<<"请输入星期几飞行:"; cin>>week; cout<<"请输入航班的日期:"; cin>>day; } ~Plane(){};//析构函数 char *get_start_place() {return start_place; }//起点 char *getname() {return name; }//获得终点站名 char *getnumber() {return number; }//获得航班号 char *getweek() {return week; }//获得星期几飞行 char *getday() {return day; }//获得日期 int getleft() {return left; }//获得余票额 int getn() {return n; }//获得旅客数目 void inleft(int n) {left=left+n; }//余票额增加函数 void deleft(int n) {left=left-n; }//余票额减少函数 void people_in() {n++;}};//旅客数目增加函数 (三)菜单类的定义 菜单类父类 class menu { public : int ch;//返回选择序号 int me_nu() {}//用于打印菜单,父类的菜单空实现 }; 子菜单类(继承于父类菜单menu) class logo_menu:public menu {};//主界面菜单 class admin_menu:public menu {};//管理员菜单 class client_menu:public menu {};//客户端菜单 (四)、接口设计 表2.1:函数列表 函数名 函数格式 函数功能 book() Void book() 订票函数 writetofile () Void writetofile () 写文件函数 query() Void query() 查询函数 input() Void input() 订票函数 back() Void back() 退票信息 Writetofile() Void writetofile() 写入文件 menu() Int menu() 界面函数 Main() Int main() 主函数 4详细设计 4.1 算法设计说明  文件“航空售票管理系统v-1.0.cpp”中 主函数流程图——main() 开始 输出信息 1 2 3 1 管理员 客户 1 3 3 订票 2 3 4 2 录入信息 数据写入文件 查询 退票 结束 图4-1主控模块算法流程图 4.2函数实现模块 4.2.1 主控函数main() 调用控制台,设置窗口颜色 system(“color 9e” );//控制台调用 接着要求用户选择用户类型,按1为普通用户,按2位管理员,3退出,进入相应菜单后,同样选择对应序号,进行相应操作,进入管理员模式要输入密码进行验证。 4.2.2客户订票void book() 函数 调用此函数实现客户订票预订票数功能。 此函数会首先要求用户所要订购的航班号和预订票数 cout<<"请输入航班号:"<<endl; cin>>number; cout<<"请输入订票数额:"; cin>>n; 之后用一个for循环 实现信息匹配, for(int i=0;i<N;i++) if(strcmp(number,pl[i].number)==0) 用num不为零标记匹配成功的状态 当信息匹配后再判断票数是否足够: if(n<=pl[i].getleft()&&n>0) 票数足够久则订票, cout<<"此航班有足够余票"<<endl; pl[i].deleft(n);//余票减少 pl[i].people_in(); //旅客增加 pl[i].flag[pl[i].getn()]=1; //状态改为已订票 不满足则返回上级菜单,重新确定订票信息,不满足的状态用num为零进行标记; num==0; 如果用户确实是要订票但余票不够,则询问用户是否进行预约,确定后将所需票数改为预约状态,用-1标记。 cout<<"是否需要预约"<<endl; cout<<"是(1) 否(2)"<<endl; cin>>ch; switch(ch) { case 1://确定预约 pl[i].people_in(); pl[i].flag[pl[i].getn()]=-1;//预约,用-1标记,表示预约状态 break; case 2://不预约,退出 break; default://容错处理 cout<<"wrong input!"<<endl; } 最后在函数结尾再调用自身实现返回上级菜单功能, book();//di递归调用 4.2.3客户退票void back() 函数 首先会要求客户输入要退订的票的日期和航班, cout<<"请输入日期:"; cin>>day; cout<<"请输入航班:"; cin>>number; 然后程序进行信息匹配 if(strcmp(day,pl[i].getday())==0&&strcmp(number,pl[i].getnumber())==0) 匹配成功则退票成功,同时系统票数增加 pl[i].inleft(n);//该种飞机票增加,即已退票,接着查询客户的订票状态, //用户是否有预订票,若有,则为用户确定订购此票。 if(pl[i].flag[j]==-1)//客户是否为预定状态 { cout<<"有预约订票,请输入订票数额:"; cin>>nu; if(nu<=pl[i].getleft())//余票额是否满足要求 { cout<<"此航班有票"<<endl; pl[i].flag[j]=1; cout<<"订票成功"<<endl; pl[i].deleft(nu); for(int k=0;k<nu;k++) { cout<<"座位号"<<" "; cin>>sitnumber; } cout<<"余票额为"<<pl[i].getleft()<<endl; } } else cout<<"没有预约订票!"<<"余票额为"<<pl[i].getleft()<<endl; } 若在用户退票的过程中没有匹配到航班,则显示没有此票,清屏并用递归调用返回到上级菜单。 4.2.4客户查询void query() 函数 这个模块查询是按航线的起止点进行查询。 首先会要求用户输入要查询起止点,然后系统在所有的数据中进行匹配, for(i=0;i<=N;i++) if(strcmp(name,pl[i].getname())==0&&strcmp(start_place,pl[i].get_start_place())==0) 当信息匹配时,就会输出对应航班信息: cout<<"航班号:"<<pl[i].getnumber()<<endl; cout<<"星期:"<<pl[i].getweek()<<"飞行"<<endl; cout<<"航班日期:"<<pl[i].getday()<<endl; cout<<"余票额:"<<pl[i].getleft()<<endl; break; 4.2.5管理员航班信息录入模块 想要进入管理员后台管理界面,必须输入管理员密码,保证信息的安全性 cout<<"请输入密码: "<<endl; cin>>y; //读取密码 if(strcmp(y,f)==0)//密码匹配就允许进入管理系统 进入系统后按1 进行信息的录入工作,按 2 进行信息写入文件的操作,按 3退出管理系统。 退出采用延时3秒倒计时退出方式 Sleep(1000)//循环三次,即为3秒倒计时 4.2.5.1 类成员void init()函数 进行航班信息的录入工作 cout<<"请输入起点:"; cin>>start_place; cout<<"请输入终点:"; cin>>name; cout<<"请输入航班号:"; cin>>number; cout<<"请输入星期几飞行:"; cin>>week; cout<<"请输入航班的日期:"; cin>>day; 4.2.5.2 void input() 函数 进入模块,系统要求管理员输入需要录入的机票的种类数,之后调用写入 函数进行写入 for(int i=0;i<count;i++) { pl[i].init(); cout<<endl; } 4.2.6文件写入void writetofile()函数 定义输出文件流对象 ofstream ofs("民航信息系统.dat",ios_base::in); 之后将各个对应信息写入文件 4.2.7控制台的调用system() 程序中用到的控制台命令: system(“cls”);//清屏 用清屏实现窗口界面的切换工作 system(“color 9e”);//窗口颜色设置 5程序调试与测试 5.1颜色选择 经过之前的调试与搭配最终选择了使用蓝底黄字。 5.2利用递归调用实现返回上级菜单或者主菜单 因为考虑到用户的体验,程序设计最终要考虑到用户,所以设计之初就考虑到当完成一项操作后返回上级菜单或者主菜单以便于用户接着进行操作 5.3倒计时退出界面 利用延时函数Sleep(); 实现暂停工作,最终实现倒计时退出 5.4管理员权限限定 进入管理员需要密码,否则没有权限 5.5后台管理界面 6总结 该程序有许多模块组成,模块之间又存在各种包含或调用关系,如果用c语言来实现,虽然程序并不长,后期的调试和修改恐怕也会让人非常头疼,而c++中类的定义和使用使得各种模块相对更加独立,功能分担也更加鲜明,程序容易读,也容易调试和修改。此外,实际动手做一做,才发现c++这门语言有很多细节是当初复习笔试是没有注意到的,对c++的掌握程度和运用能力与编程前有了很大的提高。  在编程过程中,格式出错最多的是对类的成员函数进行定义时,常常忘记限定作用域,导致函数无法调用;而内容上出错最多的则是与指针有关的内容,以后编程时还应努力改正。 还有好多功能没有完善,比如说管理员删除航线,管理员浏览全部的航线,还有用户查询航线时可根据航线,起止点,时间等信息进行查询。 但是值得一提的是利用了递归调用实现返回上级菜单,主菜单的功能,提升了用户的体验。这一点作为程序的主编写者还是比较自豪,满意的。 当然,程序还有好多的不足需要修正,毋庸置疑,程序还存在好多没有发现的bug有待修正。   7程序清单 #include<string> #include<iostream> #include<fstream> #include<windows.h> using namespace std; #define M 5//每种飞机票的总数目 #define N 20//飞机票的种类 #define frame_high 5 #define frame_width 5 class Plane { public: char start_place[40];//起点 char name[40];//终点站名 char number[10];//航班号 char week[7];//星期几飞行 char day[40];//日期 int left;//余票额 int n;//与数组flag一起确定客户订票状态 public: int flag[20];//订票状态数组,-1为预订票,1为已定票,0为初始化状态 Plane()//构造函数 { name[0]='\0'; number[0]='\0'; week[0]='\0'; day[0]='\0'; left=M; n=0;//数组从0开始计数 for(int i=0;i<20;i++) flag[i]=0; } void init()//初始化每种飞机票 { cout<<"请输入起点:"; cin>>start_place; cout<<"请输入终点:"; cin>>name; cout<<"请输入航班号:"; cin>>number; cout<<"请输入星期几飞行:"; cin>>week; cout<<"请输入航班的日期:"; cin>>day; } ~Plane(){};//析构函数 char *get_start_place() {return start_place;}//起点 char *getname() { return name;}//获得终点站名 char *getnumber() {return number;}//获得航班号 char *getweek() {return week;}//获得星期几飞行 char *getday() {return day;}//获得日期 int getleft() {return left;}//获得余票额 int getn() {return n;}//获得旅客数目 void inleft(int n) {left=left+n;}//余票额增加函数 void deleft(int n) {left=left-n;}//余票额减少函数 void people_in() {n++;}//旅客数目增加函数 }; class menu { public : int ch; int me_nu(){} }; class logo_menu:public menu { public: int me_nu() { cout<<endl<<" *------ 中国民航欢迎您!------*"<<endl<<endl; cout<<"=============================================== "<<endl; cout<<" -------- * 1.客户 *--------"<<endl<<endl; cout<<" -------- * 2.管理员 *--------"<<endl<<endl; cout<<" -------- * 3:退出程序的运行 *--------"<<endl<<endl; cout<<"============================================== = "<<endl; cin>>ch; system("cls"); return ch; } }; class admin_menu:public menu { public: int me_nu() { cout<<endl<<"*-------- 后台管理系统 --------*"<<endl<<endl cout<<"======================================== "<<endl; cout<<"------- * 1.录入航班信息 *--------"<<endl<<endl; cout<<" --------* 2.将数据写入文件 *--------"<<endl<<endl; cout<<"-------- * 3:退出程序的运行 *--------"<<endl<<endl; cout<<"========================================= "<<endl; cout<<"请输入对应操作序号进行相应操作:"; cin>>ch; system("cls"); return ch; } }; class client_menu:public menu { public: int me_nu() { cout<<endl<<"您好,欢迎使用本系统办理订票业务"<<endl<<endl; cout<<"============================================ "<<endl; cout<<"-------- * 1:承办订票业务 *--------"<<endl<<endl; cout<<"-------- * 2:承办退票业务 *--------"<<endl<<endl; cout<<"--------* 3:查询航线 *--------"<<endl<<endl; cout<<"-------- * 4:退出程序的运行 *--------"<<endl<<endl; cout<<"============================================ "<<endl; cout<<"请输入对应操作序号进行相应操作:"; cin>>ch; system("cls"); return ch; } }; Plane pl[N]; void init(); void input();//初始化函数 void query();//查询函数 void book();//订票函数 void back();//退票函数 void writetofile(); int main() { char f[]="2016sgs"; system("color 9e"); logo_menu l; while(1) { int choice_logo; choice_logo=l.me_nu(); switch(choice_logo) { case 1: int choice_client; client_menu c; choice_client=c.me_nu(); switch(choice_client) { case 1: cout<<endl<<"* 您好,欢迎使用本系统办理订票业务*"<<endl<<endl; cout<<"================================================ "<<endl; book(); break; case 2: cout<<endl<<"* 您好,欢迎使用本系统办理订票业务*"<<endl<<endl; cout<<"================================================ "<<endl; back(); break; case 3: cout<<endl<<"* 您好,欢迎使用本系统办理订票业务"<<endl<<endl; cout<<"================================================ "<<endl; query(); break; case 4: { cout<<endl; for(int i=3;i>=1;i--) { cout<<i<<"秒后退出客户订票系统"<<endl<<endl; Sleep(1000); } system("cls"); cout<<endl<<"-* 期待您的再次使用,谢谢,再见*"<<endl<<endl; Sleep(2000); return 0; } default: cout<<endl<<"Wrong Input!"<<endl<<endl; for(int i=3;i>=1;i--) { cout<<i<<"秒后返回主界面"<<endl<<endl; Sleep(1000); } system("cls"); } break; case 2: char y[40]; cout<<endl<<"*进入后台管理系统*"<<endl<<endl; cout<<"========================================== "<<endl; cout<<"请输入密码: "<<endl; cin>>y; //读取密码 if(strcmp(y,f)==0) { system("cls"); int choice_admin; admin_menu a; choice_admin=a.me_nu(); switch(choice_admin) { case 1: input(); break; case 2: writetofile(); break; case 3: { for(int i=3;i>=1;i--) { cout<<i<<"秒后退出后台管理系统"<<endl<<endl; Sleep(1000); } return 0; } default: cout<<"wrong input!"<<endl; } } else { cout<<"输入密码错误!您没有操作权限!"<<endl<<endl; for(int i=3;i>=1;i--) { cout<<i<<"秒后返回主界面"<<endl<<endl; Sleep(1000); } system("cls"); } break; case 3: { for(int i=3;i>=1;i--) { cout<<i<<"秒后退出系统"<<endl<<endl; Sleep(1000); } return 0; } break; default: cout<<"wrong input!"<<endl<<endl<<"将要返回主菜单。"<<endl<<endl; for(int i=3;i>=1;i--) { cout<<i<<"秒后返回主菜单"<<endl<<endl; Sleep(1000); } Sleep(1000); system("cls"); } } return 0; } void input() { int count; cout<<"请输入您要录入的机票种数:"<<endl<<endl; cin>>count; for(int i=0;i<count;i++) { p
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服