软件课程设计报告飞机票系统Word格式文档下载.docx
《软件课程设计报告飞机票系统Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《软件课程设计报告飞机票系统Word格式文档下载.docx(38页珍藏版)》请在冰豆网上搜索。
为了储存航班信息、旅客信息和机票信息,程序中建立了三个文件分别为planes.txt、book.txt和tickets.txt。
航班信息查询模块的功能主要由函数search1()实现,而航班信息查询模块中又分为按航班号查询航班信息模块、按目的地查询航班信息模块和按起飞时间查询航班信息模块三个小模块,因此search1()中分别调用函数search11()、search12()和search13()来实现每个小模块的功能。
订票模块的功能由函数book(int*k,BOOK*q,TICKETS*m)实现。
机票信息查询模块功能由函数search2(int*n,TICKETS*w)实现。
退票模块功能由函数refund(int*a,BOOK*b,TICKETS*c)实现。
每个模块的函数都通过对结构数组和文件的操作来实现对数据的存取和修改,从而实现各自的功能。
程序中采用的查找数据方式为顺序查找。
1.4流程图
主函数流程图
search1()为航班信息查询函数,book(int*k,BOOK*q,TICKETS*m)为订票函数,search2(int*n,TICKETS*w)为机票信息查询函数,refund(int*a,BOOK*b,TICKETS*c)为退票函数。
航班信息查询函数search1()流程图
search11()为按航班号查询航班信息函数,search12()为按目的地查询航班信息函数,search13()为按起飞时间查询航班信息函数。
按航班号查询航班信息函数search11()流程图
search12()和search13()的流程图同理,仅需改变判断条件。
订购机票函数book(int*k,BOOK*q,TICKETS*m)流程图
机票信息查询函数search2(int*n,TICKETS*w)流程图
退票函数refund(int*a,BOOK*b,TICKETS*c)流程图
2软件测试
2.1航班信息查询模块测试
运行程序,首先进入主菜单界面。
选择1,进入航班信息查询模块。
显示子菜单界面。
选择1,按航班号查询航班信息。
输入航班号“ZH9658”。
查找到相应航班信息如下:
若在子菜单中选择2,按目的地查询航班信息,输入目的地“上海”。
若在子菜单中选择3,按起飞时间查找航班信息。
输入起飞时间“08:
00”。
2.2订票模块测试
在主菜单中选择2,进行机票购买。
显示购票界面。
如要购买从武汉飞往深圳的航班机票,则输入相应航班号UK1266。
系统将提示旅客输入姓名,性别和身份证号等旅客信息。
如下图,输入姓名“张三”,性别“男”,身份证号“450562************”。
若该航班仍有剩余机票,则旅客购票成功,显示“购票成功”,同时生成机票编号并显示到屏幕上。
回到主菜单,选择1进入航班信息查询模块,再选择1,输入张三购买机票对应的航班号。
在显示的航班信息中,剩余机票数已由100变为99。
2.3机票信息查询模块测试
接着上次步骤,回到主菜单,选择3进入机票信息查询模块。
系统提示输入机票编号。
输入张三购买的机票的编号“51”。
系统查询到相应的机票信息并显示到屏幕如下:
2.4退票模块测试
在主菜单中选择4,进入退票模块。
系统提示输入需要退还的机票的编号,输入张三购买的机票的编号“51”。
屏幕上显示“退票成功”字样,则表示旅客已成功退票。
此时若回到主菜单中选择3进入机票信息查询模块,输入张三曾购买的机票的编号,则显示“对不起,该机票编号不存在”。
在主菜单中选择1进入航班信息查询模块,按任意一种查找方式查找到张三曾购买的机票的航班信息,剩余机票数由99变回100。
以上测试仅以单人次购买单张机票为例,对于多人次购买多张机票,该系统的测试结果仍正确无误。
3算法改进
改进一:
在主函数中定义的数组BOOKa[1400]和TICKETSt[1400]用于临时存储旅客信息和机票信息,并可对其进行修改,同时也可以实现多次购票的功能。
在经过认真思考后,我认为可以省去BOOKa[1400]和TICKETSt[1400]。
在购票函数、机票信息查询函数和退票函数中可以临时定义BOOK型数组和TICKETS型数组,用追加方式打开book.txt和planes.txt并将文件中的信息读到相应数组中,如此一来也能实现对旅客信息和机票信息的修改、添加和删除,且能多次购票。
改进二:
程序中10个航班信息和50个已售出机票信息均通过初始化方式赋给相应的结构数组,再储存到相应的文件中。
这种方式处理信息不够灵活,也不便于管理。
因此,程序中可以增加一个航班信息添加模块。
4开发体会
为了开发飞机票信息管理系统,我耗费了大量时间和精力,在开发的过程中,我遇到了许许多多的挫折,但也因此进行了反反复复的思考,从中得到了不少体会。
体会一:
此次编程的内容较多,与以往的编程大不相同,因此刚开始设计软件时我有许多困惑,甚至无从下手。
在后来的编程过程中,我深刻地体会到“模块化”这一设计思想的重要性。
一个程序只有具备“模块化”这一特征才能有条不紊、条理清晰,否则会混乱不堪,可读性也受到影响。
因此,要编写出一段正确且美观整洁的程序,必须先大致将程序划分为几个模块,然后再分别让每个模块实现各自的功能。
在我所编写的程序中,我将它大致划分成了航班信息查询模块、订票模块、机票信息查询模块和退票模块四个模块,而在航班信息查询模块中,我又将其细分为按航班号查询航班信息模块、按目的地查询航班信息模块和按起飞时间查询航班信息模块三个更小的模块。
如此一来,程序大致的框架便有了,我的思路也因此变得清晰明了,从而也就不会无从下手了。
体会二:
在第一次编写购票函数时,函数中没有使用任何形参,也没有采用追加方式打开文件,这导致系统无法记录已售出机票数,也不能实现多次购票。
为了解决这个问题,我在购票函数中添加了形参int*a,BOOK*q和TICKETS*m,并在主函数中定义了整型变量j、TICKETS型数组和BOOK型数组,从而使系统能记录已售出机票数并可以进行多次购票。
体会三:
在完成任务的过程中,我深刻体会到软件的开发需要缜密的思维和一丝不苟的态度。
一个不经意的小小的错误就可能导致程序错漏百出、面目全非,真可谓“失之毫厘,差之千里”。
在编写退票函数时,我采用for循环记录机票信息和旅客信息,由于错将判断是否执行循环体的条件“k<
*a”写成“k<
*a+1”,导致信息录入不正确。
因此每当我查询机票信息时总得不到正确的结果。
经过多番的检查和思考,才发现这一错误。
将错误纠正后,程序测试结果无误。
这一纠错过程耗费了我大量时间,严重影响了效率。
所以我觉得严谨的思维是一个优秀的程序员所应具备的。
多从事编程活动有助于培养良好的思维习惯。
这次飞机票销售系统的开发虽经历了不少挑战,遭遇了许多的挫折和打击,但我凭着自己的努力最终克服困难,完成了任务。
尽管软件中仍存在诸多不足,但它是我多日心血的结晶,它包含了我这一路走来的酸甜苦辣。
通过这次软件设计,我成功地把所学C语言和数据结构知识应用到实际软件开发中去,掌握了中小规模软件设计和开发的方法和步骤,也深深地领略到了软件设计的魅力。
附录:
源代码清单
#include<
stdio.h>
stdlib.h>
string.h>
conio.h>
typedefstructplanes//储存航班信息的结构
{
charplanenum[7];
charstart[12];
chardestination[12];
charflytime[6];
inttickets;
intpeople;
intprice;
}PLANES;
typedefstructbook//储存旅客信息的结构
charname[20];
charsex[8];
charID[20];
intticketnum;
}BOOK;
typedefstructtickets//储存机票信息的结构
}TICKETS;
voidmenu();
voidinformation1();
voidinformation2(TICKETS*x);
voidsearch1();
voidmenu1();
voidsearch11();
voidsearch12();
voidsearch13();
voidbook(int*k,BOOK*q,TICKETS*m);
voidsearch2(int*n,TICKETS*w);
voidrefund(int*a,BOOK*b,TICKETS*c);
voidmain()
menu();
//显示主菜单
information1();
//录入10个航班信息
intchoice=0;
intj=50;
//已售出机票数
BOOKa[1400];
//用于储存旅客信息的结构数组,最多有1400组
TICKETSt[1400];
//用于储存机票信息的结构数组,最多有1400组
information2(t);
//录入50个已售出机票信息
for(;
choice!
=5;
)
{
scanf("
%d"
&
choice);
switch(choice)
{
case1:
search1();
break;
case2:
book(&
j,a,t);
case3:
search2(&
j,t);
case4:
refund(&
case5:
system("
cls"
);
default:
}
}
system("
colorCF"
printf("
\t\t**********************************************\n"
"
\t\t*感谢您的使用,祝您旅途愉快,再见!
*\n"
\t\t***********************