数据结构试验报告.docx

上传人:b****6 文档编号:5253211 上传时间:2022-12-14 格式:DOCX 页数:36 大小:342.17KB
下载 相关 举报
数据结构试验报告.docx_第1页
第1页 / 共36页
数据结构试验报告.docx_第2页
第2页 / 共36页
数据结构试验报告.docx_第3页
第3页 / 共36页
数据结构试验报告.docx_第4页
第4页 / 共36页
数据结构试验报告.docx_第5页
第5页 / 共36页
点击查看更多>>
下载资源
资源描述

数据结构试验报告.docx

《数据结构试验报告.docx》由会员分享,可在线阅读,更多相关《数据结构试验报告.docx(36页珍藏版)》请在冰豆网上搜索。

数据结构试验报告.docx

数据结构试验报告

3.航空订票系统:

1.需求分析:

(1)、可以实现航班信息的管理,包括查看航班信息,修改航班信息,删除航班信息;

(2)、可以查询查询航班信息,实现按起点站查询,按终点站查询,按日期查询功能;

(3)、实现订票业务,若有余票,则订购余票,若余票不够,问是否加入排队等待候列;

(4)、实现退票业务,退票后,要查询在排队等待的人,看退票和原来余票量是否满足客户的要求。

2.设计

2.1:

设计思想

(1)、数据结构设计

a、由于每趟航班的信息量比较大,则需要定义一个结构体表示航班的基本信息,航班的基本信息采用链表存储,以便于查询和修改航班信息;

b、至于座位等级,用一个二维数组保存座位号,第一维表示座位等级,第二维表示座位号;每当座位被定时,把这个等级的座位号标记为1,表示座位状态为已定。

当有客户退票时,座位号的标记又变为0,表示状态为未定;

c、用一个链表来存储已经订票的客户的信息,必要的时候可以查看已定客户的信息;

d、再用一个队列来保存等待的客户的信息,当有人退票时,需要查看在等待的用户是否能够订票。

(2)、算法设计

这个程序中没有用到特别的什么算法,主要是对链表和队列操作。

2.2、设计表示

(1)、函数调用关系

main()————>Menuselect()(输出菜单的函数)

选择1:

————>manage()(管理航班信息)

选择1:

——————>store()(存储航班信息)

选择2:

——————>Delete()(删除航班信息)

选择3:

——————>revise()(修改航班信息)

选择4:

——————>check()(查看当前航班信息)————>display()

(输出航班信息)

选择2:

—————>find()(查找航班信息)

选择1:

——————>FindInPlaneNumber()(按航班号查询)

选择2:

——————>FindInStartPoint()(按起点查询)

选择3:

——————>FindInEndPoint()(按终点站查询)

选择4:

——————>FindInDate()(按日期查询)

选择3:

——————>Ordertickets()(订票函数)

———————>WaitForMore()(排队等候)

选择4:

———————>Returntickets()(退票函数)

选择1:

——————>WaitedReturn()(加入过等待用户的退票)

选择2:

——————>UnwaitedReturn()(没有加入过顶戴用户的订票)

(2)、函数接口规格说明

voidListInitiate()//初始化各个指针

voiddisplay(airline*find)//输出航班信息函数

voidstore()//存取航班信息

voidDelete()//删除航班信息

voidrivise()//修改航班信息

voidcheck()//查询航班信息

voidManage()//管理航班系统的函数

structairline*FindInPlaneNumber()//按航班号查询

voidFindInStartPoint()//按起点站查询

voidFindInEndPoint()//按终点站查询

voidFindInDate()//按日期查询

voidfind()//查询函数

voidWaitForMore(charnumber[],intamount,intgrade,charname[],airline*p)//等待更多票的用户

voidOrdertickets()//订票函数

voidWaitedReturn(charname[])//等待过的用户退票

voidUnwaitedReturn(charname[])//没有等待过的用户退票

voidReturntickets()//退票函数

