会议室预约系统

会议室预约系统

一.需求调研

1.做成类似于课程表的样式。
2.在右侧设置输入框,输入信息。
3.表格上面设置个下拉列表,切换会议室。
4.时间段从8:00到19:30,半个小时一个时间段,表头显示日期和时间。
5.显示内容的单元格内容一样的合并。
6.紧挨着切换会议室显示箭头和周的日期,可以进行周的切换。
7.页面始终显示一周,周一到周天,当天的背景色颜色为黄色。
8.点击单元格显示信息,登录之后,自己预约的信息背景色为浅黄色,别人的信息背景色为浅蓝色。
9.登录成功后,点击单元格才能预约。
10.选中单元格后开始时间禁用不可选,结束时间根据显示的内容进行个别时间段的禁用。
11.需要输入的信息有,开始时间(下拉列表),结束时间(下拉列表),预约人(登录成功,自动获取),会议主题(文本框),部门(文本框),参会人数(文本框),需要的设备(复选框:投影,电话,视频),是否需要服务(单选框),备注(文本框)。
12.按钮有,提交按钮,清空按钮,修改按钮,取消按钮。
13.选中视频时,显示红色字体的提示,需要视频,请与行政部联系。
14.页面采用自适应。
15.总体页面样式如下图:

在这里插入图片描述

二.设计过程

1.页面头部分采用flex布局。
2.会议室信息存到数据库,用Ajax请求,查询出会议室的信息,利用js创建下拉列表,显示会议室。
3.周切换,利用参数传给后台,存到Session中,利用Ajax进行传输和获取。
4.登录,点击登录,弹出窗口,输入邮箱和邮箱密码,进行邮箱验证登录,把数据存入Session,保持登录状态。
5.显示数据的表格用js创建生成,除了第一行和第一列,其他单元格的id为cell行号_列号。
6.日期为动态。
7.参会人数,利用正则表达式控制只能输入正整数。
8.单元格添加斜线,利用canvas画图。
9.连接数据库,利用C3P0连接池。
10.屏幕自适应,通过获取分辨率的宽和高,和电脑系统的文本缩放比例,控制页面的大小。

三.开发过程

1.jsp代码
<%@ page language="java" contentType="text/html; charset=utf-8"
	pageEncoding="utf-8"%>
<!DOCTYPE>
<html>
<head>
<title>瀚高会议室预定系统</title>
<link type="text/css" rel="stylesheet" href="css/style.css">
<script src="js/jquery-3.3.1.min.js"></script>
<script src="js/PageElementScript.js"></script>
<script src="js/loginScript.js"></script>
<script src="js/cellClickScript.js"></script>
<script src="js/serviceDataScript.js"></script>
<script src="js/getDateScript.js"></script>
<script src="js/hintWindowScript.js"></script>
</head>
<body>
	<canvas id="line" style="display: none;"></canvas>
	<div id="bodyDiv">
		<!-- 标题 -->
		<div class="headline">
			<div class="caption">瀚高会议室预定</div>
			<div>
				<select id="meetingRoomNumber" name="meetingRoomNumber">
				</select>&nbsp;&nbsp;&nbsp;&nbsp;
				<input id="lastWeekBut" type="button" value=""> |
				<label id="lastWeek"></label> |
				<label id="thisWeek"></label> |
				<label id="nextWeek"></label> |
				<input id="nextWeekBut" type="button" value="">
			</div>
			
			<div>
				<label id="loginLabel" onclick="login()">预约登录</label>
				<label id="userinfo" style="display: none"></label>
				<label id="logoutLabel" onclick="logoutHint()" style="display: none;margin-right:6px">
				&nbsp;| &nbsp;退出</label>&nbsp;&nbsp;
			</div>
		</div>
			<hr />
		<!-- 标题 -->

		<!-- 内容 -->
		<table id="allTable">
			<tr height="100%">
				<td width="79%">
					<!-- 显示信息的表格 -->
					<table id="tablecontent">
					</table> 
					<!-- 显示信息的表格 -->
				</td>
				<td width="21%">
					<!-- 登记信息的div -->
					<div id="inputbox">
						<!-- 登记信息的遮盖层 -->
						<div id="inputBoxCover"></div>
						<!-- 登记信息的遮盖层 -->

						<!-- 登记信息的标题 -->
						<table id="registerTable">
							<tr height="100%">
								<td class="registerMessageTitle" align="center">登记信息</td>
							</tr>
						</table>
						<!-- 登记信息的标题 -->
						
						<!-- 预约申请的标题 -->
						<table id="bookingTable">
							<tr height="100%">
								<td class="bookingTitle" align="center">预约申请</td>
							</tr>
						</table>
						<!-- 预约申请的标题 -->

						<!-- 输入信息的表格 -->
						<table id="inputTable">
							<tr>
								<td align="center" width="32%">&nbsp;开始时间:</td>
								<td><select id="startTime" name="startTime"></select></td>
							</tr>
							<tr>
								<td align="center" width="32%">&nbsp;结束时间:</td>
								<td><select id="endTime" name="endTime">
								</select></td>
							</tr>
							<tr>
								<td align="center" width="32%">&nbsp;预&nbsp;约&nbsp;人:</td>
								<td><label id="creator"></label></td>
							</tr>
							<tr>
								<td align="center" width="32%">&nbsp;会议主题:</td>
								<td><input id="subject" type="text" name="subject" placeholder="会议主题"></td>
							</tr>
							<tr>
								<td align="center" width="32%">&nbsp;部门名称:</td>
								<td><input id="department" type="text" name="department" placeholder="部门选填"></td>
							</tr>
							<tr>
								<td align="center" width="32%">&nbsp;参会人数:</td>
								<td><input id="number" type="text" name="number" placeholder="请输入正整数"></td>
							</tr>
							<tr>
								<td align="center" width="32%">&nbsp;设备选择:</td>
								<td><input id="facility1" type="checkbox" name="facility1" value="投影">投影 
								<input id="facility2" type="checkbox" name="facility2" value="电话">电话 
								<input id="facility3" type="checkbox" name="facility3" value="视频">视频</td>
							</tr>
							<tr>
								<td align="center" width="32%">&nbsp;是否招待:</td>
								<td><input id="serviceYes" type="radio" name="service" value="true">是 
								<input id="serviceNo" type="radio" name="service" value="false" checked>否</td>
							</tr>
							<tr>
								<td align="center" width="32%">&nbsp;备注信息:</td>
								<td><input id="remark" type="text" name="remark" placeholder="选填"></td>
							</tr>
						</table>
						<!-- 输入信息的表格 -->

						<!-- 信息显示的label的表格 -->
						<table id="labelTable">
							<tr>
								<td align="center" width="32%">&nbsp;开始时间:</td>
								<td><label id="startTimeLabel"></label></td>
							</tr>
							<tr>
								<td align="center" width="32%">&nbsp;结束时间:</td>
								<td><label id="endTimeLabel"></label></td>
							</tr>
							<tr>
								<td align="center" width="32%">&nbsp;预&nbsp;约&nbsp;人:</td>
								<td><label id="creatorLabel"></label></td>
							</tr>
							<tr>
								<td align="center" width="32%">&nbsp;会议主题:</td>
								<td><label id="subjectLabel"></label></td>
							</tr>
							<tr>
								<td align="center" width="32%">&nbsp;部门名称:</td>
								<td><label id="departmentLabel"></label></td>
							</tr>
							<tr>
								<td align="center" width="32%">&nbsp;参会人数:</td>
								<td><label id="numberLabel"></label></td>
							</tr>
							<tr>
								<td align="center" width="32%">&nbsp;设备选择:</td>
								<td><label id="facilityLabel"></label></td>
							</tr>
							<tr>
								<td align="center" width="32%">&nbsp;是否招待:</td>
								<td><label id="serviceLabel"></label></td>
							</tr>
							<tr>
								<td align="center" width="32%">&nbsp;备注信息:</td>
								<td><label id="remarkLabel"></label></td>
							</tr>
						</table>
						<!-- 信息显示的label的表格 -->

						<!-- 按钮的表格 -->
						<table id="buttonTable">
							<tr height="100%" align="center">
								<td><input type="hidden" id="callMethod" name="callMethod" value=""> 
									<input type="hidden" id="thCellText" value="">
									<input type="hidden" id="idNumber" value=""> 
									<input type="hidden" id="loginThing" value=""> 
									<input type="hidden" id="roomId" value="1"> 
									<input type="hidden" id="weekNumber" value="0"> 
									<input id="updatebut" type="button" value="修改信息" 
									onclick="updateHint()"></td>
								<td align="center" width="45%" id="submitbutTd">
								<input id="submitbut" type="button" value="提交信息" 
								   onclick="verificationDate()"></td>
								<td align="center" width="45%">
								<input id="emptybut" type="button" value="清空信息" 
								    onclick="emptyHint()"></td>
								<td><input id="deletebut" type="button" value="取消会议"
									onclick="deleteHint()"></td>
							</tr>
						</table>
						<!-- 按钮的表格 -->
						
						<!-- 提示div -->
						<div id="videoHint">
						需要视频设备,请联系行政部门!
						</div>
						<!-- 提示div -->
					</div> 
					<!-- 登记信息的div -->
				</td>
			</tr>
		</table>
		<!-- 内容 -->
		<table><tr><td>
	<p>会议室预约系统使用说明:<br/>
     1.在未登录状态下,只可浏览预约信息,点击有信息的单元格即可。<br/>
     2.点击预约登录即可登录。<br/>
     3.登录状态下,可以进行预约,修改,取消会议,选中空白单元格可进行预约,选中自己预约的可进行修改和取消会议。<br/>
            注意事项:<br/>
            为达到更好的使用和视觉效果,推荐使用谷歌浏览器(Google Chrome),火狐浏览器(Mozilla Firefox), Microsoft Edge。<br/>
    </p></td></tr></table>
	</div>
	<!-- 全屏遮盖层 -->
	<div id="bodyCover"></div>
	<!-- 全屏遮盖层 -->

	<!-- 登录div -->
	<div id="loginbox">
		<table>
			<tr height="60">
				<td class="loginTitle">登&nbsp;&nbsp;&nbsp;录</td>
			</tr>
		</table>
		<table id="loginTable">
			<tr>
				<td width="100" align="center">邮箱:</td>
				<td><input type="text" id="mail" value=""></td>
			</tr>
			<tr>
				<td width="100" align="center">密码:</td>
				<td><input type="password" id="password" value=""></td>
			</tr>
		</table>
		<table id="loginButton">
			<tr>
				<td>
				<input id="confirmbut" type="button" value="确定" onclick="loginInformation()"></td>
				<td>
				<input id="cancelbut" type="button" value="取消" onclick="closeLogin()"></td>
			</tr>
		</table>
	</div>
	<!-- 登录div -->
	
	<!-- 退出提示div -->
	<div id="logoutHintBox">
	<table>
	<tr>
	<td width="150">
	<img src="img/warning.jpg">
	</td>
	<td>
	&nbsp;&nbsp;确定退出?<br/><br/>
	<input id="logoutConfirmbut" type="button" value="确定" onclick="logout()">&nbsp;&nbsp;&nbsp;&nbsp;
	<input id="logoutCancelbut" type="button" value="取消" onclick="closeLogoutHint()">
	</td>
	</tr>
	</table>
	</div>
	<!-- 退出提示div -->
	
	<!-- 清空提示div -->
	<div id="emptyHintBox">
	<table>
	<tr>
	<td width="150">
	<img src="img/warning.jpg">
	</td>
	<td>
	&nbsp;&nbsp;确定清空?<br/><br/>
	<input id="emptyConfirmbut" type="button" value="确定" onclick="emptyFun()">&nbsp;&nbsp;&nbsp;&nbsp;
	<input id="emptyCancelbut" type="button" value="取消" onclick="closeEmptyHint()">
	</td>
	</tr>
	</table>
	</div>
	<!-- 清空提示div -->
	
	<!-- 提交提示div -->
	<div id="submitHintBox">
	<table>
	<tr>
	<td width="150">
	<img src="img/warning.jpg">
	</td>
	<td>
	&nbsp;&nbsp;确定提交?<br/><br/>
	<input id="submitConfirmbut" type="button" value="确定">&nbsp;&nbsp;&nbsp;&nbsp;
	<input id="submitCancelbut" type="button" value="取消" onclick="closeSubmitHint()">
	</td>
	</tr>
	</table>
	</div>
	<!-- 提交提示div -->
	
	<!-- 修改提示div -->
	<div id="updateHintBox">
	<table>
	<tr>
	<td width="150">
	<img src="img/warning.jpg">
	</td>
	<td>
	&nbsp;&nbsp;确定修改?<br/><br/>
	<input id="updateConfirmbut" type="button" value="确定">&nbsp;&nbsp;&nbsp;&nbsp;
	<input id="updateCancelbut" type="button" value="取消" onclick="closeUpdateHint()">
	</td>
	</tr>
	</table>
	</div>
	<!-- 修改提示div -->
	
	<!-- 删除提示div -->
	<div id="deleteHintBox">
	<table>
	<tr>
	<td width="150">
	<img src="img/warning.jpg">
	</td>
	<td>
	&nbsp;&nbsp;确定取消?<br/><br/>
	<input id="deleteConfirmbut" type="button" value="确定" onclick="deleteFun()">&nbsp;&nbsp;&nbsp;&nbsp;
	<input id="deleteCancelbut" type="button" value="取消" onclick="closeDeleteHint()">
	</td>
	</tr>
	</table>
	</div>
	<!-- 删除提示div -->
	
	<!-- 登录失败提示div -->
	<div id="logDefeatedBox">
	<table>
	<tr>
	<td width="120">
	<img src="img/defeated.png">
	</td>
	<td align="center">
	用户不存在或密码输入错误!<br/><br/>
	<input id="logDefeatedbut" type="button" value="确定" onclick="closeLogDefeatedHint()">
	</td>
	</tr>
	</table>
	</div>
	<!-- 登录失败提示div -->
	
	<!-- 预约冲突提示div -->
	<div id="verificationHintBox">
	<table>
	<tr>
	<td width="120">
	<img src="img/defeated.png">
	</td>
	<td align="center">
	当前时间已经被预约<br/>请刷新页面!<br/><br/>
	<input id="verificationHintbut" type="button" value="确定" onclick="closeLogVerificationHint()">
	</td>
	</tr>
	</table>
	</div>
	<!-- 预约冲突提示div -->
	
	<!-- 会议主题和预约人数为空提示div -->
	<div id="noDataHintBox">
	<table>
	<tr>
	<td width="120">
	<img src="img/defeated.png">
	</td>
	<td align="center">
	主题和参会人数不能为空!<br/><br/>
	<input id="noDataHintbut" type="button" value="确定" onclick="closeLogNoDataHint()">
	</td>
	</tr>
	</table>
	</div>
	<!-- 会议主题和预约人数为空提示div -->
	
	<!-- 会议主题为空提示div -->
	<div id="subjectHintBox">
	<table>
	<tr>
	<td width="120">
	<img src="img/defeated.png">
	</td>
	<td align="center">
	会议主题不能为空!<br/><br/>
	<input id="subjectHintbut" type="button" value="确定" onclick="closeLogSubjectHint()">
	</td>
	</tr>
	</table>
	</div>
	<!-- 会议主题为空提示div -->
	
	<!-- 参会人数为空提示div -->
	<div id="numberHintBox">
	<table>
	<tr>
	<td width="120">
	<img src="img/defeated.png">
	</td>
	<td align="center">
	参会人数不能为空!<br/><br/>
	<input id="numberHintbut" type="button" value="确定" onclick="closeLogNumberHint()">
	</td>
	</tr>
	</table>
	</div>
	<!-- 参会人数为空提示div -->
	
	<!-- 参会人数不是正整数提示div -->
	<div id="numberNoHintBox">
	<table>
	<tr>
	<td width="120">
	<img src="img/defeated.png">
	</td>
	<td align="center">
	参会人数应为正整数!<br/><br/>
	<input id="numberNoHintbut" type="button" value="确定" onclick="closeLogNumberNoHint()">
	</td>
	</tr>
	</table>
	</div>
	<!-- 参会人数不是正整数提示div -->
	
	<!-- 预约成功提示div -->
	<div id="bookingSuccessBox">
	<table>
	<tr>
	<td width="120">
	<img src="img/succeed.jpg">
	</td>
	<td align="center">
	预约成功!<br/><br/>
	<input id="bookingSuccessHintbut" type="button" value="确定" onclick="closeBookingSuccessHint()">
	</td>
	</tr>
	</table>
	</div>
	<!-- 预约成功提示div -->
	
	<!-- 修改成功提示div -->
	<div id="updateSuccessBox">
	<table>
	<tr>
	<td width="120">
	<img src="img/succeed.jpg">
	</td>
	<td align="center">
	修改成功!<br/><br/>
	<input id="updateSuccessHintbut" type="button" value="确定" onclick="closeUpdateSuccessHint()">
	</td>
	</tr>
	</table>
	</div>
	<!-- 修改成功提示div -->
	
	<!-- 取消成功提示div -->
	<div id="deleteSuccessBox">
	<table>
	<tr>
	<td width="120">
	<img src="img/succeed.jpg">
	</td>
	<td align="center">
	取消成功!<br/><br/>
	<input id="deleteSuccessHintbut" type="button" value="确定" onclick="closeDeleteSuccessHint()">
	</td>
	</tr>
	</table>
	</div>
	<!-- 取消成功提示div -->
	
	<!-- 404提示div -->
	<div id="noPageBox">
	<table>
	<tr>
	<td width="120">
	<img src="img/defeated.png">
	</td>
	<td align="center">
	没有找到网页!<br/><br/>
	<input id="noPageHintbut" type="button" value="确定" onclick="closeNoPageHint()">
	</td>
	</tr>
	</table>
	</div>
	<!-- 404提示div -->
	
	<!-- 500提示div -->
	<div id="serverErrorBox">
	<table>
	<tr>
	<td width="120">
	<img src="img/defeated.png">
	</td>
	<td align="center">
	内部服务器出错!<br/><br/>
	<input id="serverErrorHintbut" type="button" value="确定" onclick="closeServerErrorHint()">
	</td>
	</tr>
	</table>
	</div>
	<!-- 500提示div -->
	
	<!-- 预约日期小于当前日期提示div -->
	<div id="dateHintBox">
	<table>
	<tr>
	<td width="120">
	<img src="img/defeated.png">
	</td>
	<td align="center">
	预约日期小于当前日期<br/>不能预约!<br/><br/>
	<input id="dateHintbut" type="button" value="确定" onclick="closeDateHint()">
	</td>
	</tr>
	</table>
	</div>
	<!-- 预约日期小于当前日期提示div -->
