【无标题】

该文档详细介绍了使用Javaweb技术开发的酒店管理系统,包括管理员和系统管理员的各个功能模块,如员工管理、订单处理、房间管理以及数据统计。系统采用Eclipse作为开发环境,ApacheTomcat作为Web容器,Git进行版本控制,Maven构建项目,并通过DAO工厂模式与MySQL数据库交互,实现了数据的增删改查操作。
摘要由CSDN通过智能技术生成

计算机与信息工程学院

项目开发文档

项目名称: 基于Java web的酒店管理系统
学 期: 2021-2022-1
课程名称: Java Web程序设计

三、项目总体介绍
开发环境:Eclipse
Web容器:Apache Tomcat
版本控制工具:Git
项目构建工具:maven
后端技术:Servlet
前端框架:HTML、CSS、Jquery
功能模块介绍:
酒店管理系统主要分为两部分:酒店管理员和系统管理员
酒店管理员部分主要功能有客房管理,其中包括查询客房,添加客房,房间概览;入住管理,其中包括房间入住,房间续费,房间退订;订单管理,其中包括预定订单,入住订单,续费订单,历史订单,订单结算。
系统管理员部分主要功能有员工管理,其中包括编辑员工,新增员工,删除员工,查询员工;业务数据统计,其中包括每日订单量统计,员工业绩统计,每日房间入住统计,每日营业额统计

四、关键功能介绍
系统管理员
4.1 功能 管理(新增员工)
(1)新增用户管理员登陆后点击管理,可以对员工进行添加
在staff_mana下写建立staff_add.jsp
function get_Addform()获取输入的表单
在bean包下建立Employee类,定义员工的各项信息
在dao包下建立IEmployeeDao接口,定义对员工信息的添加操作
public int staff_add(Employee employee);
在dao.impl下建立EmployeeDaoImpl,实现操作的完整代码
在servlet包下接收表单,并定义employee对象,对数据进行封装,再有IEmployeeDao employeeDao = DaoFactory.getEmployeeDaoInstance();来调用,实现添加功能
在factory下DaoFactory.java
public static IEmployeeDao getEmployeeDaoInstance() {
return new EmployeeDaoImpl();
}
(2) 关键代码
EmployeeDaoImpl
@Override
public int staff_add(Employee employee) {

	int result = 0;
	try {

		// 连接数据库
		String sql = "select * from `employee` where `employeeID`=?";
		PreparedStatement pre = DBCon.executePreparedStatement(sql);// 实例化预编译语句
		pre.setInt(1, employee.getEmployeeID());
		ResultSet rs = pre.executeQuery();

		// 如果查找为null,则说明无此房间,添加
		if (!rs.next()) {

			sql = "insert into  `employee` values(?,?,?,?,?,?,?,?)";// 预编译语句,“?”代表参数
			pre = DBCon.executePreparedStatement(sql);// 实例化预编译语句
			pre.setInt(1, employee.getEmployeeID());//
			pre.setString(2, employee.getName());
			pre.setString(3, employee.getBirthday());
			pre.setString(4, employee.getIdcard());
			pre.setString(5, employee.getPassword());
			pre.setString(6, employee.getEntryTime());
			pre.setString(7, employee.getPhoneNumber());
			pre.setString(8, employee.getRemark());

			result = pre.executeUpdate();// 执行

		}

	} catch (Exception e) {
		e.printStackTrace();
	}
	DBCon.close();
	return result;
}

staff_add_servlet.java
// 接收表单
String employeeID = request.getParameter(“employeeID”);
String name = request.getParameter(“name”);
String birthday = request.getParameter(“birthday”);
String idcard = request.getParameter(“idcard”);
String password = request.getParameter(“password”);
String entryTime = request.getParameter(“entryTime”);
String phoneNumber = request.getParameter(“phoneNumber”);
String remark = request.getParameter(“remark”);

	Employee employee = new Employee();
	employee.setEmployeeID(Integer.parseInt(employeeID));
	employee.setName(name);
	employee.setBirthday(birthday);
	employee.setIdcard(idcard);
	employee.setPassword(password);
	employee.setEntryTime(entryTime);
	employee.setPhoneNumber(phoneNumber);
	employee.setRemark(remark);

	// 处理插入数据后的行为
	IEmployeeDao employeeDao = DaoFactory.getEmployeeDaoInstance();

(3)截图
若插入信息有误

无误,显示提交成功

4.2 功能 管理(展示员工信息)
(1)功能介绍及主要思路
新增用户管理员登陆后点击管理,可以编辑员工信息
在staff_mana下写建立staff_show.jsp
function ()接收从后端传来的员工信息
在bean包下建立Employee类,定义员工的各项信息
在dao包下建立IEmployeeDao接口,定义对员工信息的展示操作
public int staff_show();
在dao.impl下建立EmployeeDaoImpl,实现操作的完整代码
在servlet包下IEmployeeDao employeeDao = DaoFactory.getEmployeeDaoInstance();来调用,实现展示功能
在factory下DaoFactory.java
public static IEmployeeDao getEmployeeDaoInstance() {
return new EmployeeDaoImpl();
}

