基于Jsp和MySQL实现的航空订票管理系统

基于Jsp和MySQL实现的航空订票管理系统 一,需求分析 1,1 市场需求 为了设计开发出真正满足用户需求的软件产品,首先必须知道用户的需求,本章从市场

本文包含相关资料包-----> 点击直达获取<-------

基于Jsp和MySQL实现的航空订票管理系统

一、需求分析

1.1 市场需求

为了设计开发出真正满足用户需求的软件产品,首先必须知道用户的需求。本章从市场、用户和功能等方面入手,争取发觉出用户的真正需求,为设计出实用的软件产品打下基础。

1.1.1 市场调研

世界正在进入一个崭新的网络计算机时代,互联网和无线互联网时代。全球正在进行一场信息技术革命,这场革命迅速的改变着人们的学习方式、娱乐方式和思维方式。目前,我国的航空事业蓬勃发展,但是,随着物质生活水平的提高,人民群众希望得到更高质量、更便捷的服务。与此同时,信息技术的发展,特别是近年来迅速发展的互联网(Internet)为我们带来了一个全新的生活理念。因此,如何使广大旅客朋友能够更加方便、快捷的预定机票进行旅行成为大家关心的问题。

1.1.2 用户分析

随着社会发展的不断进步,民航事业的壮大,人们消费水平的提高,乘坐民航的消费者也越来越多,旅游也逐渐成为普通老百姓的生活组成部分,飞机票预定查询系统在各机票预定网点中的作用也越显重要。目前,我国一些旅行社和酒店的机票预定还停留在人工处理阶段,这已经严重制约了工作效率,在计算机技术高速发展的今天,有必要引入高效的计算机系统,来协助处理机票预定工作。因此,开发一套具有完整的存储,查询,预定,核对机票功能的实时机票预定系统势在必行。机票预定系统是为机场工作人员和客户提供订票退票等与机票相关内容和管理的系统,它具有开放体系结构的、易扩充的、易维护的、具有良好人机界面的优点。它克服了存储乘客信息少,查询效率低下等问题外,更重要的是其安全性,可靠性,实现航空公司的机票销售的自动化。它为企业的决策层提供准确、精细、迅速的机票销售信息,为乘客出行提供方便,便于机场工作人员对机票信息进行管理,提高了机场工作人员对机票管理的工作效率。

1.2 功能需求

1.2.1 主要功能

  • 查询航班信息
  • 查看和修改客户基本信息
  • 订票和退票
  • 管理航班信息

1.2.2 性能

方便快捷查询浏览客户航班信息

1.3 数据需求

  • 飞机信息 :其中包括飞机编号,飞机型
  • 航班信息 :包括航班编号,起始地,目的地,起飞时间,到达时间
  • 用户信息 :包括用户编号,登录名,密码等
  • 订单信息 :包括订单编号,航班号,用户号,订单生成时间

二、数据库设计

2.1 概念设计

本章在需求分析的基础上对航空订票系统的数据库进行设计,设计原则是实体合理、联系精简、范式标准等。

2.1.1 实体要求

为了实现对上述功能,须包括以下数据:

  • 飞机信息 :其中包括飞机编号,飞机型
  • 航班信息 :包括航班编号,起始地,目的地,起飞时间,到达时间
  • 用户信息 :包括用户编号,登录名,密码等
  • 订单信息 :包括订单编号,航班号,用户号,订单生成时间

2.1.2 实体图

飞机实体图如图 2-1 所示。

用户实体图如图 2-2 所示。

机票实体图如图 2-3 所示。

航班实体图如图 2-4 示。

2.2 逻辑设计

该阶段是把数据概念设计的实体及实体间的联系转化成逻辑结构模型,方便数据存储。

2.2.1 实体间联系

实体用户与机票之间存在一个多对多的联系,即一个用户可以预订多张机票,一个飞机也可以搭载多个用户。只有学生预定了相应的航班后才会产生预定记录。

数据库 E-R 图如图 2-5 所示。

2.3 基本表

2.3.1 飞机表(airplane)

  • Airno(飞机编号)
  • airmodel(飞机编号)