intMenuselect()//显示菜单界面的函数

voidmain()//主函数

3.调试分析

1、关于参数传递的问题:

由于之前学习的c语言中关于参数传递的部分没有学扎实,在传递数组的时候,出现了错误,后来在同学的帮助下,学会了正确的传递参数的方法。

2、关于座位号有没有被定得问题:

开始的时候,直接用加减法来计算座位订购情况,发现在当前边的作为被退的时候,不能正确的输出座位号,后来苦思冥想,想出了用标记的方法来区分座位是否被订购。

3.关于判断等候的人是否可以订票的问题:

开始的时候,没有加循环,导致如果第一个等候的人不能订票,后边的人都不能订票,后来在老师的提示下,加入了一个循环,解决了这个问题。

4、改进思想:

可以再增加部分退票的功能,其实也不难,就是让顾客输入要退票的座位号,然后,把这些作为好的标志修改一下。

5、经验体会:

通过这个程序的实习,完全掌握了对链表和队列的的应运,同时又加深了程序模块化的思想。

6、时间复杂度和空间复杂度:

本程序的时间复杂度和空间复杂度都为O(n)。

4、用户手册

1、程序运行后,首先显示的是主菜单界面;

2、用户可进行选择操作;

3、存取航班是需要按提示的顺序输入航班的信息;删除航班时要输入航班号;修改航班时也是要重新输入航班信息;

4、查询航班时:

按每种方式查询,都需要按照提示输入对应的信息;

5、订票时需要按照提示输入航班号,订票量,舱位等级和姓名

6、退票时也需要输入姓名和有没有加入过排队等候的队列。

5、测试数据及测试结果

6、源程序清单

#include

#include

#include

usingnamespacestd;

#defineMAXSIZE20

typedefstructwait

{

charPlaneNumber[10];//航班号

charname[10];//姓名

intNeedNumber;//总订票量

intWaitNumber;//等待订票量

intgrade;//舱位等级

charOrderedNumber[3][50];//保存已经订票的座位号

intOrderNumber;//已经订票量

structwait*next;

}qnode,*qptr;

structwait*begin;

typedefstructpqueue

{qptrfront;//等候替补客户名单域的头指针

qptrrear;//等候替补客户名单域的属指针

}linkqueue;

typedefstructorder

{

charPlaneNumber[10];//已定票的航班号

charname[10];//客户姓名

intOrdernumber;//订票量

intgrade;//舱位等级

intsitsnumber[3][50];//保存已定座位号

order*next;

}linklist;

structorder*start;

typedefstructairline

{

charPlaneNumber[10];

charPlaneType[10];

charStartPoint[10];

charEndPoint[10];

charDate[10];

charStartTime[10];

charEndTime[10];

intFlyTime;

intGradePrice[3];

intSitsNumber[3];

//intLeftNumber[3];

inttarget[3][100];//标记已经订过的座位号为1

structairline*next;

linklist*order;//指向乘员名单链表的头指针

linkqueuewait;//指向等候域的头指针

}SLNode;

structairline*head;

voidListInitiate()

{

head=(SLNode*)malloc(sizeof(SLNode));

start=(linklist*)malloc(sizeof(linklist));

begin=(qnode*)malloc(sizeof(qnode));

head->next=NULL;

start->next=NULL;

begin->next=NULL;

}

voiddisplay(airline*find)//输出航班信息函数

