火车票预订软件工程课程设计报告书







. .




系: 计算机科学与工程学院 专业班级: 计算机科学与技术 号: 学生: 指导教师:


.



出行一直是人们日常生活中不可或缺的一部分。在科技发达的今天,人们希望足不出户就可以方便、快捷地查询到出行所需的信息,预订出行所需的车票,为自己的行程进行合理的安排。开发一套火车车次查询系统既能方便广大乘客出行,节省时间,提供便利,省去不必要的麻烦,也能为车站工作人员带来工作便利,提高工作效率,节省人力资源。
本软件工程系统利用JSP实现了“火车票查询订购系统”功能:火车车次的查询功能和火车车票的预订功能等。本文对系统的需求分析、总体设计及详细设计进行了详细地阐述,主要实现了以下功能:用户注册、用户登录、车次查询、车票预订、车票退订、车次信息管理、修改密码、订票管理等功能。最终实现完成了该系统。


关键词:火车票预订;查询车次;预订车票;软件工程


. .
.

1 需求分析 ..................................................... 1 2 课题总体设计 ................................................. 2 2.1 模块描述 ................................................ 2 2.2 结构设计 ................................................ 4 3 课题详细设计 ................................................. 7 3.1 程序代码 ................................................ 7 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(flagsendBean(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(flagdoError(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=".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)版》,清华大学,2008 [2]志成,JSP程序设计案例教程》,清华大学,2008

. .
.
《火车票预订软件工程课程设计报告书.doc》
将本文的Word文档下载,方便收藏和打印
推荐:
下载文档
热门推荐
相关推荐