火车票预订软件工程技术交底大全报告.docx
《火车票预订软件工程技术交底大全报告.docx》由会员分享,可在线阅读,更多相关《火车票预订软件工程技术交底大全报告.docx(22页珍藏版)》请在冰豆网上搜索。
火车票预订软件工程技术交底大全报告
软件工程实验说明书
院系:
计算机科学与工程学院
专业班级:
计算机科学与技术
学号:
学生姓名:
指导教师:
年月日
摘要
出行一直是人们日常生活中不可或缺的一部分。
在科技发达的今天,人们希望足不出户就可以便、快捷地查询到出行所需的信息,预订出行所需的车票,为自己的行程进行合理的安排。
开发一套火车车次查询系统既能便广大乘客出行,节省时间,提供便利,省去不必要的麻烦,也能为车站工作人员带来工作便利,提高工作效率,节省人力资源。
本软件工程系统利用JSP实现了“火车票查询订购系统”功能:
火车车次的查询功能和火车车票的预订功能等。
本文对系统的需求分析、总体设计及详细设计进行了详细地阐述,主要实现了以下功能:
用户注册、用户登录、车次查询、车票预订、车票退订、车次信息管理、修改密码、订票管理等功能。
最终实现完成了该系统。
关键词:
火车票预订;查询车次;预订车票;软件工程
1需求分析
需求分析是软件开发和设计过程中的一个重要环节。
本阶段,主要是相关技术人员对火车票订购系统的应用情况作全面调查,以确定系统目标,并对系统所需要的基础数据以及数据处理要求进行分析,从而确定管理人员的操作模式和用户的需求。
线上预订火车票系统是一款功能强大、操作简便、易维护的、具有良好人机交互界面的线上订票系统,它包括用户管理模块、系统参数设置模块、票务信息模块(提供票价、列车的实时信息)、订票管理模块(提供订票和退订功能)、实时信息提示模块(提供车况、路况、列车晚点等实时信息)、数据管理模块(提供数据备份、数据操作功能)。
实现火车票线上预定的自动化的计算机系统,为旅客提供准确、精细、迅速的火车票销售信息和便、简单的订票功能。
线上预订火车票系统主要是对于订票信息的统一管理,满足了中小型线上订票对于用户的管理,订票信息的收集和处理面的要求。
用现代化的式取代以前的传统模式,更有利于信息的流通,资源的宏观管理。
具有体积小,代码简洁,易维护、易修改的优点。
功能需求
网上火车订购系统是一个融合火车票的订购、列车路线的添加、管理员管理、列车信息及售票信息查询为一身的综合系统。
功能需求从用户与管理员两个面的进行分析。
从用户的角度看,用户需要订购自己所需要的火车票,所以本系统的使用者应该有注册账户功能、登陆功能、站点、车次查询功能、订票、退票功能、查看自己的订票信息功能同时还有修改自己的注册信息功能。
从管理员的角度看,管理员可以通过登录权限进入管理员模式。
管理员可以进行路线、车次的添加、删除以及修改并且可以通过系统查看用户的订购票务信息。
性能需求
为了保证系统能够长期、安全、稳定、可靠、高效的运行,本系统应该满足以下的性能需求。
准确性和及时性
系统处理的准确性和及时性是系统的必要性能。
系统应能及时而且准确的根据用户权限及所输入的信息做出响应。
由于本系统的查询功能对于整个系统的功能和性能完成举足轻重。
作为系统的很多数据来源,车票的数量和时间又影响用户的决策活动,其准确性和及时性很大程度上决定了系统的成败。
在系统开发过程中,必须采用一定的法保证系统的准确性和及时性。
易用性
本系统是直接面对用户的,而用户往往对计算机并不是很熟悉。
这就是要求系统能够提供良好的用户接口,易用的人机交互界面。
要实现这一点,就是要求系统应该尽量使用用户熟悉的术语和中文信息的界面,从而保证系统的易用性。
安全性
网上订票系统中涉及到相当重要的信息数据,系统要保证用户的权限,对于车次等信息用户只有享有查询服务,不得更改;系统还要提供便的手段供系统维护人员进行数据备份、日常安全管理、以及系统意外崩溃时数据的恢复等工作。
同时系统还要保证对数据库进行及
时更新,保证数据的一致性。
3.可行性研究
可行性分析的主要任务是了解用户的要求及现实环境,从技术、经济和管理等三面研究。
(1)技术可行性
技术可行性是根据现有的技术条件,能否达到所提出的要求当前的软硬件技术能否满足对系统提出的要求。
现在地铁已经实行了自动验票,火车票也已经有人工售票机了,而且现在动画应用也多不胜数,所以将他们三者合在一起,是可行的。
(2)经济可行性
经济可行性主要是对项目预估费用支出和取得的收益进行评价。
火车票相对于其他运输工具是比较便宜的,所以现在采用火车为交通工具的人群越来越多。
对于此产生的经济效益是不可估量的,还为社会做出了巨大贡献。
所以系统的更新是势在必得的。
(3)管理可行性
管理可行性是指管理面的条件和管理人员对开发应用项目的态度。
2课题总体设计
2.1模块描述
本系统是面向铁道部门的管理人员和用户,主要便管理人员对火车票管理操作以及用户对火车票的订购等操作。
系统主要分为管理员端和用户端两个模块,管理人员和用户可以在自己的权限围进行不同的功能操作。
其主要功能有:
管理人员对火车和车票信息的添加、查询、修改、删除及修改密码等;用户对车票的查询、订购,查看个人信息、修改密码及退票等。
系统总体功能结构图如图2.1所示。
注册信息
修改密码
查询火车信息
订购车票
查询订票
退还车票
查看通知
查看注册信息
修改密码
查询火车信息
添加火车信息
添加路线信息
删除火车信息
修改火车信息
更改提示
火车票订购
身份鉴定
管理员
用户
图2.1系统总功能结构图
1管理员模块功能
本模块功能包括:
添加、修改、删除和查询火车、线路和火车票信息以及修改个人密码等。
(1)添加火车、线路和火车票信息:
主要是管理人员对火车自身信息、线路上存在的火车信息以及相应的火车票信息的添加。
(2)修改火车、线路和火车票信息:
主要是管理人员对由于某些原因导致出现不合法火车信息和车票信息的更改、修订。
(3)删除火车、线路和火车票信息:
主要是管理人员对一些不存在现实价值意义的火车和车票信息的删除。
(4)查询火车、线路和火车票信息:
主要是管理人员对火车、线路和车票信息的查询。
(5)修改密码:
管理人员修改自己的登录密码。
2用户模块功能
本模块功能包括:
用户注册信息,修改个人密码,查询个人信息,查询火车和线路信息,订购车票和退换车票以及查看通知等。
(1)注册信息:
主要是用户在使用此系统之前向系统数据库中注册个人信息,便于系统以后的管理和保障系统的安全。
(2)修改个人密码:
主要是为了保障用户信息安全,用户可以对自己密码进行替换和重新设置。
(3)查询个人信息:
主要是用户对自己的信息查询。
(4)查询火车和线路信息:
主要是用户根据自己所想要订购的车票,查询其相应的火车及其线路的相关信息。
(5)订购车票:
用户订购自己所需要的车票。
(6)退换撤销:
主要是用户在特定的时间和权限围对自己购买的车票给予退还和更换,从而买到自己真正寻求的车票。
(7)查询通知:
主要是用户查询铁道部门的最新通知,以便为购买车票作相应的准备。
3数据需求
输入信息
信息处理
信息输出
输入车次
搜索系统数据库
符合用户需求的车次
以及相关信息
用户输入个人信息以及
需订购的车票信息
更新系统中的订票信息。
将新的信息存入系统数据库
订票
用户输入身份证号或交
易的订单号
检索系统数据库
符合用户需求的订票信
息
用户输入自己的身份证
检索系统数据库以得到订票记录,删除用户请求的订票记录,已更新系统数据库
退票
2.2结构设计
概念结构设计
针对火车站网上订票系统,通过对网上订票工作的过程、容以及数据流程分析,设计如下所示的数据项和数据结构:
车次信息:
车号、出发地、目的地、发车日期、开出时刻、剩余座位数票价、座位类型。
订票记录:
订单号、身份证号、车号、订购日期、订购票数、总价。
用户信息:
用户名、身份证号、性别、
图2.2车次信息(E-R图)
图2.3用户信息(E-R图)
图2.4订单信息(E-R图)
图2.5订票式(E-R图)
图2.6总体联系图(E-R图)
图2.7“火车票预售系统”关联图
3课题详细设计
3.1程序代码
packageservlet;
importjava.io.*;
importjava.sql.*;
importjavax.servlet.*;
importjavax.servlet.http.*;
importbean.user;
publicclassusersvltextendsHttpServlet{
publicusersvlt(){
super();
}
publicvoiddestroy(){
super.destroy();//Justputs"destroy"stringinlog
//Putyourcodehere
}
booleanflag;
publicvoiddoGet(HttpServletRequestreq,HttpServletResponseres)
throwsServletException,IOException{
req.setCharacterEncoding("UTF-8");
Stringuserid=req.getParameter("userid");
intsuccess=0;
Stringaction=req.getParameter("action");
useru=null;
Stringmessage="";
/*if("update".equalsIgnoreCase(action)){
flag=true;
u=doUpdate(req,res,userid);
if(flag)sendBean(req,res,u,"/userinfo.jsp");
}*/
if("delete".equalsIgnoreCase(action)){
try{
success=doDelete(userid);
}
catch(SQLExceptione){}
if(success!
=1){
doError(req,res,"usersvlt:
Deleteunsuccessful.Rowsaffected:
"+success);
}else{
res.sendRedirect("userinfo.jsp");
}
}
}
/*publicuserdoNew(HttpServletRequestreq,HttpServletResponseres)
throwsServletException,IOException{
userstu=newu();
Stringuserid=req.getParameter("useid");
Stringname=req.getParameter("name");
Stringpassword=req.getParameter("password");
Stringdep=req.getParameter("dep");
Stringsex=req.getParameter("sex");
Stringjiguan=req.getParameter("jiguan");
if(isTrue(req,res,stu_id1,name,password)&&hasLogin(req,res,stu_id1)){
stu.setId(stu_id1);
stu.setName(name);
stu.setPassword(password);
stu.setDep(dep);
stu.setSex(sex);
stu.setJiguan(jiguan);
stu.addStudent();}
returnstu;
}
publicuserdoUpdate(HttpServletRequestreq,HttpServletResponseres,Stringuserid)
throwsServletException,IOException{
useru=newuser();
Stringusername=newString(req.getParameter("username").getBytes("gbk"));
Stringemail=req.getParameter("email");
Stringid=req.getParameter("id");
Stringsex=req.getParameter("sex");
Stringphone=req.getParameter("phone");
Stringaddress=req.getParameter("address");
if(isTrue(req,res,username,email,id,phone,address)){
u.setuserId(userid);
u.setuserName(username);
u.setEmail(email);
u.setAddress(address);
u.setPhone(phone);
u.setId(id);
u.setSex(sex);
u.updateUser();}
returnu;
}*/
publicintdoDelete(Stringuserid)throwsSQLException{
intnum=0;
useru=newuser();
num=u.deleteUser(userid);
returnnum;
}
publicvoidsendBean(HttpServletRequestreq,HttpServletResponseres,
useruu,Stringtarget)
throwsServletException,IOException{
req.setAttribute("user",uu);
RequestDispatcherrd=getServletContext().getRequestDispatcher(target);
rd.forward(req,res);
}
publicvoiddoError(HttpServletRequestreq,
HttpServletResponseres,
Stringstr)
throwsServletException,IOException{
flag=false;
req.setAttribute("problem",str);
RequestDispatcherrd=getServletContext().getRequestDispatcher("/errorpage.jsp");
rd.forward(req,res);
}
publicbooleanhasLogin(HttpServletRequestreq,HttpServletResponseres,Stringuserid)
throwsServletException,IOException{
booleanf=true;
Stringmessage="对不起,该用户已经被注册过了!
";
useru=newuser();
f=u.hasLogin(userid);
if(f==false){
doError(req,res,message);
}
returnf;
}
publicbooleanisTrue(HttpServletRequestreq,HttpServletResponseres,
Stringname,Stringemail,Stringid,Stringphone,Stringaddress)
throwsServletException,IOException{
booleanf=true;
Stringmessage="";
if(name==null||name.equals("")){
f=false;
message="姓名不能为空,请重新填写!
";
if(flag)doError(req,res,message);}
if(email==null||email.equals("")){
f=false;
message="电子不能为空,请重新填写!
";
if(flag)doError(req,res,message);}
if(id==null||id.equals("")){
f=false;
message="身份证号不能为空,请重新填写!
";
if(flag)doError(req,res,message);}
if(phone==null||phone.equals("")){
f=false;
message="不能为空,请重新填写!
";
if(flag)doError(req,res,message);}
if(address==null||address.equals("")){
f=false;
message="联系地址不能为空,请重新填写!
";
if(flag)doError(req,res,message);}
returnf;
}
publicvoiddoPost(HttpServletRequestreq,HttpServletResponseres)
throwsServletException,IOException{
doGet(req,res);
}
}
packagebean;
importjava.io.*;
importjava.sql.*;
publicclasssqlBean{
publicConnectionconn=null;
publicResultSetrs=null;
privateStringDatabaseDriver=".mysql.jdbc.Driver";
//DataSource数据源名称DSN
privateStringDatabaseConnStr="jdbc:
mysql:
//localhost:
3306/ordering?
useUnicode=true&characterEncoding=utf-8"+",root,sa";
//定义法
/*setXxx用于设置属?
?
?
?
?
?
;getXxx用于得到属?
?
?
?
?
?
*/
publicvoidsetDatabaseDriver(StringDriver){
this.DatabaseDriver=Driver;
}
publicStringgetDatabaseDriver(){
return(this.DatabaseDriver);
}
publicvoidsetDatabaseConnStr(StringConnStr){
this.DatabaseConnStr=ConnStr;
}
publicStringgetDatabaseConnStr(){
return(this.DatabaseConnStr);
}
publicsqlBean(){/////构?
?
?
函?
?
try{
Class.forName(DatabaseDriver);
}
catch(java.lang.ClassNotFoundExceptione){
System.err.println("加载驱动器有错误:
"+e.getMessage());
System.out.print("执行插入有错?
?
:
"+e.getMessage());//输出到客户端
}
}
publicintexecuteInsert(Stringsql){
intnum=0;
try{
conn=DriverManager.getConnection("jdbc:
mysql:
//localhost:
3306/ordering?
useUnicode=true&characterEncoding=utf-8","root","sa");
Statementstmt=conn.createStatement();
num=stmt.executeUpdate(sql);
}
catch(SQLExceptionex){
System.err.println("执行插入有错?
?
:
"+ex.getMessage());
System.out.print("执行插入有错?
?
:
"+ex.getMessage());//输出到客户端
}
CloseDataBase();
returnnum;
}
//displaydata
publicResultSetexecuteQuery(Stringsql){
rs=null;
try{
conn=DriverManager.getConnection("jdbc:
mysql:
//localhost:
3306/ordering?
useUnicode=true&characterEncoding=utf-8",
"root","sa");
Statementstmt=conn.createStatement();
rs=stmt.executeQuery(sql);
}
catch(SQLExceptionex){
System.err.println("执行查询有错?
?
:
"+ex.getMessage());
System.out.print("执行查询有错?
?
:
"+ex.getMessage());//输出到客户端
}
returnrs;
}
//deletedata
publicintexecuteDelete(Stringsql){
intnum=0;
try{
conn=DriverManager.getConnection("jdbc:
mysql:
//localhost:
3306/ordering?
use