ImageVerifierCode 换一换
格式:DOCX , 页数:34 ,大小:130.79KB ,
资源ID:29030589      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/29030589.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构报告.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构报告.docx

1、数据结构报告 成都理工大学工程技术学院课程设计报告设计名称: 数据结构课程设计 姓 名: 赵 磊 学 号: 201320201112 专业班级: 计算机科学与技术 系 (院): 电子信息与计算机工程系 设计时间: 2013.05.04 设计地点: 成都理工大学工程技术学院 指导教师评语: 签名: 年 月 日 目录 一需求分析 3二概要设计 4三 详细设计 5四 运行结果 14五 总结 16致谢 17参考文献 18附录: 19一需求分析要实现本项目的功能,需要熟练掌握链表和队列。要求实现的基本功能比较简单,只有查询航线,订票和退票业务,以及余票不足等待,这些功能都是数据结构中的内容。制作该系统还

2、要熟练掌握C语言的语法知识,尤其是对结构体,字符串,指针以及函数的所有操作。二概要设计因为,要对航班进行管理,首先要对航线进行初始化,这样才能够实现对订票和退票进行相应的操作。这个程序里面包括有多个结构体,其功能主要是服务数据结构的各个算法。定义实现功能的主要函数有:打印每条航线的基本信息的函数display();打印全部航线信息的函数list();增加排队等候的客户名单域的结构体类型函数appendqueue();根据客户提出的终点站名输出航线信的函数ter();根据系统提出的航班号查询并以指针形式返回的结构体类型的指针函数 *find();打印订票乘员名单域的客户名单信的函数prtlink

3、();订票系统函数order()和退票系统函数return_tkt()是本系统的重点;之后按要求有按剩余票数排序的函数void sort_tkt();之后就是主界面,选择要进行的相应的操作函数sort_tkt();在进行订票和退票时,采用链式存储的形式,运用链表,订票中每个元素的存储位置都能计算到,方便的增加节点个数,在进行退票时就是对链表节点的删除。链表的插入删除相对于线性表来说更简单,更方便。本系统会频繁的对节点进行插入和删除,所以采用链表是最优选择。当余票量不足以满足购票人的需求时,本程序就运用队列进行排队等候。3详细设计1.结构图 2.定义结构体struct client_list /

4、 客户名单 char client_name20 ; /客户姓名 int book_the_ticket_num; /订票数量 int grade; /舱位等级 struct client_list *next;typedef struct wait_liat char wait_name20; int req_amt; struct wait_liat *next;qnode,*qptr;struct linkqueue qptr front; /等候替补客户名单域的头指针 qptr rear; /等候替补客户名单域的属指针;struct airline char ter_name10;/终

5、点站名 char flight10;/航班号 char plane_num10;/飞机号 char date7;/飞行日期(星期几) int tkt_amt;/乘员定额 int seats;/余票量 char time15; /飞行时长 int air_fare; / 机票价格 char take_off_time10; /起飞时间 struct client_list *order;/乘员名单域,指向乘员名单链表的头指针 struct linkqueue wait;/等候替补的客户名单域,分别指向排队等候名单队头队 尾的指针lineinfo;struct linkqueue appendqu