2.3.2 用户表(user)

  • userno(用户编号)
  • logname(登录名)
  • password(密码)
  • nickname(昵称)
  • userid(身份证号)
  • phone(电话)

2.3.3 航班表:flight

  • flightno(航班号)
  • airno(飞机编号)
  • start(始发地)
  • aim(目的地)
  • stime(起飞时间)
  • endtime(抵达时间)
  • price(票价)
  • ticket(余票量)

2.3.4 机票表:ticket

  • orderno(预订时间)
  • seat(座位号)
  • userno(用户编号)
  • flightno(航班号)
  • ordertime(订票时间)

三、概要设计

3.1 系统总体设计

经过需求分析,已经明确系统必须要“做什么”,接下来就要确定“怎么做”了。系统总体设计的一个很好的方法就是要按照系统要实现的功能进行模块划分,把联系紧密的功能实现划分到相同模块中,模块之间的划分遵循“高内聚、低耦合”的原则。

3.1.1 系统功能模块划分

按照系统索要完成的功能把学生成绩管理系统划分为登陆模块、学生成绩管理模块、课学生成绩管理模块四大模块。模块划分如图 3-1 所示。

模块编号 模块名称 模块功能描述
M1 注册登录账号模块 新用户的注册登录
M2 查询订购航班模块 查询并订购具体航班
M3 查看订单/退票模块 查看订单或进行退票
M4 查看修改信息模块 个人信息的查看和修改
M5 管理航班信息模块 管理员对航班信息的管理
M6 退出登录 用户或者管理员退出登录

四、详细设计与实现

4.1 模块流程图

4.2 界面效果图及代码

4.2.1 登陆界面及其代码

login.jsp

```c++ <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>

登录 <%@ include file="head.jsp" %>

Copyright © 2018 B16040110王振森

```

loginservlet.java

```c++ package myservlet.control;

import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement;

import javax.servlet.RequestDispatcher; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession;

import mybean.data.Login;

/* * Servlet implementation class loginServlet / @WebServlet("/LoginServlet") public class LoginServlet extends HttpServlet { private static final long serialVersionUID = 1L; public void init(ServletConfig config) throws ServletException{ super.init(config); try { Class.forName("com.mysql.jdbc.Driver"); } catch(Exception e) {} } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub Connection con; Statement sql; request.setCharacterEncoding("utf-8"); HttpSession session=request.getSession(true); String logname=request.getParameter("logname").trim(), password=request.getParameter("password").trim(); session.setAttribute("id", logname); // logname=handleString(logname); // password=handleString(password); String uri="jdbc:mysql://127.0.0.1/flightmanage?"+ "user=root&password=&characterEncoding=utf-8"; boolean boo=(logname.length()>0)&&(password.length()>0); //可以在客户端检测 try { con=DriverManager.getConnection(uri); String condition="select * from user where logname = '"+logname+ "' and password ='"+password+"'"; sql=con.createStatement(); if(boo) { ResultSet rs=sql.executeQuery(condition); boolean m=rs.next(); if(m==true) { session.setAttribute("loginname", logname); //调用登录成功的方法: success(request,response,logname,password); RequestDispatcher dispatcher= request.getRequestDispatcher("index.jsp");//转发 dispatcher.forward(request,response); } else { String backNews="登陆失败!您输入的用户名不存在,或密码不般配"; //调用登录失败的方法: fail(request,response,logname,backNews); response.sendRedirect("Login.jsp"); } } con.close(); } catch(SQLException exp) { String backNews=""+exp; fail(request,response,logname,backNews); response.sendRedirect("Login.jsp"); }

}

public  void  doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException{
    doPost(request,response);
}
public void success(HttpServletRequest request,HttpServletResponse response
                    ,String logname,String password) {
    Login loginBean=null;
    HttpSession session=request.getSession(true);
    try {
        loginBean=(Login)session.getAttribute("loginBean");
        if(loginBean==null) {
            loginBean=new Login();  //创建新的数据模型
            session.setAttribute("loginBean",loginBean);
            loginBean=(Login)session.getAttribute("loginBean");
        }
        String name =loginBean.getLogname();
        if(name.equals(logname)) {
            loginBean.setBackNews(logname+"已经登录了");
            loginBean.setLogname(logname);
            session.setAttribute("loginname", logname);
        }
        else {  //数据模型存储新的登录用户
            loginBean.setBackNews(logname+"登录成功");
            loginBean.setLogname(logname);
            session.setAttribute("loginname", logname);
        }
    }
    catch(Exception ee) {
        loginBean=new Login();
        session.setAttribute("loginBean",loginBean);
        loginBean.setBackNews(logname+"登录成功");
        loginBean.setLogname(logname);
        session.setAttribute("loginname", logname);
    }
}
public void fail(HttpServletRequest request,HttpServletResponse response
                 ,String logname,String backNews) {
    Login loginBean=null;
    HttpSession session=request.getSession(true);
    loginBean=new Login();  //创建新的数据模型
    session.setAttribute("loginBean",loginBean);
    loginBean=(Login)session.getAttribute("loginBean");
    loginBean.setBackNews(backNews);
    loginBean.setLogname(logname);
}

}

```

