铁路售票系统.doc_第1页
铁路售票系统.doc_第2页
铁路售票系统.doc_第3页
铁路售票系统.doc_第4页
铁路售票系统.doc_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

此文档收集于网络,如有侵权请联系网站删除all in all 总而言之in many ways 在很多方面pregnant adj. 怀孕的represent vt. 代表;象征Unit 1wild adj. 野生的;野的;test out 试验;考验(一)段mass n. 质量;团;块;大量;demanding adj. 要求很高的;目录1.设计内容12.概要设计33.详细设计54.程序源码75.程序运行与调试166.总结177.参考文献17仅供学习与交流1. 设计内容(1)软件名称:铁路售票系统(2)软件开发的目标:完善目前现有的铁路售票系统,使之能跟够上时代的发展,更能够满足乘客的需求以及方便售票员的工作。同时通过实践来提高自己的动手能力,并增强自己对知识掌握的熟练程度。(3)软件的应用范围:理论上能够实现于铁路部门的售票系统,其目的在于在原有的系统基础使得铁路售票系统更加自动化,以期实现完善日常生活中铁路售票的各种缺陷。(4)软件的数据流图: D1 车票信息库 车票 信息P1.2确定车次、座位号、票种等乘客P1.1输入出行信息 出行信息 出行信息 车 票P1.4打印车票 车 票 信 息P1.3收款 车票信息 P2.2扣除手续费,返回退款信息图11P2.1输入要退的车票信息乘客 车票 车票信息 D2 车票信息库 车票信息 退款 信息乘客P2.3退款 现 金 图12 D3 车票信息库 车票 信息P3.2确定车次、座位号、票种等P3.1输入改签换乘信息乘客 改签换乘信息、车票 改签换乘信息 改签 换乘 车 票 信 息P3.4打印车票P3.3退款或收款 车票信息图13(5)软件的数据字典:名字:出行信息别名:描述:每名乘客提供给售票员的乘车信息定义:出行信息=始发站+终点站+车次+票数+票种+日期位置:售票系统存储器名字:车票信息别名:描述:电脑根据乘客的出行信息,而生成的车次安排信息定义:车票信息=始发站+终点站+售票站+车次+座位号+票价+编码+票种+日期位置:车票信息库名字:退款信息别名:描述:针对要退的车票的票价,按预先规定的方法扣除手续费后,所得到的退款金额定义:退款信息=1数字9位置:车票信息库名字:改签换乘信息别名:描述:乘客提供给售票员的变更后的出行信息定义:改签换乘信息=始发站+终点站+车次+票种+日期位置:售票系统缓存(6)软件的E-R图:票种票价性别姓名终点站始发站购买编码车票乘客 1 n售票站车次日期座位号出行信息年龄图212. 概要设计(1)系统功能包括:售票、退票、改签换乘、车次查询、系统管理等。功能说明: 在售票时设计了多种售票模式,售票员可输入班次、自定义站点编码、站点拼音代码,即可显示经过该站点的所有可售班次,班次车辆的座位状态以图形方式直观地显示,全面支持键盘操作,对退票等常用功能提供自定义快捷键,提高工作效率; 一个人可同时售数张相同或不同站点,相同或不同票种(全票、半票、免票儿童)的车票,可以实现累加本次售票款,直至下次新售票开始; 根据退票时间系统自动设置应收退票手续费。并显示车票金额,应扣手续费以及退票金额,并打印出退票手续费收据;退票用户应该包括两种:第一种用户是订票的旅客,订完车票的旅客,在取票前需要退票时,可以输入旅客的身份证号和车票号,完成退票过程;第二种用户是售票员,对于已经售出的车票,进行退票。退票时,需要人工服务,所以收取票面金额20%的手续费。 可实现异地联网售票、本地售票、互联网售票。从网络订票功能上分析,车票的信息应该包括列车的车次、出发地和目的地、席位的类型,票价和出发的日期时间。预订车票时用户需要输入购票的张数,旅客和联系人资料。为了方便旅客取得车票,系统生成取票号码,用户可以凭借此号码与身份证取得车票,并付款。订票功能,只受理5天后到20天之间的订票业务。对于循环发车的车次,系统不提供订票。订好车票的旅客,需要于开车两天前到取票点取票,否则系统将自动收回所订的车票。(2)子集说明:软件主要由五个模块组成,每个模块各有不同的功能。但都能够完成特定的处理和存储功能,各模块的数据都存放在数据库中。数据的调用和连接都由相应的程序来完成。售票模块:从售票功能上分析,首先,售票系统应该能够按发车站,终到站进行打印车票。售票时,售票员输入发车站和终到站,找到需要的车次,再填写售票数量,优惠信息和座位类型,并按优惠情况,折算票价。其次,此售票系统应该提供出售循环车次车票的功能。也实现按站打印车票。按站打印车票的好处是,使消费更加透明和公平。退票模块: 从退票功能上分析,退票用户应该包括两种。第一种用户是订票的旅客,订完车票的旅客,在取票前需要退票时,可以输入旅客的身份证号和车票号,完成退票过程;第二种用户是售票员,对于已经售出的车票,进行退票。退票时,需要人工服务,所以收取票面金额20%的手续费。当票面金额小于2元时,去掉手续费,就所剩无几了,因此系统应该不予退票。由于车票退回系统后,需要时间卖给其他旅客,所以旅客需在开车前办理退票手续,否则系统不予退票。改签换乘模块:从改签换乘功能上分析,首先,根据乘客提供的改签换成信息,调用车票信息库中的数据,以确定该选择的车次信息,再根据车次信息中票价,确定是该退款还是增收相应的票间差额。待退款后或收完款后,打印新的车票。但改签换乘必须在发车前完成,发车后不予改签车票。查询模块: 从查询功能上分析,需要分别满足三个条件查询。第一个条件是,当只输入“车次”时,进行查询,查出车次的详细信息;第二个条件是,当只输入“发车站”和“终到站”时,系统会把所有满足条件的车次,查询出来;第三个条件是,当把“车次”,“发车站”和“终到站”全都输入时,会把满足条件的唯一的一条记录(车次是唯一的)查询出来。系统管理模块: 从系统管理功能上分析,需要实现对优惠信息的设置与维护,管理车站信息,对车次信息的维护,实现列车票额分配,车票预售期设置,对售出的车票数进行统计,记录已售出车票的信息,显示剩余车票数。设置本站名称和用户管理等功能。(3)软件结构图:铁路售票系统售票1.0退票2.0改签换乘3.0确定车次信息1.2打印车票1.3输入退票信息2.1扣款返回退款额2.2返款2.3输入改签信息3.1确定车次信息3.2退款或收款3.3打印车票3.4输入出行信息1.1图3.13. 详细设计(1)软件数据结构的描述:车票=日期+价格+出发站+终点站+售票站+座号+车次+性质+编号日期=年+月+日+时+分价格=“1”“9999”出发站=1汉字6终点站=1汉字6售票站=1汉字6座号=车厢号+座位号车次=“1”“9999”性质=“1”“6” 注:如“1”表示空调硬座特快,“2”表示空调软座普快等编号=“000000001”“999999999”(2)软件程序流程图:开始选择事务类型 售票 改签换乘输入出行信息输入改签换乘信息 退 票输入要退车票信息确定车次信息确定车次信息扣除手续费返回退款信息退款或收款 退款 收款打印车票返回收款信息返回退款信息退还现金打印车票停止 图4.1(3)软件的主要算法:status createlist_l(linklist &L) /生成链表的定义void dataout_l(linklist &L) /打印火车票void searchlist_traindate(linklist &L,char e1) /按火车出发日期查询void searchlist_trainnum(linklist &L,char e3) /按班次查询status deletelist_l(linklist L,char k1,char k2) /售票功能status listcountnum_l(linklist &L) /票数功能status listticketprice_l(linklist &L,int count) /按票价排票status listtrainnum_l(linklist &L,int count) /按班次排票status insertlist_l(linklist &L,elemtype e) /退票功能4. 程序源码#include #include #include #include #define OK 1#define ERROR 0#define MAX_NUM 10#define MAX 20#define MAX1 5#define NULL 0 typedef int status;struct ticket long int ticketnumber; /票号采用长整型 char trainnumMAX_NUM; /车的班次 char startstationMAX; /起始站 char destinationMAX; /终点站 float ticketprice; /票价 char traindateMAX; /火车出发日期 ticketMAX1;typedef struct ticket elemtype;typedef struct lnode /管理类型重定义 elemtype data; struct lnode *next;*linklist,lnode;void save()FILE *fp;int i; fp=fopen(C:ticketrecord.txt,w);if(fp=NULL)printf(ncannot open file);exit(0); for(i=0;inext=NULL; for(i=MAX1;i0;i-)p=(linklist)malloc(sizeof(lnode); if(fread(&p-data,sizeof(elemtype),1,fp)!=1) printf(nfile read error); p-next=L-next; L-next=p; fclose(fp); return OK;void dataout_l(linklist &L) /打印火车票linklist p;p=L-next;printf(n票号t班次t起始站t终点站t票价t火车出发日期:);while(p)printf(n%ldt%st%st%st%ft%s,p-data.ticketnumber,p-data.trainnum,p-data.startstation,p-data.destination,p-data.ticketprice,p-data.traindate); printf(n);p=p-next;void searchlist_traindate(linklist &L,char e1) /按火车出发日期查询linklist p;int count=0;p=L-next;while(p)if(strcmp(p-data.traindate,e1)=0) count+;if(count=1)printf(n票号t班次t起始站t终点站t票价t火车出发日期n:);printf(n%ldt%st%st%st%ft%s,p-data.ticketnumber,p-data.trainnum,p-data.startstation,p-data.destination,p-data.ticketprice,p-data.traindate);p=p-next; if(count=0)printf(n没有找到);void searchlist_trainnum(linklist &L,char e3) /按班次查询linklist p;int count=0;p=L-next;while(p)if(strcmp(p-data.trainnum,e3)=0) count+;if(count=1)printf(n票号t班次t起始站t终点站t票价t火车出发日期n:);printf(n%ldt%st%st%st%ft%s,p-data.ticketnumber,p-data.trainnum,p-data.startstation,p-data.destination,p-data.ticketprice,p-data.traindate);p=p-next; if(count=0)printf(n没有找到);status deletelist_l(linklist L,char k1,char k2) /售票功能linklist p,q,r,t,b,c,d;char a1MAX,a2MAX,a3MAX_NUM;int count=0,i;long int j;p=L-next;while(p)if(strcmp(p-data.startstation,k1)=0&strcmp(p-data.destination,k2)=0)count+;if(count=1)printf(n根据你要查找的起点站和终点站有以下这些票:); printf(n票号t班次t起始站t终点站t票价t火车出发日期n:);printf(n%ldt%st%st%st%ft%s,p-data.ticketnumber,p-data.trainnum,p-data.startstation,p-data.destination,p-data.ticketprice,p-data.traindate);p=p-next;if(count=0)printf(n没有找到你所要查找的票:);return ERROR;elseprintf(n根据上述找到的票,请输入你想在找到的这些票中再根据哪种方式那你所需要的票:);printf(n*); printf(n1.按上车时间; 2.按票号; *); printf(n3.按车的班次; *); printf(n*);d:printf(n请输入你的选择:);scanf(%d,&i);switch(i) case 1:printf(n请输入你想买火车票的时间范围即时间的下限和上限:); scanf(%s%s,a1,a2); c=L-next; q=L;while(c)if(strcmp(a1,c-data.traindate)data.traindate)=0&strcmp(c-data.startstation,k1)=0&strcmp(c-data.destination,k2)=0)printf(n你要买的火车票为:); printf(n%ldt%st%st%st%ft%s,c-data.ticketnumber,c-data.trainnum,c-data.startstation,c-data.destination,c-data.ticketprice,c-data.traindate); q-next=c-next; free(c); return OK; else q=c;c=c-next; if(c=NULL) printf(n没有你要的票); return ERROR; break;case 2:printf(n请输入你想买的票号:); scanf(%ld,&j); t=L-next; b=L;while(t) if(t-data.ticketnumber=j&strcmp(t-data.startstation,k1)=0&strcmp(t-data.destination,k2)=0)printf(n你要买的火车票为:); printf(n%ldt%st%st%st%ft%s,t-data.ticketnumber,t-data.trainnum,t-data.startstation,t-data.destination,t-data.ticketprice,t-data.traindate); b-next=t-next; free(t); return OK; else b=t; t=t-next; if(t=NULL)printf(n没有你要的票); return ERROR; break;case 3:printf(n请输入你要买的火车班次:); scanf(%s,a3); r=L-next; d=L; while(r)if(strcmp(r-data.trainnum,a3)=0&strcmp(r-data.startstation,k1)=0&strcmp(r-data.destination,k2)=0)printf(n你要买的火车票为:);printf(n%ldt%st%st%st%ft%s,r-data.ticketnumber,r-data.trainnum,r-data.startstation,r-data.destination,r-data.ticketprice,r-data.traindate); d-next=r-next; free(r); return OK; else b=r; r=r-next; if(r=NULL) printf(n没有你要的票); return ERROR; break;default:printf(n输入错误);goto d; status listcountnum_l(linklist &L) /票数功能linklist p;int count=0;p=L-next;while(p)count+;p=p-next;return count;status listticketprice_l(linklist &L,int count) /按票价排票int i,j;i=count;linklist p,t,h,s;for(;i=1;i-)p=L-next;t=L;h=L;if(i=1) continue;if(p-data.ticketpricenext-data.ticketprice&i=2) continue; if(p-data.ticketpricep-next-data.ticketprice&i=2) s=p-next;L-next=s; p-next=s-next;s-next=p;continue; p=L-next; if(p-data.ticketpricep-next-data.ticketprice)s=p;else s=p-next;p=p-next;j=i-1;while(p&j=1)if(s-data.ticketpricedata.ticketprice)s=p;t=p;p=p-next;j-;if(s=t) continue;while(h-next)if(h-next=s)h-next=s-next;s-next=t-next;t-next=s;break;else h=h-next;return OK;status listtrainnum_l(linklist &L,int count) /按班次排票int i,j;i=count;linklist p,t,h,s;for(;i=1;i-)p=L-next;t=L;h=L; if(i=1) continue;if(strcmp(p-data.trainnum,p-next-data.trainnum)data.trainnum,p-next-data.trainnum)0&i=2) s=p-next;L-next=s; p-next=s-next;s-next=p;continue; p=L-next; if(strcmp(p-data.trainnum,p-next-data.trainnum)0)s=p;else s=p-next;p=p-next;j=i-1;while(p&j=1)if(strcmp(s-data.trainnum,p-data.trainnum)next;j-;if(s=t) continue;while(h-next)if(h-next=s)h-next=s-next;s-next=t-next; t-next=s;break;else h=h-next;return OK;status insertlist_l(linklist &L,elemtype e) /退票功能linklist s,p;s=(linklist)malloc(sizeof(lnode);s-data=e;p=L-next;while(p-next)p=p-next;s-next=p-next;p-next=s;return OK;void main()int x,y,w,z,h;elemtype k;long int j;float a;char eMAX,bMAX,cMAX,dMAX_NUM,f1MAX,f2MAX;linklist myl; printf(n请输入车票数据:);printf(n票号t班次t起始站t终点站t票价t火车出发日期:n); for(h=0;h=MAX1-1;h+)scanf(%d%s%s%s%f%s,&ticketh.ticketnumber,ticketh.trainnum,ticketh.startstation,ticketh.destination,&ticketh.ticketprice,ticketh.traindate);save();createlist_l(myl); printf(n*);printf(n*火车票管理系统: *); printf(n*1.查询功能; 2.售出功能; *); printf(n*3.退票功能; 4.打印表功能; *); printf(n*5.排票功能; 6.票数功能 *);printf(n*7.退出 *);printf(n*);a: printf(n回到原火车票管理系统:);printf(n请输入你的选择:);scanf(%d,&x);switch(x) case 1:printf(n*); printf(n*查询功能界面: *); printf(n*1.按火车出发日期查询*); printf(n*2.按车的班次查询*); printf(n*3.返回到原火车票系统 *); printf(n*); b: printf(n请输入你的选择:); scanf(%d,&y); switch(y) case 1: printf(n请输入你要查询的售票日期:); scanf(%s,e);searchlist_traindate(myl,e);break;case 2: printf(n请输入你要查找的车的班次:); scanf(%s,d);searchlist_trainnum(myl,d);break;case3: goto a; break;default:printf(n输入错误); goto b; break;case 2:printf(n请输入你要买的火车票的起点站和终点站:); scanf(%s%s,f1,f2); if(deletelist_l(myl,f1,f2) printf(n请输出售出一张火车票后的剩余火车票为:); dataout_l(myl); break;case 3:printf(n请输入退的这张票的内容n票号t班次t起始站t终点站t票价t出发时间:n); scanf(%d%s%s%s%f%s,&k.ticketnumber,k.trainnum,k.startstation,k.destination,&k.ticketprice,k.traindate); insertlist_l(myl,k); printf(n请输出退票以后的票的情况:); dataout_l(myl); break; case 4:dataout_l(myl); break;case 5:w=listcountnum_l(myl); printf(n*); printf(n*排票功能界面: *); printf(n*1.按票价排票; *); printf(n*2.按车的班次排票; *); printf(n*3.返回到原火车票系统 *); printf(n*);c: printf(n请输入你的选择:); scanf(%d,&z); switch(z) case 1:listticketprice_l(myl,w); printf(n经按票价排票后为:); dataout_l(myl); break; case2:listtrainnum_l(myl,w); printf(n经按车的班次排票后为:); dataout_l(myl); break; case3:goto a; default:printf(n输入错误); goto c; break;case 6:printf(n现有票%d张,且这些票分别为:,listcountnum_l(myl); dataout_l(myl); break;case 7:printf(n退出程序); exit(0);default:printf(n输入错误)goto a;5. 程序运行

温馨提示

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

最新文档

评论

0/150

提交评论