</body>
</html>
2.css代码
@charset "UTF-8";

body {
	font-family: "微软雅黑";
}

table {
	border-collapse: collapse;
}

table td {
	padding: 0;
}

#bodyDiv {
	/* border: solid 1px #BBB; */
	background-color: white;
	border-radius: 10px;
	padding: 0px 10px;
	overflow: "auto";
}

.headline {
	height: 5%;
	line-height:200%;
	width: 100%;
	display: flex;
	flex-direction:row;
	justify-content:space-between;
	
}

.caption{
	font-size:1.6rem;
	font-weight: bold;
	color: #333;
	margin-left:4px;
}

#meetingRoomNumber {
	padding: 0px 4px 0px 4px;
	font-size: 1.1rem;
	font-family: "微软雅黑";
}

.registerMessageTitle {
	font-size: 1.5rem;
	font-family: "微软雅黑";
}

.bookingTitle {
	font-size: 1.5rem;
	font-family: "微软雅黑";
}

#tablecontent {
	height: 100%;
	width: 99%;
	font-size: 0.9rem;
	border: solid #BBB;
	cellspacing: 0px;
	cellpadding: 0px;
	border-width: 1px 0px 0px 1px;
}

#tablecontent td {
	border: solid #BBB;
	border-width: 0px 1px 1px 0px;
}

#inputbox {
	width: 99%;
	height: 100%;
	font-size: 0.9rem;
	font-family: "微软雅黑";
	border: solid 1px #BBB;
}

#videoHint {
	display: none;
	width: 100%;
	text-align: center;
	font-size: 1rem;
	font-family: "微软雅黑";
	color: red;
}

#buttonTable {
	width: 100%;
	height: 15%;
}

.date {
	float: right;
}

.time {
	float: left;
}

#header {
	background-color: #EEE;
	font-size: 1rem;
	height: 55px;
}

#bodyCover {
	display: none;
	position: absolute;
	top: 0%;
	left: 0%;
	width: 100%;
	height: 100%;
	background-color: #EEE;
	z-index: 0;
	opacity: 0.1;
}

#loginbox {
	font-size: 22px;
	font-family: "微软雅黑";
	display: none;
	margin: auto;
	position: absolute;
	top: 0;
	left: 0;
	bottom: 0;
	right: 0;
	width: 350px;
	height: 300px;
	border: 1px solid black;
	border-radius: 10px;
	background-color: #EEE;
	z-index: 1;
	padding: 20px;
}

#inputBoxCover {
	position: absolute;
	width: 20%;
	height: 85%;
	background-color: #EEE;
	z-index: 0;
	opacity: 0;
}

#mail {
	font-size: 0.9rem;
	font-family: "微软雅黑";
	width: 240px;
	height: 28px;
}

#password {
	font-size: 0.9rem;
	font-family: "微软雅黑";
	width: 240px;
	height: 28px;
}

#loginLabel:hover {
	cursor: pointer;
}

#logoutLabel:hover {
	cursor: pointer;
}

.checkedBgColor {
	background-color: #EEE;
}

.myDataBgColor {
	background-color: #FFFFCC;
}

.otherDataBgColor {
	background-color: #CCFFFF;
}

#lastWeek {
	cursor: pointer;
}

#thisWeek {
	cursor: pointer;
}

#nextWeek {
	cursor: pointer;
}

#lastWeekBut {
	cursor: pointer;
}

#nextWeekBut {
	cursor: pointer;
}

.loginTitle {
	font-size: 1.5rem;
	font-family: "微软雅黑";
	width: 350px;
	text-align: center;
}

#allTable {
	width: 100%;
	height: 90%;
}

#registerTable {
	width: 100%;
	height: 12%;
}

#bookingTable{
	width: 100%;
	height: 12%;
}

#inputTable{
	width: 100%;
	font-size:0.9rem;
}

#inputTable tr{
	height: 42px;
}

#labelTable{
	width: 100%;
	font-size:0.9rem;
}

#labelTable tr{
	height: 42px;
}

#loginTable tr{
	height: 60px;
}

#loginButton tr{
	height: 100px;
}

#loginButton td{
	width: 175px;
	text-align: center;
}

#loginLabel{
	margin-right:6px;
	font-size: 1.5rem;
	font-family: "微软雅黑";
}

.thisDayBgColor{
	background-color: yellow;
}

#logoutHintBox {
	background-color: white;
	font-size: 22px;
	font-family: "微软雅黑";
	display: none;
	margin: auto;
	position: absolute;
	top: 0;
	left: 0;
	bottom: 0;
	right: 0;
	width: 340px;
	height: 90px;
	border: 1px solid black;
	border-radius: 10px;
	z-index: 1;
	padding: 20px;
}

#logoutHintBox td{
	font-size: 22px;
	font-family: "微软雅黑";
}

#emptyHintBox {
	background-color: white;
	font-size: 22px;
	font-family: "微软雅黑";
	display: none;
	margin: auto;
	position: absolute;
	top: 0;
	left: 0;
	bottom: 0;
	right: 0;
	width: 340px;
	height: 90px;
	border: 1px solid black;
	border-radius: 10px;
	z-index: 1;
	padding: 20px;
}

#emptyHintBox td{
	font-size: 22px;
	font-family: "微软雅黑";
}

#submitHintBox {
	background-color: white;
	font-size: 22px;
	font-family: "微软雅黑";
	display: none;
	margin: auto;
	position: absolute;
	top: 0;
	left: 0;
	bottom: 0;
	right: 0;
	width: 340px;
	height: 90px;
	border: 1px solid black;
	border-radius: 10px;
	z-index: 1;
	padding: 20px;
}

#submitHintBox td{
	font-size: 22px;
	font-family: "微软雅黑";
}

#updateHintBox {
	background-color: white;
	font-size: 22px;
	font-family: "微软雅黑";
	display: none;
	margin: auto;
	position: absolute;
	top: 0;
	left: 0;
	bottom: 0;
	right: 0;
	width: 340px;
	height: 90px;
	border: 1px solid black;
	border-radius: 10px;
	z-index: 1;
	padding: 20px;
}

#updateHintBox td{
	font-size: 22px;
	font-family: "微软雅黑";
}

#deleteHintBox {
	background-color: white;
	font-size: 22px;
	font-family: "微软雅黑";
	display: none;
	margin: auto;
	position: absolute;
	top: 0;
	left: 0;
	bottom: 0;
	right: 0;
	width: 340px;
	height: 90px;
	border: 1px solid black;
	border-radius: 10px;
	z-index: 1;
	padding: 20px;
}

#deleteHintBox td{
	font-size: 22px;
	font-family: "微软雅黑";
}

#logDefeatedBox {
	background-color: white;
	font-size: 22px;
	font-family: "微软雅黑";
	display: none;
	margin: auto;
	position: absolute;
	top: 0;
	left: 0;
	bottom: 0;
	right: 0;
	width: 400px;
	height: 100px;
	border: 1px solid black;
	border-radius: 10px;
	z-index: 1;
	padding: 20px;
}

#logDefeatedBox td{
	font-size: 22px;
	font-family: "微软雅黑";
}

#verificationHintBox {
	background-color: white;
	font-size: 22px;
	font-family: "微软雅黑";
	display: none;
	margin: auto;
	position: absolute;
	top: 0;
	left: 0;
	bottom: 0;
	right: 0;
	width: 360px;
	height: 100px;
	border: 1px solid black;
	border-radius: 10px;
	z-index: 1;
	padding: 20px;
}

#verificationHintBox td{
	font-size: 22px;
	font-family: "微软雅黑";
}

