公文素材库 首页

例(航空售票系统)

时间:2019-05-29 21:29:47 网站:公文素材库

例(航空售票系统)

航空售票系统

一、需求分析(标题:四号,宋体,段前段后0.5行,单倍行距)

1)每条航线所涉及的信息有:终点站名、航班号、飞机号、飞行日期、定票

量、已定票的乘客名单、票价。(正文:小四,宋体,行距固定值20磅)2)作为示意系统,所有数据可以只放在内存中。3)系统能实现的操作和功能如下:

a)查询航线:能根据乘客提出的终点站名输出下列信息:航班号、所属航空公司、班机号、飞行日期、起飞时间、目的机场、到达时间。b)承办售票业务c)承办定票业务d)承办退票业务

二、概要设计

1、抽象数据类型的定义如下:ADTSchedule{

数据对象:D={ei|i=1,2,3,…,n;n0;ei∈Schedule}

数据关系:R1={<ei-1,ei>|<ei-1,ei>表示ei-1和ei之间有先后顺序关系}基本操作:

Schedule*OutFile(fstream&outfile);

操作结果:打开文本文件dipiao.txt,把文件中的数据送到结构体数组中。boolSearch_airnum(Schedule*P,Schedule&plane,charairnum[]);初始条件:结构体数组P存在

操作结果:按照输入的航班号进行查找,并显示。

boolSearch_Airport(Schedule*P,Scheduleplane[],int&num,charportname[]);初始条件:结构体数组P存在

操作结果:按照输入的时间和目的机场进行查找,并显示。}ADTSchedule

2、抽象数据类型队列的定义如下:

......……程序流程图

主界面售票系统没有票是否有票?定票系统退票系统有票售票三、详细设计

各模块详细设计及源程序

四、调试分析

1、该程序的主要存储结构是数组,其次有队列,队列主要用来存放定票人的信息。

2、进行查找的时候,能够根据输入的时间区间进行模糊查找,并且把找到的所有符合条件的航班显示出来。

3、对输入的错误信息给出警告或提示,对一次操作的完成也给出相应的提示。

五、测试结果

图1主界面

六、课设总结

2售票界面…

扩展阅读:航空售票系统

航空订票系统

一、题目分析

本题目要求设计航空订票业务系统,借助计算机来实现以下业务:查询航线、客票预订和办理退票等。该系统的基本要求:

(1)每条航线所涉及的信息有:终点站名、航班号、飞机号、飞行周日(星期几)、乘员定额、余票量、已订票的客户名单(包括姓名、订票量、舱位等级1,2或3)以及等候替补的客户名单(包括姓名、所需票量);

(2)系统能实现的操作和功能如下:①查询航线:根据旅客提出的终点站名输出下列信息:航班号、飞机号、星期几飞行,最近一天航班的日期和余票额;②承办订票业务:根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若尚有余票,则办理订票手续,输出座位号;若已满员或余票额少于订票额,则需重新询问客户要求。若需要,可登记排队候补;③承办退票业务:根据客户提供的情况(日期、航班),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其它排队候补客户。

程序使用了数据结构中的队列及链表,将对客户的操作及航线的操作用链表来实现,将替补对替补客户的操作用队列来实现,在该程序中,我一共为其定义了8个函数。再main()中调用command_mode()进入选择菜单,在选择则菜单中,可以分别调用FIND(),RETURN(),ORDER()等函数来实现查找,退票,订票等功能。

二、设计过程(程序流程图)

由于此程序涉及功能和信息较多,因此应定义结构体。本程序的结构体有:1.typedefstructOrder{charname[10];/*客户姓名*/uintnum_rank1;/*等级为1的票数*/uintnum_rank2;/*等级为2的票数*/uintnum_rank3;/*等级为3的票数*/structOrder*next;}Order,*OrderList;

2.typedefstructFlightLine

