飞机票销售系统.docx
《飞机票销售系统.docx》由会员分享,可在线阅读,更多相关《飞机票销售系统.docx(66页珍藏版)》请在冰豆网上搜索。
![飞机票销售系统.docx](https://file1.bdocx.com/fileroot1/2023-1/2/9eaaf9d4-d8bb-4d39-956a-1251037e2802/9eaaf9d4-d8bb-4d39-956a-1251037e28021.gif)
飞机票销售系统
软件课程设计报告
(飞机票销售系统)
班级:
姓名:
学号:
目录
1软件课程设计任务分析.…...…………………………………………….……1
2软件设计……...………...…………………………………………….……2
2.1程序综述…………….……………………….…….…….………2
2.2程序函数详解……………………………………………………..3
2.2.1主函数………………………………………………………….3
2.2.2主菜单函数…………………………………………………….4
2.2.3航班信息查询函数………………………………………….5
2.2.4机票信息查询函数………………………………………….7
2.2.5卖票函数…………………………………………………….9
2.2.6退票函数…………………………………………………….10
2.2.7航班信息修改函数………………………………………….10
2.2.8航班、机票信息文件判断建立函数………………………….11
2.2.9航班、机票信息链表保存函数……………………………….12
3软件测试……………………………………………...……………………….12
3.1初始航班、机票信息文件内容………………………………………..12
3.2软件测试项目…………………………………………………………..14
4算法改进…………………………….…………….……………….…….……22
5开发体会…………………………….………….……………………………22
附录:
源代码清单….………………………………………………………………23
参考文献…………….………………….…………………………………………52
1
软件课程设计任务分析
本课题要求设计实现一个飞机票销售系统。
通过模拟售票员使用该飞机票销售系统售票过程,训练采用结构化程序设计方法完成小型软件的开发能力。
售票员在该系统辅助下完成售票的过程描述如下:
1.售票员根据旅客要求对航班的信息进行查询,提供航班查询信息输入,如航班号,目的地,起飞时间;利用输入的查询信息在现有的航班信息文件中,查询符合条件的查询信息;显示查询结果在屏幕上,包括该航班机票剩余数目。
2.机票购买:
在航班有票的情况下售出机票,输入机票信息需要的旅客资料,如姓名,性别等,生成机票编号;并记录机票销售信息到机票销售记录文件;显示待售机票信息,售出机票后,记录机票信息到售出机票数据文件;修改航班信息数据文件中相应航班的机票剩余数目。
3.当旅客要求退票时,查询机票销售记录文件,找到需退票的机票记录,完成退票操作。
根据要求,系统主要有四大模块:
航班信息查询、机票信息查询、卖票、退票。
航班信息查询主要是要能根据输入的信息查询是否有航班,如果有输出该航班信息。
机票信息查询有类似的功能。
购票要能够查询到是否航班信息,如果有并卖出后,要输入顾客信息,并记录入机票信息文件,同时该航班的剩余票数要减少1。
退票要在输入机票信息后能查询到机票,并删除机票信息,同时要在该航班剩余票数上加1。
鉴于新增、删除信息比较频繁,而且一些数据(例如可能卖出的机票数量)不知道,故决定应用动态链表。
2软件设计
2.1程序综述
本程序主要包含五大功能:
航班信息查询、机票信息查询、机票购买、机票退购、航班信息修改。
航班信息查询可以从目的地、航班编号、航班起飞时间三个方面来查询航班信息,查询完毕后可以选择下一步操作。
机票信息查询可以从顾客姓名、机票编号、航班编号三个方面来查询机票,查询完毕后可以选择下一步操作。
机票购买是首先输入要购买的航班编号,然后显示该航班信息,确认购买后再输入顾客信息,顾客信息包括顾客姓名、ID、性别,同时输入机票打折数。
机票退购是输入机票编号,搜索是否有该机票,如果有显示机票信息,确认后删除该机票信息。
航班信息修改包含了航班的添加、航班删除、已有航班信息修改,每次可以进行一个航班信息的操作。
程序中涉及的航班信息包含有航班编号、目的地、飞机型号、航班日期、起飞时间、到达时间、最大载客量、剩余票数、价格。
机票信息包含有机票编号、航班编号、顾客姓名、性别、身份证号(ID)、目的地、票价、打折数。
而这些信息是以结构构建的。
C语言中用结构来构建起一个链表。
每个结构的最后一行就是指向下一个结构的指针。
structflight{//航班信息结构
charfNO[7];//航班编号
chardest[10];//目的地
charaftype[6];//飞机型号
intdate;//航班日期
chartime1[5];//航班起飞时间
chartime2[5];//到达时间
intmaxnum;//最大载客数
intrest;//剩余票数
intprice;//价格
structflight*next;//链表指针
}
structticket{//机票信息结构
chartNO[7];//机票编号
charfNO[7];//航班编号
charname[11];//姓名
charsex[3];//性别
charID[20];//身份证号
chardest[10];//目的地
intprice;//价格
intdiscount;//折扣
structticket*next;//链表指针
}
2.2程序函数详解
本程序包含:
1.主函数2.主菜单函数3.航班信息查询函数(目的地查询函数、航班编号查询函数、航班时间查询函数)4.机票信息查询函数(顾客姓名查询、机票编号查询函数、航班编号查询)5.票卖出函数6.退票函数7.航班信息修改函数8.航班、机票信息文件判断建立函数9.航班、机票信息文件保存函数。
2.2.1主函数(voidmain())
主函数主要是调用其他函数,并把建立的链表头指针附给主菜单函数。
首先调用航班、机票信息文件判断建立函数。
它首先分别判断在是否存在航班信息文件、机票信息文件。
如果不存在,分别生成文件(航班信息文件设为"d:
\\a.dat",机票信息文件设为"d:
\\b.dat"),生成的文件中都已有初始数据。
详细数据见3.1初始航班、机票文件内容。
如果存在,则不再生成文件,而且不会变动已有的文件。
然后它会分别读文件,分别生成航班信息的链表和机票信息链表,并将链表头返回到主函数的变量中。
然后主函数调用主菜单函数,同时将两个链表头赋给主菜单函数。
主函数流程图如下:
2.2.2主菜单函数(voidmenu(structflight*f,structticket*t))
主菜单函数是供用户选择下一步操作(函数),并把下一步需要的两个链表的头赋给该函数。
主菜单流程图如下:
2.2.3航班信息查询函数(voidflightinfor(structflight*f,structticket*t))
航班信息查询函数是供用户选择输入什么样查询的航班信息来查询航班。
同时把链表头赋予调用的函数。
航班信息查询函数流程图:
在航班信息查询函数中会调用三个查询用的函数,分别是目的地查询函数(voiddestsearch(structflight*f,structticket*t))、航班编号查询函数(voidfNOsearch(structflight*f,structticket*t))、航班起飞时间查询函数(voidtimesearch(structflight*f,structticket*t))。
航班信息查询函数会在调用时把两个头指针赋给这些函数。
三个函数彼此非常相似,主要是输入搜索信息输入不同(目的地与航班编号为字符串,而起飞时间是整型数字,它是24小时制)。
为了避免赘述,这里仅对目的地查询函数进行详解。
用户输入要查询的目的地后,程序搜索链表。
搜到后会输出航班信息,没有搜到会输出“没有搜索到该航班”。
由于航班信息是以链表形式构建的,所以在搜索的时候采取遍历的方法。
搜索完成后,用户可以选择下一步操作,可以返回,可以到航班信息查询界面,可以到主菜单界面,可以到购票界面,可以退出程序。
目的地查询函数流程图(p是structflight型指针,赋初值为航班信息链表头):
2.2.4机票信息查询函数(voidticketinfor(structflight*f,structticket*t))
机票信息查询函数和航班信息查询函数有很高的类似性,是供用户选择输入什么样查询的机票信息来查询航班。
同时把机票链表头赋予调用的函数。
机票信息查询函数流程图:
在机票信息查询函数中会调用三个查询用的函数,分别是顾客姓名查询函数(voidnamesearch(structflight*f,structticket*t))、机票编号查询函数(voidtNOsearch(structflight*f,structticket*t))、航班编号查询函数(voidtfNOsearch(structflight*f,structticket*t))。
机票信息查询函数会在调用时把两个头指针赋给这些函数,三个函数彼此非常相似。
为了避免赘述,这里仅对顾客姓名查询函数进行详解。
用户输入要查询的顾客姓名后,程序搜索链表。
搜到后会输出机票信息,没有搜到会输出“没有搜索到该机票”。
由于机票信息是以链表形式构建的,所以在搜索的时候采取遍历的方法。
搜索完成后,用户可以选择下一步操作,可以返回,可以到机票信息查询界面,可以到主菜单界面,可以到退票界面,可以退出程序。
顾客姓名查询函数流程图:
(p是structticket型的指针,赋初值为机票信息链表头)
2.2.5卖票函数(voidbuy(structflight*f,structticket*t))
卖票函数供用户卖出飞机票,并录入顾客信息,最后将信息写入文件。
由于在本程序中能够唯一确定一个航班的变量只有航班编号。
所以在卖票时候,要求输入要卖出的航班编号。
程序会遍历链表,搜索是否有该航班,有航班并且确认购买后,输入顾客信息,同时程序会自动在该航班剩余票数上减去1。
然后程序会把数据写入文件中。
完成卖票后,程序会回到主菜单。
卖票函数流程图(pr是structflight型指针,赋初值为航班信息链表头):
2.2.6退票函数(voidrefund(structflight*f,structticket*t))
退票函数是完成退票功能。
由于在程序中唯一能够确定一张机票的变量为机票编号,所以在退票时候,要求输入要退的机票编号。
程序遍历机票链表,搜索该机票,如果不存在,则输出“不存在该机票”;如果存在机票,打印机票信息,在确认退票后会删除该条机票信息,并且在该票对应的航班的剩余票数上加1。
然后程序将两链表写入文件中。
完成退票后,程序返回主菜单。
退票函数流程图(p是structticket型指针,赋初值为机票信息链表头):
2.2.7航班信息修改函数(voidmodify(structflight*f,structticket*t))
航班信息修改函数可以完成三个修改功能:
航班添加,航班删除,已有航班信息修改。
航班添加可以添加一个没有的航班,完成信息输入,并写入航班信息文件;航班删除是输入航班编号,确认后删除该航班;已有航班信息修改是输入要修改的航班编号,确认后输入新的航班信息。
以上三个功能在完成后,均会将链表信息写入文件中。
航班信息修改函数的流程图:
2.2.8航班、机票信息文件判断建立函数(structflight*creatf(),structticket*creatt())
航班、机票信息文件判断建立函数是两个函数,由于二者高度的相似性,故一起介绍。
他们分别是航班信息文件判断建立函数(structflight*creatf())和机票信息文件判断建立函数(structticket*creatt()),它们主要有两个作用。
第一是检测信息文件是否存在,如果不存在则生成文件。
第二是读取文件内容,在内存中生成信息链表,并返回链表的头。
前者会检测当前电脑中是否存在航班信息文件(本程序中该文件命名为a.dat,在d盘中),后者检测是否存在机票信息文件(本程序中命名为b.dat,在d盘中)。
如果检测该名字文件不存在,函数会自己建立文件,而初始文件信息在“3.1初始航班、机票信息文件内容”中有介绍。
如果检测该名字文件存在,则函数不会建立文件,也不会修改文件的内容。
2.2.9航班、机票信息链表保存函数(voidsavef(structflight*f),voidsavet(structticket*t))
航班、机票信息链表保存函数是两个函数,分别是航班信息链表保存函数(voidsavef(structflight*f))和机票信息链表保存函数(voidsavet(structticket*t))。
它们的作用就是将内存中的链表保存到文件中。
调用时候,要将链表头指针赋予函数。
3软件测试
3.1初始航班、机票信息文件内容
3.1.1初始航班信息文件中的信息
飞机票销售系统开始运行时,会检测是否有航班信息文件存在,如果存在,则继续操作;如果不存在,则会生成航班信息文件,生成的航班信息文件中包含如下10个航班的信息。
在进行软件测试时,可以根据这一信息来进行测试。
它们是以如下的结构组成。
{"航班编号","目的地","飞机型号",航班日期,"起飞时间","到达时间",最大载客量,剩余票数,价格,NULL}(由于是建立的链表,所以最后要有一个空指针;""表示一个字符串,没有则为整型数)
{"CZ2366","海口","B738",1225,"0740","1100",175,170,1100,NULL}
{"MU2477","上海","B738",1225,"0835","1005",175,165,700,NULL}
{"ZH1342","北京","A320",1225,"0900","1045",140,138,800,NULL}
{"CZ3368","广州","A320",1225,"1000","1140",140,135,800,NULL}
{"CA3355","深圳","A320",1225,"1030","1210",120,118,850,NULL}
{"FM9362","上海","B737",1225,"1120","1250",130,127,750,NULL}
{"CA1334","北京","A320",1225,"1200","1345",140,140,850,NULL}
{"CZ6940","乌鲁木齐","B757",1225,"1230","1700",250,241,1800,NULL}
{"CZ3631","哈尔滨","B738",1225,"1300","1615",175,170,1500,NULL}
{"MF8462","杭州","B737",1225,"1330","1410",130,120,650,NULL}
3.1.2初始机票信息文件中的信息
飞机票销售系统开始运行时,会检测是否有机票信息文件存在,如果存在,则继续操作;如果不存在,则会生成机票信息文件,生成的机票信息文件中包含如下51个航班的信息。
它们是以如下的结构组成的。
在进行软件测试时,可以根据这一信息来进行测试。
{"机票编号","航班编号","顾客姓名","性别","身份证号","目的地",票价,打折数,NULL}(由于是建立的链表,所以最后要有一个空指针,""表示一个字符串,没有则为整型数)
{"WH1001","CZ2366","王蒙蒙","女","420625198912110000","海口",1100,0,NULL},
{"WH1002","CZ2366","苏杭","男","420625198911001234","海口",1100,9,NULL},
{"WH1003","CZ2366","戴家波","男","415667198912111234","海口",1100,0,NULL},
{"WH1004","CZ2366","万家宝","男","420625198012303213X","海口",1100,9,NULL},
{"WH1005","CZ2366","温雯雯","女","420625198512200050","海口",1100,0,NULL},
{"WH1006","MU2477","胡怡雯","女","320525198010011109","上海",700,9,NULL},
{"WH1007","MU2477","贾艺佳","女","746356198512200050","上海",700,0,NULL},
{"WH1008","MU2477","唐逸奇","男","789654198512200050","上海",700,8,NULL},
{"WH1009","MU2477","徐涛","男","678345198501200890","上海",700,0,NULL},
{"WH1010","MU2477","张一凡","男","690123199002041123","上海",700,0,NULL},
{"WH1011","MU2477","张兵","男","789234198512200050","上海",700,0,NULL},
{"WH1012","MU2477","李玉东","男","367458199012200098","上海",700,7,NULL},
{"WH1013","MU2477","曾二可","女","678902198511010050","上海",700,0,NULL},
{"WH1014","MU2477","胡静","女","420625197902200050","上海",700,0,NULL},
{"WH1015","MU2477","武大威","男","425655198507200050","上海",700,0,NULL},
{"WH1016","ZH1342","华科楠","男","345655198507202150","北京",800,0,NULL},
{"WH1017","ZH1342","王兰","女","34546719850725450","北京",800,9,NULL},
{"WH1018","CZ3368","牛妞妞","女","345345987650725450X","广州",800,9,NULL},
{"WH1019","CZ3368","杨阳阳","男","345345987345254350","广州",800,8,NULL},
{"WH1020","CZ3368","马奔腾","男","345345981223725450","广州",800,9,NULL},
{"WH1021","CZ3368","刘晓东","男","345345987650725450","广州",800,7,NULL},
{"WH1022","CZ3368","万婉儿","女","345345987632132312","广州",800,9,NULL},
{"WH1023","CA3355","王子","男","34534598765646412","深圳",850,9,NULL},
{"WH1024","CA3355","彭泽浩","男","567893987632132312","深圳",850,0,NULL},
{"WH1025","FM9362","陈曦","男","572355977632132312","上海",750,9,NULL},
{"WH1026","FM9362","邵倩倩","女","097832147632132312","上海",750,0,NULL},
{"WH1027","FM9362","唐浩天","男","197184887632132312","上海",750,0,NULL},
{"WH1029","CZ6940","程晨","男","901234587632132312","乌鲁木齐",1800,0,NULL},
{"WH1030","CZ6940","刘佳","女","456904887632132312X","乌鲁木齐",1800,0,NULL},
{"WH1031","CZ6940","方芷若","男","134384884532562312","乌鲁木齐",1800,0,NULL},
{"WH1032","CZ6940","唐月婵","女","234324885432132312","乌鲁木齐",1800,9,NULL},
{"WH1033","CZ6940","苏杭","男","195427676862132312","乌鲁木齐",1800,0,NULL},
{"WH1034","CZ6940","项少龙","男","977352563245187662X","乌鲁木齐",1800,0,NULL},
{"WH1035","CZ6940","唐浩天","男","195436657632132312","乌鲁木齐",1800,9,NULL},
{"WH1036","CZ6940","黄梦洁","女","123124354354273987","乌鲁木齐",1800,0,NULL},
{"WH1028","CZ6940","徐一浩","男","678905435847923805","乌鲁木齐",1800,6,NULL},
{"WH1037","FM9362","张志远","男","231243787632132312","哈尔滨",1500,5,NULL},
{"WH1038","FM9362","唐浩","男","197654654643124337","哈尔滨",1500,8,NULL},
{"WH1039","FM9362","唐天","男","342532547789899312","哈尔滨",1500,9,NULL},
{"WH1040","FM9362","曹冲","男","197143243242132312","哈尔滨",1500,7,NULL},
{"WH1041","FM9362","冯坤俊","男","214543143252154327","哈尔滨",1500,9,NULL},
{"WH1042","MF8462","李俊豪","男","654342354362245334","杭州",650,0,NULL},
{"WH1043","MF8462","唐浩天","男","197184887632132876","杭州",650,0,NULL},
{"WH1044","MF8462","李婉儿","女","327183513432147657","杭州",650,0,NULL},
{"WH1045","MF8462","李琪琪","女","197184887676547645","杭州",650,9,NULL},
{"WH1046","MF8462","唐浩天","男","197563325332132312","杭州",650,0,NULL},
{"WH1047","MF8462","张