《《数据结构》课程设计报告模板.doc》由会员分享,可在线阅读,更多相关《《数据结构》课程设计报告模板.doc(23页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、数据结构课程设计报告设计题目 航空客运订票系统 专 业 2011级软件工程 班 级 2011级软件工程 姓 名 杜祥畅 学 号 完成日期 2012-12-29 目 录1. 问题描述 12. 系统设计 13. 数据结构与算法描述24. 测试结果与分析35. 总 结56. 参考文献5附录 程序源代码5(报告正文部分):课程设计题目1. 问题描述航空客运订票的业务活动包括:查询航线、客票预订和办理退票等。设计一个航空客运订票系统,以使上述业务可以借助计算机完成。功能如下:a 查询航线:用户给出终点站名,系统输出航班班次、飞机号、时间及多余票额;b 承办订票业务;c 退票业务。2. 系统设计2.1 设
2、计目标 数据结构课程设计是综合运用数据结构课程中学到的几种典型数据结构以及程序设计语言C语言自行实现一个较为完整的应用系统。 2通过课程设计自己通过系统分析、系统设计、编程调试写实验报告等环节进一步掌握应用系统设计的方法和步骤灵活运用并深刻理解典型数据结构在软件开发中的应用。 3 学会将知识应用于实际的方法提高分析和解决问题的能力增加综合能力。 1熟练掌握链表存储结构及其建立过程和常用操作 2熟练掌握队列的建立过程和常用操作 3学会自己调试程序的方法并掌握一定的技巧。2.2 设计思想设计思想 我们需要建立的是具有能对数据的插入删除检索功能的软件。由于乘客的数量较大且不固定因此选择用链表来保存乘
3、客的基本信息终点站名航班号飞机号飞行时间星期几成员定额余票量等等由于预约人数无法预计队列也应以链表作存储结构。所以我们建立一个可以插入和删除节点的链表并能检索这个链表在必要的时候将链表的内容保存到文件中。系统主要 实现的操作和功能是查询航线订票功能退票功能。要实现这些功能首先要使程序实现查找功能在查找出到有效信息的前提之下通过链表的赋值更新信息和删除退票人信息满足客户的要求。 2.3 系统模块划分表 航空客运订票系表列名数据类型长度可否为空终点站名char10Not null航班号char10Not null飞机号char10Not null飞行周日(星期几)charNot null乘员定额i
4、nt Not null余票量int Not null3. 数据结构与算法描述系统结构图(功能模块图) 航空订票系统 退 出 系 统 浏 览 航 线 信 息 浏 览 订 票 客 户 信 息 办 理 退 票 业 务 办 理 订 票 业 务 查 询 航 线图3-1总体结构设计框图4. 测试结果与分析(可将测试过程抓图说明)(1) 主菜单 (2) 浏览航线信息(3) 办理订票业务(4) 浏览已订票客户信息(5) 查询航班(6) 办理退票业务(7)再次浏览航线信息 5. 总 结这是我们第一次自己去设计一个比较系统的程序,对我们来说也是一个很好的锻炼。首先,为了能写出程序,我将以前所学都好好的巩固了一遍,
5、并且努力的去灵活的运用。起码现在对结构体,链表的操作还是熟练了很多。以前一些很模糊的知识点,通过这次练习,很多都清楚起来。其次,平时都是编写一些单个的操作,这次需要自己写出一个可以实现几个功能的系统性的程序,刚开始时是一头雾水,但经过大家的讨论,自己的摸索,也慢慢找到了方法。这让我体会到,在编写程序时,不仅需要扎实的知识,还要有细心周到的考虑,同学之间的合作也是很重要的。在这两个星期里,我觉得发现了自己还有很多很多的不足,也深刻的体会到了自己还有很多东西要学,而且要真的掌握,还得多用心,多用脑。计算机的确不好学,但只要努力就会有收获。这次程序是写了不少,但还是没能运行出一个正确的结果,不过我相
6、信,经过以后的学习和努力,是肯定能做出一个好的程序来的!6. 参考文献 (包括书籍、论文、网络资料等) 1 严蔚敏等.数据结构(C语言版).北京:清华大学出版社. 2 武法提.基于网络的学习环境的设计. 2004.10.6附录 程序源代码#include #include #include #define MAXSIZE 3 /*定义航线量的最大值*/typedef struct wat_ros char name10;/*姓名*/ int req_amt;/*订票量*/ struct wat_ros *next;qnode,*qptr;typedef struct pqueue /*定义单链
7、队列*/ qptr front;/*等候替补客户名单域的头指针*/ qptr rear;/*等候替补客户名单域的尾指针*/linkqueue;typedef struct ord_ros char name10;/*客户姓名*/ int ord_amt;/*订票量*/ int grade;/*舱位等级*/ struct ord_ros *next;linklist;struct airline char ter_name10;/*终点站名 */ char air_num10;/*航班号*/ char plane_num10;/*飞机号*/ char day7;/*飞行周日(星期几)*/ int
8、 tkt_amt;/*乘员定额*/ int tkt_sur;/*余票量*/ 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,info-tkt_amt
9、,info-tkt_sur);void list()/*打印全部航线信息*/ struct airline *info; int i=0; info=start; printf(终点站名t航班号t飞机号t飞行周日t乘员定额t余票量n); while(iMAXSIZE) display(info); info+; i+; printf(nn);void search()/*根据客户提出的终点站名输出航线信息*/ struct airline *info,*find(); char name10; int i=0; info=start; printf(请输入终点站名:); scanf(%s,na
10、me); while(iter_name) break; info+; i+; if(i=MAXSIZE) printf(对不起,该航线未找到!n); else printf(终点站名t航班号t飞机号t飞行周日t乘员定额t余票量n); display(info); struct airline *find()/*根据系统提出的航班号查询并以指针形式返回*/ struct airline *info; char number10; int i=0; info=start; printf(请输入航班号:); scanf(%s,number); while(iair_num) return info
11、; 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-ord_amt,p-grade); p=p-next; else printf(该航线没有客户信息!n);linklist *insertlink(linklist
12、*head,int amount,char name,int grade)/*增加订票乘员名单域的客户信息*/ linklist *p1,*NEW; p1=head; NEW=(linklist *)malloc(sizeof(linklist); if(!NEW) printf(nOut of memory!n);return NULL; strcpy(NEW-name,name); NEW-ord_amt=amount; NEW-grade=grade; NEW-next=NULL; if(head=NULL)/*若原无订票客户信息*/ head=NEW;NEW-next=NULL; el
13、se head=NEW; NEW-next=p1; return head;linkqueue appendqueue(linkqueue q,char name,int amount)/*增加排队等候的客户名单域*/ qptr 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;
14、void order()/*办理订票业务*/ struct airline *info; int amount,grade; char name10; info=start; if(!(info=find() return;/*根据客户提供的航班号进行查询,如为空,退出该模块*/ printf(请输入您订票的数量:); scanf(%d,&amount); if(amountinfo-tkt_amt)/*若客户订票额超过乘员定票总额,退出*/ printf(n对不起,您输入订票的数量已经超过乘员定额!); return; if(amounttkt_sur)/*若客户订票额末超过余票量,订票成功
15、并等记信息*/ int i; printf(请输入您的姓名(订票客户):); scanf(%s,name); printf(请输入%s票的舱位等级:,name); scanf(%d,&grade); info-order=insertlink(info-order,amount,name,grade);/*在订票乘员名单域中添加客户信息*/ for(i=0;itkt_amt-info-tkt_sur+i+1); info-tkt_sur-=amount;/*该航线的余票量应减掉该客户的订票量*/ printf(n订票成功,祝您旅途愉快!n); else /*若满员或余票额少于订票额,询问客户是
16、否需要进行排队等候*/ char r; printf(n已经没有更多的票,您需要排队等候吗?(需要请按Y,若不需要请按N); fflush(stdin); scanf(%c, &r); if(r=Y|r=y) printf(n请输入您的姓名(排队订票客户):); scanf(%s,name); info-wait=appendqueue(info-wait,name,amount);/*在排队等候乘员名单域中添加客户信息*/ printf(n注册成功!n); else printf(n欢迎您下次再次订购!n); void return_tkt()/*退票模块*/ struct airline
17、*info; qnode *t,*back,*f,*r; int grade,num; linklist *p1,*p2,*head; char cusname10; if(!(info=find() return;/*调用查询函数,根据客户提供的航线进行搜索*/ head=info-order; p1=head; printf(请输入你的姓名(退票客户):); scanf(%s,cusname); while(p1!=NULL) /*根据客户提供的姓名到订票客户名单域进行查询*/ if(!strcmp(cusname,p1-name) break; p2=p1;p1=p1-next; if(
18、p1=NULL) printf(对不起,你没有订过票!n);return;/*若未找到,退出本模块*/ else/*若信息查询成功,删除订票客户名单域中的信息*/ printf(您的订票量为:%dn,p1-ord_amt); printf(请输入您的退票数量:); scanf(%d,&num); if(p1=head) grade=p1-grade; if(p1-ord_amt=num) head=p1-next;free(p1); else if(p1-ord_amtnum) head-ord_amt-=num; else if(p1-ord_amt=num) p2-next=p1-next
19、;free(p1); else if(p1-ord_amtnum) p1-ord_amt-=num; info-tkt_sur+=num; printf(n成功退票!n); info-order=head;/*重新将航线名单域指向订票单链表的头指针 */ f=(info-wait).front;/*f指向排队等候名单队列的头结点*/ r=(info-wait).rear;/*r指向排队等候名单队列的尾结点*/ t=f;/*t为当前满点条件的排队候补名单域*/ while(t) if(info-tkt_sur=info-wait.front-req_amt)/*若满足条件者为头结点*/ int
20、i; info-wait.front=t-next; printf(%s订票成功!n,t-name); for(i=0;ireq_amt;i+)/*输出座位号*/ printf(%s的座位号是:%dn,t-name,(info-tkt_sur)-i); 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)/*若满
21、足条件者不为头结点*/ int i; back-next=t-next; printf(nt%s订票成功!n,t-name); for(i=0;ireq_amt;i+)/*输出座位号*/ printf(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);/*插入到订票客户名单链表中*/ free(t);break; if(f=r) break; int menu_select()/*菜单界面
22、*/ int c; char s20; puts(= - 欢迎使用航空客运订票系统 - n = n n * * * * * * * * * * * * * n n 1.浏览航线信息 n 2.浏览已订票客户信息 n 3.查询航线 n 4.办理订票业务 n 5.办理退票业务 n 6.退出系统 n n * * * * * * * * * * * * * nnn = ); do printf( 请选择并按回车键结束:); scanf(%s,s); c=atoi(s); while(c7); return c;int main(void) 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() case 1:list();break; case 2:prtlink();break; case 3:search();break; case 4:order();break; case 5:return_tkt();break; case 6: exit(0);