{charstop[10];/*终点站名*/charflight[10];/*航班号*/uintplane;/*飞机号*/charweek[3];/*飞行周日*/

uinttotal_rank1;/*等级为1的乘员数*/uinttotal_rank2;/*等级为2的余票数*/uinttotal_rank3;/*等级为3的余票数*/uintrest_rank1;/*等级为1的余票数*/uintrest_rank2;/*等级为2的余票数*/uintrest_rank3;/*等级为3的余票数*/OrderListpordered_list;/*订票客户*/OrderListpordered_rear;

第1页航空订票系统

OrderListpwaited_list;/*候补客户*/OrderListpwaited_rear;structFlightLine*next;

}FlightLine,*FlightLineList;FlightLineListflightline_list;FlightLineListflightline_rear;查找功能

该功能需要输入目的地进行查找,调用find_fight()函数,并且在find_flight()中调用flight_print()找到符合的信息。订票功能

在order()函数中,通过对链表的操作,找到相应的航线,将录入的客户信息添加到链表中。但当航线订票数已满员,则询问用户是否进入候补名单,通过调用alternate()函数,将客户加入候补队列。退票功能

通过客户名来在客户链表中查找客户信息,在通过录入客户订票航班号、姓名,在航线链表中查找航线头结点,并用航线指针实现票数的变化,如果在退票后,候补队列不为空,则首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其它排队候补客户。程序流程图:

开始定义变量voidflight_print(FlightLineListflightline_tmp)输出航班信息打印订票信息打印候补信息返回图1航班信息打印函数

第2页航空订票系统

开始订票链表末尾增加一个节点写入订票信息余票更新返回定义变量intorder_tickets(char*name,char*flight,uintnum_rank1,uintnum_rank2,uintnum_rank3,FlightLineList*flightline_tmp)*flightline_tmp=flightline_list;航线指针的指针域非零YN比较flight和(*flightline_tmp->next-N>flightYbreak*flightline_tmp=(*flightline_tmp)->next;将航班指针的指针域赋给航班指针航线指针为空YN返回0订票数额超过票额总数YN返回1余票不N足Y返回2

图2订票函数第3页

航空订票系统

开始定义变量intreturn_tickets(char*name,char*flight,FlightLineList*flightline_tmp)初始化订票链更新余票删除满足需求的表头结点候补节点查找退票人的返回2订票节点*flightline_tmp=(*flightline_tmp)->next;没找到航班YN返回0没找到退票人的订票节点YN返回1更新余票删除退票人的订票节点查找候补节点中有没有N满足需要的节点Y给订票链表末尾返回加一个节点将满足需求的候补节点加入到订票链表中图3退票函数

第4页

航空订票系统

开始定义变量voidalternae(char*name,uintnum_rank1,unitnum_rank2,unitnum_rank3,FlightLineListflightkine_tmp)在候补链表末尾加一个节点写入候补信息返回图4候补函数

开始定义变量xoidfind_flight(char*stop)FlightLineListflightline_tmp=flightline_list;航线信息指针域不为空YNflightline_tmp=flightline_tmp->next;比较stop和flightline_tmp->stopYN调用航班打印函数返回图5查找航班函数第5页

航空订票系统

返回输入终点站开始Waitsuccess定义航班号,航班等级,终点站,姓名定义不同等级成员输如候补人员信息,航班信息waitquitYNIfqueue?case=2没有足够余票,是否排队case=0没有航班case=1没有订票输出“reversesuccess”航班信息输出"returnsuccess!"case=2航班信息switch语句输入命令case=0没有此航班case=1票额不足Y判断是否是空N返回值是否是0Y输入姓名,航班号Nswitch语句N输入姓名,航班等级,航班号图6命令函数

第6页航空订票系统

开始初始化增加航线进入命令返回0结束图7主函数三、调试过程及实验结果1).调试过程

在初编程序时订票函数中没有编入更新剩余票数语句:(*flightline_tmp)->rest_rank1-=num_rank1;(*flightline_tmp)->rest_rank2-=num_rank2;(*flightline_tmp)->rest_rank3-=num_rank3;

