C++航空客运订票系统
1.本课程设计的目的
(1)巩固和加深对数据结构基本知识的理解,提高综合运用知识的能力。
(2)、使学生掌握软件设计的基本内容和设计方法,并培养学生进行
规范化软件设计的能力
(3)、使学生掌握使用各种计算机资料和有关参考资料,提高学生进
行程序设计的基本能力
2.课程设计的任务及要求
1)基本要求:
(1)对系统进行功能模块分析、控制模块分析
(2)系统设计要能完成题目所要求的功能
(3)编程简练,可用,尽可能的使系统的功能更加完善和全面
(4)说明书、流程图要清楚;
(5)提高学生的论文写作能力。
(6)特别要求自己独立完成。
2)创新要求:
在基本要求达到后,可进行创新设计,如改善算法性能、友好的人机
界面。
3)课程设计论文编写要求
(1)要按照书稿的规格打印与写课程设计论文
(2)论文包括目录、绪论、正文、小结、参考文献、谢辞附录等(3)课程设计论文装订按学校的统一要求完成
目录
一、绪论--------------------------------------------------------------------4
二、需求分析---------------------------------------------------------------4
三、概要设计---------------------------------------------------------------4
四、详细设计---------------------------------------------------------------6
五、调试分析-------------------------------------------------------------25
六、测试结果-------------------------------------------------------------34
七、用户使用说明-------------------------------------------------------35
八、小结--------------------------------------------------------------------35
九、谢辞--------------------------------------------------------------------35
十、参考文献-------------------------------------------------------------35
十一、附录-------------------------------------------32
C++航空客运订票系统
一、绪论
该航空客运订票系统主要是通过链表算法设计来实现其各项功能,其业务活动包括:查询航线、客票预定和办理退票等业务,这些业务分别是通过链表的查找、插入和删除等操作来实现的。
二、需求分析
编制一个航空客运订票系统,要求有查询航线,客票订制,办理退票等业务;
1,每条航线设计的信息有:终点站名,航班号,飞机号,飞行周日(星期几),乘员定额,余票量,已订票的客户名单(包括姓名、订票量、舱位等级)以及等待替补的客户名单(包括姓名,所需票量);
2,作为示意系统,全部的数据可只放在内存中;
3,系统能实现的操作和功能如下:
<1>查询航线:根据旅客提出的终点站名输出下列信息:航班号,飞机号,星期几飞行;
<2>承办订票业务:根据客户提出的要求(航班号、订票数额)查询该航班信息,若尚有余票,则为顾客办理订票业务,输出座位号;若余票不够,则询问顾客是否愿意进入等待名单,若愿意,登记排队候补;
<3>承办退票业务:根据客户提供的情况(航班)为其办理退票业务,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其他排队候补的客户。
三、概要设计
从题目的基本要求可以看出,航线信息的储存、客户信息的储存、航线的查询、客票的预定、退票的办理业务等的操作,都类似于线性链表的建立、查找、插入、删除等的操作,所以我用了线性链表的算法设计来实现该系统的各项操作。
根据题目要求和实际情况可以将该程序的各项功能要求概括如下:
1、首先,定义三个线性链表,分别用来储存航线信息、已订票乘客的信息、因预定票额不够而成为替补乘客的信息。
2、其次,实现订票功能,若余票不够,则征求客户的同意后将其全部加入等待,即成为替补乘客,而不只是满足其中一部分的要求。
3、退票的操作原则和订票一样,只查看队头的人,若可以满足其全部要求则满足之,即全部退还机票,不只是退还其中的一个或几个。
4、为了便于查找信息,还赋予该系统一个显示功能,显示航线信息和乘客信息,其中,乘客信息又包括已订票的乘客信息和替补的乘客信息。
为实现上述功能,需要链表这个数据结构,其抽象数据类型设计如下:ADT List{ 数据对象:D={ai| ai ElemType,i=1,2,…,n,n≥0} 数据关系:R1={
ai-1, ai D ai-15、系统中子程序及功能要求:
ModelMenu(char *s[],int Item) //菜单模板函数,为各个菜单制作模板
MainMenu()//主菜单函数,显示主菜单
Continue()//是否继续函数,征求客户意见是否要继续程序
ExitSystem()//系统退出函数,征求客户意见是否要退出程序
prefix(char *Item) //操作提示函数,提示用户操作信息
Find_Line(PFlight L,char *key) //航线查找函数,根据用户需求,查找指定的航线信息
Line_Add()//航线添加函数,由用户向系统中添加航线信息
Empty_Flight()//航线是否为空函数,检查航线是否为空
Line_See()//航线查看函数,查看当前系统中的航线信息
Display_Reserve()//订票乘客信息
Display_Replace()//候补乘客信息
Sub1Menu()//航线信息管理函数,增设、查看航线信息
Sub2Menu()//订票办理函数
Sub3Menu()//退票办理函数
Sub4Menu()//乘客管理子菜单函数
6、函数的调用关系图:若图片无法显示请联系QQ3710167,本论文免费,转发请注明源于www.lwfree.cn
_______________________ ______
______ _______________
Line_Add Line_See Continue prefix Empty_Flight
Find_Line
Display_Reserve Display_Replace
四 详细设计
#include
#include
#include
#include
#include
#include
#include
#define MAX 50
typedef struct Replace //替补乘客信息
{
char Name[7]; //姓名
int Amount; //定票数
char Rank; //舱位等级
char Seat_No; //座位号
struct Replace *Next;
}Replace,*PReplace;
typedef struct Flight //航线信息
{
char Des_Name[10]; //终点站名
char Flight_No[6]; //航班号
char Plane_No[6]; //飞机号
char Week_Day; //飞行周日
int Customer_Amount; //乘员定额
int Free_Amount; //剩余票数
float Price[3]; //舱位等级的价格
Replace *ReplName; //该航班的候补乘客名单
Customer *CustName; //该航班的已定票乘客名单
struct Flight *Next; //指示下一航线结点
}Flight,*PFlight;
int Customer_Count=0; //所有航线的定票乘客总数
Flight *Head; //航线头指针
Flight *p2; //航线结点指针
Customer *Custp1[MAX]; //各条航线乘客结点指针
Replace *Replp1[MAX]; //各条航线候补结点指针
int IsEmpty=1; //是否有定票乘客
int IsReplace=1; //是否有候补乘客
C++航空客运订票系统
Customer *prior; //满足要求的定票乘客的前结点,以作删除操作
char ModelMenu(char *s[],int Item) //菜单模板函数
{若图片无法显示请联系QQ3710167,本论文免费,转发请注明源于www.lwfree.cn
int i;
char answer;
cout<<"\n\n";
cout<<"\t\t\t&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&"< cout<<"\t\t\t"< cout<<"\t\t\t&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&"< for(i=1;i- {
cout<<"\t\t\t"< if(i+1!=Item)
cout<<"\t\t\t"< }
cout<<"\t\t\t&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&"< cout<<"\t\t\t 请输入菜单项前的操作代码:";
cin>>answer;
return answer;
}
char MainMenu()//主菜单函数
{
char *MenuItem[6]={"&& 航空客运订票系统菜单 &&","&& [1]. 航 线 管 理 &&", "&& [2]. 订 票 办 理 &&","&& [3]. 退 票 办 理 &&","&& [4]. 乘 客 管 理 &&","&& [5]. 系 统 离 开 &&"};
return ModelMenu(MenuItem,6);
}
char Continue()//是否继续函数
{
int i;
char answer;
while(1)
{
cout<<"\t\t ";
for(i=0;i<15;i++)
cout<<"─";
cout<<"\n\t\t\t 是否继续(Y/N)?";
cin>>answer;
if(answer=='y'||answer=='Y') return 'y';
else if(answer=='n'||answer=='N') return 'n';
else
cout<<"\t\t\t 输入错误,请重新输入!"< }
}
int ExitSystem()//系统退出
{
char answer;
cout<<"\n\t\t\t 你确定是否真要离开系统吗(Y/N)?";
cin>>answer;
if(answer=='y'||answer=='Y') return 1;
else
return 0;
}
void prefix(char *Item) //操作提示函数
{
int i;
cout<<"\n\n\t\t\t 当前操作:"<- cout<<"\t\t ";
for(i=0;i<15;i++)
cout<<"─";
cout<}
//航线查找函数,Find_Line()为重载函数
int Find_Line(PFlight L,char *key)//引用调用
{
int flag=0; //该标志位0表示未找到相关信息,反之即找到
Flight *p1;
p1=L; //赋航线首地址
if(p1==p2) return flag; //首航线不作比较
while(p1!=p2&&p1!=NULL) //本航班号不纳入比较范围,否则会一直提示航线不唯一
{若图片无法显示请联系QQ3710167,本论文免费,转发请注明源于www.lwfree.cn
if(strcmp(p1->Flight_No,key)==0)
{
flag=1;
break;
}
p1=p1->Next;//指向下一航班结点
}
return flag;
}
int Find_Line(PFlight L,char *key,PFlight &p2,int &Flight_No)//引用调用
{
int flag=0; //该标志位0表示未找到相关信息,反之即找到
Flight *p1;
p1=L; //赋航线首结点
while(p1!=NULL)
{
if(strcmp(p1->Flight_No,key)==0)//不包括当前航线
{
flag=1;
p2=p1;
break;
}
p1=p1->Next; //指向下一航班结点
if(p1!=NULL) //遇结束符不作统计范围
Flight_No++;
}
return flag;
}
void Line_Add()//航线添加函数
{
Flight *p1; //建立临时航线结点
while(1)
{
if(Head==NULL)//航线为空
{
p1=p2=new Flight; //建立首个航线
Head=p2;
}
else
{
p1=new Flight; //建立航线结点
p2->Next=p1; //前一航线结点指向当前航班结点
p2=p1; //保留当前航班结点地址
}
prefix("航线增设");
cout<<"\t\t\t 请输入终点站名:";
cin>>p2->Des_Name;
while(1) //数据合法性检验
{
cout<<"\n\t\t\t 请输入航班号(唯一):";
cin>>p2->Flight_No;
if(Find_Line(Head,p2->Flight_No)) //存在航班号
cout<<"\n\t\t\t 输入的航班号不唯一!"< else
break;
}
cout<<"\n\t\t\t 请输入飞机号:";
cin>>p2->Plane_No;
getch();
}
else
break;
}
cout<<"\n\t\t\t 请输入乘员定额:";
cin>>p2->Customer_Amount;
cout<<"\n\t\t\t 请输入头等舱票价:";
cin>>p2->Price[0];
C++航空客运订票系统
cout<<"\n\t\t\t 请输入普通舱票价:";
cin>>p2->Price[1];
cout<<"\n\t\t\t 请输入经济舱票价:";
cin>>p2->Price[2];
p2->Free_Amount=p2->Customer_Amount; //剩余票数与乘员定额相同
p2->CustName=NULL; //该航线定票乘客头指针为空
p2->ReplName=NULL; //初始候补名单为空
if(Continue()=='n')
{
p2->Next=NULL; //航线的下一结点为空
return;
}
}
}若图片无法显示请联系QQ3710167,本论文免费,转发请注明源于www.lwfree.cn
int Empty_Flight()//航线是否为空函数
{
if(Head==NULL)
{
cout<<"\n\n\n\n\n\n\n\n\t\t 对不起,没有相关航线。按任意键返回..."< getch();
return 1;
}
else
return 0;
}
void Line_See()//航线查看函数
{
int Day;
Flight *p1;
p1=Head;
char *Week_Day[]={"星期一","星期二","星期三","星期四","星期五","星期六","星期日"};
if(Empty_Flight()) //航班线为空
return;
prefix("航班查看");
while(p1!=NULL)
{
Day=p1->Week_Day-'0'-1; //数字转换相应星期数
cout<<"\n\t\t\t 终点站名:"<Des_Name< cout<<"\n\t\t\t 航 班 号:"<Flight_No< cout<<"\n\t\t\t 飞 机 号:"<Plane_No< cout<<"\n\t\t\t 飞行周日:"< cout<<"\n\t\t\t 乘员定额:"<Customer_Amount< cout<<"\n\t\t\t 剩余票数:"<Free_Amount< cout<<"\n\t\t\t 票 价:头舱 "<Price[0]< cout<<"\n\t\t\t 普舱 "<Price[1]< cout<<"\n\t\t\t 经舱 "<Price[2]< p1=p1->Next;
if(p1!=NULL)
cout<<"继续查看航班信息!"< }
cout<<" 航班信息查看完毕!"< cout<<"\n\t\t\t 按任意键返回子菜单..."< getch();
}
void Sub1Menu()
{
char *MenuItem[]={"&& 航空客运航线管理子菜单 &&","& &[1]. 航 线增 设 & &","& &[2]. 航 线 查 看 & &","& &[3]. 返 回主 菜 单 & &"};
while(1)
switch(ModelMenu(MenuItem,4))
{
case '1':{Line_Add();break;}
case '2':{Line_See();break;}
case '3':{return;}
}
}
void Sub2Menu()//订票办理函数
{
int Ticket_Count,Seat_No,i,flag=0;
int Flight_No=0; //记录满足条件的航线的定票结点
Flight *p1; //记下满足条件的航线结点地址
Customer *p2; //临时性定票乘员结点
Replace *p3; //临时性候补乘员结点
char answer[7]; //用户输入的航班数据
char temp;
int tag=0; //候补乘客标志位
int Amount;
int IsRepl=0; //是否执行候补操作标志位
if(Empty_Flight()) //航班线为空
return;
while(1)
{
prefix("订票办理");
flag=0; //标志位清零以重新作出判断
Flight_No=0;
tag=0;
cout<<"\n\t\t\t 请输入航班号:";
cin>>answer;
if(Find_Line(Head,answer,p1,Flight_No)) //调用航线查找函数,若存在则进行以下操作
{
while(1) //数据合法性检验
{
cout<<"\n\t\t\t 请输入定票数:";
cin>>Ticket_Count;
if(Ticket_Count==0)
{
cout<<"\n\t\t\t请输入大于零的数,按任意键继续输入."< getch();
}
else
break;
}
if(p1->Free_Amount>=Ticket_Count)
{
Customer_Count++; //定票乘客总数增1
flag=1; //表明进入了订票实际操作
IsRepl=1; //定票量满足,无需进入候补操作
Amount=p1->Free_Amount; //记录剩余票数
if(p1->CustName==NULL)//首个定票乘客,并记录相关属性
{
Custp1[Flight_No]=p2=new Customer; //建立该航线的首位乘客结点
p1->CustName=Custp1[Flight_No];
}
else //建立该航线的后续乘客结点
{
p2=new Customer;
cin>>Custp1[Flight_No]->Rank;
if(!(Custp1[Flight_No]->Rank>='1'&&Custp1[Flight_No]->Rank<='3'))
{
cout<<"\n\t\t输入出错,请输入1-3之间的数,按任意键继续输入."< getch();
}
else
break;
}
C++航空客运订票系统
cout<<"\n\t\t\t 您的座位号为:"< if(Ticket_Count<10) //为显示规整,作相应处理
cout<<"\n\t\t\t\t";
else若图片无法显示请联系QQ3710167,本论文免费,转发请注明源于www.lwfree.cn
cout<<"\n\t\t\t";
for(i=1;i<=Ticket_Count;i++) //打印座位号
{
cout< if(i%10==0)
cout<<"\n\t\t\t";
}
cout< }//满足定票数
else if(p1->Free_Amount==0)
{
cout<<"\n\t\t 对不起,该航线的票已经全部售完!"< IsRepl=0;
}
else
{
cout<<"\n\t\t 对不起,该航线的剩余票额数少于你的订票数。"< IsRepl=0;
}
if(!IsRepl)
{
cout<<"\n\t\t 是否列入该航线候补乘客名单(Y/N)?";
cin>>temp;
if(temp=='y'||temp=='Y')//以下为候补操作
{
if(p1->ReplName==NULL)
{
Replp1[Flight_No]=p3=new Replace; //建立该航线的首位候补乘客结点
p1->ReplName=Replp1[Flight_No];
}
else
{
p3=new Replace;
Replp1[Flight_No]->Next=p3;
Replp1[Flight_No]=p3;
}
IsReplace=0; //候补乘客不为空
tag=1; //已选择列入候补乘客名单
Replp1[Flight_No]->Amount=Ticket_Count;
cout<<"\n\t\t\t 请输入你的姓名:";
cin>>Replp1[Flight_No]->Name;
Replp1[Flight_No]->Seat_No=Seat_No; //候补乘客的座位
Replp1[Flight_No]->Amount=Ticket_Count; //候补乘客的订票数
while(1) //数据合法性检验
{
cout<<"\n\t\t\t 请输入舱位等级(1-3):";
cin>>Replp1[Flight_No]->Rank;
if(!(Replp1[Flight_No]->Rank>='1'&&Replp1[Flight_No]->Rank<='3'))
{
cout<<"\n\t\t输入出错,请输入1-3之间的数,按任意键继续输入."< getch();
}
else
break;
}
cout<<"\n\t\t\t 该乘客暂时无座位!"< }//进入候补名单
}//票数满足
}//航线存在
else
cout<<"\n\t\t 对不起,没有该次航班,按任意继续操作."< if(flag) //此处不作处理,则会地址溢出
Custp1[Flight_No]->Next=NULL;//末位定票乘客的指针置空
if(tag)
{
Replp1[Flight_No]->Next=NULL;//末位候补乘客的指针置空
cout<<"\n\t\t 该乘客已成功列入该航线的候补名单."< }
if(Continue()=='n')
return;
}//while
}
void Display_Reserve()//订票乘客信息
{
Flight *p1;
Customer *p2;
p1=Head;
int flag=0;
if(Empty_Flight())return;
prefix("定票乘客名单");
if(IsEmpty)
{
cout<<"\n\n\n\n\t\t\t对不起,系统中无定票的乘客。"< getch();
return;
}
while(p1!=NULL)
{
if(p1->CustName!=NULL)
{
p2=p1->CustName;
while(p2!=NULL)
{
cout<<"\n\t\t\t 姓 名:"<Name< cout<<"\n\t\t\t 航 班 号:"<Flight_No< cout<<"\n\t\t\t 飞 机 号:"<Plane_No< cout<<"\n\t\t\t 订 票 量:"<Amount< cout<<"\n\t\t\t 终 点 站:"<Des_Name< cout<<"\n\t\t\t 舱位等级:"<Rank< if(p2->Amount>1)
cout< else
cout<Seat_No< p2=p2->Next;
if(p2!=NULL||p1->Next!=NULL)
cout<<"\t 继续"< }
}
p1=p1->Next;
}
cout<<"\t 结束"< cout<<"\n\t\t\t 按任意键返回子菜单..."< getch();
}
getch();
return;
}
while(p1!=NULL)
{
if(p1->ReplName!=NULL)
{
p2=p1->ReplName;
while(p2!=NULL)
{
C++航空客运订票系统
cout<<"\n\t\t\t 姓 名 :"<Name< cout<<"\n\t\t\t 航 班 号:"<Flight_No< cout<<"\n\t\t\t 飞 机 号:"<Plane_No< cout<<"\n\t\t\t 订 票 量:"<Amount< cout<<"\n\t\t\t 终 点 站:"<Des_Name< cout<<"\n\t\t\t 舱位等级:"<Rank< if(p2->Amount>1)
cout< else
cout< p2=p2->Next;
if(p2!=NULL||p1->Next!=NULL) cout<<"\t "< }
}
p1=p1->Next;
}
cout<<"\t "< cout<<"\n\t\t\t 按任意键返回子菜单..."< getch();
}
void Sub3Menu()//退票办理函数
{
int Flight_No=0,flag=0; //记录满足条件的航线的定票结点
Flight *p1; //记下满足条件的航线结点地址
Customer *p2,*p4; //临时性定票乘员结点
Replace *p3,*p5; //临时性候补乘员结点
char answer[7],name[7]; //用户输入的航班数据
int tag=0; //若第二乘客满足条件,则它的首地址会发生冲突,注意此处
int Seat_No; //记录座位号
if(Empty_Flight()) //航班线为空
return;
prefix("退票办理");
if(IsEmpty)
{
cout<<"\n\n\t\t 对不起,系统中暂时无定票乘客..."< getch();
return;
}
while(1)
{
flag=0;
tag=0;
Flight_No=0;
prefix("退票办理");
cout<<"\n\t\t\t 请输入航班号:";
cin>>answer;
if(Find_Line(Head,answer,p1,Flight_No)) //航线存在
{
p2=p1->CustName; //指向该航线的乘客名单的首地址
cout<<"\n\t\t\t 请输入您的姓名:";
cin>>name;
if(p2==NULL) //该航线无定票乘客
{
cout<<"\n\t\t 很抱歉,该航线暂时无人定票,无法进行退票操作."< if(Continue()=='n')//是否继续操作
return;
else
continue; //提前结束本次循环,重新进行退票处理
}
else
while(p2!=NULL)//查找有无此乘客名
{
if(strcmp(p2->Name,name)==0)//此外括号不能省略,否则功能会转变
{
if(p2==p1->CustName) //若为首位乘客满足
{
prior=p1->CustName; //记录指针
Seat_No=p2->Seat_No;
flag=1;
break;
}
}
else if(p2->Next!=NULL)//记录满足航线的的前结点地址
{
if(strcmp(p2->Next->Name,name)==0)
{
tag=1; //特别注意此处
prior=p2; //记录满足定乘客的前一地址,以作删除操作
Seat_No=p2->Next->Seat_No;
flag=1;
break;
}
}
p2=p2->Next; //指向下一乘客结点
}//while
if(!flag)
cout<<"\n\t\t 很抱歉,该航线无此乘客,请查证后再操作..."< }//存在该航线
else
cout<<"\n\t\t 对不起,没有该次航班,按任意继续操作."< if(flag)
{
if(prior==p1->CustName&&!tag) //首结点满足条件且一个乘客,则该航线定票乘客置空
{
if(prior->Next==NULL) //仅一乘客,头指针置空
{
p1->Free_Amount+=prior->Amount;
p1->CustName=NULL;
}
else
{
p1->Free_Amount+=prior->Next->Amount;
p1->CustName=prior->Next; //指向下一乘客结点
}
}
else
{
p1->Free_Amount+=prior->Next->Amount;
if(Customer_Count==0)
IsEmpty=1;
}
if(flag)//存在退票操作
{
p3=p1->ReplName;
while(p3!=NULL)
{
if(p3->Amount<=p1->Free_Amount)//候补乘客的定票数小于或等于剩余票数
{
cout<<"\n\t\t 候补乘员"<Name<<"已经列入定票乘客名单中...\n"< p4=Custp1[Flight_No]->Next=new Customer;
IsReplace=1;
if(p1->ReplName==p3)
{
if(p1->ReplName->Next==NULL)
p1->ReplName=NULL; //删除
else
C++航空客运订票系统
p1->ReplName=p3->Next;
}
else
p5->Next=p3->Next->Next;
break;
}
if(p3->Next!=NULL)
if(p3->Next->Amount<=p1->Free_Amount)
p5=p3;
p3=p3->Next; //指向下一候补乘客结点
}
cout<<"\n\t\t 退票办理已经操作完毕,按任意键返回菜单..."< getch();
return;
}//存在此乘客
if(Continue()=='n')
return;
}//while
}
void Sub4Menu()//乘客管理子菜单函数
{
char *MenuItem[]={"&& 航空客运乘客管理子菜单 &&","& & [1]. 订票乘客信息 & &","& & [2]. 候补乘客信息 & &", "& & [3]. 返回系统菜单 & &"};
while(1)
switch(ModelMenu(MenuItem,4))
{
case '1':{Display_Reserve();break;}
case '2':{Display_Replace();break;}
case '3':{return;}
}
}
void main()//下面为主程序画面函数
{
Head=NULL;
while(1)
{
switch(MainMenu())
{
case '1':{Sub1Menu();break;} //航线管理
case '2':{Sub2Menu();break;} //订票办理
case '3':{Sub3Menu();break;} //退票办理
case '4':{Sub4Menu();break;} //乘客管理
case '5':{if(ExitSystem()) return;break;} //退出系统
}
}
}
五、调试分析
在调试该程序的过程中,遇到了很多困难:
1、多处出现未定义字符,这都是粗心大意所至;
2、另外,在菜单模板函数ModelMenu( )中,其中的for循环语句出错,导致了在显示主菜单和各个子菜单时,菜单内容无法正常显示,经过多次调试,得知是在“cout<<"\t\t\t"<
六、测试结果
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&& 航空客运订票系统菜单 &&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&& [1]. 航 线 管 理 &&
&& [2]. 订 票 办 理 &&
&& [3]. 退 票 办 理 &&
&& [4]. 乘 客 管 理 &&
&& [5]. 系 统 离 开 &&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
请输入菜单项前的操作代码:1
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&& 航空客运航线管理子菜单 &&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
& & [1]. 航 线 增 设 & &
& & [2]. 航 线 查 看 & &
& & [3]. 返 回 主 菜 单 & &
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
请输入菜单项前的操作代码:2
对不起,没有相关航线。按任意键返回...
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&& 航空客运航线管理子菜单 &&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
& & [1]. 航 线 增 设 & &
& & [2]. 航 线 查 看 & &
& & [3]. 返 回 主 菜 单 & &
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
请输入菜单项前的操作代码:1
当前操作:航线增设
───────────────
请输入终点站名:beijing
请输入航班号(唯一):001
请输入飞机号:1
请输入飞行周日(1-7):1
请输入乘员定额:100
请输入头等舱票价:960
请输入普通舱票价:860
请输入经济舱票价:880
───────────────
是否继续(Y/N)?y
当前操作:航线增设
───────────────
请输入终点站名:kunming
请输入航班号(唯一):002
请输入飞机号:2
请输入飞行周日(1-7):3
请输入乘员定额:100
请输入头等舱票价:900
请输入普通舱票价:800
请输入经济舱票价:850
───────────────
是否继续(Y/N)?y
当前操作:航线增设
───────────────
请输入终点站名:wuhang
请输入航班号(唯一):003
请输入飞机号:3
请输入飞行周日(1-7):2
请输入乘员定额:100
请输入头等舱票价:800
请输入普通舱票价:600
请输入经济舱票价:700
───────────────
是否继续(Y/N)?n
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&& 航空客运航线管理子菜单 &&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
& & [1]. 航 线 增 设 & &
& & [2]. 航 线 查 看 & &
& & [3]. 返 回 主 菜 单 & &
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
请输入菜单项前的操作代码:2
当前操作:航班查看
───────────────
终点站名:beijing
航 班 号:001
飞 机 号:1
飞行周日:星期一
乘员定额:100
剩余票数:100
票 价:头舱 960
C++航空客运订票系统
普舱 860
经舱 880
继续查看航班信息!
终点站名:kunming
航 班 号:002
飞 机 号:2
飞行周日:星期三
乘员定额:100
剩余票数:100
票 价:头舱 900
普舱 800
经舱 850
继续查看航班信息!
终点站名:wuhang
航 班 号:003
飞 机 号:3
飞行周日:星期二
乘员定额:100
剩余票数:100
票 价:头舱 800
普舱 600
经舱 700
航班信息查看完毕!
按任意键返回子菜单...
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&& 航空客运航线管理子菜单 &&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
& & [1]. 航 线 增 设 & &
& & [2]. 航 线 查 看 & &
& & [3]. 返 回 主 菜 单 & &
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
请输入菜单项前的操作代码::3
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&& 航空客运订票系统菜单 &&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&& [1]. 航 线 管 理 &&
&& [2]. 订 票 办 理 &&
&& [3]. 退 票 办 理 &&
&& [4]. 乘 客 管 理 &&
&& [5]. 系 统 离 开 &&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
请输入菜单项前的操作代码:2
当前操作:订票办理
───────────────
请输入航班号:007
对不起,没有该次航班,按任意继续操作.
───────────────
是否继续(Y/N)?y
当前操作:订票办理
───────────────
请输入航班号:001
请输入定票数:10
请输入你的姓名:wang
请输入舱位等级(1-3):1
您的座位号为:
1 2 3 4 5 6 7 8 9 10
───────────────
是否继续(Y/N)?y
当前操作:订票办理
───────────────
请输入航班号:002
请输入定票数:110
对不起,该航线的剩余票额数少于你的订票数。
是否列入该航线候补乘客名单(Y/N)?y
请输入你的姓名:yang
请输入舱位等级(1-3):2
该乘客暂时无座位!
该乘客已成功列入该航线的候补名单.
───────────────
是否继续(Y/N)?y
当前操作:订票办理
───────────────
请输入航班号:001
请输入定票数:1
请输入你的姓名:zhang
请输入舱位等级(1-3):2
您的座位号为:
11
───────────────
是否继续(Y/N)?y
当前操作:订票办理
───────────────
请输入航班号:003
请输入定票数:50
请输入你的姓名:li
请输入舱位等级(1-3):3
您的座位号为:
1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30
31 32 33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48 49 50
───────────────
是否继续(Y/N)?n
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&& 航空客运订票系统菜单 &&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&& [1]. 航 线 管 理 &&
&& [2]. 订 票 办 理 &&
&& [3]. 退 票 办 理 &&
&& [4]. 乘 客 管 理 &&
&& [5]. 系 统 离 开 &&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
请输入菜单项前的操作代码:3
当前操作:退票办理
───────────────
请输入航班号:003
请输入您的姓名:li
退票办理已经操作完毕,按任意键返回菜单...
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&& 航空客运订票系统菜单 &&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&& [1]. 航 线 管 理 &&
&& [2]. 订 票 办 理 &&
&& [3]. 退 票 办 理 &&
&& [4]. 乘 客 管 理 &&
&& [5]. 系 统 离 开 &&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
请输入菜单项前的操作代码:4
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&& 航空客运乘客管理子菜单 &&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
& & [1]. 订票乘客信息 & &
& & [2]. 候补乘客信息 & &
& & [3]. 返回系统菜单 & &
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
请输入菜单项前的操作代码:1
当前操作:定票乘客名单
───────────────
姓 名:wang
航 班 号:001
C++航空客运订票系统
飞 机 号:1
订 票 量:10
终 点 站:beijing
舱位等级:1
多票
继续
姓 名:zhang
航 班 号:001
飞 机 号:1
订 票 量:1
终 点 站:beijing
舱位等级:2
11
继续
结束
按任意键返回子菜单...
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&& 航空客运乘客管理子菜单 &&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
& & [1]. 订票乘客信息 & &
& & [2]. 候补乘客信息 & &
& & [3]. 返回系统菜单 & &
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
请输入菜单项前的操作代码:2
当前操作:候补乘客名单
─────────────── 姓 名:yang
航 班 号:002
飞 机 号:2
订 票 量:110
终 点 站:kunming
舱位等级:2
多票
按任意键返回子菜单...
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&& 航空客运乘客管理子菜单 &&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
& & [1]. 订票乘客信息 & &
& & [2]. 候补乘客信息 & &
& & [3]. 返回系统菜单 & &
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
请输入菜单项前的操作代码:3
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&& 航空客运订票系统菜单 &&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&& [1]. 航 线 管 理 &&
&& [2]. 订 票 办 理 &&
&& [3]. 退 票 办 理 &&
&& [4]. 乘 客 管 理 &&
&& [5]. 系 统 离 开 &&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
请输入菜单项前的操作代码:5
你确定是否真要离开系统吗(Y/N)?y
Press any key to continue
七、用户使用说明
1、本程序的运行环境为DOS操作系统;
2、进入程序后即显示航空客运订票系统菜单:
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&& 航空客运订票系统菜单 &&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&& [1]. 航 线 管 理 &&
&& [2]. 订 票 办 理 &&
&& [3]. 退 票 办 理 &&
&& [4]. 乘 客 管 理 &&
&& [5]. 系 统 离 开 &&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
请输入菜单项前的操作代码:
用户可根据菜单提示的信息,选择自己所需的业务代码,以回车结束代码输入,并进入执行相应操作的界面,如果所选代码不存在,则显示信息:“输入错误,请重新输入!”直至输入正确为止。
3、在进入了用户需要办理的业务界面之后,根据提示信息,选择所需的操作,输入选项代码或其他输入信息,以回车结束输入,并进入下一执行界面。若选择操作[1],则进入了航空客运航线管理子菜单:
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&& 航空客运航线管理子菜单 &&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
& & [1]. 航 线 增 设 & &
& & [2]. 航 线 查 看 & &
& & [3]. 返 回 主 菜 单 & &
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
请输入菜单项前的操作代码:
又根据需要选择相应的操作代码执行操作,如果所选代码不存在,则显示信息:“输入错误,请重新输入!”直至输入正确为止。
4、当执行完用户所需的操作后,系统将会输出提示信息:“按任意键返回子菜单...”,若用户想离开当前界面,则选择返回或离开操作,系统将会输出提示信息:“你确定是否真要离开系统吗(Y/N)?”,用户可通过输入Y或N来决定是否离开。
5、具体操作可参看“测试结果”的演示。
八、小结
通过本次课程设计,更深入的了解了数据结构的基本操作,掌握了其中的一些基本算法,并且能用所学的这些基本知识与技能解决简单的程序设计问题;在该程序中,就是应用了线性表的插入、查找、删除等的基本操作。在调试程序的过程中,也检查出了我在知识上的多处漏洞,这对我来说是一个很大的收获,正如老师所说的那样,在调试程序的时候,错误越多越好,这样,就能看到自己知识上的更多漏斗,在调试的过程中,就弥补了这些漏洞,同时也学会了解决问题的方法,每调试除了一个错误,我就积取了一点经验,在以后编写程序的时候,再遇到类似问题,就可以
C++航空客运订票系统
避免或是很轻松地解决了。
九、谢辞
本程序虽然基本能够实现航空客运订票中的各项操作,但还有很多问题,比如健壮性太差,输入预期外的字符后会产生意想不到的问题,还有,当预定票额超出剩余票额时,该顾客就无法定一张票,而被全部放入替补乘客的行列,此处有些不符合常理,还有待完善。
十、参考文献
《数据结构习题解析》 殷人昆编著 清华大学出版社
《数据结构课程设计》 苏仕华 编著 机械工业出版社
十一、附录:测试数据
航班信息
终点
站名
航班
号
飞机
号
飞行
周日
乘员
定额
票价
头舱
普舱
经舱
beijing
001
1
星期一
100
960
860
880
kunming
002
2
星期三
100
900
800
850
wuhang
003
3
星期二
100
800
600
700
定票乘客名单
姓名
航班号
飞机号
订票量
终点站
舱位等级
wang
001
1
10
beijing
1
zhang
001
1
1
beijing
2
候补乘客名单
姓名
航班号
飞机号
订票量
终点站
舱位等级
yang
002
2
110
kunming
2