6、eue(struct linkqueue q,char name,int amount)/增加排队等候的客户名单域 qptr new1; new1=(qptr)malloc(sizeof(qnode); strcpy(new1-wait_name,name); new1-req_amt=amount; new1-next=NULL; if(q.front=NULL)/若原排队等候客户名单域为空 q.front=new1; else q.rear-next=new1; q.rear=new1; return q;这些结构体的作用,一是用来让本系统中不同的数据类型一同使用时更加方便,另一方面也是为

7、了运用上数据结构,让数据结构中的算法运到笨系统中来,这个主要运用数据结构中的链表和队列这两种结构。3.主函数设计:void main() int c; start=air; while(1) change(); printf(请选择:); scanf(%d,&c); switch(c) / 选择相关的功能 case 1: list();break; case 2: prtlink();break; case 3: ter();break; case 4: order();break; case 5: return_tkt();break; case 6: sort_tkt();break; c

8、ase 0: printf(n欢迎再次使用本系统,再见!n); exit(0); default: printf(输入有误,请重新输入!n); getchar(); 函数的主要功能是作为程序运行的接口,进行相应的选择,进行具体的各项操作。4.打印基本航线信息的函数:void display(struct airline *info)/打印每条航线的基本信息printf(%8s %3s %s %4s %6d %5d %8s %5d %sn, info-ter_name,info-flight,info-plane_num,info-date,info-tkt_amt,info-seats,inf

9、o-time,info-air_fare,info-take_off_time); 该函数主要是打印航线的基本消息,该函数在整个程序中使用的频率最高,所以把它单独用函数的形式写出来,目地是不要重复累赘,5.打印全部航线信息的函数:void list()/打印全部航线信息 struct airline *info; int i=0; info=start; printf(终点站名*航班号*飞机号*飞行日期*乘员定额*余票量*飞行时间*票价*起飞时间n); while(iwait_name,name); new1-req_amt=amount; new1-next=NULL; if(q.front

10、=NULL)/若原排队等候客户名单域为空 q.front=new1; else q.rear-next=new1; q.rear=new1; return q;该函数主要配合订票功能中,余票不足,让客户等待的函数使用,使用队列让等待购票。7.根据客户提出的终点站名输出航线信息:void ter() struct airline *info,*find(); char name10; int i=0; info=start; printf(请输入终点站名:); scanf(%s,name); while(iter_name) break; info+; i+; if(i=6) printf(对不

11、起,该航线未找到!n); else printf(终点站名*航班号*飞机号*飞行日期*乘员定额*余票量*飞行时间*票价*起飞时间n); display(info); 该函数主要是为了让用户订票时,一目了然,票面情况。8.订票和退票void order()/订票 struct airline *air_line; int amount,grade; char name10; air_line=start; if(!(air_line=find() exit(0); printf(请输入你订票所需要的数量:); scanf(%d,&amount); if(amountair_line-tkt_am

12、t) /若客户订票额超过乘员定票总额,退出 printf(n对不起,您输入的票的数量已经超过乘员定额!); return; else if(amountseats)/若客户订票额末超过余票量,订票成功并等记信息 int i; printf(请输入您的姓名(订票客户):); scanf(%s,name); printf(请输入%s票的舱位等级:,name); scanf(%d,&grade); printf(nn机票生成中nn); air_line-order=insertlink(air_line-order,amount,name,grade);/在订票乘员名单域中添加客户信息 printf

13、(姓名: ); printf(%sn,name); printf(终点站: ); printf(%sn,air_line-ter_name); printf(机票价格: ); printf(%dn,air_line-air_fare); printf(飞行日期: ); printf(%sn,air_line-date); printf(起飞时间: ); printf(%sn,air_line-take_off_time); printf(您的座位号为:); for(i=0;itkt_amt-air_line-seats+i); printf(n); air_line-seats-=amount

14、; /余票再减去订购的票 printf(n祝您乘坐愉快!n); else /若满员或余票额少于订票额,询问客户是否需要进行排队等候 char r; printf(n已经没有更多的票,您需要排队等候吗?(Y/N); getchar(); scanf(%c,&r); if(r=Y|r=y) printf(n请输入您的姓名(排队订票客户):); scanf(%s,name); air_line-wait=appendqueue(air_line-wait,name,amount);/在排队等候乘员名单域中添加客户信息 printf(n注册成功!n); else printf(n欢迎您下次再次订购!n

15、);void return_tkt() /退票 struct airline *info; qnode *t,*back,*f,*r; int grade; struct client_list *p1,*p2,*head; char cusname10; if(!(info=find() return; /调用查询函数,根据客户提供的航线进行搜索 head=info-order; p1=head; printf(请输入你的姓名(退票客户):); scanf(%s,cusname); while(p1!=NULL) /根据客户提供的姓名到订票客户名单域进行查询 if(!strcmp(cusna

16、me,p1-client_name) break; p2=p1;p1=p1-next; if(p1=NULL) printf(对不起,你没有订过票!n); else /若信息查询成功,删除订票客户名单域中的信息 if(p1=head) head=p1-next; else p2-next=p1-next; info-seats+=p1-book_the_ticket_num; grade=p1-grade; printf(%s成功退票!n,p1-client_name); free(p1); info-order=head; /重新将航线名单域指向订票单链表的头指针 f=(info-wait)

17、.front; /f指向排队等候名单队列的头结点 r=(info-wait).rear; /r指向排队等候名单队列的尾结点 t=f; /t为当前满点条件的排队候补名单域 while(t) if(info-seats=info-wait.front-req_amt)/若满足条件者为头结点 int i; info-wait.front=t-next; printf(%s订票成功!n,t-wait_name); for(i=0;ireq_amt;i+)/*输出座位号*/ printf(%s的座位号是:%dn,t-wait_name,(info-seats)-i); info-seats-=t-req

18、_amt; info-order=insertlink(info-order,t-req_amt,t-wait_name,grade);/插入到订票客户名单链表中 free(t); break; back=t; t=t-next; if(info-seats)=(t-req_amt)&t!=NULL)/若满足条件者不为头结点 int i; back-next=t-next; printf(%s订票成功!n,t-wait_name); for(i=0;ireq_amt;i+)/*输出座位号*/ printf(s seat number is:%dn,t-wait_name,(info-seats

19、)-i); info-seats-=t-req_amt; info-order=insertlink(info-order,t-req_amt,t-wait_name,grade);/插入到订票客户名单链表中 free(t); break; if(f=r) break; 该处是这个系统的核心部位,系统的其他部分全部为这两个部分服务。9.按剩余票数排序:void sort_tkt()/按剩余票数排序 int j; struct airline t,*info,*p,*q; p=info=air; for(p=info;(p+1)-seats;p+) for(q=p+1;q-seats;q+) i

20、f(p-seatsseats) t=*p; *p=*q; *q=t; printf(终点站名*航班号*飞机号*飞行日期*乘员定额*余票量*飞行时间*票价*起飞时间n); for(j=0;j6;j+) display(info); info+; 10.订票、退票、等待、以及余票排序的关系流程图4运行结果1. 菜单2.浏览航线信息3.查询航线信息4.订票5.排队等待6.浏览已订票客户信息7.退票8.查看剩余票数并排序5总结 课程设计结束了,在这次的课程设计中不仅检验了我所学习的知识,也培养了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情。在设计过程中,与同学分工设计,和同学们相互探讨,

21、相互学习,相互监督。学会了合作,学会了运筹帷幄,学会了宽容,学会了理解,也学会了做人与处世。 课程设计是我们专业课程知识综合应用的实践训练,着是我们迈向社会,从事职业工作前一个必不少的过程。 通过制作航空客运订票系统,综合运用本专业所学课程的理论和实际知识进行一次实际训练,从而培养和提高我们独立工作能力,巩固了对数据结构等课程所学的内容,掌握怎么运用数据结构的有关知识来解决实际问题,同时各科相关的课程都有了全面的复习,独立思考的能力也有了提高。在这次设计过程中,体会了学以致用、突出自己劳动成果的喜悦心情,从中发现自己平时学习的不足和薄弱环节,从而加以弥补。致谢在此感谢我的老师.;老师循循善诱的

22、教导和不拘一格的思路给予我无尽的启迪,这次课程设计的每个实验细节和每个数据,都离不开老师您的细心指导。而您开朗的个性和宽容的态度,帮助我能够很顺利的完成了这次课程设计。同时感谢对我帮助过的同学们,谢谢你们对我的帮助和支持,让我感受到同学的友谊。 由于本人的设计能力有限,在设计过程中难免出现错误,恳请老师们多多指教,我十分乐意接受你们的批评与指正,本人将万分感谢。参考文献1郑莉 等编著C+语言程序设计(第四版)北京:清华大学出版社2. 徐孝凯 贺桂英编著数据结构(C语言描述北京:清华大学出版社3. 杨明广 钟黔川编著C程序设计教程四川:四川科学技术出版社附录:/*航空管理系统源代码*/#incl

23、ude #include #include struct client_list / 客户名单 char client_name20 ; /客户姓名 int book_the_ticket_num; /订票数量 int grade; /舱位等级 struct client_list *next;typedef struct wait_liat char wait_name20; int req_amt; struct wait_liat *next;qnode,*qptr;struct linkqueue qptr front; /等候替补客户名单域的头指针 qptr rear; /等候替补客

24、户名单域的属指针;struct airline char ter_name10;/终点站名 char flight10;/航班号 char plane_num10;/飞机号 char date7;/飞行日期(星期几) int tkt_amt;/乘员定额 int seats;/余票量 char time15; /飞行时长 int air_fare; / 机票价格 char take_off_time10; /起飞时间 struct client_list *order;/乘员名单域,指向乘员名单链表的头指针 struct linkqueue wait;/等候替补的客户名单域,分别指向排队等候名单

25、队头队 尾的指针lineinfo;struct airline *start;struct airline air6=A,1111,001,周二,30,15,24h,1520,03:06,B,2222,002,周三,40,10,35h,1258,14:00,C,3333,003,周四,50,14,32h,1469,21:10,D,4444,004,周五,60,58,12.5h,2369,09:15,E,5555,005,周六,60,34,23.5h,924,12:50,F,6666,006,周日,60,20,40h,2460,18:30;void display(struct airline

26、*info)/打印每条航线的基本信息 printf(%8s %3s %s %4s %6d %5d %8s %5d %sn, info-ter_name,info-flight,info-plane_num,info-date,info-tkt_amt,info-seats,info-time,info-air_fare,info-take_off_time);void list()/打印全部航线信息 struct airline *info; int i=0; info=start; printf(终点站名*航班号*飞机号*飞行日期*乘员定额*余票量*飞行时间*票价*起飞时间n); while(i6) display(info); info+; i+; printf(nn);struct linkqueue appendqueue(st

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1