航空售票系统.docx
《航空售票系统.docx》由会员分享,可在线阅读,更多相关《航空售票系统.docx(27页珍藏版)》请在冰豆网上搜索。
![航空售票系统.docx](https://file1.bdocx.com/fileroot1/2023-6/13/56516e87-fda6-46e2-8e53-6d860d6b3961/56516e87-fda6-46e2-8e53-6d860d6b39611.gif)
航空售票系统
**理工大学
《C语言程序设计》
题目航空售票管理程序
指导教师:
**
姓名:
**
学号:
2011070**
班级:
计算机科学与技术111
专业:
计算机科学与技术
地点:
机房201
时间:
2012-06-25至2012-06-30
一、内容
航空票务管理程序:
本程序主要实现了查询航班、购买机票、退订机票。
通过选项提示来操作程序实现相关的功能。
二、上机环境
操作系统:
Windows7
开发工具:
VC6.0
三、函数调用关系图
4退出
1查询
3退票
2买票
四、各函数功能说明
voidmain()主函数
voidmenu(structflt*pr,structticket*pk);显示主菜单的函数
voidcheck(structflt*pr,structticket*pk);查询航班的函数
voidbuy(structflt*pr,structticket*pk);购买机票的函数
voidreturnt(structflt*pr,structticket*pk);退订机票的函数
五、算法描述
算法描述:
#include
#include
#include
#defineNUM100
structflt//记录各个航班的信息
{charairport[2][10];//起点、终点
charFltno[20];//航班号
chardate[20];
charTime1[100],Time2[100];//起飞时间、到达时间
intTounumb,Gongnumb,Jingnumb;//三个不同类型的机票的数量
intTouprice,Gongprice,Jingprice;//三种机票的价格
};
structticket//机票信息
{charbuyer[20];//购票者姓名
charID[20];//购买者身份证号
charsource[20],dest[20];//始点、终点
charfltno;//航班号
chartime1,time2;//起飞时间、到达时间
inttounumb,gongnumb,jingnumb;//三个不同类型的机票的数量
floattouprice,gongprice,jingprice;//三种机票的价格
};
voidmenu(structflt*pr,structticket*pk);//显示主菜单的函数
voidcheck(structflt*pr,structticket*pk);//查询航班的函数
voidbuy(structflt*pr,structticket*pk);//购买机票的函数
voidreturnt(structflt*pr,structticket*pk);//退订机票的函数
voidmain()//主函数
{
structticketcheque;//定义结构体变量
structticket*pk;//定义结构体指针
structfltairportinfor[NUM]={//对结构体进行初始化
{"qingdao","beijing","f111",
"2012.05.01","2012年05月01日12时00分",
"2012年05月01日15时00分",100,100,100,1000,800,500},
{"qingdao","shanghai","f112","2012.05.01",
"2012年05月01日12时00分",
"2012年05月01日16时00分",100,100,100,1000,800,500},
{"beijing","shanghai","f113","2012.05.01",
"2012年05月01日12时00分",
"2012年05月01日18时00分",100,100,100,1800,1500,1000}};
structflt*pr;//定义结构体指针
pr=airportinfor;//让指针pr指向airportinfor
pk=&cheque;//让指针pk指向cheque
menu(pr,pk);//调用菜单函数
}
voidmenu(structflt*pr,structticket*pk)//显示主菜单的函数
{inta;
printf("\n******************************************************************");
printf("\n\n-------欢迎来到青岛流亭机场--------\n");//输出菜单选项
printf("1,查询机票\n");
printf("2,购买机票\n");
printf("3,退订机票\n");
printf("4,退出程序\n");
printf("请输入序列号:
");
scanf("%d",&a);//输入选项
if(a==1)//判断是否查询机票
{system("cls");//清屏
check(pr,pk);//调用查询机票的函数
menu(pr,pk);//调用菜单函数返回首页
}
elseif(a==2)//判断是否购买机票
buy(pr,pk);//调用购买机票的函数
elseif(a==3)//判断是否退订机票
returnt(pr,pk);//调用退订机票的函数
elseif(a==4)//判断是否退出程序
{system("cls");//清屏
printf("谢谢使用!
\n");
printf("\n******************************************************************");
}
Else//输入不在1~4范围内重新输入
{system("cls");
printf("\n输入有误!
请重新输入!
");
menu(pr,pk);
}
}
voidcheck(structflt*pr,structticket*pk)//查询航班的函数
{
inti,flag=0;//i用于for循环flag作为标志
charsour[10],dest[10];//定义字符数组用于接收地址
charday[20];//定义字符数组用于接收输入的日期
printf("请输入起点:
");
scanf("%s",sour);
printf("请输入终点:
");
scanf("%s",dest);
printf("请输入日期:
");
scanf("%s",day);
if(day[4]!
=46||day[7]!
=46)//确保日期输入正确
{
do
{printf("日期格式输入有误,请重新输入!
(年月日之用点“.”隔开)\n");
printf("请输入日期:
");
scanf("%s",day);
}while(day[4]!
=46&&day[7]!
=46);
}
for(i=0;iif(strcmp(pr[i].airport[0],sour)==0)
if(strcmp(pr[i].airport[1],dest)==0)
if(strcmp(pr[i].date,day)==0)
{
strcpy(pk->source,pr[i].airport[0]);printf("\n航班:
%s\n",pr[i].Fltno);//查找成功后输出航班信息
printf("出发地-------->目的地\n");
printf("%s-------->",pr[i].airport[0]);
printf("%s\n",pr[i].airport[1]);
printf("起飞时间%s\n",pr[i].Time1);
printf("到达时间%s\n",pr[i].Time2);
printf("头等舱公务舱经济舱\n");
printf("%d张%d张%d张\n",pr[i].Tounumb,pr[i].Gongnumb,pr[i].Jingnumb);
printf("%d元%d元%d元\n",pr[i].Touprice,pr[i].Gongprice,pr[i].Jingprice);
flag=1;
break;
}
if(flag==0)
{printf("\n对不起,未找得你要的航班!
\n");
strcpy(pk->source,"0");
return;
}
}
voidbuy(structflt*pr,structticket*pk)//购买机票的函数
{
intchoice;
intbuynumber;
system("cls");//清屏
printf("请输入您的姓名:
");//输入购买者信息
scanf("%s",pk->buyer);
printf("请输入您的身份证号:
");
if(strlen(pk->ID)!
=5)//判断输入的位数是否正确
do{printf("身份证位数有误!
请重新输入!
\n");
printf("请输入您的身份证号:
");
scanf("%s",pk->ID);
}while(strlen(pk->ID)!
=5);
scanf("%s",pk->ID);
check(pr,pk);//调用查询航班的函数
if(strcmp(pk->source,"0")==0)//查找失败返回首页
{
printf("未找到您要的航班!
\n");
menu(pr,pk);
}
Else//选择机票类型
{printf("\n请输入您购买类型(1.头等舱2.公务舱3.经济舱):
");
scanf("%d",&choice);
if(choice<1||choice>3)
Do//用于保证输入的选项有意义
{
printf("\n输入有误!
请重新输入!
\n");
printf("\n请输入您购买类型(1.头等舱2.公务舱3.经济舱):
");
scanf("%d",&choice);
}while(choice<1||choice>3);
printf("请输入您购买的数量:
");//输入购买的数量
scanf("%d",&buynumber);
if(buynumber==0)
menu(pr,pk);
else
switch(choice)
{case1:
if(pr->Tounumb>=buynumber)//判断机票是否足够
{
printf("\n购买成功!
返回首页!
");
pk->tounumb=buynumber;
pr->Tounumb-=buynumber;//改变机票剩余数
menu(pr,pk);
}
else
{
printf("\n机票已售完或不足!
返回首页!
");
menu(pr,pk);
}break;
case2:
if(pr->Gongnumb>=buynumber)//判断机票是否足够
{
printf("购买成功!
返回首页!
");
pk->gongnumb=buynumber;
pr->Gongnumb-=buynumber;//改变机票剩余数
menu(pr,pk);
}
else
{
printf("\n机票已售完或不足!
返回首页!
");
menu(pr,pk);
}break;
case3:
if(pr->Jingnumb>=buynumber)//判断机票是否足够
{
printf("\n购买成功!
返回首页!
");
pk->jingnumb=buynumber;
pr->Jingnumb-=buynumber;//改变机票剩余数
menu(pr,pk);
}
else
{
printf("\n机票已售完或不足!
返回首页!
");
menu(pr,pk);
}
}
}
}
voidreturnt(structflt*pr,structticket*pk)//退订机票的函数
{
inti,choice1,choice2,buynumber;
charsour[20];
chardest[20];
charday[20];
system("cls");
printf("你确定要退票吗?
1.是2.否");
scanf("%d",&choice1);
if(choice1<1||choice1>2)//用于保证输入的选项有意义
do
{
printf("\n输入有误!
请重新输入!
\n");
printf("你确定要退票吗?
1.是2.否");//确认是否退票
scanf("%d",&choice1);
}while(choice1<1||choice1>2);
if(choice1==1)
{printf("请输入起点:
");//输入要退机票的信息
scanf("%s",sour);
printf("请输入终点:
");
scanf("%s",dest);
printf("请输入起飞时的日期:
");
scanf("%s",day);
if(day[4]!
=46||day[7]!
=46)//确保日期输入正确
{
do
{printf("日期格式输入有误,请重新输入!
(年月日之用点“.”隔开)\n");
printf("请输入日期:
");
scanf("%s",day);
}while(day[4]!
=46&&day[7]!
=46);
}
for(i=0;iif(strcmp(pr[i].airport[0],sour)==0)
if(strcmp(pr[i].airport[1],dest)==0)
if(strcmp(pr[i].date,day)==0)
{printf("\n请输入您机票类型(1.头等舱2.公务舱3.经济舱):
");
scanf("%d",&choice2);
if(choice2<1||choice2>3)//用于保证输入的选项有意义
Do
{
printf("\n输入有误!
请重新输入!
\n");
printf("\n请输入您机票类型(1.头等舱2.公务舱3.经济舱):
");
scanf("%d",&choice2);
}while(choice2<1||choice2>3);
printf("\n请输入您退票的数量:
");
scanf("%d",&buynumber);
if(buynumber==0)
menu(pr,pk);
else
switch(choice2)
{case1:
printf("\n退票成功!
返回首页!
");
pr->Tounumb+=buynumber;//修改余票数量
menu(pr,pk);
break;
case2:
printf("\n退票成功!
返回首页!
");
pr->Gongnumb+=buynumber;//修改余票数量
menu(pr,pk);
break;
case3:
printf("\n退票成功!
返回首页!
");
pr->Jingnumb+=buynumber;//修改余票数量
menu(pr,pk);
}
}
}
else
{system("cls");
menu(pr,pk);
}
六、程序运行效果图
开始进入程序:
当输入1时:
当输入2时:
当输入3时:
当输入4时:
7、总结
经过一周对C语言课程设计(航空票务管理程序)的研究主要有以下几点感受:
首先,C语言课程设计很好的反映了自己这一学期对C语言基础知识的掌握情况,让自己清醒的认识到自己的真实水平。
不动手不知道,自己亲自动手设计程序时才感觉到知识的不扎实。
有的知识虽然已经学过,但是用起来还是感觉有点模糊,这也算是给自己的一个警醒吧。
另外,编写程序时有些自己想要编写的功能用已学的知识不能实现,这样就要去上网或查阅课外书来学习一些其他的知识,我感觉这样很好。
这样不仅会拓宽自己的知识面,还会提高自己的自学能力。
同时,宿舍里的同学集体讨论如何去实现各种功能,各自发表看法彼此交流也是一种学习的过程。
最深刻的感受就是编写程序过程中的酸甜苦辣。
刚开始构思时漏洞百出,程序出错。
但是令人高兴的是通过不断的调试程序,不断的出错,然后不断的修改,从这过程中学到了一些调试程序的技巧。
虽然有些语句没有语法错误,但是如果语句顺序不对也会提示错误,例如errorC2143:
syntaxerror:
missing';'before'type'errorC2275:
'FILE':
illegaluseofthistypeasanexpression等错误提示。
经过痛苦又快乐的调试过程之后,当自己自如的运行着程序时成就感十足啊!
顿时感觉之前付出的一切值了,实在是值了。
总之,我感觉C语言课程设计的重要性不比C语言课堂差。
课程设计提高了我们的动手能力,我们能将课本上的死知识灵活地应用到生活当中,还有就是能够感受到十足的成就感,增加学习专业课的兴趣。
期待下次课程设计,爱课程设计!
八、参考文献
李春葆、增平、喻丹丹.C语言程序设计教程(第2版).清华大学出版社,2011
九、程序清单
#include
#include
#include
#defineNUM100
Structflt//记录各个航班的信息
{charairport[2][10];//起点、终点
CharFltno[20];//航班号
chardate[20];
CharTime1[100],Time2[100];//起飞时间、到达时间
intTounumb,Gongnumb,Jingnumb;//三个不同类型的机票的数量
intTouprice,Gongprice,Jingprice;//三种机票的价格
};
Structticket//机票信息
{charbuyer[20];//购票者姓名
CharID[20];//购买者身份证号
Charsource[20],dest[20];//始点、终点
Charfltno;//航班号
Chartime1,time2;//起飞时间、到达时间
inttounumb,gongnumb,jingnumb;//三个不同类型的机票的数量
floattouprice,gongprice,jingprice;//三种机票的价格
};
voidmenu(structflt*pr,structticket*pk);//显示主菜单的函数
voidcheck(structflt*pr,structticket*pk);//查询航班的函数
voidbuy(structflt*pr,structticket*pk);//购买机票的函数
voidreturnt(structflt*pr,structticket*pk);//退订机票的函数
Voidmain()//主函数
{
structticketcheque;
structticket*pk;
structfltairportinfor[NUM]={
{"qingdao","beijing","f111","2012.05.01","2012年05月01日12时00分","2012年05月01日15时00分",100,100,100,1000,800,500},
{"qingdao","shanghai","f112","2012.05.01","2012年05月01日12时00分","2012年05月01日16时00分",100,100,100,1000,800,500},
{"beijing","shanghai","f113","2012.05.01","2012年05月01日12时00分","2012年05月01日18时00分",100,100,100,1800,1500,1000}};
structflt*pr;
pr=airportinfor;
pk=&cheque;
menu(pr,pk);
}
voidmenu(structflt*pr,structticket*pk)//显示主菜单的函数
{inta;
printf("\n******************************************************************");
printf("\n\n-------------------欢迎来到青岛流亭机场-----------------------\n\n\n");
printf("1,查询机票\n");
printf("2,购买机票\n");
printf("3,退订机票\n");
printf("4,退出程序\n");
printf("请输入序列号:
");