基于javaweb和mysql的ssm自习室图书馆座位预约管理系统(java+ssm+jsp+easyui+mysql)
基于javaweb和mysql的ssm自习室图书馆座位预约管理系统(java+ssm+jsp+easyui+mysql)
私信源码获取及调试交流
私信源码获取及调试交流
运行环境
Java≥8、MySQL≥5.7、Tomcat≥8
开发工具
eclipse/idea/myeclipse/sts等均可配置运行
适用
课程设计,大作业,毕业设计,项目练习,学习演示等
功能说明
基于javaweb的SSM自习室图书馆座位预约管理系统(java+ssm+jsp+easyui+mysql)
项目介绍
一款由jsp+ssm+mysql实现的图书馆预约占座管理系统,前端采用的是当下最流行的easyui框架,后台用的ssm(spring、springMVC、mybaits)框架.添加学生和教师时会自动在用户表中注册,定时任务会定时生成座位信息,阅览室分类中可设置信用等级,学生被扣分后信用等级低于相应的值后不能预约相应的阅览室座位.本项目分为管理员、教师、学生三种角色。
管理员角色包含以下功能: 管理员登陆,用户管理,师生信息管理,阅览室管理,信用积分管理,交流管理,信息统计,图书推荐等功能。
教师角色包含以下功能: 教师角色登陆,个人信息管理,管理学生的信用积分等功能。
学生角色包含以下功能: 学生账号登陆,阅览室信息查看,信息积分查看,选座位,选座管理,通知信息管理,信息交流,图书推荐等功能。
环境需要
1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA; 3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可 4.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS; 5.数据库:MySql 5.7版本; 6.是否Maven项目:否;
技术栈
- 后端:Spring+SpringMVC+Mybatis 2. 前端:JSP+easyUI
使用说明
- 使用Navicat或者其它工具,在mysql中创建对应名称的数据库,并导入项目的sql文件; 2. 使用IDEA/Eclipse/MyEclipse导入项目,Eclipse/MyEclipse导入时,若为maven项目请选择maven;若为maven项目,导入成功后请执行maven clean;maven install命令,然后运行; 3. 将项目中config.properties配置文件中的数据库配置改为自己的配置; 4. 运行项目,输入localhost:8080/ 登录
result.put("errorMsg", "对不起,操作失败");
}
WriterUtil.write(response, result.toString());
}
@RequestMapping("deleteIllegal")
public void delete(HttpServletRequest request,HttpServletResponse response){
JSONObject result=new JSONObject();
try {
String[] ids=request.getParameter("ids").split(",");
for (String id : ids) {
illegalService.deleteIllegal(Integer.parseInt(id));
}
result.put("success", true);
result.put("delNums", ids.length);
} catch (Exception e) {
e.printStackTrace();
result.put("errorMsg", "对不起,删除失败");
}
WriterUtil.write(response, result.toString());
}
}
//阅览室类型
//安全退出
@SuppressWarnings("unused")
@RequestMapping("logout")
private void logout(HttpServletRequest request,HttpServletResponse response) throws Exception{
request.getSession().invalidate();
response.sendRedirect("login.jsp");
}
}
// 统计图
if (StringUtil.isNotEmpty(operationIds)) {
if (dingzhen.util.StringUtil.existStrArr(operationId+"", operationIds.split(","))) {
jsonObject.put("checked", true);
}
}
jsonArray.add(jsonObject);
}
return jsonArray;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
@RequestMapping("updateRoleMenu")
public void updateRoleMenu(HttpServletRequest request,HttpServletResponse response){
JSONObject result = new JSONObject();
try {
String roleId = request.getParameter("roleId");
String[] ids = request.getParameter("menuIds").split(",");
String menuIds = "";
String operationIds = "";
/**
* 采用的方案是在菜单递归之后,再加上各菜单下的按钮
* 采用easyui的解析方式所以字段都用的是id和text。
* 为了区别两者,我们规定operationId自增从10000开始
* menuId从1开始,在上传过来的ids中是这样的形式
* 2,10000,3,4,7,10004,10006,45 这样的菜单ID和按钮ID的混合形式
* 所以通过与10000的比较来确定哪些是菜单的哪些是按钮的
*
*/
for (int i = 0; i < ids.length; i++) {
int id = Integer.parseInt(ids[i]);
if (id>=10000) {
operationIds += (","+id);
} else {
menuIds += (","+id);
}
}
role = new Role();
role.setRoleId(Integer.parseInt(roleId));
role.setMenuIds(menuIds.substring(1));
System.out.println(operationIds);
role.setOperationIds(operationIds.substring(1));
private NoticeService<Notice> noticeService;
@RequestMapping("noticeIndex")
public String index(HttpServletRequest request){
User currentUser = (User)request.getSession().getAttribute("currentUser");
if(currentUser.getRoleId()==1){
return "notice/noticeIndexForAdmin";
} else {
return "notice/noticeIndex";
}
}
@RequestMapping("noticeList")
public void list(HttpServletRequest request,HttpServletResponse response){
try {
page = Integer.parseInt(request.getParameter("page"));
rows = Integer.parseInt(request.getParameter("rows"));
notice = new Notice();
notice.setPage((page-1)*rows);
notice.setRows(rows);
List<Notice> list = noticeService.findNotice(notice);
int total = noticeService.countNotice(notice);
JSONObject jsonObj = new JSONObject();//new一个JSON
jsonObj.put("total",total );//total代表一共有多少数据
jsonObj.put("rows", list);//row是代表显示的页的数据
WriterUtil.write(response,jsonObj.toString()); //将上述Json输出,前台ajax接收
} catch (Exception e) {
e.printStackTrace();
}
}
@RequestMapping("reserveNotice")
public void reserve(HttpServletRequest request,HttpServletResponse response,Notice notice){
String id = request.getParameter("id");
JSONObject result = new JSONObject();
result.put("success", true);
String time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
notice.setTime(time);
try {
if(StringUtil.isNotEmpty(id)){
notice.setId(Integer.parseInt(id));
noticeService.updateNotice(notice);
} else {
noticeService.addNotice(notice);
String tomorrow = sdf.format(tomorrowDate);
List<ComboValue> list = new ArrayList<ComboValue>();
ComboValue cv = new ComboValue(today, "今天 "+today);
list.add(cv);
ComboValue cv2 = new ComboValue(tomorrow, "明天 "+tomorrow);
list.add(cv2);
JSONArray array = new JSONArray();
array.addAll(list);
WriterUtil.write(response, array.toString());
} catch (Exception e) {
e.printStackTrace();
}
}
// 获取明天日期
public static Date getNextDay(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.DAY_OF_MONTH, 1);
date = calendar.getTime();
return date;
}
// 3个时间段
@RequestMapping("timeCombo")
public void timeCombo(HttpServletRequest request,HttpServletResponse response) {
try {
List<ComboValue> list = new ArrayList<ComboValue>();
ComboValue cv = new ComboValue("08点-12点","08点-12点");
list.add(cv);
ComboValue cv2 = new ComboValue("14点-18点","14点-18点");
list.add(cv2);
ComboValue cv3 = new ComboValue("18点-22点","18点-22点");
list.add(cv3);
JSONArray array = new JSONArray();
array.addAll(list);
WriterUtil.write(response, array.toString());
} catch (Exception e) {
e.printStackTrace();
}
}
// 阅览室
@RequestMapping("roomCombo")
public void roomCombo(HttpServletRequest request,HttpServletResponse response){
try {
List<Room> list = roomService.findRoom(new Room());
private int page;
private int rows;
@Autowired
private SeatService<Seat> seatService;
private Seat seat;
@Autowired
private RoomService<Room> roomService;
@Autowired
private ChoiceService<Choice> choiceService;
private Choice choice;
@Autowired
private ScoreService<Score> scoreService;
private Score score;
@RequestMapping("seatIndex")
public String index(){
return "seat/selectSeat";
}
@RequestMapping("combolist")
public void seatList(HttpServletRequest request,HttpServletResponse response) {
try {
seat = new Seat();
String date = request.getParameter("date");
if(date==null || date.length()==0){
seat.setDate(new SimpleDateFormat("yyyy-MM-dd").format(new Date()));
}else {
seat.setDate(date);
}
if(request.getParameter("roomid")!=null && request.getParameter("roomid").length() > 0){
seat.setRoomid(Integer.parseInt(request.getParameter("roomid")));
} else {
seat.setRoomid(1);
}
String time = request.getParameter("time");
if(time == null || time.length()==0){
seat.setTime("08点-12点");
}else {
seat.setTime(time);
}
List<Seat> list = seatService.findSeat(seat);
JSONArray array = new JSONArray();
array.addAll(list);
WriterUtil.write(response, array.toString());
} catch (Exception e) {
e.printStackTrace();
}
}
@RequestMapping("updateBbstitle")
public void updateBbstitle(HttpServletResponse response,HttpServletRequest request,Bbs bbs){
JSONObject result = new JSONObject();
String id = request.getParameter("id");
try {
bbs.setId(Integer.parseInt(id));
bbsService.updateBbstitle(bbs);
result.put("success", true);
} catch (Exception e) {
e.printStackTrace();
result.put("errorMsg", "对不起!修改标题失败");
}
WriterUtil.write(response, result.toString());
}
@RequestMapping("deleteBbs")
public void deleteBbs(HttpServletRequest request,HttpServletResponse response){
JSONObject result=new JSONObject();
try {
String[] ids=request.getParameter("ids").split(",");
for (String id : ids) {
bbsService.deleteBbs(Integer.parseInt(id));
}
result.put("success", true);
result.put("delNums", ids.length);
} catch (Exception e) {
e.printStackTrace();
result.put("errorMsg", "对不起,删除失败");
}
WriterUtil.write(response, result.toString());
}
}
//推荐朋友控制器
ip = request.getHeader("X-Forwarded-For");
if (!StringUtil.isEmpty(ip) && !"unknown".equalsIgnoreCase(ip)) {
// 多次反向代理后会有多个IP值,第一个为真实IP。
int index = ip.indexOf(',');
if (index != -1) {
return ip.substring(0, index);
} else {
return ip;
}
} else {
return request.getRemoteAddr();
}
}
/**
* 通过反射
* 根据字段名称获取字段值
* @param fieldName
* @param o
* @return
*/
private static Object getFieldValueByName(String fieldName,Object o){
try {
String firstLetter = fieldName.substring(0, 1).toUpperCase(); //手写字母大写
String getter = "get" + firstLetter + fieldName.substring(1); // get方法
Method method = o.getClass().getMethod(getter,new Class[]{});
Object object = method.invoke(o, new Object[]{});
return object;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 反射获得字段值
* @param o
* @return
*/
@SuppressWarnings("unused")
return jsonArray;
}
public JSONArray getCheckedMenuByParentId(String parentId,String menuIds,String operationIds)throws Exception{
JSONArray jsonArray=new JSONArray();
menu = new Menu();
menu.setParentId(Integer.parseInt(parentId));
List<Menu> list = menuService.findMenu(menu);
for(Menu menu : list){
JSONObject jsonObject = new JSONObject();
int menuId = menu.getMenuId();
jsonObject.put("id", menuId);
jsonObject.put("text", menu.getMenuName());
jsonObject.put("iconCls", menu.getIconCls());
jsonObject.put("state", menu.getState());
if (StringUtil.isNotEmpty(menuIds)) {
if (dingzhen.util.StringUtil.existStrArr(menuId+"", menuIds.split(","))) {
jsonObject.put("checked", true);
}
}
jsonObject.put("children", getOperationJsonArray(menuId,operationIds));
jsonArray.add(jsonObject);
}
return jsonArray;
}
public JSONArray getOperationJsonArray(int menuId,String operationIds){
JSONArray jsonArray=new JSONArray();
try {
operation = new Operation();
operation.setMenuId(menuId);
List<Operation> list = operationService.findOperation(operation);
for(Operation operation : list){
JSONObject jsonObject = new JSONObject();
int operationId = operation.getOperationId();
jsonObject.put("id", operationId);
jsonObject.put("text", operation.getOperationName());
jsonObject.put("iconCls", "");
jsonObject.put("state", "open");
if (StringUtil.isNotEmpty(operationIds)) {
if (dingzhen.util.StringUtil.existStrArr(operationId+"", operationIds.split(","))) {
jsonObject.put("checked", true);
}
}
e.printStackTrace();
}
}
private List<Role> findAllRole(Role role){
try {
return roleService.findRole(role);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
@RequestMapping("roleCombobox")
public void roleCombobox(HttpServletRequest request,HttpServletResponse response){
try {
JSONArray jsonArray=new JSONArray();
List<Role> list = findAllRole(new Role());
jsonArray.addAll(list);
WriterUtil.write(response, jsonArray.toString());
} catch (Exception e) {
e.printStackTrace();
}
}
@RequestMapping("reserveRole")
public void addUser(HttpServletRequest request,Role role,HttpServletResponse response){
String roleId = request.getParameter("roleId");
JSONObject result=new JSONObject();
try {
if (StringUtil.isNotEmpty(roleId)) {
role.setRoleId(Integer.parseInt(roleId));
roleService.updateRole(role);
result.put("success", true);
}else {
if(roleService.existRoleWithRoleName(role.getRoleName())==null){ // 没有重复可以添加
roleService.addRole(role);
result.put("success", true);
} else {
result.put("success", true);
int total = bookService.countBook(book);
JSONObject jsonObj = new JSONObject();//new一个JSON
jsonObj.put("total",total );//total代表一共有多少数据
jsonObj.put("rows", list);//row是代表显示的页的数据
WriterUtil.write(response,jsonObj.toString()); //将上述Json输出,前台ajax接收
} catch (Exception e) {
e.printStackTrace();
}
}
@RequestMapping("reserveBook")
public void reserveBook(HttpServletRequest request,HttpServletResponse response,Book book) {
String id = request.getParameter("id");
JSONObject result = new JSONObject();
result.put("success", true);
try {
if(StringUtil.isNotEmpty(id)){
book.setId(Integer.parseInt(id));
bookService.updateBook(book);
} else {
bookService.addBook(book);
}
} catch (Exception e) {
e.printStackTrace();
result.put("errorMsg", "对不起!保存失败");
}
WriterUtil.write(response, result.toString());
}
@RequestMapping("deleteBook")
public void delete(HttpServletRequest request,HttpServletResponse response){
JSONObject result=new JSONObject();
try {
String[] ids=request.getParameter("ids").split(",");
for (int i=0;i<ids.length;i++) {
bookService.deleteBook(Integer.parseInt(ids[i]));
}
result.put("success", true);
result.put("delNums", ids.length);
} catch (Exception e) {
e.printStackTrace();
result.put("errorMsg", "对不起,删除失败");
}
WriterUtil.write(response, result.toString());
}
@RequestMapping("uploadCover")
// 进入占座统计
@RequestMapping("seatChart")
public String seatIndex(){
return "chart/seat";
}
@RequestMapping("findSeatChart")
public void findSeatChart(HttpServletRequest request,HttpServletResponse response){
try {
List<Room> roomList = roomService.findRoom(new Room());
double[][] data = new double[roomList.size()][12]; //一年12月
String[] months = {"1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"};
for(int i=0;i<roomList.size();i++){
room = roomList.get(i);
for(int j=1;j<13;j++){
// 每月违规人数
String start = getCurrentYear();
String end = getCurrentYear();
if(j<10){
start = start + "-0" + j +"-01 00:00:01";
end = end + "-0" + j + "-31 23:59:59";
} else {
start = start + "-" + j +"-01 00:00:01";
end = end + "-" + j + "-31 23:59:59";
}
Choice c = new Choice();
c.setStart(start);
c.setEnd(end);
c.setRows(room.getId());
int total = choiceService.count(c);
data[i][j-1] = total;
}
}
String[] rooms = new String[roomList.size()];
for(int i=0;i<rooms.length;i++){
rooms[i] = roomList.get(i).getName();
}
bar(request, response, months, rooms, data,getCurrentYear()+"全年度占座人数统计", "占座人数", 750);
} catch (Exception e) {
e.printStackTrace();
}
}
@Component
@Controller
public class SeatUtil {
@Autowired
private SeatService<Seat> seatService;
@Autowired
private RoomService<Room> roomService;
@Autowired
private ChoiceService<Choice> choiceService;
//每天晚上11点生成后天的所有座位信息
@Scheduled(cron = "0 0 23 * * ?") //每天晚上23点运行一次 生成所有新的座位
@RequestMapping("addSeat")//http://localhost:8080/addSeat.htm
public void generateNextDay(){
System.out.println("生成座位1");
addNewSeat(1);
System.out.println("生成座位2");
}
public void addNewSeat(int offset){
try {
String times[] = {"08点-12点","14点-18点","18点-22点"}; //三个时间段
Date today = new Date(); //今天日期Date类型
Date dayAfterTomorrow = getNextNextDay(today,offset); //后面的参数表示与今天的间隔,如1表示明天,2表示后天
} else {
user.setRoleId(null);
}
List<User> list = userService.findUser(user);
int total = userService.countUser(user);
JSONObject jsonObj = new JSONObject();//new一个JSON
jsonObj.put("total",total );//total代表一共有多少数据
jsonObj.put("rows", list);//row是代表显示的页的数据
WriterUtil.write(response,jsonObj.toString());
} catch (Exception e) {
e.printStackTrace();
}
}
// 新增或修改
@RequestMapping("reserveUser")
public void reserveUser(HttpServletRequest request,User user,HttpServletResponse response){
String userId = request.getParameter("userId");
JSONObject result=new JSONObject();
try {
if (StringUtil.isNotEmpty(userId)) { // userId不为空 说明是修改
user.setUserId(Integer.parseInt(userId));
userService.updateUser(user);
result.put("success", true);
}else { // 添加
if(userService.existUserWithUserName(user.getUserName())==null){ // 没有重复可以添加
userService.addUser(user);
result.put("success", true);
} else {
result.put("success", true);
result.put("errorMsg", "该用户名被使用");
}
}
} catch (Exception e) {
e.printStackTrace();
result.put("success", true);
result.put("errorMsg", "对不起,操作失败");
}
WriterUtil.write(response, result.toString());
}
// 通知信息
@RequestMapping("notice")
@Controller
public class NoticeController {
private int page;
private int rows;
private Notice notice;
@Autowired
private NoticeService<Notice> noticeService;
@RequestMapping("noticeIndex")
public String index(HttpServletRequest request){
User currentUser = (User)request.getSession().getAttribute("currentUser");
if(currentUser.getRoleId()==1){
return "notice/noticeIndexForAdmin";
} else {
return "notice/noticeIndex";
}
}
/**
* 角色管理
*/
@Controller
@RequestMapping("role")
@SuppressWarnings("unchecked")
public class RoleController {
private int page;
private int rows;
private Role role;
private Operation operation;
@Autowired
private UserService<User> userService;
@Autowired
private RoleService<Role> roleService;
private Map map;
private Menu menu;
@Autowired
private MenuService<Menu> menuService;
@Autowired
private OperationService<Operation> operationService;
@RequestMapping("roleIndex")
public String index(){
return "sys/role";
}
@RequestMapping("roleList")
public void userList(HttpServletRequest request,HttpServletResponse response){
try {
page = Integer.parseInt(request.getParameter("page"));//==null?1:Integer.parseInt(request.getParameter("page"));
rows = Integer.parseInt(request.getParameter("rows"));//==null?10:Integer.parseInt(request.getParameter("rows"));
role = new Role();
role.setPage((page-1)*rows);
role.setRows(rows);
role.setRoleName(request.getParameter("roleName"));
List<Role> list = findAllRole(role);
int total = roleService.countRole(role);
JSONObject jsonObj = new JSONObject();//new一个JSON
jsonObj.put("total",total );//total代表一共有多少数据
jsonObj.put("rows", list);//row是代表显示的页的数据
WriterUtil.write(response,jsonObj.toString());
} catch (Exception e) {
e.printStackTrace();
}
@RequestMapping("chart")
@Controller
public class ChartController {
@Autowired
private IllegalService<Illegal> illegalService;
private Illegal illegal;
private Room room;
@Autowired
private RoomService<Room> roomService;
private Seat seat;
@Autowired
private SeatService<Seat> seatService;
@Autowired
private ChoiceService<Choice> choiceService;
// 进入违规统计
@RequestMapping("illegalChart")
public String illegalIndex(){
return "chart/illegal";
}
// 违规统计表
@RequestMapping("findIllegalChart")
public void findIllegalChart(HttpServletRequest request,HttpServletResponse response){
try {
double[][] data = new double[1][12]; //一年12月
String[] months = {"1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"};
for(int i=1;i<13;i++){






AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)