数据结构课程设计-机票票务管理程序的设计与实现.doc_第1页
数据结构课程设计-机票票务管理程序的设计与实现.doc_第2页
数据结构课程设计-机票票务管理程序的设计与实现.doc_第3页
数据结构课程设计-机票票务管理程序的设计与实现.doc_第4页
数据结构课程设计-机票票务管理程序的设计与实现.doc_第5页
免费预览已结束,剩余23页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

武汉理工大学数据结构课程设计说明书 机票票务管理程序的设计与实现1 绪论1.1选题目的和意义随着社会发展的不断进步,民航事业的壮大,人们消费水平的提高,乘坐民航的消费者也越来越多,旅游也逐渐成为普通老百姓的生活组成部分,飞机票预订查询系统在各机票预定网点中的作用也越显重要。目前,我国一些旅行社和酒店的机票预定还停留在人工处理阶段,这已经严重制约了工作效率,在计算机技术高速发展的今天,有必要引入高效的计算机系统,来协助处理机票预订工作。因此,开发机票票务管理系统势在必行。1.2系统模拟与简化为了易于实现但不失仿真性,对问题做如下简化:1.在初始机票的所有城市共有:武汉、北京、西安、广州、青岛、济南六个城市。因此所有的机票组合共有30种。2.机票只有单程票,不考虑联程票和往返票。3.假设航班无限,即不存在票售完的情况。票的数量不作限制。4.订票能订未来任意时间的票。不对时间进行检查。1.3可行性分析1.3.1前提要求安全与保密要求:管理员享有对机票信息库和定票信息库的管理与修改,旅客只享有对订票信息库的部分修改(订票与退票)以及机票信息库的查询。1.3.2 目标系统实现后,大大提高机票预定服务效率。降低售票服务中的错误发生率,减少信息交流的烦琐过程及其带来的开销。1.4 系统的主要功能:(1)票务管理人员对机票基本信息进行输入,删除,修改和查询(2)旅客对票务信息进行查询(3)订票处理,输入机票和旅客的信息(4)退票处理2 需求分析2.1性能需求 为了保证系统能够长期、安全、稳定、可靠、高效的运行,机票预定系统应该满足以下的性能需求:2.1.1 系统处理的准确性系统处理的准确性是系统的基本性能。由于机票预订系统的查询功能对于整个系统的功能和性能完成举足轻重。作为系统的很多数据来源,在系统开发过程中,必须采用一定的方法保证系统的准确性。2.1.2 系统的开放性和系统的可扩充性 机票预订系统在开发过程中,应该充分考虑以后的可扩充性。用户查询的需求也会不断的更新和完善。所有这些,都要求系统提供足够的手段进行功能的调整和扩充。而要实现这一点,应通过系统的开放性来完成,既系统应是一个开放系统,只要符合一定的规范,可以简单的加入和减少系统的模块,配置系统的硬件。2.1.3 系统的易用性 机票预订系统是直接面对使用人员的,而使用人员往往对计算机并不是非常熟悉。这就要求系统能够提供良好的用户接口,易用的人机交互界面。要实现这一点,就要求系统应该尽量使用用户熟悉的术语和中文信息的界面;针对用户可能出现的使用问题,要提供足够的帮助,缩短用户对系统熟悉的过程。2.2数据需求2.2.1数据录入处理的准确性与及时性 数据的输入是否准确是数据处理的前提,错误的输入会导致系统输出的不正确和不可用,从而使系统的工作失去意义。数据的输入来源是手工输入。手工输入要通过系统界面上的安排系统具有容错性。2.2.2数据的一致性与完整性由于系统的数据是共享的,机票是共享数据,所以如何保证这些数据的一致性,是系统必须解决的问题。因此必须在数据录入处控制数据的去向,并且要求对数据完整性进行严格的约束。2.2.3数据的共享与独立性整个机票预定系统的数据是共享的。然而,从系统开发的角度上看,共享会给设计和调试带来困难。因此,应该提供灵活的配置,使各个分系统能够独立运行,而通过人工干预的手段进行系统数据的交换。这样,也能提供系统的强壮性。名字:旅客信息描述:旅客的个人信息 属性值:姓名和身份证号2.3数据字典名字:原始机票信息描述:机票本身的信息属性值: 航班号、起飞地点、飞往地点、所属公司、价格名字:订出的机票信息描述:旅客的机票信息,根据旅客的旅行时间和目的地确定属性值:旅客信息、航班号、起飞地点、飞往地点、时间、所属公司、价格3 系统总体设计3.1数据结构设计对旅客个人信息的数据结构设计姓名身份证号对机票原始信息的数据结构设计出发城市目的城市航班号所属航空公司票价对已订出机票的数据结构设计游客信息出发城市目的城市航班号时间日期所属航空公司票价姓名身份证号3.2物理结构设计3.2.1 旅客信息1.旅客姓名 pname2.身份证号码 pid3.2.2原始机票信息出发城市 tdepartcity目的城市 tarrivecity航班号 tflightno所属航空公司 tcompany票价 tprice 3.2.3已订出机票信息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 /定义一个链表,用来存储已订出的票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(alltickets); 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-allticketsinfo.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=(pbookedtickets)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.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-next; 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(预定成功!以下是您的订票信息确认单: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(ttt所属航空公司:%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无法写入数据!); else 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); 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-bookedticketinfo.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,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,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; ch=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)=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(); 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-bookedticketinfo.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(strcmp(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-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; 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出发城市:%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-allticketsinfo.tprice); printf(ttt*n); flag_state=1; ptrtmp=p_front; p_front=p; p=p-next; if(!flag_state) 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);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:ticketinfo.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-allticketsinfo.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-allticketsinfo.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; ptralltickets 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,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);3.3.8管理员对票务信息进行修改的函数void admincorrecttinfo() / admin修改票务信息 ptralltickets p,ptrtmp=phead; file *fp; /将修改后的机票信息存储 int tmp_n; system(cls); printf(请先选择要修改的票n);printf(tttt请选择查询方式n);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(); printf(请重新输入该票务的信息!n); printf(出发城市:);scanf(%s,p-next-allticketsinfo.tdepartcity); printf(飞往城市:);scanf(%s,p-next-allticketsinfo.tarrivecity); printf(航班号:);scanf(%s,p-next-allticketsinfo.tflightno); printf(所属航空公司:);scanf(%s,p-next-allticketsinfo.tcompany); printf(票价:);scanf(%s,p-next-allticketsinfo.tprice); 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-allticketsinfo.tdepartcity,ptrtmp-allticketsinfo.tarrivecity,ptrtmp-allticketsinfo.tflightno,ptrtmp-allticketsinfo.tcompany,ptrtmp-allticketsinfo.tprice); ptrtmp=ptrtmp-next; fclose(fp); break; ;case 2: p=guestadminsearchticketsflightno(); printf(请重新输入该票务的信息!n); printf(出发城市:);scanf(%s,p-next-allticketsinfo.tdepartcity); printf(飞往城市:);scanf(%s,p-next-allticketsinfo.tarrivecity); printf(航班号:)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论