#noDataHintBox {
	background-color: white;
	font-size: 22px;
	font-family: "微软雅黑";
	display: none;
	margin: auto;
	position: absolute;
	top: 0;
	left: 0;
	bottom: 0;
	right: 0;
	width: 390px;
	height: 100px;
	border: 1px solid black;
	border-radius: 10px;
	z-index: 1;
	padding: 20px;
}

#noDataHintBox td{
	font-size: 22px;
	font-family: "微软雅黑";
}

#subjectHintBox {
	background-color: white;
	font-size: 22px;
	font-family: "微软雅黑";
	display: none;
	margin: auto;
	position: absolute;
	top: 0;
	left: 0;
	bottom: 0;
	right: 0;
	width: 340px;
	height: 100px;
	border: 1px solid black;
	border-radius: 10px;
	z-index: 1;
	padding: 20px;
}

#subjectHintBox td{
	font-size: 22px;
	font-family: "微软雅黑";
}

#numberHintBox {
	background-color: white;
	font-size: 22px;
	font-family: "微软雅黑";
	display: none;
	margin: auto;
	position: absolute;
	top: 0;
	left: 0;
	bottom: 0;
	right: 0;
	width: 340px;
	height: 100px;
	border: 1px solid black;
	border-radius: 10px;
	z-index: 1;
	padding: 20px;
}

#numberHintBox td{
	font-size: 22px;
	font-family: "微软雅黑";
}

#numberNoHintBox {
	background-color: white;
	font-size: 22px;
	font-family: "微软雅黑";
	display: none;
	margin: auto;
	position: absolute;
	top: 0;
	left: 0;
	bottom: 0;
	right: 0;
	width: 340px;
	height: 100px;
	border: 1px solid black;
	border-radius: 10px;
	z-index: 1;
	padding: 20px;
}

#numberNoHintBox td{
	font-size: 22px;
	font-family: "微软雅黑";
}

#bookingSuccessBox {
	background-color: white;
	font-size: 22px;
	font-family: "微软雅黑";
	display: none;
	margin: auto;
	position: absolute;
	top: 0;
	left: 0;
	bottom: 0;
	right: 0;
	width: 310px;
	height: 80px;
	border: 1px solid black;
	border-radius: 10px;
	z-index: 1;
	padding: 20px;
}

#bookingSuccessBox td{
	font-size: 22px;
	font-family: "微软雅黑";
}

#updateSuccessBox {
	background-color: white;
	font-size: 22px;
	font-family: "微软雅黑";
	display: none;
	margin: auto;
	position: absolute;
	top: 0;
	left: 0;
	bottom: 0;
	right: 0;
	width: 310px;
	height: 80px;
	border: 1px solid black;
	border-radius: 10px;
	z-index: 1;
	padding: 20px;
}

#updateSuccessBox td{
	font-size: 22px;
	font-family: "微软雅黑";
}

#deleteSuccessBox {
	background-color: white;
	font-size: 22px;
	font-family: "微软雅黑";
	display: none;
	margin: auto;
	position: absolute;
	top: 0;
	left: 0;
	bottom: 0;
	right: 0;
	width: 310px;
	height: 80px;
	border: 1px solid black;
	border-radius: 10px;
	z-index: 1;
	padding: 20px;
}

#deleteSuccessBox td{
	font-size: 22px;
	font-family: "微软雅黑";
}

#noPageBox {
	background-color: white;
	font-size: 22px;
	font-family: "微软雅黑";
	display: none;
	margin: auto;
	position: absolute;
	top: 0;
	left: 0;
	bottom: 0;
	right: 0;
	width: 300px;
	height: 100px;
	border: 1px solid black;
	border-radius: 10px;
	z-index: 1;
	padding: 20px;
}

#noPageBox td{
	font-size: 22px;
	font-family: "微软雅黑";
}

#serverErrorBox {
	background-color: white;
	font-size: 22px;
	font-family: "微软雅黑";
	display: none;
	margin: auto;
	position: absolute;
	top: 0;
	left: 0;
	bottom: 0;
	right: 0;
	width: 310px;
	height: 100px;
	border: 1px solid black;
	border-radius: 10px;
	z-index: 1;
	padding: 20px;
}

#serverErrorBox td{
	font-size: 22px;
	font-family: "微软雅黑";
}

#dateHintBox {
	background-color: white;
	font-size: 22px;
	font-family: "微软雅黑";
	display: none;
	margin: auto;
	position: absolute;
	top: 0;
	left: 0;
	bottom: 0;
	right: 0;
	width: 370px;
	height: 100px;
	border: 1px solid black;
	border-radius: 10px;
	z-index: 1;
	padding: 20px;
}

#dateHintBox td{
	font-size: 22px;
	font-family: "微软雅黑";
}

#lastWeekBut{
	width: 19px;
	height: 19px;
	background-color: white;
	border: solid 1px white;
	background-image: url(../img/last.png);
}

#nextWeekBut{
	width: 19px;
	height: 18px;
	background-color: white;
	border: solid 1px white;
	background-image: url(../img/next.png);
}

p{
	font-size: 0.8rem;
	font-family: "微软雅黑";
	color: red;
}
3.js代码
//返回失败页面提醒
function errorPopup(status){
	if(status == 404){
		noPageHint();
	}else if(status == 500){
		serverErrorHint();
	}
}

var timeArray = new Array("08:00-08:30", 
						"08:30-09:00", 
						"09:00-09:30",
						"09:30-10:00", 
						"10:00-10:30", 
						"10:30-11:00", 
						"11:00-11:30",
						"11:30-12:00", 
						"13:00-13:30", 
						"13:30-14:00", 
						"14:00-14:30",
						"14:30-15:00", 
						"15:00-15:30", 
						"15:30-16:00", 
						"16:00-16:30",
						"16:30-17:00", 
						"17:00-17:30", 
						"17:30-18:00", 
						"18:00-18:30",
						"18:30-19:00",
						"19:00-19:30");

//创建表格
function createTable() {
	var header = "<tr id='header' align='center'>"
			+ "<td width='9%' id='classify'>" + "<div class='date'>日期</div>"
			+ "<div class='time'>时间</div></td>"
			+ "<td width='12.8%' id='firstLine'></td>"
			+ "<td width='12.8%' id='secondLine'></td>"
			+ "<td width='12.8%' id='thirdLine'></td>"
			+ "<td width='12.8%' id='fourthLine'></td>"
			+ "<td width='12.8%' id='fifthLine'></td>" 
			+ "<td width='12.8%' id='sixthLine'></td>" 
			+ "<td width='12.8%' id='seventhLine'></td>" + "</tr>";
	$('#tablecontent').append(header);
	var col = tablecontent.rows.item(0).cells.length;
	var str = "";
	for (i = 0; i < timeArray.length; i++) {
		var timeStr = "<tr><td align='center' height='24'>" + timeArray[i] + "</td>";
		var tdStr = "";
		for (j = 1; j < col; j++) {
			var rowNumber = i + 1;
			tdStr += "<td id='cell" + rowNumber + "_" + j + "' align='center'></td>";
		}
		str = timeStr + tdStr + "</tr>";
		$('#tablecontent').append(str);
	}
}

//单元格加斜线
function line() {
	var canvas = document.getElementById("line");
	var width = $("#classify").width();
	var height = $("#classify").height();
	if (canvas.getContext) {
		var ctx = canvas.getContext("2d");

		ctx.fill();
		ctx.lineWidth = 1;
		ctx.strokeStyle = "#BBB";
		ctx.beginPath();
		ctx.moveTo(0, 0);
		ctx.lineTo(width, height);
		ctx.stroke();
		ctx.closePath();
		document.getElementById("classify").style.backgroundImage = "url('" + ctx.canvas.toDataURL() + "')";
		document.getElementById("classify").style.background.attachment = "fixed";
	}
}

//创建会议室下拉列表
function createSelect() {
	var urlStr = "MeetingRoomId" + "?" + Math.random();
	$.ajax({
		url : urlStr,
		type : "get",
		success : function(resp) {
//			console.log(resp);
			var dataArray = JSON.parse(resp);
//			console.log(dataArray);
			for (var i = 0; i < dataArray.length; i++) {
//				console.log(dataArray[i].id);
				var str = "<option value='" + dataArray[i].id + "'>" + dataArray[i].roomNumber + "</option>";
				$("#meetingRoomNumber").append(str);
			}
			switchoverRoom();
		},
		error : function(resp) {
			var status = resp.status;
			errorPopup(status);
		}
	});
}

var optionArray = new Array("08:00",
							"08:30",
							"09:00",
							"09:30",
							"10:00",
							"10:30", 
							"11:00",
							"11:30", 
							"12:00", 
							"13:00", 
							"13:30", 
							"14:00",
							"14:30", 
							"15:00", 
							"15:30", 
							"16:00",
							"16:30", 
							"17:00", 
							"17:30",
							"18:00",
							"18:30",
							"19:00",
							"19:30");

//开始时间和结束时间下拉列表
function timeSelect(){
	for (var i = 0; i < optionArray.length; i++) {
		if(optionArray[i] != "12:00" && optionArray[i] != "19:30"){
			var str = "<option>" + optionArray[i] + "</option>";
			$("#startTime").append(str);
		}
		if(optionArray[i] != "08:00" && optionArray[i] != "13:00"){
			var str = "<option>" + optionArray[i] + "</option>";
			$("#endTime").append(str);
		}
	}
}

//切换会议室
function switchoverRoom() {
	var urlStr = "GetRoomId" + "?" + Math.random();
	$.ajax({
		url : urlStr,
		type : "get",
		success : function(resp) {
//			console.log("resp=" + resp);
			if(resp != ""){
				if(resp == 1){
					$("#meetingRoomNumber option:eq(0)").attr("selected","selected");
				} else if(resp == 2){
					$("#meetingRoomNumber option:eq(1)").attr("selected","selected");
				} else if(resp == 3){
					$("#meetingRoomNumber option:eq(2)").attr("selected","selected");
				} else if(resp == 4){
					$("#meetingRoomNumber option:eq(3)").attr("selected","selected");
				} else if(resp == 5){
					$("#meetingRoomNumber option:eq(4)").attr("selected","selected");
				}
				$("#roomId").val(resp);
				selectFun();
			}else{
				selectFun();
			}
		},
		error : function(resp) {
			var status = resp.status;
			errorPopup(status);
		}
	});
}

//结束时间
function endTimeFun(startHour, startMinute) {
	var time;
	var minute = startMinute + 30;

	if (minute == 60) {
		var hour = startHour + 1;
		time = hour + ":" + "00";
	} else {
		time = startHour + ":" + minute;
	}

	$("#endTime").val(time);
}

//确定数据所在的列
function confirmDate(time) {
	var year = time.slice(0, 4);
	var month = time.slice(5, 7);
	var day = time.slice(8, 10);

	var col = tablecontent.rows.item(0).cells.length;
	for(var i = 1; i < col; i++){
		var thText = $("#tablecontent").find("tr").eq(0).find("td").eq(i).text();
		var thTextYear = thText.slice(3, 7);
		var thTextMonth = thText.slice(8, 10);
		var thTextDay = thText.slice(11, 13);
		if (year == thTextYear && month == thTextMonth && day == thTextDay) {
			var colNumber = i;
		}
	}
	return colNumber;
}

//设置单元格要显示的 内容
function tdData(str){
	var width = $("#cell1_1").width();
	var words = width/14;
	var showData;
//	console.log(words);
	if(str != ""){
		if(str.length < words){
			showData = str;
		}else{
			var length = parseInt(words);
//		console.log(length);
			var data = str.slice(0, length-2);
//		console.log(data);
			showData = data + "..."
		}
 	}
	return showData;
}

//确定数据显示的行,并把数据传给单元格
function showData(time, timeScope, str) {
	var rowNumber;
	var timeScopeArray = timeScope.split(",");
	var colNumber = confirmDate(time);
//	console.log("列号=" + colNumber);
	for (var i = 0; i < timeScopeArray.length; i++) {
		rowNumber = timeScopeArray[i];
//	    console.log("行号=" + rowNumber); 
		$("#tablecontent").find("tr").eq(rowNumber).find("td").eq(colNumber)
				          .append(str)
				          .addClass("otherDataBgColor");
	}
}

//合并单元格
function mergeCells() {
	var colNumber = tablecontent.rows.item(0).cells.length;
	var rowNumber = tablecontent.rows.length;
	var idStr = "";
	for (i = 1; i <= colNumber; i++) {
		var str = "";
		for (j = 1; j < rowNumber; j++) {
			var text = $("#tablecontent").find("tr").eq(j).find("td").eq(i).text();

			if (text != "") {
				var tdId = $("#tablecontent").find("tr").eq(j).find("td").eq(i).attr("id");
				var tdHiddenId = $("#" + tdId + " input").attr("id");
				
				if (str == tdHiddenId) {
					idStr = idStr + tdId + ",";

					tablecontent.rows[firstRow].cells[i].rowSpan = tablecontent.rows[firstRow].cells[i].rowSpan + 1;
				} else {
					var firstRow = j;
					str = tdHiddenId;
				}
			} else {
				var str = "";
			}
		}
	}
//	console.log(idStr); 
	var idArray = idStr.split(",");
	
	for (i = 0; i < idArray.length; i++) {
		if (idArray[i] != "") {
			$("#" + idArray[i]).remove();
		}
	}
}

