1目录1软件设计..................................................................................................21.1主要功能.......................................................................................21.2程序模块.......................................................................................21.3结构体............................................................................................21.4文件指针定义...............................................................................31.5函数声明.......................................................................................31.6流程图............................................................................................41.7说明..............................................................................................142软件测试................................................................................................153算法改进................................................................................................234开发体会................................................................................................23附录:源代码清单..................................................................................2421软件设计1.1主要功能本程序最多支持管理100个航班信息,10000机票信息,管理员可以进行航班信息的输入、单个或全部航班信息的删除、航班信息查询、旅客信息输入、机票信息查询、机票订购以及机票退订等功能,其中航班信息查询支持按航班号查询以及按目的地和起飞时间查询两种方式,机票信息查询支持按航班号查询、按旅客姓名查询以及按机票编号查询三种方式。程序运行开始时要输入管理员密码(默认为U200914197),通过后可以自由进行操作,但需要按提示操作。具体功能如下:1.菜单①主菜单②航班信息查询方式菜单③航班信息维护方式菜单④机票信息查询方式菜单2.文件读取①本地航班信息读取②本地机票信息读取3.文件保存①本地航班信息保存②本地机票信息保存4.信息输入①航班信息输入②机票信息输入5.查询①航班信息查询②机票信息查询6.航班信息维护7.订票与退票1.2程序模块1.菜单模块①主菜单②航班信息查询方式菜单③航班信息维护方式菜单④机票信息查询方式菜单2.文件读取模块①本地航班信息读取②本地机票信息读取3.文件保存模块①本地航班信息保存②本地机票信息保存4.信息输入模块①航班信息输入②机票信息输入5.查询模块①航班信息查询②机票信息查询6.航班信息维护模块7.订票与退票模块1.3结构体structFLIGHT//航班信息结构{charflight_num[10];//航班号charstart[10];//出发地3chardestination[10];//目的地chartakeoff_time[8];//起飞时刻chararrive_time[8];//到达时刻unsignedintnum;//总票数unsignedintleft;//剩余票数unsignedintprice;//价格};structTICKET//机票信息结构{charflight_num[10];//航班号charticket_num[10];//机票编号charstart[10];//出发地chardestination[10];//目的地chartakeoff_time[8];//起飞时刻chararrive_time[8];//到达时刻chargate_num[5];//登机口charseat_num[10];//座位号charname[10];//姓名charsex[4];//性别charid_num[20];//身份证号charphone_num[16];//联系电话};structFLIGHTall[M];//航班结构数组structFLIGHT*pp;//指向航班的结构数组structTICKETpassenger[N];//机票信息结构数组structTICKET*qq;//1.4文件指针定义FILE*fp_flight_info,*fp_ticket_info;//航班信息文件指针,机票信息文件指针1.5函数声明voidflight_info_input();//航班信息输入函数voidflight_info_delete();//单个航班信息删除voidflight_info_deleteall();//全部航班信息删除voidticket_info_input(structFLIGHT*p);//机票信息输入voidticket_book();//机票订购voidticket_cancel();//机票退订4voidfileread1();//读取本地航班信息voidfileread2();//读取本地机票信息voidfilesave1();//保存本地航班信息voidfilesave2();//保存本地机票信息voidsearch_flight_num();//按航班号查询航班信息voidsearch_destination_time();//按目的地和起飞时间查询航班信息voidsearch_ticket_flight_num();//按航班号查询机票信息voidsearch_ticket_name();//按旅客姓名查询机票信息voidsearch_ticket_num();//按机票编号查询机票信息voidrootmenu();//主菜单voidmenu1();//航班信息查询方式菜单voidmenu2();//航班信息维护方式菜单voidmenu3();//机票信息查询方式菜单1.6流程图航班信息查询旅客信息查询机票订购机票退订航班信息维护保存退出退出按目的地和起飞时间按姓名查询按航班号查询退出按机票号查询航班信息输入单个航班信息删除全部航班信息删除退出飞机票系统按航班号系统总体结构5main函数流程图开始显示说明以及提示。intx=0;判断密码是否正确输入密码pp=&all[0];qq=&passenger[0];fileread1();fileread2();rootmenu();结束是否x++;x==3;结束是否6主菜单voidrootmenu()流程图menu1,menu2,menu3的流程图与主菜单的流程图一样,不再重复。是否menu1();‘1’‘2’‘3’‘4’‘5’‘6’开始显示菜单c='1'&&c='6'给c赋值switch(c)菜单一保存退出航班维护退票订票菜单三结束7开始能否打开文件新建指针返回文件开头初值能否读取一个continue;pp++,flinum++关闭文件否能结束本地文件读取航班信息读取与机票信息读取流程图是一样的,不再重复。8能否打开文件指针返回文件开头写文件否能结束关闭文件显示提示开始本地文件保存9开始1非0相关数据的输入显示提示cc=='Y'是否菜单结束航班信息输入10开始显示提示cc=='Y'相关数据的输入显示提示是否菜单k=i-1;kflinum;执行复制操作k++;pP=pp-1;flinum=flinum-1;cc1=='Y'是否显示菜单显示菜单结束单个航班信息删除全部航班信息删除与此流程图类似,不再重复11开始显示提示相关数据的输入inti=0;iM;是否满足查找条件是否打印i++;j==0;提示,主菜单是否提示,菜单1航班信息查询机票信息查询与此类似,不再重复。12开始显示提示cc=='Y'显示提示否是菜单1相关数据的输入all[k].left==0是否显示菜单显示提示显示提示信息输入打印机票主菜单机票订购13开始显示提示cc=='Y'显示提示否是菜单3kticnum;是否相应航班剩余机票加1提示退票成功主菜单k=0;执行复制操作k++;机票退订141.7说明此程序中除地名人名性别用中文输入外,其他全用英文输入,时间请用24时制且按09:04的格式输入(注意冒号为英文下输入)。为了更流畅地运行程序请按提示操作。正常的程序退出只能使用主菜单下的保存退出,否则将丢失信息。系统的初始密码为U200914197。接下来介绍关于程序中的一些具体实现。航班信息以及机票信息用的是结构数组存储,且用结构指针进行传递。定义了两个外部静态型变量计数航班数以及已售机票数,又定义了两个文件指针分别指向存储航班信息的文件和存储机票信息的文件。为了将界面做的比较友好,做了四个菜单,且主函数中除了验证密码外功能外,其他均是调用函数。航班信息包括航班号、出发地、目的地、起飞时刻、到达时刻、总票数、剩余票数、价格,机票信息包括航班号、机票编号、出发地、目的地、起飞时刻、到达时刻、登机口、座位号、姓名、性别、身份证号、联系电话,其中航班号、出发地、目的地、起飞时刻、到达时刻、价格均是真实信息,总票数、剩余票数是随手写的,航班信息在显示时均会显示,且会有一个内部编号以供订票用、删除用,这样在其它函数中就不用重复写查询函数,机票编号是用B1+机票订购次序编号而成,登机口是用A+航班号后两位而成的(用到了sprintf函数),座位号是用买票的先后顺序而生成的,且统一按三位的格式显示,由于DOS屏宽的限制机票信息不显示身份证号码以及联系电话。菜单选项均用字符识别以避免在使用数字时会不停地显示。文件读取时是用的fread函数的返回值是读取的项数而构成的for循环以读出所有信息且不会多读取。保存函数是直接写信息。该程序只读一次文件且只写一次文件,所以退出只能用主菜单下的保存退出。航班或机票信息输入时char型均用gets函数输入,int型均用scanf函数输入。所有查询函数均用strcmp或者直接比较数值大小来实现,其中按目的地和起飞时间查询航班信息时,时间只取前两位,所以用到strncmp函数。此外,航班信息删除以及退票均是使用后一个信息替换前一个信息且构成for循环来实现的。改程序中最大的亮点是可以卖出退订的机票而生成机票号和座位号时可以使用退了的号码而不出错。改程序其实可以继续增加功能,例如更改密码的功能,有更加多的查询方式,以及可以支持不同的输入(如地名用中文、拼音、缩写等),目的地还要显示所降落的机场,所坐飞机的机型、舱位等级,支持更多的出发地(默认为武汉),还有就是支持不同的日期以及可以根据一个星期的航班信息查询以后任一天的航班信息。152软件测试16171819202122233算法改进该程序如果用链表这种非线性存储结构进行的话,效率可能会更高。而在进行程序时,有的地方也要分