基于JSP和Sql Server实现的飞机票售票管理系统

攻城狮0829

发布日期: 2020-08-04 12:31:18 浏览量: 287
评分:
star star star star star star star star star star_border
*转载请注明来自write-bug.com

1.系统背景

随着现代生活水平提高,人类逐渐对精神文化享受重视,追求不同的生活,而其中旅游成为大众的喜爱,于是到年到节的时候需要一种交通 工具来达到目的地,这也成为这系统开发的动力,系统的进步也是应客户的需求而生,为了能够在更早的出售机票,不影响客户的行程,机票售票系统也做出相应的决策,那就是通过无人管理机票预定,然后在快到期的那天,管理员可以通过订单管理来处理客户订单。所以管理员的模块也极其重要,本系统通过后台界面为管理员和数据库与服务器进行交互提供环境。客户只要通过浏览器来进行订票,订票的数据存储在数据里面,然后管理员通过打开后台浏览器来进行信息汇总,然后下单确定发票,整一个信息传递过程是订票信息→订票查询→核实机票。

2.功能简介

  • 顾客上网通过浏览器来登入系统首页,系统提供客户注册、机票查询和机票预定功能,当然也包括已预定机票取消

  • 用户通过窗口选取机票,订单信息保存在数据库上,等待管理员审核

  • 管理员处理用户信息,确定用户购买

  • 用户可以根据己购买的字眼可以到代理取票,也可以再登机那天取票

  • 管理员随时更新航班信息

  • 客户可以随时登入系统获取航班信息

3.系统分析

系统通过数据库的连接,通过接受客户数据来响应WEB服务器处理,来进行数据管理。整个分为两大部分,第一部分就是客户模块,第二部分就是管理员模块。客户模块包括客户注册、查询、购票、换票、取消机票。管理员模块包括自动处理客户订单、管理员处理订单、机票班次更新、管理系统用户。通过计算机网络来贯穿两大模块,从而实现客户和服务器的交互。

3.1 功能需求

在客户端系统的功能实现上,可以分为以下几个部分:

  • 用户通过支持web容器的浏览器来进行信息的输入,客户端根据用户输入将数据流输入和数据流的统计。这部分的要求是一个人性化的界面,让用户通过浏览器来进行页面访问。所谓人性化界面包括,浏览功能,预定功能,多种进行人机交互按钮,比如html页面信息和提交、重置等

  • 把用户信息存储到客户端系统中,经过系统自动审核后存储到数据库当中,已备以后登录查询

  • 服务器通过数据库出来从客户端传输的信息加以确定,然后返回给客户端,客户端通过信息来提醒用户,用户可以根据信息到柜台拿票

在服务器端系统的功能实现上,可以分为以下几个部分:

  • 服务器通过网络接受用户从客户端输入所需要的信息,然后根据用户所需要的信息来判断是否通过WEB容器进行管理,如果纯粹是看票的话,直接调用数据库已经存储好的机票信息通过静态服务反馈用户,如果有购票需要数据通过WEB服务器来进行管理

  • 在服务器段提供了航班输入功能,管理员根据现实情况来对航班进行管理

  • 把航班信息通过网络来传递到客户端来与用户进行交互

3.2 数据流图

根据数据流图的特点可以从大到小逐渐深入系统处理过程,图3-1是飞机票售票管理系统的最顶层的数据流图。

从顶层数据流图,可以得到整个数据流图过程,如图3-2,图3-3。

系统数据流图

订票数据流图

3.3 业务流图

飞机票售票管理系统的业务流图如图3-4。

3.4 数据库表说明

在一个B/S系统中数据无疑是非常重要的,数据的安全性、稳定性、可恢复性对使用者起着极其重要的作用。选择一个健全稳定的数据库无疑也是系统实现的首要步骤,本系统选用的是SQL 2005,它能提供大型系统所需的数据库服务。下面将介绍系统的数据库结构。本系统的最主要的功能在与数据库的分配,对不同的用户采用不同的数据库,和不同的查询方式。