(2)关键代码
EmployeeDaoImpl.java
@Override
public String staff_show() {
String json = null;
List staffs_list = new ArrayList();
try {
// 执行sql语句
String sql = “select * from employee”;
PreparedStatement pre = DBCon.executePreparedStatement(sql);
ResultSet rs = pre.executeQuery();
// 添加orders信息
while (rs.next()) {
Employee staff = new Employee();
staff.setEmployeeID(rs.getInt(“employeeID”));
staff.setName(rs.getString(“name”));
staff.setBirthday(rs.getString(“birthday”));
staff.setIdcard(rs.getString(“idcard”));
staff.setPassword(rs.getString(“password”));
staff.setEntryTime(rs.getString(“entryTime”));
staff.setPhoneNumber(rs.getString(“phoneNumber”));
staff.setRemark(rs.getString(“remark”));
staffs_list.add(staff);
}
// JSON转字符串写入resp
json = JSON.toJSONString(staffs_list, SerializerFeature.WriteMapNullValue,
SerializerFeature.WriteNullListAsEmpty);
System.out.println(json);
} catch (Exception e) {
e.printStackTrace();
}
DBCon.close();
return json;
}
(3)截图

4.3 功能 管理(编辑员工信息(修改))
(1)功能介绍及主要思路
新增用户管理员登陆后点击管理,可以修改员工信息
在staff_mana下写建立staff_alter.jsp
function ()通过工号从服务器端获取员工信息
在bean包下建立Employee类,定义员工的各项信息
在dao包下建立IEmployeeDao接口,定义对员工信息的展示操作
public int staff_alter(Employee employee)
在dao.impl下建立EmployeeDaoImpl,实现操作的完整代码
在servlet包下staff_alter_alter_servlet.java创建employee对象,封装接收到的数据
IEmployeeDao employeeDao = DaoFactory.getEmployeeDaoInstance();来调用,处理接收后的数据
在factory下DaoFactory.java
public static IEmployeeDao getEmployeeDaoInstance() {
return new EmployeeDaoImpl();
}

(2)关键代码
EmployeeDaoImpl.java
@Override
public int staff_alter(Employee employee) {
int result = 0;
try {
// 连接数据库
String sql = "UPDATE employee SET employeeID=?, name=?, "
+ "birthday=?, idcard=?, password=?, entryTime=?, "
+ “phoneNumber=?, remark=? WHERE employeeID=?”;// 预编译语句,“?”代表参数
PreparedStatement pre = DBCon.executePreparedStatement(sql);// 实例化预编译语句
pre.setInt(1, employee.getEmployeeID());//
pre.setString(2, employee.getName());
pre.setString(3, employee.getBirthday());
pre.setString(4, employee.getIdcard());
pre.setString(5, employee.getPassword());
pre.setString(6, employee.getEntryTime());
pre.setString(7, employee.getPhoneNumber());
pre.setString(8, employee.getRemark());
pre.setInt(9, employee.getEmployeeID());

		result = pre.executeUpdate();
	} catch (Exception e) {
		e.printStackTrace();
	}

	DBCon.close();
	return result;
} 

(3)截图
点击修改王五一信息

输入修改手机号

点击确认,则返回staff_show.jsp,显示修改后的信息

4.4 功能 管理(编辑员工信息(删除))
(1)功能介绍及主要思路
新增用户管理员登陆后点击管理,可以删除员工信息
在bean包下建立Employee类,定义员工的各项信息
在dao包下建立IEmployeeDao接口,定义对员工信息的删除操作
public int staff_del(Employee employee);
在dao.impl下建立EmployeeDaoImpl,实现操作的完整代码
在servlet包下staff_del_servlet.java创建employee对象,封装接收到的数据
IEmployeeDao employeeDao = DaoFactory.getEmployeeDaoInstance();来调用,处理的数据
在factory下DaoFactory.java
public static IEmployeeDao getEmployeeDaoInstance() {
return new EmployeeDaoImpl();
}

(2)关键代码
EmployeeDaoImpl.java
@Override
public int staff_del(Employee employee) {
int result = 0;
try {

		String sql = "DELETE FROM `employee` WHERE `employeeID`= ?";
		PreparedStatement ps = DBCon.executePreparedStatement(sql);
		ps.setInt(1, employee.getEmployeeID());
		result = ps.executeUpdate();// 执行

		System.out.println("删除成功");
	} catch (Exception e) {
		System.out.println("删除失败");
		e.printStackTrace();
	}
	DBCon.close();
	return result;
} 

staff_alter_del_servlet.java
String employeeID = request.getParameter(“employeeID”);

	Employee employee = new Employee();
	employee.setEmployeeID(Integer.parseInt(employeeID));

	// 处理插入数据后的行为
	IEmployeeDao employeeDao = DaoFactory.getEmployeeDaoInstance();
	if (employeeDao.staff_del(employee) == 1) {
		System.out.println("添加成功,请登录");
		response.sendRedirect("/hotel_man/jsp/Staff_mana/staff_show.jsp");
	} else {
		System.out.println("添加失败,请重试");
		response.sendRedirect("/hotel_man/jsp/Staff_mana/staff_show.jsp");
	}

}