{

inti;

cout<<"航航起降日起降飞三个等三个等"<

cout<<"班班飞落飞落行级舱位级的乘"<

cout<<"机机机时时时的价格员定额"<

cout<<"号型场场期间间长分别为分别为"<

cout<PlaneNumber<<""<PlaneType<<""<StartPoint<<""<EndPoint<<""<<

find->Date<<""<StartTime<<""<EndTime<<""<FlyTime<<""<GradePrice[0]<<

","<GradePrice[1]<<","<GradePrice[2]<<""<SitsNumber[0]<<","<SitsNumber[1]<<

","<SitsNumber[2]<<""<

cout<<"头等舱的座位号是:

1--"<SitsNumber[0]<

cout<<"头等舱剩余票座位号是:

"<

for(i=0;iSitsNumber[0];i++)

{

if(find->target[0][i]==0)

cout<

}

cout<

cout<<"公务舱的座位号是:

"<SitsNumber[0]<<"--"<SitsNumber[0]+find->SitsNumber[1]<

cout<<"公务舱剩余票座位号是:

"<

for(i=find->SitsNumber[0];i<(find->SitsNumber[0]+find->SitsNumber[1]);i++)

{

if(find->target[1][i]==0)

cout<

}

cout<

cout<<"经济舱的座位号是:

"<SitsNumber[0]+find->SitsNumber[1]<<"--"<<

find->SitsNumber[0]+find->SitsNumber[1]+find->SitsNumber[2]<

cout<<"经济舱剩余票座位号是:

"<

for(i=find->SitsNumber[0]+find->SitsNumber[1];iSitsNumber[0]+find->SitsNumber[1]+find->SitsNumber[2];i++)

{

if(find->target[2][i]==0)

cout<

}

cout<

}

voidmanageselect()

{

cout<<"******************************************"<

cout<<"1.存取航班"<

cout<<"******************************************"<

cout<<"请按以上方式选择:

"<

}

voidstore()//存取航班信息

{

inti;

structairline*p,*q;

p=(SLNode*)malloc(sizeof(SLNode));

cout<<"请输入要存取的航班信息:

"<

cout<<"航班号为:

"<

cin>>p->PlaneNumber;

cout<<"航班类型为:

"<

cin>>p->PlaneType;

cout<<"起飞机场为:

"<

cin>>p->StartPoint;

cout<<"降落机场为:

"<

cin>>p->EndPoint;

cout<<"日期为:

"<

cin>>p->Date;

cout<<"起飞时间为:

"<

cin>>p->StartTime;

cout<<"降落时间为:

"<

cin>>p->EndTime;

cout<<"飞行时长为:

"<

cin>>p->FlyTime;

cout<<"头等舱的价格是:

"<

cin>>p->GradePrice[0];

cout<<"公务舱的价格是:

"<

cin>>p->GradePrice[1];

cout<<"经济舱的价格是:

"<

cin>>p->GradePrice[2];

cout<<"头等舱的座位数是:

"<

cin>>p->SitsNumber[0];

cout<<"公务舱的座位数是:

"<

cin>>p->SitsNumber[1];

cout<<"经济舱的座位数是:

"<

cin>>p->SitsNumber[2];

for(i=0;iSitsNumber[0];i++)

p->target[0][i]=0;

for(i=p->SitsNumber[0];iSitsNumber[0]+p->SitsNumber[1];i++)

p->target[1][i]=0;

for(i=p->SitsNumber[0]+p->SitsNumber[1];iSitsNumber[0]+p->SitsNumber[1]+p->SitsNumber[2];i++)

p->target[2][i]=0;

p->next=head->next;

head->next=p;

q=head->next;

cout<<"现有的航班是:

"<

while(q)

{

display(q);

q=q->next;

}

}

voidDelete()

{

structairline*p,*s;

charnumber[10];

p=head->next;

s=head;

cout<<"请输入要删除的的航班号:

"<

cin>>number;

while(p)

{

if((!

strcmp(number,p->PlaneNumber))&&s->next==p)

s->next=p->next;

s=s->next;

p=p->next;

}

}

voidrivise()