用户表common_user

  1. CREATE TABLE IF NOT EXISTS `common_user` (
  2. `user_name` varchar(16) NOT NULL,
  3. `user_pwd` varchar(32) NOT NULL,
  4. `avatar_img` varchar(50) DEFAULT NULL,
  5. PRIMARY KEY (`user_name`)
  6. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='用户表' AUTO_INCREMENT=1 ;

管理员用户表admin_user

  1. CREATE TABLE IF NOT EXISTS `admin_user` (
  2. `user` varchar(16) NOT NULL COMMENT '管理员用户名',
  3. `pwd` varchar(32) NOT NULL COMMENT '管理员密码',
  4. PRIMARY KEY (`user`)
  5. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='管理员用户表' AUTO_INCREMENT=1 ;

航班信息表flight

  1. CREATE TABLE IF NOT EXISTS `flight` (
  2. `f_n` varchar(6) NOT NULL COMMENT '航班号',
  3. `f_s_p` varchar(4) NOT NULL COMMENT '航班起点',
  4. `f_e_p` varchar(4) NOT NULL COMMENT '航班终点',
  5. `f_s_a` varchar(12) NOT NULL COMMENT '航班起飞机场',
  6. `f_a_a` varchar(12) NOT NULL COMMENT '航班到达机场',
  7. `f_d_t` varchar(5) NOT NULL COMMENT '起飞(departure)时间',
  8. `f_a_t` varchar(5) NOT NULL COMMENT '到达时间',
  9. `f_f_c_p` int(11) NOT NULL COMMENT '头等舱价格First class price',
  10. `f_s_c_p` int(11) NOT NULL COMMENT '商务舱价格',
  11. `f_t_c_p` int(11) NOT NULL COMMENT '经济舱价格',
  12. PRIMARY KEY (`f_n`),
  13. UNIQUE KEY `f_n` (`f_n`)
  14. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='航班信息' AUTO_INCREMENT=1 ;

航班订单信息表t_order

  1. CREATE TABLE IF NOT EXISTS `t_order` (
  2. `id` int(12) NOT NULL AUTO_INCREMENT,
  3. `order_user` varchar(16) NOT NULL COMMENT '下单用户',
  4. `f_n` varchar(6) NOT NULL COMMENT '航班号',
  5. `p_name` varchar(6) NOT NULL COMMENT '乘客姓名',
  6. `date` varchar(12) NOT NULL COMMENT '订单日期',
  7. `grade` varchar(3) NOT NULL COMMENT '舱别',
  8. `p_id` varchar(18) NOT NULL COMMENT '乘客身份证号',
  9. `contact` varchar(6) NOT NULL COMMENT '联系人',
  10. `c_p` varchar(11) NOT NULL COMMENT '联系人电话',
  11. PRIMARY KEY (`id`)
  12. ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci AUTO_INCREMENT=8 ;

用户留言信息表user_message

  1. CREATE TABLE IF NOT EXISTS `user_message` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `time` varchar(10) NOT NULL,
  4. `user_name` varchar(32) NOT NULL,
  5. `message_content` text NOT NULL,
  6. PRIMARY KEY (`id`)
  7. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=30 ;

4.程序结构功能结构

4.1 用户注册

系统对于用户来说只能查询,不能诺命购票,因为不提供真实身份,无法判断用户,购票也极为麻烦,所以只能依靠登录来进行用户识别和购票。

用户注册的关键代码,主要利用request这个接口的getParameter0方法来接受用户所输入的数据,通过getRemoteAddr()方法来获取用户的ID,每一个以用户都只有唯一—个ID标识,然后通过flag来判断输入是否符合,为真的话就通过request的setAtribute方法来保存信息。

  1. 1. public void doPost(HttpServletRequest req, HttpServletResponse resp)
  2. 2. throws ServletException, IOException {
  3. 3. String log_name = req.getParameter("log_name");
  4. 4. String log_pwd = req.getParameter("log_pwd");
  5. 5. String reg_name = req.getParameter("reg_name");
  6. 6. String reg_pwd1 = req.getParameter("reg_pwd1");
  7. 7. String reg_pwd2 = req.getParameter("reg_pwd2");
  8. 8.
  9. 9. if(log_name!=null&&log_pwd!=null_name==null_pwd1==null_pwd2==null) {
  10. 10. //调用登录方法处理登录
  11. 11. go_login(log_name, log_pwd, req, resp);
  12. 12.
  13. 13. }
  14. 14. else if(log_name==null&&log_pwd==null_name!=null_pwd1!=null_pwd2!=null_pwd1.equals(reg_pwd2)) {
  15. 15. //调用注册方法处理注册
  16. 16. go_reg(reg_name, reg_pwd1, req, resp);
  17. 17.
  18. 18. }//为什么不再写一个判断注册时reg_pwd1和reg_pwd2是否相等的语句呢?因为,前端页面中已经用js去做判断了,
  19. 19. //如果用户两次输入的密码不一致根本不可能提交数据到此servlet,除非用户限制js或者修改了js,也就是做了非法操作
  20. 20. //因此,直接输出提示非法操作的提示信息即可
  21. 21. else {
  22. 22.
  23. 23. resp.setContentType("text/html;charset=utf-8");
  24. 24. PrintWriter out = resp.getWriter();
  25. 25. out.println("请不要尝试非法操作");
  26. 26. /*****测试数据
  27. 27. out.println("登录账号:"+log_name+"\n登录密码:"+log_pwd+"\n注册账号:"
  28. 28. +reg_name+"\n注册密码1:"+reg_pwd1+"\n注册密码2:"+reg_pwd2);
  29. 29. out.print("---log_name==null:"+(log_name==null));
  30. 30. out.print("---log_pwd==null:"+(log_pwd==null));
  31. 31. out.print("---reg_name==null:"+(reg_name==null));
  32. 32. out.print("---reg_pwd1==null:"+(reg_pwd1==null));
  33. 33. out.print("---reg_pwd2==null:"+(reg_pwd2==null));
  34. 34. */
  35. 35.
  36. 36. resp.setHeader("refresh", "2;url=index/login_reg.jsp");
  37. 37. //除了登录和注册操作,提交其它数据均为非法操作,不做处理,仅给出提示非法信息
  38. 38. }
  39. 39. }

4.2 机票查询

在该系统当中,因为运行外面的旅客访问系统并查询系统,以供是否注册为本系统用户,所以两者都可以查询机票航班,旅客通过session来访问,但访问数据随着页面刷新而消除。

这部的关键步骤也是调用request这个接口的获取信息方法,同样也是调用geParameter()方法就可以把信息获取出来。同时用SQL语言来查询表的信息,附值给定义的属性,可以通过方法来调用数据库。

  1. 1. protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  2. 2. req.setCharacterEncoding("utf-8");
  3. 3. //HttpSession session = req.getSession();
  4. 4. String url=null;
  5. 5. /*
  6. 6. * if(session.getAttribute("url")!=null) {
  7. 7. * url=session.getAttribute("url").toString(); }else {
  8. 8. */
  9. 9. url="default/index.jsp";
  10. 10.
  11. 11. String departure=null;
  12. 12. String destination=null;
  13. 13. departure=req.getParameter("departure");
  14. 14. destination=req.getParameter("destination");
  15. 15. String sql=null;
  16. 16. if(departure==""&&destination=="") {
  17. 17. //如果始发地和目的地都为空则跳转回原页面
  18. 18. resp.sendRedirect(url);
  19. 19. }else if (departure!=""&&destination=="") {
  20. 20. sql="select * from flight where f_s_p='"+departure+"'";
  21. 21. }else if (departure==""&&destination!="") {
  22. 22. sql="select * from flight where f_e_p='"+destination+"'";
  23. 23. }else if (departure!=""&&destination!="") {
  24. 24. sql="select * from flight where f_s_p='"+departure+"' and f_e_p='"+destination+"'";
  25. 25. }
  26. 26. if(departure==""&&destination=="") {
  27. 27. //如果都为空,执行不到这一步,所以就不用做处理了,否则,执行else
  28. 28. }else {
  29. 29. db_conn conn=new db_conn();
  30. 30. //System.out.println(sql);
  31. 31. ArrayList<flight> flightlist = new ArrayList<flight>();
  32. 32. flight flight_info=new flight();
  33. 33.
  34. 34. ResultSet res=conn.executeQuery(sql);
  35. 35. try {
  36. 36. while (res.next()) {
  37. 37. flight_info.setF_n(res.getString(1));
  38. 38. flight_info.setF_s_a(res.getString(4));
  39. 39. flight_info.setF_a_a(res.getString(5));
  40. 40. flight_info.setF_d_t(res.getString(6));
  41. 41. flight_info.setF_a_t(res.getString(7));
  42. 42. flight_info.setF_f_c_p(res.getString(8));
  43. 43. flight_info.setF_s_c_p(res.getString(9));
  44. 44. flight_info.setF_t_c_p(res.getString(10));
  45. 45. flightlist.add(flight_info);
  46. 46. }
  47. 47. req.setAttribute("flightlist", flightlist);
  48. 48. } catch (SQLException e) {
  49. 49. System.out.println("错误信息:"+e);
  50. 50. }finally {
  51. 51. conn.closeDB();
  52. 52. }
  53. 53. //resp.sendRedirect("default/search.jsp");
  54. 54. req.getRequestDispatcher("default/search.jsp").forward(req, resp);
  55. 55. }
  56. 56. }

4.3 机票预定

为了整个流程更为简单,易用,该系统就只设定只用验证的用户才可以购买飞机票,同时用户可以通过登录查询自己的航班。

下面代码是预定机票的代码,通过判断机票剩余数和预定机票的关系,确定用户购买成功,成功的话,设置成功信息,失败的设只失败提示信息。

  1. 1. protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  2. 2. //开始获取各种参数
  3. 3. req.setCharacterEncoding("utf-8");
  4. 4. String flight_id=req.getParameter("flight_id");
  5. 5. String start_place=req.getParameter("start_place");
  6. 6. String end_place=req.getParameter("end_place");
  7. 7. String start_airport=req.getParameter("start_airport");
  8. 8. String end_airport=req.getParameter("end_airport");
  9. 9. String take_off_time=req.getParameter("take_off_time");
  10. 10. String landing_time=req.getParameter("landing_time");
  11. 11. String first_class_price_str=req.getParameter("first_class_price");
  12. 12. Integer first_class_price=Integer.parseInt(first_class_price_str);
  13. 13. String business_class_price_str=req.getParameter("business_class_price");
  14. 14. Integer business_class_price=Integer.parseInt(business_class_price_str);
  15. 15. String economy_class_price_str=req.getParameter("economy_class_price");
  16. 16. Integer economy_class_price=Integer.parseInt(economy_class_price_str);
  17. 17. //参数获取结束
  18. 18. db_conn conn=new db_conn();
  19. 19. String sql="select * from flight where f_n='"+flight_id+"'";
  20. 20. ResultSet res=conn.executeQuery(sql);
  21. 21. try {
  22. 22. if(res.next()) {
  23. 23. resp.setContentType("text/html;charset=utf-8");
  24. 24. PrintWriter out=resp.getWriter();
  25. 25. out.println("您输入的航班号重复了,请选择其他航班号添加,5s后返回");
  26. 26. resp.setHeader("refresh", "5;url=admin/flight_add.jsp");
  27. 27. }else {
  28. 28. sql="insert into flight values('"+flight_id+"','"+start_place+"','"+end_place+"','"+start_airport+"','"+end_airport+"','"+take_off_time+"','"+landing_time+"','"+first_class_price+"','"+business_class_price+"','"+economy_class_price+"')";
  29. 29. //Integer res=
  30. 30. conn.executeInsert(sql);
  31. 31. //System.out.println(res);
  32. 32. //System.out.println(sql);
  33. 33. resp.sendRedirect("admin/flight_list.jsp");
  34. 34. }
  35. 35. } catch (SQLException e) {
  36. 36. // TODO Auto-generated catch block
  37. 37. e.printStackTrace();
  38. 38. }
  39. 39. }

4.4 订单管理

订单管理模块主要是对用户订票进行管理,管理员通过登录进行访问系统后台页面,然后选取订单管理模块,对客户进行处理。通过数据库对用户订单信息组进行管理,通过定义ArrayList()数据组来获得订票所以信息。

  1. 1. protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  2. 2. req.setCharacterEncoding("utf-8");
  3. 3. HttpSession session = req.getSession();
  4. 4. if(session.getAttribute("user_id")!=null) {
  5. 5. String user_id=session.getAttribute("user_id").toString();
  6. 6. String f_i=req.getParameter("flight_id");
  7. 7. String passenger_name=req.getParameter("passenger_name");
  8. 8. String date=req.getParameter("date");
  9. 9. String grade=req.getParameter("grade");
  10. 10. String passenger_id=req.getParameter("passenger_id");
  11. 11. String contact=req.getParameter("contact");
  12. 12. String contact_phone=req.getParameter("contact_phone");
  13. 13.
  14. 14.
  15. 15. /*
  16. 16. * System.out.println(f_i); System.out.println(passenger_name);
  17. 17. * System.out.println(date); System.out.println(grade);
  18. 18. * System.out.println(passenger_id); System.out.println(contact);
  19. 19. * System.out.println(contact_phone);
  20. 20. */
  21. 21.
  22. 22. if(f_i!=""&&passenger_name!=""&&date!=""&&grade!=""&&passenger_id!=""&&contact!=""&&contact_phone!="") {
  23. 23. db_conn conn=new db_conn();
  24. 24. String sql="insert into t_order (f_n,order_user,p_name,date,grade,p_id,contact,c_p) values('"+f_i+"','"+user_id+"','"+passenger_name+"','"+date+"','"+grade+"','"+passenger_id+"','"+contact+"','"+contact_phone+"')";
  25. 25. Integer res=conn.executeInsert(sql);
  26. 26. System.out.println(res);
  27. 27. if(res.equals(1)) {
  28. 28. resp.sendRedirect("default/order_list.jsp");
  29. 29. }else {
  30. 30. resp.sendRedirect("default/order.jsp");
  31. 31. }
  32. 32.
  33. 33. }else {
  34. 34. resp.sendRedirect("default/order.jsp");
  35. 35. }
  36. 36.
  37. 37. }else {
  38. 38. resp.sendRedirect("default/order.jsp");
  39. 39. }
  40. 40.
  41. 41. }

5.操作方法

用户访问首页

用户进行登录

用户进行注册

登录或注册成功,进入用户个人首页

用户修改个人资料

用户订购航班

用户查询航班

用户查看航班订单

用户查看留言

管理员登录界面

管理员添加航班信息

管理员查看航班列表信息

管理员查看航班订单

管理员查看用户列表信息

管理员查看留言列表

6.测试结果

用户能成功订购航班,并且查看订单

管理员查看航班并成功添加航班

7.心得体会

通过JavaEE的综合课程设计感触很深,在数据库的课设的基础上,又一次用JSP做相关项目,这不仅又一次加强了自己对JSP这门课程的理解也很好的锻炼了自己的动手能力。这一技术是需要有一定基础、而且动手能力强的学科。书上也强调一点是:要想真正地掌握JSP技术,必须有较好的java语言基础,以及HTML语言方面的知识。

JSP是一门新技术,他基于Java Servlet以及整个java体系的Web开发技术。通过这个大作业,使我初步掌握和了解了JSP的基本运行原理、各个对象的结构和功能、怎样连接数据库、能自己手动写code 开发一些小网页。并且,自己能够组建一台JSP服务器,而且还了解了安装过程中,所要注意的事项。对于一些简单的小问题,能够自己动手排除。

上传的附件 cloud_download 基于JSP实现的飞机票售票管理系统.zip ( 13.20mb, 14次下载 )
error_outline 下载需要12点积分

keyboard_arrow_left上一篇 : 基于C#实现的电影院售票管理系统 基于Android系统手机通讯录管理软件的设计与开发 : 下一篇keyboard_arrow_right



223333
2020-08-18 19:43:59
哥,这个文件是不是不齐啊
lxww12345
2020-10-13 22:25:26
不错,
美美单排日记
2020-10-15 12:23:24
我喜欢这个下载下来就和他写的一模一样吗
X
2020-10-26 19:12:00
哥我下载了那个文件但是运行不了怎么回事

发送私信

47
文章数
12
评论数
最近文章
eject