//根据开始时间和结束时间,获得预约的行号
function judgeTime(startTime, endTime) {
	var rows = tablecontent.rows.length;
	var number = "";
	var str = "";
	var j = 0;
	
	for(i = 1; i < rows ;i ++ ){
		var time = $("#tablecontent").find("tr").eq(i).find("td").eq(0).text();
		var timeArray = time.split("-");
		
		if(startTime == timeArray[0]){
			j=1;
		}
		
		if(j == 1){
			str = str + i + ",";
			if(endTime == timeArray[1]){
				number = str;
			}
		}
	}
	var rowNumber = number.slice(0, number.length - 1);
//	console.log(rowNumber);
	return rowNumber;
}

//按钮的隐藏
function hideButton() {
	$("#submitbutTd").hide();
	$("#emptybut").hide();
	$("#updatebut").hide();
	$("#deletebut").hide();
	$("#inputTable").show();
	$("#labelTable").hide();
	$("#registerTable").hide();
	$("#bookingTable").show();
}

//结束时间下拉列表的上半部分选项的禁用(所点单元格内容为空)
function selectDisabledFunA(time) {
	var count = 0;
	for (var i = optionArray.length - 3; i >= 0; i--) {
		var value = $("#endTime option:eq(" + i + ")").val();
		if (time == value) {
			count++;
		} else {
			if (count > 0) {
				$("#endTime option:eq(" + i + ")").attr("disabled", true);
			}
		}
	}
}

//结束时间下拉列表的上半部分选项的禁用(所点单元格内容不为空)
function selectDisabledFunB(time) {
	var count = 0;
	for (var i = optionArray.length - 3; i >= 0; i--) {
		var value = $("#endTime option:eq(" + i + ")").val();
		if (time == value) {
			$("#endTime option:eq(" + i + ")").attr("disabled", true);
			count++;
		} else if (time == "13:00" && value == "12:00"){
			$("#endTime option:eq(" + i + ")").attr("disabled", true);
			count++;
		}else {
			if (count > 0) {
				$("#endTime option:eq(" + i + ")").attr("disabled", true);
			}
		}
	}
}

//结束时间下拉列表的下半部分选项的禁用(所点单元格内容为空)
function selectDisabledFunC(id) {
	var number = id.slice(4);
	var numberArray = number.split("_");
	var rowNumber = parseInt(numberArray[0]);
	var colNumber = parseInt(numberArray[1]);
	var rows = tablecontent.rows.length;
	
	for (i = rowNumber; i < rows; i ++) {
		var tdText = $("#cell" + i + "_" + colNumber).text();
		if(tdText != ""){
			var rownum = i;
			break;
		}
	}
	var time = $("#tablecontent").find("tr").eq(rownum).find("td").eq(0).text();
	var timeArray = time.split("-");
	var count = 0;
	var optionLength =  optionArray.length - 2;
	
	for (i = 0; i < optionLength; i++) {
		var value = $("#endTime option:eq(" + i + ")").val();
		if (timeArray[1] == value) {
			$("#endTime option:eq(" + i + ")").attr("disabled", true);
			count++;
		} else {
			if (count > 0) {
				$("#endTime option:eq(" + i + ")").attr("disabled", true);
			}
		}
	}
}

//结束时间下拉列表的下半部分选项的禁用(所点单元格内容不为空)
function selectDisabledFunD(id) {
	var number = id.slice(4);
	var numberArray = number.split("_");
	var rowNumber = parseInt(numberArray[0]);
	var colNumber = parseInt(numberArray[1]);
	var rows = tablecontent.rows.length;
	
	for (i = rowNumber; i < rows; i ++) {
		var tdText = $("#cell" + i + "_" + colNumber).text();
		if(tdText != "" && i != rowNumber){
			var rownum = i;
			break;
		}
	}
	var time = $("#tablecontent").find("tr").eq(rownum).find("td").eq(0).text();
	var timeArray = time.split("-");
	var count = 0;
	var optionLength =  optionArray.length - 2;
	
	for (i = 0; i < optionLength; i++) {
		var value = $("#endTime option:eq(" + i + ")").val();
		if (timeArray[1] == value) {
			$("#endTime option:eq(" + i + ")").attr("disabled", true);
			count++;
		} else {
			if (count > 0) {
				$("#endTime option:eq(" + i + ")").attr("disabled", true);
			}
		}
	}
}

//清空信息
function emptyFun() {
		$("#subject").val("");
		$("#department").val("");
		$("#number").val("");
		$("input[type='checkbox']").prop("checked", false);
		$("#serviceNo")[0].checked = true;
		$("#remark").val("");
		closeEmptyHint();
		videoHintDiv();
}

function videoHintDiv(){
	var value = $("#facility3").is(":checked");
//	console.log(value);
	if(value == true){
		$("#videoHint").show();
	}else{
		$("#videoHint").hide();
	}
}

$(function() {
	switchoverWeek();
	createTable();
	createSelect();
	timeSelect();
	weekDate();
	hideButton();
	size();
	line();
	
//	鼠标经过单元格时单元格的背景色
	$("#tablecontent td").hover(function() {
		$(this).css("background-color", "#EEE");
	}, function() {
		$(this).css("background-color", "");
	});
	
//	鼠标经过表格每一行的时候每一行第一个单元格的背景色
	$("#tablecontent tr").hover(function() {
		$(this).children("td:eq(0)").css("background-color", "#EEE");
	}, function() {
		$(this).children("td:eq(0)").css("background-color", "");
	});
	
//	会议室下拉列表改变值所触发的事件
	$("#meetingRoomNumber").change(function() {
		var roomId = $(this).val();
		var urlStr = "RoomId" + "?" + Math.random();
		$.ajax({
			url : urlStr,
			type : "get",
			data : {
				roomId : roomId,
			},
			success : function(resp) {
				window.location.reload();
			},
			error : function(resp) {
				var status = resp.status;
				errorPopup(status);
			}
		});
	});
	
//	点击开始时间下拉列表所触发的事件
	$("#startTime").click(function() {
		var startTime = $(this).val();
		var endTime = $("#endTime").val();

		var startTimeArray = startTime.split(":");
		var endTimeArray = endTime.split(":");

		var startHour = parseInt(startTimeArray[0]);
		var endHour = parseInt(endTimeArray[0]);

		var startMinute = parseInt(startTimeArray[1]);
		var endMinute = parseInt(endTimeArray[1]);

		if (startHour > endHour) {
			endTimeFun(startHour, startMinute);
		} else if (startHour == endHour && startMinute >= endMinute) {
			endTimeFun(startHour, startMinute);
		}
	});
	
	$("#facility3").click(function() {
		videoHintDiv();
	});
	
	$("#number").keydown(function (event) {
		var key = parseInt(event.keyCode);
//		console.log(key);
		if (key >= 96 && key <= 105 || key >= 48 && key <= 57 || key == 8) {
			$("#number").text("");
		} else {
			return false;
		}
	});
});

//获取屏幕大小,调节页面自适应
function size(){
	
	var width = window.screen.width;
	var height = window.screen.height;
	var scaling = window.devicePixelRatio;
	
	width = width * 0.966 * scaling;
	height = height * 0.79 * scaling;
	
	$("#bodyDiv").width(width + "px");
	$("#bodyDiv").height(height + "px");
}

//获取时间,周,年,月,日
function dateStr(AddDayCount) {
	var date = new Date();

	date.setDate(date.getDate() + AddDayCount);
	var year = date.getFullYear();
	var month = date.getMonth() + 1;
	var day = date.getDate();
	var weekNumber = date.getDay();

	var week;
	if (weekNumber == 1) {
		week = "一";
	} else if (weekNumber == 2) {
		week = "二";
	} else if (weekNumber == 3) {
		week = "三";
	} else if (weekNumber == 4) {
		week = "四";
	} else if (weekNumber == 5) {
		week = "五";
	} else if (weekNumber == 6) {
		week = "六";
	} else if (weekNumber == 0) {
		week = "日";
	}

	if (month < 10) {
		month = "0" + month;
	}
	if (day < 10) {
		day = "0" + day;
	}

	return "周" + week + "<br/>(" + year + "/" + month + "/" + day + ")";
}

//获取 月.日
function dayStr(AddDayCount) {
	var date = new Date();

	date.setDate(date.getDate() + AddDayCount);
	var month = date.getMonth() + 1;
	var day = date.getDate();

	if (month < 10) {
		month = "0" + month;
	}
	if (day < 10) {
		day = "0" + day;
	}

	return month + "." + day;
}

//每周的日期范围(周一到周五)
function weekDate(){
	var date = new Date();
	var day = date.getDay();
	
	if(day == 0){
		day = 7;
	}
	
	var lastWeek = dayStr(-6-day) + "-" + dayStr(-day);
	$("#lastWeek").text(lastWeek);
	
	var thisWeek = dayStr(1-day) + "-" + dayStr(7-day);
	$("#thisWeek").text(thisWeek);
	
	var nextWeek = dayStr(8-day) + "-" + dayStr(14-day);
	$("#nextWeek").text(nextWeek);
	
}

//本周的时间
function thisWeekDate(){
	var date = new Date();
	var day = date.getDay();
	
	if(day == 1){
		$("#firstLine").addClass("thisDayBgColor");
	}else if(day == 2){
		$("#secondLine").addClass("thisDayBgColor");
	}else if(day == 3){
		$("#thirdLine").addClass("thisDayBgColor");
	}else if(day == 4){
		$("#fourthLine").addClass("thisDayBgColor");
	}else if(day == 5){
		$("#fifthLine").addClass("thisDayBgColor");
	}else if(day == 6){
		$("#sixthLine").addClass("thisDayBgColor");
	}else if(day == 0){
		$("#seventhLine").addClass("thisDayBgColor");
	}

	thDate(1);
}

//表头单元格的日期
function thDate(weekNumber){
	var date = new Date();
	var day = date.getDay();
	
	if(day == 0){
		day = 7;
	}
	
	$("#firstLine").html(dateStr(weekNumber-day));
	$("#secondLine").html(dateStr(weekNumber+1-day));
	$("#thirdLine").html(dateStr(weekNumber+2-day));
	$("#fourthLine").html(dateStr(weekNumber+3-day));
	$("#fifthLine").html(dateStr(weekNumber+4-day));
	$("#sixthLine").html(dateStr(weekNumber+5-day));
	$("#seventhLine").html(dateStr(weekNumber+6-day));
}

//切换周
function switchoverWeek() {
	var urlStr = "GetWeek" + "?" + Math.random();
	$.ajax({
		url : urlStr,
		type : "get",
		success : function(resp) {
//			console.log("resp=====" + resp);
			var respInt = parseInt(resp);
//			console.log("respInt=" + respInt);
			if(resp != ""){
				$("#weekNumber").val(respInt);
				if(respInt == -1){
					thDate(-6);
					$("#lastWeek").css("background","#D6D6D6");
				} else if(respInt == 0){
					thisWeekDate();
					$("#thisWeek").css("background","#D6D6D6");
				} else if(respInt == 1){
					thDate(8);
					$("#nextWeek").css("background","#D6D6D6");
				} else{
					thDate(respInt * 7 + 1);
				}
			}else{
				thisWeekDate();
				$("#thisWeek").css("background","#D6D6D6");
			}
		},
		error : function(resp) {
			var status = resp.status;
			errorPopup(status);
		}
	});
}

$(function() {
//	点击上周所触发的事件
	$("#lastWeek").click(function() {
		var urlStr = "Week" + "?" + Math.random();
		var whatWeek = -1;
		$.ajax({
			url : urlStr,
			type : "get",
			data : {
				whatWeek : whatWeek,
			},
			success : function(resp) {
				window.location.reload();
			},
			error : function(resp) {
				var status = resp.status;
				errorPopup(status);
			}
		});
	});
	
//	点击本周所触发的事件
	$("#thisWeek").click(function() {
		var urlStr = "Week" + "?" + Math.random();
		var whatWeek = 0;
		$.ajax({
			url : urlStr,
			type : "get",
			data : {
				whatWeek : whatWeek,
			},
			success : function(resp) {
				window.location.reload();
			},
			error : function(resp) {
				var status = resp.status;
				errorPopup(status);
			}
		});
	});
	
//	点击下周所触发的事件
	$("#nextWeek").click(function() {
		var urlStr = "Week" + "?" + Math.random();
		var whatWeek = 1;
		$.ajax({
			url : urlStr,
			type : "get",
			data : {
				whatWeek : whatWeek,
			},
			success : function(resp) {
				window.location.reload();
			},
			error : function(resp) {
				var status = resp.status;
				errorPopup(status);
			}
		});
	});
	
//	点击上周按钮所触发的事件
	$("#lastWeekBut").click(function() {
		var urlStr = "Week" + "?" + Math.random();
		var value = $("#weekNumber").val();
		var valueInt = parseInt(value);
		var whatWeek = valueInt - 1;
		$.ajax({
			url : urlStr,
			type : "get",
			data : {
				whatWeek : whatWeek,
			},
			success : function(resp) {
				window.location.reload();
			},
			error : function(resp) {
				var status = resp.status;
				errorPopup(status);
			}
		});
	});
	
//	点击下周按钮所触发的事件
	$("#nextWeekBut").click(function() {
		var urlStr = "Week" + "?" + Math.random();
		var value = $("#weekNumber").val();
		var valueInt = parseInt(value);
		var whatWeek = valueInt + 1;
		$.ajax({
			url : urlStr,
			type : "get",
			data : {
				whatWeek : whatWeek,
			},
			success : function(resp) {
				window.location.reload();
			},
			error : function(resp) {
				var status = resp.status;
				errorPopup(status);
			}
		});
	});
});