(3)截图
点击确定

信息被删除

4.5 功能 业务数据统计
(1)功能介绍及主要思路
管理员登陆后点击业务数据统计时,可以看到以图表形式展示的客房信息
graph.jsp接受从服务器传来的数据
在bean包下建立graph_stacked类,定义各项信息
private String size;
private String type;
private int emptyRoom;
private int notemptyRoom;
在servlet包下graph_stacked_servlet.java
List<graph_stacked> graphStacked_list = new ArrayList<graph_stacked>();
封装接收到的数据,并查询每一个类型剩下房间的总数和查询每一个类型全部房间的总数

(2)关键代码
graph_stacked_servlet.java
List<graph_stacked> graphStacked_list = new ArrayList<graph_stacked>();

		// 连接数据库

		PreparedStatement pre = null;
		String sql = null;
		// 查询每一个类型剩下房间的总数
		sql = "select size,type,count(roomID) as `emptyRoom` from "
				+ "(select * from `room` where (select count(1) as num from `order` where `room`.roomID = `order`.roomID and orderStatus=\"已入住\") = 0)"
				+ "temp group by temp.type";
		pre = DBCon.executePreparedStatement(sql);
		ResultSet rs1 = pre.executeQuery();

		// 查询每一个类型全部房间的总数
		sql = "select count(roomID) as `allRoom` from room GROUP BY type";
		pre = DBCon.executePreparedStatement(sql);
		ResultSet rs2 = pre.executeQuery();

		while (rs1.next() && rs2.next()) {
			graph_stacked graphStacked = new graph_stacked();
			
			graphStacked.setSize(rs1.getString("size"));
			graphStacked.setType(rs1.getString("type"));
			graphStacked.setEmptyRoom(rs1.getInt("emptyRoom"));
			
			graphStacked.setNotemptyRoom(rs2.getInt("allRoom") - rs1.getInt("emptyRoom"));


			graphStacked_list.add(graphStacked);
		}

		// JSON转字符串写入resp
		String json = JSON.toJSONString(graphStacked_list, SerializerFeature.WriteMapNullValue,
				SerializerFeature.WriteNullListAsEmpty);
		System.out.println(json);
		System.out.println(json.getClass().toString());
		response.getWriter().append(json);

	} catch (Exception e) {
		e.printStackTrace();
	}

}

(3)截图

酒店管理员
4.6 功能 业务办理(订房功能)
(1)酒店管理员订房时选择房型,填写订单,若填写完成订单后,进入订单支付
在Room_checkIn下写建立user_checkIn.jsp
function get_Addform()获取输入的表单
在bean包下建立Order类,定义用户住房的各项信息
在dao包下建立IGuestOperaterDao接口,定义对用户住房信息的添加操作
public int user_checkIn(Order order);
在dao.impl下建立GuestOperateDaoImpl,实现操作的完整代码
在servlet包checkIn_orders_servlet.java
IGuestOperateDao gueatorderDao = DaoFactory.getGuestOrderDaoInstance();来调用,实现添加功能
在factory下DaoFactory.java
public static IGuestOperateDao getGuestOperateDaoInstance() {
return new GuestOperateDaoImpl();
}
(2) 关键代码
GuestOperateDaoImpl
@Override
public int user_checkIn(Order order) {
int result = 0;
try {
String sql = “insert into ordervalues(null,?,?,?,?,?,?,?,?,?,?,?,?)”;
PreparedStatement pre = DBCon.executePreparedStatement(sql);

		pre.setString(1, order.getOrderStatus());
		pre.setString(2, order.getCustomerName());
		pre.setString(3, order.getIdcard());
		pre.setString(4, order.getCreationTime());
		pre.setInt(5, order.getRoomID());
		pre.setString(6, order.getType());
		pre.setString(7, order.getCheckInTime());
		pre.setString(8, order.getCheckOutTime());
		pre.setInt(9, order.getCheckInDays());
		pre.setString(10, order.getPhoneNumber());
		pre.setInt(11, order.getPay());
		pre.setString(12, order.getHandler());

		result = pre.executeUpdate();// 执行
	} catch (Exception e) {
		System.out.println("插入订单出错");
	}
	DBCon.close();
	return result;
}

User_checkIn_servlet.java
// 处理插入数据后的行为
IGuestOperateDao guestOperateDao = DaoFactory.getGuestOperateDaoInstance();
if (guestOperateDao.user_checkIn(order) == 1) {
System.out.println(“添加成功”);
response.sendRedirect(“/hotel_man/jsp/Room_mana/room_add.jsp”);
} else {
System.out.println(“添加失败”);
response.sendRedirect(“/hotel_man/jsp/Room_mana/room_add.jsp”);
}
(3)截图

