铁路售票系统26号.docx
《铁路售票系统26号.docx》由会员分享,可在线阅读,更多相关《铁路售票系统26号.docx(24页珍藏版)》请在冰豆网上搜索。
铁路售票系统26号
软件学院
课程设计报告书
课程名称软件工程课程设计
设计题目铁路售票系统
专业班级软件0x—0x班
学号0x20010x26
姓名xxxxx
指导教师李婕娜
2011年12月
目录
1设计时间2
2设计目的2
3设计任务2
4设计内容2
4.1问题定义3
4.2可行性研究3
4.3需求分析3
4.4概要设计6
4.5详细设计9
4.6编码10
4.7测试18
5总结与展望19
参考文献20
成绩评定20
1设计时间
2011年12月25日—2011年12月30日
2设计目的
软件课程设计是对所学软件工程课程的小结,是提高学生对所学知识综合应用能力的一种方式,是集中实践性环节之一。
要求同学们对课程中所学习到的知识综合运用,为了目前现有的铁路售票系统,使之能跟够上时代的发展,更能够满足乘客的需求以及方便售票员的工作。
同时通过实践来提高自己的动手能力,并增强自己对知识掌握的熟练程度。
理论上能够实现于铁路部门的售票系统,其目的在于在原有的系统基础使得铁路售票系统更加自动化,以期实现完善日常生活中铁路售票的各种缺陷。
3设计任务
铁路售票系统,该系统的功能包括:
售票、退票、改签换乘、车次查询、系统管理等。
售票员可输入班次、自定义站点编码、站点拼音代码,即可显示经过该站点的所有可售班次,班次车辆的座位状态以图形方式直观地显示,全面支持键盘操作,对退票等常用功能提供自定义快捷键,提高工作效率;一个人可同时售数张相同或不同站点,相同或不同票种(全票、半票、免票儿童)的车票,可以实现累加本次售票款,直至下次新售票开始;根据退票时间系统自动设置应收退票手续费。
并显示车票金额,应扣手续费以及退票金额,并打印出退票手续费收据;退票用户应该包括两种:
第一种用户是订票的旅客,订完车票的旅客,在取票前需要退票时,可以输入旅客的身份证号和车票号,完成退票过程;第二种用户是售票员,对于已经售出的车票,进行退票。
退票时,需要人工服务,所以收取票面金额20%的手续费。
可实现异地联网售票、本地售票、互联网售票。
从网络订票功能上分析,车票的信息应该包括列车的车次、出发地和目的地、席位的类型,票价和出发的日期时间。
预订车票时用户需要输入购票的张数,旅客和联系人资料。
为了方便旅客取得车票,系统生成取票号码,用户可以凭借此号码与身份证取得车票,并付款。
订票功能,只受理5天后到20天之间的订票业务。
对于循环发车的车次,系统不提供订票。
4设计内容
4.1问题定义
本系统是为了方便火车票的管理而开发的。
每天都有很多人购买火车票,有时排队一排就是几个小时,费时费力,还不一定买的到票。
经常存在排队买票难的问题,而且是进行手工登记,数据信息处理工作量大,容易出错,并且由于数据繁多,因此也容易丢失和不易于查找。
基于此,我们认为有必要建立一个韶大学生春节火车票铁路售票管理系统,使买票电子化,程序化,能够及时、准确、有效的订购和查询,省去了乘客订票买票难的困扰,本系统主要由五个模块组成,每个模块各有不同的功能。
但都能够完成特定的处理和存储功能,各模块的数据都存放在数据库中。
数据的调用和连接都由相应的程序来完成。
4.2可行性研究
经济上,开发开一个售票系统会动用大量的人力和物力,在系统运行以后系统的维护也需要专业人员,这些都会花费大量的资金,但是在系统的运行以后会减少工作人员的工作从而产生效益,回收成本。
社会效益上,开发一个售票系统会减少人们购票排队的时间,为人们的生活提供方便,体现社会的人性化和以人为本。
技术上,在目前的技术下开发一个能够实现购票和退票,查询票据信息的系统,并不存在太大的困难,技术上完全可行。
运行上,在系统开发以后,在现实生活中会经历一段过渡阶段,但是在运行一段时间以后人们就会熟悉和习惯,在运行上也完全可行。
4.3需求分析
(1)铁路售票系统,该系统的功能包括:
售票、退票、改签换乘、车次查询、系统管理等。
系统的业务流程图如下:
售票改签换乘
退票
退款收款
图4-3系统业务流程图
(2)系统实现购票时,系统会把每名乘客提供给售票员的乘车信息存储在售票系统存储器上并打印票据给购买者。
系统实现退票时,首先会查询要退票的信息,然后计算手续费并告知退票者。
系统实现改签换乘是,系统会记录乘客要换乘的信息并把新票据打印出来购买者。
其数据流图如下:
图4-4购票数据流图
图4-5退票数据流图
图4-6改签换乘数据流图
4.4概要设计
(1)数据字典描述的主要内容有:
数据流、数据元素、数据存储、数据处理、外部实体,其中数据元素是组成数据流的基本成分。
在系统分析中,数据字典起着重要的作用,铁路售票系统产生的数据字典如下:
(2)在系统运行过程中,系统产生的数据库表如下:
表4-3-1票据表
列名
类型
长度
Null
编号
Int
4
否
起点
Vchar
50
否
终点
Vchar
50
否
类型
Vchar
50
可以
价格
Int
4
否
表4-3-2改签换乘信息表
列名
类型
长度
Null
原来编号
Int
4
否
目前编号
Int
4
否
类型
Vchar
50
可以
价格
Int
4
否
(3)软件的ER图如下所示:
图4-3-2软件的E-R图
(4)软件主要由五个模块组成,每个模块各有不同的功能,其总体模块图如下:
图4-3-3总体模块图
4.5详细设计
(1)软件程序流程图:
软件程序流程图4-5-1
(2)软件数据结构的描述:
车票=日期+价格+出发站+终点站+售票站+座号+车次+性质+编号
日期=年+月+日+时+分
价格=“1”~“9999”
出发站=1{汉字}6
终点站=1{汉字}6
售票站=1{汉字}6
座号=车厢号+座位号
车次=“1”~“9999”
性质=“1”~“6”注:
如“1”表示空调硬座特快,“2”表示空调软座普快等
编号=“000000001”~“999999999”
(3)软件的主要算法:
statuscreatelist_l(linklist&L)//生成链表的定义
voiddataout_l(linklist&L)//打印火车票
voidsearchlist_traindate(linklist&L,chare1[])//按火车出发日期查询
voidsearchlist_trainnum(linklist&L,chare3[])//按班次查询
statusdeletelist_l(linklistL,chark1[],chark2[])//售票功能
statuslistcountnum_l(linklist&L)//票数功能
statuslistticketprice_l(linklist&L,intcount)//按票价排票
statuslisttrainnum_l(linklist&L,intcount)//按班次排票
statusinsertlist_l(linklist&L,elemtypee)//退票功能
4.6编码
#include
#include
#include
#include
#defineOK1
#defineERROR0
#defineMAX_NUM10
#defineMAX20
#defineMAX15
#defineNULL0
typedefintstatus;
structticket
{longintticketnumber;//票号采用长整型
chartrainnum[MAX_NUM];//车的班次
charstartstation[MAX];//起始站
chardestination[MAX];//终点站
floatticketprice;//票价
chartraindate[MAX];//火车出发日期
}ticket[MAX1];
typedefstructticketelemtype;
typedefstructlnode//管理类型重定义
{elemtypedata;
structlnode*next;
}*linklist,lnode;
voidsave(){FILE*fp;
inti;
fp=fopen("C:
\\ticketrecord.txt","w");
if(fp==NULL){printf("\ncannotopenfile");
exit(0);
}
for(i=0;i<=MAX1-1;i++){
if(fwrite(&ticket[i],sizeof(elemtype),1,fp)!
=1)
printf("\nfilewriteerror");
}
fclose(fp);
}
statuscreatelist_l(linklist&L)//生成链表的定义
{inti;
linklistp;
FILE*fp;
fp=fopen("C:
\\ticketrecord.txt","r");
if(fp==NULL){printf("\ncannotopenfile");
exit(0);
}
字节的空间,并将这块空间的首地址交给L管理
L->next=NULL;
for(i=MAX1;i>0;i--){p=(linklist)malloc(sizeof(lnode));
if(fread(&p->data,sizeof(elemtype),1,fp)!
=1)
printf("\nfilereaderror");
p->next=L->next;
L->next=p;
}
fclose(fp);
returnOK;
}
voiddataout_l(linklist&L)//打印火车票
{linklistp;
p=L->next;
while(p){
p->data.traindate);
printf("\n");
p=p->next;
}
}
{linklistp;
structticket
{longintticketnumber;//票号采用长整型
chartrainnum[MAX_NUM];//车的班次
charstartstation[MAX];//起始站
chardestination[MAX];//终点站
floatticketprice;//票价
chartraindate[MAX];//火车出发日期
}ticket[MAX1];
typedefstructticketelemtype;
typedefstructlnode//管理类型重定义
{elemtypedata;
structlnode*next;
}*linklist,lnode;
voidsave(){FILE*fp;
inti;
fp=fopen("C:
\\ticketrecord.txt","w");
if(fp==NULL){printf("\ncannotopenfile");
exit(0);
}
for(i=0;i<=MAX1-1;i++){
if(fwrite(&ticket[i],sizeof(elemtype),1,fp)!
=1)
printf("\nfilewriteerror");
}
fclose(fp);
}
intcount=0;
p=L->next;
while(p){if(strcmp(p->data.traindate,e1)==0){
count++;
if(count==1)
日期\n:
");
d->next=r->next;
free(r);
returnOK;
}
else{
b=r;
r=r->next;
}
}
if(r==NULL){printf("\n没有你要的票");
returnERROR;
}
break;
default:
printf("\n输入错误");
}
gotod;
}
}
statuslistcountnum_l(linklist&L)//票数功能
{linklistp;
intcount=0;
p=L->next;
while(p){count++;
p=p->next;
}
s->data=e;
statuscreatelist_l(linklist&L)//生成链表的定义
{inti;
linklistp;
FILE*fp;
fp=fopen("C:
\\ticketrecord.txt","r");
if(fp==NULL){printf("\ncannotopenfile");
exit(0);
}
字节的空间,并将这块空间的首地址交给L管理
L->next=NULL;
for(i=MAX1;i>0;i--){p=(linklist)malloc(sizeof(lnode));
if(fread(&p->data,sizeof(elemtype),1,fp)!
=1)
printf("\nfilereaderror");
p->next=L->next;
L->next=p;
}
fclose(fp);
returnOK;
}
voiddataout_l(linklist&L)//打印火车票
{linklistp;
p=L->next;
while(p){
p->data.traindate);
printf("\n");
p=p->next;
}
}
{linklistp;
p=L->next;
while(p->next){p=p->next;
}
s->next=p->next;
p->next=s;
returnOK;
}
voidmain(){intx,y,w,z,h;
elemtypek;
longintj;
floata;
chare[MAX],b[MAX],c[MAX],d[MAX_NUM],f1[MAX],f2[MAX];
linklistmyl;
printf("\n请输入车票数据:
");
}
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){
case1:
printf("\n******************************************");
printf("\n*查询功能界面:
*");
printf("\n*1.按火车出发日期查询*");
printf("\n*2.按车的班次查询*");
printf("\n*3.返回到原火车票系统*");
printf("\n******************************************");
b:
printf("\n请输入你的选择:
");
scanf("%d",&y);
switch(y){
case1:
printf("\n请输入你要查询的售票日期:
");
scanf("%s",e);
searchlist_traindate(myl,e);
break;
case2:
printf("\n请输入你要查找的车的班次:
");
break;
case3:
gotoa;
default:
printf("\n输入错误");}
gotoc;
break;
case6:
printf("\n现有票%d张,且这些票分别为:
",listcountnum_l(myl));
dataout_l(myl);
break;
case7:
printf("\n退出程序");
exit(0);
default:
printf("\n输入错误")}
gotoa;
}
4.7测试
软件的调试采用黑盒测试与白盒测试相结合的方法,这样更有利于及时发现软件的错误与不足指出,以便及时加以改正,使得软件的功能更完善,同时使得软件的实用性也更强。
(1)实现的具体方法:
本软件的黑盒测试即把对象看做一个黑盒子,测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明。
因此黑盒测试又叫功能测试或数据驱动测试。
黑盒测试主要是为了发现以下几类错误:
1、是否有不正确或遗漏的功能?
2、在接口上,输入是否能正确的接受?
能否输出正确的结果?
3、是否有数据结构错误或外部信息(例如数据文件)访问错误?
4、性能上是否能够满足要求?
5、是否有初始化或终止性错误
白盒测试是对软件的过程性细节做细致的检查。
这种方法是把测试对象看做一个打开的盒子,它允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。
通过在不同点检查程序状态,确定实际状态是否与预期的状态一致。
因此白盒测试又称为结构测试或逻辑驱动测试。
白盒测试主要是想对程序模块进行如下检查:
1、对程序模块的所有独立的执行路径至少测试一遍。
2、对所有的逻辑判定,取“真”与取“假”的两种情况都能至少测一遍。
3、在循环的边界和运行的界限内执行循环体。
4、测试内部数据结构的有效性,等等。
(2)实现长期跟踪检测:
软件的使用是一个长期的过程,有些错误和不足在早期的测试中很能发现。
因此,只能在今后的使用中不断发掘不断完善。
鉴于开发周期的关系,许多测试步骤可能有些不如意的地方,故应该对软件实现长期的跟踪,以达到最初的期望。
5总结与展望
时间如白驹过隙,在这段时间里,我完成了软件工程课程设计。
我更加体会到的是充实、紧张、快乐。
在整个过程中无不倾注着老师的心血,同学的帮助;在这里特别要感谢我的指导教师宋宇老师,在设计期间不辞辛劳的给予我帮助和关心,对我的整个设计过程严格要求。
才使得我的设计能够顺利完成
通过此次课程设计,将我本学期所学的软件工程知识得到巩固和应用,主要有数据流图,数据字典和ER图,而且其中也对各个工具的用处做了简要说明。
同时有巩固了软件工程个阶段的主要过程,单元测试的重点,而且此课程设计中运用到俩种最典型的测试方法之一(黑盒测试)。
本次课设综合笨学期所学的软件工程一书。
其中重点内容也都设计到。
在进行测试的时候花费的时间较大,会出现一些错误。
经过翻书和与同学探讨最终解决。
这此课程设计还让我懂得了写程序不能闭门造车,只有勇于实验探索才能巩固自己的知识从而加深印象,然而其中过程要努力拓宽知识面,开阔视野,拓展思维。
它还让我学会了在网上查阅那些无限的资料,并且可以再同学之间探讨,这样可以更加明确目的,而且更容易到达理想的结果。
参考文献
[1]屈辉立,陈可明,石武信.JSP网站编程教程[M].第1版,北京:
北京希望电子出版社,2005
[2]白勇.用B/S模式构建在线考试系统[J],重庆电力高等专科学校学报,2003,10(4):
100~130.
[3]JiangGuo,YuehongLiao,BehzadParviz.ASurveyofJ2EEApplicationPerformanceManagementSystems[J],ProceedingsoftheIEEEInternationalConferenceonWebServices(ICWS'04),2004.6(5):
17~32.
[4]VB数据库管理范例:
成绩评定
成绩教师签字