//退出提示
function logoutHint() {
	document.getElementById("logoutHintBox").style.display = "block";
	document.getElementById("bodyCover").style.display = "block";
}

function closeLogoutHint() {
	document.getElementById("logoutHintBox").style.display = "none";
	document.getElementById("bodyCover").style.display = "none";
}

//清空提示
function emptyHint() {
	document.getElementById("emptyHintBox").style.display = "block";
	document.getElementById("bodyCover").style.display = "block";
}

function closeEmptyHint() {
	document.getElementById("emptyHintBox").style.display = "none";
	document.getElementById("bodyCover").style.display = "none";
}

//提交提示
function submitHint() {
	document.getElementById("submitHintBox").style.display = "block";
	document.getElementById("bodyCover").style.display = "block";
}

function closeSubmitHint() {
	document.getElementById("submitHintBox").style.display = "none";
	document.getElementById("bodyCover").style.display = "none";
}

//修改提示
function updateHint() {
	document.getElementById("updateHintBox").style.display = "block";
	document.getElementById("bodyCover").style.display = "block";
}

function closeUpdateHint() {
	document.getElementById("updateHintBox").style.display = "none";
	document.getElementById("bodyCover").style.display = "none";
}

//删除提示
function deleteHint() {
	document.getElementById("deleteHintBox").style.display = "block";
	document.getElementById("bodyCover").style.display = "block";
}

function closeDeleteHint() {
	document.getElementById("deleteHintBox").style.display = "none";
	document.getElementById("bodyCover").style.display = "none";
}

//登录失败提示
function logDefeatedHint() {
	document.getElementById("logDefeatedBox").style.display = "block";
	document.getElementById("bodyCover").style.display = "block";
}

function closeLogDefeatedHint() {
	document.getElementById("logDefeatedBox").style.display = "none";
	document.getElementById("bodyCover").style.display = "none";
}

//预约冲突提示
function verificationHint() {
	document.getElementById("verificationHintBox").style.display = "block";
	document.getElementById("bodyCover").style.display = "block";
}

function closeLogVerificationHint() {
	document.getElementById("verificationHintBox").style.display = "none";
	document.getElementById("bodyCover").style.display = "none";
}

//会议主题和预约人数为空提示
function noDataHint() {
	document.getElementById("noDataHintBox").style.display = "block";
	document.getElementById("bodyCover").style.display = "block";
}

function closeLogNoDataHint() {
	document.getElementById("noDataHintBox").style.display = "none";
	document.getElementById("bodyCover").style.display = "none";
}

//会议主题为空提示
function subjectHint() {
	document.getElementById("subjectHintBox").style.display = "block";
	document.getElementById("bodyCover").style.display = "block";
}

function closeLogSubjectHint() {
	document.getElementById("subjectHintBox").style.display = "none";
	document.getElementById("bodyCover").style.display = "none";
}

//参会人数为空提示
function numberHint() {
	document.getElementById("numberHintBox").style.display = "block";
	document.getElementById("bodyCover").style.display = "block";
}

function closeLogNumberHint() {
	document.getElementById("numberHintBox").style.display = "none";
	document.getElementById("bodyCover").style.display = "none";
}

//参会人数不是正整数提示
function numberNoHint() {
	document.getElementById("numberNoHintBox").style.display = "block";
	document.getElementById("bodyCover").style.display = "block";
}

function closeLogNumberNoHint() {
	document.getElementById("numberNoHintBox").style.display = "none";
	document.getElementById("bodyCover").style.display = "none";
}

//预约成功提示
function bookingSuccessHint() {
	document.getElementById("bookingSuccessBox").style.display = "block";
	document.getElementById("bodyCover").style.display = "block";
}

function closeBookingSuccessHint() {
	document.getElementById("bookingSuccessBox").style.display = "none";
	document.getElementById("bodyCover").style.display = "none";
	window.location.reload();
}

//修改成功提示
function updateSuccessHint() {
	document.getElementById("updateSuccessBox").style.display = "block";
	document.getElementById("bodyCover").style.display = "block";
}

function closeUpdateSuccessHint() {
	document.getElementById("updateSuccessBox").style.display = "none";
	document.getElementById("bodyCover").style.display = "none";
	window.location.reload();
}

//取消成功提示
function deleteSuccessHint() {
	document.getElementById("deleteSuccessBox").style.display = "block";
	document.getElementById("bodyCover").style.display = "block";
}

function closeDeleteSuccessHint() {
	document.getElementById("deleteSuccessBox").style.display = "none";
	document.getElementById("bodyCover").style.display = "none";
	window.location.reload();
}

//404提示
function noPageHint() {
	document.getElementById("noPageBox").style.display = "block";
	document.getElementById("bodyCover").style.display = "block";
}

function closeNoPageHint() {
	document.getElementById("noPageBox").style.display = "none";
	document.getElementById("bodyCover").style.display = "none";
}

//500提示
function serverErrorHint() {
	document.getElementById("serverErrorBox").style.display = "block";
	document.getElementById("bodyCover").style.display = "block";
}

function closeServerErrorHint() {
	document.getElementById("serverErrorBox").style.display = "none";
	document.getElementById("bodyCover").style.display = "none";
}

//预约日期小于当前日期提示
function dateHint() {
	document.getElementById("dateHintBox").style.display = "block";
	document.getElementById("bodyCover").style.display = "block";
}

function closeDateHint() {
	document.getElementById("dateHintBox").style.display = "none";
	document.getElementById("bodyCover").style.display = "none";
}

//点击登录所触发的事件
function login() {
	document.getElementById("loginbox").style.display = "block";
	document.getElementById("bodyCover").style.display = "block";
	$("#loginThing").val("true");
}

//关闭登录窗口
function closeLogin() {
	document.getElementById("loginbox").style.display = "none";
	document.getElementById("bodyCover").style.display = "none";
}

//登录
function loginInformation() {
	var urlStr = "Login" + "?" + Math.random();
	var mail = $("#mail").val();
	var password = $("#password").val();

	if (mail == "" || password == "") {
		alert("内容不能为空!");
		return;

	} else {
		$.ajax({
			url : urlStr,
			type : "get",
			data : {
				mail : mail,
				password : password
			},
			success : function(resp) {
				// console.log(resp);
				if (resp == "false") {
					logDefeatedHint();
				} else {
					window.location.reload();
				}
			},
			error : function(resp) {
				var status = resp.status;
				errorPopup(status);
			}
		});
	}
}

//按回车触发的事件
$(document).keydown(function(event) {
	if (event.keyCode == "13") {
		if ($("#loginThing").val() == "true") {
			$("#confirmbut").click();
		} else {
			return;
		}
	}
});

//登录
$(document).ready(function() {
	var urlStr = "GetSession" + "?" + Math.random();
	$.ajax({
		url : urlStr,
		type : "get",
		success : function(resp) {
			// console.log("resp=" + resp);
			if (resp != "") {
				var respArray = resp.split(",");
				$("#creator").text(respArray[2]);
				var loginLabel = respArray[2] + " " + respArray[0]
				$("#userinfo").text(loginLabel);
				$("#loginLabel").hide();
				$("#loginThing").val("");
				$("#userinfo").show();
				$("#logoutLabel").show();
			} else {
				return;
			}
		},
		error : function(resp) {
			var status = resp.status;
			errorPopup(status);
		}
	});
});

//登陆成功后数据的背景颜色
function dataBgColor() {
	var text = "";
	var rowNumber = tablecontent.rows.length;
	// console.log(rowNumber);
	var userinfo = $("#userinfo").text();
	// console.log("userinfo = " + userinfo);

	if (userinfo != "") {
		var userinfoArray = userinfo.split(" ");
		text = userinfoArray[0];
	}

	for (i = 1; i < rowNumber; i++) {
		var colNumber = tablecontent.rows[i].cells.length;
		// console.log("colNumber :" + colNumber);
		for (j = 1; j < colNumber; j++) {
			var content = $("#tablecontent").find("tr").eq(i).find("td").eq(j).html();
//			console.log("content :" + content);
			if (content != "") {
				var tdId = $("#tablecontent").find("tr").eq(i).find("td").eq(j).attr("id");
				var tdHiddenId = $("#" + tdId + " input").attr("id");
//				console.log(tdHiddenId);
				var creator = $("#" + tdHiddenId).attr("creator");
				if (text == creator) {
					$("#tablecontent").find("tr").eq(i).find("td").eq(j)
							.removeClass("otherDataBgColor");
					$("#tablecontent").find("tr").eq(i).find("td").eq(j)
							.addClass("myDataBgColor");
				}
			}
		}
	}
}

//退出
function logout() {
	var urlStr = "Logout" + "?" + Math.random();
	$.ajax({
		url : urlStr,
		type : "get",
		success : function(resp) {
			window.location.reload();
		},
		error : function(resp) {
			var status = resp.status;
			errorPopup(status);
		}
	});
}

//查询数据
function selectFun() {
	var urlStr = "MeetingRoom" + "?" + Math.random();
	$("#callMethod").val("select");/* 改变隐藏域的value值,让后台调用相应的方法 */
	var callMethod = $("#callMethod").val();/* 获取隐藏域的value值 */
	var roomId = $("#roomId").val();
	$.ajax({
		url : urlStr,
		type : "get",
		data : {
			callMethod : callMethod,
			roomId : roomId
		},
		success : function(resp) {
			// console.log(resp);
			var dataArray = JSON.parse(resp);
			// console.log(dataArray);
			for (var i = 0; i < dataArray.length; i++) {
				var time = dataArray[i].time;
				var timeScope = dataArray[i].timeScope;
				var wordsNumber = dataArray[i].subject;
				var tdWords = tdData(wordsNumber);
				var str = "<input type = 'hidden' id = 'dataArray" + i
						+ "' idNumber = '" + dataArray[i].id
						+ "' startTime = '" + dataArray[i].startTime
						+ "' endTime = '" + dataArray[i].endTime
						+ "' creator = '" + dataArray[i].creator
						+ "' subject = '" + dataArray[i].subject
						+ "' department = '" + dataArray[i].department
						+ "' number = '" + dataArray[i].number
						+ "' facility = '" + dataArray[i].facility
						+ "' service = '" + dataArray[i].service
						+ "' remark = '" + dataArray[i].remark + "'>"
						+ tdWords;
				showData(time, timeScope, str);
			}
			mergeCells();
			dataBgColor();
		},
		error : function(resp) {
			var status = resp.status;
			errorPopup(status);
		}
	});
}

//获得数据
function getInformation(butId) {
	var startTime = $("#startTime").val();
	var endTime = $("#endTime").val();
	var creator = $("#creator").text();
	var subject = $("#subject").val();
	var department = $("#department").val();
	var number = $("#number").val();
	var n = /^[1-9]\d*$/;
	var facility = "";
	$("input[type='checkbox']").each(function() {
		if ($(this).is(":checked")) {
			facility += $(this).val() + " ";
		}
	});
	var service = $("input[name='service']:checked").val();
	var remark = $("#remark").val();
	var time = $("#thCellText").val();
	var timeScope = judgeTime(startTime, endTime);
	if (subject == "" && number == "") {
		noDataHint();
		return;

	} else if (subject == "" && number != "") {
		subjectHint();
		return;

	} else if (subject != "" && number == "") {
		numberHint();
		return;

	} else if (!n.test(number)) {
		numberNoHint();
		return;

	} else {
		if (butId == "submitConfirmbut") {
			submitFun(startTime, endTime, creator, subject, department, number, facility, service, remark, time, timeScope);
		} else if (butId == "updateConfirmbut") {
			updateFun(startTime, endTime, creator, subject, department, number, facility, service, remark, time, timeScope);
		}
	}
}

// 新增数据
function submitFun(startTime, endTime, creator, subject, department, number, facility, service, remark, time, timeScope) {
		$("#callMethod").val("insert");/* 改变隐藏域的value值,让后台调用相应的方法 */
		var callMethod = $("#callMethod").val();/* 获取隐藏域的value值 */
		var roomId = $("#roomId").val();
		var urlStr = "MeetingRoom" + "?" + Math.random();
		$.ajax({
			url : urlStr,
			type : "get",
			data : {
				callMethod : callMethod,
				startTime : startTime,
				endTime : endTime,
				creator : creator,
				subject : subject,
				department : department,
				number : number,
				facility : facility,
				service : service,
				remark : remark,
				time : time,
				timeScope : timeScope,
				roomId : roomId
			},
			success : function(resp) {
				bookingSuccessHint();
			},
			error : function(resp) {
				var status = resp.status;
				errorPopup(status);
			}
		});
}

