汽车租赁系统
1.需求分析
1.1任务概述
1.2开发环境和使用技术
1.3数据库设计
2.登陆模块
2.1登陆页面的代码是:
2.2登录类login.java的代码如下:
2.3LoginServlet.java的代码如下:
3.公共模块
3.1数据库连接
3.2中文乱码过滤器
4.主页面模块
4.1mainpage.jsp页面的代码是:
4.2menu.html
5.用户管理模块
5.1添加用户
5.2显示全部用户
5.3修改用户
5.4删除用户信息
5.5显示单个用户的详细信息
6.汽车管理模块
6.1新增汽车
6.2查看全部汽车信息
6.3查看单个汽车详细信息
6.4修改汽车信息
6.5删除单个汽车信息
7.客户管理模块
7.1添加客户信息
7.2查看全部客户信息
7.3修改客户信息
7.4删除客户信息
8.业务管理模块
8.1汽车出租
8.2出租单管理
8.3检查单管理
9.心得体会
10.小组分工………………………………………………………………………………….42
11.小组打分………………………………………………………………………………….42
1.需求分析
1.1任务概述
该系统能对汽车信息进行入库录入、租赁登记、租赁状态查询、过期提示、入库检查等操作。该系统定位为在主流计算机操作系统中能直接运行的B/S结构的汽车租赁信息管理系统。
1.2开发环境和使用技术
使用的操作系统是Windows系列,开发工具是Myeclipse8.5,开发过程使用的服务器是Tomcat服务器,数据库是MySQL。
页面使用JSP技术,取值采用JSTL标签和EL表达式结合,控制层采用Servlet,数据持久层采用JDBC技术。同时,采用了过滤器对一些操作或者数据进行过滤。
1.3数据库设计
用户表users的信息如下:
创建数据库表users的代码如下:
Use car;
create table users(
password varchar(64) not null,
userlevel varchar(22) not null,
position varchar(32) default null,
phone varchar(64) default null,
address varchar(512) default null,
sex decimal(2,0) default null,
fullname varchar(32) default null,
dentity varchar(128) not null,
username varchar(64) not null,
id int not null,
primary key (id)
)
汽车信息表cars的信息如下:
创建数据库表cars的代码如下:
Use car;
create table cars(
description varchar(512) default null,
isrenting int default null,
deposit decimal(10,0) default null,
rentprice decimal(10,0) default null,
price decimal(10,0) default null,
color varchar(12) default null,
cartype varchar(32) not null,
carnumber varchar(32) not null,
id int not null,
primary key (id)
)
客户信息表customers的信息如下:
创建数据库表customers的代码如下:
Use car;
create table customers(
password varchar(32) default null,
career varchar(32) default null,
phone varchar(64) default null,
address varchar(512) not null,
custname varchar(64) not null,
sex int default null,
dentity varchar(64) not null,
id int not null,
primary key(id)
)
出租单信息表renttable的信息如下:
创建数据库表renttable的代码如下:
Use car;
create table renttable(
rerumdate date default null,
cusrid int not null,
carsid int not null,
userid int not null,
rentflag int default null,
begindate date default null,
shouldretumdate date default null,
price decimal(10,0) not null,
ahouldpayprice decimal(10,0) not null,
imprest decimal(10,0) not null,
tableid varchar(64) not null,
id int not null ,
primary key (id),
key userid (userid),
key carsid (carsid),
key cusfid (cusrid)
)
检查单信息表checktable的信息如下:
创建数据库表checktable的代码如下:
Use car;
create table checktable(
rentid int not null,
checkuserid int not null,
paying decimal(10,0) default null,
problem varchar(50) default null,
field varchar(12) default null,
checkdate date default null,
checkid int not null,
id int not null ,
primary key(id),
key checkduserid (checkuserid),
key rentid (rentid)
)
2.登陆模块
登陆模块需要判断用户类型,同时为了防止未登陆而直接进入系统,采取了防止未登录操作的过滤器。其中,登陆的访问路径为http://localhost:8080/Car/login.jsp。
登录模块的步骤是在login.jsp页面登陆,然后把数据传递到LoginServlet,由Servlet调用login.java中的变量进行判断,输入正确则跳转到mainpage.jsp,输入错误则跳转到loginError.jsp页面。
- Login.jsp:用户登录的页面。
- Login.java:用户登录的实现类。
- LoginServlet.java:用户登录的Servlet。
2.1登陆页面的代码是:
<body background=" ./pic/logo03.jpg">
<form action="/Car/LoginServlet" method="post"οnsubmit="return check();">
<table border="0">
<tr><td><font color="lightblue">
用户名:
</font></td>
<td>
<input type="text" name="username" id="username">
<br>
</td></tr>
<tr><td><font>密码:
</font></td>
<td><input type="password" name="password" id="password">
<span id="password1"><br></span>
</td></tr>
<tr><td><font>管理员:
</font><input type="radio" value="admin" name="userlevel">
<font>服务员:
</font><input type="radio" value="service" name="userlevel">
</td>
</tr>
<td><input type="submit" value="提交" name="button5">
<input type="reset" value="重置" name="button6">
</td>
<td><br></td>
</tr>
</table>
</body>
2.2登录类login.java的代码如下:
package com.cn.login;
import com.cn.jdbc.JDBC_Connection;
import com.cn.users.UsersVo;
public class Login {
public UsersVo check(String username){
ResultSet rs = null;
PreparedStatement pstmt =null;
Connection conn = null;
UsersVo usersVo = new UsersVo();
try {
conn = JDBC_Connection.getConnection();
String sql = "select * from users where username=?";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, username);
rs = pstmt.executeQuery();
while(rs.next()){
usersVo.setId(rs.getInt("id"));
usersVo.setUsername(rs.getString("username"));
usersVo.setDentity(rs.getString("identity"));
usersVo.setFullname(rs.getString("fullname"));
usersVo.setSex(rs.getInt("sex"));
usersVo.setAddress(rs.getString("address"));
usersVo.setPhone(rs.getString("phone"));
usersVo.setPosition(rs.getString("position"));
usersVo.setUserlevel(rs.getString("userlevel"));
usersVo.setPassword(rs.getString("password"));
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
JDBC_Connection.free(rs, conn, pstmt);
}
return usersVo;
}
}
2.3LoginServlet.java的代码如下:
package com.cn.login;
import com.cn.users.UsersVo;
public class LoginServlet extends HttpServlet {
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.flush();
out.close();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String username = request.getParameter("username");
String password =request.getParameter("password");
List<UsersVo> list = new ArrayList<UsersVo>();
Login login = new Login();
UsersVo usersVo = new UsersVo();
if(username.length()!=0&&password.length()!=0){
usersVo = login.check(username);
if(usersVo!=null){
if(username.equals(usersVo.getUsername())&&password.equals(usersVo.getPassword())){
response.sendRedirect("/car/mainpage.jsp");
response.sendRedirect("login/loginError.jsp");
}
}else{
}
}else{
}
out.flush();
out.close();
}
public void init() throws ServletException {
}
}
3.公共模块
在本项目中有一些代码是所有模块都要用到的类,为了方便开发,把这些都会用到的类独立出来,便于调用和节省代码量。在编写公共模块之前,要把项目搭建好。在Myeclipse中新建一个Web Project ,名称为Car ,把连接MySQL数据库的jar包mysql-connector-java-5.0.8.tar复制到该工程的WEbRoot/WEB-INF/Lib目录下。然后把JSTL标签用到的jar包复制到WEbRoot/WEB-INF/Lib目录下。
3.1数据库连接
在连接数据库的类中,需要创建数据库驱动和连接到数据库模式,然后编写一个关闭连接的方法。数据库连接类JDBC-Connection的源代码如下:
package com.cn.jdbc;
import java.sql.*;
public class JDBC_Connection {
static String drivername="com.mysql.jdbc.Driver";
static String url="jdbc:mysql://localhost:3306/car";
static String username="root";
static String password="";
static{
try{
Class.forName(drivername);
System.out.println("创建驱动成功!");
}catch (ClassNotFoundException e){
System.out.println("创建驱动失败!请检查驱动!");
e.printStackTrace();
}
}
public static Connection getConnection(){
Connection conn=null;
try{
conn=(Connection)DriverManager.getConnection(url,username,password);
System.out.println("连接数据库成功!");
}catch(SQLException e){
System.out.println("连接数据库失败!请检查url,user,password");
e.printStackTrace();
}
return conn;
}
public static void free(ResultSet rs,Connection conn,Statement stmt){
try{
if(rs!=null)
rs.close();
}catch (SQLException e){
System.out.println("关闭ResultSet失败!");
e.printStackTrace();
}finally{
try{
if(conn!=null)
stmt.close();
}catch (SQLException e){
System.out.println("关闭conn失败!");
e.printStackTrace();
}finally{
try{
if(stmt!=null)
stmt.close();
}catch (SQLException e){
System.out.println("关闭stmt失败!");
e.printStackTrace();
}
}
}
}
public static void main(String[] args){
JDBC_Connection.getConnection( );
}
}
3.2中文乱码过滤器
为了防止页面和数据库中的数据出现中文乱码,需要编写一个过滤器,编好后还要把过滤器配置到WEbRoot/WEB-INF/web.xml中。过滤器Zh-Filter的源代码如下:
package com.cn.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class Zh_Filter implements Filter{
public void destry(){}
public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)
throws IOException,ServletException{
request.setCharacterEncoding("gb2312");
response.setCharacterEncoding("gb2312");
chain.doFilter(request, response);
}
public void init1(FilterConfig arg) throws ServletException{
}
public void destroy() {
// TODO Auto-generated method stub
}
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}
4.主页面模块
用户登录以后进入到主页面模块,此页面列出了登录者的主要功能。mainpage.jsp主页面分三块实现:menu.html,toyota.html,bottom.html。
4.1mainpage.jsp页面的代码是:
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<%@ page import="java.util.Date,java.text.*" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<head>
<title>My JSP 'frontpage.jsp' starting page</title>
</head>
<body>
<center>
<table border="0" width="75%">
<tr><td colspan="2" height="200" align="center"
background="F:\myeclipse\Car\WebRoot\pic\logotop.jpg">
<%
Date nowday = new Date(); //获取当前日期
int hour = nowday.getHours(); //获取日期中的小时
SimpleDateFormat format = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss"); //定义日期格式化对象
String time = format.format(nowday); //将指定日期格式化为”yyyy-MM-dd HH:mm:ss”形式
%><center>
<font color="lightblue"><h1>尊敬的用户,您好,欢迎光临汽车租赁系统!</h1><p>
现在时间为:<%=time%></font>
<tr height="500"><td width="25%">
<iframe name=”left” src="menu.html" width="100%" height="100%"></iframe>
</td>
<td><iframe name="right" src="toyota.html" width="100%" height="100%" scrolling="auto"></iframe>
</td>
</tr>
<tr><td colspan="2" height="100"><jsp:include page="bottom.html" /></td>
</tr>
</table>
</center>
</body>
效果如图:
4.2menu.html
主要实现的是目录的功能,toyota.html主要是插入一个有关汽车的广告。menu.html的代码如下:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<head>
</head>
<body background="F:\myeclipse\Car\WebRoot\pic\logoleft.jpg">
<font color="lightblue"> 汽车租赁管理系统
<p>用户管理<br>
<a href="addCustomer.jsp" target="right">添加用户</a><br>
<a href="ShowAllCustomerServlet" target="right">用户列表</a><br>
<a href="updateCustomer.jsp" target="right">用户信息更新</a><br>
<a href="addUser.jsp" target="right">添加客户信息</a><br>
<a href="ShowUsersServlet" target="right">客户信息列表</a><br>
<a href="updateUsers.jsp" target="right">客户信息更新</a><br>
<a href="addRenttable.jsp" target="right">汽车出租</a><br>
<a href="updateCar.jsp" target="right">汽车信息更新</a><br>
<a href="addCar.jsp" target="right">汽车入库</a><br>
<a href="ShowCarRenttableServlet" target="right">出租单管理</a><br>
<a href="checktable.jsp" target="right">检查单管理</a></p>
</body>
5.用户管理模块
用户管理模块所有的类都在com.cn.users包下,用户管理模块都要用到用户实体类UsersVo,UsersVo类中的变量如下:
package com.cn.car;
public class CarsVo {
private int id;
private String carnumber;
private String cartype;
private String color;
private double price;
private double rentprice;
private double deposit;
private int isrenting;
private String description;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getCarnumber() {
return carnumber;
}
public void setCarnumber(String carnumber) {
this.carnumber = carnumber;
}
public String getCartype() {
return cartype;
}
public void setCartype(String cartype) {
this.cartype = cartype;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public double getRentprice() {
return rentprice;
}
public void setRentprice(double rentprice) {
this.rentprice = rentprice;
}
public double getDeposit() {
return deposit;
}
public void setDeposit(double deposit) {
this.deposit = deposit;
}
public int getIsrenting() {
return isrenting;
}
public void setIsrenting(int isrenting) {
this.isrenting = isrenting;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}
5.1添加用户
添加用户的步骤是在页面中添加数据,然后把数据传递到添加用户的Servlet,由Servlet调用实现类中的方法把数据添加到数据库中,添加用户需要用到的文件如下:
- addUser.jsp:添加用户的页面。
- AddUser.java:添加用户的实现类。
- AddUserServlet.java:添加用户的Servlet。
由于在数据库表中有一些数据不能为空,所以在addUser.jsp页需要判断一些属性不能为空,这样就不会把空值传递到数据库中,addUser.jsp页面关键代码如下:
<script type="text/javascript">
function check(){
if(document.getElementById("username").value.length ==0 ){
document.getElementById("username1").innerHTML="身份证不能为空!";
return false;
}else if(document.getElementById("identity").value.length ==0 ){
document.getElementById("identity1").innerHTML="姓名不能为空!";
return false;
}else if(document.getElementById("userlevel").value.length ==0 ){
document.getElementById("userlevel1").innerHTML="用户类型不能为空!";
return false;
}else if(document.getElementById("password").value.length ==0 ){
document.getElementById("password1").innerHTML="密码不能为空!";
return false;
}
else{
return true;
}
}
</script>
</head>
<body background="F:\myeclipse\Car\WebRoot\pic\logo02.jpg">
<form name="form" action="/Car/AddUserServlet" method="post" onsubmit="return check();">
<TABLE align="center">
<TR>
<TD>id:</TD>
<TD><input name="id" id="id"/><span id="id1"></span></TD>
</TR>
<TR>
<TR>
<TD>登录名:</TD>
<TD><input name="username" id="username"/><span id="username1"></span></TD>
</TR>
<TR>
<TD>身份证:</TD>
<TD><input name="dentity" id="dentity"/><span id="dentity1"></span></TD>
</TR>
<TR>
<TD>性别:</TD>
<TD>
<SELECT NAME="sex" id="sex">
<option value="1">男</option>
<option value="0">女</option>
</SELECT>
</TD>
</TR>
<TR>
<TD>地址:</TD>
<td><input name="address"/></td>
</TR>
<TR>
<TD>联系电话:</TD>
<TD><input name="phone"/></TD>
</TR>
<TR>
<TD>职位:</TD>
<TD><input name="position"/></TD>
</TR>
<TR>
<TD>用户类型:</TD>
<TD>
<SELECT id="role" name="userlevel">
<option>请选择</option>
<option value="admin">管理员</option>
<option value="service">服务人员</option>
<option value="user">普通客户</option>
</SELECT><span id="userlevel1"></span>
</TD>
</TR>
<TR>
<TD>用户密码:</TD>
<td><input type="password" name="password"/><span id="password1"></span></td>
</TR>
<TR>
<TD><input type="submit" value="提交"/></TD>
<td><td>
</TR>
</TABLE>
</form>
</body>
把数据传递到AddUserServlet中,由Servlet获得页面传递的数据,再对数据进行相应的处理,AddUserServlet文件的源代码如下:
package com.cn.users;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class AddUserServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
this.doPost(request, response);
out.flush();
out.close();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
int id= Integer.parseInt(request.getParameter("id"));
String username = request.getParameter("username");
String dentity= request.getParameter("dentity");
String fullname= request.getParameter("fullname");
int sex = Integer.parseInt(request.getParameter("sex"));
String address= request.getParameter("address");
String phone= request.getParameter("phone");
String position= request.getParameter("position");
String userlevel= request.getParameter("userlevel");
String password= request.getParameter("password");
UsersVo usersVo = new UsersVo();
usersVo.setId(id);
usersVo.setUsername(username);
usersVo.setDentity(dentity);
usersVo.setFullname(fullname);
usersVo.setSex(sex);
usersVo.setAddress(address);
usersVo.setPhone(phone);
usersVo.setPosition(position);
usersVo.setUserlevel(userlevel);
usersVo.setPassword(password);
AddUsers addUsers = new AddUsers();
addUsers.addusers(usersVo);
System.out.println("添加成功!");
response.sendRedirect("ShowUsersServlet");
out.flush();
out.close();
}
}
在Servlet中获得数据以后,把数据放入usersVo对象中,然后调用添加实现类AddUsers的addusers()方法,然后跳转到查询的Servlet,在还没有查询Servlet之前,可以先不让页面跳转。实现类AddUser的源代码如下:
package com.cn.users;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.cn.jdbc.JDBC_Connection;
public class AddUsers {
public void addusers(UsersVo usersVo){
Connection conn = null;
PreparedStatement pstm = null;
ResultSet rs = null;
try {
conn= JDBC_Connection.getConnection();
String sql =
"insert into users(username,dentity,fullname,sex,address,phone,position,userlevel,password,id) values (?,?,?,?,?,?,?,?,?,?)";
pstm = conn.prepareStatement(sql);
pstm.setInt(1, usersVo.getId());
pstm.setString(2, usersVo.getUsername());
pstm.setString(3, usersVo.getDentity());
pstm.setString(4, usersVo.getFullname());
pstm.setInt(5, usersVo.getSex());
pstm.setString(6, usersVo.getAddress());
pstm.setString(7,usersVo.getPhone());
pstm.setString(8, usersVo.getPosition());
pstm.setString(9, usersVo.getUserlevel());
pstm.setString(10, usersVo.getPassword());
pstm.executeUpdate();
System.out.println("添加users成功!");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
添加用户的页面显示效果如下图所示:
5.2显示全部用户
当添加成功以后页面跳转到显示全部用户的页面,或者在用户管理模块的主页面单击【查询用户】按钮时,进入显示全部用户信息的页面,显示全部用户信息用到以下几个文件:
- showUsers.jsp:用户显示全部用户的页面。
- ShowUsers.java:显示用户信息的实现类。
- ShowUsersServlet.java:显示用户信息的Servlet。
在showUsers.jsp文件中用到JSTL标签和 EL表达式来取值,同时提供一些操作的超链接。showUsers.jsp文件源代码如下:
<%@ page language="java" import="com.cn.users.*" pageEncoding="gb2312"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<body background="F:\myeclipse\Car\WebRoot\pic\logo04.jpg">
<TR>
<TD><font color="lightblue">序号</font></TD>
<TD><font color="lightblue">登录名</font></TD>
<TD><font color="lightblue">身份证</font></TD>
<TD><font color="lightblue">姓名</font></TD>
<TD><font color="lightblue">性别</font></TD>
<TD><font color="lightblue">职位</font></TD>
<TD><font color="lightblue">用户类型</font></TD>
<TD><font color="lightblue">操作</font></TD>
</TR>
<c:forEach items="${list}" var="list">
<TR>
<TD>${list.id }</TD>
<TD>${list.username }</TD>
<TD>${list.dentity }</TD>
<TD>${list.fullname }</TD>
<TD>
<c:if test="${list.sex ==1}">男</c:if>
<c:if test="${list.sex ==0}">女</c:if>
</TD>
<TD>${list.position }</TD>
<TD>
<c:if test="${list.userlevel eq 'admin'}">管理员</c:if>
<c:if test="${list.userlevel eq 'service'}">服务人员</c:if>
<c:if test="${list.userlevel eq 'user'}">普通客户</c:if>
</TD>
<TD>
<a href="/Car/ShowUserByIDServlet?id=${list.id }&code=show">查看</a>
<a href="/Car/ShowUserByIDServlet?id=${list.id }&code=update"">修改</a>
<a href="/Car/DeleteUserServlet?id=${list.id }">删除</a>
</TD>
</TR>
</c:forEach>
</TABLE>
<div align="center">
<c:if test="${page ==1}"><font color="lightblue">首页</font></c:if>
<c:if test="${page > 1}"><a href="/Car/ShowUsersServlet?page=1">首页</a></c:if>
<c:if test="${page ==1}"><font color="lightblue">上一页</font></c:if>
<c:if test="${page > 1}"><a href="/Car/ShowUsersServlet?page=${page-1 }">上一页</a></c:if>
<c:if test="${page == maxpage}"><font color="lightblue">下一页</font></c:if>
<c:if test="${page < maxpage}"><a href="/Car/ShowUsersServlet?page=${page+1 }">下一页</a></c:if>
<c:if test="${page == maxpage}"><font color="lightblue">末页</font></c:if>
<c:if test="${page < maxpage}"><a href="/Car/ShowUsersServlet?page=${maxpage }">末页</a></c:if>
</div>
</body>
这个页面是从现实用户信息的Servlet中获得的,显示用户信息的ShowUsersServlet的源代码如下:
package com.cn.users;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ShowUsersServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
this.doPost(request, response);
out.flush();
out.close();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
ShowUsers showUsers = new ShowUsers();
List<UsersVo> list = new ArrayList<UsersVo>();
String page1 = request.getParameter("page");
int page =1;
if(page1 != null){
page = Integer.parseInt(page1);
}
list = showUsers.showByPage(page);
int maxpage = showUsers.maxpage();
request.setAttribute("list", list);
request.setAttribute("page", page);
request.setAttribute("maxpage", maxpage);
request.getRequestDispatcher("showUsers.jsp").forward(request, response);
out.flush();
out.close();
}
}
这个Servlet调用了显示全部用户信息的实现类,在实现类中有分页查询的方法和查询最大页数的方法,实现类ShowUsers的源代码如下:
package com.cn.users;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.sql.ResultSet;
import com.cn.jdbc.JDBC_Connection;
public class ShowUsers {
public List<UsersVo> showByPage(int page){
int i=0;
ResultSet rs=null;
PreparedStatement pstmt=null;
Connection conn=null;
List<UsersVo> list=new ArrayList<UsersVo>();
try{
conn=JDBC_Connection.getConnection();
String sql="select * from users order by id desc limit?,5 ";
pstmt=conn.prepareStatement(sql);
pstmt.setInt(1,page);
rs= pstmt.executeQuery();
while(rs.next()){
UsersVo usersVo=new UsersVo();
usersVo.setId(rs.getInt("id"));
usersVo.setUsername(rs.getString("username"));
usersVo.setDentity(rs.getString("dentity"));
usersVo.setFullname(rs.getString("fullname"));
usersVo.setSex(rs.getInt("sex"));
usersVo.setAddress(rs.getString("address"));
usersVo.setPhone(rs.getString("phone"));
usersVo.setPosition(rs.getString("position"));
usersVo.setUserlevel(rs.getString("userlevel"));
usersVo.setPassword(rs.getString("password"));
list.add(usersVo);
}
}catch (SQLException e){
//TODO Auto-generated catch block
e.printStackTrace();
}finally{
JDBC_Connection.free(rs,conn,pstmt);
}
return list;
}
public int maxpage(){
Connection conn=null;
Statement stmt=null;
ResultSet rs=null;
int count=0;
int maxpage=0;
try{
conn=JDBC_Connection.getConnection();
stmt=conn.createStatement();
String sql="select count(*) from users";
rs=stmt.executeQuery(sql);
while(rs.next()){
count=rs.getInt(1);
}
}catch(SQLException e){
//TODO Auto-generated catch block
e.printStackTrace();
}finally{
JDBC_Connection.free(rs,conn,stmt);
}
maxpage=(count+4)/5;
return maxpage;
}
}
当打开查询页面时,页面显示效果如下图所示:
5.3修改用户
在显示全部用户的页面中可以单击【修改】超链接打开修改用户的页面,对用户信息进行修改,修改用户信息的操作用到以下几个文件:
- updateUsers.jap:用于输入修改数据。
- com.cn.users.UpdateUser.java:修改用户的实现类。
- com.cn.users.UpdateUserServlet.java:修改用户的Servlet。
- ShowUserById.java:查询出单条用户信息实现类。
- ShowUserByIdServlet.java:查询出单条用户信息的Servlet。
当在显示全部用户信息的页面中单击【修改】超链接时,打开查询出单条用户信息的Servlet,该Servlet根据传递的参数来查询出单条用户信息,然后根据code值来跳转到不同的页面。ShowUsersByIdServlet.java的源代码如下:
package com.cn.users;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ShowUserByIDServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
this.doPost(request, response);
out.flush();
out.close();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
int id = Integer.parseInt(request.getParameter("id"));
String code = request.getParameter("code");
ShowUserById userById = new ShowUserById();
UsersVo usersVo = new UsersVo();
usersVo = userById.showById(id);
System.out.println(usersVo.getUserlevel());
request.setAttribute("usersVo", usersVo);
if(code.equals("show")){
request.getRequestDispatcher("showUserManager.jsp").forward(request, response);
}else if(code.equals("update")){ request.getRequestDispatcher("updateUsers.jsp").forward(request, response);
}
out.flush();
out.close();
}
}
该Servlet调用了查询单个用户信息的实现类,在实现类中查询出对应的用户信息。实现该类ShowUsersById.java的源代码如下:
package com.cn.users;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.cn.jdbc.JDBC_Connection;
public class ShowUserById {
public UsersVo showById(int id) {
UsersVo usersVo = null;
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
conn = JDBC_Connection.getConnection();
pstmt = conn.prepareStatement("select * from users where id = ?");
pstmt.setInt(1, id);
rs =pstmt.executeQuery();
while(rs.next()){
usersVo= new UsersVo();
usersVo.setId(rs.getInt("id"));
usersVo.setUsername(rs.getString("username"));
usersVo.setDentity(rs.getString("dentity"));
usersVo.setFullname(rs.getString("fullname"));
usersVo.setSex(rs.getInt("sex"));
usersVo.setAddress(rs.getString("address"));
usersVo.setPhone(rs.getString("phone"));
usersVo.setPosition(rs.getString("position"));
usersVo.setUserlevel(rs.getString("userlevel"));
usersVo.setPassword(rs.getString("password"));
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
JDBC_Connection.free(rs, conn, pstmt);
}
return usersVo;
}
}
打开修改的JSP页面时,会把该用户信息显示在页面中,修改用户信息的showUsers.jsp文件源代码如下:
<%@ page language="java" import="com.cn.users.*" pageEncoding="gb2312"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<body background="F:\myeclipse\Car\WebRoot\pic\logo04.jpg">
<TR>
<TD><font color="lightblue">序号</font></TD>
<TD><font color="lightblue">登录名</font></TD>
<TD><font color="lightblue">身份证</font></TD>
<TD><font color="lightblue">姓名</font></TD>
<TD><font color="lightblue">性别</font></TD>
<TD><font color="lightblue">职位</font></TD>
<TD><font color="lightblue">用户类型</font></TD>
<TD><font color="lightblue">操作</font></TD>
</TR>
<c:forEach items="${list}" var="list">
<TR>
<TD>${list.id }</TD>
<TD>${list.username }</TD>
<TD>${list.dentity }</TD>
<TD>${list.fullname }</TD>
<TD>
<c:if test="${list.sex ==1}">男</c:if>
<c:if test="${list.sex ==0}">女</c:if>
</TD>
<TD>${list.position }</TD>
<TD>
<c:if test="${list.userlevel eq 'admin'}">管理员</c:if>
<c:if test="${list.userlevel eq 'service'}">服务人员</c:if>
<c:if test="${list.userlevel eq 'user'}">普通客户</c:if>
</TD>
<TD>
<a href="/Car/ShowUserByIDServlet?id=${list.id }&code=show">查看</a>
<a href="/Car/ShowUserByIDServlet?id=${list.id }&code=update"">修改</a>
<a href="/Car/DeleteUserServlet?id=${list.id }">删除</a>
</TD>
</TR>
</c:forEach>
</TABLE>
<div align="center">
<c:if test="${page ==1}"><font color="lightblue">首页</font></c:if>
<c:if test="${page > 1}"><a href="/Car/ShowUsersServlet?page=1">首页</a></c:if>
<c:if test="${page ==1}"><font color="lightblue">上一页</font></c:if>
<c:if test="${page > 1}"><a href="/Car/ShowUsersServlet?page=${page-1 }">上一页</a></c:if>
<c:if test="${page == maxpage}"><font color="lightblue">下一页</font></c:if>
<c:if test="${page < maxpage}"><a href="/Car/ShowUsersServlet?page=${page+1 }">下一页</a></c:if>
<c:if test="${page == maxpage}"><font color="lightblue">末页</font></c:if>
<c:if test="${page < maxpage}"><a href="/Car/ShowUsersServlet?page=${maxpage }">末页</a></c:if>
</div>
</body>
确认修改后,会打开修改的Servlet,该Servlet获得页面传递过来的数据,然后调用实现类更新数据库中的数据。UpdateUsersServlet.java文件的源代码如下:
package com.cn.users;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class UpdateUserServlet extends HttpServlet {
public void destroy() {
super.destroy();
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
this.doPost(request, response);
out.flush();
out.close();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
System.out.println("进了UpdateServlet!!!");
String username = request.getParameter("username");
System.out.println(username+"$$$$$$");
String dentity= request.getParameter("dentity");
String fullname= request.getParameter("fullname");
int sex = Integer.parseInt(request.getParameter("sex"));
String address= request.getParameter("address");
String phone= request.getParameter("phone");
String position= request.getParameter("position");
String userlevel= request.getParameter("userlevel");
String password= request.getParameter("password");
System.out.println(username+"$$$$$$");
System.out.println("333333333333");
UsersVo usersVo = new UsersVo();
usersVo.setUsername(username);
usersVo.setDentity(dentity);
usersVo.setFullname(fullname);
usersVo.setSex(sex);
usersVo.setAddress(address);
usersVo.setPhone(phone);
usersVo.setPosition(position);
usersVo.setUserlevel(userlevel);
usersVo.setPassword(password);
System.out.println("111111111");
UpdateUser updateUser = new UpdateUser();
updateUser.updateUser(usersVo);
System.out.println("修改成功!");
response.sendRedirect("ShowUsersServlet");
out.flush();
out.close();
}
public void init() throws ServletException { }
}
这个Servlet通过调用UpdateUser.jsp文件中的方法来实现数据库的更新,UpdateUser.java文件的源代码如下:
package com.cn.users;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import com.cn.jdbc.JDBC_Connection;
public class UpdateUser {
public void updateUser(UsersVo usersVo){
Connection conn=null;
PreparedStatement pstmt=null;
try{
String sql="update users set username=?, dentity=?, fullname=?, sex=?, address=?, phone=?, position=?, userlevel=?, password=? where id=?";
conn=JDBC_Connection.getConnection();
pstmt=conn.prepareStatement(sql);
pstmt.setString(1, usersVo.getUsername());
pstmt.setString(2, usersVo.getDentity());
pstmt.setString(3, usersVo.getFullname());
pstmt.setInt(4, usersVo.getSex());
pstmt.setString(5, usersVo.getAddress());
pstmt.setString(6, usersVo.getPhone());
pstmt.setString(7, usersVo.getPosition());
pstmt.setString(8, usersVo.getUserlevel());
pstmt.setString(9, usersVo.getPassword());
pstmt.setInt(10, usersVo.getId());
pstmt.executeUpdate();
}catch(SQLException e){
//TODO Auto-generated catch block
e.printStackTrace();
}finally{
JDBC_Connection.free(null,conn,pstmt);
}
}
}
修改用户信息的页面如下图所示:
5.4删除用户信息
在显示全部用户信息的页面中可以单击【删除】超链接,删除该用户信息。删除用户信息用到以下几个文件:
- showUsers.jsp:提供删除链接。
- DeleteUser.java:删除用户实现类。
- DeleteUserServlet.java:删除用户的Servlet。
showUsers.jsp文件是显示全部用户的内容,在显示全部用户的页面中单击【删除】超链接后打开删除用户信息的Servlet(DeleteUserServlet),在Servlet中获得用户id,然后调用实现类中的删除方法。DeleteUserServlet.java文件源代码如下:
package com.cn.users;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class DeleteUserServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
this.doPost(request, response);
out.flush();
out.close();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
int id=Integer.parseInt(request.getParameter("id"));
DeleteUser deleteUser=new DeleteUser();
deleteUser.deleteUser(id);
response.sendRedirect("ShowUsersServlet");
System.out.println("删除成功");
out.flush();
out.close();
}
}
这个Servlet中调用了DeleteUser实现类的deleteUser()方法,该方法是用来根据id删除用户信息的,DeleteUser.java文件的源代码如下:
package com.cn.users;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import com.cn.jdbc.JDBC_Connection;
public class DeleteUser {
public void deleteUser(int id){
Connection conn=null;
PreparedStatement pstmt=null;
try{
conn=JDBC_Connection.getConnection();
String sql="delete from users where id=?";
pstmt=conn.prepareStatement(sql);
pstmt.setInt(1, id);
pstmt.executeUpdate();
}catch(SQLException e){
//TODO Auto-generated catch block
e.printStackTrace();
}finally{
JDBC_Connection.free(null,conn,pstmt);
}
}
public static void main(String[] args) {}
}
5.5显示单个用户的详细信息
在显示全部用户的页面可以单击【查看】超链接查看单个用户的详细信息,查看单个用户的详细信息用到以下几个文件:
- showUserManager.jsp:显示单个用户详细信息。
- showUsers.jsp:提供查看链接。
- ShowUserById.java:查询单个用户信息实现类。
- ShowUserByIdServlet.jva:查询单个用户信息Servlet。
showUserManager.jsp文件的源代码如下:
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<body background="F:\myeclipse\Car\WebRoot\pic\logo04.jpg">
<form name="form" action="" method="post">
<TABLE align="center">
<TR>
<TD></TD>
<TD>高级查询</TD>
</TR>
<TR>
<TD>序号:</TD>
<TD>${usersVo.id }</TD>
</TR>
<TR>
<TD>登录名:</TD>
<TD>${usersVo.username }</TD>
</TR>
<TR>
<TD>身份证:</TD>
<TD>${usersVo.dentity }</TD>
</TR>
<TR>
<TD>姓名:</TD>
<TD>${usersVo.fullname }</TD>
</TR>
<TR>
<TD>性别:</TD>
<TD><c:if test="${usersVo.sex ==1}">男 </c:if>
<c:if test="${usersVo.sex ==0}">女 </c:if>
</TD>
</TR>
<TR>
<TD>地址:</TD>
<td>${usersVo.address }</td>
</TR>
<TR>
<TD>联系电话:</TD>
<TD>${usersVo.phone }</TD>
</TR>
<TR>
<TD>职位:</TD>
<TD>${usersVo.position }</TD>
</TR>
<TR>
<TD>用户类型:</TD>
<TD><c:if test="${usersVo.userlevel eq 'admin'}">管理员</c:if>
<c:if test="${usersVo.userlevel eq 'service'}">服务人员</c:if>
<c:if test="${usersVo.userlevel eq 'user'}">普通客户</c:if>
</TD>
</TR>
<TR>
<TD>用户密码:</TD>
<td>${usersVo.password }</td>
</TR>
<TR>
<TD><input type="button" value="返回" onclick="javascript:history.go(-1);" ></TD>
<td> </td>
</TR>
</TABLE>
</form>
</body>
该操作用到的其他文件之前都编写过了,查看单个用户信息的页面如下图所示:
6.汽车管理模块
汽车管理模块主要是对汽车租赁情况的一些操作,包括新增汽车信息、修改汽车信息(包括汽车租赁信息)、查看汽车信息、删除汽车登记等,这个模块中都用到了实体类CarsVo,类CarsVo的源代码参考上文用户管理模块的相应文件。
6.1新增汽车
新增汽车主要是把汽车的信息录入数据库,这个操作用到以下几个文件:
- addCar.jsp:用于输入添加的数据。
- AddCar.java:处理添加的实现类。
- AddCarServlet.java:处理添加的Servlet。
addCar.jsp文件的源代码参考上文用户管理模块的相应文件。
提交输入数据后,打开添加的Servlet(AddCarServlet),AddCarServlet的源代码参考上文用户管理模块的相应文件。
实现类AddCar的源代码参考上文用户管理模块的相应文件。
访问添加汽车信息的页面如下图所示:
6.2查看全部汽车信息
当添加成功以后或者登记查看汽车信息的时候,会打开显示全部汽车信息的页面,在页面中分页显示汽车信息。显示汽车信息用到的文件用到以下:
●showCar.jsp:显示全部汽车信息的页面
●ShowCars.java:查询全部汽车信息的实现类
●ShowCarsServlet.java:显示全部汽车信息的Servlet
ShowCarsServlet源代码参考用户管理模块的相应文件。
在这个Servlet中调用实现类ShowCars的方法,把数据库中的数据查询出来,然后转发到JSP页面中。实现类ShowCars的源代码参考用户管理模块的相应文件。
显示汽车信息的showCar.jsp文件源代码参考用户管理模块的相应文件。
在显示全部汽车信息的页面中分页显示出汽车的信息,同时提供查看单个汽车详细信息的超链接、修改汽车信息的超链接,还有删除汽车信息的超链接。显示全部汽车信息的页面如下图所示:
6.3查看单个汽车详细信息
在显示全部汽车信息的页面中,单击【查看】超链接可以查看单个汽车的信息。查看单个汽车信息操作用到以下文件:
- QueryById.java:从数据库中查询单个汽车信息的业务
- QueryByIdServlet.java:处理查询单个信息的业务
- showCarManager.jsp:显示单个汽车信息页面
当单击【查看】超链接时打开QueryByIdServle,由Servlet来处理该请求。QueryByIdSevlet类的源代码参考用户管理模块的相应文件。
在这个Servlet中,调用了实现类QueryById来查看单个汽车信息的详细信息,然后转发到页面显示出查询结果。实现类QueryById文件的源代码参考用户管理模块的相应文件。
在页面中显示出单个汽车的详细信息,这些信息中有的是数字类型的数据,在页面显示时会改成中文显示。showCarManager.jsp文件源代码参考用户管理模块的相应文件。
访问显示单个汽车信息的页面效果如下图所示:
6.4修改汽车信息
修改汽车信息的时候要先根据要修改的汽车id来查询汽车信息,然后把这些数据传到修改页面,并在页面中显示出来。修改汽车信息操作用到以下文件:
- QueryById.java:查询要修改的汽车信息实现类
- QueryByIdServlet.java:查询要修改的汽车信息的Servlet
- UpdateCar.java:修改汽车信息的实现类
- UpdateCarServlet.java:修改汽车信息的Servlet
- showCar.jsp:提供修改超链接
- updateCar.jsp:修改信息页面
QueryById.java和 QueryByIdServlet.java两个文件在查看单个汽车信息时已经编好,updateCar.jsp文件的源代码参考用户管理模块的相应文件。
在该页面中提交数据以后,打开修改信息的Servlet,即UpdateCarServlet.java文件,此文件源代码参考用户管理模块的相应文件。
这个类中调用了实现类UpdateCar的修改方法updatecar(),由updatecar()方法更新数据库中的数据。UpdateCar.java文件源代码参考用户管理模块的相应文件。
修改汽车信息的页面如下图所示。当修改成功后,返回显示全部汽车信息的页面。
6.5删除单个汽车信息
在显示全部汽车信息的页面中,单击【删除】超链接就可以把该条汽车信息删除。删除单条汽车信息用到的文件有以下。
- showCar.jsp:提供删除链接
- DeleteCar.java:删除单个汽车信息实现类
- DeleteCarSevlet.java:删除单个汽车信息Servlet
删除单个汽车信息Servlet,即DeleteCarServlet参考用户管理模块。
在这个Servlet中调用了删除单个汽车信息的实现类DeleteCar的删除方法deleteCar(),实现类DeleteCar参考用户管理模块:
7.客户管理模块
客户管理模块主要是对租用汽车的客户信息进行操作,这些操作包括对客户信息的增删改操作,对客户信息进行管理能够增强对业务动向的掌握。客户管理模块所有的类都在com.cn.customers包下,用户管理模块都要用到用户实体类customersVo,customerVo类中的变量如下:
package com.cn.customers;
public class customersVo {
private int id;
private String dentity;//身份证
private String custname;//姓名
private int sex;//性别
private String address;//地址
private String phone;//电话
private String career;//职业
private String password;//密码
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getCareer() {
return career;
}
public void setCareer(String career) {
this.career = career;
}
public String getCustname() {
return custname;
}
public void setCustname(String custname) {
this.custname = custname;
}
public int getId() {
return id;
}
public String getDentity() {
return dentity;
}
public void setDentity(String dentity) {
this.dentity = dentity;
}
public void setId(int id) {
this.id = id;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public int getSex() {
return sex;
}
public void setSex(int sex) {
this.sex = sex;
}
}
7.1添加客户信息
添加客户信息主要是把一些客户信息录入数据库,主要能够保证数据的持久。在添加信息页面输入信息以后,打开添加的Servlet,由添加信息的Servlet调用实现类中的添加方法。
- AddCustomer.jsp:添加客户的页面。
- AddCustomers.java:添加客户的实现类。
- AddCustomersServlet.java:添加客户的Servlet。
方法和实现和用户类似,仅介绍添加客户信息的页面如下图所示:
7.2查看全部客户信息
当添加成功以后页面跳转到显示全部客户的页面,或者在客户管理模块的主页面单击【查询客户】按钮时,进入显示全部客户信息的页面,显示全部客户信息用到以下几个文件:
- showCustomer.jsp:显示全部客户的页面。
- ShowAllCustomer.java:显示客户信息的实现类。
- ShowAllCustomerServlet.java:显示客户信息的Servlet。如图所示:
7.3修改客户信息
在显示全部客户信息的页面中,单击【修改】超链接,就会传递参数id和code,打开后台的Servlet(查看单个客户信息的Servlet),由Servlet查询出id对象的客户信息,然后根据code值跳转到修改客户信息的页面,修改成功后返回显示全部客户信息的页面。修改客户信息的页面如下图所示:
- updateCustomer.jap:用于输入修改数据。
- com.cn.customers. UpdateCustomer.java:修改客户的实现类。
- com.cn. customers. UpdateCustomerServlet.java:修改客户的Servlet。
- ShowCustomerById.java:查询出单条客户信息实现类。
- ShowCustomerByIdServlet.java:查询出单条客户信息的Servlet。
7.4删除客户信息
在显示全部客户信息的页面中单击【删除】超链接,同时传递一个参数id,打开删除客户信息的Servlet,由Servlet调用删除实现类中的根据id删除的方法,把数据删除,然后返回显示全部客户信息的页面。
- showCustomer.jsp:提供删除链接。
- DeleteCustomer.java:删除客户实现类。
- DeleteCustomerServlet.java:删除客户的Servlet。
8.业务管理模块
业务管理模块有汽车出租、汽车入库、出库单管理和检查单管理。汽车出租和汽车入库是对汽车信息表进行操作,出库单管理是对出库单表进行操作,检查管理是对检查单表进行操作。
8.1汽车出租
单击上图左侧菜单中【业务管理】下的【汽车出租】,打开如下图所示汽车出租操作页面。
在该页面中,输入客户身份证号码后,打开如下图所示的汽车出租登记页面。输入客户身份证号后会查询出数据库中的客户信息,然后根据客户信息来操作汽车出租。
主要用到的页面时:
- addRenttable.jsp:添加租车的页面。
- AddCarRenttable.java添加租车的实现类。
- AddCarRenttableServlet.java:添加租车的Servlet。
登记成功后,会提示操作成功。注意,在汽车出租操作之前,必须要对客户信息进行登记。
8.2出租单管理
单击出租单信息页面左侧菜单中【业务管理】下的【出租单管理】,打开输入查询条件页面。该页面是一个查询页面,可以根据条件来查询出出租单的信息。
提交查询条件以后,打开条件查询的Servlet,由该Servlet获得页面传递过来的数据,调用条件查询的实现类,该实现类中使用一个动态查询的SQL语句,因为查询的条件的数量是动态的,可能查询时只输入了一个查询条件,或者不输入查询条件,当不输入条件时,则查询出全部的信息。主要用到下面的页面:
- showRenttable.jsp:显示全部租车的页面。
- ShowCarRenttable.java:显示租车信息的实现类。
- ShowCarRenttableServlet.java:显示租车信息的Servlet。
在上图所示的页面中,对出租单进行增删改查操作,出租单的增删改查方法跟用户管理模块、汽车管理模块的增删改查方法相似。
8.3检查单管理
检查单管理是对检查单的增删改查操作,单击查询出租单信息的页面左侧菜单中【业务管理】下的【检查单管理】,打开检查单条件查询页面。
单击【查询】时,把页面的数据传递到查询的Servlet,如果不输入查询条件,则查询全部检查单信息。Servlet调用查询实现类中的方法,把查询的数据转发到显示查询结果的页面中,查询检查单信息的页面如下图所示:
- Showchecktable.jsp:显示全部检查单的页面。
- ShowChecktable.java:显示检查的实现类。
- ShowChecktableServlet.java:显示检查单信息的Servlet。
在这个页面中提供了对检查单的增删改查操作,操作方法跟汽车管理模块的增删改查方法类似。单击【查询】按钮时,显示出单个检查单的详细信息;单击【修改】按钮时,打开修改页面,修改数据成功后,返回显示全部检查单信息的页面;当单击【删除】按钮时,则把该条数据删除,删除成功后返回显示全部检查单信息的页面。
9.心得体会
这次汽车租赁系统的设计,用到了JSP+Servlet+Bean的设计思路,整体架构大家也考虑到了,不过还是会有缺点的,我们会继续努力。具体到每一个页面的设计,大家都是用了很大的努力,一遍一遍的调试,有时数据库的问题也会影响到页面显示,又要重新学习。但大家都信心满满,不断修改。最终的作品可能不尽如人意,但重要的是过程,我们收获很多。
通过两周JSP的课程设计,不仅学到了很多JSP相关技能,也加深了对Java网络编程的体会。使我们能够学以致用,实际操作技能和独立解决问题的能力得到很大提高。另一方面,也发现了学习中的不足和薄弱点,从而着重训练。从选题到具体分工设计,整个团队都是在热烈地讨论中进行,和同学们相互探讨,相互学习,相互监督。学会了合作,学会了运筹帷幄,学会了理解,也学会了做人与处世。