资源描述
软件工程实验阐明书
院 系: 计算机科学与工程学院
专业班级: 计算机科学与技术
学 号:
学生姓名:
指引教师:
年 月 日
摘 要
出行始终是人们寻常生活中不可或缺一某些。在科技发达今天,人们但愿足不出户就可以以便、快捷地查询到出行所需信息,预订出行所需车票,为自己行程进行合理安排。开发一套火车车次查询系统既能以便广大乘客出行,节约时间,提供便利,省去不必要麻烦,也能为车站工作人员带来工作便利,提高工作效率,节约人力资源。
本软件工程系统运用JSP实现了“火车票查询订购系统”功能:火车车次查询功能和火车车票预订功能等。本文对系统需求分析、总体设计及详细设计进行了详细地阐述,重要实现了如下功能:顾客注册、顾客登录、车次查询、车票预订、车票退订、车次信息管理、修改密码、订票管理等功能。最后实现完毕了该系统。
核心词:火车票预订;查询车次;预订车票;软件工程
目 录
1 需求分析 1
2 课题总体设计 3
2.1 模块描述 3
2.2 构造设计 4
3 课题详细设计 8
3.1 程序代码 8
3.2 程序调试 14
4 总 结 16
参照文献 17
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 程序代码
package servlet;
import java.io.*;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;
import bean.user;
public class usersvlt extends HttpServlet {
public usersvlt() {
super();
}
public void destroy() {
super.destroy();// Just puts "destroy" string in log
// Put your code here
}
boolean flag;
public void doGet(HttpServletRequest req,HttpServletResponse res)
throws ServletException,IOException {
req.setCharacterEncoding("UTF-8");
String userid =req.getParameter("userid");
int success = 0;
String action = req.getParameter("action");
user u = null;
String message="";
/* 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(SQLException e){}
if (success != 1) {
doError(req,res,"usersvlt:Delete unsuccessful. Rows affected:" + success);
} else {
res.sendRedirect("userinfo.jsp");
}
}
}
/* public user doNew(HttpServletRequest req,HttpServletResponse res )
throws ServletException,IOException{
user stu= new u();
String userid=req.getParameter("useid");
String name=req.getParameter("name");
String password= req.getParameter("password");
String dep=req.getParameter("dep");
String sex = req.getParameter("sex");
String jiguan = 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();}
return stu;
}
public user doUpdate(HttpServletRequest req,HttpServletResponse res ,String userid)
throws ServletException,IOException {
user u = new user();
String username=new String(req.getParameter("username").getBytes("gbk"));
String email = req.getParameter("email");
String id=req.getParameter("id");
String sex = req.getParameter("sex");
String phone=req.getParameter("phone");
String address=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(); }
return u;
}*/
public int doDelete(String userid) throws SQLException {
int num=0;
user u=new user();
num=u.deleteUser(userid);
return num;
}
public void sendBean(HttpServletRequest req,HttpServletResponse res,
user uu,String target)
throws ServletException,IOException {
req.setAttribute("user",uu);
RequestDispatcher rd = getServletContext().getRequestDispatcher(target);
rd.forward(req,res);
}
public void doError(HttpServletRequest req,
HttpServletResponse res,
String str)
throws ServletException,IOException {
flag=false;
req.setAttribute("problem",str);
RequestDispatcher rd = getServletContext().getRequestDispatcher("/errorpage.jsp");
rd.forward(req,res);
}
public boolean hasLogin(HttpServletRequest req,HttpServletResponse res,String userid)
throws ServletException,IOException{
boolean f=true;
String message="对不起,该顾客已经被注册过了!";
user u= new user();
f= u.hasLogin(userid);
if(f==false){
doError(req,res,message);
}
return f;
}
public boolean isTrue(HttpServletRequest req,HttpServletResponse res,
String name,String email,String id,String phone,String address)
throws ServletException,IOException {
boolean f=true;
String message ="";
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); }
return f;
}
public void doPost(HttpServletRequest req,HttpServletResponse res)
throws ServletException,IOException {
doGet(req,res);
}
}
package bean;
import java.io.*;
import java.sql.*;
public class sqlBean {
public Connection conn=null;
public ResultSet rs=null;
private String DatabaseDriver="com.mysql.jdbc.Driver";
//DataSource 数据源名称DSN
private String DatabaseConnStr="jdbc:mysql://localhost:3306/ordering?useUnicode=true&characterEncoding=utf-8"+",root,sa";
//定义办法
/*setXxx用于设立属??????;getXxx用于得到属??????*/
public void setDatabaseDriver(String Driver){
this.DatabaseDriver=Driver;
}
public String getDatabaseDriver(){
return (this.DatabaseDriver);
}
public void setDatabaseConnStr(String ConnStr){
this.DatabaseConnStr=ConnStr;
}
public String getDatabaseConnStr(){
return (this.DatabaseConnStr);
}
public sqlBean(){/////构???函??
try{
Class.forName(DatabaseDriver);
}
catch(java.lang.ClassNotFoundException e){
System.err.println("加载驱动器有错误:"+e.getMessage( ));
System.out.print("执行插入有错??:"+e.getMessage());//输出到客户端
}
}
public int executeInsert(String sql){
int num=0;
try{
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/ordering?useUnicode=true&characterEncoding=utf-8","root","sa");
Statement stmt=conn.createStatement( );
num=stmt.executeUpdate(sql);
}
catch(SQLException ex){
System.err.println("执行插入有错??:"+ex.getMessage() );
System.out.print("执行插入有错??:"+ex.getMessage());//输出到客户端
}
CloseDataBase();
return num;
}
// display data
public ResultSet executeQuery(String sql){
rs=null;
try{
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/ordering?useUnicode=true&characterEncoding=utf-8",
"root","sa");
Statement stmt=conn.createStatement( );
rs=stmt.executeQuery(sql);
}
catch(SQLException ex){
System.err.println("执行查询有错??:"+ex.getMessage() );
System.out.print("执行查询有错??:"+ex.getMessage());//输出到客户端
}
return rs;
}
// delete data
public int executeDelete(String sql){
int num=0;
try{
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/ordering?useUnicode=true&characterEncoding=utf-8",
"root","sa");
Statement stmt=conn.createStatement( );
num=stmt.executeUpdate(sql);
}
catch(SQLException ex){
System.err.println("执行删除有错??:"+ex.getMessage() );
System.out.print("执行删除有错??:"+ex.getMessage());//输出到客户端
}
CloseDataBase();
return num;
}
//////////////////
public void CloseDataBase(){
try{
conn.close();
}
catch(Exception end){
System.err.println("执行关闭Connection对象有错误:"+end.getMessage( ) );
System.out.print("执行执行关闭Connection对象有错误:有错??:"+end.getMessage());//输出到客户端
}
}
}
3.2 程序调试
图3.1 界面效果图
图3.2查询成果图
4 总 结
我负责模块是:需求分析和系统分析。查找关于预售系统资料,分析现行火车票预售系统优缺陷,分析新系统顾客群,需求分析,功能目的等。在整个课程设计中一点点摸索整个系统设计思路,构造,直到最后定稿。
课程设计使咱们通过解决一种实际问题,巩固和加深所学课程,提高了咱们分析和编写程序能力,为咱们后来学习提供了较好协助,更为毕业设计和毕业后来从事计算机方面工作奠定了基本。 通过两周学习,咱们对已学专业知识有了比较深刻结识,同步在查找资料或和其她同窗交流过程中,发现了某些问题,因此在设计时候,遇到了诸多困难。在对所学有限知识理解和掌握下,在查找资料以及人们共同努力学习和讨论后终于把课题做完。但由于对专业知识没有很深结识,因此其中难免有某些是错误或者是不合理,但愿教师多指教。
参照文献
[1]张海藩,《软件工程 第(3)版》,清华大学出版社,
[2]刘志成,《JSP程序设计案例教程》,清华大学出版社,
展开阅读全文