软件综合课程设计报告
题目名称:航空公司管理信息系统
班 级:
学生学号:
学生姓名:
总成绩:优 良 中 及格 不及格
20##年12月 30日
1、前言
问题描述:一个正常营运的航空公司需要管理所拥有的飞机、航线的设置、客户的信息等,更重要的还要提供票务管理。面对各种不同种类的信息,需要合理的数据库结构来保存数据信息以及有效的程序结构支持各种数据操作的执行。本次课程设计我们将以一个航空公司管理信息系统为例子,来建立一个航空公司管理信息系统。
开发工具:Myeclipse8.5,Mysql,Tomcat7.0
运行环境:Windows XP系统,Windows7系统
开发语言:Jsp,Java
2、需求分析
系统开发的总体任务是实现各种信息的系统化、规范化和自动化。
系统功能分析是在系统开发的总体任务的基础上完成。本例子中的航空公司管理信息系统需要完成功能主要有:
l 舱位信息的输入和修改,包括舱位等级编号、舱位等级名称、提供的各 种服务类别,以及备注信息等。
l 客机信息的输入、修改和查询,包括客机编号、客机型号、购买时间、服役 时间、经济舱座位数量、公务舱座位数量、头等舱座位数量以及备注信息等。
l 航线信息的输入、修改和查询,包括航线编号、出发城市、到达城市、航班 日期、出发时间、到达时间、客机编号、经济舱价格、公务舱价格、头等舱价格和备注信息等。
l 客户等级信息的输入、修改,包括客户等级编号、客户等级名称、折扣比例和备注信息等。
l 客户信息的输入、修改和查询,包括客户编号、客户姓名、客户性别、身份证号码、联系电话、客户类型和备注信息等。
l 订票信息的输入、查询和修改,包括订票编号、客户编号、客户姓名、客户类型、折扣比例、航线编号、出发城市、到达城市、出发时间、舱位类型、票价、结算金额和备注信息等。
3、系统分析与设计
3.1.1 系统功能分析
系统开发的总体任务是实现各种信息的系统化、规范化和自动化。
系统功能分析是在系统开发的总体任务的基础上完成。本例子中的航空公司管理信息系统需要完成功能主要有:
l 舱位信息的输入和修改,包括舱位等级编号、舱位等级名称、提供的各种服务类别,以及备注信息等。
l 客机信息的输入、修改和查询,包括客机编号、客机型号、购买时间、服役时间、经济舱座位数量、公务舱座位数量、头等舱座位数量以及备注信息等。
l 航线信息的输入、修改和查询,包括航线编号、出发城市、到达城市、航班日期、出发时间、到达时间、客机编号、经济舱价格、公务舱价格、头等舱价格和备注信息等。
l 客户等级信息的输入、修改,包括客户等级编号、客户等级名称、折扣比例和备注信息等。
l 客户信息的输入、修改和查询,包括客户编号、客户姓名、客户性别、身份证号码、联系电话、客户类型和备注信息等。
l 订票信息的输入、查询和修改,包括订票编号、客户编号、客户姓名、客户类型、折扣比例、航线编号、出发城市、到达城市、出发时间、舱位类型、票价、结算金额和备注信息等。
3.1.2 系统功能模块设计
对上述各项功能进行集中、分块,按照结构化程序设计的要求,得到如图1所示的系统功能模块图。
图1 系统功能模块图
3.2 数据库设计
数据库在一个信息管理系统中占有非常重要的地位,数据库结构设计的好坏将直接对应用系统的效率以及实现的效果产生影响。合理的数据库结构设计可以提高数据存储的效率,保证数据的完整和一致。
设计数据库系统时应该首先充分了解用户各个方面的需求,包括现有的以及将来可能增加的需求。数据库设计一般包括如下几个步骤:
l 数据库需要分析。
l 数据库概念结构设计。
l 数据库逻辑结构设计。
3.2.1 数据库需求分析
用户的需求具体体现在各种信息的提供、保存、更新和查询,这就要求数据库结构能充分满足各种信息的输出和输入。收集基本数据、数据结构以及数据处理的流程,组成一份详尽的数据字典,为后面的具体设计打下基础。
仔细分析调查有关航空公司管理信息需求的基础上,将得到如图2所示的本系统所处理的数据流程。
图2 航空公司管理信息系统数据流程图
针对一般航空公司管理信息系统的需求,通过对航空公司管理工作过程的内容和数据流程分析,设计如下面所示的数据项和数据结构:
l 舱位等级信息,包括的数据项有:舱位等级编号、舱位等级名称、是否有礼品、是否有报纸、是否有饮料、是否有午餐、是否有电影、是否可以改签、是否可以退票、是否可以打折、备注信息等。
l 客机信息,包括的数据项有:客机编号、客机型号、购买时间、服役时间、经济舱座位数量、公务舱座位数量、头等舱座位数量、备注信息等。
l 航线信息,包括的数据项有:航线编号、出发城市、到达城市、航班日期、出发时间、到达时间、客机编号、经济舱价格、公务舱价格、头等舱价格、备注信息等。
l 客户类型信息,包括的数据项有:客户类型编号、客户类型名称、折扣比例、备注信息等。
l 客户信息,包括的数据项有:客户编号、客户姓名、客户性别、身份证号码、联系电话、客户类型、备注信息等。
l 订票信息,包括的数据项有:订票编号、顾客编号、顾客姓名、顾客类型、折扣比例、航线编号、出发城市、到达城市、舱位类型、机票价格、结算金额、备注信息等。
有了上面的数据结构、数据项和数据流程,我们就能进行下面的数据库设计。
3.2.2 数据库概念结构设计
得到上面的数据项和数据结构以后,就可以设计出能够满足用户需求的各种实体,以及它们之间的关系,为后面的逻辑结构设计打下基础。这些实体包含各种具体信息,通过相互之间的作用形成数据的流动。
本实例根据上面的设计规划出的实体有:舱位等级信息实体、客机信息实体、航线信息实体、客户类型信息实体、客户信息实体、订票信息实体。各个实体具体的描述E-R图如下。
舱位等级信息实体E-R图如图3所示。
图3 舱位等级信息实体E-R图
客机信息实体E-R图如图4所示。
图4 客机信息实体E-R图
航线信息实体E-R图如图5所示。
图5 航线信息实体E-R图
客户类型信息实体E-R图如图6所示。
图6 客户类型信息实体E-R图
客户信息实体E-R图如图7所示。
图7 客户信息实体E-R图
订票信息实体E-R图如图8所示。
图8 订票信息实体E-R图
实体之间关系的E-R图如图9所示。
图9 实体之间关系的E-R图
3.2.3 数据库逻辑结构设计
现在需要将上面的数据库概念结构转化为SQL Server 2005数据库(也可以是Oracle数据库)系统所支持的实际数据模型,也就是数据库的逻辑结构。
航空公司管理信息系统数据库中各个表格的设计结果如下面表格所示。每个表格表示在数据库中的一个表。表1为供应商信息表。
表1 serviceInfo 舱位等级信息表
表2为顾客信息表格。
表2 planeInfo客机信息表格
表3为航线信息表。
表3 airlineInfo航线信息表
表4为客户类型信息表格。
表4 customerType 客户类型信息表
续表
表5为客户信息表格。
表5 customerInfo 客户信息表
表6为订票信息表格。
表6 ticketInfo 订票信息表
5、系统实现
系统效果图:
主界面图
子窗口就不一一展示了,这里列取了一个窗口,其他的都大同小异。
子窗口图
6、部分原代码
Bean层:
AirlineInfo源代码:
package com.am.aviation.bean;
public class AirlineInfo {
private String airlineNO; //航线编号
private String departCity; //出发城市
private String arrivalCity; //到达城市
private String departDate; //航班日期
private String departTime; //出发时间
private String arrivalTime; //到达时间
private String planeNO; //客机编号
private float commonPrice; //经济舱价格
private float commercialPrice; //公务舱价格
private float firstPrice; //头等舱价格
private String airlineMemo; //备注信息
public String getAirlineNO() {
return airlineNO;
}
public void setAirlineNO(String airlineNO) {
this.airlineNO = airlineNO;
}
public String getDepartCity() {
return departCity;
}
public void setDepartCity(String departCity) {
this.departCity = departCity;
}
public String getArrivalCity() {
return arrivalCity;
}
public void setArrivalCity(String arrivalCity) {
this.arrivalCity = arrivalCity;
}
public String getDepartDate() {
return departDate;
}
public void setDepartDate(String departDate) {
this.departDate = departDate;
}
public String getDepartTime() {
return departTime;
}
public void setDepartTime(String departTime) {
this.departTime = departTime;
}
public String getArrivalTime() {
return arrivalTime;
}
public void setArrivalTime(String arrivalTime) {
this.arrivalTime = arrivalTime;
}
public String getPlaneNO() {
return planeNO;
}
public void setPlaneNO(String planeNO) {
this.planeNO = planeNO;
}
public float getCommonPrice() {
return commonPrice;
}
public void setCommonPrice(float commonPrice) {
this.commonPrice = commonPrice;
}
public float getCommercialPrice() {
return commercialPrice;
}
public void setCommercialPrice(float commercialPrice) {
this.commercialPrice = commercialPrice;
}
public float getFirstPrice() {
return firstPrice;
}
public void setFirstPrice(float firstPrice) {
this.firstPrice = firstPrice;
}
public String getAirlineMemo() {
return airlineMemo;
}
public void setAirlineMemo(String airlineMemo) {
this.airlineMemo = airlineMemo;
}
}
Dao层:
UserInfoDAOImpl代码
package com.am.aviation.dao.impl;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import com.am.aviation.bean.UserInfo;
import com.am.aviation.dao.UserInfoDAO;
import com.am.aviation.util.db.DBConn;
public class UserInfoDAOImpl implements UserInfoDAO {
Connection conn;
PreparedStatement pstmt;
Statement stmt ;
ResultSet rs;
public UserInfo exists(UserInfo user) {
UserInfo rtuser=null;
conn=DBConn.getConnection();
if(conn==null){
return rtuser;
}
String sql="select * from userinfo where username=?";
try {
pstmt=conn.prepareStatement(sql);
pstmt.setString(1, user.getUsername());
rs=pstmt.executeQuery();
if(rs.next()){
if(rs.getString("userpassword")!=null && user.getUserpassword()!=null &&rs.getString("userpassword").equals(user.getUserpassword())){
rtuser=new UserInfo();
rtuser.setId(rs.getInt("id"));
rtuser.setUsername(rs.getString("username"));
rtuser.setUserpassword(rs.getString("userpassword"));
rtuser.setStatus(rs.getInt("status"));
}
else
rtuser=null;
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
this.close();
}
return rtuser;
}
public boolean updateUser(UserInfo user) {
boolean isSuccess=false;
conn=DBConn.getConnection();
if(conn==null){
return isSuccess;
}
String sql="update userinfo set username=?,userpassword=?,status=? where id=?";
try {
pstmt=conn.prepareStatement(sql);
pstmt.setString(1, user.getUsername());
pstmt.setString(2, user.getUserpassword());
pstmt.setInt(3, user.getStatus());
pstmt.setInt(4, user.getId());
pstmt.executeUpdate();
isSuccess=true;
} catch (SQLException e) {
e.printStackTrace();
}finally{
this.close();
}
return isSuccess;
}
public void close(){
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(pstmt!=null){
try {
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
Select层:
UserChangeServlet代码
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.am.aviation.bean.UserInfo;
import com.am.aviation.dao.UserInfoDAO;
import com.am.aviation.dao.impl.UserInfoDAOImpl;
public class UserChangeServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String username=request.getParameter("username");
String userpassword=request.getParameter("userpassword");
HttpSession session=request.getSession();
UserInfo user=(UserInfo)session.getAttribute("userinfo");
user.setUsername(username);
user.setUserpassword(userpassword);
UserInfoDAO dao=new UserInfoDAOImpl();
dao.updateUser(user);
request.getRequestDispatcher("/manager/table.jsp").forward(request, response);
}
}
代码比较多,这里不一一列举了。
6、总结
本项目客户要求的功能都已经实现,通过做这个项目体会到了更深层次的MVC框架的结构,使自己对整个的流程有了深刻的理解。项目的需求和功能分析过程是最重要的部分,没有好的分析过程和结果不能够得出好的程序方案,因为时间关系,界面做的不是很美观,有点简约,以后会改进的。本次项目很好的锻炼了我自己,也使我有了不会就问的习惯。其实任何看起来很难的东西,都可以一点点的去攻克它。团队的力量是伟大的!
参考文献:
《Java Web整合开发》刘京华著 清华大学出版社。