基于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/ 登录
	@RequestMapping("menuTree")
	public void getMenuTree(HttpServletRequest request,HttpServletResponse response){
		try {
			String parentId = request.getParameter("parentId");
			currentUser = (User) request.getSession().getAttribute("currentUser");
			role = roleService.findOneRole(currentUser.getRoleId());
			String[] menuIds = role.getMenuIds().split(",");
			map = new HashMap();
			map.put("parentId",parentId);
			map.put("menuIds", menuIds);
			JSONArray jsonArray = getMenusByParentId(parentId, menuIds);
			WriterUtil.write(response, jsonArray.toString());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	
	// 递归加载所所有树菜单
	public JSONArray getMenusByParentId(String parentId,String[] menuIds)throws Exception{
		JSONArray jsonArray=this.getMenuByParentId(parentId,menuIds);
		for(int i=0;i<jsonArray.size();i++){
			JSONObject jsonObject=jsonArray.getJSONObject(i);
			if("open".equals(jsonObject.getString("state"))){
				continue;
			}else{
				jsonObject.put("children", getMenusByParentId(jsonObject.getString("id"),menuIds));
			}
		}
		return jsonArray;
	}
	
	
	// 将所有的树菜单放入easyui要求格式的json
	public JSONArray getMenuByParentId(String parentId,String[] menuIds)throws Exception{
		JSONArray jsonArray=new JSONArray();
		map= new HashMap();
		map.put("parentId",parentId);
		map.put("menuIds", menuIds);
		List<Menu> list = menuService.menuTree(map);
		for(Menu menu : list){
			JSONObject jsonObject = new JSONObject();
			jsonObject.put("id", menu.getMenuId());
			jsonObject.put("text", menu.getMenuName());
			jsonObject.put("iconCls", menu.getIconCls());
			JSONObject attributeObject = new JSONObject();
			attributeObject.put("menuUrl", menu.getMenuUrl());
			if(!hasChildren(menu.getMenuId(), menuIds)){
				jsonObject.put("state", "open");
			}else{
				jsonObject.put("state", menu.getState());				
	
	// 更新密码
	@RequestMapping("updatePassword")
	public void updatePassword(HttpServletRequest request,HttpServletResponse response){
		JSONObject result=new JSONObject();
		try {
			String userId=request.getParameter("userId");
			String newPassword=request.getParameter("newPassword");
			user=new User();
			user.setUserId(Integer.parseInt(userId));
			user.setPassword(newPassword);
			userService.updateUser(user);
			result.put("success", "true");
		} catch (Exception e) {
			e.printStackTrace();
			result.put("success", "true");
			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");
	}
	
}

// 统计图

@Controller
@RequestMapping("topic")
public class TopicController {

	private int page;
	private int rows;
	private Topic topic;
	@Autowired
	private TopicService<Topic> topicService;
	@Autowired
	private BbsService<Bbs> bbsService;
	
	
	
	@RequestMapping("topicList")
	public void topicList(HttpServletRequest request,HttpServletResponse response){
		try {
			page = Integer.parseInt(request.getParameter("page"));
			rows = Integer.parseInt(request.getParameter("rows"));
			topic = new Topic();
			topic.setPage((page-1)*rows);
			topic.setRows(rows);
			String bbsid = request.getParameter("bbsid");
			if(StringUtil.isNotEmpty(bbsid)){
				topic.setBbsid(Integer.parseInt(bbsid));
			}
			List<Topic> list = topicService.findTopic(topic);
			int total = topicService.countTopic(topic);
			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("updateTopiccontent")
	/**
	 * 生成柱状图并写到页面上去
	 * @param request
	 * @param response
	 * @param times
	 * @param floors
	 * @param data
	 * @param subTitle
	 * @param width
	 */
	private void bar(HttpServletRequest request, HttpServletResponse response,
			String[] times, String[] floors, double[][] data, String title,String subTitle,int width) {
		CategoryDataset dataset = DatasetUtilities.createCategoryDataset(floors,times,data);
		JFreeChart chart = ChartFactory.createBarChart3D(title, "时间", "人数",
				dataset, PlotOrientation.VERTICAL, true, true, true);           // 创建柱状图模型
		// 副标题
		chart.addSubtitle(new TextTitle(subTitle));
		CategoryPlot plot = chart.getCategoryPlot();
		// 设置网格背景颜色
		plot.setBackgroundPaint(Color.white);
		// 设置网格竖线颜色
		plot.setDomainGridlinePaint(Color.pink);
		// 设置网格横线颜色
		plot.setRangeGridlinePaint(Color.pink);

		// 显示每个柱的数值,并修改该数值的字体属性
		BarRenderer3D renderer = new BarRenderer3D();
		renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
		renderer.setBaseItemLabelsVisible(true);

		renderer.setBasePositiveItemLabelPosition(new ItemLabelPosition(
				ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_LEFT));
		renderer.setItemLabelAnchorOffset(10D);

		// 设置平行柱的之间距离
		renderer.setItemMargin(0.4);

		plot.setRenderer(renderer);
		// 将图表以数据流的方式返回给客户端
		try {
			ChartUtilities.writeChartAsPNG(response.getOutputStream(), chart,
					width, 350); // 500,300是长和宽
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	private String getCurrentYear(){
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy");
		return sdf.format(new Date());
	}
	private Topic topic;
	
	@RequestMapping("bbsIndex")
	public String index(HttpServletRequest request) {
		User currentUser = (User)request.getSession().getAttribute("currentUser");
		if(currentUser.getRoleId()==1){
			return "bbs/bbsIndexForAdmin";
		} else {
			return "bbs/bbsIndex";
		}
	}
	
	
	@RequestMapping("bbsList")
	public void bbsList(HttpServletRequest request,HttpServletResponse response){
		try {
			page = Integer.parseInt(request.getParameter("page"));
			rows = Integer.parseInt(request.getParameter("rows"));
			bbs = new Bbs();
			bbs.setPage((page-1)*rows);
			bbs.setRows(rows);
			bbs.setAuthor(request.getParameter("author"));
			bbs.setTitle(request.getParameter("title"));
			List<Bbs> list = bbsService.findBbs(bbs);
			int total = bbsService.countBbs(bbs);
			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("newBbs")
	public void newTopic(HttpServletRequest request,HttpServletResponse response,Bbs bbs){
		JSONObject result = new JSONObject();
		String content = bbs.getContent();
		User currentUser = (User)request.getSession().getAttribute("currentUser");
				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());
	}
	
	
	
	
	
	
}

//推荐朋友控制器

@Controller
@RequestMapping("friend")
public class FriendController {

			Date today = new Date();  //今天日期Date类型
			Date dayAfterTomorrow = getNextNextDay(today,offset); //后面的参数表示与今天的间隔,如1表示明天,2表示后天
			String date = new SimpleDateFormat("yyyy-MM-dd").format(dayAfterTomorrow);  //后天日期yyy-MM-dd string类型
			List<Room> roomList = roomService.findRoom(new Room());
			for(int i=0;i<times.length;i++){               // 三个时间段
				String time = times[i];
				for(int j=0;j<roomList.size();j++){         //所有的房间
					Room room = roomList.get(j);
					int roomid = room.getId();
					int row = room.getRow();                 
					int col = room.getCol();
					for(int k=1;k<=row;k++){                 //行
						for(int l=1;l<=col;l++){             //列
							Seat seat = new Seat();
							seat.setCol(l);
							seat.setDate(date);
							seat.setRoomid(roomid);
							seat.setRow(k);
							seat.setTime(time);
							seat.setKeyword(date + "-" + time + "-" + roomid + "-" + k + "-" + l);
							seatService.insertSeat(seat);
						}
					}
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	
	// 在浏览器输入http://127.0.0.1:8080/LibrarySeats/newSeat.htm即可手动生成座位数
	@RequestMapping("newSeat")
	@ResponseBody
	public String today(){
		Thread thread = new Thread(new Task());
		thread.start();
		return "开始创建当日座位信息,请不要重复运行,观察控制台运行停止后可以登录后台查看座位信息!";
	}
	
	// 获取后天日期
	public static Date getNextNextDay(Date date,int day) {
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		calendar.add(Calendar.DAY_OF_MONTH, day);
		date = calendar.getTime();
		return date;
	
	
	
	
	@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());
	}
	
	
	
	
}

//阅览室类型


@Controller
@RequestMapping("topic")
public class TopicController {

	private int page;
	private int rows;
	private Topic topic;
	@Autowired
	private TopicService<Topic> topicService;
	@Autowired
	private BbsService<Bbs> bbsService;
	
	
	
	@RequestMapping("topicList")
	public void topicList(HttpServletRequest request,HttpServletResponse response){
		try {
			page = Integer.parseInt(request.getParameter("page"));
			rows = Integer.parseInt(request.getParameter("rows"));
			topic = new Topic();
			topic.setPage((page-1)*rows);
			topic.setRows(rows);
			String bbsid = request.getParameter("bbsid");
			if(StringUtil.isNotEmpty(bbsid)){
				topic.setBbsid(Integer.parseInt(bbsid));
			}
			List<Topic> list = topicService.findTopic(topic);
			int total = topicService.countTopic(topic);
			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();
		}
	}
	
	
					start = start + "-" + i +"-01 00:00:01";
					end = end + "-" + i + "-31 23:59:59";
				}
				illegal = new Illegal();
				illegal.setStart(start);
				illegal.setEnd(end);
				int total = illegalService.countIllegal(illegal);
				data[0][i-1] = total;
			}
			bar(request, response, months, new String[]{"违规人数"}, data,getCurrentYear()+"全年度违规人数统计", "违规人数统计", 750);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	
	
	// 进入占座统计
	@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());
				user.setRoleId(Integer.parseInt(roleId));
			} 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("deleteUser")
	public void delUser(HttpServletRequest request,HttpServletResponse response){
		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表示后天
			String date = new SimpleDateFormat("yyyy-MM-dd").format(dayAfterTomorrow);  //后天日期yyy-MM-dd string类型
			List<Room> roomList = roomService.findRoom(new Room());
			for(int i=0;i<times.length;i++){               // 三个时间段
				String time = times[i];
				for(int j=0;j<roomList.size();j++){         //所有的房间
					Room room = roomList.get(j);
					int roomid = room.getId();
					int row = room.getRow();                 
					int col = room.getCol();
					for(int k=1;k<=row;k++){                 //行
						for(int l=1;l<=col;l++){             //列
							Seat seat = new Seat();
							seat.setCol(l);
							seat.setDate(date);
							seat.setRoomid(roomid);
							seat.setRow(k);
							seat.setTime(time);
							seat.setKeyword(date + "-" + time + "-" + roomid + "-" + k + "-" + l);
							seatService.insertSeat(seat);
						}
					}
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	
	// 在浏览器输入http://127.0.0.1:8080/LibrarySeats/newSeat.htm即可手动生成座位数
	@RequestMapping("newSeat")
	@ResponseBody
	public String today(){
		Thread thread = new Thread(new Task());
		thread.start();
		return "开始创建当日座位信息,请不要重复运行,观察控制台运行停止后可以登录后台查看座位信息!";
	}
	
	
}

//推荐朋友控制器

@Controller
@RequestMapping("friend")
public class FriendController {

	private Choice choice;
	@Autowired
	private ChoiceService<Choice> choiceService;
	@Autowired
	private StudentService<Student> studentService;
	private Student student;
	
	
	@RequestMapping("friendIndex")
	public String index(){
		return "tuijian/friend";
	}
	
	
	
	@RequestMapping("friendList")
	public void list(HttpServletRequest request,HttpServletResponse response){
		try {
	private UserService<User> userService;
	
	@RequestMapping("teacherIndex")
	public String index(){
		return "info/teacher";
	}
	
	
	@RequestMapping("teacherList")
	public void teacherList(HttpServletRequest request,HttpServletResponse response){
		try {
			page = Integer.parseInt(request.getParameter("page"));   //获取当前页
			rows = Integer.parseInt(request.getParameter("rows"));   //每页记录条数
			
			// 构造查询条件
			teacher = new Teacher();
			teacher.setPage((page-1)*rows);
			teacher.setRows(rows);
			teacher.setName(request.getParameter("name"));
			teacher.setNo(request.getParameter("no"));
			
			User currentUser = (User)request.getSession().getAttribute("currentUser");
			
			
			if(currentUser.getRoleId()==2){ //教师
				teacher.setNo(currentUser.getUserName());
			}
			
			// 调用service层的查询方法查出记录和数量
			List<Teacher> list = teacherService.findTeacher(teacher);  
			int total = teacherService.countTeacher(teacher);
			
			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("reserveTeacher")
	
	
	@RequestMapping("deleteTeacher")
	public void deleteTeacher(HttpServletRequest request,HttpServletResponse response){
		JSONObject result=new JSONObject();
		try {
			String[] ids=request.getParameter("ids").split(",");
			for (String id : ids) {
				teacherService.deleteTeacher(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());
	}
	

	@RequestMapping("comboList")
	public void comboList(HttpServletRequest request,HttpServletResponse response){
		try {
			List<Teacher> list = teacherService.findTeacher(new Teacher());
			JSONArray array = new JSONArray();
			array.addAll(list);
			WriterUtil.write(response, array.toString());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
/*
 * 交流控制器
 */

			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		WriterUtil.write(response, "upload/student/" + now + ".jpg");
	}
	
	
}

// 具体的帖子内容

@Controller
@RequestMapping("topic")
public class TopicController {

	private int page;
	private int rows;
	private Topic topic;
	@Autowired
	private TopicService<Topic> topicService;
	@Autowired
	private BbsService<Bbs> bbsService;
	
	
	
	@RequestMapping("topicList")
	public void topicList(HttpServletRequest request,HttpServletResponse response){
		try {
			page = Integer.parseInt(request.getParameter("page"));
			rows = Integer.parseInt(request.getParameter("rows"));
		}
	}
	
	
	
	
	// 选中已有的角色
	public JSONArray getCheckedMenusByParentId(String parentId,String menuIds,String operationIds)throws Exception{
		JSONArray jsonArray=this.getCheckedMenuByParentId(parentId,menuIds,operationIds);
		for(int i=0;i<jsonArray.size();i++){
			JSONObject jsonObject=jsonArray.getJSONObject(i);
			if("open".equals(jsonObject.getString("state"))){
				continue;
			}else{
				jsonObject.put("children", getCheckedMenusByParentId(jsonObject.getString("id"),menuIds,operationIds));
			}
		}
		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();

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

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