攻城狮0829
随着现代生活水平提高,人类逐渐对精神文化享受重视,追求不同的生活,而其中旅游成为大众的喜爱,于是到年到节的时候需要一种交通 工具来达到目的地,这也成为这系统开发的动力,系统的进步也是应客户的需求而生,为了能够在更早的出售机票,不影响客户的行程,机票售票系统也做出相应的决策,那就是通过无人管理机票预定,然后在快到期的那天,管理员可以通过订单管理来处理客户订单。所以管理员的模块也极其重要,本系统通过后台界面为管理员和数据库与服务器进行交互提供环境。客户只要通过浏览器来进行订票,订票的数据存储在数据里面,然后管理员通过打开后台浏览器来进行信息汇总,然后下单确定发票,整一个信息传递过程是订票信息→订票查询→核实机票。
顾客上网通过浏览器来登入系统首页,系统提供客户注册、机票查询和机票预定功能,当然也包括已预定机票取消
用户通过窗口选取机票,订单信息保存在数据库上,等待管理员审核
管理员处理用户信息,确定用户购买
用户可以根据己购买的字眼可以到代理取票,也可以再登机那天取票
管理员随时更新航班信息
客户可以随时登入系统获取航班信息
系统通过数据库的连接,通过接受客户数据来响应WEB服务器处理,来进行数据管理。整个分为两大部分,第一部分就是客户模块,第二部分就是管理员模块。客户模块包括客户注册、查询、购票、换票、取消机票。管理员模块包括自动处理客户订单、管理员处理订单、机票班次更新、管理系统用户。通过计算机网络来贯穿两大模块,从而实现客户和服务器的交互。
在客户端系统的功能实现上,可以分为以下几个部分:
用户通过支持web容器的浏览器来进行信息的输入,客户端根据用户输入将数据流输入和数据流的统计。这部分的要求是一个人性化的界面,让用户通过浏览器来进行页面访问。所谓人性化界面包括,浏览功能,预定功能,多种进行人机交互按钮,比如html页面信息和提交、重置等
把用户信息存储到客户端系统中,经过系统自动审核后存储到数据库当中,已备以后登录查询
服务器通过数据库出来从客户端传输的信息加以确定,然后返回给客户端,客户端通过信息来提醒用户,用户可以根据信息到柜台拿票
在服务器端系统的功能实现上,可以分为以下几个部分:
服务器通过网络接受用户从客户端输入所需要的信息,然后根据用户所需要的信息来判断是否通过WEB容器进行管理,如果纯粹是看票的话,直接调用数据库已经存储好的机票信息通过静态服务反馈用户,如果有购票需要数据通过WEB服务器来进行管理
在服务器段提供了航班输入功能,管理员根据现实情况来对航班进行管理
把航班信息通过网络来传递到客户端来与用户进行交互
根据数据流图的特点可以从大到小逐渐深入系统处理过程,图3-1是飞机票售票管理系统的最顶层的数据流图。
从顶层数据流图,可以得到整个数据流图过程,如图3-2,图3-3。
系统数据流图
订票数据流图
飞机票售票管理系统的业务流图如图3-4。
在一个B/S系统中数据无疑是非常重要的,数据的安全性、稳定性、可恢复性对使用者起着极其重要的作用。选择一个健全稳定的数据库无疑也是系统实现的首要步骤,本系统选用的是SQL 2005,它能提供大型系统所需的数据库服务。下面将介绍系统的数据库结构。本系统的最主要的功能在与数据库的分配,对不同的用户采用不同的数据库,和不同的查询方式。
用户表common_user
CREATE TABLE IF NOT EXISTS `common_user` (
`user_name` varchar(16) NOT NULL,
`user_pwd` varchar(32) NOT NULL,
`avatar_img` varchar(50) DEFAULT NULL,
PRIMARY KEY (`user_name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='用户表' AUTO_INCREMENT=1 ;
管理员用户表admin_user
CREATE TABLE IF NOT EXISTS `admin_user` (
`user` varchar(16) NOT NULL COMMENT '管理员用户名',
`pwd` varchar(32) NOT NULL COMMENT '管理员密码',
PRIMARY KEY (`user`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='管理员用户表' AUTO_INCREMENT=1 ;
航班信息表flight
CREATE TABLE IF NOT EXISTS `flight` (
`f_n` varchar(6) NOT NULL COMMENT '航班号',
`f_s_p` varchar(4) NOT NULL COMMENT '航班起点',
`f_e_p` varchar(4) NOT NULL COMMENT '航班终点',
`f_s_a` varchar(12) NOT NULL COMMENT '航班起飞机场',
`f_a_a` varchar(12) NOT NULL COMMENT '航班到达机场',
`f_d_t` varchar(5) NOT NULL COMMENT '起飞(departure)时间',
`f_a_t` varchar(5) NOT NULL COMMENT '到达时间',
`f_f_c_p` int(11) NOT NULL COMMENT '头等舱价格First class price',
`f_s_c_p` int(11) NOT NULL COMMENT '商务舱价格',
`f_t_c_p` int(11) NOT NULL COMMENT '经济舱价格',
PRIMARY KEY (`f_n`),
UNIQUE KEY `f_n` (`f_n`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='航班信息' AUTO_INCREMENT=1 ;
航班订单信息表t_order
CREATE TABLE IF NOT EXISTS `t_order` (
`id` int(12) NOT NULL AUTO_INCREMENT,
`order_user` varchar(16) NOT NULL COMMENT '下单用户',
`f_n` varchar(6) NOT NULL COMMENT '航班号',
`p_name` varchar(6) NOT NULL COMMENT '乘客姓名',
`date` varchar(12) NOT NULL COMMENT '订单日期',
`grade` varchar(3) NOT NULL COMMENT '舱别',
`p_id` varchar(18) NOT NULL COMMENT '乘客身份证号',
`contact` varchar(6) NOT NULL COMMENT '联系人',
`c_p` varchar(11) NOT NULL COMMENT '联系人电话',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci AUTO_INCREMENT=8 ;
用户留言信息表user_message
CREATE TABLE IF NOT EXISTS `user_message` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`time` varchar(10) NOT NULL,
`user_name` varchar(32) NOT NULL,
`message_content` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=30 ;
系统对于用户来说只能查询,不能诺命购票,因为不提供真实身份,无法判断用户,购票也极为麻烦,所以只能依靠登录来进行用户识别和购票。
用户注册的关键代码,主要利用request这个接口的getParameter0方法来接受用户所输入的数据,通过getRemoteAddr()方法来获取用户的ID,每一个以用户都只有唯一—个ID标识,然后通过flag来判断输入是否符合,为真的话就通过request的setAtribute方法来保存信息。
1. public void doPost(HttpServletRequest req, HttpServletResponse resp)
2. throws ServletException, IOException {
3. String log_name = req.getParameter("log_name");
4. String log_pwd = req.getParameter("log_pwd");
5. String reg_name = req.getParameter("reg_name");
6. String reg_pwd1 = req.getParameter("reg_pwd1");
7. String reg_pwd2 = req.getParameter("reg_pwd2");
8.
9. if(log_name!=null&&log_pwd!=null&®_name==null&®_pwd1==null&®_pwd2==null) {
10. //调用登录方法处理登录
11. go_login(log_name, log_pwd, req, resp);
12.
13. }
14. else if(log_name==null&&log_pwd==null&®_name!=null&®_pwd1!=null&®_pwd2!=null&®_pwd1.equals(reg_pwd2)) {
15. //调用注册方法处理注册
16. go_reg(reg_name, reg_pwd1, req, resp);
17.
18. }//为什么不再写一个判断注册时reg_pwd1和reg_pwd2是否相等的语句呢?因为,前端页面中已经用js去做判断了,
19. //如果用户两次输入的密码不一致根本不可能提交数据到此servlet,除非用户限制js或者修改了js,也就是做了非法操作
20. //因此,直接输出提示非法操作的提示信息即可
21. else {
22.
23. resp.setContentType("text/html;charset=utf-8");
24. PrintWriter out = resp.getWriter();
25. out.println("请不要尝试非法操作");
26. /*****测试数据
27. out.println("登录账号:"+log_name+"\n登录密码:"+log_pwd+"\n注册账号:"
28. +reg_name+"\n注册密码1:"+reg_pwd1+"\n注册密码2:"+reg_pwd2);
29. out.print("---log_name==null:"+(log_name==null));
30. out.print("---log_pwd==null:"+(log_pwd==null));
31. out.print("---reg_name==null:"+(reg_name==null));
32. out.print("---reg_pwd1==null:"+(reg_pwd1==null));
33. out.print("---reg_pwd2==null:"+(reg_pwd2==null));
34. */
35.
36. resp.setHeader("refresh", "2;url=index/login_reg.jsp");
37. //除了登录和注册操作,提交其它数据均为非法操作,不做处理,仅给出提示非法信息
38. }
39. }
在该系统当中,因为运行外面的旅客访问系统并查询系统,以供是否注册为本系统用户,所以两者都可以查询机票航班,旅客通过session来访问,但访问数据随着页面刷新而消除。
这部的关键步骤也是调用request这个接口的获取信息方法,同样也是调用geParameter()方法就可以把信息获取出来。同时用SQL语言来查询表的信息,附值给定义的属性,可以通过方法来调用数据库。
1. protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
2. req.setCharacterEncoding("utf-8");
3. //HttpSession session = req.getSession();
4. String url=null;
5. /*
6. * if(session.getAttribute("url")!=null) {
7. * url=session.getAttribute("url").toString(); }else {
8. */
9. url="default/index.jsp";
10.
11. String departure=null;
12. String destination=null;
13. departure=req.getParameter("departure");
14. destination=req.getParameter("destination");
15. String sql=null;
16. if(departure==""&&destination=="") {
17. //如果始发地和目的地都为空则跳转回原页面
18. resp.sendRedirect(url);
19. }else if (departure!=""&&destination=="") {
20. sql="select * from flight where f_s_p='"+departure+"'";
21. }else if (departure==""&&destination!="") {
22. sql="select * from flight where f_e_p='"+destination+"'";
23. }else if (departure!=""&&destination!="") {
24. sql="select * from flight where f_s_p='"+departure+"' and f_e_p='"+destination+"'";
25. }
26. if(departure==""&&destination=="") {
27. //如果都为空,执行不到这一步,所以就不用做处理了,否则,执行else
28. }else {
29. db_conn conn=new db_conn();
30. //System.out.println(sql);
31. ArrayList<flight> flightlist = new ArrayList<flight>();
32. flight flight_info=new flight();
33.
34. ResultSet res=conn.executeQuery(sql);
35. try {
36. while (res.next()) {
37. flight_info.setF_n(res.getString(1));
38. flight_info.setF_s_a(res.getString(4));
39. flight_info.setF_a_a(res.getString(5));
40. flight_info.setF_d_t(res.getString(6));
41. flight_info.setF_a_t(res.getString(7));
42. flight_info.setF_f_c_p(res.getString(8));
43. flight_info.setF_s_c_p(res.getString(9));
44. flight_info.setF_t_c_p(res.getString(10));
45. flightlist.add(flight_info);
46. }
47. req.setAttribute("flightlist", flightlist);
48. } catch (SQLException e) {
49. System.out.println("错误信息:"+e);
50. }finally {
51. conn.closeDB();
52. }
53. //resp.sendRedirect("default/search.jsp");
54. req.getRequestDispatcher("default/search.jsp").forward(req, resp);
55. }
56. }
为了整个流程更为简单,易用,该系统就只设定只用验证的用户才可以购买飞机票,同时用户可以通过登录查询自己的航班。
下面代码是预定机票的代码,通过判断机票剩余数和预定机票的关系,确定用户购买成功,成功的话,设置成功信息,失败的设只失败提示信息。
1. protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
2. //开始获取各种参数
3. req.setCharacterEncoding("utf-8");
4. String flight_id=req.getParameter("flight_id");
5. String start_place=req.getParameter("start_place");
6. String end_place=req.getParameter("end_place");
7. String start_airport=req.getParameter("start_airport");
8. String end_airport=req.getParameter("end_airport");
9. String take_off_time=req.getParameter("take_off_time");
10. String landing_time=req.getParameter("landing_time");
11. String first_class_price_str=req.getParameter("first_class_price");
12. Integer first_class_price=Integer.parseInt(first_class_price_str);
13. String business_class_price_str=req.getParameter("business_class_price");
14. Integer business_class_price=Integer.parseInt(business_class_price_str);
15. String economy_class_price_str=req.getParameter("economy_class_price");
16. Integer economy_class_price=Integer.parseInt(economy_class_price_str);
17. //参数获取结束
18. db_conn conn=new db_conn();
19. String sql="select * from flight where f_n='"+flight_id+"'";
20. ResultSet res=conn.executeQuery(sql);
21. try {
22. if(res.next()) {
23. resp.setContentType("text/html;charset=utf-8");
24. PrintWriter out=resp.getWriter();
25. out.println("您输入的航班号重复了,请选择其他航班号添加,5s后返回");
26. resp.setHeader("refresh", "5;url=admin/flight_add.jsp");
27. }else {
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. //Integer res=
30. conn.executeInsert(sql);
31. //System.out.println(res);
32. //System.out.println(sql);
33. resp.sendRedirect("admin/flight_list.jsp");
34. }
35. } catch (SQLException e) {
36. // TODO Auto-generated catch block
37. e.printStackTrace();
38. }
39. }
订单管理模块主要是对用户订票进行管理,管理员通过登录进行访问系统后台页面,然后选取订单管理模块,对客户进行处理。通过数据库对用户订单信息组进行管理,通过定义ArrayList()数据组来获得订票所以信息。
1. protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
2. req.setCharacterEncoding("utf-8");
3. HttpSession session = req.getSession();
4. if(session.getAttribute("user_id")!=null) {
5. String user_id=session.getAttribute("user_id").toString();
6. String f_i=req.getParameter("flight_id");
7. String passenger_name=req.getParameter("passenger_name");
8. String date=req.getParameter("date");
9. String grade=req.getParameter("grade");
10. String passenger_id=req.getParameter("passenger_id");
11. String contact=req.getParameter("contact");
12. String contact_phone=req.getParameter("contact_phone");
13.
14.
15. /*
16. * System.out.println(f_i); System.out.println(passenger_name);
17. * System.out.println(date); System.out.println(grade);
18. * System.out.println(passenger_id); System.out.println(contact);
19. * System.out.println(contact_phone);
20. */
21.
22. if(f_i!=""&&passenger_name!=""&&date!=""&&grade!=""&&passenger_id!=""&&contact!=""&&contact_phone!="") {
23. db_conn conn=new db_conn();
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. Integer res=conn.executeInsert(sql);
26. System.out.println(res);
27. if(res.equals(1)) {
28. resp.sendRedirect("default/order_list.jsp");
29. }else {
30. resp.sendRedirect("default/order.jsp");
31. }
32.
33. }else {
34. resp.sendRedirect("default/order.jsp");
35. }
36.
37. }else {
38. resp.sendRedirect("default/order.jsp");
39. }
40.
41. }
用户访问首页
用户进行登录
用户进行注册
登录或注册成功,进入用户个人首页
用户修改个人资料
用户订购航班
用户查询航班
用户查看航班订单
用户查看留言
管理员登录界面
管理员添加航班信息
管理员查看航班列表信息
管理员查看航班订单
管理员查看用户列表信息
管理员查看留言列表
用户能成功订购航班,并且查看订单
管理员查看航班并成功添加航班
通过JavaEE的综合课程设计感触很深,在数据库的课设的基础上,又一次用JSP做相关项目,这不仅又一次加强了自己对JSP这门课程的理解也很好的锻炼了自己的动手能力。这一技术是需要有一定基础、而且动手能力强的学科。书上也强调一点是:要想真正地掌握JSP技术,必须有较好的java语言基础,以及HTML语言方面的知识。
JSP是一门新技术,他基于Java Servlet以及整个java体系的Web开发技术。通过这个大作业,使我初步掌握和了解了JSP的基本运行原理、各个对象的结构和功能、怎样连接数据库、能自己手动写code 开发一些小网页。并且,自己能够组建一台JSP服务器,而且还了解了安装过程中,所要注意的事项。对于一些简单的小问题,能够自己动手排除。
keyboard_arrow_left上一篇 : 基于C++实现的模拟文件系统 基于C语言实现的仓库管理系统 : 下一篇keyboard_arrow_right