数据结构课程设计航班查询与检索含代码流程图输出结果.docx
《数据结构课程设计航班查询与检索含代码流程图输出结果.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计航班查询与检索含代码流程图输出结果.docx(19页珍藏版)》请在冰豆网上搜索。
数据结构课程设计航班查询与检索含代码流程图输出结果
算法与数据结构实验报告
航班查询与检索
题目:
航班查询与检索
指导老师:
组长:
成员:
一:
航班信息的查询与检索
按时间查询:
开始
输入票价范围
判断有无符合条件票价票价
输出相应信息
返回查询信息
按票价范围查询
按站点查询:
开始
返回查询信息
输入起点终点及AD
AD=1?
按目的站查询
按起点站查询
否
是
二分法查询:
输入航班号
开始
输入航班号对应序列号
High=mid+1
Low<=highh
Num=F[mid].flight_number
Mid=(high+low)/2
NumLow=mid+1
返回
是
否
二:
算法分析:
程序主要采用结构体链表顺序表队列
主要算法:
/*航班信息的查询与检索*/
三:
/*航班信息的查询与检索*/
#include
#include
#include
#defineN6//航班数
//航班信息
typedefstructflight
{
charflight_number[10];//航班号
charstart_address[10];//起飞站
chararrived_address[10];//终点站
charwork_date[10];//班期
charstart_time[6];//起飞时间
chararrived_time[6];//到达时间
charFlightType[4];//机型
intfare;//票价
}DataType;
structflightFlight[N];
//-----------按航班号进行基数排序-----------
typedefcharKeyType;
#defineD7//D为排序码的最大位数
#defineR'a'//R为基数,这里为小于字母'a'代表的整型值
structNode;//单链表结点类型
typedefstructNodeRadixNode;
structNode
{
KeyTypekey[D];//关键字
DataTypeinfo;//数据信息
RadixNode*next;
};
typedefRadixNode*RadixList;
typedefstructQueueNode
{
RadixNode*f;//对列的头指针
RadixNode*e;//对列的尾指针
}Queue;
Queuequeue[R];//用队列表示桶
voidradixSort(RadixList*plist,intd,intr)
{
inti,j,k;
RadixNode*p,*head;
head=(*plist)->next;
for(j=d-1;j>=0;j--)//进行d次分配和收集
{
p=head;
for(i=0;i{
queue[i].f=NULL;queue[i].e=NULL;//清队列
}
while(p!
=NULL)
{
k=p->key[j];//按排序码的第j个分量进行分配
if(queue[k].f==NULL)queue[k].f=p;//若第k个堆为空,则当前记录为队头
else(queue[k].e)->next=p;//否则当前记录到第k队的队尾
queue[k].e=p;
p=p->next;
}
i=0;
while(queue[i].f==NULL)i++;//从r个队列中找出第一个非空的队列
p=queue[i].e;head=queue[i].f;//head为收集链表的头指针
for(i++;iif(queue[i].f!
=NULL)
{p->next=queue[i].f;p=queue[i].e;}//收集非空队列
p->next=NULL;
}
(*plist)->next=head;
}
//初始化航班信息
structNodeelement[N+1]={
"","","","","","","","",0,NULL,//表头
"CA1544","CA1544","","","1245","10:
55","12:
40","733",960,NULL,
"MU5341","MU5341","","","每日","14:
20","16:
15","M90",1280,NULL,
"CZ3869","CZ3869","","","246","08:
55","10:
35","733",1010,NULL,
"MU3682","MU3682","","","23467","20:
50","22:
15","M90",1380,NULL,
"HU1836","HU1836","","","每日","09:
40","11:
20","738",1250,NULL,
"CZ3528","CZ3528","","","13457","15:
10","16:
50","CRJ",1060,NULL,
};
//------------信息显示------------
//按表的格式输出某个航班信息
//显示头部信息
voidCout_info1()
{
cout<<"****************************************\n"<cout<<"*欢迎您使用*\n"<cout<<"*航班信息表*\n"<cout<<"****************************************\n"<cout<<"航班号起飞时间到达时间起飞站终点站班期机型票价\n"<}
//显示主体信息
voidCout_info2_1(Nodep[])//方式一
{
cout<<""<info.flight_number;
cout<<""<info.start_time;
cout<<""<info.arrived_time;
cout<<""<info.start_address;
cout<<""<info.arrived_address;
cout<<""<info.work_date;
cout<<""<info.FlightType;
cout<<""<info.fare<<"元"<}
voidCout_info2_2(flightF[],inti)//方式二
{
cout<<""<cout<<""<cout<<""<cout<<""<cout<<""<cout<<""<cout<<""<cout<<""<}
//显示所有航班信息
voidoutput_ALL_info1(Nodeelement[])//方式一
{
RadixListp=element;
Cout_info1();
p=p->next;
while(p!
=NULL)
{
Cout_info2_1(p);
p=p->next;
}
cout<}
voidoutput_ALL_info2(flightF[])//方式二
{
Cout_info1();
for(inti=0;i{
Cout_info2_2(F,i);
}
cout<}
//--------------信息复制----------------
//将排好的序列(链表)转化成顺序表存储形式
voidcopy(flightF[],Nodeelement[])
{
RadixListp=element;
p=p->next;
inti;
for(i=0;i=NULL;i++)
{
strcpy(F[i].flight_number,p->info.flight_number);
strcpy(F[i].start_time,p->info.start_time);
strcpy(F[i].arrived_time,p->info.arrived_time);
strcpy(F[i].start_address,p->info.start_address);
strcpy(F[i].arrived_address,p->info.arrived_address);
strcpy(F[i].work_date,p->info.work_date);
strcpy(F[i].FlightType,p->info.FlightType);
F[i].fare=p->info.fare;
p=p->next;
}
}
//---------------服务菜单--------------
voidF_By_Time(flightF[],int);
voidF_By_Address(flightF[],int);
voidF_By_fare(flightF[]);
voidF_By_FN(flightF[]);
//主菜单
voidmainmenu()
{
charch;
inty;
cout<<"主菜单\n"<cout<<"===========================================================\n"<cout<<"Pleasechoose:
(inputthenumber)(输入查询/排序命令)\n"<cout<<"0.showthemainmenu(显示主菜单)\n"<cout<<"1.Findbyflightnumber(按航班号查询)\n"<cout<<"2.Findbystarttime(按起飞时间查询)\n"<cout<<"3.Findbyarrivedtime(按到达时间查询)\n"<cout<<"4.Findbystartaddress(按起飞地点查询)\n"<cout<<"5.Findbyarrivedaddress(按目的地点查询)\n"<cout<<"6.Findbythefare(按票价围查询)\n"<cout<<"----其他键退出"<cout<<"===========================================================\n"<while
(1)
{
cout<<"请输入服务命令:
";
cin>>y;
switch(y)
{
case0:
mainmenu();break;
case1:
F_By_FN(Flight);break;
case2:
F_By_Time(Flight,1);break;
case3:
F_By_Time(Flight,2);break;
case4:
F_By_Address(Flight,1);break;
case5:
F_By_Address(Flight,2);break;
case6:
F_By_fare(Flight);break;
default:
cout<<"惠顾!
"<}
cout<<"是否退出?
(Y/N):
";
cin>>ch;
if(ch=='Y'||ch=='y')break;
}
}
//--------------查询系统--------------
//通过航班号实现二分查找法查找
voidF_By_FN(flightF[])
{
intlow=0,high=N,mid;
charNum[10];
cout<<"请输入您要查询的航班号:
";
cin>>Num;
Cout_info1();//显示头部信息
while(low<=high)
{
mid=(low+high)/2;
if(strcmp(Num,F[mid].flight_number)==0){Cout_info2_2(F,mid);break;}
elseif(strcmp(Num,F[mid].flight_number)<0)high=mid-1;
elselow=mid+1;
}
cout<<"*************对不起,没有您要查找的航班号**********"<}
//通过起飞/到达时间查询
voidF_By_Time(flightF[],intTime)
{
inti;
charT[6];
cout<<"请输入您要查询的航班的起飞/抵达时间:
";
cin>>T;
Cout_info1();//显示头部信息
for(i=0;i{
if(Time==1)//按起飞时间查询
{
if(strcmp(T,F[i].start_time)==0)Cout_info2_2(F,i);
}
if(Time==2)//按抵达时间查询
{
if(strcmp(T,F[i].arrived_time)==0)Cout_info2_2(F,i);
}
}
cout<<"*******对不起,该时间没有航班*******"<}
//通过站点查询
voidF_By_Address(flightF[],intAD)
{
charstr[10];
cout<<"请输入您要查询的航班的起飞/抵达地址:
";
cin>>str;
Cout_info1();
for(inti=0;i{
if(AD==1)//按起点站查询
{
if(strcmp(str,F[i].start_address)==0)Cout_info2_2(F,i);
}
if(AD==2)//按目的站查询
{
if(strcmp(str,F[i].arrived_address)==0)Cout_info2_2(F,i);
}
}
cout<<"********对不起,该站点不存在********"<}
//通过票价围查询
voidF_By_fare(flightF[])
{
intT1,T2,i;
cout<<"请输入您要查询的航班的最低票价(单位:
元):
";
cin>>T1;
cout<<"请输入您要查询的航班的最高票价(单位:
元):
";
cin>>T2;
Cout_info1();
for(i=0;i{
if(T1<=F[i].fare&&T2>=F[i].fare)Cout_info2_2(F,i);
}
cout<<"*******对不起,没有适合您的航班,请修改您的票价围********"<}
//--------------主函数----------------
intmain()
{
RadixListp=element;
for(inti=0;ielement[i].next=&element[i+1];
element[10].next=NULL;
radixSort(&p,D,R);//基数排序
output_ALL_info1(element);//输出排序后的有序序列(航班信息)
copy(Flight,element);//另存储排序后的航班信息
mainmenu();//给出主菜单
return0;
}
测试数据及测试结果:
、
边界值处理:
四:
遇到的问题及解决策略:
首先是要实现所要的功能需用什么数据结构的问题,比如排序问题究竟用那一种,在组员的商量下和上网搜寻资料,采用对排序最符合,其次是在时间的查询过程中,比如输入时间16:
40开始只能实现输入1640,最后通过改时间的数据类型实现了时间的输入,最后是在各个模块的组合过程中由于各个成员编程所起的名字或者其他原因,程序无法运行,最后在大家的努力下一起修改错误使得程序可以正常运行。
还未解决的问题:
插入的订票的函数无常运行。
五:
实验收获和心得:
通过这次次实验我们收获了很多,对数据结构这门课有了更深的了解.让我们对链表、队列、结构体的应用更娴熟,为我们更好的了解课本容,改进不足提供了件。
在这次课程设计的过程中充分说明了团队合作的重要性,组成员共同讨论,即充分而认真的完成自己负责的模块又对组其他成员的工作提供建议,使得这次课程设计能够按时完成。
我们一定会更加努力,争取在以后的学习中能够学以致用,最后要感胡老师在设计过程中给我们的指导,有了胡老师的帮助,我们的流程图更加的规、正确。
再一次胡老师。
六:
人员分工:
组成员一起构思了流程图。
并完成最后的整理工作