版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、重庆交通大学课程设计课题:班 级:学生姓名:学 号:学生姓名:学 号:学生姓名:学 号:学生姓名:学 号:指导老师:2 0 1 8 年 1 2 月 6 日目录一、课程设计目的 3二、课程设计内容3三、需求分析 3四、概要设计3五、详细设计及运行结果4六、数据逻辑E-R图 9七、订票系统代码编辑 .10八、收获及体会 16一、课程设计目的1 数据结构课程设计是综合运用数据结构课程中学到的几种典型数据结构,以及程序设计 语言 <C 语言),自行实现一个较为完整的应用系统的设计与开发2 通过课程设计,自己通过系统分析、系统设计、编程调试,写实验报告等环节,进一步 掌握应用系统设计的方法和步骤,
2、灵活运用并深刻理解典型数据结构在软件开发中的应 用。3 学会将知识应用于实际的方法,提高分析和解决问题的能力,增加综合能力。 航空空订票系统:<1)熟练掌握链表存储结构及其建立过程和常用操作; <2)熟练掌握队列的建立过程和常用操作; <3)学会自己调试程序的方法并掌握一定的技巧。二、课程设计内容航空客运订票的业务活动包括:查询航线、客票预订和办理退票等。设计一个航空客运 订票系统,以使上述业务可以借助计算机来完成。三、需求分析1 每条航线所涉及的信息有:终点站名、航班号、飞机号、飞行日 < 星期几)、乘员定 额、余票量、已订票的客户名单 <包括姓名、订票量、舱位
3、等级 1,2 或 3)以及等候替补的 客户名单 <包括姓名、所需票量);2 全部数据可以只放在内存中;3 系统能实现的操作和功能如下:a> 查询航线:根据旅客提出的终点站名输出下列信息:航班号、飞机号、星期几飞行,最近一天航班的日期和余票额;b> 承办订票业务:根据客户提出的要求 <航班号、订票数额)查询该航班票额情况,若尚有余票,则为客户办理订票手续,输出座位号;若已满员或余票额少于定票额,则需重新询问客户要求。若需要,可登记排队候补;c> 退票业务:根据客户提供的情况 <日期、航班),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的
4、客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其 他排队候补的客户。四、概要设计<1)显示已初始化的全部航线信息<2)浏览已订票客户信息<3)根据客户提出的终点站名,调用 findv)函数寻找航线信息,调用listv )函数输出 航线信息 <4 )办理订票业务:根据客户提供的航班号进行查询航线信息,若客户订票额超过乘员定票 总额,退出,若客户订票额末超过余票量,订票成功并登记信息,在订票乘员名单域中添加 客户信息;如果暂时没有票,询问客户是否要排队等侯,如果是,贝恠等候队列增加该客户 的订票信息。<5 )办理退票业务:调用查询函数,根据客户提供的
5、航线进行搜索根据客户提供的姓名 到订票客户名单域进行查询。退票成功后,重新将航线名单域指向订票单链表的头指针。根 据队列中从出的客户信息判断是否满足要求,如果满足,贝U将该客户的信息插入到乘客信息 链表中。<6)退出本系统五、详细设计及运行结果<1 )显示已初始化的全部航线信息<2)浏览已订票客户信息<3 )查询航线<4)办理订票业务<5)办理退票业务<6)排序:sort_tkt(>六:数据逻辑一 E-R图订票数量订票日期订票人验证方式订票价格退票人验证方式订票状态取消数量订票人信息预定取消取消日期订票人联系方航班代码起飞时间到达时间起点城市到达
6、城市/J、/*航空票务管理系统源代*/ #in elude <stdio.h> #in elude <stdlib.h> #in elude <stri ng.h>#defi ne MAXSIZE 3 /* 定义航线量的最大值 */ typedef struct wat_ros char name10。/* 姓名 */int req_amt。/* 订票量 */struct wat_ros *next 。qnode,*qptr 。typedef struct pqueue qptr front。/*等候替补客户名单域的头指针*/qptr rear。/*等候替补
7、客户名单域的属指针*/linkqueue 。typedef struct ord_ros char name10。 /* 客户姓名 */int ord_amt。/* 订票量 */int grade。 /* 舱位等级 */struct ord_ros *next。linklist 。struct airli ne char ter_name10 。 /* 终点站名 */char air_num10。 /* 航班号 */char plane_num10。/* 飞机号 */char day7 。 /*飞行周日 <星期几)*/int tkt_amt 。 /* 乘员定额 */int tkt_sur
8、 。/* 余票量 */linklist *order 。 /* 乘员名单域,指向乘员名单链表的头指针*/linkqueue wait 。/* 等候替补的客户名单域,分别指向排队等候名单队头队尾的指针*/lineinfo 。struct airline *start 。void display(struct airline *info>/* 打印每条航线的基本信息 */printf("%8st%3st%st%4stt%3dt%10dn",info->ter_name,info->air_num,info->plane_num,info->day,
9、info- >tkt_amt,info->tkt_sur> 。void list(>/* 打印全部航线信息 */ struct airline *info 。int i=0 。info=start 。printf(" 终点站名 t 航班号 t 飞机号 t 飞行周日 t 乘员定额 t 余票量 n"> 。 while(i<MAXSIZE>display(info> 。info+ 。i+ 。printf("nn"> 。void search(>/* 根据客户提出的终点站名输出航线信息 */ struc
10、t airline *info,*find(> 。char name10 。int i=0 。info=start 。printf(" 请输入终点站名 :"> 。scanf("%s",name> 。while(i<MAXSIZE> if(!strcmp(name,info->ter_name>> break 。info+ 。i+ 。if(i>=MAXSIZE>printf(" 对不起,该航线未找到 !n"> 。elseprintf(" 终点站名 t 航班号 t
11、 飞机号 t 飞行周日 t 乘员定额 t 余票量 n"> 。 display(info> 。struct airline *find(>/* 根据系统提出的航班号查询并以指针形式返回*/ struct airline *info 。char number10 。int i=0 。info=start 。printf(" 请输入航班号 :"> 。scanf("%s",number> 。while(i<MAXSIZE> if(!strcmp(number,info->air_num>> r
12、eturn 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(p> printf("%stt%dt%dn",p->name,p->
13、ord_amt,p->grade> 。 p=p->next 。elseprintf(" 该航线没有客户信息 !n"> 。linklist *insertlink(linklist *head,int amount,char name,int grade> /* 增加订票乘员名单域的客户信息 */ linklist *p1,*new 。p1=head。new=(linklist *>malloc(sizeof(linklist>> 。if(!new> printf("nOut of memory!n"&
14、gt; 。 return NULL 。 strcpy(new->name,name> 。new->ord_amt=amount 。new->grade=grade 。new->next=NULL 。if(head=NULL>/* 若原无订票客户信息 */head=new 。 new->next=NULL 。 elsehead=new 。new->next=p1 。return head 。linkqueue appendqueue(linkqueue q,char name,int amount>/* 增加排队等候的客户名单域 */ qpt
15、r new 。 new=(qptr>malloc(sizeof(qnode>> 。 strcpy(new->name,name> 。 new->req_amt=amount 。 new->next=NULL 。 if(q.front=NULL>/* 若原排队等候客户名单域为空 */ q.front=new 。else q.rear->next=new 。q.rear=new 。 return q 。void order(>/* 办理订票业务 */ struct airline *info 。int amount,grade 。char
16、 name10 。 info=start 。if(!(info=find(>>> return 。/* 根据客户提供的航班号进行查询,如为空,退出该模块 */ printf(" 请输入你订票所需要的数量 :"> 。scanf("%d",&amount> 。 if(amount>info->tkt_amt>/* 若客户订票额超过乘员定票总额,退出 */ printf("n 对不起,您输入的票的数量已经超过乘员定额 !"> 。 return 。if(amount<=inf
17、o->tkt_sur>/* 若客户订票额末超过余票量,订票成功并等记信息 */ int i 。 printf(" 请输入您的姓名 <订票客户) :"> 。 scanf("%s",name> 。printf(" 请输入 %s 票的舱位等级 :",name> 。 scanf("%d",&grade> 。info->order=insertlink(info->order,amount,name,grade> 。/* 在订票乘员名单域中添加客户信息 */
18、 for(i=0 。 i<amount 。 i+>/* 依次输出该订票客户的座位号 */printf("%s 的座位号是 :%dn",name,info->tkt_amt-info->tkt_sur+i+1> 。 info->tkt_sur-=amount 。/* 该航线的余票量应减掉该客户的订票量*/printf("n 祝您乘坐愉快! n"> 。else /* 若满员或余票额少于订票额,询问客户是否需要进行排队等候*/ char r 。printf("n 已经没有更多的票,您需要排队等候吗 ?(Y/N
19、>"> 。 r=getch(> 。printf("%c",r> 。if(r='Y'|r='y'> printf("n 请输入您的姓名 <排队订票客户) :"> 。 scanf("%s",name> 。info->wait=appendqueue(info->wait,name,amount> 。 /* 在排队等候乘员名单域中添加客户信息*/printf("n 注册成功 !n"> 。else printf
20、("n 欢迎您下次再次订购! n"> 。void return_tkt(>/* 退票模块 */ struct airline *info 。qnode *t,*back,*f,*r 。int grade 。linklist *p1,*p2,*head 。char cusname10 。if(!(info=find(>>> return 。/* 调用查询函数,根据客户提供的航线进行搜索 */ head=info->order 。p1=head。printf(" 请输入你的姓名 <退票客户) :"> 。scan
21、f("%s",cusname> 。while(p1!=NULL> /* 根据客户提供的姓名到订票客户名单域进行查询 */ if(!strcmp(cusname,p1->name>> break 。p2=p1 。 p1=p1->next 。if(p1=NULL> printf(" 对不起,你没有订过票 !n"> 。 return。 /* 若未找到,退出本模块 */ else/* 若信息查询成功,删除订票客户名单域中的信息 */if(p1=head> head=p1->next 。else p2-&
22、gt;next=p1->next 。 info->tkt_sur+=p1->ord_amt 。grade=p1->grade 。printf("%s 成功退票! n",p1->name> 。free(p1> 。info->order=head 。/* 重新将航线名单域指向订票单链表的头指针 */ f=(info->wait>.front 。 /*f 指向排队等候名单队列的头结点 */ r=(info->wait>.rear 。 /*r 指向排队等候名单队列的尾结点 */ t=f 。 /*t 为当前满点条
23、件的排队候补名单域*/while(t>if(info->tkt_sur>=info->wait.front->req_amt>/* 若满足条件者为头结点 */int i 。info->wait.front=t->next 。printf("%s 订票成功! n",t->name> 。for(i=0 。 i<t->req_amt 。 i+>/* 输出座位号 */printf("%s 的座位号是 :%dn",t->name,(info->tkt_sur>-i>
24、; 。info->tkt_sur-=t->req_amt 。 info->order=insertlink(info->order,t->req_amt,t->name,grade> 。 /* 插入到订票客户名单链表中 */ free(t> 。break。back=t。 t=t->next 。 if(info->tkt_sur>>=(t->req_amt>&&t!=NULL>/* 若满足条件者不为头结点 */ int i 。back->next=t->next 。printf(
25、"%s 订票成功! n",t->name> 。for(i=0 。 i<t->req_amt 。 i+>/* 输出座位号 */ printf("<%s>'s seat number is:%dn",t->name,(info->tkt_sur>-i> 。info->tkt_sur-=t->req_amt 。info->order=insertlink(info->order,t->req_amt,t->name,grade> 。 /* 插入到
26、订票客户名单链表中 */ free(t> 。 break。if(f=r> break 。int menu_select(>/* 菜单界面 */ int c 。char s20 。*n">printf("ntt 航空客运订票系统 n"> 。printf(printf("1. 浏览航线信息 :n"> 。printf("2. 浏览已订票客户信息 :n"> 。printf("3. 查询航线 n"> 。printf("4. 办理订票业务 :n"&g
27、t; 。 printf("5. 办理退票业务 :n"> 。 printf("6. 退出系统 n"> 。printf(H*n">do printf(" 请选择 :"> 。 scanf("%s",s> 。c=atoi(s> 。while(c<0|c>7> 。 return c 。main(> struct airline airMAXSIZE="beijing","1","B8571","SUN",3,3,"shanghai","2","S1002","MON",2,2,"london","3","L1003","FRI",1,1。/* 初始化航线信息 */* clrscr(> 。 */ start=air 。for( 。 >switch(menu_select(>>
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 招生政策解读与常见问题解答
- 2024年09月江西浦发银行南昌分行社会招考(923)笔试历年参考题库附带答案详解
- 2024年09月江苏浙商银行连云港分行招考笔试历年参考题库附带答案详解
- 2024年09月江苏2024年江南农商银行校园招考笔试历年参考题库附带答案详解
- 2025年度智能机器人研发生产合作成立公司合同范本4篇
- 2024年09月全国2024华侨永亨银行(中国)校园招考笔试历年参考题库附带答案详解
- 二零二五年度美甲店品牌危机公关与媒体关系管理合同3篇
- 2025年二零二五苗木种植基地承包与品牌合作合同2篇
- 2025年金融科技创新项目委托与采购合同5篇
- 加油站的生态文明与社会和谐
- 【人教版】九年级化学上册期末试卷及答案【【人教版】】
- 四年级数学上册期末试卷及答案【可打印】
- 人教版四年级数学下册课时作业本(含答案)
- 中小学人工智能教育方案
- 高三完形填空专项训练单选(部分答案)
- 护理查房高钾血症
- 项目监理策划方案汇报
- 《职业培训师的培训》课件
- 建筑企业新年开工仪式方案
- 营销组织方案
- 初中英语阅读理解专项练习26篇(含答案)
评论
0/150
提交评论