航空客运订票系统VC毕业设计论文.docx
- 文档编号:17787363
- 上传时间:2023-08-03
- 格式:DOCX
- 页数:19
- 大小:79.89KB
航空客运订票系统VC毕业设计论文.docx
《航空客运订票系统VC毕业设计论文.docx》由会员分享,可在线阅读,更多相关《航空客运订票系统VC毕业设计论文.docx(19页珍藏版)》请在冰点文库上搜索。
航空客运订票系统VC毕业设计论文
航空客运订票系统—VC毕业设计(论文)
航空客运订票系统1问题描述
航空客运订票的业务活动包括:
查询航线、客票预订和办理退票等。
试设计一个航空客运订票系统,以使上述业务可以借助计算机来完成。
1.1每条航线所涉及的信息有:
终点站名、航班号、飞机号、飞行周日(星期几)、乘员定额、余票量、已订票的客户名单(包括姓名、订票量、舱位等级1,2或3)以及等候替补的客户名单(包括姓名、所需票量)
1.2作为示意系统,全部数据可以只放在内存中
1.3系统能实现的操作和功能如下:
1.3.1查询航线:
根据旅客提出的终点站名输出下列信息:
航班号、飞机号、星期几飞行,最近一天航班的日期和余票额
1.3.2承办订票业务:
根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若尚有余票,则为客户办理订票手续,输出座位号;若已满员或余票额少于订票额,则需重新询问客户要求。
若需要,可登记排队候补1.3.3承办退票业务:
根据客户提供的情况(日期、航班),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其他排队候补的客户2概要设计
2.1存储结构设计
typedefstructAl_Custom//已订票客户
{
charname[15];//姓名
intcount;//订票量
intlevel;//舱位等级
Al_Custom*next;//下一节点指针
}Al_Custom,*Al_CustomLink;
typedefstructWait_Custom//等候替补的客户
{
charname[15];//姓名
intcount;//所需票量
Wait_Custom*next;//下一节点指针}Wait_Custom;
typedefstructWait_Queue//等待队列{
Wait_Custom*front;//队列头指针
Wait_Custom*rear;//尾指针}Wait_Queue;
typedefstructFlight//航线
{
charterminus[15];//终点站名
charflight_no[10];//航班号
charplane_no[10];//飞机号
intweek;//飞行周日
intcount;//乘客定额
intrest;//余票量
Al_CustomLinkAl_link;//指向成员名单链表的头指针
Wait_Queuewait_queue;//等待替补队列}Flight;
2.2主要算法设计
2.2.1主程序模块:
voidmain()
{
初始化;
do{
接受命令;
处理命令;
}while(命令!
="退出");
}
2.2.2查询航线模块——实现查询功能voidfindFlight(){
提示输入要查询航线的终点站名;
如果存在该航线,则输出该航线信息;
否则提示不存在该航线;
}
2.2.3承办订票业务模块——实现订票功能voiddingpiao()
{
提示输入航班号和订票数;
若不存在该航班号,则提示不存在该航线;
否则{
如果有余票,则办理业务;
否则提示没有足够的余票,询问是否候补;
若是,则排队候补;
}
}
2.2.4承办退票业务模块——实现退票功能voidtuipiao()
{
提示输入航班号和飞行周日;
确认航班号和飞行周日都存在,并且客户有订票,
则{执行退票;
为排队候补的客户办理订票业务;
}
否则{
提示有误
}
}
2.3测试用例设计
2.3.1航线3条:
1001hp001shanghai250
1002hp002beijing550
1003hp003guangzhou750
2.3.2查询航线:
shanghai
2.3.3承办订票业务:
航班号1001数额30姓名chengangjie舱位等级22.3.4承办订票业务:
航班号1001数额23姓名zhenxi舱位等级
3
2.3.5承办退票业务:
姓名chengangjie航班号1001飞行周日22.3.6查询航线:
终点站名:
shanghai
3调试分析
3.1本次的设计比较困难,需要实现较多的功能,所以在调试过程中不太顺利,主要是指针的修改。
经过反复调试以后才得以解决。
3.2本程序航线采用数组的存储结构,每条航线包含8个域,其中乘员名单域为指向乘员名单链表的头指针,等候替补的客户名单域为分别指向对头和对尾的指针。
3.3订票函数是在退票业务模块中使用
4经验和体会
通过这次的程序设计,进一步理解了链表和队列结构的实现和应用。
尤其需要注意的是:
对于指针的修改要仔细,否则会发生意想不到的结果。
5源程序清单和运行结果
5.1程序清单
#include
#include
#include
typedefstructAl_Custom//已订票客户{
charname[15];//姓名
intcount;//订票量
intlevel;//舱位等级
Al_Custom*next;//下一节点指针}Al_Custom,*Al_CustomLink;
typedefstructWait_Custom//等候替补的客户{
charname[15];//姓名
intcount;//所需票量
Wait_Custom*next;//下一节点指针}Wait_Custom;
typedefstructWait_Queue//等待队列{
Wait_Custom*front;//队列头指针
Wait_Custom*rear;//尾指针
}Wait_Queue;
typedefstructFlight//航线
{
charterminus[15];//终点站名
charflight_no[10];//航班号
charplane_no[10];//飞机号
intweek;//飞行周日
intcount;//乘客定额
intrest;//余票量
Al_CustomLinkAl_link;//指向成员名单链表的头指针
Wait_Queuewait_queue;//等待替补队列
}Flight;
voidCustom_init(Al_CustomLink&L){
L=newAl_Custom;
L->next=0;
}
voidCustom_insert(Al_CustomLink&L,Al_Custom&custom)
{
Al_Custom*p=L,*newnode=newAl_Custom;
memcpy((void*)newnode,&custom,sizeof(Al_Custom));
newnode->next=p->next;
p->next=newnode;
}
voidcopyCustomLink(Al_CustomLink&dest,Al_CustomLink&source)//复制已订票客户链表
{
Al_CustomLinkp=source;
Al_CustomLinkq;
Al_Custom*pnew;
Custom_init(dest);
q=dest;
while(p->next)
{
pnew=newAl_Custom;
memcpy(pnew,p->next,sizeof(Al_Custom));
pnew->next=0;
q->next=pnew;
q=pnew;
p=p->next;
}
}
voidWaiter_init(Wait_Queue&Q){
Q.front=Q.rear=newWait_Custom;
Q.front->next=0;
}
voidWaiter_En(Wait_Queue&Q,Wait_Custom&custom)
{
Wait_Custom*newnode=newWait_Custom;
memcpy(newnode,&custom,sizeof(Wait_Custom));
newnode->next=0;
Q.rear->next=newnode;
Q.rear=newnode;
}
boolWaiter_De(Wait_Queue&Q,Wait_Custom&custom)
{
if(Q.rear==Q.front)
returnfalse;
memcpy(&custom,Q.front,sizeof(Wait_Custom));
Wait_Custom*p=Q.front->next;
Q.front->next=p->next;
if(Q.rear!
=Q.front)
Q.rear=Q.front;
deletep;
custom.next=0;
returntrue;
}
voidcopyWait_Queue(Wait_Queue&dest,Wait_Queue&source)//复制等待队列
{
Wait_Custom*p=source.front;
Waiter_init(dest);
while(p->next)
{
Waiter_En(dest,*p);
p=p->next;
}
}
intflight_no;//航线数量
Flightflight[FLIGHT_NUM];//航线数组
voidinitFlight(Flight&f)//初始化一条航线
{
charch=0;
strncpy((char*)&f,&ch,sizeof(Flight));
Custom_init(f.Al_link);
Waiter_init(f.wait_queue);}
voidinitFlight()//初始化航线数组
{
flight_no=0;
charch=0;
strncpy((char*)flight,&ch,FLIGHT_NUM*sizeof(Flight));
for(inti=0;i { Custom_init(flight[i].Al_link); Waiter_init(flight[i].wait_queue); } } voidinsertFlight(Flight&f)//按终点站名有序插入航线到航线数组{ inti=-1; while(i+1 { i++; } for(intj=flight_no-1;j>=i+1;j--) { memcpy((void*)(&(flight[j+1])),(void*)(&(flight[j])),sizeof(Flight)); } memcpy((void*)(&(flight[i+1])),(void*)(&f),sizeof(Flight)); Custom_init(flight[i+1].Al_link); Waiter_init(flight[i+1].wait_queue); copyCustomLink(flight[i+1].Al_link,f.Al_link); copyWait_Queue(flight[i+1].wait_queue,f.wait_queue); flight_no++; } voidinit() { intm; cout<<"请输入航线条数: "; cin>>m; for(inti=1;i<=m;i++) { Flightf; initFlight(f); cout<<"输入第"< "< cout<<"航班号: "; cin>>f.flight_no; cout<<"飞机号: "; cin>>f.plane_no; cout<<"终点站名: "; cin>>f.terminus; cout<<"飞行周日: "; cin>>f.week; cout<<"成员定额: "; cin>>f.count; f.rest=f.count; insertFlight(f); printf("\n"); } } intfindbyname(charterminus[15])//根据终点站名查找{ for(inti=0;i { if(strcmp(flight[i].terminus,terminus)==0) { returni; } } return-1; } intfindbyno(charno[10])//根据航班号查找{ for(inti=0;i { if(strcmp(flight[i].flight_no,no)==0) { returni; } } return-1; } voidfindFlight()//查询航线子模块 { charterminus[15]; cout<<"请输入要查询航线的终点站号: "; cin>>terminus; intindex=findbyname(terminus); if(index==-1) { printf("该航线不存在! \n"); return; } cout< cout< < < < voiddingpiao(intindex) { Wait_Custom*p=flight[index].wait_queue.front; while(p! =flight[index].wait_queue.rear) { if(p->next->count<=flight[index].count) { cout<<"为"< Al_Custom*pnew=newAl_Custom; pnew->count=p->next->count; flight[index].rest-=p->next->count; strcpy(pnew->name,p->next->name); do{ cout<<"请"< "; cin>>pnew->level; }while(pnew->level<1||pnew->level>3); pnew->next=flight[index].Al_link->next; flight[index].Al_link->next=pnew; Wait_Custom*q=p->next; p->next=q->next; if(flight[index].wait_queue.rear==q) flight[index].wait_queue.rear=p; deleteq; } } } voiddingpiao()//承办订票业务子模块 { charno[10];//航班号 intcount;//订票量 cout<<"请输入航班号和订票数额: "; cin>>no>>count; intindex=findbyno(no); if(index==-1) { cout<<"该航线不存在"< return; } if(flight[index].rest>=count)//尚有余票 { Al_Custom*pnew=newAl_Custom; cout<<"请输入您的姓名: "; cin>>pnew->name; cout<<"请输入您要订的舱位等级: "; cin>>pnew->level; pnew->count=count; pnew->next=0; flight[index].rest-=count; pnew->next=flight[index].Al_link->next; flight[index].Al_link->next=pnew; } else//没有余票 { cout<<"该航班的余票额不能满足您的要求,是否排队候补(y/n): "; cout.flush(); charselect; do{ select=getch(); }while(select! ='y'&&select! ='n'); if(select=='y')//排队候补 { Wait_Custom*pnew=newWait_Custom; cout< cout<<"请输入您的姓名: "; cin>>pnew->name; pnew->count=count; pnew->next=0; flight[index].wait_queue.rear->next=pnew; flight[index].wait_queue.rear=pnew; cout< } else { } } } voidtuipiao()//承办退票业务子模块 { cout<<"请输入您的姓名: "; charname[15]; cin>>name; cout<<"请输入你要退票的航班号与飞行周日: "; intweek; charno[10]; cin>>no>>week; boolisfind=false; for(intindex=0;index { if(flight[index].week==week&&strcmp(flight[index].flight_no,no)==0) { Al_Custom*p=flight[index].Al_link; while(p&&p->next) { if(strcmp(p->next->name,name)==0) { isfind=true; Al_Custom*q=p->next; p->next=q->next; { flight[index].rest+=q->count; cout< dingpiao(index);//为第index条航线排队等候的客户办理 订票手续 } deleteq; } p=p->next; } } } if(! isfind) { cout<<"您没有订该天该航班的票! "< return; } cout<<"退票成功! "< } voidwelcome() { cout<<"选择操作: "< cout<<"1.查询航线"< cout<<"2.承办订票业务"< cout<<"3.承办退票业务"< cout<<"4.退出"< voidmain() { initFlight(); init(); charch; do{ welcome(); do{ ch=getch(); }while(ch<'1'||ch>'4'); switch(ch) { case'1': findFlight(); break; case'2': dingpiao(); break; case'3': tuipiao(); break; case'4': break; } }while(ch! ='4'); } 5.2运行结果: 5.2.1输入航线: 5.2.2查询航线: 5.2.3承办订票业务: 5.2.4承办退票业务: 5.2.5查询航线:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 航空 客运 订票 系统 VC 毕业设计 论文