这导致任务显示栏中剩余票数没有更新。在加入后,任务显示栏中剩余票数可以实行更新。

在初编程序时退票函数中没有删除退票人的订票节点,导致剩余票显示出错。应该加上:

order_free=order_tmp->next;order_tmp->next=order_free->next;if(order_tmp->next==NULL){(*flightline_tmp)->pordered_rear=order_tmp;}free(order_free);

order_tmp=(*flightline_tmp)->pwaited_list;2).实验结果

第7页航空订票系统

查找函数界面

订票函数界面

第8页航空订票系统

等候函数界面如果票已经售完则程序调用等候函数。

退票函数界面

第9页航空订票系统

在退票函数中:如果在退票后,候补队列不为空,则询问排队的客户,若所退票额能满足他的要求,则为他办理订票手续,依次询问其它排队候补客户。四、结论

此次软件课程设计,考察链表以及队列的操作,在编写程序的时候,虽然遇到了很多问题,通过不断的查阅相关资料,提高了根据具体情况解决问题的能力,结合数据结构课程中的基本理论和基本算法,分析并正确确定数据的逻辑结构,合理地选择相应的存储结构,并能设计出解决问题的有效算法的能力,也为我日后的编程积累了经验。同时也使我初步掌握软件开发过程中问题分析、系统设计、程序编码、测试等基本方法和技能。

在这次课程设计的过程中,我总结出了一条很有用的调试经验,通过注释程序段语句,部分执行程序,由大到小缩短范围,直到找到程序问题所在,我认为这个方法能很好的提高程序调试的效率。

通过对数据结构的学习,使我在编程的时候有了很好的指导思想,而通过数据结构课程设计,使我有了一个很好的理论联系实际的机会。

五、程序清单

#include#include

typedefunsignedintuint;typedefstructOrder{charname[10];/*客户姓名*/uintnum_rank1;/*等级为1的票数*/uintnum_rank2;/*等级为2的票数*/uintnum_rank3;/*等级为3的票数*/structOrder*next;}Order,*OrderList;

typedefstructFlightLine

{charstop[10];/*终点站名*/charflight[10];/*航班号*/uintplane;/*飞机号*/charweek[3];/*飞行周日*/

uinttotal_rank1;/*等级为1的乘员数*/uinttotal_rank2;/*等级为2的余票数*/uinttotal_rank3;/*等级为3的余票数*/

uintrest_rank1;/*等级为1的余票数*/uintrest_rank2;/*等级为2的余票数*/uintrest_rank3;/*等级为3的余票数*/

OrderListpordered_list;/*订票客户*/OrderListpordered_rear;

第10页航空订票系统

OrderListpwaited_list;/*候补客户*/OrderListpwaited_rear;

structFlightLine*next;

}FlightLine,*FlightLineList;FlightLineListflightline_list;FlightLineListflightline_rear;

voidflightline_init();

voidflightline_add(char*stop,char*flight,uintplane,char*week,uinttotal_rank1,uinttotal_rank2,uinttotal_rank3);voidflight_print(FlightLineListflightline_tmp);

intorder_tickets(char*name,char*flight,uintnum_rank1,uintnum_rank2,uintnum_rank3,

FlightLineList*flightline_tmp);

intreturn_tickets(char*name,char*flight,FlightLineList*flightline_tmp);

voidalternate(char*name,uintnum_rank1,uintnum_rank2,uintnum_rank3,FlightLineListflightline_tmp);voidfind_flight(char*stop);voidhelp();

voidcommand_mode();voidflightline_init(){

/*初始化航线链表的头节点*/

flightline_list=(FlightLineList)malloc(sizeof(FlightLine));flightline_list->next=NULL;flightline_list->pordered_list=NULL;flightline_list->pordered_rear=NULL;flightline_list->pwaited_list=NULL;flightline_list->pwaited_rear=NULL;flightline_rear=flightline_list;}