4.7 功能 业务办理(续费功能)
(1)酒店管理员业务办理,可以点击续费功能
在Room_checkIn下写建立user_renew.jsp
function ()//获取返回的在已入住的房号
在bean包下建立RenewOrder类,定义用户住房续费的各项信息
在dao包下建立IRenewOrderDao接口,定义对用户住房信息的添加操作
public String renew_orders();
在dao.impl下建立RenewOrderDaoImpl,实现操作的完整代码
在servlet下创建user_renew_servlet.java
IRenewOrderDao reneworderDao = DaoFactory.getRenewOrderDaoInstance();来调用,实现添加功能
在factory下DaoFactory.java
public static IRenewOrderDao getRenewOrderDaoInstance() {
return new RenewOrderDaoImpl();
}
(2) 关键代码
RenewOrderDaoImpl
@Override
public String renew_orders() {
String json = null;
List orders_list = new ArrayList();
try {

		// 执行sql语句
		String sql = "select * from `reneworder`";
		PreparedStatement pre = DBCon.executePreparedStatement(sql);
		ResultSet rs = pre.executeQuery();

		// 添加orders信息

		while (rs.next()) {
			RenewOrder orders = new RenewOrder();
			orders.setRenewOrderID(rs.getInt("renewOrderID"));
			orders.setOrderID(rs.getInt("orderID"));
			orders.setCustomerName(rs.getString("customerName"));
			orders.setRoomID(rs.getInt("roomID"));
			orders.setCheckInTime(rs.getString("checkInTime"));
			orders.setOldCheckOutTime(rs.getString("oldCheckOutTime"));
			orders.setNewCheckOutTime(rs.getString("newCheckOutTime"));
			orders.setPhoneNumber(rs.getString("phoneNumber"));
			orders.setPay(rs.getInt("pay"));

			orders_list.add(orders);

		}

		// JSON转字符串写入resp
		json = JSON.toJSONString(orders_list, SerializerFeature.WriteMapNullValue,
				SerializerFeature.WriteNullListAsEmpty);
		System.out.println(json);

	} catch (Exception e) {
		e.printStackTrace();
	}
	DBCon.close();
	return json;
}

user_renew_servlet.java
// 处理插入数据后的行为
IGuestOperateDao guestOperateDao = DaoFactory.getGuestOperateDaoInstance();
if (guestOperateDao.user_renew(renewOrder) == 1 && guestOperateDao.update_orders(order) == 1) {
System.out.println(“续费成功”);
response.sendRedirect(“/hotel_man/jsp/Room_checkIn/user_renew.jsp”);
} else {
System.out.println(“续费失败”);
response.sendRedirect(“/hotel_man/jsp/Room_checkIn/user_renew.jsp”);
}
(3)截图

4.8 功能 业务办理(退房功能)
(1)酒店管理员选择退房功能
在Room_checkIn下写建立user_checkOut.jsp
Function查询已入住的房号
在bean包下建立Order类,定义用户退房的各项信息
在dao包下建立IGuestOperaterDao接口,定义对用户住房信息的添加操作
public int user_checkOut(Order order);
在dao.impl下建立GuestOperateDaoImpl,实现操作的完整代码
在servlet创建user_checkOut_servlet.java
IGuestOperateDao gueatorderDao = DaoFactory.getGuestOrderDaoInstance();来调用,实现添加功能
在factory下DaoFactory.java
public static IGuestOperateDao getGuestOperateDaoInstance() {
return new GuestOperateDaoImpl();
}
(2) 关键代码
GuestOperateDaoImpl
@Override
public int user_checkOut(Order order) {
int result = 0;
try {

		// 更新原订单的离店日期,天数,应付
		String sql = "update `order` set orderStatus=\"已退房\",checkOutTime = ?,checkInDays = checkInDays - ?,pay = pay - ? "
				+ "where orderStatus=\"已入住\" and roomID = ?";
		PreparedStatement pre = DBCon.executePreparedStatement(sql);
		pre.setString(1, order.getCheckOutTime());
		pre.setInt(2, order.getCheckInDays());
		pre.setInt(3, order.getPay()); // 实际为应退的款
		pre.setInt(4, order.getRoomID());
		result = pre.executeUpdate();// 执行
	} catch (Exception e) {
		System.out.println("插入订单出错");
	}
	DBCon.close();
	return result;
}

User_checkOut_servlet.java
// 处理插入数据后的行为
IGuestOperateDao guestOperateDao = DaoFactory.getGuestOperateDaoInstance();
if (guestOperateDao.user_checkOut(order) == 1) {
System.out.println(“退房成功”);
response.sendRedirect(“/hotel_man/jsp/Room_checkIn/user_checkOut.jsp”);
} else {
System.out.println(“添加失败”);
response.sendRedirect(“/hotel_man/jsp/Room_checkIn/user_checkOut.jsp”);
}

(3)截图

