武汉长江工商学院数据结构课程设计报告.docx
- 文档编号:5892776
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:18
- 大小:286.71KB
武汉长江工商学院数据结构课程设计报告.docx
《武汉长江工商学院数据结构课程设计报告.docx》由会员分享,可在线阅读,更多相关《武汉长江工商学院数据结构课程设计报告.docx(18页珍藏版)》请在冰豆网上搜索。
武汉长江工商学院数据结构课程设计报告
武汉长江工商学院
计算机科学与技术系
数据结构课程设计
项目名称:
航空客运订票系统
学生姓名:
别尔得汉.哈德开西
学号:
1011028319
班级:
11801
指导教师:
刘莹胡成松
2013年1月1日
1.需求分析
本订票系统能够实现全部航线信息的录入功能、订票客户信息的查询功能、订票功能和退票功能。
具体分析如下:
1)航班信息的录入功能
航班信息的录入功能包含:
终点站名、航班号、飞机号、飞行日期(星期几)、乘员定额、余票量、已经订票的客户名单(包括姓名、订票量)以及等候替补的客户名单(包姓名、所需票量)。
2)订票客户信息的查询功能
订票客户信息的查询功能:
根据客户提供的终点站名进行查询,并且可以输出以下信息:
航班号、飞机号、飞行日期和余票量。
订票功能
订票功能:
根据客户提出的要求(航班号、订票数量)查询该航班票额情况,若尚有余票,则为客户办理订票手续;若已满员或余票额少于定票额,则询问客户是否愿意排队等候,若愿意,系统则自动登记排队候补。
退票功能
退票功能:
根据客户提供的情况(航班、姓名),询问退票张数,然后为客户办理退票手续。
接着系统自动查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其他排队候补的客户。
具体功能模块图如图1-1所示,
退出
图1-1航空客运订票系统功能模块图
2.数据结构设计及用法说明
本系统定义了三个结构体,一个表示已定票客户名单,一个表示等候替补的客户名单,还有一个为航班信息。
同时在结构体之后还定义了一个单链表。
在已定票客户名单中,name1存放客户姓名,reserve表示订票量,具体如下:
typedefstruct//已经订票的客户名单
{
charname1[20];//客户姓名
intreserve;//定票量
}name;
在等候替补的客户名单中,name数组用来存放等候客户姓名,necessary存放所需票量的数量,具体如下:
typedefstruct//等候替补的客户名单
{
charname[20];//客户姓名
intnecessary[20];//所需票量
}wai;
在航班信息当中,destination表示终点站名,flight表示航班号,num为飞机号,time表示飞行日期,sum表示乘员定额,odd表示余票量,waitno表示已经有的候票客户人数;同时还定义了订票客户数组namenamelist[50]、以及候票客户数组waiwait[50];具体如下:
structairline//航班信息,
{
chardestination[maxsize];//终点站名
charflight[20];//航班号
intnum;//飞机号
chartime;//飞行日期(星期几)
intsum;//乘员定额
intodd;//余票量
namenamelist[50];//订票客户数组
waiwait[50];//候票客户数组
intwaitno;//已经有的候票客户人数
}airplane;
3详细设计和编码
3.1查询模块
进入订票系统,此时有四个功能模块供用户选择,此时是查询功能,这是按目的地查询,根据用户所提供要到的目的地,当所提供目的地与已经录入的航班信息所录入的终点站名相同时,查找成功同时显示所查询的航班的信息,当查找失败是,系统会提示用户输入有误,并要重新查询。
图3-1查询功能流程图
3.2订票模块
进入订票模块的时候,系统提示输入终点站名,客户姓名和所定票量,当用户要订的票数小于所在航班的余票数时,直接给用户订票,并提示订票成功。
当用户要订的票数大于所在航班的余票数时,系统会给出提示,询问用户目前余票量不足,是否进行候补,如果用户选择候补时,就先把现有的票订下,并保存在已订票客户中,剩下的没有订的票就保存在候补客户中。
若没有找到对应的航班号,提示航班号错误,重新输入。
图3-2订票模块流程图
3.3退票模块
进入退票模块时,系统会先让用户输入航班号,并利用同样的查找思路对航班号进行查找,查找失败则提示没有您要找的航班号,查找成功时,然后输入姓名,利用同样的查找方法,查找失败则提示没有您要找的姓名,查找成功则输入要退票的张数,当信息都输入正确时,系统会提示退票成功。
图3-3退票模块流程图
4.实验结果
该系统包括对航班信息的录入creatlist(linklist*l),航班信息的查询seek(linklist*l),订票功能管理booking(linklist*l),以及退票功能模块cancel(linklist*l),具体如下:
4.1航班信息录入
当用户选择1.录入航班信息时,系统会提示用户输入终点站名、航班号、飞机号、飞行日期,同时余票量也是手动输入,并且在输入完成后会显示乘员定额,如图4-1所示:
图4-1航班信息录入图
4.2航班信息查询
根据用户提供的站名进行查找,当查找失败的时候提示用户该航班不存在,否则,输出航班号、飞机号、飞行日期,以及余票量,如图4-2
图4-2查询功能模块图
4.3订票模块
当用户选择3.订票功能管理时,系统提示用户输入终点站,姓名、所定票量,该功能是根据终点站名查找订票航班,当订票数大于余票数时,系统会询问用户是否进入候补状态,询问是否排队等候,当有剩余票时,提示订票成功,如图4-4
图4-3订票功能模块图
图4-4订票功能模块图
4.4退票管理
该功能主要是通过查找要退票的航班,查找到已定客户名单和其详细信息,实现了对于用户已定票数以及用户名的删除,当删除成功的时候,提示用户删除失败,如图4-5
图4-5退票功能模块图
5.体会
航空客运订票系统是对于航空公司订票系统的一种小型模拟,它包括对航班信息的录入,客户信息的查询,订票功能管理,以及取消订票这四个功能模块。
这是继开学来之后第二门课程设计,当然在这之中还是有遇到很多困难。
在做第一门学生信息管理系统的时候,我对于画流程图以及对算法的描述的时候,总是不简洁,而且重点也没说到,因此,在这次做课程设计的时候,对于画流程图和对算法的描述分析格外细心。
不仅仅如此,这次的课程设计题目蕴含了对系统功能分析,即该系统包含哪些功能,怎么去实现它,以及对于这学期所需知识的一个总结。
通过这次课程设计,让我对于结构体的定义,单链表的定义、使用,以及循环语句的使用有了更深入的了解,同时对于做课程设计的第一步有了全新的认识,只要能将所需知识更好使用就可以做到想做的东西。
6.参考文献
[1]雷于生,胡成松.C语言程序设计.北京:
高等教育出版社,2009
[2]严蔚敏,吴伟江。
数据结构。
北京:
清华大学出版社,1997
[3]谭浩强编著.C语言程序设计.北京:
清华大学出版社,1991
[4]谭浩强,张基温,唐永炎编著.C语言程序设计教程.北京:
高等教育出版社,1992
[5]黄扬铭.数据结构.北京:
科学出版社,2001
7.源代码清单
#include
#include
#include
#include
#definemaxsize50
typedefstruct//已经订票的客户名单
{
charname1[20];//客户姓名
intreserve;//定票量
}name;
typedefstruct//等候替补的客户名单
{
charname[20];//客户姓名
intnecessary;//所需票量
}wai;
structairline//航班信息,
{
chardestination[maxsize];//终点站名
charflight[20];//航班号
intnum;//飞机号
chartime;//飞行日期(星期几)
intsum;//乘员定额
intodd;//余票量
namenamelist[50];//订票客户数组
waiwait[50];//候票客户数组
intwaitno;//已经有的候票客户人数
}airplane;
typedefairlineelemtype;
typedefstructlnode//建立单链表
{
elemtypedata;
structlnode*next;
}linklist;
voidcreatlist(linklist*&l);
voidseek(linklist*l);
voidbooking(linklist*l);
voidcancel(linklist*&l);
/*-----------------------------------主菜单--------------------------*/
intmenu()
{
inty;
cout<<"\t-------------------------------------------------------------"< cout<<"\t----------------------航空客运订票系统---------------------"< cout<<"\n\n\t\t\t1.录入航班信息"< cout<<"\n\n\t\t\t2.查询航班信息"< cout<<"\n\n\t\t\t3.订票功能管理"< cout<<"\n\n\t\t\t4.退票办理"< cout<<"\n\n\t\t\t0.退出"< cout<<"\n\t-------------------------------------------------"< cout<<"\n\t---------------------------------------------------"< do { cout<<"\t请正确选择: "; cin>>y; }while(y<1||y>4); returny; } /*----------------------------------尾插法建表----------------------*/ voidcreatlist(linklist*&l) { inti,m,n,j; linklist*s,*r; l=(linklist*)malloc(sizeof(linklist));//创建头结点 r=l;//r始终指向尾结点,开始时指向头结点 cout<<"请输入航班数目: "< cin>>m; cout<<"请输入航班信息"< for(i=0;i { s=(linklist*)malloc(sizeof(linklist)); s->data.waitno=0;//侯票的人数默认为0 cout<<"请输入终点站名: "; cin>>s->data.destination; cout<<"请输入航班号: "; cin>>s->data.flight; cout<<"请输入飞机号: "; cin>>s->data.num; cout<<"请输入飞行日期: "; cin>>s->data.time; cout<<"请输入余票量: "; cin>>s->data.odd; cout<<"请输入已订客户数: "; cin>>n; //s->data.sum=0; for(j=0;j { cout<<"客户姓名: "; cin>>s->data.namelist[j].name1; cout<<"客户订票量: "; cin>>s->data.namelist[j].reserve; s->data.sum=s->data.namelist[j].reserve;//修改航班的已订票客户人数 } cout<<"乘员定额: "< r->next=s; r=s; } r->next=NULL; } /*--------------------------------按终点站名查找----------------------------------*/ voidseek(linklist*l) { linklist*p=l->next;//p指向第1个数据结点 charx[maxsize]; cout<<"请输入要要查找的站名: "; cin>>x; while(p! =NULL&&strcmp(p->data.destination,x)! =0)//当查询的终点站名不存在 p=p->next; //i++; if(p==NULL) cout<<"该航班不存在! "< else { cout<<"该航班信息如下: "< cout<<"航班号为: "< cout<<"飞机号为: "< cout<<"飞行日期为: "< cout<<"余票量为: "< } } /*------------------------------------订票管理----------------------------------*/ voidbooking(linklist*l) { linklist*p=l->next;//p指向第一个数据元素 chard[50],m[20],t;intticket,j=0; cout<<"请输入终点站名: "< cin>>d; cout<<"您的姓名: "< cin>>m; cout<<"您所定票量: "< cin>>ticket; while(p! =NULL&&strcmp(p->data.destination,d)! =0)//根据终点站名查找订票航班 p=p->next; if(p) { if(p->data.odd { cout<<"sorry,余票量不足,您是否排队等候? Y/N"< cin>>t; if(t=='Y'||t=='y') { while(p->data.wait[j].necessary! =0)//判断候补乘客数组是否为空 j++; strcpy(p->data.wait[j].name,m);//将输入的人的名字存放到候补乘客中 p->data.wait[j].necessary=ticket-p->data.odd;//候补乘客所需票量等于乘客所需票量减去余票量 p->data.odd=0; } else exit(0); } else { while(p->data.wait[j].necessary! =0)//判断已定票客户订票量是否为0 j++; strcpy(p->data.wait[j].name,m); p->data.wait[j].necessary=ticket;//候补客户所需票量等于用于自己输入票量 p->data.odd-=ticket;//余票量等于先得余票量减去客户订的票数 } } cout<<"订票成功! "< } /*------------------------------取消订票------------------------------------*/ voidcancel(linklist*&l) { linklist*p=l->next; charname2[20],time1[20],flight1[20]; inti=0,j; cout<<"请输入退票客户信息: "< cout<<"您的姓名: "; cin>>name2; cout<<"您的飞行日期: "; cin>>time1; while(p! =NULL&&strcmp(p->data.flight,flight1)! =0)//查找退票航班 p=p->next; if(p) { while(strcmp(p->data.namelist[i].name1,name2))//查找具体的退票乘客信息 i++; for(;! p->data.namelist[i].name1;i++)//从该航班的已订票数组中删除此乘客 { strcpy(p->data.namelist[i].name1,p->data.namelist[i+1].name1); p->data.namelist[i].reserve=p->data.namelist[i+1].reserve;//删除前一名已定客户名单 p->data.odd+=p->data.sum;//修改余票量 } if(p->data.wait[0].name)//判断候票乘客数组是否为空 for(j=0;p->data.odd>p->data.wait[j].necessary;j++) { strcpy(p->data.namelist[i+j].name1,p->data.wait[j].name);//将候补客户名单复制给已定客户名单 p->data.namelist[i+j].reserve=p->data.wait[j].necessary;//已定客户票量等于候补客户所需票量 } } cout<<"退票成功! "; } voidmain() { linklist*l; for(;;) { switch(menu()) { case1: creatlist(l);break; case2: seek(l);break; case3: booking(l);break; case4: cancel(l);break; case5: exit(0); } } } 数据结构课程设计 成绩评定 成绩评定: (百分制) 指导教师签字: 检查时间:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 武汉 长江 工商学院 数据结构 课程设计 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)