// 修改数据
function updateFun(startTime, endTime, creator, subject, department, number, facility, service, remark, time, timeScope) {
		$("#callMethod").val("update");/* 改变隐藏域的value值,让后台调用相应的方法 */
		var callMethod = $("#callMethod").val();/* 获取隐藏域的value值 */
		var id = $("#idNumber").val();
		var urlStr = "MeetingRoom" + "?" + Math.random();
		$.ajax({
			url : urlStr,
			type : "get",
			data : {
				callMethod : callMethod,
				startTime : startTime,
				endTime : endTime,
				creator : creator,
				subject : subject,
				department : department,
				number : number,
				facility : facility,
				service : service,
				remark : remark,
				time : time,
				timeScope : timeScope,
				id : id
			},
			success : function(resp) {
				updateSuccessHint();
			},
			error : function(resp) {
				var status = resp.status;
				errorPopup(status);
			}
		});
}

// 删除数据
function deleteFun() {
		$("#callMethod").val("delete");/* 改变隐藏域的value值,让后台调用相应的方法 */
		var callMethod = $("#callMethod").val();/* 获取隐藏域的value值 */
		var id = $("#idNumber").val();

		closeDeleteHint(); 
		
		var urlStr = "MeetingRoom" + "?" + Math.random();
		$.ajax({
			url : urlStr,
			type : "get",
			data : {
				callMethod : callMethod,
				id : id
			},
			success : function(resp) {
				deleteSuccessHint();
			},
			error : function(resp) {
				var status = resp.status;
				errorPopup(status);
			}
		});
}

// 提交数据是进行验证
function verificationFun(butId) {
	var startTime = $("#startTime").val();
	var endTime = $("#endTime").val();
	var roomId = $("#roomId").val();
	var time = $("#thCellText").val();
	var timeScope = judgeTime(startTime, endTime);
	var urlStr = "VerificationServlet" + "?" + Math.random();
	$.ajax({
		url : urlStr,
		type : "get",
		data : {
			time : time,
			roomId : roomId
		},
		success : function(resp) {
//			console.log(resp);
			var dataArray = JSON.parse(resp);
//			console.log(dataArray);
			for (var i = 0; i < dataArray.length; i++) {
				var rowNumber = dataArray[i].timeScope;
//				console.log(rowNumber);
				var timeScopeArray = timeScope.split(",");
				var rowNumberArray = rowNumber.split(",");

				for (var j = 0; j < timeScopeArray.length; j++) {
					for (var k = 0; k < rowNumberArray.length; k++) {
						if (timeScopeArray[j] == rowNumberArray[k]) {
							verificationHint();
							return;
						}
					}
				}
			}
			getInformation(butId);
		},
		error : function(resp) {
			var status = resp.status;
			errorPopup(status);
		}
	});
}

function verificationDate(){
	var date = new Date();

	var year = date.getFullYear();
	var month = date.getMonth() + 1;
	var day = date.getDate();
	
	var time = $("#thCellText").val();
	var bookingYear = parseInt(time.slice(0, 4));
	var bookingMonth = parseInt(time.slice(5, 7));
	var bookingDay = parseInt(time.slice(8, 10));
	
	if(year > bookingYear){
		dateHint();
		return;
	}else{
		if(month > bookingMonth){
			dateHint();
			return;
		}else{
			if(day > bookingDay){
				dateHint();
				return;
			}else{
				submitHint();
			}
		}
	}
}

$(function() {

	$("#submitConfirmbut").click(function() {
		var butId = $(this).attr("id");
		closeSubmitHint();
		verificationFun(butId);
	});

	$("#updateConfirmbut").click(function() {
		var butId = $(this).attr("id");
		closeUpdateHint();
		getInformation(butId);
	});
});

$(function() {
	$("#tablecontent td").click(function(event) {
		// console.log(event);
		
		var rowNumber = $(this).parent().prevAll().length;
		// console.log("行号=" + rowNumber);
		var colNumber = $(this).prevAll().length;
		// console.log("列号=" + colNumber);
		
		if (colNumber == 0 || rowNumber == 0) {
			return;
		} else {
			$(this).toggleClass("checkedBgColor").parent()
					.siblings().children().removeClass("checkedBgColor");
			$(this).siblings().removeClass("checkedBgColor");
			
			var tdId = event.target.id;
//			console.log(tdId);
			var tdIdArray = tdId.split("_");
			var tdNumber = parseInt(tdIdArray[1]);
			var str = $("#tablecontent").find("tr").eq(0).find("td").eq(tdNumber).text();
			
			$("#thCellText").val(str.slice(3, 13));

			var data = $(event.target).text();
			// console.log($(event.target));

			var userinfo = $("#userinfo").text();
			var username = userinfo.split(" ");

			var tdHiddenId = $("#" + tdId + " input").attr("id");

			var idNumber = $("#" + tdHiddenId).attr("idNumber");
			var startTime = $("#" + tdHiddenId).attr("startTime");
			var endTime = $("#" + tdHiddenId).attr("endTime");
			var creator = $("#" + tdHiddenId).attr("creator");
			var subject = $("#" + tdHiddenId).attr("subject");
			var department = $("#" + tdHiddenId).attr("department");
			var number = $("#" + tdHiddenId).attr("number");
			var facility = $("#" + tdHiddenId).attr("facility");
			var service = $("#" + tdHiddenId).attr("service");
			var remark = $("#" + tdHiddenId).attr("remark");

			$("#idNumber").val(idNumber);

			$("#startTimeLabel").text(startTime);
			$("#startTime").val(startTime);

			$("#endTimeLabel").text(endTime);
			$("#endTime").val(endTime);

			$("#creator").text(creator);
			$("#creatorLabel").text(creator);

			$("#subjectLabel").text(subject);
			$("#subject").val(subject);

			$("#departmentLabel").text(department);
			$("#department").val(department);

			$("#numberLabel").text(number);
			$("#number").val(number);

			$("#facilityLabel").text(facility);

			$("#remarkLabel").text(remark);
			$("#remark").val(remark);
			
			var optinLength = optionArray.length - 2;
			for (i = 0; i < optinLength; i++) {
				$("#endTime option:eq(" + i + ")").attr("disabled", false);
			}
			
			if (userinfo.length > 0) {
				if (data == "") {
					document.getElementById("inputBoxCover").style.display = "none";

					$("#submitbutTd").show();
					$("#emptybut").show();
					$("#updatebut").hide();
					$("#deletebut").hide();

					$("#startTime").attr("disabled", true);

					var tdText = $("#tablecontent").find("tr").eq(rowNumber).find("td").eq(0).text();
					var timeArray = tdText.split("-");
					
					$("#startTime").val(timeArray[0]);
					$("#endTime").val(timeArray[1]);
					
					var timeEndVal = $("#endTime").val();
					selectDisabledFunA(timeEndVal);
					selectDisabledFunC(tdId);

					$("#creator").text(username[0]);
					$("#subject").val("");
					$("#department").val("");
					$("#number").val("");
					$("input[type='checkbox']").prop("checked", false);
					$("#serviceNo")[0].checked = true;
					$("#remark").val("");
                    
					$("#registerTable").hide();
					$("#bookingTable").show();
					$("#inputTable").show();
					$("#labelTable").hide();

				} else {

					if ($("#creator").text() == username[0]) {
						document.getElementById("inputBoxCover").style.display = "none";

						$("#submitbutTd").hide();
						$("#emptybut").show();
						$("#updatebut").show();
						$("#deletebut").show();
						
						$("#registerTable").show();
						$("#bookingTable").hide();
						$("#inputTable").show();
						$("#labelTable").hide();

						if (facility.length > 0) {
							var facilityArray = facility.split(" ");
							var facility1 = "投影";
							var facility2 = "电话";
							var facility3 = "视频";
							for (i = 0; i < facilityArray.length; i++) {
								if (facility1 == facilityArray[i]) {
									$("#facility1").prop("checked", true);
								}
								if (facility2 == facilityArray[i]) {
									$("#facility2").prop("checked", true);
								}
								if (facility3 == facilityArray[i]) {
									$("#facility3").prop("checked", true);
								}
							}
						} else {
							$("input[type='checkbox']").prop("checked", false);
						}

						if (service == "true") {
							$("#serviceYes")[0].checked = true;
						} else {
							$("#serviceNo")[0].checked = true;
						}


						$("#startTime").attr("disabled", true);
						
						var timeEnd = $("#startTime").val();
						selectDisabledFunB(timeEnd);
						selectDisabledFunD(tdId);
					} else {
						hideButton();
						
						$("#registerTable").show();
						$("#bookingTable").hide();
						$("#inputTable").hide();
						$("#labelTable").show();
						
						if (service == "true") {
							$("#serviceLabel").text("是");
						} else {
							$("#serviceLabel").text("否");
						}

					}
				}
			} else {
				hideButton();

				if (data == "") {
					$("#registerTable").hide();
					$("#bookingTable").show();
					
					$("#startTime").val("08:00");
					$("#endTime").val("08:30");
					$("#creator").text("");
					$("#subject").val("");
					$("#department").val("");
					$("#number").val("");
					$("input[type='checkbox']").prop("checked",false);
					$("#serviceNo")[0].checked = true;
					$("#remark").val("");
	
				} else {
					$("#registerTable").show();
					$("#bookingTable").hide();
					$("#inputTable").hide();
					$("#labelTable").show();
					
					if (service == "true") {
						$("#serviceLabel").text("是");
					} else {
						$("#serviceLabel").text("否");
					}
				}
			}
		}
		videoHintDiv();
	});
});
4.java代码
(1)meetingRoom.sql(数据库建表)
create table meeting_room
(
  id serial,
  startTime varchar,
  endTime varchar,
  creator varchar,
  subject varchar,
  department varchar,
  number integer,
  facility varchar,
  service boolean,
  remark varchar,
  time varchar,
  timeScope varchar,
  roomId int
)

create table  room_information
(
  id serial,
  roomNumber varchar
)
(2)log4j.properties(log日志文件)
# Root logger option
log4j.rootLogger=INFO,stdout,FILE

# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

log4j.appender.FILE=org.apache.log4j.RollingFileAppender  
log4j.appender.FILE.Append=true  
log4j.appender.FILE.File=../logs/log4jtest.log  
log4j.appender.FILE.Threshold=INFO  
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout  
log4j.appender.FILE.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%5p] - %c -%F(%L) -%m%n  
(3)c3p0-config.xml(C3P0连接数据库)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/2002/xmlspec/dtd/2.10/xmlspec.dtd">
<c3p0-config>
	<default-config>
		<property name="highgo"></property>
		<property name="driverClass">org.postgresql.Driver</property>
		<property name="jdbcUrl">jdbc:postgresql://localhost:5432/postgres</property>
		<property name="user">postgres</property>
		<property name="password">highgo123</property>
        <property name="maxIdleTime">10</property>
        <property name="maxPoolSize">50</property>
        <property name="idleConnectionTestPeriod">10</property>
        <property name="maxStatements">200</property>  
	</default-config>
</c3p0-config>
(4)JdbcUtils.java(JDBC连接数据库和加载数据库驱动)
package com.highgo.booking.util;

import java.sql.*;
import org.slf4j.*;
import com.mchange.v2.c3p0.ComboPooledDataSource;

public class JdbcUtils {

	static ComboPooledDataSource dataSource = new ComboPooledDataSource("highgo");

	public static Connection getConnection() {

		Logger logger = LoggerFactory.getLogger(JdbcUtils.class);

		Connection con = null;
		try {
			con = dataSource.getConnection();
			logger.info("Database driver loaded successfully,the database connection was successful");
		} catch (Exception e) {
			e.printStackTrace();
			logger.info(e.getMessage());
			logger.info("数据库连接失败,数据库驱动加载失败");
		}
		return con;
	}

	// Close the result set object
	public static void close(ResultSet rs) {
		Logger logger = LoggerFactory.getLogger(JdbcUtils.class);

		try {
			if (rs != null) {
				rs.close();
			}
			logger.info("关闭rs成功 ");
		} catch (Exception e) {
			e.printStackTrace();
			logger.info(e.getMessage());
			logger.info("关闭rs出现异常");
		}
	}

	// Close the preparedStatement object
	public static void close(PreparedStatement pstmt) {
		Logger logger = LoggerFactory.getLogger(JdbcUtils.class);

		try {
			if (pstmt != null) {
				pstmt.close();
			}
			logger.info("关闭pstmt成功 ");
		} catch (Exception e) {
			e.printStackTrace();
			logger.info(e.getMessage());
			logger.info("关闭pstmt出现异常");
		}
	}

	// Close the result set object
	public static void close(Connection con) {
		Logger logger = LoggerFactory.getLogger(JdbcUtils.class);

		try {
			if (con != null) {
				con.close();
			}
			logger.info("关闭con成功 ");
		} catch (Exception e) {
			e.printStackTrace();
			logger.info(e.getMessage());
			logger.info("关闭con出现异常");
		}
	}
}
(5)LoginGetSession.java(获取存在Session中的登录用的数据)
package com.highgo.booking.login;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@WebServlet("/GetSession")
public class LoginGetSession extends HttpServlet {
	private static final long serialVersionUID = 1L;

