武汉长江工商学院数据结构课程设计报告.docx

上传人:b****6 文档编号:5892776 上传时间:2023-01-01 格式:DOCX 页数:18 大小:286.71KB
下载 相关 举报
武汉长江工商学院数据结构课程设计报告.docx_第1页
第1页 / 共18页
武汉长江工商学院数据结构课程设计报告.docx_第2页
第2页 / 共18页
武汉长江工商学院数据结构课程设计报告.docx_第3页
第3页 / 共18页
武汉长江工商学院数据结构课程设计报告.docx_第4页
第4页 / 共18页
武汉长江工商学院数据结构课程设计报告.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

武汉长江工商学院数据结构课程设计报告.docx

《武汉长江工商学院数据结构课程设计报告.docx》由会员分享,可在线阅读,更多相关《武汉长江工商学院数据结构课程设计报告.docx(18页珍藏版)》请在冰豆网上搜索。

武汉长江工商学院数据结构课程设计报告.docx

武汉长江工商学院数据结构课程设计报告

武汉长江工商学院

计算机科学与技术系

 

数据结构课程设计

 

项目名称:

航空客运订票系统

学生姓名:

别尔得汉.哈德开西

学号:

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<<"乘员定额:

"<data.sum;

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<<"航班号为:

"<data.flight<

cout<<"飞机号为:

"<data.num<

cout<<"飞行日期为:

"<data.time<

cout<<"余票量为:

"<data.odd<

}

}

/*------------------------------------订票管理----------------------------------*/

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);

}

}

}

数据结构课程设计

成绩评定

 

成绩评定:

(百分制)

指导教师签字:

检查时间:

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学

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

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