飞机票销售系统 软件课程设计.docx
《飞机票销售系统 软件课程设计.docx》由会员分享,可在线阅读,更多相关《飞机票销售系统 软件课程设计.docx(46页珍藏版)》请在冰豆网上搜索。
飞机票销售系统软件课程设计
软件课程设计报告
班级:
光电0905班
姓名:
邵亚云
学号:
U200913045
1、软件设计………………………………………………………………1
1.1、软件的概要设计……………………………………………………1
1.1.1、总体………………………………………………………………1
1.1.2、子函数……………………………………………………………2
1.1.3、各子函数功能……………………………………………………3
1.2、软件的设计思想…………………………………………………6
1.2.1、航班信息的数组…………………………………………………6
1.2.2、顾客飞机票信息的数组…………………………………………7
1.3、主函数及各子函数流程图………………………………………8
2、软件测试……………………………………………………………14
2.1、主菜单……………………………………………………………14
2.2、初始化航班………………………………………………………14
2.3、航班订票…………………………………………………………17
2.4、航班退票…………………………………………………………19
2.5、航班查询…………………………………………………………20
2.6、查询余票…………………………………………………………22
2.7、结束………………………………………………………………23
3、算法改进……………………………………………………………24
4、开发体会……………………………………………………………26
附:
源代码清单…………………………………………………………28
参考文献………………………………………………………………56
1、软件设计
1.1、软件的概要设计
1.1.1、总体
这个软件总体上分为六个部分,即:
初始化航班、查询航班信息、航班订票、航班退票、查询机票、查询余票六个部分。
其总体的结构图如下:
查
询
余
票
查
询
机
票
航
班
订
票
航
班
退
票
查
询
航
班
信
息
初
始
化
航
班
飞机票销售系统
1、
1.1.2、子函数
为清楚地完成这样一个飞机票销售系统,采用了以下12个子函数:
voidmenu();
voidadd();
voidoutput();
voidoutput1();
intsavef();
intsavef1();
intreadf();
voidinquire();
voidinquire1();
voidbook();
voidrefund();
voidsearchnum();
1.1.3、各子函数功能
下面将分别地来介绍12个子函数的功能。
1、voidmenu(),显示主菜单的函数
这个函数的主要功能是显示一个欢迎字幕,并为顾客提供这个飞机票销售系统的所有功能和任务。
即初始化航班、查询航班信息、航班订票、航班退票、查询机票、查询余票等服务,顾客在输入相应的数字之后按确认键即可进行相应的操作.
2、voidadd(),航班初始化函数
这个函数的主要功能是初始化航班信息(即添加航班信息),添加的信息包括航班号、起始站、终点站、起飞时间、航班容载量、机票折扣以及机票价格等。
这样可以在缺少某项航班信息的情况下及时添加。
初始化后文件以air.txt形式格式保存下来,以方便后续的试用。
因此在第一次试用的时候要初始化,否则系统将没有任何的机票信息。
3、voidoutput(),航班输出函数
本函数的作用是输出航班信息。
在输入了初始化航班信息之后,此函数可以在文件中找到air.txt,并输出来。
4、voidoutput1(),机票信息输出函数
本函数的作用是输出顾客机票信息。
作用与上述类似,在成功订票之后,此函数可以在文件中找到people.txt,并输出来。
5、intsavef(),航班信息保存函数
本函数的作用是保存输入的航班信息,以air.txt形式格式保存,可以在文件中查找到,并在后面要调用的时候及时调出来进行查询。
6、intsavef1(),机票信息保存函数
本函数的作用是保存输入的顾客机票信息,以people.txt形式格式保存,可以在文件中查找到,并在后面要调用的时候及时调出来进行查询。
7、intreadf(),航班信息读取函数
本函数的作用是读取航班信息,在后续订票操作中,需要用到初始化的航班信息,因此需要一个从内部文件中读取航班信息的操作。
8、voidinquire(),航班信息查询函数
本函数的作用是查询航班信息,为了方便销售员或者顾客的查询,因此需要将内部文件中的航班信息表达出来,因此这个函数的作用是表达出航班信息。
9、voidinquire1(),机票信息查询函数
本函数的作用是查询顾客机票信息。
在顾客定好票之后,需要验证自己的票是否是正确的,或者查询一下飞机票的信息,此时需要一个飞机票的查询操作,此函数的作用即在此。
10、voidbook(),机票预定函数
本函数的作用是执行订票操作,订票操作中需要顾客将自己的信息完整地写入到系统中,考虑到只要身份证号码正确就可以显示顾客的大部分信息,因此没有将更多繁琐的信息要求加上去了。
11、voidrefund(),退票函数
本函数的作用是执行退票操作,由于是退票,考虑到实际情况,因此需要输入多个信息以确认机票与主人是对应的。
12、voidsearchnum(),查询余票函数
本函数的作用是查询剩余票数,在设计中使用了仅输入航班号即可查询航班信息的做法,方便操作。
1.2软件的设计思想
这次的飞机票销售系统由于数据量较大,且需要以不同的数据类型来分类,因此采用了两个类似的结构变量来实现上述的设计。
详细如下:
1.2.1、航班信息的数组
struct
{
intair_num;//航班号
charStart[15];//出发地
charEnd[15];//终点站
charTime[25];//起飞时间
inttotal;//总票数
floatH;//折扣
intleft;//剩余票数
intPrice;//票价
}air;
1.2.2、顾客飞机票信息的数组
struct
{
intair_num;//航班号
charStart[15];//出发地
charEnd[15];//终点站
intPrice;//票价
floatH;//折扣
charname[8];//姓名
charID[20];//身份证号
intleft;//剩余票数
intk;//购买票数
}people;
1.3、主函数及各子函数流程图
main
主函数main()
查询余票
查询机票
否
否
否
否
否
否
是
是
是
是
是
是
航班退票
初始化航班
航班订票
查询航班信息
7
6
5
4
3
2
menu
1
选择
是
结束
否
是
否
结束
继续
不保存
是
否
保存至文件
保存
依次输入航班的各项信息
添加航班信息
否
否
否
否
否
否
否
是
是
是
是
是
是
是
输入错误,重新输入
查询航班信息
对不起,不存在要查询的航班信息
显示所要查找的航班信息
存在且正确
按起始站和终点站查找
按起飞时间查找
按起始站查找
按终点站查找
按航班号查找
6
5
4
3
2
1
选择
查询航班信息
航班订票
否
是
结束
继续订票
订票成功,写入文件
依次输入项目
退票不成功
退票成功
否
是
否
是
退票不成功
结束
继续
退票成功
依次输入航班的各项信息
航班退票
正确
是
否
显示余票信息
否
是
错误
结束
继续
输入航班号
查询余票
错误
存在
2、软件测试
以下是这套软件系统的详细测试结果,并以截图的形式展现出来,当然只是展示了一部分有代表性的图。
下面是详细介绍:
2.1、主菜单
运行程序,将出现这样一个欢迎的界面并提供以下7个选项
2.2、初始化航班
如果是第一次使用,则必须先初始化航班信息,否则系统内的数据将是空的,不能使用。
选择“1”,则出现以下的界面,根据提示依次输入航班号、起始站、终点站、起飞时间、容载量、折扣和价格。
若不保存,则会出现警告。
若要正常写入信息,则保存,下面将有一个信息预览,按任意键继续输入。
依次输入十个航班信息
输入完成以后,将会有一个总体的预览
2.3、航班订票
初始化完毕后,此时,我们便可以在这个系统里订票了,按要求依次输入
订票成功则显示这样的界面
由于票数有限,因此当输入的购买票数超过总票数时,系统将无法完成售票操作
然后依次买票,我在自己操作的时候,买了50次票。
操作结束后,会出现以下清单以提示我买的所有机票信息。
2.4、航班退票
可以在航班退票中进行退票操作
按要求依次输入顾客信息,如下
若信息正确则退票成功,若不正确则显示一下内容,表示输入有误。
2.5、航班查询
若需要查询航班信息,则选择查询航班信息,出现以下界面。
选择以何种方式查询
如选择以航班号查询
选择以起始站查询,则为:
依此类推
2.6、查询余票
选择查询余票,输入航班号,即可进行余票查询,如下:
2.7、结束
当完成所有的操作后,将会出现一个如下界面,表示顾客已经退出了此系统。
此时按任意键可以回到欢迎界面。
3、算法改进
这次的软件课程设计采用的是数组的方式,这样调试起来比较简单,没有太多的难度。
这个飞机票销售系统的主要亮点在于,抛弃了原本复杂的函数定义,使用了简洁的方式,使得程序更具有可读性。
在界面的友好性方面也做了处理,使得界面更加具有观赏性,符合了飞机票销售系统的要求。
如:
printf("\n\t\t\t请输入航班号:
");
fflush(stdin);
scanf("%d",&a_data.air_num);
printf("\t\t\t请输入起始站:
");
fflush(stdin);
scanf("%s",a_data.Start);
printf("\t\t\t请输入终点站:
");
fflush(stdin);
scanf("%s",a_data.End);
printf("\t\t\t请起飞输入时间(如:
2010.01.01.01.00):
");
fflush(stdin);
scanf("%s",a_data.Time);
printf("\t\t\t请输入航班容载量:
");
fflush(stdin);
scanf("%d",&a_data.total);
a_data.left=0;
printf("\t\t\t请输入机票折扣");
fflush(stdin);
scanf("%f",&a_data.H);
printf("\t\t\t请输入机票价格:
");
fflush(stdin);
scanf("%d",&a_data.Price);
这样一段使用了fflush(stdin),为了确保不影响后面的数据读取,在读完一个字符串后紧接着又要读取一个字符,此时应该先执行fflush(stdin)。
尽管不是非常大的改动或者想法,但是为程序的可读性和可操作性提供了很大的支持。
像这样的情况程序里还有一些,在这里就不赘述。
这个程序还有很多可以改进的地方,但是由于时间有限,就没有在算法改进上花太多的时间。
在以后的学习中还要仔细思考,进行改进。
4、开发体会
现在终于到写开发体会的时候了,心里的一根弦终于可以松一下了。
在刚接到这样的一个任务的时候,我真是惊呆了,我们这样的水平能够完成这样的作业吗?
因为当时想,对于一个只是对C语言有所了解的大二学生来说要做出一个飞机票销售系统,那绝对是非常难的,当时甚至觉得这是不可能的。
但是这个障碍终究还是要跨过去,这是没有办法的,因为我知道三个星期后我一定要交上这样的一份完整(尽管不完美)的飞机票销售系统,因此,在想到了这些后,便开始了我自认为不可能完成的任务。
后面发现,原来也没有我想象得那么难。
由于我们有连续三个星期的不间断的上机时间,又有这么的老师和助教陪着我,在我有问题的时候及时帮我分析,帮我们解决。
这使得我在前进的路上多了很多的帮助,使我最终能够走到这一步。
因此在这里要感谢曾经给我帮助的老师和助教们,还有在我编程路上的帮助我的同学们,谢谢你们。
当然,在编写的过程中,和想象中的一样,出现了许多的问题,甚至更难。
其中也是犯了很多的错误,有些是莫名其妙的,有些是很小的低级错误,有些是根本性的想法错误,但是这些错误都使得我不得不一次一次地检查、纠正。
通过这无数次的检查纠正再犯错再检查的过程,我明白了,在编程的路上,错误不分大小,我要时刻注意不能犯错误。
即使犯错了,也不能放弃,因为可能就是在一个“;”之后,成功就在眼前了。
这个系统终于出来了,这几个星期特别是后期阶段,真是可以用一句话来表达:
“为伊消得人憔悴”。
心里的兴奋真是无法表达。
但是在兴奋之余,我还明白,这样的系统肯定是不能拿出去使用的,因为这个程序还有很多的不科学、很多的不合理、很多的问题。
而我们在以后的学习甚至是工作中是一定要用到这样的一种软件开发的技术,那时我们的成果就一定要更加科学,更加具有实用性。
因此,我现在就要继续前行,不能满足于一个只能拿来看的系统上。
一句歌词:
前面的路还很长,带着你的梦想,朝着成功的方向,鼓起勇气向前闯!
改编歌词:
软件的路还很长,带着我的VC,朝着成功的系统,鼓起勇气向前闯!
附:
源代码清单
#include
#include
#include
#include
#defineLEN180
#defineN100
#definePRINTprintf("%-3d%-8s%-8s%-s\t%-d\t%-d\t%-3.1f\t%4d\n",data[i].air_num,data[i].Start,data[i].End,data[i].Time,data[i].total,data[i].left,data[i].H,data[i].Price)
#definePUTputs("航班号起飞站终点站起飞时间总容量售票数折扣票价/张")
#definePRINT1printf("%-3d%-8s%-8s%-6s\t%s\t%-3d\t%-3.1f\t%4d\n",l[j].air_num,l[j].Start,l[j].End,l[j].name,l[j].ID,l[j].k,l[j].H,l[j].Price)
#definePUT1puts("航班号起飞站终点站姓名18位身份证号定票数折扣票价/张")
voidmenu();//主程序
voidadd();//初始化航班
intsavef1();//客户信息文件保存
voidoutput();//文件输出
voidoutput1();//文件输出
intsavef();//机票信息文件保存
intreadf();//文件读取
voidinquire();//查询机票信息
voidinquire1();//查询客户信息
voidbook();//预定航班
voidrefund();//取消航班
voidsearchnum();//查询剩余票数
typedefstruct
{
intair_num;//航班号
charStart[15];//出发地
charEnd[15];//终点站
intPrice;//票价
floatH;//折扣
charname[8];//姓名
charID[20];//身份证号
intleft;//剩余票数
intk;//购买票数
}people;
peoplel[LEN];
typedefstruct
{
intair_num;//航班号
charStart[15];//出发地
charEnd[15];//终点站
charTime[25];//起飞时间
inttotal;//总票数
floatH;//折扣
intleft;//剩余票数
intPrice;//票价
}air;
airdata[LEN];
intRecNo=0;
intP=0;
intmain()
{
charchoice;
do
{
menu();
printf("请输入选项并按回车键结束:
");
if((readf()!
=0))
{
printf("\n数据文件错误,系统将被退出...");
exit
(1);
}
fflush(stdin);
scanf("%c",&choice);
switch(system("cls"),choice)
{
case'1':
puts("-----------------初始化航班数据库-----------------"
"-----------------请输入相应的航班信息...-----------------");
add();
break;
case'2':
puts("-----------------航班查询-----------------");
inquire();
break;
case'3':
puts("-----------------航班订票-----------------");
book();
break;
case'4':
puts("-----------------航班退票-----------------");
refund();
break;
case'5':
puts("-----------------查询机票-----------------");
output();
break;
case'6':
puts("-----------------查询余票-----------------");
searchnum();
break;
case'7':
break;
default:
puts("请输入您的选择");
break;
}
}
while(choice!
='7');
puts("\n\n\n\n\n\n\n\n\n\t\t\t\t非常感谢,祝您旅途愉快!
");
return0;
}
voidmenu()
{
system("cls");
system("color37");
puts("================================================================================"
"--------------------欢迎来到华中大机场,请选择您需要的服务---------------"
"===========================================================================\n"
"\n"
"********\n"
"\n"
"1、初始化航班\n"
"2、查询航班信息\n"
"3、航班订票\n"
"4、航班退票\n"
"5、查询机票\n"
"6、查询余票\n"
"7、退出售票系统\n"
"\n"
"********\n\n\n"
"==============================================================================");
}
voidadd()
{
inti,j;
charchoice;
aira_data;
for(j=1;RecNo{
printf("\n\t\t\t请输入航班号:
");
fflush(stdin);
scanf("%d",&a_data.air_num);
printf("\t\t\t请输入起始站:
");
fflush(stdin);
scanf("%s",a_data.Start);
printf("\t\t\t请输入终点站:
");
fflush(stdin);
scanf("%s",a_data.End);
printf("\t\t\t请起飞输入时间(如:
2010.01.01.01.00):
");
fflush(stdin);
scanf("%s",a_data.Time);
printf("\t\t\t请输入航班容载量:
");
fflush(stdin);
scanf("%d",&a_data.total);
a_data.left=0;
printf("\t\t\t请输入机票折扣");
fflush(stdin);
scanf("%f",&a_data.H);
printf("\t\t\t请输入机票价格:
");
fflush(stdin);
scanf("%d",&a_data.Price);
printf("注意:
是否要保存信息?
?
?
若按任意键则(是)N(否)");
fflush(stdin);
scanf("%c",&choice);
if(choice=='N'||choice=='n')
{
printf("\n\t\t\t!
!
注意!
!
数据未保存!
!
!
");
}
else
{
for(i=0;iif(data[i].air_num==a