	Logger logger = LoggerFactory.getLogger(getClass());

	public void init() throws ServletException {
		logger.info("+++init+++");
	}

	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		logger.info("get__start");
		
		request.setCharacterEncoding("utf-8");// 设置请求字符集编码
		response.setContentType("text/html;charset=utf-8");// 设置响应字符集编码
		PrintWriter out = response.getWriter();

		HttpSession session = request.getSession();
		if (session != null) {
			Object mail = session.getAttribute("mail");
			Object password = session.getAttribute("password");
			Object user = session.getAttribute("user");
			if (null == mail || null == password || "" == mail || "" == password) {
				return;
			}
			String str = mail + "," + password + "," + user;
			out.print(str);
		}
		logger.info("登录成功");
		logger.info("get end");
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		logger.info("post__start");

		doGet(request, response);

		logger.info("post end");
	}

	public void destroy() {
		logger.info("+++destroy+++");
	}
}
(6)LoginServlet.java(登录调用验证方法)
package com.highgo.booking.login;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.highgo.booking.outlook.LdapADHelper;

@WebServlet("/Login")
public class LoginServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	Logger logger = LoggerFactory.getLogger(getClass());

	public void init() throws ServletException {
		logger.info("+++init+++");
	}

	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		logger.info("get--start");

		request.setCharacterEncoding("utf-8");// 设置请求字符集编码
		response.setContentType("text/html;charset=utf-8");// 设置响应字符集编码
		PrintWriter out = response.getWriter();

		String mail = request.getParameter("mail");
		String password = request.getParameter("password");
		try {

			LdapADHelper ad = new LdapADHelper(mail, password);
			boolean value = ad.initLdap();
			if (value == false) {
				out.print(false);
				return;
			}
			String user = ad.GetADInfo("sn", "mail", mail);// 查找用户
//			logger.info(user);
			ad.closeLdap();

			HttpSession session = request.getSession();
			session.setAttribute("mail", mail);
			session.setAttribute("password", password);
			session.setAttribute("user", user);

			logger.info("邮箱验证成功");
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println(e);
			logger.info("邮箱验证失败");
		}
		logger.info("get end");
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		logger.info("post__start");

		doGet(request, response);

		logger.info("post end");
	}

	public void destroy() {
		logger.info("+++destroy+++");
	}
}

(7)LogoutServlet.java(退出登录,清空Session中登录用的数据)
package com.highgo.booking.login;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@WebServlet("/Logout")
public class LogoutServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	Logger logger = LoggerFactory.getLogger(getClass());

	public void init() throws ServletException {
		logger.info("+++init+++");
	}

	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		logger.info("get--start");

		HttpSession session = request.getSession(false);

		if (session == null) {
			return;
		}
		session.removeAttribute("mail");
		session.removeAttribute("password");
		session.removeAttribute("user");

		logger.info("session销毁成功");
		logger.info("get end");
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		logger.info("post__start");

		doGet(request, response);

		logger.info("post end");
	}

	public void destroy() {
		logger.info("+++destroy+++");
	}
}

(8)DayList.java(构造类和方法)
package com.highgo.booking.model;

public class DayList {
	private int id;
	private String startTime;
	private String endTime;
	private String creator;
	private String subject;
	private String department;
	private int number;
	private String facility;
	private boolean service;
	private String remark;
	private String time;
	private String timeScope;
	private int roomId;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getStartTime() {
		return startTime;
	}

	public void setStartTime(String startTime) {
		this.startTime = startTime;
	}

	public String getEndTime() {
		return endTime;
	}

	public void setEndTime(String endTime) {
		this.endTime = endTime;
	}

	public String getCreator() {
		return creator;
	}

	public void setCreator(String creator) {
		this.creator = creator;
	}

	public String getSubject() {
		return subject;
	}

	public void setSubject(String subject) {
		this.subject = subject;
	}

	public String getDepartment() {
		return department;
	}

	public void setDepartment(String department) {
		this.department = department;
	}

	public int getNumber() {
		return number;
	}

	public void setNumber(int number) {
		this.number = number;
	}

	public String getFacility() {
		return facility;
	}

	public void setFacility(String facility) {
		this.facility = facility;
	}

	public boolean getService() {
		return service;
	}

	public void setService(boolean service) {
		this.service = service;
	}

	public String getRemark() {
		return remark;
	}

	public void setRemark(String remark) {
		this.remark = remark;
	}

	public String getTime() {
		return time;
	}

	public void setTime(String time) {
		this.time = time;
	}

	public String getTimeScope() {
		return timeScope;
	}

	public void setTimeScope(String timeScope) {
		this.timeScope = timeScope;
	}

	public int getRoomId() {
		return roomId;
	}

	public void setRoomId(int roomId) {
		this.roomId = roomId;
	}
}

(9)MeetingInformation.java(构造类和方法)
package com.highgo.booking.model;

public class MeetingInformation {

	private int id;
	private String roomNumber;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getRoomNumber() {
		return roomNumber;
	}

	public void setRoomNumber(String roomNumber) {
		this.roomNumber = roomNumber;
	}
}

(10)LdapADHelper.java(邮箱验证方法)
package com.highgo.booking.outlook;

import java.util.*;
import javax.naming.*;
import javax.naming.directory.*;
import javax.naming.ldap.*;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class LdapADHelper {
	Logger logger = LoggerFactory.getLogger(getClass());

	private String host, url, adminName, adminPassword;
	private LdapContext ctx = null;

	public LdapADHelper(String mail, String password) {
		this.adminName = mail;
		this.adminPassword = password;
	}

	// 初始化ldap
	public boolean initLdap() {
		this.host = " ";//引号内为IP地址
		this.url = new String("ldap://" + host);

		Hashtable<String, String> HashEnv = new Hashtable<>();
		HashEnv.put(Context.SECURITY_AUTHENTICATION, "simple"); // LDAP访问安全级别
		HashEnv.put(Context.SECURITY_PRINCIPAL, adminName); // AD User
		HashEnv.put(Context.SECURITY_CREDENTIALS, adminPassword); // AD Password
		HashEnv.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
		HashEnv.put(Context.PROVIDER_URL, url);
		try {
			ctx = new InitialLdapContext(HashEnv, null);
			logger.info("初始化ldap成功");
			return true;
		} catch (NamingException e) {
			// e.printStackTrace();
			System.err.println("Throw Exception : " + e.getMessage());
			return false;
		}
	}

	// 关闭ldap
	public void closeLdap() {
		try {
			if (null != ctx) {
				this.ctx.close();
			}
		} catch (NamingException e) {
			e.printStackTrace();
			System.err.println("Throw Exception : " + e);
		}
	}

	public String GetADInfo(String type, String filter, String name) {

		String AttributeValue = "";
		/* String result = ""; */
		try {
			String searchBase = "dc=highgo,dc=com";
			// organizationalPerson是top的子类
			// String searchFilter = "(&(objectClass=organizationalPerson)(" + filter + "=*"
			// + name + "*))";
			String searchFilter = "(&(objectClass=User)(" + filter + "=*" + name + "*))";
			logger.info("searchFilter = " + searchFilter);

			// 创建搜索控制
			SearchControls searchCtls = new SearchControls();
			// 设置搜索范围
			searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);

			// 根据设置的域节点、过滤器类和搜索控制器搜索LDAP得到结果
			NamingEnumeration<SearchResult> results = ctx.search(searchBase, searchFilter, searchCtls);
			logger.info("results = " + results);

			// 初始化搜索结果
			while (results.hasMoreElements()) {// 遍历结果
				SearchResult searchResult = results.next();// 得到符合搜索条件的DN

				String dn = searchResult.getName();
				logger.info("dn = (" + dn + ")");

				Attributes Attrs = searchResult.getAttributes();// 得到符合条件的属性集
				if (Attrs != null) {
					try {
						for (NamingEnumeration<? extends Attribute> ne = Attrs.getAll(); ne.hasMore();) {
							Attribute Attr = (Attribute) ne.next();

							// memberOf,distinguishedName
							if (!"displayName".equals(Attr.getID().toString())) {
								continue;
							}
							logger.info("AttributeID=" + Attr.getID().toString());

							// 读取属性
							for (NamingEnumeration<?> e = Attr.getAll(); e.hasMore();) {
								AttributeValue = e.next().toString();
								logger.info("AttributeValue=" + AttributeValue);
							}
							logger.info("---------------");
						}
					} catch (NamingException e) {
						System.err.println("Throw Exception : " + e);
					}
				} // if
			} // while
			logger.info("************************************************");

		} catch (NamingException e) {
			e.printStackTrace();
			System.err.println("Throw Exception : " + e);
		}
		return AttributeValue;
	}
}
(11)MeetingRoomId.java(获取数据库中会议室的信息)
package com.highgo.booking.room;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.highgo.booking.model.MeetingInformation;
import com.highgo.booking.service.MeetingRoomService;
import com.highgo.booking.util.JdbcUtils;

import net.sf.json.JSONArray;

@WebServlet("/MeetingRoomId")
public class MeetingRoomId extends HttpServlet {
	private static final long serialVersionUID = 1L;
	MeetingRoomService utilService = new MeetingRoomService();

	Logger logger = LoggerFactory.getLogger(getClass());

	public void init() throws ServletException {
		logger.info("+++init+++");
	}

	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		logger.info("get--start");

		request.setCharacterEncoding("utf-8");// 设置请求字符集编码
		response.setContentType("text/html;charset=utf-8");// 设置响应字符集编码
		String str = "select * from room_information";
		ResultSet rs = null;
		PreparedStatement pstmt = null;
		Connection con = null;
		List<MeetingInformation> list = new ArrayList<MeetingInformation>();
		try {
			con = JdbcUtils.getConnection();
			pstmt = con.prepareStatement(str);
			rs = pstmt.executeQuery();
			while (rs.next()) {
				MeetingInformation room = new MeetingInformation();
				room.setId(rs.getInt("id"));
				room.setRoomNumber(rs.getString("roomNumber"));
				list.add(room);
			}
			JSONArray jsonstr = JSONArray.fromObject(list);
			PrintWriter out = response.getWriter();
			out.print(jsonstr);
			logger.info("会议室信息获取成功");
//			System.out.println(jsonstr);
		} catch (Exception e) {
			e.printStackTrace();
			logger.info(e.getMessage());
			logger.info("会议室信息获取失败");
		} finally {
			JdbcUtils.close(rs);
			JdbcUtils.close(pstmt);
			JdbcUtils.close(con);
		}

		logger.info("get end");
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		logger.info("post__start");

		doGet(request, response);

		logger.info("post end");
	}

	public void destroy() {
		logger.info("+++destroy+++");
	}
}

(12)RoomGetSession.java(获取存在Session中的会议室的id)
package com.highgo.booking.room;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@WebServlet("/GetRoomId")
public class RoomGetSession extends HttpServlet {
	private static final long serialVersionUID = 1L;

	Logger logger = LoggerFactory.getLogger(getClass());

	public void init() throws ServletException {
		logger.info("+++init+++");
	}

	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		logger.info("get--start");

		request.setCharacterEncoding("utf-8");// 设置请求字符集编码
		response.setContentType("text/html;charset=utf-8");// 设置响应字符集编码
		PrintWriter out = response.getWriter();

		HttpSession session = request.getSession();
		if (session != null) {
			Object roomId = session.getAttribute("roomId");
			if (null == roomId) {
				return;
			}
			out.print(roomId);

		}
		logger.info("会议室id获取成功");
		logger.info("get end");
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		logger.info("post__start");

		doGet(request, response);

		logger.info("post end");
	}

	public void destroy() {
		logger.info("+++destroy+++");
	}
}

(13)RoomSetSession.java(把前端传来的会议室的id存到Session中)
package com.highgo.booking.room;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@WebServlet("/RoomId")
public class RoomSetSession extends HttpServlet {
	private static final long serialVersionUID = 1L;

	Logger logger = LoggerFactory.getLogger(getClass());

	public void init() throws ServletException {
		logger.info("+++init+++");
	}

	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		logger.info("get--start");

		request.setCharacterEncoding("utf-8");// 设置请求字符集编码
		response.setContentType("text/html;charset=utf-8");// 设置响应字符集编码

		String roomId = request.getParameter("roomId");
//		logger.info(roomId);
		try {

			HttpSession session = request.getSession();
			session.setAttribute("roomId", roomId);

			logger.info("会议室id存入session成功");
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println(e);
			logger.info("会议室id存入session失败");
		}
		logger.info("get end");
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		logger.info("post__start");

		doGet(request, response);

		logger.info("post end");
	}

	public void destroy() {
		logger.info("+++destroy+++");
	}
}

(14)MeetingRoomService.java(用会议室id进行条件查询)
package com.highgo.booking.service;

import java.sql.*;
import java.util.*;
import org.slf4j.*;

import com.highgo.booking.model.DayList;
import com.highgo.booking.util.JdbcUtils;