4.2.2 用户注册界面

Register.jsp

```c++ <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>

注册新用户 <%@ include file="head.jsp" %>

Copyright © 2018 B16040110王振森

```

Registerservlet 代码

```c++ package myservlet.control;

import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; //import java.text.SimpleDateFormat; //import java.util.Date;

import javax.servlet.RequestDispatcher; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession;

import mybean.data.Register;

/* * Servlet implementation class registerServlet / @WebServlet("/RegisterServlet") public class RegisterServlet extends HttpServlet { private static final long serialVersionUID = 1L; public void init(ServletConfig config) throws ServletException { super.init(config); try { Class.forName("com.mysql.jdbc.Driver"); } catch(Exception e) {} }

/**
 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
 */
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    String uri="jdbc:mysql://127.0.0.1/flightmanage?"+
    "user=root&password=&characterEncoding=utf-8";
    request.setCharacterEncoding("utf-8");
    Connection con;
    PreparedStatement sql;
    HttpSession session=request.getSession(true);
    Register userBean=new Register();  //创建的Javabean模型
    session.setAttribute("userBean",userBean);
    String logname=request.getParameter("logname").trim();
    String password=request.getParameter("password").trim();
    String again_password=request.getParameter("again_password").trim();
    String nickname=request.getParameter("nickname").trim();
    String userid=request.getParameter("userid").trim();
    String phone=request.getParameter("phone").trim();
    // Date d = new Date();

//SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss"); //String now = df.format(d); if(logname==null) logname=""; if(password==null) password=""; if(!password.equals(again_password)) { //可以在客户端完成密码一次性判断 userBean.setBackNews("两次密码不同,注册失败,"); RequestDispatcher dispatcher= request.getRequestDispatcher("Register.jsp"); dispatcher.forward(request, response);//转发 return; } boolean isLD=true; for(int i=0; i<logname.length(); i++) { //用户名必须是大小写字母或数字,可在客户端检测 char c=logname.charAt(i); if(!((c<='z'&&c>='a')||(c<='Z'&&c>='A')||(c<='9'&&c>='0'))) isLD=false; } boolean boo=logname.length()>0&&password.length()>0&&isLD //用户名和密码不能为空 String backNews=""; try { con=DriverManager.getConnection(uri); String insertCondition="INSERT INTO user(logname,password,nickname,userid,phone) VALUES (?,?,?,?,?)"; sql=con.prepareStatement(insertCondition); if(boo) { sql.setString(1,logname); sql.setString(2,password); sql.setString(3,nickname); sql.setString(4,userid); sql.setString(5,phone); int m=sql.executeUpdate(); if(m!=0) { backNews="注册成功"; userBean.setBackNews(backNews); userBean.setLogname(logname); session.setAttribute("success", 1); } } else { backNews="信息填写不完整或名字中有非法字符"; userBean.setBackNews(backNews); session.setAttribute("success", 0); } con.close(); } catch(SQLException exp) { backNews="注册失败,该会员名已被使用,请您更换名字"; userBean.setBackNews(backNews); session.setAttribute("success", 0); } RequestDispatcher dispatcher= request.getRequestDispatcher("RegisterResult.jsp"); dispatcher.forward(request, response);//转发

}


protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    doPost(request, response);
}

} ```

