1、数据结构课程设计订票系统航空报告源代码数据结构课程设计订票系统一、设计任务与要求 2b5E2RGbCAP1.1 总体目标与任务要求 2p1EanqFDPw1.2 题目选择与目地意义 2DXDiTa9E3d1.3 所选题目地主要工作 2RTCrpUDGiT二、需求分析 25PCzVD7HxA2.1 用户需求分析 2jLBHrnAILg2.2 功能需求分析 3xHAQX74J0X2.3 系统需求分析 3LDAYtRyKfE三、概要设计 4Zzz6ZB2Ltk3.1 各模块地算法设计说明 4dvzfvkwMI13.2 存储结构设计说明 9rqyn14ZNXI四、详细设计 11EmxvxOtOco五、
2、源代码 12SixE2yXPq5六、运行结果分析 236ewMyirQFL七、收获与体会 30kavU42VRUs八、主要参考资料 30y6v3ALoS89一、设计任务与要求1.1 总体目标与任务要求制作一个订票系统 , 通过此系统可以实现如下功能:1 ) 录 入 :可以录入航班情况 数据可以存储在一个数据文件中 , 数据结构、具体数据自定 ) .2 ) 查 询 :可以查询某个航线地情况 如 , 输入航班号 , 查询起降时间 , 起飞抵达城市 , 航班票价 , 票价折扣 , 确定航班是否满仓);可以输入起飞抵达城市 , 查询飞机航班情况 .3 ) 订 票 :可以订票 , 如果该航班已经无票 ,
3、 可以提供相关可选择航班 订票情况可以存在一个数据文件中 , 结构自己设定) .4 )退票: M2ub6vSTnP可退票 , 退票后修改相关数据文件;客户资料有姓名 , 证件号 , 订票数量及航班情况 , 订单要有编号 .5 )修改航班信息: 0YujCfmUCw当航班信息改变可以修改航班数据文件 . 根据以上功能说明 , 设计航班信息 ,订票信息地存储结构 , 设计程序完成功能 . eUts8ZQVRd1.2 题目选择与目地意义选择这个题目地原因是 , 订票系统在现实生活中应用很广泛 , 通过这个系统可以使订票、退票等变得简便 . 与传统地人工用纸、笔来记录办理订票、退票等相比 , 使用这个
4、系统也会增加工作效率 . 这个题目做出来地系统还是比较实用地 , 所以我选择了订票系统这个题目 . sQsAEJkW5T完成此系统 , 需要综合运用数据结构课程中学到地几种典型数据结构, 以及程序设计语言 C 语言) , 自行实现一个较为完整地应用系统地设计与开发 . 通过课程设计 , 自己通过系统分析、系统设计、编程调试 , 写实验报告等环节 , 进一步掌握应用系统设计地方法和步骤 , 灵活运用并深刻理解典型数据结构在软件开发中地应用 . 学会将知识应用于实际地方法, 提高分析和解决问题地能力, 增加综合能力. GMsIasNXkA1.3 所选题目地主要工作这个题目地主要工作是使订票系统可以
5、录入航班情况 , 查询某个航线地情况、办理订票、办理退票、修改航班信息、查询订票信息等 . TIrRGchYzg二、需求分析2.1 用户需求分析用户使用此程序所要完成地工作主要为:查询所有航线信息、查看已订票客户信息、查询航线、办理订票业务、办理退票业务 . 通过此系统可以方便地进行上述工作 . 7EqZcWLZNX每条航线所涉及地信息有:终点站名、航班号、飞行时间、票价、乘员定额、余票量 .已订票地客户名单信息包括姓名、订票量、舱位等级 1,2 或 3).等候替补地客户名单信息包括姓名、所需票量 .查询航线功能可以根据旅客提出地终点站名输出航班号、飞行时间、票价、乘员定额、余票量 .订票业务
6、功能根据客户提出地要求 航班号、订票数额)查询该航班票额情况 , 若尚有余票 ,则为客户办理订票手续 ,输出座位号;若已满员或余票额少于定票额 ,则需重新询问客户要求 .若需要 ,可登记排队候补购票 .lzq7IGf02E退票业务功能根据客户提供地情况 航班号、姓名)为客户办理退票手续 ,然后查询该航班是否有人排队候补 ,首先询问排在第一地客户 ,若所退票额能满足他地要求 ,则为他办理订票手续 ,否则依次询问其他排队候补地客户 .zvpgeqJ1hk2.2 功能需求分析功能需求分析模块图如图 2.2.1 功能模块图:图 2.2.1 功能模块图2.3 系统需求分析开发环境: PC机Windows
7、 XP 系统使用软件:编写实验报告: Microsoft Office Word画 图:亿图制 作 程 序: Microsoft Visual C+ 6.0三、概要设计3.1 各模块地算法设计说明1浏览航线信息功能 , 调用 display 函数进行输出 . 流程图如图 3.1.1 浏览航线信息流程图:图 3.1.1 浏览航线信息流程图:其中 display 函数地流程图如图 3.1.2 display 函数流程图:图3.1.2 display函数流程图2浏览已订票客户信息功能, 按顺序输出客户信息链表中地信息. 流程图如图 3.1.3浏览已订票客户信息功能流程图:NrpoJac3v1图 3.
8、1.3 浏览已订票客户信息功能流程图3查询航线功能 , 根据客户提出地终点站名输出航线信息 . 流程图如图3.1.4 查询航线流程图:图 3.1.4 查询航线流程图4办理订票业务功能 , 根据客户提出地航线信息等进行订票 . 流程图如图3.1.5 办理订票业务功能流程图: 1nowfTG4KI图 3.1.5 办理订票业务功能流程图5办理退票业务功能 , 根据客户提出地航线信息等进行退票 . 流程图如图3.1.6 办理退票业务功能流程图: fjnFLDa5Zo图 3.1.6 办理退票业务功能流程图6主函数流程图如图 3.1.7 主函数流程图:图3.1.7主函数流程图3.2 存储结构设计说明typ
9、edef struct wat_ros/*单链队列存储等候替补地客户信息*/char name10。/* 姓名 */int req_amt 。/* 订票量 */struct wat_ros *next 。qnode,*qptr 。typedef struct pqueue/* 等候替补地客户名单*/qptr front 。/* 等候替补客户名单域地队头指针*/qptr rear。/* 等候替补客户名单域地队尾指针*/linkqueue。上述单链队列用来存储排队等候地客户名单 ,这样可以通过队先进先出地特点来进行操作 .先排队地客户可以先订票成功 .tfnNhnE6e5typedef struc
10、t ord_ros/*乘员名单*/char name10。int ord_amt 。/* 客户姓名 /* 订票量 */*/int grade。/* 舱位等级*/struct ord_ros *next 。linklist 。上述单链表用来存储乘员地信息 ,包括姓名、订票量、舱位等级 .struct airline/*航线信息*/char ter_name10 。 /* 抵达城市 */char air_num10 。 /* 航班号 */char time10 。 /* 飞机时间 */char pri7 。 /* 票价 */int tkt_amt 。 /* 乘员定额 */int tkt_sur 。
11、 /* 余票量 */linklist *order 。 /* 乘员名单域 ,指向乘员名单链表地头指针*/linkqueue wait 。 /* 等候替补地客户名单域 ,分别指向排队等候名单队头队尾地指针 */lineinfo 。这个结构体存储了航线信息 ,包括抵达城市、航班号、飞行时间、票价、乘员定额、余票量等 .#define MAXSIZE 5/*定义航线数量,可修改 */struct airline airMAXSIZE=/*初始化航线信息*/beijing,1,1200,860,30,30,shanghai,2,1000,770,20,20,london,3,1330,960,10,1
12、0,harbin,4,1700,760,50,50,dalian,5,1400,550,40,40 。通 过 修 改 全 局 变 量 MAXSIZE 地 数 值 即 可 更 改 航 线 数 . 在 struct airlineairMAXSIZE 中可以修改、增加、删除航线信息. 航线信息内容依次为抵达城市、航班号、飞行时间、票价、乘员定额、余票量 函 数 来 查 看 全 部 航 线 信 息 . 其 中 调 用 了 voiddisplay(struct airline *info 函数 , 该函数地功能是打印每条航线地基本信息 . 这 样 即 可 按顺 序 打印 出 struct airlin
13、e 链表 中 存 储 地 全 部 航 线 信息 . V7l4jRB8Hs2.查看已订票客户信息编写 void prtlink( 函数来查看已订票客户信息 .这个函数中需要输入要查询地航线 ,通过 find( 函数来寻找这个航线然后输出该航线乘员域地乘员信息 .83lcPA59W93.查询航线编写 void search(函数来实现查询航线地功能 .用户输入抵达城市名 ,该函数会在航线信息链表中进行查询 .如果有该城市 ,则会输出此航线地信息 .mZkklkzaaP 4. .办理订票业务编写void order( 函数来实现订票功能.首先提示用户输入航班号,然后调用find(函数来查找此航班,
14、如果该航班存在,则会提示用户输入信息并调用linklist*insertlink(linklist *head,int amount,char name,int grade在订票乘员名单域中添加客户信息 .如果余票不足 ,则会提示用户进行排队 ,如果排队 ,则会调用提示用户输入信息并调用 linkqueue appendqueue(linkqueue q,char name,int amount 在排队等候乘员名单域中添加客户信息 .AVktR43bpw5.办理退票业务编写 void return_tkt( 函数来实现退票功能 .首先提示用户输入航班号 ,然后调用 find( 函数来查找此航班
15、 ,如果该航班存在 ,则会提示用户输入信息 ,信息正确则会提示退票成功 .此时将乘员信息中地该乘员信息删除 ,然后检查替补乘员链表中地信息 ,如果其订票量可以得到满足 ,则会将其插入到订票客户名单链表中 ,提示他订票成功 .ORjBnOwcEd6.退出系统主函数中无限循环输出菜单 for( 。 , 用户在菜单页面下输入 6 回车即exit(0, 即可退出系统 .五、源代码#include #include #include #include #include #define MAXSIZE 5 /* 定义航线数量 ,可修改 */typedef struct wat_ros/*单链队列存储等候替
16、补地客户信息*/char name10。 /* 姓名 */int req_amt。 /* 订票量 */struct wat_ros *next。qnode,*qptr 。typedef struct pqueue/*等候替补地客户名单*/qptr front。/* 等候替补客户名单域地队头指针*/qptr rear。/* 等候替补客户名单域地队尾指针*/linkqueue 。typedef struct ord_ros /*乘员名单 */char name10。/* 客户姓名*/int ord_amt。/* 订票量 */int grade。/*舱位等级 */struct ord_ros *ne
17、xt。linklist 。struct airlinechar ter_name10。 /* 抵达城市 */char air_num10。 /*航班号 */char time10。/* 飞机时间 */char pri7 。/* 票价 */int tkt_amt 。/*乘员定额 */int tkt_sur 。/*余票量 */linklist *order 。/* 乘员名单域 ,指向乘员名单链表地头指针 */linkqueue wait。/* 等候替补地客户名单域 ,分别指向排队等候名单队头队尾地指针 */ 2MiJTy0dTTlineinfo 。struct airline *start。voi
18、d display(struct airline *info /* 打印每条航线地基本信息 */ gIiSpiue7A printf(%8st%3st%stt%4st%3dt%10dn,info-ter_name,info-air_num,info-time,info-pri,info-tkt_amt,info-tkt_sur 。uEh0U1Yfmhvoid list(/* 打印全部航线信息*/struct airline *info 。int i=0 。info=start。printf( 终点站名 t航班号 t飞行时间 t票价 t乘员定额 t余票量 n 。while(idisplay(in
19、fo 。 /* 调用 display函数来输出 */info+ 。i+ 。printf(nn 。void search( /*根据客户提出地终点站名输出航线信息 */struct airline *info,*find( 。char name10。 /* 要抵达地城市名称 */int i=0 。info=start。printf( 请输入要抵达城市地名称 : 。scanf(%s,name。while(iif(!strcmp(name,info-ter_name /* 有该站名 strcmp则返回 ,if(!0 即break*/IAg9qLsgBXbreak。info+ 。i+ 。if(i=MA
20、XSIZE /* 没有匹配地航线 */printf( 对不起 ,没有这条航线 !n 。elseprintf( 终点站名 t航班号 t飞行时间 t票价 t乘员定额 t余票量 n。display(info 。 /* 调用 display函数输出航线信息 */struct airline *find( /* 根据系统提出地航班号查询并以指针形式返回 */ WwghWvVhPEstruct airline *info 。char number10。 /* 查询地航班号 */int i=0 。info=start。printf( 请输入航班号 : 。scanf(%s,number。while(iif(!
21、strcmp(number,info-air_num /* 有匹配航班 */ return info。info+ 。i+ 。 /*无匹配航班 */printf( 对不起 ,没有这条航线 !n 。return NULL 。void prtlink( /* 打印订票乘员名单域地客户名单信息 */ linklist *p 。struct airline *info 。info=find( 。p=info-order 。if(p!=NULL /* 按顺序输出客户信息链表 */printf( 客户姓名订票数额舱位等级 n 。while(pprintf(%stt%dt%dn,p-name,p-ord_am
22、t,p-grade。 asfpsfpi4k p=p-next。else/*没有人订这个航班 */printf( 该航线没有客户信息!n 。linklist *insertlink(linklist *head,int amount,char name,int grade /* 增加订票乘员名单域地客户信息 */ ooeyYZTjj1linklist *p1,*new1 。p1=head。new1=(linklist*malloc(sizeof(linklist 。if(!new1/* 存储空间不足*/printf(nOut of memory!n 。return NULL 。strcpy(ne
23、w1-name,name。new1-ord_amt=amount。new1-grade=grade。new1-next=NULL 。if(head=NULL /* 若原订票客户信息为空 */head=new1。new1-next=NULL 。elsehead=new1。new1-next=p1。return head。linkqueue appendqueue(linkqueue q,char name,int amount /*增加排队等候地客户名单域 */ BkeGuInkxIqptr new1。new1=(qptrmalloc(sizeof(qnode。strcpy(new1-name,
24、name。new1-req_amt=amount。new1-next=NULL 。if(q.front=NULL /* 若原排队等候客户名单域为空 */q.front=new1。elseq.rear-next=new1。q.rear=new1。return q。void order(/*办理订票业务*/struct airline *info 。int amount,grade。/* 订票数量 ,舱位等级 */char name10。/*要订地航班号*/info=start。if(!(info=find(/*根据客户提供地航班号进行查询,如为空 ,退出该模块*/ PgdO0sRlMoretur
25、n。printf( 请输入您需要地票数: 。scanf(%d,&amount。if(amountinfo-tkt_amt/*若客户订票额超过乘员定票总额,退出*/ 3cdXwckm15printf(n 对不起 ,您输入票数已经超过乘员定额 ! 。return。if(amounttkt_sur /* 若客户订票额末超过余票量 ,订票成功并等记信息 */ h8c52WOngMint i 。printf( 请输入您地姓名 : 。scanf(%s,name。printf( 请输入您需要地舱位等级 (1,2或 :。scanf(%d,&grade。info-order=insertlink(info-or
26、der,amount,name,grade。 /* 在订票乘员名单域中添加客户信息 */ v4bdyGiousfor(i=0 。i /* 依次输出该订票客户地座位号 */printf(%s 地座位号是 :%dn,name,info-tkt_amt-info-tkt_sur+i+1 。J0bm4qMpJ9info-tkt_sur-=amount。 /* 该航线地余票量应减掉该客户地订票量*/ XVauA9grYPprintf(n 祝您乘坐愉快 !n 。else /*若满员或余票额少于订票额 ,询问客户是否需要进行排队等候 */char r。printf(n 没有这么多票了 ,您需要排队等候吗 ?(Y/N 。r=getch(。printf(%c,r 。if(r=Y|r=yprintf(n 请输入您地姓名 : 。scanf(%s,name。info-wait=appendqueue(info-wait,name,amount。 /* 在排队等候乘员名单域中添加客户信息 */ bR9C6TJscwprintf(n 注册排队成功 !n 。elseprintf(n 欢迎您再次订购! n 。void return_tkt(
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1