voidflightline_add(char*stop,char*flight,uintplane,char*week,uinttotal_rank1,uinttotal_rank2,uinttotal_rank3){

/*航线链表末尾增加一个节点*/flightline_rear->next=

(FlightLineList)malloc(sizeof(FlightLine));flightline_rear=flightline_rear->next;flightline_rear->next=NULL;/*写入航线信息*/

strcpy(flightline_rear->stop,stop);strcpy(flightline_rear->flight,flight);

第11页航空订票系统

flightline_rear->plane=plane;strcpy(flightline_rear->week,week);

flightline_rear->total_rank1=total_rank1;flightline_rear->total_rank2=total_rank2;flightline_rear->total_rank3=total_rank3;flightline_rear->rest_rank1=total_rank1;flightline_rear->rest_rank2=total_rank2;flightline_rear->rest_rank3=total_rank3;/*初始化订票链表头节点*/

flightline_rear->pordered_list=(OrderList)malloc(sizeof(Order));flightline_rear->pordered_list->next=NULL;flightline_rear->pordered_rear=flightline_rear->pordered_list;/*初始化候补链表头节点*/

flightline_rear->pwaited_list=(OrderList)malloc(sizeof(Order));flightline_rear->pwaited_list->next=NULL;flightline_rear->pwaited_rear=flightline_rear->pwaited_list;}

/*航班信息打印函数*/

voidflight_print(FlightLineListflightline_tmp){OrderListorder_tmp;printf("********************************************************************\\n");printf("*stop:%s\\tflight:%s\\tplane:%d\\tweek:date%s\\n*\\n*

total_rank1:%d\\trest_rank1:%d\\n*total_rank2:%d\\trest_rank2:%d\\n*total_rank3:%d\\trest_rank3:%d\\n*\\n",flightline_tmp->stop,flightline_tmp->flight,flightline_tmp->plane,flightline_tmp->week,flightline_tmp->total_rank1,flightline_tmp->rest_rank1,flightline_tmp->total_rank2,flightline_tmp->rest_rank2,flightline_tmp->total_rank3,flightline_tmp->rest_rank3);/*打印订票信息*/printf("*[ordernamelist]\\n");order_tmp=flightline_tmp->pordered_list;while(order_tmp->next!=NULL){order_tmp=order_tmp->next;

第12页航空订票系统

printf("*%s(total_rank1:%d,total_rank2:%d,total_rank3:%d)\\n",order_tmp->name,order_tmp->num_rank1,order_tmp->num_rank2,order_tmp->num_rank3);}

/*打印候补信息*/printf("*\\n*[waitnamelist]\\n");order_tmp=flightline_tmp->pwaited_list;while(order_tmp->next!=NULL){order_tmp=order_tmp->next;printf("*%s(total_rank1:%d,total_rank2:%d,total_rank3:%d)\\n",order_tmp->name,order_tmp->num_rank1,order_tmp->num_rank2,order_tmp->num_rank3);}

printf("************************************************************************\\n");}

/*订票函数*/