4.9 功能 客房管理功能(添加客房)
(1)酒店管理员订房时选择房型,填写订单,若填写完成订单后,进入订单支付
在Room_mana下写建立user_roomadd.jsp
function get_form()获取输入的表单信息
在bean包下建立Room类,定义房间的各项信息
在dao包下建立IRoomDao接口,定义对客房信息的添加操作
public int room_add(Room room); //添加房间
在dao.impl下建立RoomDaoImpl,实现操作的完整代码
在servlet包下建立room_add_servlet.jsp
接收表单信息,并定义room对象,对数据进行封装,再有IRoomDao roomDao = DaoFactory.getRoomDaoInstance();来调用,实现添加功能
在factory下DaoFactory.java
public static IRoomDao getRoomDaoInstance() {
return new RoomDaoImpl();
}
(2) 关键代码
RoomDaoImpl
@Override
public int room_add(Room room) {
int result = 0;
try {

		// 连接数据库
		String sql = "select * from `room` where `roomID`=?";
		PreparedStatement pre = DBCon.executePreparedStatement(sql);// 实例化预编译语句
		pre.setInt(1, room.getRoomID());//
		ResultSet rs = pre.executeQuery();

		// 如果查找为null,则说明无此房间,添加
		if (!rs.next()) {

			sql = "insert into room(roomID,size,type,price,remark) values(?,?,?,?,?)";// 预编译语句,“?”代表参数
			pre = DBCon.executePreparedStatement(sql);// 实例化预编译语句
			pre.setInt(1, room.getRoomID());//
			pre.setString(2, room.getSize());//
			pre.setString(3, room.getType());//
			pre.setInt(4, room.getPrice());//
			pre.setString(5, room.getRemark());//
			result = pre.executeUpdate();// 执行

		}

	} catch (Exception e) {
		e.printStackTrace();
	}
	DBCon.close();
	return result;
}

room_add_servlet.java
// 接收表单
String roomID = request.getParameter(“roomID”);
String size = request.getParameter(“size”);
String type = request.getParameter(“type”);
String price = request.getParameter(“price”);
String remark = request.getParameter(“remark”);

	Room room = new Room();
	room.setRoomID(Integer.parseInt(roomID));
	room.setSize(size);
	room.setType(type);
	room.setPrice(Integer.parseInt(price));
	room.setRemark(remark);

	// 处理插入数据后的行为
	IRoomDao roomDao = DaoFactory.getRoomDaoInstance();

(3)截图
添加客房

4.10 功能 客房管理功能(房间概括)
(1)酒店管理员订房时选择房型,填写订单,若填写完成订单后,进入订单支付
在Room_checkIn下写建立room_introduce.jsp
function (rooms)获取选择房间类型:空,非空
在bean包下建立Room类,定义员工的各项信息
在dao包下建立IRoomDao接口,定义对房间信息的查询操作
public String emptyRoom_search(); //查询空房间

public String unemptyRoom_search(); //查询非空房间

在dao.impl下建立RoomDaoImpl,实现操作的完整代码
在servlet包下建立room_introduce_servlet.java,匹配查询种类
IRoomDao roomDao = DaoFactory.getRoomDaoInstance();来调用,实现添加功能
在factory下DaoFactory.java
public static IRoomDao getRoomDaoInstance() {
return new RoomDaoImpl();
}
(2) 关键代码
RoomDaoImpl
@Override
public String emptyRoom_search() {
String json = null;
List<room_empty> emptyroom_list = new ArrayList<room_empty>();
try {

		String sql = "select * from `room` where roomID not in (select roomID from `order` where orderStatus='已入住')";
		PreparedStatement pre = DBCon.executePreparedStatement(sql);
		ResultSet rs = pre.executeQuery();
		while (rs.next()) {
			room_empty ept = new room_empty();
			ept.setRoomID(rs.getInt("roomID"));
			ept.setType(rs.getString("type"));
			emptyroom_list.add(ept);
		}

		json = JSON.toJSONString(emptyroom_list, SerializerFeature.WriteMapNullValue,
				SerializerFeature.WriteNullListAsEmpty);
		System.out.println(json);
	} catch (SQLException e) {
		e.printStackTrace();
	}
	DBCon.close();
	return json;
}

@Override
public String unemptyRoom_search() {
String json = null;
List<room_unempty> unemptyroom_list = new ArrayList<room_unempty>();
try {

		String sql = "select * from `order` where orderStatus='已入住'";
		PreparedStatement pre = DBCon.executePreparedStatement(sql);
		ResultSet rs = pre.executeQuery();
		while (rs.next()) {
			room_unempty upt = new room_unempty();
			upt.setCheckOutTime(rs.getString("checkOutTime"));
			upt.setCustomerName(rs.getString("customerName"));
			upt.setRoomID(rs.getInt("roomID"));
			upt.setType(rs.getString("type"));
			unemptyroom_list.add(upt);
		}
		json = JSON.toJSONString(unemptyroom_list, SerializerFeature.WriteMapNullValue,
				SerializerFeature.WriteNullListAsEmpty);
		System.out.println(json);
	} catch (SQLException e) {
		e.printStackTrace();// TODO: handle exception
	}
	DBCon.close();
	return json;
}

(3)截图