{

charnumber[10];

structairline*p;

p=head->next;

cout<<"请选择要修改的航班号"<

cin>>number;

while(p)

{

if(!

strcmp(number,p->PlaneNumber))

{

cout<<"请输入要修改的航班信息:

"<

cout<<"航班号为:

"<

cin>>p->PlaneNumber;

cout<<"航班类型为:

"<

cin>>p->PlaneType;

cout<<"起飞机场为:

"<

cin>>p->StartPoint;

cout<<"降落机场为:

"<

cin>>p->EndPoint;

cout<<"日期为:

"<

cin>>p->Date;

cout<<"起飞时间为:

"<

cin>>p->StartTime;

cout<<"降落时间为:

"<

cin>>p->EndTime;

cout<<"飞行时长为:

"<

cin>>p->FlyTime;

cout<<"头等舱的价格是:

"<

cin>>p->GradePrice[0];

cout<<"公务舱的价格是:

"<

cin>>p->GradePrice[1];

cout<<"经济舱的价格是:

"<

cin>>p->GradePrice[2];

cout<<"头等舱的座位数是:

"<

cin>>p->SitsNumber[0];

cout<<"公务舱的座位数是:

"<

cin>>p->SitsNumber[1];

cout<<"经济舱的座位数是:

"<

cin>>p->SitsNumber[2];

}

p=p->next;

}

}

voidcheck()

{

structairline*q;

q=head->next;

cout<<"现在的航班信息为:

"<

while(q!

=NULL)

{

display(q);

q=q->next;

}

}

voidManage()//管理航班系统的函数

{

inti=0,flag=0;

manageselect();

while(!

flag)

{

cin>>i;

if(i!

=1&&i!

=2&&i!

=3&&i!

=4&&i!

=5)

{

cout<<"选择错误,请重新输入"<

cin>>i;

}

else

switch(i)

{

case1:

store();manageselect();break;

case2:

Delete();manageselect();break;

case3:

rivise();manageselect();break;

case4:

check();manageselect();break;

case5:

flag=1;

}

}

}

structairline*FindInPlaneNumber()//按航班号查询

{

airline*find,*p;

charnumber[10];

find=head->next;

p=head;

cout<<"请输入飞机号:

"<

cin>>number;

while(find)

{

if(!

strcmp(number,find->PlaneNumber))

{

display(find);

returnfind;

}

}

}

voidFindInStartPoint()//按起始地点查询

{

airline*find,*p;

charpoint[10];

find=head->next;

p=head;

cout<<"请输入起点站名字:

"<

cin>>point;

while(find)

{

if(!

strcmp(point,find->StartPoint))

{

display(find);

}

if(find->next==NULL&&(strcmp(point,p->StartPoint)))

{

cout<<"对不起,没有找到你所需要的航班"<

}

find=find->next;

p=p->next;

}

}

voidFindInEndPoint()//按终点站查询

{

airline*find,*p;

charpoint[10];

find=head->next;

p=head;

cout<<"请输入终点站名:

"<

cin>>point;

while(find)

{

if(!

strcmp(point,find->EndPoint))

{

display(find);

}

if(find->next==NULL&&(strcmp(point,p->StartPoint)))

cout<<"对不起,没有找到你所需要的航班"<

find=find->next;

p=p->next;

}

}

voidFindInDate()//按日期查询

{

airline*find,*p;

charDate[10];

find=head->next;

p=head;

cout<<"请输入航班日期:

"<

cin>>Date;

while(find)

{

if(!

strcmp(Date,find->Date))

{

display(find);

}

if(find->next==NULL&&(strcmp(Date,find->Date)))

cout<<"对不起,没有找到你所需要的航班"<

find=find->next;

p=p->next;

}

}

voidfind()//查询函数

{

inti;

cout<<"******************************************"<

cout<<"1.按航班号查询"<

cout<<"******************************************"<

cout<<"请按以上方式选择:

"<

cin>>i;

if(i!

=1&&i!

=2&&i!

=3&&i!

=4)

{

cout<<"选择错误,请重新输入"<

cin>>i;

}

else

{

switch(i)

{

case

(1):

FindInPlaneNumb

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

当前位置:首页 > PPT模板 > 图表模板

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

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