intorder_tickets(char*name,char*flight,uintnum_rank1,uintnum_rank2,uintnum_rank3,

FlightLineList*flightline_tmp){*flightline_tmp=flightline_list;/*查找航班*/while((*flightline_tmp)->next!=NULL){if(strcmp((*flightline_tmp)->next->flight,flight)!=0){*flightline_tmp=(*flightline_tmp)->next;}else{break;}}

*flightline_tmp=(*flightline_tmp)->next;/*查找航班*/if(*flightline_tmp==NULL){return0;

第13页航空订票系统

}

/*订票数额超过票额总数返回1*/if(num_rank1>(*flightline_tmp)->total_rank1||num_rank2>(*flightline_tmp)->total_rank2||num_rank3>(*flightline_tmp)->total_rank3){return1;}

/*余票不足返回2*/if((*flightline_tmp)->rest_rank1rest_rank2rest_rank3

/*订票链表末尾增加一个节点*/

(*flightline_tmp)->pordered_rear->next=(OrderList)malloc(sizeof(Order));(*flightline_tmp)->pordered_rear=(*flightline_tmp)->pordered_rear->next;(*flightline_tmp)->pordered_rear->next=NULL;/*写入订票信息*/

strcpy((*flightline_tmp)->pordered_rear->name,name);(*flightline_tmp)->pordered_rear->num_rank1=num_rank1;(*flightline_tmp)->pordered_rear->num_rank2=num_rank2;(*flightline_tmp)->pordered_rear->num_rank3=num_rank3;/*余票更新*/(*flightline_tmp)->rest_rank1-=num_rank1;(*flightline_tmp)->rest_rank2-=num_rank2;(*flightline_tmp)->rest_rank3-=num_rank3;return3;}

/*退票函数*/

intreturn_tickets(char*name,char*flight,FlightLineList*flightline_tmp){OrderListorder_tmp=NULL;OrderListorder_free=NULL;*flightline_tmp=flightline_list;/*查找退票人的订票节点*/

while((*flightline_tmp)->next!=NULL){if(strcmp((*flightline_tmp)->next->flight,flight)!=0){

第14页航空订票系统

*flightline_tmp=(*flightline_tmp)->next;}else{order_tmp=(*flightline_tmp)->next->pordered_list;while(order_tmp->next!=NULL){if(strcmp(order_tmp->next->name,name)!=0){order_tmp=order_tmp->next;}else{break;}}break;}}*flightline_tmp=(*flightline_tmp)->next;/*没有找到航班返回0*/if(*flightline_tmp==NULL){return0;}

/*没有找到退票人的订票节点返回1*/if(order_tmp->next==NULL){return1;}

/*更新余票*/

(*flightline_tmp)->rest_rank1+=order_tmp->next->num_rank1;(*flightline_tmp)->rest_rank2+=order_tmp->next->num_rank2;(*flightline_tmp)->rest_rank3+=order_tmp->next->num_rank3;/*删除退票人的订票节点*/

order_free=order_tmp->next;order_tmp->next=order_free->next;if(order_tmp->next==NULL){(*flightline_tmp)->pordered_rear=order_tmp;}free(order_free);

order_tmp=(*flightline_tmp)->pwaited_list;

/*查找候补节点中有没有满足需要的节点,如果有就把票依次定给候补人*/

第15页航空订票系统

while(order_tmp->next!=NULL){if((*flightline_tmp)->rest_rank1>=order_tmp->next->num_rank1&&(*flightline_tmp)->rest_rank2>=order_tmp->next->num_rank2&&(*flightline_tmp)->rest_rank3>=order_tmp->next->num_rank3){

/*给订票链表末尾添加一个节点*/

(*flightline_tmp)->pordered_rear->next=(OrderList)malloc(sizeof(Order));(*flightline_tmp)->pordered_rear=(*flightline_tmp)->pordered_rear->next;(*flightline_tmp)->pordered_rear->next=NULL;/*将满足需求的候补节点加入到订票链表中*/strcpy((*flightline_tmp)->pordered_rear->name,order_tmp->next->name);(*flightline_tmp)->pordered_rear->num_rank1=order_tmp->next->num_rank1;(*flightline_tmp)->pordered_rear->num_rank2=order_tmp->next->num_rank2;(*flightline_tmp)->pordered_rear->num_rank3=order_tmp->next->num_rank3;/*更新余票*/

(*flightline_tmp)->rest_rank1-=order_tmp->next->num_rank1;(*flightline_tmp)->rest_rank2-=order_tmp->next->num_rank2;(*flightline_tmp)->rest_rank3-=order_tmp->next->num_rank3;

/*删除满足需求的候补节点*/order_free=order_tmp->next;order_tmp->next=order_free->next;if(order_tmp->next==NULL){(*flightline_tmp)->pwaited_rear=order_tmp;}free(order_free);}else{break;}}return2;

第16页航空订票系统

}

/*排队候补函数*/

voidalternate(char*name,uintnum_rank1,uintnum_rank2,uintnum_rank3,FlightLineListflightline_tmp){

/*在候补链表末尾增加一个节点*/

flightline_tmp->pwaited_rear->next=(OrderList)malloc(sizeof(Order));flightline_tmp->pwaited_rear=flightline_tmp->pwaited_rear->next;flightline_tmp->pwaited_rear->next=NULL;/*写入候补信息*/

strcpy(flightline_tmp->pwaited_rear->name,name);flightline_tmp->pwaited_rear->num_rank1=num_rank1;flightline_tmp->pwaited_rear->num_rank2=num_rank2;flightline_tmp->pwaited_rear->num_rank3=num_rank3;}

/*查找航班函数*/

voidfind_flight(char*stop){FlightLineListflightline_tmp=flightline_list;/*根据终点站查找航班,并打印航班信息*/while(flightline_tmp->next!=NULL){flightline_tmp=flightline_tmp->next;if(stricmp(flightline_tmp->stop,stop)==0){flight_print(flightline_tmp);}}}

/*命令行模式函数*/voidcommand_mode(){FlightLineListflightline_tmp=NULL;charcommand[10];charname[10];charflight[10];charstop[10];intresult;uintnum_rank1;uintnum_rank2;uintnum_rank3;for(;;){printf("pleaseinputcomand:\\n");

第17页航空订票系统

scanf("%s",command);if(strcmp(command,"FIND")==0){printf("pleaseinputstop:");scanf("%s",stop);find_flight(stop);}elseif(strcmp(command,"RETURN")==0){printf("pleaseyourname:");scanf("%s",name);printf("pleaseinputflight:");scanf("%s",flight);result=return_tickets(name,flight,&flightline_tmp);switch(result){case0:printf("notheplane!\\n");break;case1:printf("noreverse!\\n");break;default:flight_print(flightline_tmp);printf("returnsuccess!\\n");}}elseif(strcmp(command,"ORDER")==0){printf("pleaseyourname:");scanf("%s",name);printf("pleaseinputflight:");scanf("%s",flight);printf("lever1num:");scanf("%d",&num_rank1);printf("lever2num:");scanf("%d",&num_rank2);printf("lever3num:");scanf("%d",&num_rank3);result=order_tickets(name,flight,num_rank1,num_rank2,num_rank3,&flightline_tmp);switch(result){case0:printf("notheplane!\\n");break;

第18页航空订票系统

case1:flight_print(flightline_tmp);printf("noenoughticket\\n");break;case2:flight_print(flightline_tmp);printf("noenoughrest,ifqueue?(Y/N)");scanf("%s",command);if(command[0]=="Y"||command[0]=="y"){alternate(name,num_rank1,num_rank2,num_rank3,flightline_tmp);flight_print(flightline_tmp);printf("waitsuccess!\\n");}elseif(command[0]=="N"||command[0]=="n"){printf("waitquit!\\n");}else{printf("inputerror!\\n");}break;default:flight_print(flightline_tmp);printf("reversesuccess!\\n");}}

elseif(strcmp(command,"CLEAR")==0){system("cls");}elseif(strcmp(command,"QUIT")==0){break;}else{printf("inputerror!\\n");}}}intmain(){

/*初始化*/

flightline_init();

第19页航空订票系统

/*增加航线*/flightline_add("shenyang","A",1,"3",50,170,230);flightline_add("beijing","B",2,"2",50,120,150);flightline_add("chengdu","C",3,"1",130,150,170);/*进入命令行模式*/command_mode();return0;}

第20页

友情提示:本文中关于《例(航空售票系统)》给出的范例仅供您参考拓展思维使用,例(航空售票系统):该篇文章建议您自主创作。

  来源:网络整理 免责声明:本文仅限学习分享,如产生版权问题,请联系我们及时删除。


例(航空售票系统)
由互联网用户整理提供,转载分享请保留原作者信息,谢谢!
http://m.bsmz.net/gongwen/742700.html
相关阅读
最近更新
推荐专题