4.11 功能 订单浏览功能(入住订单)
(1)酒店管理员可以看到入住订单的详情
在bean包下建立Order类,定义订单的各项信息
在dao包下建立IOrderDao接口,列出入住订单
public String checkIn_orders();
在dao.impl下建立OrderDaoImpl,实现操作的完整代码
在servlet包下checkIn_orders_servlet接收表单IOrderDao orderDao = DaoFactory.getOrderDaoInstance();来调用,实现展示入住订单功能
在factory下DaoFactory.java
public static IOrderDao getOrderDaoInstance() {
return new OrderDaoImpl();
}
(2) 关键代码
OrderDaoImpl
@Override
public String checkIn_orders() {
String json = null;
List orders_list = new ArrayList();
try {

		// 执行sql语句
		String sql = "select * from `order` where orderStatus=\"已入住\"";
		PreparedStatement pre = DBCon.executePreparedStatement(sql);
		ResultSet rs = pre.executeQuery();

		// 添加orders信息
		while (rs.next()) {
			Order orders = new Order();
			orders.setOrderID(rs.getInt("orderID"));
			orders.setOrderStatus(rs.getString("orderStatus"));
			orders.setCustomerName(rs.getString("customerName"));
			orders.setCreationTime(rs.getString("creationTime"));
			orders.setRoomID(rs.getInt("roomID"));
			orders.setType(rs.getString("type"));
			orders.setCheckInTime(rs.getString("checkInTime"));
			orders.setCheckOutTime(rs.getString("checkOutTime"));
			orders.setCheckInDays(rs.getInt("checkInDays"));
			orders.setPhoneNumber(rs.getString("phoneNumber"));
			orders.setPay(rs.getInt("pay"));

			orders_list.add(orders);

		}

		// JSON转字符串写入resp
		json = JSON.toJSONString(orders_list, SerializerFeature.WriteMapNullValue,
				SerializerFeature.WriteNullListAsEmpty);
		System.out.println(json);
		System.out.println(json.getClass().toString());

	} catch (Exception e) {
		e.printStackTrace();
	}
	DBCon.close();
	return json;
} 

checkIn_orders_servlet.java
try {

		IOrderDao orderDao = DaoFactory.getOrderDaoInstance();
		String json = orderDao.checkIn_orders();
		response.getWriter().append(json);

	} catch (Exception e) {
		e.printStackTrace();
	}
}

(3)截图

4.12 功能 订单浏览功能(续费订单)
(1)酒店管理员可以看到入住订单的详情
在Room_checkIn下写建立user_renew.jsp
function ()//获取返回的在已入住的房号
在bean包下建立RenewOrder类,定义用户住房续费的各项信息
在dao包下建立IRenewOrderDao接口,定义对用户住房信息的添加操作
public String renew_orders();
在dao.impl下建立RenewOrderDaoImpl,实现操作的完整代码
在servlet下创建user_renew_servlet.java
IRenewOrderDao reneworderDao = DaoFactory.getRenewOrderDaoInstance();来调用,实现添加功能
在factory下DaoFactory.java
public static IRenewOrderDao getRenewOrderDaoInstance() {
return new RenewOrderDaoImpl();
}
(2) 关键代码
OrderDaoImpl
@Override
public String checkIn_orders() {
String json = null;
List orders_list = new ArrayList();
try {

		// 执行sql语句
		String sql = "select * from `order` where orderStatus=\"已入住\"";
		PreparedStatement pre = DBCon.executePreparedStatement(sql);
		ResultSet rs = pre.executeQuery();

		// 添加orders信息
		while (rs.next()) {
			Order orders = new Order();
			orders.setOrderID(rs.getInt("orderID"));
			orders.setOrderStatus(rs.getString("orderStatus"));
			orders.setCustomerName(rs.getString("customerName"));
			orders.setCreationTime(rs.getString("creationTime"));
			orders.setRoomID(rs.getInt("roomID"));
			orders.setType(rs.getString("type"));
			orders.setCheckInTime(rs.getString("checkInTime"));
			orders.setCheckOutTime(rs.getString("checkOutTime"));
			orders.setCheckInDays(rs.getInt("checkInDays"));
			orders.setPhoneNumber(rs.getString("phoneNumber"));
			orders.setPay(rs.getInt("pay"));

			orders_list.add(orders);

		}

		// JSON转字符串写入resp
		json = JSON.toJSONString(orders_list, SerializerFeature.WriteMapNullValue,
				SerializerFeature.WriteNullListAsEmpty);
		System.out.println(json);
		System.out.println(json.getClass().toString());

	} catch (Exception e) {
		e.printStackTrace();
	}
	DBCon.close();
	return json;
} 

checkIn_orders_return.java
String roomID = request.getParameter(“roomID”);
System.out.println(roomID);

	IGuestOperateDao guestOperateDao = DaoFactory.getGuestOperateDaoInstance();
	String json = guestOperateDao.user_renew_return(roomID);
	response.getWriter().append(json);

(3)截图

