数据结构课程设计源代码完整版.docx
《数据结构课程设计源代码完整版.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计源代码完整版.docx(21页珍藏版)》请在冰豆网上搜索。
![数据结构课程设计源代码完整版.docx](https://file1.bdocx.com/fileroot1/2022-11/28/5a2f9a96-412b-4e02-9a98-6e72eb9ff108/5a2f9a96-412b-4e02-9a98-6e72eb9ff1081.gif)
数据结构课程设计源代码完整版
算法与数据结构
课程设计报告
设计题目:
专业
班级
学生
学号
指导教师
2014年第1学期
第一部分:
需求分析
1、系统名称:
航空客运订票系统
航空客运订票的业务活动包括:
查询航线、客票预定和办理退票等。
要求在TC或VC环境下设计一个航空客运订票系统,以使上述业务可以借助计算机来完成。
2、要求:
(1)每条航线所涉及的信息有:
终点站名、航班号、飞机号、飞行日期(星期几)、乘员定额、余票量、已经订票的客户名单(包括姓名、订票量)以及等候替补的客户名单(包括姓名、所需票量)。
(2)作为模拟系统,全部数据可以只存放在内存中。
(3)通过此系统可以实现如下功能:
①录入功能:
可以录入航班情况
②查询功能:
根据客户提供的终点站名进行查询,可以输出以下信息:
航班号、飞机号、星期几飞行和余票量等。
也可以根据航班号,查询飞机某个航线的情况。
订票功能:
根据客户提出的要求(姓名、终点站名、订票数量)查询该航班的余票量情况。
如尚有足够的余票,则为客户办理订票手续;若已满员或余票量少于订票数量,则需要重新询问客户要求,如需要,可登记排队候补。
④退票功能:
根据客户提供的情况(姓名、日期、航班号),为客户办理退票手续,然后查询该航班是否有人排队候补,若有人排队,则为排在第一位的客户办理订票手续。
第二部分:
系统设计图样
一:
设计说明
1:
添加航班:
整个航班的信息保存在一个结构体flight中,采用结构体数组,每一个航班信息包含航班号、起飞时间、起飞城市、降落时间、降落城市、余票数量。
航班信息通过lulu()函数进行添加。
添加的信息保存在航班flight结构体数组中。
2:
查询航班:
查询板块分为两个部分,按姓名查找和按站名查找。
按姓名查找:
通过所输入的姓名和已定客户的姓名相匹配,匹配成功则查找成功。
按站名查找:
通过所输入的起始站名和终点站名进行匹配,匹配成功则查找成功。
3:
订票功能:
根据用户的姓名和航班号进行订票,如果所查找的航班号的余票满足用户需要的票数,则订票成功,该信息保存在Customer中,才用结构体数组,包含已定客户的姓名、客户ID、订的票数、起飞时间、起飞城市、降落时间、降落城市、航班号。
若所查找的航班的余票不满足客户的需求,则提醒用户是否需要进入到等候用户的名单里,等候用户信息保存在Wait结构体数组中,每添加一个信息,该数组则会生成一个记录。
4:
退票功能:
根据用户的姓名和航班号进行退票,如果用户输入的姓名和航班号在已定客户的结构体数组中能找到该记录,则在已定客户的数组中删除此条记录,并且将该条记录的票数添加到flight中该航班的余票中去。
5:
浏览航班:
该功能分为三个板块:
显示已定客户信息,显示等候客户名单,显示所有航班信息。
显示已定客户信息:
通过格式化输出,将已定客户Customer结构体数组中的信息利用一个循环输出。
显示等候客户名单:
通过格式化输出,将等候客户Wait结构体数组中的信息利用一个循环进行输出。
显示所有航班信息:
铜锁格式化输出,将所有航班信息flight结构体数组中的信息利用一个循环进行输出。
6:
安全退出:
通过exit函数进行退出程序。
第三部分:
实现
1、头文件部分
#include"stdafx.h"
#include
#include
#include
#include
#include
#include
#include
#include
2、函数体部分
constintMAX_POSSIBILITY=100;
usingnamespacestd;
staticstringtitle[6]={"航班号","起飞时间","降落时间","起飞城市","降落城市","余票量"};
staticintwid[6]={8,10,10,10,10,8};
staticstringtitle1[9]={"客户姓名","座位号","航班号","证件号","订票数","降落时间","起飞时间","起飞城市","降落城市"};
staticintwid1[9]={8,9,8,8,8,11,11,11,11};
staticstringtitle2[5]={"客户姓名","起飞城市","降落城市","客户ID","预订票数"};
staticintwid2[5]={8,10,10,10,10};
externintlen=0;
externintA=0;
externintmax1=0;
structflight//航班号
{
inta1;//航班号
stringa2;//起飞时间
stringa3;//降落时间
stringa4;//起飞城市
stringa5;//降落城市
inta6;//余票
}fl[50];
structcustomer//客户信息
{
stringname;//客户姓名
intseat;//座位号
intnum;//航班号
stringno;//证件号
intps;//订票数
stringjls;//降落时间
stringqfs;//起飞时间
stringqfd;//起飞城市
stringjld;//降落城市
}cu[100];
structwait
{
stringb1;//客户姓名
stringb2;//起飞城市
stringb3;//降落城市
stringno;//客户ID
intnum;//订票数
}Wa[50];
voidluru();//声明录入航班信息函数
voidchaxun();//声明查询函数
voiddingpiao();//声明订票函数
booltuipiao();//声明退票函数
voidtuichu();//声明退出函数
voidmenu();//声明主菜单函数
voidchaxun1();//声明按航班号查询
voidchaxun2();//声明按城市查询
voidvisit();//声明预览菜单
voidvisit1();
voidvisit2();
voidvisit3();
voidfresh();
voidluru()
{
cout<<"**********请输入航班信息**********"<cout<<"请输班号:
";
cin>>fl[len].a1;
cout<<"起飞时间:
";
cin>>fl[len].a2;
cout<<"降落时间:
";
cin>>fl[len].a3;
cout<<"起飞城市:
";
cin>>fl[len].a4;
cout<<"降落城市:
";
cin>>fl[len].a5;
cout<<"剩余票量:
";
cin>>fl[len].a6;
len++;
cout<<"请选择所要进行的操作"<menu();
}
voidvisit()
{
cout<<"1:
显示已定航班信息"<cout<<"2:
显示等候客户信息"<cout<<"3:
显示所有航班信息"<cout<<"请选择...";
end:
ints;
cin>>s;
switch(s)
{
case1:
visit1();//显示已定客户信息
break;
case2:
visit2();//显示等候客户信息
break;
case3:
visit3();//显示所有航班信息
break;
default:
cout<<"******请重新输入******"<gotoend;
//break;
}
return;
}
voidvisit1()
{
cout<<"**********已定客户信息**********"<for(inti=0;i<9;i++)
cout<cout<for(intj=0;j{
cout<cout<cout<cout<cout<cout<cout<cout<cout<cout<}
menu();
}
voidvisit2()
{
cout<<"**********等候客户信息**********"<for(inti=0;i<5;i++)
cout<cout<for(intj=0;j{
cout<cout<cout<cout<cout<cout<}
menu();
}
voidvisit3()
{
cout<<"**********所有航班信息**********"<for(inti=0;i<6;i++)
cout<cout<for(intj=0;j{
cout<cout<cout<cout<cout<cout<cout<}
menu();
}
voidfresh()
{
if(tuipiao()==true)
{
cout<<"****退票成功,等候客户可以进行购票****"<dingpiao();
}
menu();
}
voidmenu()
{
cout<<""<cout<<"**********欢迎来到航空订票系统**********"<cout<<""<cout<<"**********************************"<cout<<"**********1.录入航班信息**********"<cout<<"**********2.查询航班信息**********"<cout<<"**********3.订票**********"<cout<<"**********4.退票**********"<cout<<"**********5.浏览航班信息**********"<cout<<"**********6.退出系统**********"<cout<<"**********7.刷新**********"<cout<<"**********************************"<cout<<""<inti;
cout<<"请选择操作:
";
cin>>i;
switch(i)
{
case1:
luru();
break;
case2:
chaxun();
break;
case3:
dingpiao();
menu();
case4:
tuipiao();
break;
case5:
visit();
break;
case6:
tuichu();
exit
(1);
//case7:
fresh();
//break;
default:
cout<<"输入的选项不合法,请重新输入"<system("cls");//清屏
//menu();
}
}
voidchaxun()
{
system("cls");
cout<<"请选择查询方式"<cout<<"1.按航班号查询"<cout<<"2.按城市查询"<intt;
cin>>t;
switch(t)
{
case1:
chaxun1();
break;
case2:
chaxun2();
break;
default:
cout<<"输入的数据有误,请重新输入!
"<menu();
break;
}
}
voidchaxun1()//按航班号查询
{
intn;
cout<<"请输入要查询的航班号:
"<cin>>n;
for(intj=0;j<=len;j++)
{
if(fl[j].a1==n)
{
cout<<"**********该次航班信息为**********"<cout<<"航班号:
"<cout<<"起飞时间:
"<cout<<"降落时间:
"<cout<<"起飞城市:
"<cout<<"降落城市:
"<cout<<"剩余票量:
"<menu();
return;
}
}
cout<<"没有对应的航班!
"<menu();
return;
}
voidchaxun2()//按城市查询(起飞城市和降落城市)
{
stringm1;
stringm2;
intj=0;
cout<<"请输入要查询的起始城市";
cin>>m1;
cout<<"请输入要查询的降落城市:
";
cin>>m2;
end:
if(j{
if(fl[j].a4==m1&&fl[j].a5==m2)
{
cout<<"**********该次航班信息为**********"<cout<<"航班号:
"<cout<<"起飞时间:
"<cout<<"降落时间:
"<cout<<"起飞城市:
"<cout<<"降落城市:
"<cout<<"剩余票量:
"<cout<<"*****查找成功*****"<}
else
{
j++;
if(jgotoend;
cout<<"没有对应的航班!
"<}
}
menu();
}
voiddingpiao()
{
charName[10];
intfn;
intydps;//预定的票数
intsign=0;
charID[18];
cout<<"请输入你的姓名:
";
cin>>Name;
cout<<"请输入航班号:
";
cin>>fn;
cout<<"请输入预定票数:
";
cin>>ydps;
cout<<"请输入身份证号:
";
cin>>ID;
for(inti=0;i<=len;i++)
{
if(fl[i].a1==fn)//查询该航班
{
if(fl[i].a6>0&&fl[i].a6>=ydps)//判断票数是否满足条件
{
cu[A].name=Name;
cu[A].num=fn;
cu[A].ps=ydps;
cu[A].jld=fl[i].a5;
cu[A].jls=fl[i].a3;
cu[A].no=ID;
cu[A].qfd=fl[i].a4;
cu[A].qfs=fl[i].a2;
srand((unsigned)time(NULL));
cu[A].seat=rand()%MAX_POSSIBILITY;//产生一个随机数
A++;
fl[i].a6=fl[i].a6-ydps;
sign=1;
cout<<"订票成功!
"<cout<<""<break;
}
else
{
charr;
cout<<"该航班余票不足!
";
cout<<"是否愿意盘对等候?
(Y/N)";
r=getchar();
cin>>r;
if(r=='Y'||r=='y')
{
queueM;
Wa[max1].b1=Name;
Wa[max1].b2=fl[i].a4;
Wa[max1].b3=fl[i].a5;
Wa[max1].no=ID;
Wa[max1].num=ydps;
M.push(Wa[max1]);
max1++;
cout<<"客户,您好!
您的信息我们已经记录,请等候通知!
"<break;
sign=1;
}
}
if(sign)
break;
}
}
//if(i==len)
//cout<<"航班号有误!
"<}
booltuipiao()//退票
{
system("cls");//清屏
stringName;
intfn;
intsign=0;
cout<<"请输入您的姓名:
";
cin>>Name;
cout<<"请输入航班号:
";
cin>>fn;
for(inti=0;i{
if(fn==fl[i].a1)//航班号匹配
{
for(intj=0;j{
if(cu[j].name==Name)
{
cout<<"退票成功!
"<fl[i].a6+=cu[j].ps;
ints=j;
for(s;s{
cu[s].jld=cu[s+1].jld;
cu[s].jls=cu[s+1].jls;
cu[s].name=cu[s+1].name;
cu[s].no=cu[s+1].no;
cu[s].num=cu[s+1].num;
cu[s].ps=cu[s+1].ps;
cu[s].qfd=cu[s+1].qfd;
cu[s].qfs=cu[s+1].qfs;
cu[s].seat=cu[s+1].seat;
}
}
}
}
if(i>=len)
cout<<"输入信息有误!
退票失败"<menu();
}
returntrue;
}
voidtuichu()
{
cout<<"*****欢迎下次光临*****"<}
voidmain()
{
menu();
}
第四部分:
效果展示
1、打开界面
2、录入界面
3、按航班号查找界面
4、按城市查找界面
5:
订票界面
6:
预览所有航班界面
7:
预览已定客户信息界面
第五部分:
心得体会
本次航空订票系统的课程设计,共完成了5个功能,即对航班的录入、查询航班、订票、退票、以及对所有航班信息的预览、已定客户和等候客户信息的预览。
共采用三个结构体,即保存所有航班信息的flight结构体、保存已定客户信息的Customer结构体、保存等候客户信息的Wait结构体。
本次设计全部采用的是数组顺序表,所以在操作起来比较方便,但是对于庞大的数据,操作起来就比较麻烦,这是本次设计的一个缺陷。
同时,由于自己数据结构链表学习的不够扎实,所以对于链表的知识没有得到应用。
总之,学习是一个厚积薄发的过程,平时在学的过程中掌握的多,理解多,见的多,练习的多,真正到自己做的时候就不会那么棘手。
所以在以后
学习过程中应该注重实践,而不是只关注课本上的零碎的知识点。