1、软件课程设计报告飞机票系统软件课程设计报告 班级: 光电0905班 姓名: 李晓波 学号: U2009142061软件设计1.1设计题目飞机票销售系统。1.2设计要求 运用C语言基本知识,结合相关算法思想和数据结构,编写一个单微机系统下运行的飞机票销售系统。飞机票销售系统应实现航班信息查询、机票购买、机票信息查询、机票退购等功能。1.3设计思想 本程序分为四个模块,即航班信息查询模块、订票模块、机票信息查询模块和退票模块。程序中定义了三种结构为PLANES、BOOK和TICKETS,分别用于航班信息、旅客信息和机票信息的存取和修改。为了储存航班信息、旅客信息和机票信息,程序中建立了三个文件分别
2、为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,TI
3、CKETS *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()为按起飞
4、时间查询航班信息函数。按航班号查询航班信息函数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,按目
5、的地查询航班信息,输入目的地“上海”。查找到相应航班信息如下:若在子菜单中选择3,按起飞时间查找航班信息。输入起飞时间“08:00”。查找到相应航班信息如下:2.2订票模块测试在主菜单中选择2,进行机票购买。显示购票界面。如要购买从武汉飞往深圳的航班机票,则输入相应航班号UK1266。系统将提示旅客输入姓名,性别和身份证号等旅客信息。如下图,输入姓名“张三”,性别“男”,身份证号“450562*”。若该航班仍有剩余机票,则旅客购票成功,显示“购票成功”,同时生成机票编号并显示到屏幕上。回到主菜单,选择1进入航班信息查询模块,再选择1,输入张三购买机票对应的航班号。在显示的航班信息中,剩余机票数
6、已由100变为99。2.3机票信息查询模块测试接着上次步骤,回到主菜单,选择3进入机票信息查询模块。系统提示输入机票编号。输入张三购买的机票的编号“51”。系统查询到相应的机票信息并显示到屏幕如下:2.4退票模块测试在主菜单中选择4,进入退票模块。系统提示输入需要退还的机票的编号,输入张三购买的机票的编号“51”。屏幕上显示“退票成功”字样,则表示旅客已成功退票。此时若回到主菜单中选择3进入机票信息查询模块,输入张三曾购买的机票的编号,则显示“对不起,该机票编号不存在”。在主菜单中选择1进入航班信息查询模块,按任意一种查找方式查找到张三曾购买的机票的航班信息,剩余机票数由99变回100。以上测
7、试仅以单人次购买单张机票为例,对于多人次购买多张机票,该系统的测试结果仍正确无误。3算法改进改进一: 在主函数中定义的数组BOOK a1400和TICKETS t1400用于临时存储旅客信息和机票信息,并可对其进行修改,同时也可以实现多次购票的功能。在经过认真思考后,我认为可以省去BOOK a1400和TICKETS t1400。在购票函数、机票信息查询函数和退票函数中可以临时定义BOOK型数组和TICKETS型数组,用追加方式打开book.txt和planes.txt并将文件中的信息读到相应数组中,如此一来也能实现对旅客信息和机票信息的修改、添加和删除,且能多次购票。改进二: 程序中10个航
8、班信息和50个已售出机票信息均通过初始化方式赋给相应的结构数组,再储存到相应的文件中。这种方式处理信息不够灵活,也不便于管理。因此,程序中可以增加一个航班信息添加模块。4开发体会 为了开发飞机票信息管理系统,我耗费了大量时间和精力,在开发的过程中,我遇到了许许多多的挫折,但也因此进行了反反复复的思考,从中得到了不少体会。 体会一:此次编程的内容较多,与以往的编程大不相同,因此刚开始设计软件时我有许多困惑,甚至无从下手。在后来的编程过程中,我深刻地体会到“模块化”这一设计思想的重要性。一个程序只有具备“模块化”这一特征才能有条不紊、条理清晰,否则会混乱不堪,可读性也受到影响。因此,要编写出一段正
9、确且美观整洁的程序,必须先大致将程序划分为几个模块,然后再分别让每个模块实现各自的功能。在我所编写的程序中,我将它大致划分成了航班信息查询模块、订票模块、机票信息查询模块和退票模块四个模块,而在航班信息查询模块中,我又将其细分为按航班号查询航班信息模块、按目的地查询航班信息模块和按起飞时间查询航班信息模块三个更小的模块。如此一来,程序大致的框架便有了,我的思路也因此变得清晰明了,从而也就不会无从下手了。 体会二:在第一次编写购票函数时,函数中没有使用任何形参,也没有采用追加方式打开文件,这导致系统无法记录已售出机票数,也不能实现多次购票。为了解决这个问题,我在购票函数中添加了形参int *a,
10、BOOK *q和TICKETS *m,并在主函数中定义了整型变量j、TICKETS型数组和BOOK型数组,从而使系统能记录已售出机票数并可以进行多次购票。 体会三:在完成任务的过程中,我深刻体会到软件的开发需要缜密的思维和一丝不苟的态度。一个不经意的小小的错误就可能导致程序错漏百出、面目全非,真可谓“失之毫厘,差之千里”。在编写退票函数时,我采用for循环记录机票信息和旅客信息,由于错将判断是否执行循环体的条件“k*a”写成“k*a+1”,导致信息录入不正确。因此每当我查询机票信息时总得不到正确的结果。经过多番的检查和思考,才发现这一错误。将错误纠正后,程序测试结果无误。这一纠错过程耗费了我大
11、量时间,严重影响了效率。所以我觉得严谨的思维是一个优秀的程序员所应具备的。多从事编程活动有助于培养良好的思维习惯。 这次飞机票销售系统的开发虽经历了不少挑战,遭遇了许多的挫折和打击,但我凭着自己的努力最终克服困难,完成了任务。尽管软件中仍存在诸多不足,但它是我多日心血的结晶,它包含了我这一路走来的酸甜苦辣。 通过这次软件设计,我成功地把所学C语言和数据结构知识应用到实际软件开发中去,掌握了中小规模软件设计和开发的方法和步骤,也深深地领略到了软件设计的魅力。附录:源代码清单#include#include#include#includetypedef struct planes /储存航班信息的
12、结构 char planenum7; char start12; char destination12; char flytime6; int tickets; int people; int price;PLANES;typedef struct book /储存旅客信息的结构 char name20; char sex8; char ID20; int ticketnum;BOOK;typedef struct tickets /储存机票信息的结构 int ticketnum; char planenum7; char start12; char destination12; char f
13、lytime6; char name20; char sex8;TICKETS;void menu();void information1();void information2(TICKETS *x);void search1();void menu1();void search11();void search12();void search13();void book(int *k,BOOK *q,TICKETS *m);void search2(int *n,TICKETS *w);void refund(int *a,BOOK *b,TICKETS *c);void main() me
14、nu(); /显示主菜单 information1(); /录入10个航班信息 int choice=0; int j=50; /已售出机票数 BOOK a1400; /用于储存旅客信息的结构数组,最多有1400组 TICKETS t1400; /用于储存机票信息的结构数组,最多有1400组 information2(t); /录入50个已售出机票信息 for(;choice!=5;) scanf(%d,&choice); switch(choice) case 1: search1(); break; case 2: book(&j,a,t); break; case 3: search2(&j,t); break; case 4: refund(&j,a,t); break; case 5: system(cls); break; default : break; system(color CF); printf( tt *n tt * 感谢您的使用,祝您旅途愉快,再见! *n tt *
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1