public class MeetingRoomService {

	Logger logger = LoggerFactory.getLogger(getClass());

	// select data
	public List<DayList> getDayList(String roomId) {
		logger.info("+++ select start +++");

		String str = "select * from meeting_room where roomId = ?";
		ResultSet rs = null;
		PreparedStatement pstmt = null;
		Connection con = null;
		List<DayList> dayList = new ArrayList<DayList>();
		try {
			con = JdbcUtils.getConnection();
			pstmt = con.prepareStatement(str);
			pstmt.setInt(1, Integer.parseInt(roomId));

			rs = pstmt.executeQuery();
			while (rs.next()) {
				DayList timeRoom = new DayList();
				timeRoom.setId(rs.getInt("id"));
				timeRoom.setStartTime(rs.getString("startTime"));
				timeRoom.setEndTime(rs.getString("endTime"));
				timeRoom.setCreator(rs.getString("creator"));
				timeRoom.setSubject(rs.getString("subject"));
				timeRoom.setDepartment(rs.getString("department"));
				timeRoom.setNumber(rs.getInt("number"));
				timeRoom.setFacility(rs.getString("facility"));
				timeRoom.setService(rs.getBoolean("service"));
				timeRoom.setRemark(rs.getString("remark"));
				timeRoom.setTime(rs.getString("time"));
				timeRoom.setTimeScope(rs.getString("timeScope"));
				timeRoom.setRoomId(rs.getInt("roomId"));
				dayList.add(timeRoom);
			}
			logger.info("查询成功");
			
		} catch (Exception e) {
			e.printStackTrace();
			logger.info(e.getMessage());
			
			logger.info("查询失败");
			
		} finally {
			JdbcUtils.close(rs);
			JdbcUtils.close(pstmt);
			JdbcUtils.close(con);
		}
		logger.info("select end");

		return dayList;
	}

	// insert data
	public void insert(String startTime, String endTime, String creator, String subject, String department,
			String number, String facility, String service, String remark, String time, String timeScope,
			String roomId) {
		logger.info("insert start");

		String str = "insert into meeting_room(startTime,endTime,creator,subject,department, number,facility,service,remark,time,timeScope,roomId) values(?,?,?,?,?,?,?,?,?,?,?,?)";
		ResultSet rs = null;
		PreparedStatement pstmt = null;
		Connection con = null;
		try {
			con = JdbcUtils.getConnection();
			pstmt = con.prepareStatement(str);
			pstmt.setString(1, startTime);
			pstmt.setString(2, endTime);
			pstmt.setString(3, creator);
			pstmt.setString(4, subject);
			pstmt.setString(5, department);
			pstmt.setInt(6, Integer.parseInt(number));
			pstmt.setString(7, facility);
			pstmt.setBoolean(8, Boolean.parseBoolean(service));
			pstmt.setString(9, remark);
			pstmt.setString(10, time);
			pstmt.setString(11, timeScope);
			pstmt.setInt(12, Integer.parseInt(roomId));
			pstmt.executeUpdate();
			
			logger.info("新增成功");
			
		} catch (Exception e) {
			e.printStackTrace();
			logger.info(e.getMessage());
			
			logger.info("新增失败");
			
		} finally {
			JdbcUtils.close(rs);
			JdbcUtils.close(pstmt);
			JdbcUtils.close(con);
		}
		logger.info("insert end");
	}

	// update data
	public void update(String startTime, String endTime, String creator, String subject, String department,
			String number, String facility, String service, String remark, String time, String timeScope, String id) {
		logger.info("+++ update start +++");

		String str = "update meeting_room set startTime=?, endTime=?, creator=?, subject=?, department=?, number=?, facility=?, service=?, remark=?, time=?, timeScope=? where id = ?";
		ResultSet rs = null;
		PreparedStatement pstmt = null;
		Connection con = null;
		try {
			con = JdbcUtils.getConnection();
			pstmt = con.prepareStatement(str);
			pstmt.setString(1, startTime);
			pstmt.setString(2, endTime);
			pstmt.setString(3, creator);
			pstmt.setString(4, subject);
			pstmt.setString(5, department);
			pstmt.setInt(6, Integer.parseInt(number));
			pstmt.setString(7, facility);
			pstmt.setBoolean(8, Boolean.parseBoolean(service));
			pstmt.setString(9, remark);
			pstmt.setString(10, time);
			pstmt.setString(11, timeScope);
			pstmt.setInt(12, Integer.parseInt(id));
			pstmt.executeUpdate();
			
			logger.info("修改成功");
			
		} catch (Exception e) {
			e.printStackTrace();
			logger.info(e.getMessage());
			
			logger.info("修改失败");
			
		} finally {
			JdbcUtils.close(rs);
			JdbcUtils.close(pstmt);
			JdbcUtils.close(con);
		}
		logger.info("update end");
	}

	// delete data
	public void delete(String id) {
		logger.info("+++ delete start +++");

		String str = "delete from meeting_room where id = ?";
		ResultSet rs = null;
		PreparedStatement pstmt = null;
		Connection con = null;
		try {
			con = JdbcUtils.getConnection();
			pstmt = con.prepareStatement(str);
			pstmt.setInt(1, Integer.parseInt(id));
			pstmt.executeUpdate();
			
			logger.info("删除成功");
			
		} catch (Exception e) {
			e.printStackTrace();
			logger.info(e.getMessage());
			
			logger.info("删除失败");
			
		} finally {
			JdbcUtils.close(rs);
			JdbcUtils.close(pstmt);
			JdbcUtils.close(con);
		}
		logger.info("delete end");
	}
}
(15)CallMethodServlet.java(调用增删改查的方法)
package com.highgo.booking.servlet;

import java.io.*;
import java.util.List;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import org.slf4j.*;

import com.highgo.booking.model.DayList;
import com.highgo.booking.service.MeetingRoomService;

import net.sf.json.JSONArray;

@WebServlet("/MeetingRoom")
public class CallMethodServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	MeetingRoomService utilService = new MeetingRoomService();

	Logger logger = LoggerFactory.getLogger(getClass());

	public void init() throws ServletException {
		logger.info("+++init+++");
	}

	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		logger.info("get--start");

		request.setCharacterEncoding("utf-8");// 设置请求字符集编码
		response.setContentType("text/html;charset=utf-8");// 设置响应字符集编码

		String hiddenvalue = request.getParameter("callMethod");// 获取隐藏域的value值
		logger.info("value =" + hiddenvalue);

		String hidden = (hiddenvalue == null) ? "select" : hiddenvalue;
		try {
			if ("select".equals(hidden)) {
				String roomId = request.getParameter("roomId");

				List<DayList> list = utilService.getDayList(roomId);
				JSONArray jsonstr = JSONArray.fromObject(list);
				PrintWriter out = response.getWriter();
				out.print(jsonstr);
				System.out.println(jsonstr);
				
				logger.info("查询数据成功");

			} else if ("insert".equals(hidden)) {
				String startTime = request.getParameter("startTime");
				String endTime = request.getParameter("endTime");
				String creator = request.getParameter("creator");
				String subject = request.getParameter("subject");
				String department = request.getParameter("department");
				String number = request.getParameter("number");
				String facility = request.getParameter("facility");
				String service = request.getParameter("service");
				String remark = request.getParameter("remark");
				String time = request.getParameter("time");
				String timeScope = request.getParameter("timeScope");
				String roomId = request.getParameter("roomId");
				
				utilService.insert(startTime, endTime, creator, subject, department, number, facility, service, remark,
						time, timeScope, roomId);
				
				logger.info("新增数据成功");
				
			} else if ("update".equals(hidden)) {

				String startTime = request.getParameter("startTime");
				String endTime = request.getParameter("endTime");
				String creator = request.getParameter("creator");
				String subject = request.getParameter("subject");
				String department = request.getParameter("department");
				String number = request.getParameter("number");
				String facility = request.getParameter("facility");
				String service = request.getParameter("service");
				String remark = request.getParameter("remark");
				String time = request.getParameter("time");
				String timeScope = request.getParameter("timeScope");
				String id = request.getParameter("id");

				utilService.update(startTime, endTime, creator, subject, department, number, facility, service, remark,
						time, timeScope, id);

				logger.info("修改数据成功");
				
			} else if ("delete".equals(hidden)) {
				String id = request.getParameter("id");

				utilService.delete(id);
				
				logger.info("删除数据成功");
			}
		} catch (Exception e) {
			e.printStackTrace();
			logger.info(e.getMessage());
			
			logger.info("增删改查操作失败");
		}
		logger.info("get end");
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		logger.info("post__start");

		doGet(request, response);

		logger.info("post end");
	}

	public void destroy() {
		logger.info("+++destroy+++");
	}
}
(16)verificationServlet.java(提交数据时验证数据库是否存在该数据)
package com.highgo.booking.verification;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.highgo.booking.model.DayList;
import com.highgo.booking.service.MeetingRoomService;
import com.highgo.booking.util.JdbcUtils;

import net.sf.json.JSONArray;

@WebServlet("/VerificationServlet")
public class verificationServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	MeetingRoomService utilService = new MeetingRoomService();

	Logger logger = LoggerFactory.getLogger(getClass());

	public void init() throws ServletException {
		logger.info("+++init+++");
	}

	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		logger.info("get--start");

		request.setCharacterEncoding("utf-8");// 设置请求字符集编码
		response.setContentType("text/html;charset=utf-8");// 设置响应字符集编码
		
		String time = request.getParameter("time");
		String roomId = request.getParameter("roomId");
		
		String str = "select timeScope from meeting_room where roomId = ? and time = ?";
		ResultSet rs = null;
		PreparedStatement pstmt = null;
		Connection con = null;
		List<DayList> dayList = new ArrayList<DayList>();
		try {
			con = JdbcUtils.getConnection();
			pstmt = con.prepareStatement(str);
			pstmt.setInt(1, Integer.parseInt(roomId));
			pstmt.setString(2, time);

			rs = pstmt.executeQuery();
			while (rs.next()) {
				DayList timeRoom = new DayList();
				timeRoom.setTimeScope(rs.getString("timeScope"));
				dayList.add(timeRoom);
			}
			JSONArray jsonstr = JSONArray.fromObject(dayList);
			PrintWriter out = response.getWriter();
			out.print(jsonstr);

			logger.info("提交时验证获取信息成功");
		} catch (Exception e) {
			e.printStackTrace();
			logger.info(e.getMessage());
			logger.info("提交时验证获取信息失败");
		} finally {
			JdbcUtils.close(rs);
			JdbcUtils.close(pstmt);
			JdbcUtils.close(con);
		}
		logger.info("get end");
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		logger.info("post__start");

		doGet(request, response);

		logger.info("post end");
	}

	public void destroy() {
		logger.info("+++destroy+++");
	}
}

(17)WeekGetSession.java(获取存在Session中周的编号)
package com.highgo.booking.week;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@WebServlet("/GetWeek")
public class WeekGetSession extends HttpServlet {
	private static final long serialVersionUID = 1L;

	Logger logger = LoggerFactory.getLogger(getClass());

	public void init() throws ServletException {
		logger.info("+++init+++");
	}

	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		logger.info("get--start");

		request.setCharacterEncoding("utf-8");// 设置请求字符集编码
		response.setContentType("text/html;charset=utf-8");// 设置响应字符集编码
		PrintWriter out = response.getWriter();

		HttpSession session = request.getSession();
		if (session != null) {
			Object whatWeek = session.getAttribute("whatWeek");
			if (null == whatWeek) {
				return;
			}
			out.print(whatWeek);

			logger.info("获取周的编号成功");
		}
		logger.info("get end");
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		logger.info("post__start");

		doGet(request, response);

		logger.info("post end");
	}

	public void destroy() {
		logger.info("+++destroy+++");
	}
}

(18)WeekSetSession.java(把页面传来的周的编号存到Session中)
package com.highgo.booking.week;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@WebServlet("/Week")
public class WeekSetSession extends HttpServlet {
	private static final long serialVersionUID = 1L;

	Logger logger = LoggerFactory.getLogger(getClass());

	public void init() throws ServletException {
		logger.info("+++init+++");
	}

	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		logger.info("get--start");

		request.setCharacterEncoding("utf-8");// 设置请求字符集编码
		response.setContentType("text/html;charset=utf-8");// 设置响应字符集编码

		String whatWeek = request.getParameter("whatWeek");
//		logger.info(whatWeek);
		try {

			HttpSession session = request.getSession();
			session.setAttribute("whatWeek", whatWeek);

			logger.info("周的编号存入session成功");
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println(e);
			logger.info("周的编号存入session失败");
		}
		logger.info("get end");
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		logger.info("post__start");

		doGet(request, response);

		logger.info("post end");
	}

	public void destroy() {
		logger.info("+++destroy+++");
	}
}

四.交付过程

交付过程是比较漫长的,因为我代码规范和可读性太差,一直在不停地修改和优化,并且根据使用的反馈,修改代码和页面,中间出了好多问题,也都进行了修改。
对于遇到的问题和解决办法,请看另一篇文章
网址:https://blog.csdn.net/sun_ting_chuan/article/details/83689037

  • 18
    点赞
  • 108
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值