4.13 功能 订单浏览功能(历史订单)
(1)酒店管理员可以看到历史订单的详情
在bean包下建立Order类,定义订单的各项信息
在dao包下建立IOrderDao接口,列出入住订单
public String history_orders();
在dao.impl下建立OrderDaoImpl,实现操作的完整代码
在servlet包下history_orders_servlet接收表单IOrderDao orderDao = DaoFactory.getOrderDaoInstance();来调用,实现展示历史订单功能
在factory下DaoFactory.java
public static IOrderDao getOrderDaoInstance() {
return new OrderDaoImpl();
}
(2) 关键代码
OrderDaoImpl
@Override
public String history_orders() {
String json = null;
List orders_list = new ArrayList();
try {

		// 执行sql语句
		String sql = "select * from `order` where orderStatus=\"已退房\"";
		PreparedStatement pre = DBCon.executePreparedStatement(sql);
		ResultSet rs = pre.executeQuery();

		// 添加orders信息

		while (rs.next()) {
			Order orders = new Order();
			orders.setOrderID(rs.getInt("orderID"));
			orders.setOrderStatus(rs.getString("orderStatus"));
			orders.setCustomerName(rs.getString("customerName"));
			orders.setCreationTime(rs.getString("creationTime"));
			orders.setRoomID(rs.getInt("roomID"));
			orders.setType(rs.getString("type"));
			orders.setCheckInTime(rs.getString("checkInTime"));
			orders.setCheckOutTime(rs.getString("checkOutTime"));
			orders.setCheckInDays(rs.getInt("checkInDays"));
			orders.setPhoneNumber(rs.getString("phoneNumber"));
			orders.setPay(rs.getInt("pay"));

			orders_list.add(orders);

		}

		// JSON转字符串写入resp
		json = JSON.toJSONString(orders_list, SerializerFeature.WriteMapNullValue,
				SerializerFeature.WriteNullListAsEmpty);
		System.out.println(json);

	} catch (Exception e) {
		e.printStackTrace();
	}
	DBCon.close();
	return json;
}

history_orders_servlet.java
try {
IOrderDao orderDao = DaoFactory.getOrderDaoInstance();
String json = orderDao.history_orders();
response.getWriter().append(json);

	} catch (Exception e) {
		e.printStackTrace();
	} 

(3)截图

4.14 功能 订单浏览功能(所有订单)
(1)酒店管理员可以看到所有订单的详情
在bean包下建立Order类,定义订单的各项信息
在dao包下建立IOrderDao接口,列出入住订单
public String history_orders();
在dao.impl下建立OrderDaoImpl,实现操作的完整代码
在servlet包下all_orders_servlet接收表单IOrderDao orderDao = DaoFactory.getOrderDaoInstance();来调用,实现展示所有订单功能
在factory下DaoFactory.java
public static IOrderDao getOrderDaoInstance() {
return new OrderDaoImpl();
}
(2) 关键代码
OrderDaoImpl
@Override
public String all_orders() {
String json = null;
List orders_list = new ArrayList();
try {
String sql = “select * from order”;
PreparedStatement pre = DBCon.executePreparedStatement(sql);
ResultSet rs = pre.executeQuery();

		while (rs.next()) {
			Order orders = new Order();
			orders.setOrderID(rs.getInt("orderID"));
			orders.setOrderStatus(rs.getString("orderStatus"));
			orders.setCustomerName(rs.getString("customerName"));
			orders.setCreationTime(rs.getString("creationTime"));
			orders.setRoomID(rs.getInt("roomID"));
			orders.setType(rs.getString("type"));
			orders.setCheckInTime(rs.getString("checkInTime"));
			orders.setCheckOutTime(rs.getString("checkOutTime"));
			orders.setCheckInDays(rs.getInt("checkInDays"));
			orders.setPhoneNumber(rs.getString("phoneNumber"));
			orders.setPay(rs.getInt("pay"));

			orders_list.add(orders);

		}

		// JSON转字符串写入resp
		json = JSON.toJSONString(orders_list, SerializerFeature.WriteMapNullValue,
				SerializerFeature.WriteNullListAsEmpty);
		System.out.println(json);

	} catch (Exception e) {
		e.printStackTrace();
	}
	DBCon.close();
	return json;
}

all_orders_servlet.java
try {

		IOrderDao orderDao = DaoFactory.getOrderDaoInstance();
		String json = orderDao.all_orders();
		response.getWriter().append(json);

	} catch (Exception e) {
		e.printStackTrace();
	}

(3)截图

4.15 功能 分页功能(订单)
(1)酒店管理员可以看到所有订单的分页展示
Page类
private int currentPage;//当前页
private int totalPage;//总页数
private int count;//一页多少条数据
private List<all_orders> orders;//当前页的订单数据
private int totalCount;//数据总条数
在dao包下OrderDao.java接口定义如下方法
public List<all_orders> findOrders(int page , int count) throws SQLException;
public int count() throws SQLException;
在OrderDaoImpl.java下写出实现代码
在OrderService.java接口中
定义public Page findPage(int page,int count);
OrderServiceImpl.java写出实现代码
(2)关键代码
OrderDaoImpl.java
List<all_orders> orders_list = new ArrayList<all_orders>();

	// 执行sql语句
	String sql = "select * from `order`";
	PreparedStatement pre = DBCon.executePreparedStatement(sql);
	ResultSet rs = pre.executeQuery();
	
    pre.setInt(1, (page-1)*count);
    pre.setInt(2, count);

	// 添加orders信息

	while (rs.next()) {
		all_orders orders = new all_orders();
		orders.setOrderID(rs.getInt("orderID"));
		orders.setOrderStatus(rs.getString("orderStatus"));
		orders.setCustomerName(rs.getString("customerName"));
		orders.setCreationTime(rs.getString("creationTime"));
		orders.setRoomID(rs.getInt("roomID"));
		orders.setType(rs.getString("type"));
		orders.setCheckInTime(rs.getString("checkInTime"));
		orders.setCheckOutTime(rs.getString("checkOutTime"));
		orders.setCheckInDays(rs.getInt("checkInDays"));
		orders.setPhoneNumber(rs.getString("phoneNumber"));
		orders.setPay(rs.getInt("pay"));

		orders_list.add(orders);

	}
    return orders_list;
}

