基于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项目:否;

技术栈

  1. 后端:Spring+SpringMVC+Mybatis 2. 前端:JSP+easyUI

使用说明

  1. 使用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++){

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

Logo

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

更多推荐