JSP课程设计——民航售票管理系统
【超级超级超级超级肝的课设,发出来留个念~】
之前学数据库的时候用java简单实现了民航售票管理端以及客户端的一些功能,这次课程设计算是对上次课设的补充和完善吧,废话不多说了直接上图(有一些小小简陋,轻喷啊!)
一.主页
emmm其实俺也编不出来那么“精致”的界面,好多都是Ctrl+c啦。logo是俺们参加挑战杯设计的,正好能拿过来用,反正就是怎么省事怎么来。
简陋的登录界面——一开始以为挺好弄的,没想到就这一个小熊玩意儿弄了两整天才调好,又是div又是servlet又是Javabean什么什么的,代码在下面哈↓(ps:这是个固定div,有想拿走的可以自己写一下相应div属性)
1.表单
<div class="signform" id="signform" style="display: none"><div class="signclose"><img src="data:images/cuohao.png" width="35px" height="35px" onclick="signclose()"></div><form action="loginServlet" method="post"><div class="userdiv"><input id="user" class="signinput" type="text" placeholder="手机号" name="cp" ></div><div class="pwddiv"><input id="pwd" class="signinput" type="password" placeholder="密码" name="cpassword"></div><div class="yzmdiv"><br><input id="yzm" class="" type="text" placeholder="验证码" name="code"><img border=0 src="validate.jsp"></div><div class="postdiv"><button>登录</button></div></form><br><div class="change" style="color: #4d4d4d"><p>还没有账号?赶快<a href="register.jsp" style="text-decoration: none;color: #43A047">注册</a>一个吧</p></div></div>
2.css属性包(好多是无关项,俺没摘出来)
#displaysign{position: relative;top: 80px;width: 70px;height: 40px;
}
.signform {font-family: 微软雅黑;position: fixed;background-color: white;top: 20%;left: 30%;width: 500px;height: 400px;border-radius: 1em;text-align: center;z-index: 999;
}
#registerform {height: 450px;
}
.signclose {cursor: pointer;float: right;overflow: hidden;text-align: center;position: relative;height: 35px;width: 35px;margin-top: 10px;margin-right: 10px;
}
#registerloading{position: absolute;width: 25px;height: 25px;left: 410px;top: 90px;
}
.signinput {text-align: center;border-radius: 0.2em;width: 280px;height: 45px;border: none;background-color:#f2f2f2;font-size: 28px;
}
.signinput::-webkit-input-placeholder {font-size: 26px;
}
.userdiv {position: relative;margin-top: 80px;
}
.pwddiv {position: relative;margin-top: 20px;
}
.yzmdiv {position: relative;margin-top: 10px;
}
.postdiv {position: relative;margin-top: 20px;
}
.postdiv button {cursor: pointer;color: white;font-size: 26px;border: none;border-radius: 0.4em;width: 280px;height: 45px;background-color:#4CAF50;
}
.yyy {position: relative;margin-top: 20px;
}#yyy {position: relative;margin-top: 20px;
}
#airbu {cursor: pointer;color: white;font-size: 26px;border: none;border-radius: 0.4em;width: 100px;height: 45px;background-color:#2e6da4;
}
#anum {position: relative;margin-top: 40px;
}
#airbua {cursor: pointer;color: white;font-size: 26px;border: none;border-radius: 0.4em;width: 200px;height: 45px;background-color:#2e6da4;
}
#airbub {cursor: pointer;color: white;font-size: 26px;border: none;border-radius: 0.4em;width: 320px;height: 45px;background-color:#ac2925;
}
#airbuc {cursor: pointer;color: white;font-size: 26px;border: none;border-radius: 0.4em;width: 170px;height: 45px;background-color:#67b168;
}
#airbud {cursor: pointer;color: white;font-size: 26px;border: none;border-radius: 0.4em;width: 480px;height: 45px;background-color:#d58512;
}#airbue {cursor: pointer;color: white;font-size: 26px;border: none;border-radius: 0.4em;width: 180px;height: 45px;background-color:#4e4f51;
}.airfont {font-family: 微软雅黑;color: #4e4f51;size: 4px;font-weight: bold;
}
.aircheck {font-family: 微软雅黑;color: orangered;size: 4px;font-weight: bold;
}.checklist{color: #222222;font-weight: bold;font-family: 微软雅黑;
}
3.登录servlet(LoginServlet.java)
package com.test.servlet;
import java.sql.*;
import java.io.*;import javax.servlet.*;
import javax.servlet.http.*;import com.test.jdbc.SqlSrvDBConn;
import com.test.model.vo.UserTable;public class LoginServlet extends HttpServlet{public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{request.setCharacterEncoding("gb2312"); //设置请求编码String cp=request.getParameter("cp");//获取提交的用户名String cpassword=request.getParameter("cpassword");//获取提交的密码boolean validated=false; //验证成功标识SqlSrvDBConn sqlsrvdb=new SqlSrvDBConn();HttpSession session=request.getSession();//获得会话对象,用来保存当前登录用户的信息UserTable user=null; //先获得UserTable对象,如果是第一次访问该页,用户对象肯定为空,但如果是第二次甚至是第三次,就直接登录主页而无须再次重复验证该用户的信息user=(UserTable)session.getAttribute("user");//如果用户是第一次进入,会话中尚未存储user持久化对象,故为nullif(user==null){//查询userTable表中的记录String sql="select * from userTable";ResultSet rs=sqlsrvdb.executeQuery(sql); //取得结果集try{while(rs.next()){if((rs.getString("cp").trim().compareTo(cp)==0)&&(rs.getString("cpassword").compareTo(cpassword)==0)){user=new UserTable(); //创建持久化的JavaBean对象useruser.setCname(rs.getString(1));user.setCsex(rs.getString(2));user.setCid(rs.getString(3));user.setCaddress(rs.getString(4));user.setCvip(rs.getString(5));user.setCp(rs.getString(6));user.setCpassword(rs.getString(7));session.setAttribute("user",user);//把user对象存储在会话中validated=true; //标识为true表示验证成功通过}}rs.close();}catch(SQLException e){e.printStackTrace();}sqlsrvdb.closeStmt();sqlsrvdb.closeConn();}else{validated=true; //该用户在之前已登录过并成功验证,故标识为true表示无须再验了}String code=request.getParameter("code");//获取session中的验证码String randStr=(String)session.getAttribute("randStr");response.setCharacterEncoding("gb2312");PrintWriter out=response.getWriter();if(validated && code.equals(randStr)){ //验证成功跳转到main.jspresponse.sendRedirect("index2.jsp");}else{ //验证失败跳转到error.jspresponse.sendRedirect("error.jsp");}}public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{doGet(request,response);}
}
4.web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app><servlet><servlet-name>LoginServlet</servlet-name><servlet-class>com.test.servlet.LoginServlet</servlet-class></servlet><servlet-mapping><servlet-name>LoginServlet</servlet-name><url-pattern>/loginServlet</url-pattern></servlet-mapping>
</web-app>
5.验证码(validate.jsp)
<%@page language="java" import="java.awt.*,java.awt.image.BufferedImage,java.util.*,javax.imageio.ImageIO" pageEncoding="gb2312"%>
<%response.setHeader("Cache-Control","no-cache");// 在内存中创建图象 int width=60,height=20;BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);//获取画笔Graphics g=image.getGraphics();//设定背景色 g.setColor(new Color(200,200,200));g.fillRect(0,0,width,height);//取随机产生的验证码(4位数字) Random rnd=new Random();int randNum=rnd.nextInt(9000)+1000;String randStr=String.valueOf(randNum);//将验证码存入sessionsession.setAttribute("randStr",randStr);//将验证码显示到图象中 g.setColor(Color.black);g.setFont(new Font("",Font.PLAIN,20));g.drawString(randStr,10,17);//随机产生100个干扰点,使图象中的验证码不易被其他程序探测到 for(int i=0;i<100;i++){int x=rnd.nextInt(width);int y=rnd.nextInt(height);g.drawOval(x,y,1,1);}//输出图象到页面 ImageIO.write(image,"JPEG",response.getOutputStream());out.clear();out=pageContext.pushBody();
%>
二. 功能界面
1.ER图以及流程图
2.功能简介
(1)客户端:
客户可以通过登录该系统进行航班的查询,其查询方式分为“按日期查询”、“按起始地与目的地查询”、“按日期,起始地与目的地查询”以及“查询所有航班”四种,用户可以通过各种查询渠道得到符合条件的航班信息,并且能根据自己的需求进行购票。在购票界面,用户可以自行挑选客机座位号,并存入自己的订单里。在购票操作中,普通用户原价购买商品,而vip客户可享受8折优惠,另外非会员客户也能办理vip项目。
每个客户有自己的风航空间,在各自的空间里可以更改用户名、密码等信息。
(2)管理端:
管理员可以通过登录管理系统进行机票的查询,其查询方式分为“按日期查询”、“按起始地与目的地查询”、“按日期,起始地与目的地查询”以及“查询所有航班”四种,管理员可以通过各种渠道得到符合条件的机票信息,并且能根据需求进行机票的增删改操作等等。
3.界面展示
(整套流程如下)
4.机票信息显示界面代码(仅关键部分代码)
<% request.setCharacterEncoding("utf-8");if(session.getAttribute("ad")==null) {String ayear = request.getParameter("year");String amonth = request.getParameter("month");String aday = request.getParameter("day");String ad = ayear + amonth + aday;session.setAttribute("ad", ad);out.print(ayear + "年" + amonth + "月" + aday + "日的航班");}String ad1 = (String) session.getAttribute("ad");%><table border="1" width="700" bgcolor="#b0e0e6" align="center"><tr><th>序号</th><th>航班号</th><th>logo</th><th>航空公司</th><th>始发地</th><th>目的地</th><th>起飞时间</th><th>余票</th><th>。。。</th></tr><%String url="jdbc:sqlserver://localhost:1433;databaseName=fenghang";String sqluser="sa";String password="123456";Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");Connection conn=DriverManager.getConnection(url,sqluser,password);int pageSize; //一页显示的记录数int totalSize; //记录总数int totalPage; //总页数int currentPage; //待显示页码String strPage;int i,id;pageSize=10; //设置一页显示的记录数strPage=request.getParameter("page"); //取得待显示页码if(strPage==null){currentPage=1;}else{currentPage=Integer.parseInt(strPage); //将字符串转换成整型}Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);String sql="select * from 航班表 where ad='"+ ad1 +"'";ResultSet rs=stmt.executeQuery(sql);rs.last(); //光标指向查询结果集中最后一条记录totalSize=rs.getRow(); //获取记录总数totalPage=(totalSize+pageSize-1)/pageSize; //记算总页数if(totalPage>0){rs.absolute((currentPage-1)*pageSize+1);//将记录指针定位到待显示页的第一条记录上i=0;id=(currentPage-1)*pageSize+1;String cNum;while(i<pageSize && !rs.isAfterLast()){cNum=rs.getString("anum");%><tr><td align="center"><a class="airfont"><%=id%></a></td><td align="center"><a class="airfont"><%=cNum%></a></td><td align="center"><img src="../images/air/<%=rs.getString("acom")%>.jpg" width="50px" height="50px"></td><td align="center"><a class="airfont"><%=rs.getString("acom")%></a></td><td align="center"><a class="airfont"><%=rs.getString("asta")%></a></td><td align="center"><a class="airfont"><%=rs.getString("ades")%></a></td><td align="center"><a class="airfont"><%=rs.getString("ad")%></a></td><td align="center"><a class="airfont"><%=rs.getString("are")%></a></td><td align="center"><a class="aircheck" href="<% String ppare=rs.getString("are");if (ppare.equals("0"))out.print("../air/nt.jsp");elseout.print("../check/ccc.jsp?anum="+cNum);%>">查看</a></td></tr><%rs.next();i++;id++;}}%></table><br><div align="center"><a style="font-size: x-large;color: slateblue">第<%=currentPage%>页 ,共<%=totalPage%>页</a><%if(currentPage>1){%><button id="airbu"><a href="danum1.jsp?page=1&ad=<%=ad1%>" style="color: ghostwhite">第一页</a></button><button id="airbu"><a href="danum1.jsp?page=<%=currentPage-1%>&ad=<%=ad1%>" style="color: ghostwhite">上一页</a></button><%}if(currentPage<totalPage){%><button id="airbu"><a href="danum1.jsp?page=<%=currentPage+1%>&ad=<%=ad1%>" style="color: ghostwhite">下一页</a></button><button id="airbu"><a href="danum1.jsp?page=<%=totalPage%>&ad=<%=ad1%>" style="color: ghostwhite">尾页</a></button><%}rs.close();stmt.close();conn.close();%>
三.参考文献
[1] 耿祥义等.Java2实用教程(第五版)[M].北京:清华大学出版社,2017
[2] 耿祥义等.JSP实用教程(第4版)[M].北京:清华大学出版社,2021
[3] 储久良等.Web前端开发技术——HTML、CSS、JavaScript(第2版)[M].北京:清华大学出版社,2017
[4] 云婷.价值链视角下在线票务服务企业O2O盈利模式研究——以携程网为例 [D].呼和浩特:内蒙古农业大学,2021:6.
四.系统说明
1.本系统需搭载jdk1.8与Tomcat9.0服务器进行运行
2.本系统的最好通过IntelliJ IDEA进行编译及运行,也可通过eclipse运行,但需要修改相关文件(web文件夹重命名为webContent文件夹等等)。
3.本系统src文件夹里存放相关java文件,web文件夹里存放视图相关文件。
4.大致文件结构:
①air目录:客户查询航班类文件
②check目录:购票类文件
③css目录:相关css文件
④customer目录:用户空间及订单类文件
⑤images目录:图片文件
⑥js目录:相关js文件
⑦manager:管理员操作类文件
⑧index.jsp:系统主页
5.数据库要使用Microsoft SQL Server,并将相关文件导入数据库。
五.搞一波小外宣啦!
这是俺的b站嗷,三连三连懂~
18,19
六.再有什么问题留言问就好啦,也希望得到各路大佬的指点!
JSP课程设计——民航售票管理系统相关推荐
- 基于Python+Sqlite实现(图形化)民航售票管理系统【100010198】
民航管理系统--数据库课程设计 一. 概述 民航售票管理系统主要分为机场.航空公司和客户三方的服务.航空公司提供航线和飞机的资料,机场则对在本机场起飞和降落的航班和机票进行管理,而客户能得到的服务应该 ...
- [含课设报告+源码等]基于JSP实现的飞机票售票管理系统[包运行成功]
下载:https://download.csdn.net/download/ll6666668/64026192 项目介绍: [含课设报告+源码等]基于JSP实现的飞机票售票管理系统[包运行成功][含 ...
- asp毕业设计——基于asp+sqlserver的民航售票管理系统设计与实现(毕业论文+程序源码)——民航售票管理系统
基于asp+sqlserver的民航售票管理系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于asp+sqlserver的民航售票管理系统设计与实现,文章末尾附有本毕业设计的论文和源码下 ...
- 基于html人事管理报告,基于C++builder的课程设计报告 (人事管理系统)
内容介绍 原文档由会员 bshhty 发布 C++builder课程设计 ( 人事信息管理系统 ) 12页 7000余字 资料包含:完整课程设计报告,源代码等相关设计资料.本课程设计为RAR个文件. ...
- 查询学生选修课程管理系统java_JAVA数据库课程设计学生选课管理系统的
<JAVA数据库课程设计学生选课管理系统的>由会员分享,可在线阅读,更多相关<JAVA数据库课程设计学生选课管理系统的(59页珍藏版)>请在人人文库网上搜索. 1.一.课程设计 ...
- c语言用链表写管理系统程序,c语言课程设计职工信息管理系统单链表实现程序源代码-20210401015126.docx-原创力文档...
文档编制序号:[KKIDT-LLE0828-LLETD298-POI08] 文档编制序号:[KKIDT-LLE0828-LLETD298-POI08] C语言课程设计职工信息管理系统单链表实现程序源代 ...
- MFC课程设计 --学生成绩管理系统
MFC课程设计 ,C++课程设计 --学生成绩管理系统 ps:因为课设完成的过程大家都不太一样,以下的代码仅供学习一下在MFC下各个控件的用法,有问题欢迎留言讨论. 实验目的 使用MFC类库编制应用程 ...
- c语言课程设计(图书馆管理系统)
大一c语言课程设计:图书馆管理系统. 图书管理系统,功能齐全拿来就能用 1.主界面 代码段 void main() { int n;Sleep(300);loop1:tongji(); printf( ...
- c语言数据结构课程设计停车场管理系统,数据结构课程设计报告停车场管理系统...
<数据结构课程设计报告停车场管理系统>由会员分享,可在线阅读,更多相关<数据结构课程设计报告停车场管理系统(8页珍藏版)>请在人人文库网上搜索. 1.数据结构课程设计报告系 别 ...
- c语言课程设计宠物店,c语言课程设计-宠物店信息管理系统.doc
c语言课程设计-宠物店信息管理系统 合肥学院 计算机科学与技术系 课程设计报告 2012-2013学年第二学期 课程面向过程综合设计课程设计名称宠物(小动物)店信息管理系统 学生姓名宋俊 学号 专业班 ...
最新文章
- 实现了html实现网页无限下滑,10行代码实现页面无限滚动
- 使用Linux进行缓冲区溢出实验的配置记录
- IEEE史上首位华人主席!马里兰大学终身教授刘国瑞当选
- Solidworks如何创建投影曲线
- SVM训练时候样本不均衡怎么设置惩罚项
- 【双百解法】剑指 Offer 11. 旋转数组的最小数字
- 【 Grey Hack 】加强版nmap
- MySQL命令(二)| 表的增删查改、聚合函数(复合函数)、联合查询
- 链家大数据多维分析引擎实践
- linux循环控制结构,Linux Shell 之 Shell 基本控制结构(二)(循环结构)
- Python3列表、元组及之间的区别和转换
- 销毁Spring Bean的三种方法
- (转帖)美国人教你这样用Google,你真的会变特工
- gst-launch-1.0
- Hold住通话有三种方式
- 管道通信的基本流程和代码
- 全国计算机二级考试中 ms office高级应用与C语言哪个适合大学生?
- 水果店节日活动营销方案,水果店如何做营销活动
- oracle定时频率,Oracle 定时任务 — 定时执行存储过程
- 【一周头条盘点】中国软件网(2018.5.7~2018.5.11)
热门文章
- 360校招题之小明看花
- java 如何清除临时文件_如何删除Java中的临时文件?
- 学习使用jQuery中的on() 方法
- flutter 屏幕截图,超出屏幕部分截图
- vue + echarts 以山西地图为例
- css flex布局问题width:auto
- Beaglebone Black–I2C 接 BMP280 获取当前温度
- forward和include的区别详解
- H310C,B365,M.2 NVME SSD,USB3.0,安装 WIN7 64 位
- bitmap 设置图片尺寸,避免 内存溢出 OutOfMemoryError的优化方法