@Override
public int count() throws SQLException {
	// TODO Auto-generated method stub
	
	String sql = "select * from `order`";
	PreparedStatement pre = DBCon.executePreparedStatement(sql);
	ResultSet rs = pre.executeQuery();
	
	int count = 0;
    if (rs.next()) {
        count = rs.getInt(1);
    }
    return count;
}

OrderServiceImpl.java
public Page findPage(int page, int count) {
if(orderDaonull){
orderDao = new OrderDaoImpl();
}
try {
List<all_orders> orders = orderDao.findOrders(page, count);
System.out.println(orders);
int totle = orderDao.count();
System.out.println(totle);
Page p = new Page();
p.setOrders(orders);
p.setCurrentPage(page);
p.setCount(count);
p.setTotalCount(totle);
int totlePage = totle%count
0?totle/count:(totle/count)+1;
p.setTotalPage(totlePage);
return p;
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}}
(3)截图

五、项目的主要特色介绍
在该项目中我们将前端与后端分隔开,一方面避免业务代码中混杂的JDBC代码,另一方面,数据访问接口与数据访问实现相分离,这样精通数据库的人可以根据接口专注于数据库访问的最优化实现。
数据访问逻辑从业务逻辑中脱离开来,使数据访问层实现统一的资源调度,通过数据库连接池和各种缓存机制的使用,可以保持上层系统不变的情况下来提高系统性能。
数据抽象:通过对底层数据的封装,开发人员可以使用面向对象思想对数据进行操作。比如通过调用方法获取数据比通过SQL语句访问数据库获取数据,在代码上更易于理解,清晰,对日后维护带来便利。
并且我们做了数据可视化,将每日的订房数,员工业绩,营业额等以图表的形式直观地展现。方便了系统使用者直观地看出数据的变化情况。

六、项目采用的数据库
该项目采用mysql数据库、
关键表:
(1)employee
DROP TABLE IF EXISTS employee;
CREATE TABLE employee (
employeeID int(255) NOT NULL AUTO_INCREMENT,
name varchar(255) NOT NULL,
birthday date NOT NULL,
idcard varchar(255) NOT NULL,
password varchar(255) NOT NULL,
entryTime date NOT NULL,
phoneNumber varchar(255) NOT NULL,
remark varchar(255) DEFAULT NULL,
PRIMARY KEY (employeeID)
)
(2)order
CREATE TABLE order (
orderID int(255) NOT NULL AUTO_INCREMENT,
orderStatus varchar(255) NOT NULL,
customerName varchar(255) NOT NULL,
idcard varchar(255) DEFAULT NULL,
creationTime date NOT NULL,
roomID int(255) NOT NULL,
type varchar(255) NOT NULL,
checkInTime date NOT NULL,
checkOutTime date DEFAULT NULL,
checkInDays int(255) NOT NULL,
phoneNumber varchar(255) NOT NULL,
pay int(255) NOT NULL,
handler varchar(255) DEFAULT NULL,
PRIMARY KEY (orderID)
)
(3)reneworder
CREATE TABLE reneworder (
renewOrderID int(255) NOT NULL AUTO_INCREMENT,
orderID int(255) NOT NULL,
customerName varchar(255) NOT NULL,
roomID int(255) NOT NULL,
checkInTime date DEFAULT NULL,
oldCheckOutTime date DEFAULT NULL,
newCheckOutTime date DEFAULT NULL,
phoneNumber varchar(255) NOT NULL,
pay int(255) NOT NULL,
handler varchar(255) DEFAULT NULL,
PRIMARY KEY (renewOrderID)
)
(4)room
CREATE TABLE room (
roomID int(255) NOT NULL AUTO_INCREMENT,
size varchar(255) NOT NULL,
type varchar(255) NOT NULL,
price int(255) NOT NULL,
remark varchar(255) DEFAULT NULL,
PRIMARY KEY (roomID)
)
(5)user
CREATE TABLE user (
id int(11) NOT NULL AUTO_INCREMENT,
username varchar(255) NOT NULL,
password varchar(255) NOT NULL,
PRIMARY KEY (id)
)

七、完成本项目遇到的问题、解决方法及体会
在做项目时,小组成员要及时沟通,首先在设计之初就应先规划如下几点:首先是页面的整体风格,再有是系统要实现的功能,设计系统时使用的框架以及最重要的是数据库的设计与实现。小组成员要通力合作,完成好项目。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值