1、 机票票务管理程序的设计与实现1 绪论1.1选题目的和意义随着社会发展的不断进步,民航事业的壮大,人们消费水平的提高,乘坐民航的消费者也越来越多,旅游也逐渐成为普通老百姓的生活组成部分,飞机票预订查询系统在各机票预定网点中的作用也越显重要。目前,我国一些旅行社和酒店的机票预定还停留在人工处理阶段,这已经严重制约了工作效率,在计算机技术高速发展的今天,有必要引入高效的计算机系统,来协助处理机票预订工作。因此,开发机票票务管理系统势在必行。1.2系统模拟与简化为了易于实现但不失仿真性,对问题做如下简化:1.在初始机票的所有城市共有:武汉、北京、西安、广州、青岛、济南六个城市。因此所有的机票组合共有
2、30种。2.机票只有单程票,不考虑联程票和往返票。3.假设航班无限,即不存在票售完的情况。票的数量不作限制。4.订票能订未来任意时间的票。不对时间进行检查。1.3可行性分析1.3.1前提要求安全与保密要求:管理员享有对机票信息库和定票信息库的管理与修改,旅客只享有对订票信息库的部分修改(订票与退票)以及机票信息库的查询。1.3.2 目标系统实现后,大大提高机票预定服务效率。降低售票服务中的错误发生率,减少信息交流的烦琐过程及其带来的开销。1.4 系统的主要功能:(1)票务管理人员对机票基本信息进行输入,删除,修改和查询(2)旅客对票务信息进行查询(3)订票处理,输入机票和旅客的信息(4)退票处
3、理2 需求分析2.1性能需求 为了保证系统能够长期、安全、稳定、可靠、高效的运行,机票预定系统应该满足以下的性能需求:2.1.1 系统处理的准确性系统处理的准确性是系统的基本性能。由于机票预订系统的查询功能对于整个系统的功能和性能完成举足轻重。作为系统的很多数据来源,在系统开发过程中,必须采用一定的方法保证系统的准确性。2.1.2 系统的开放性和系统的可扩充性 机票预订系统在开发过程中,应该充分考虑以后的可扩充性。用户查询的需求也会不断的更新和完善。所有这些,都要求系统提供足够的手段进行功能的调整和扩充。而要实现这一点,应通过系统的开放性来完成,既系统应是一个开放系统,只要符合一定的规范,可以
4、简单的加入和减少系统的模块,配置系统的硬件。2.1.3 系统的易用性 机票预订系统是直接面对使用人员的,而使用人员往往对计算机并不是非常熟悉。这就要求系统能够提供良好的用户接口,易用的人机交互界面。要实现这一点,就要求系统应该尽量使用用户熟悉的术语和中文信息的界面;针对用户可能出现的使用问题,要提供足够的帮助,缩短用户对系统熟悉的过程。2.2数据需求2.2.1数据录入处理的准确性与及时性 数据的输入是否准确是数据处理的前提,错误的输入会导致系统输出的不正确和不可用,从而使系统的工作失去意义。数据的输入来源是手工输入。手工输入要通过系统界面上的安排系统具有容错性。2.2.2数据的一致性与完整性由
5、于系统的数据是共享的,机票是共享数据,所以如何保证这些数据的一致性,是系统必须解决的问题。因此必须在数据录入处控制数据的去向,并且要求对数据完整性进行严格的约束。2.2.3数据的共享与独立性整个机票预定系统的数据是共享的。然而,从系统开发的角度上看,共享会给设计和调试带来困难。因此,应该提供灵活的配置,使各个分系统能够独立运行,而通过人工干预的手段进行系统数据的交换。这样,也能提供系统的强壮性。名字:旅客信息描述:旅客的个人信息 属性值:姓名和身份证号2.3数据字典名字:原始机票信息描述:机票本身的信息属性值: 航班号、起飞地点、飞往地点、所属公司、价格名字:订出的机票信息描述:旅客的机票信息
6、,根据旅客的旅行时间和目的地确定属性值:旅客信息、航班号、起飞地点、飞往地点、时间、所属公司、价格3 系统总体设计3.1数据结构设计对旅客个人信息的数据结构设计姓名身份证号对机票原始信息的数据结构设计出发城市目的城市航班号所属航空公司票价对已订出机票的数据结构设计游客信息出发城市目的城市航班号时间日期所属航空公司票价姓名身份证号3.2物理结构设计3.2.1 旅客信息1.旅客姓名 PName2.身份证号码 PID3.2.2原始机票信息出发城市 TDepartCity目的城市 TArriveCity航班号 TFlightNo所属航空公司 TCompany票价 TPrice 3.2.3已订出机票信息
7、1旅客信息 PInfo2出发城市 TDepartCity3目的城市 TArriveCity4航班号 TFlightNo5所属航空公司 TCompany6出发日期 TDate7票价 TPrice3.2.4两个链表的定义typedef struct _tagNode1 /定义一个链表,用来存储所有的票务信息,以便来实现管理员删除增加等功能struct _tagNode1 *Next;TInfo AllTicketsInfo;AllTickets;typedef AllTickets * PtrAllTickets;typedef struct _tagNode2 /定义一个链表,用来存储已订出的票
8、struct _tagNode2 *Next;BookedTInfo BookedTicketInfo;BookedTickets;typedef BookedTickets *PBookedTickets;3.3主要函数功能设计3.3.1数据初始化函数从文件TicketInfo.txt中将所有原始机票的信息读取到一个链表中PtrAllTickets Initial() /将所有的票务信息读取到内存中 FILE *fp; /从文件中读取机票的信息 char ch; PtrAllTickets phead,p1,p2,p; phead=(PtrAllTickets)malloc(sizeof(A
9、llTickets); p1=phead; if(fp=fopen(d:TicketInfo.txt,rt)=NULL) printf(Error open file!nPress any key to exit!n); getch(); exit(1); else ch=a; while(ch!=EOF) fscanf(fp,%s%s%s%s%s,p1-AllTicketsInfo.TDepartCity,p1-AllTicketsInfo.TArriveCity,p1-AllTicketsInfo.TFlightNo,p1-AllTicketsInfo.TCompany,p1-AllTic
10、ketsInfo.TPrice); p2=(PtrAllTickets)malloc(sizeof(AllTickets); p1-Next=p2; p2-Next=NULL; p1=p2; ch=fgetc(fp); fclose(fp); return phead; exit(0);3.3.2订票功能的实现void GuestBookTickets() /Guest预定机票 FILE *fp; char ch; int tmp_n; int flag_state=0; PBookedTickets pb1; PtrAllTickets p=phead; pb1=(PBookedTicket
11、s)malloc(sizeof(BookedTickets); pb1-Next=NULL; printf(tttt欢迎使用订票系统!nnn); printf(请输入出发城市: ); /选择出发城市! scanf(%s,pb1-BookedTicketInfo.TDepartCity); printf(请输入飞往城市:); scanf(%s,pb1-BookedTicketInfo.TArriveCity); while(p!=NULL) /航班号,飞行公司,价格等均确定。 if(strcmp(p-AllTicketsInfo.TDepartCity,pb1-BookedTicketInfo.
12、TDepartCity)=0&strcmp(p-AllTicketsInfo.TArriveCity,pb1-BookedTicketInfo.TArriveCity)=0) strcpy(pb1-BookedTicketInfo.TPrice,p-AllTicketsInfo.TPrice); strcpy(pb1-BookedTicketInfo.TFlightNo,p-AllTicketsInfo.TFlightNo); strcpy(pb1-BookedTicketInfo.TCompany,p-AllTicketsInfo.TCompany); flag_state=1; p=p-N
13、ext; if(flag_state) printf(请输入要预定的票的日期:(格式为xxxxxxxx,如20080808)n); /输入飞行日期 scanf(%s,pb1-BookedTicketInfo.TDate); printf(请输入您的姓名:n); /输入姓名 scanf(%s,pb1-BookedTicketInfo.PassengerInfo.PName); printf(请输入您的身份证号码:n); /输入游客身份证号 scanf(%s,pb1-BookedTicketInfo.PassengerInfo.PID); / 游客订票信息确认 printf(预定成功!以下是您的订
14、票信息确认单:nn); printf(ttt姓名:%sn,pb1-BookedTicketInfo.PassengerInfo.PName); printf(ttt身份证号码:%sn,pb1-BookedTicketInfo.PassengerInfo.PID); printf(ttt出发城市:%sn,pb1-BookedTicketInfo.TDepartCity); printf(ttt飞往城市:%sn,pb1-BookedTicketInfo.TArriveCity); printf(ttt航班号:%sn,pb1-BookedTicketInfo.TFlightNo); printf(t
15、tt所属航空公司:%sn,pb1-BookedTicketInfo.TCompany); printf(ttt日期:%sn,pb1-BookedTicketInfo.TDate); printf(ttt价格:%sn,pb1-BookedTicketInfo.TPrice); /将订票的信息存到一个文件中/ if(fp=fopen(d:BookedTicketsInfo.txt,rt)=NULL) /若文件不存在,则新建,若存在,则采用追加模式写入 if(fp=fopen(d:BookedTicketsInfo.txt,wt)=NULL) printf(文件创立失败!n无法写入数据!); els
16、e fprintf(fp,%st%st%st%st%st%st%st%sn,pb1-BookedTicketInfo.PassengerInfo.PName,pb1-BookedTicketInfo.PassengerInfo.PID,pb1-BookedTicketInfo.TDepartCity,pb1-BookedTicketInfo.TArriveCity,pb1-BookedTicketInfo.TFlightNo,pb1-BookedTicketInfo.TDate,pb1-BookedTicketInfo.TCompany,pb1-BookedTicketInfo.TPrice)
17、; else fp=fopen(d:BookedTicketsInfo.txt,at); fprintf(fp,%s %s %s %s %s %s %st%sn,pb1-BookedTicketInfo.PassengerInfo.PName,pb1-BookedTicketInfo.PassengerInfo.PID,pb1-BookedTicketInfo.TDepartCity,pb1-BookedTicketInfo.TArriveCity,pb1-BookedTicketInfo.TFlightNo,pb1-BookedTicketInfo.TDate,pb1-BookedTicke
18、tInfo.TCompany,pb1-BookedTicketInfo.TPrice); fclose(fp); else printf(城市输入有误!n订票失败!n); 3.3.3退票功能的实现void GuestReturnTickets() /退票 注意几种特殊情况的处理1,删除的为第一张票 int flag_state=0; char PName15;char PID20;char TFlightNo10;char TDate10;/时间格式为:xxxxxxxx如200080808 FILE *fp; /从文件中读取机票的信息 char ch; PBookedTickets head,
19、p1,p2,p,p_front,ptrtmp; /先将所有的订票的信息存取到内存中 head=(PBookedTickets)malloc(sizeof(BookedTickets); p1=head; p_front=head; p=head; if(fp=fopen(d:BookedTicketsInfo.txt,rt)=NULL) printf(没有找到订票数据!n); getch(); exit(1); else ch=a; while(ch!=EOF) fscanf(fp,%s%s%s%s%s%s%s%s,p1-BookedTicketInfo.PassengerInfo.PName
20、,p1-BookedTicketInfo.PassengerInfo.PID,p1-BookedTicketInfo.TDepartCity,p1-BookedTicketInfo.TArriveCity,p1-BookedTicketInfo.TFlightNo,p1-BookedTicketInfo.TDate,p1-BookedTicketInfo.TCompany,p1-BookedTicketInfo.TPrice); p2=(PBookedTickets)malloc(sizeof(BookedTickets); p1-Next=p2; p2-Next=NULL; p1=p2; c
21、h=fgetc(fp); fclose(fp); /输入票务有关信息 printf(请按下列提示输入票务信息:n); printf(ttt请输入票的航班号:n); scanf(%s,TFlightNo); printf(ttt姓名:n); scanf(%s,PName); printf(ttt身份证号:n); scanf(%s,PID); while(p!=NULL) / 查找符合条件的票 if(strcmp(p-BookedTicketInfo.PassengerInfo.PName,PName)=0&strcmp(p-BookedTicketInfo.TFlightNo,TFlightNo
22、)=0&strcmp(p-BookedTicketInfo.PassengerInfo.PID,PID)=0) ptrtmp=p_front; flag_state=1; p_front=p; p=p-Next; if(flag_state) if(ptrtmp=head) head=head-Next; else ptrtmp-Next=ptrtmp-Next-Next; p1=head; if(fp=fopen(d:BookedTicketsInfo.txt,wt)=NULL) printf(Error open file!nPress any key to exit!n); getch(
23、); exit(1); else while(p1!=NULL) fprintf(fp,%st%st%st%st%st%st%st%sn,p1-BookedTicketInfo.PassengerInfo.PName,p1-BookedTicketInfo.PassengerInfo.PID,p1-BookedTicketInfo.TDepartCity,p1-BookedTicketInfo.TArriveCity,p1-BookedTicketInfo.TFlightNo,p1-BookedTicketInfo.TDate,p1-BookedTicketInfo.TCompany,p1-B
24、ookedTicketInfo.TPrice); p1=p1-Next; fclose(fp); exit(0); else printf(退票失败!n); exit(1);3.3.4按航班号查询功能的实现PtrAllTickets GuestAdminSearchTicketsFlightNo() int flag_state=0; PtrAllTickets p=phead,ptrtmp,p_front; char TFlightNo10; printf(请输入航班号:); scanf(%s,TFlightNo); while(p!=NULL) /航班号,飞行公司,价格等均确定。 if(s
25、trcmp(p-AllTicketsInfo.TFlightNo,TFlightNo)=0) printf(您查询的机票详细信息如下:n); printf(ttt*n); printf(ttt出发城市:%sn,p-AllTicketsInfo.TDepartCity); printf(ttt飞往城市:%sn,p-AllTicketsInfo.TArriveCity); printf(ttt航班号:%sn,p-AllTicketsInfo.TFlightNo); printf(ttt所属航空公司:%sn,p-AllTicketsInfo.TCompany); printf(ttt价格:%sn,p
26、-AllTicketsInfo.TPrice); printf(ttt*n); flag_state=1; ptrtmp=p_front; p_front=p; p=p-Next; if(!flag_state) printf(航班号输入有误!没有查询到航班号为%s的票务信息!n,TFlightNo); return ptrtmp;3.3.5按地点查询功能的实现PtrAllTickets GuestAdminSearchTicketsPlace() /注意删除头结点的特殊性 int flag_state=0; PtrAllTickets p=phead,ptrtmp,p_front=phead
27、; char TDepartCity10;char TArriveCity10;printf(请输入出发城市: ); scanf(%s,TDepartCity); printf(请输入飞往城市:); scanf(%s,TArriveCity); while(p!=NULL) if(strcmp(p-AllTicketsInfo.TDepartCity,TDepartCity)=0&strcmp(p-AllTicketsInfo.TArriveCity,TArriveCity)=0) printf(您查询的机票详细信息如下:n); printf(ttt*n); printf(ttt出发城市:%s
28、n,p-AllTicketsInfo.TDepartCity); printf(ttt飞往城市:%sn,p-AllTicketsInfo.TArriveCity); printf(ttt航班号:%sn,p-AllTicketsInfo.TFlightNo); printf(ttt所属航空公司:%sn,p-AllTicketsInfo.TCompany); printf(ttt价格:%sn,p-AllTicketsInfo.TPrice); printf(ttt*n); flag_state=1; ptrtmp=p_front; p_front=p; p=p-Next; if(!flag_sta
29、te) printf(城市输入有误!没有查询到出发城市为%s,目的城市为%s的票务信息!n,TDepartCity,TArriveCity); return ptrtmp;3.3.6管理员对票务信息进行删除的函数void AdminDeleteTInfo() /Admin删除票务信息 ,注意删除头结点的特殊性 PtrAllTickets p,ptrtmp=phead; FILE *fp; /将修改后的机票信息存储 int tmp_n; char judege; /确认是否删除,值为y或n system(cls); printf(请先选择要删除的票n);printf(tttt请选择查询方式n);
30、printf(tttt1.按地点查找n);printf(tttt2.按航班号查找n);printf(tttt0.退出n);printf(tttt按数字0-2选择:);doscanf(%d,&tmp_n);if(tmp_n2)printf(tttt输入有误!请输入数字0-2!n);printf(tttt按数字0-2选择:);while(tmp_n2);switch(tmp_n)case 1: p=GuestAdminSearchTicketsPlace(); if(p=phead) phead=p-Next; else p-Next=p-Next-Next; if(fp=fopen(d:Tick
31、etInfo.txt,wt)=NULL) printf(Error open file!nPress any key to exit!n); getch(); exit(1); else ptrtmp=phead; while(ptrtmp!=NULL) fprintf(fp,%stt%stt%st%st%sn,ptrtmp-AllTicketsInfo.TDepartCity,ptrtmp-AllTicketsInfo.TArriveCity,ptrtmp-AllTicketsInfo.TFlightNo,ptrtmp-AllTicketsInfo.TCompany,ptrtmp-AllTi
32、cketsInfo.TPrice); ptrtmp=ptrtmp-Next; fclose(fp); break; case 2: p=GuestAdminSearchTicketsFlightNo(); p-Next=p-Next-Next; if(fp=fopen(d:TicketInfo.txt,wt)=NULL) printf(Error open file!nPress any key to exit!n); getch(); exit(1); else while(ptrtmp!=NULL) fprintf(fp,%stt%stt%st%st%sn,ptrtmp-AllTicket
33、sInfo.TDepartCity,ptrtmp-AllTicketsInfo.TArriveCity,ptrtmp-AllTicketsInfo.TFlightNo,ptrtmp-AllTicketsInfo.TCompany,ptrtmp-AllTicketsInfo.TPrice); ptrtmp=ptrtmp-Next; break; fclose(fp); case 0: exit(0); break; exit(0);3.3.7管理员进行增加票务信息函数的实现void AdminInputTInfo() /Admin输入票务信息,添加到文件尾 FILE *fp; PtrAllTic
34、kets prear; prear=(PtrAllTickets)malloc(sizeof(AllTickets); prear-Next=NULL; printf(请输入需要增加的票务的信息:nnn); printf(出发城市:);scanf(%s,prear-AllTicketsInfo.TDepartCity); printf(飞往城市:);scanf(%s,prear-AllTicketsInfo.TArriveCity); printf(航班号:);scanf(%s,prear-AllTicketsInfo.TFlightNo); printf(所属航空公司:);scanf(%s,
35、prear-AllTicketsInfo.TCompany); printf(票价:);scanf(%s,prear-AllTicketsInfo.TPrice); if(fp=fopen(d:TicketInfo.txt,at)=NULL) printf(Error open file!nPress any key to exit!n); getch(); exit(1); else fprintf(fp,%stt%stt%st%st%sn,prear-AllTicketsInfo.TDepartCity,prear-AllTicketsInfo.TArriveCity,prear-AllTicketsInfo.TFlightNo,prear-AllTicketsInfo.TCompany,prear-AllTicketsInfo.TPrice); fclose(fp); exit(0);
版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。
Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1
陕公网安备 61072602000132号 违法和不良信息举报:0916-4228922