订票系统 数据结构 课程设计.docx
- 文档编号:10881592
- 上传时间:2023-02-23
- 格式:DOCX
- 页数:35
- 大小:290.41KB
订票系统 数据结构 课程设计.docx
《订票系统 数据结构 课程设计.docx》由会员分享,可在线阅读,更多相关《订票系统 数据结构 课程设计.docx(35页珍藏版)》请在冰豆网上搜索。
订票系统数据结构课程设计
目录
一.订票系统1
1.问题分析1
2.系统设计2
2.1模块“开头”2
2.2模块“订票系统”2
2.3模块“退票系统”3
2.4模块“查票系统”3
2.5模块“查询系统”4
3.程序代码4
4.结果及测试11
5.结果分析17
二.图的深度周游与广度周游17
1.问题分析17
2.系统设计18
3.程序代码19
4.结果及测试24
5.结果分析25
三.总结25
四.参考文献25
一.订票系统
1.问题分析
通过此系统可以实现如下功能:
录入:
可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)。
查询:
可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况。
订票:
(订票情况可以存在一个数据文件中,结构自己设定)可以订票,如果该航班已经无票,可以提供相关可选择航班。
退票:
可退票,退票后修改相关数据文件。
修改航班信息:
当航班信息改变可以修改航班数据文件。
客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。
本程序是用结构体与数组来实现以上功能。
数组是有序数据的集合。
数组中的每个元素都属于同一个数据类型,用一个统一的数组名下的数组名和下标来唯一地确定数组中的元素。
结构体就是一个可以包含不同数据类型的一个结构,它是一种可以自己定义的数据类型,它的特点和数组主要有两点不同,首先结构体可以在一个结构中声明不同的数据类型,第二相同结构的结构体变量是可以相互赋值的,而数组是做不到的,因为数组是单一数据类型的数据集合,它本身不是数据类型(而结构体是)。
简单的说,结构体可以将不同类型的数据组成一个有机的整体,以便于引用,而且这些组合在一个整体中的数据是互相联系的。
2.系统设计
该程序分为五大模块,分别为开头、订票、退票、查票系统和查询系统。
2.1模块“开头”
用loop循环实现菜单页面的循环输出。
loop2:
printf("\n***************************************\n");
printf("欢迎使用航空售票系统\n");
printf("***************************************\n");
printf("\n1.订票\n2.退票\n3.查票\n4.查询\n5.退出\n");
printf("请输入您的选择(1-5):
\n");
do{scanf("%c",&a);}while(a!
='1'&&a!
='2'&&a!
='3'&&a!
='4'&&a!
='5');
……
gotoloop2;
2.2模块“订票系统”
用loop循环进行订票人员的信息以及所订票的信息输入,并检验乘客所定的票是否已经被订出,若被订出则提示要求重新输入。
用switch语句进行目的地的选择,最后将录入信息输出,以便录入者检验输入是否正确。
loop1:
{printf("共有三个航班,请您输入您的选择(1-3):
\n");
do{scanf("%d",&i);}while(i>3||i<1);
printf("本航班当天余票为%d张!
\n",n[i-1][j-1]);
printf("\n请输入您想订的座位号(1-100):
\n");
do{scanf("%d",&k);}while(k>100||k<1);
h=i+4*j+32*k;
while(l[h]==1){
do{printf("该票已经被订,请重新输入:
\n");
……
do{
printf("\n请输入您的目的地(1-5):
\n");
printf("1.北京\n2.天津\n3.上海\n4.深圳\n5.广州\n");
scanf("%d",&c);}while(c>5||c<1);
switch(c)
{
case1:
strcpy(s,"北京");break;
case2:
strcpy(s,"天津");break;
case3:
strcpy(s,"上海");break;
case4:
strcpy(s,"深圳");break;
case5:
strcpy(s,"广州");break;
}
printf("\n您的订票信息如下:
\n");
printf("姓名身份证号航班号飞行时间目的地\n");
printf("\n%s%10ld%d号周%d%10s\n",T[h].name,T[h].ID,i,j,s);
printf("\n");
printf("\n请再次检查您的信息。
\n\n如果正确无误,请输入y.\n\n重新填写,请输入r.\n\n放弃订票,回主选单输入q。
\n");
2.3模块“退票系统”
退票者需要对本人信息与所退票信息尽行录入,程序会用把录入信息与数据库中信息进行比对,如有不符项,则提示且无法进行退票。
printf("\n请输入您的身份证号:
\n");
scanf("%ld",&ID2);
h2=x+4*y+32*z;
if(T[h2].ID==0){printf("\n该票没有被定出!
\n");gotoloop2;}
else{
if(T[h2].ID!
=ID2||strcmp(s2,T[h2].name))
{printf("信息出现矛盾!
无法退票!
\n");gotoloop2;}
else{printf("\n请输入y确认退票!
回主选单请输入q!
\n");
2.4模块“查票系统”
本模块可让乘客进行身份证号查询、座位号查询、姓名查询,以上三个功能均由if语句进行比较,完成查询。
在搜索比较过程中,如果输入错误数字或代码则会有提示,要求重新输入。
printf("\n请您输入您要查询的身份证号:
\n");
do{scanf("%ld",&d1);}while(d1==0);
if(T[i].ID==d1&&l[i]==1){n3++;a3[n3]=i;}
i++;}
printf("\n请您输入您要查询的名字:
\n");
scanf("%s",&s3);
while(T[i].name==NULL)i++;
if(strcmp(T[i].name,s3)==0&&l[i]!
=0)
printf("\n请您输入您要查询的座位号:
\n");
do{scanf("%d",&d2);}while(d2<1||d2>100)
2.5模块“查询系统”
本模块可以让实现余票查询、已订出票信息查询,此功能同样是用if语句完成,在余票查询中还会用for语句对未订出的票的座位号进行输出。
if((T[i].ID==0||l[i]==0)&&(i-add5-add6*4)%32==0){
n55++;
a4[n55]=i;
}
for(j=i+1;j<=n55;j++)
{
{for(i=j;i<=j+9;i++)
printf("%5d",a4[i]/32);
}
3.程序代码
#include
#include
structinf
{
charname[20];
longID;
};
structinfT[3232];
voidmain()
{
intc,d2,g,h,h2,i,j,k,n2,n3,x,y,z;
intn4,n9,n55,add1,add5,add6,add7,add9;
longID2,d1;
intn[3][7];
intk2[4][8];
chars[15];
chars2[15],s3[15];
chara,d,f,add2,add3,add4,add8,add10;
intl[3232]={0},a3[100],a4[100],p3[100],a7[100],s22[100];
intn5[100],n6[100],t2[100],p2[100],a2[100],s33[100],t3[100];
intn7[10][10][10];
for(i=0;i<=2;i++)
for(j=0;j<=6;j++)
n[i][j]=100;
/********************************开头**************************************/
loop2:
printf("\n***************************************\n");
printf("欢迎使用航空售票系统\n");
printf("***************************************\n");
printf("\n1.订票\n2.退票\n3.查票\n4.查询\n5.退出\n");
printf("请输入您的选择(1-5):
\n");
do{scanf("%c",&a);}while(a!
='1'&&a!
='2'&&a!
='3'&&a!
='4'&&a!
='5');
/*******************************订票***************************************/
if(a=='1'){
loop1:
{printf("共有三个航班,请您输入您的选择(1-3):
\n");
do{scanf("%d",&i);}while(i>3||i<1);
printf("请输入你旅行的周日代码(1-7):
\n");
do{scanf("%ld",&j);}while(j>7||j<1);
printf("本航班当天余票为%d张!
\n",n[i-1][j-1]);
printf("\n请输入您想订的座位号(1-100):
\n");
do{scanf("%d",&k);}while(k>100||k<1);
h=i+4*j+32*k;
while(l[h]==1){
do{printf("该票已经被订,请重新输入:
\n");
scanf("%d",&k);h=i+4*j+32*k;}while(k>100||k<1);}
printf("请输入您的姓名:
\n");
scanf("%s",&T[h].name);
printf("\n请输入您的身份证号码:
\n");
scanf("%ld",&T[h].ID);
do{
printf("\n请输入您的目的地(1-5):
\n");
printf("1.北京\n2.天津\n3.上海\n4.深圳\n5.广州\n");
scanf("%d",&c);}while(c>5||c<1);
switch(c)
{
case1:
strcpy(s,"北京");break;
case2:
strcpy(s,"天津");break;
case3:
strcpy(s,"上海");break;
case4:
strcpy(s,"深圳");break;
case5:
strcpy(s,"广州");break;
}
printf("\n您的订票信息如下:
\n");
printf("姓名身份证号航班号飞行时间目的地\n");
printf("\n%s%10ld%d号周%d%10s\n",T[h].name,T[h].ID,i,j,s);
printf("\n");
printf("\n请再次检查您的信息。
\n\n如果正确无误,请输入y.\n\n重新填写,请输入r.\n\n放弃订票,回主选单输入q。
\n");
do{
scanf("%c",&d);
}while(d!
='r'&&d!
='q'&&d!
='y');}
if(d=='y'){n[i-1][j-1]--;
l[h]=1;
printf("\n订票成功!
!
\n");
gotoloop2;}
elseif(d=='r')gotoloop1;
elsegotoloop2;
}
/******************************退票****************************************/
if(a=='2'){
printf("\n请填写退票详细信息.\n");
printf("\n请输入航班号(1-3):
\n");
do{scanf("%d",&x);
}while(x>3||x<1);
printf("\n请输入旅行周日(1-7):
\n");
do{scanf("%d",&y);
}while(y>7||y<1);
printf("\n请输入座位号:
\n");
do{scanf("%d",&z);
}while(z>100||z<1);
printf("\n请输入您的姓名:
\n");
scanf("%s",&s2);
printf("\n请输入您的身份证号:
\n");
scanf("%ld",&ID2);
h2=x+4*y+32*z;
if(T[h2].ID==0){printf("\n该票没有被定出!
\n");gotoloop2;}
else{
if(T[h2].ID!
=ID2||strcmp(s2,T[h2].name))
{printf("信息出现矛盾!
无法退票!
\n");gotoloop2;}
else{printf("\n请输入y确认退票!
回主选单请输入q!
\n");
scanf("%c",&f);
while(f!
='y'&&f!
='q'){scanf("%c",&f);}
if(f=='y'){
printf("退票成功!
\n");
l[h2]=0;
n[x-1][y-1]++;}
elsegotoloop2;}
}
gotoloop2;}
/******************************查票系统************************************/
if(a=='3'){loop4:
printf("\n请输入查询方式:
\n");
printf("\n1.输入身份证号查询。
\n2.输入座位号码查询。
\n3.输入姓名查询。
\n4.返回。
\n");
do{scanf("%d",&g);}while(g>4||g<1);
/******************身份证号查询**********************/
if(g==1){loop6:
printf("\n请您输入您要查询的身份证号:
\n");
do{scanf("%ld",&d1);}while(d1==0);
n3=0;
i=36;
while(i<=3231){
if(T[i].ID==d1&&l[i]==1){n3++;a3[n3]=i;}
i++;}
if(n3==0){printf("\n没有找到您输入的身份证号!
\n");gotoloop4;}
else{
for(i=1;i<=n3;i++){s33[i]=a3[i]/32;
t3[i]=(a3[i]-s33[i]*32)/4;
p3[i]=a3[i]-s33[i]*32-t3[i]*4;}
printf("\n您所查找的的信息为:
\n");
printf("\n姓名身份证号航班号座位号飞行日\n");
for(i=1;i<=n3;i++)
printf("%s%10ld%d号%7d周%d\n",T[a3[i]].name,T[a3[i]].ID,p3[i],s33[i],t3[i]);
}
printf("\n继续查找请输入y,返回输入q.\n");
do{scanf("%c",&add3);}while(add3!
='y'&&add3!
='q');
if(add3=='y')gotoloop6;
elsegotoloop4;
}
/***********************名字查询****************************/
if(g==3){loop5:
printf("\n请您输入您要查询的名字:
\n");
scanf("%s",&s3);
n2=0;
i=37;
while(i<=3231){
while(T[i].name==NULL)i++;
if(strcmp(T[i].name,s3)==0&&l[i]!
=0){
a2[n2+1]=i;
n2++;
}
i++;
}
if(n2==0){printf("\n没有找到您输入的姓名!
\n");
gotoloop4;}
else{for(i=1;i<=n2;i++){
s22[i]=a2[i]/32;
t2[i]=(a2[i]-s22[i]*32)/4;
p2[i]=a2[i]-s22[i]*32-t2[i]*4;}
printf("\n您所查找的的信息为:
\n");
printf("姓名身份证号航班号座位号飞行日\n");
for(i=1;i<=n2;i++)
printf("%s%10ld%d号%7d周%d\n",s3,T[a2[i]].ID,p2[i],s22[i],t2[i]);}
printf("\n继续查找请输入y,返回输入q.\n");
do{scanf("%c",&add2);}while(add2!
='y'&&add2!
='q');
if(add2=='y')gotoloop5;
elsegotoloop4;}
/************************座位号码查询*****************************/
if(g==2){loop7:
printf("\n请您输入您要查询的座位号:
\n");
do{scanf("%d",&d2);}while(d2<1||d2>100);
for(i=1;i<=3;i++)
for(j=1;j<=7;j++)
k2[i][j]=d2*32+4*j+i;
i=1;
n4=0;
while(i<=3){
j=1;
while(j<=7){
if(T[k2[i][j]].ID!
=0&&l[k2[i][j]]!
=0){
n4++;
n5[n4]=i;
n6[n4]=j;
n7[n4][n5[n4]][n6[n4]]=k2[i][j];
}
j++;
}
i++;
}
if(n4==0){printf("\n该座位号码没有被定出!
\n");gotoloop4;}
else{
printf("\n您所输入的座位号信息是:
\n");
printf("姓名身份证号航班号座位号飞行日\n");
for(i=1;i<=n4;i++)
printf("%s%10ld%d号%7d周%d\n",T[n7[i][n5[i]][n6[i]]].name,T[n7[i][n5[i]][n6[i]]].ID,n5[i],d2,n6[i]);
}
printf("\n继续查找请输入y,返回输入q.\n");
do{scanf("%c",&add4);}while(add4!
='y'&&add4!
='q');
if(add4=='q')gotoloop4;
if(add4=='y')gotoloop7;}
elsegotoloop2;
}
/*******************************查询系统**********************************/
if(a=='4'){loop8:
printf("\n1.查询特定航班的余票情况。
\n2.查询特定航班的乘客情况。
\n3.返回主选单。
\n");
printf("\n请输入您的选择(1-3):
\n");
do{scanf("%d",&add1);}while(add1>3||add1<1);
if(add1==3)gotoloop2;
/*******************************查余票*****************************/
if(add1==1){loop9:
printf("\n请输入您要查询的航班号(1-3):
\n");
do{scanf("%d",&add5);}while(add5>3||add5<1);
printf("\n请输入您要查询的飞行期(1-7):
\n");
do{scanf("%d",&add6);}while(add6>7||add6<1);
i=37;
n55=0;
while(i<=3231){
if((T[i].ID==0||l[i]==0)&&(i-add5-add6*4)%32==0){
n55++;
a4[n55]=i;
}
i++;}
printf("\n第%d航班飞机周%d的余票情况是:
\n",add5,add6);
i=0;
for(j=i+1;j<=n55;j++)
{{for(i=j;i<=j+9;i++)
printf("%5d",a4[i]/32);}
printf("\n");j=i-1;}
printf("\n继续查找请输入y,返回输入q.\n");
do{scanf("%c",&add8);}while(add8!
='y'&&add8!
='q');
if(add8=='y')gotoloop9;
elsegotoloop8;}
/*******************查询已订票信息**********************/
if(add1==2){loop10:
printf("\n请输入您要查询的航班号(1-3):
\n");
do{scanf("%d",&add7);}while(add7>3||add7<1);
printf("\n请输入您要查询的飞行期(1-7):
\n");
do{scanf("%d",&add9);}while(add9>7||add9<1);
n9=0;
i=37;
while(i<=3231){
if(T[i].ID!
=0&&(i-add7-add9*4)%32==0&&l[i]!
=0){
n9++;
a7[n9]=i;}
i++;}
if(n9==0)printf("\n该航班满票,没有被定出!
\n");
if(n9!
=0){
printf("\n第%d航班飞机周%d的订票情况是:
\n",add7,add9);
printf("\n姓名身份证号航班号座位号飞行日\n");
for(i=1;i<=n9;i++)
printf("%S%10ld%d号%7d周%d\n",T[a7[i]].name,T[a7[i]].ID,add7,(a7[i]-add7-4*add9)/32,add9);
}
printf("\n继续查找请输入y,返回输入q.\n");
do{scanf("%c",&add10);}while(add10!
='y'&&add10!
='q');
if(add10=='y')gotoloop10;
elsegotoloop8;
}
}
}
4.结果及测试
5.结果分析
在订票系统的编程的过程中应当考虑乘客在输入过程中出现的问题,例如:
按键错误,数据类型不符等,所以要添加纠错功能,以及在输入后可以让乘客检验是否输入有误,若有误则
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 订票系统 数据结构 课程设计 订票 系统