4.2.3 查询航班界面

index.jsp

```c++ <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ page import="java.util. "%> <%@ page import="java.sql. "%>

主页 <%@include file="head.jsp" %>

出发城市 目的城市 出发日期 <% int y=2018,m=1,d=1; out.print(" "); out.print("年"); out.print(" "); out.print("月"); out.print(" "); out.print("日"); %>

<% String userno=(String)session.getAttribute("loginname"); out.print(" "); out.print(" "); for(int i=0;i "+columnName[i]+" "); } out.print(" "); } */ int totalRecord = table.length; int pageSize=pageBean.getPageSize(); //每页显示的记录数 int totalPages = pageBean.getTotalPages(); if(totalRecord%pageSize==0) totalPages = totalRecord/pageSize;//总页数 else totalPages = totalRecord/pageSize+1; pageBean.setPageSize(pageSize); pageBean.setTotalPages(totalPages); if(totalPages>=1) { if(pageBean.getCurrentPage()<1) pageBean.setCurrentPage(pageBean.getTotalPages()); if(pageBean.getCurrentPage()>pageBean.getTotalPages()) pageBean.setCurrentPage(1); int index=(pageBean.getCurrentPage()-1)*pageSize; int start=index; //table的currentPage页起始位置 for(int i=index; i "); String button0= "
"; String button=""; for(int j=0; j " + " " + " "; out.print("
"); } out.print(" "); out.print(" "); } } %>
" + "航班号"); out.print(" " + "出发城市"); out.print(" " + "目的城市"); out.print(" " + "出发时间"); out.print(" " + "抵达时间"); out.print(" " + "票价"); out.print(" " + "剩余票数"); String [][] table=pageBean.getTableRecord(); if(table==null) { out.print("没有记录"); return; } String []columnName=pageBean.getColumnName(); /* if(columnName!=null) { out.print("
"+table[i][j]+" " + button + "

每页最多显示 条信息
当前显示第 页,共有 页。
每页显示 条记录
输入页码:

```

Lookflightservlet.java

```c++ package myservlet.control; import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession;

import mybean.data.Insetflight;

  • Servlet implementation class registerServlet @WebServlet("/InsertflightServlet") public class InsertflightServlet extends HttpServlet { private static final long serialVersionUID = 1L; public void init(ServletConfig config) throws ServletException { super.init(config); try { Class.forName("com.mysql.jdbc.Driver"); } catch(Exception e) {} } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String uri="jdbc:mysql://127.0.0.1/flightmanage?"+
        "user=root&password=&characterEncoding=utf-8";
        request.setCharacterEncoding("utf-8");
        Connection con;
        PreparedStatement sql;
        HttpSession session=request.getSession(true);
        Insetflight insert2=new Insetflight();  //创建的Javabean模型
        session.setAttribute("insert2",insert2);
        String flightno=request.getParameter("flightno").trim();
        String airno=request.getParameter("airno").trim();
        String start=request.getParameter("start").trim();
        String aim=request.getParameter("aim").trim();
        String stime=request.getParameter("stime").trim();
        String endtime=request.getParameter("endtime").trim();
        String price=request.getParameter("price").trim();
        String ticket=request.getParameter("ticket").trim();
    
        // Date d = new Date();
    

    //SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss"); //String now = df.format(d);

        if(flightno==null||airno==null) {           //可以在客户端完成密码一次性判断
            insert2.setBackNews("航班编号不能为空,添加失败,");
            RequestDispatcher dispatcher=
            request.getRequestDispatcher("Admin.jsp");
            dispatcher.forward(request, response);//转发
            return;
        }
        try {
    
            con=DriverManager.getConnection(uri);
            String insertCondition="INSERT INTO flight(flightno,airno,start,aim,stime,endtime,price,ticket) VALUES (?,?,?,?,?,?,?,?)";
            sql=con.prepareStatement(insertCondition);
            int a=Integer.parseInt(airno);
            int b=Integer.parseInt(ticket);
            sql.setString(1,flightno);
            sql.setInt(2,a);
            sql.setString(3,start);
            sql.setString(4,aim);
            sql.setString(5,stime);
            sql.setString(6,endtime);
            sql.setString(7,price);
            sql.setInt(8,b);
            String backNews="";
            int m=sql.executeUpdate();
            System.out.println(sql);
            if(m!=0) {
                backNews="添加成功";
                insert2.setBackNews(backNews);
            }
            con.close();
        }
        catch(SQLException exp) {
            String backNews="添加失败";
            insert2.setBackNews(backNews);
            System.out.println(exp);
        }
        RequestDispatcher dispatcher=
            request.getRequestDispatcher("Admin.jsp");
        dispatcher.forward(request, response);//转发
    
    }
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doPost(request, response);
    }
    

```

