文末获取源码
开发语言:Java
框架:springboot+vue
Node:node.js
JDK版本:JDK1.8
服务器:tomcat7
数据库:mysql 5.7/8.0
数据库工具:Navicat11
开发软件:eclipse/idea,Visual
Maven包:Maven3.3.9
浏览器:谷歌浏览器
目录
一、前言介绍
二、系统功能分析
三、系统详细设计
3.1前台首页模块
3.2校园新闻模块
3.3选题中心模块
3.4个人信息模块
四、管理员功能模块
4.1后台登录模块
4.2后台首页模块
4.3教师用户模块
4.4新闻列表模块
4.5选题中心模块
五、部分核心代码
5.1用户登录关键代码
5.2用户注册关键代码
4.3用户管理关键代码
4.4站点管理关键代码
一、前言介绍
本系统前端框架采用了比较流行的渐进式JavaScript框架Vue.js。使用Vue-Router和Vuex实现动态路由和全局状态管理,Ajax实现前后端通信,Element UI组件库使页面快速成型。后端部分:采用springboot作为开发框架,同时集成MyBatis、Redis等相关技术。
系统管理也都将通过计算机进行整体智能化操作,对于毕业论文管理系统所牵扯的管理及数据保存都是非常多的,例如管理员;首页、站点管理(轮播图、公告栏)用户管理(管理员、学生用户、教师用户、院系领导)内容管理(校园资讯、校园资讯分类)更多管理(课题、选择信息、任务书、开题报告、中期报告、毕业论文、答辩通知、通知、成绩汇总、课题分类)这给管理者的工作带来了巨大的挑战,面对大量的信息,传统的管理系统,都是通过笔记的方式进行详细信息的统计,后来出现电脑,通过电脑输入软件将纸质的信息统计到电脑上,这种方式比较传统,而且想要统计数据信息比较麻烦,还受时间和空间的影响,所以为此开发了大学毕业设计管理系统;为用户提供了方便管理平台,方便管理员查看及维护,并且可以通过需求进行内容的编辑及维护等;对于用户而言,可以随时进行查询所需信息,管理员可以足不出户就可以获取到系统的数据信息等,而且还能节省用户很多时间,所以开发大学毕业设计管理系统给管理者带来了很大的方便,同时也方便管理员对用户信息进行处理。
二、系统功能分析
使用毕业论文管理系统的分为管理员和用户、两个权限模块。
管理员所能使用的功能主要有首页、站点管理(轮播图、公告栏)用户管理(管理员、学生用户、教师用户、院系领导)内容管理(校园资讯、校园资讯分类)更多管理(毕设课题、选择信息、任务书、开题报告、中期报告、毕业论文、答辩通知、毕设通知、成绩汇总、课题分类)等。
学生可以实现首页、选择信息、任务书、开题报告、中期报告、毕业论文、答辩通知、毕设通知。
教师可以实现首页、毕设课题、选择信息、任务书、开题报告、中期报告、毕业论文、毕设通知、成绩汇总。
院系领导可以实现首页、毕设课题、开题报告、中期报告、毕业论文、答辩通知、毕设通知、成绩汇总。
三、系统详细设计
3.1前台首页模块
学生进入到系统操作界面,可以对首页、公告消息、新闻、毕设课题等功能模块
3.2校园新闻模块
通过校园新闻可以查看资讯标题、资讯内容、发布时间、点赞数、浏览数等操作
3.3选题中心模块
毕设课题列表页面可查看课题名称、课题类型、图片等信息如图
3.4个人信息模块
通过列表可以获取个人信息、进行详情、修改等操作
四、管理员功能模块
4.1后台登录模块
4.2后台首页模块
4.3教师用户模块
4.4新闻列表模块
4.5选题中心模块
五、部分核心代码
5.1用户登录关键代码
/** * 登录 * @param data * @param httpServletRequest * @return */ @PostMapping("login") public Map<String, Object> login(@RequestBody Map<String, String> data, HttpServletRequest httpServletRequest) { log.info("[执行登录接口]"); String username = data.get("username"); String email = data.get("email"); String phone = data.get("phone"); String password = data.get("password"); List resultList = null; Map<String, String> map = new HashMap<>(); if(username != null && "".equals(username) == false){ map.put("username", username); resultList = service.select(map, new HashMap<>()).getResultList(); } else if(email != null && "".equals(email) == false){ map.put("email", email); resultList = service.select(map, new HashMap<>()).getResultList(); } else if(phone != null && "".equals(phone) == false){ map.put("phone", phone); resultList = service.select(map, new HashMap<>()).getResultList(); }else{ return error(30000, "账号或密码不能为空"); } if (resultList == null || password == null) { return error(30000, "账号或密码不能为空"); } //判断是否有这个用户 if (resultList.size()<=0){ return error(30000,"用户不存在"); } User byUsername = (User) resultList.get(0); Map<String, String> groupMap = new HashMap<>(); groupMap.put("name",byUsername.getUserGroup()); List groupList = userGroupService.select(groupMap, new HashMap<>()).getResultList(); if (groupList.size()<1){ return error(30000,"用户组不存在"); } UserGroup userGroup = (UserGroup) groupList.get(0); //查询用户审核状态 if (!StringUtils.isEmpty(userGroup.getSourceTable())){ String sql = "select examine_state from "+ userGroup.getSourceTable() +" WHERE user_id = " + byUsername.getUserId(); String res = String.valueOf(service.runCountSql(sql).getSingleResult()); if (res==null){ return error(30000,"用户不存在"); } if (!res.equals("已通过")){ return error(30000,"该用户审核未通过"); } } //查询用户状态 if (byUsername.getState()!=1){ return error(30000,"用户非可用状态,不能登录"); } String md5password = service.encryption(password); if (byUsername.getPassword().equals(md5password)) { // 存储Token到数据库 AccessToken accessToken = new AccessToken(); accessToken.setToken(UUID.randomUUID().toString().replaceAll("-", "")); accessToken.setUser_id(byUsername.getUserId()); tokenService.save(accessToken); // 返回用户信息 JSONObject user = JSONObject.parseObject(JSONObject.toJSONString(byUsername)); user.put("token", accessToken.getToken()); JSONObject ret = new JSONObject(); ret.put("obj",user); return success(ret); } else { return error(30000, "账号或密码不正确"); } }
5.2用户注册关键代码
/** * 注册 * @param user * @return */ @PostMapping("register") public Map<String, Object> signUp(@RequestBody User user) { // 查询用户 Map<String, String> query = new HashMap<>(); query.put("username",user.getUsername()); List list = service.select(query, new HashMap<>()).getResultList(); if (list.size()>0){ return error(30000, "用户已存在"); } user.setUserId(null); user.setPassword(service.encryption(user.getPassword())); service.save(user); return success(1);} /** * 用户ID:[0,8388607]用户获取其他与用户相关的数据 */ @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "user_id") private Integer userId; /** * 账户状态:[0,10](1可用|2异常|3已冻结|4已注销) */ @Basic @Column(name = "state") private Integer state; /** * 所在用户组:[0,32767]决定用户身份和权限 */ @Basic @Column(name = "user_group") private String userGroup; /** * 上次登录时间: */ @Basic @Column(name = "login_time") private Timestamp loginTime; /** * 手机号码:[0,11]用户的手机号码,用于找回密码时或登录时 */ @Basic @Column(name = "phone") private String phone; /** * 手机认证:[0,1](0未认证|1审核中|2已认证) */ @Basic @Column(name = "phone_state") private Integer phoneState; /** * 用户名:[0,16]用户登录时所用的账户名称 */ @Basic @Column(name = "username") private String username; /** * 昵称:[0,16] */ @Basic @Column(name = "nickname") private String nickname; /** * 密码:[0,32]用户登录所需的密码,由6-16位数字或英文组成 */ @Basic @Column(name = "password") private String password; /** * 邮箱:[0,64]用户的邮箱,用于找回密码时或登录时 */ @Basic @Column(name = "email") private String email; /** * 邮箱认证:[0,1](0未认证|1审核中|2已认证) */ @Basic @Column(name = "email_state") private Integer emailState; /** * 头像地址:[0,255] */ @Basic @Column(name = "avatar") private String avatar; /** * 创建时间: */ @Basic @Column(name = "create_time") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Timestamp createTime; @Basic @Transient private String code;}
4.3用户管理关键代码
public String encryption(String plainText) { String re_md5 = new String(); try { MessageDigest md = MessageDigest.getInstance("MD5"); md.update(plainText.getBytes()); byte b[] = md.digest(); int i; StringBuffer buf = new StringBuffer(""); for (int offset = 0; offset < b.length; offset++) { i = b[offset]; if (i < 0) i += 256; if (i < 16) buf.append("0"); buf.append(Integer.toHexString(i)); } re_md5 = buf.toString(); } catch (Exception e) { e.printStackTrace(); } return re_md5; }
4.4站点管理关键代码
@PostMapping("/add") @Transactional public Map<String, Object> add(HttpServletRequest request) throws IOException { service.insert(service.readBody(request.getReader())); return success(1); } @Transactional public Map<String, Object> addMap(Map<String,Object> map){ service.insert(map); return success(1);} public Map<String,Object> readBody(BufferedReader reader){ BufferedReader br = null; StringBuilder sb = new StringBuilder(""); try{ br = reader; String str; while ((str = br.readLine()) != null){ sb.append(str); } br.close(); String json = sb.toString(); return JSONObject.parseObject(json, Map.class); }catch (IOException e){ e.printStackTrace(); }finally{ if (null != br){ try{ br.close(); }catch (IOException e){ e.printStackTrace(); } } } return null;} public void insert(Map<String,Object> body){ StringBuffer sql = new StringBuffer("INSERT INTO "); sql.append("`").append(table).append("`").append(" ("); for (Map.Entry<String,Object> entry:body.entrySet()){ sql.append("`"+humpToLine(entry.getKey())+"`").append(","); } sql.deleteCharAt(sql.length()-1); sql.append(") VALUES ("); for (Map.Entry<String,Object> entry:body.entrySet()){ Object value = entry.getValue(); if (value instanceof String){ sql.append("'").append(entry.getValue()).append("'").append(","); }else { sql.append(entry.getValue()).append(","); } } sql.deleteCharAt(sql.length() - 1); sql.append(")"); log.info("[{}] - 插入操作:{}",table,sql); Query query = runCountSql(sql.toString()); query.executeUpdate(); }