4.2.4 订票结果页面

Orderresultjsp

```c++ <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>

订票结果 <%@include file="head.jsp" %>

```

4.2.5 查看订单界面

LookOrder.jsp

```c++ <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ page import="java.util. "%> <%@ page import="java.sql. "%>

我的订单 <%@include file="head.jsp" %>

Connection con; Statement sql; ResultSet rs; //String bname=request.getParameter("bname"); try { Class.forName("com.mysql.jdbc.Driver"); /* 下载JDBC数据库驱动程序, 把驱动包放到项目的 WEB-INF/lib 下面 */ } catch (Exception e) { out.println("缺少数据库驱动程序 "); } try { String uri="jdbc:mysql://localhost/flightmanage?"+ "user=root&password=&characterEncoding=utf-8"; con = DriverManager.getConnection(uri); //也可以写成con=DriverManager.getConnection(uri+"?user=root&password="); sql = con.createStatement(); String logname=(String)session.getAttribute("loginname"); rs=sql.executeQuery("SELECT * FROM ticket where logname='"+logname+"'"); out.print( " "); out.print(" "); out.print(" "); while (rs.next()) { out.print(" "); out.print(" "); out.print(" "); out.print(" "); out.print(" "); out.print("<td
" + "订单号"); out.print(" " + "座位号"); out.print(" " + "用户名"); out.print(" " + "航班号"); out.print(" " + "下单时间"); String button0= "
"; // + " " // + "
"; String button=""; out.print("
" + rs.getString(1) + " " + rs.getString(2) + " " + rs.getString(3) + " " + rs.getString(4) + "

参考文献

  • 电子商务平台航空订票系统的设计与实现(西安电子科技大学·王璐)
  • .NET技术在航空电子商务系统中的应用研究与实现(西北工业大学·田新锋)
  • 沈阳超高压局通信设备运行参数管理信息系统(大连理工大学·杨楠)
  • 基于Web的卷烟订单管理系统的设计与实现(南昌大学·雷登科)
  • 旅游管理系统的设计与实现(东北大学·王宇慧)
  • 基于SSH框架的飞机票分销管理系统设计与实现(安徽大学·米潜)
  • 基于云计算模式的社会服务管理信息化平台项目设计与建设(吉林大学·杨刚)
  • 基于云计算模式的社会服务管理信息化平台项目设计与建设(吉林大学·杨刚)
  • 基于云计算模式的社会服务管理信息化平台项目设计与建设(吉林大学·杨刚)
  • 旅游景点网上售票系统的设计与实现(电子科技大学·庞勃)
  • 基于JAVA WEB技术旅游服务网站系统设计与实现(电子科技大学·张岚)
  • 某机票订票系统的设计与实现(北京工业大学·周子杰)
  • 基于SSH的航空运价管理系统的设计与实现(上海交通大学·代川)
  • 基于Web的航空票务管理系统的设计与实现(西安电子科技大学·韩璐)
  • 网上航空订票系统的设计与实现(电子科技大学·朱大鹏)

本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:毕设工厂 ,原文地址:https://bishedaima.com/yuanma/35409.html

相关推荐

发表回复

登录后才能评论