Java项目:在线考试系统(java+springBoot+vue+Mysql+maven)
源码获取:博客首页 "资源" 里下载!
管理员和教师登陆此账号就进入后台,学生登陆此账号就进入前端做题。
老师发布了考试,学生才可以在主页面看到相应的考试信息。 有考试安排表以后,才能给该次考试添加题目,对应数据表是exammanage。 该表保存该次考试,课程名称,考试时间,所属专业,学院等等信息。
题库表设计和普通数据表设计有所区别。分别是选择题题库表,填空题题库表,判断题题库表, 每个表保存相应类型的题库,通过一张中间表,将题库和试题关联起来。 这样就组成了一张完整的试卷。
管理员的功能:
考试管理、题库管理、成绩查询、学生管理、教师管理
首先需要增加考试,才能在这个考试下,添加题目。题目可以在题库中自由组题。
学生功能:
查看可以做的试卷、已经做的试卷练习、自己每次考试的分数、给管理员留言等。
统一管理学生 教师 管理员信息控制层:
/*** 统一管理学生 教师 管理员信息*/
@RestController
public class UserController {@Resource(name = "userService")private IUserService userService;/*** 查询用户信息* 先判断用户类型 在查询用户信息*/@RequestMapping(value = "/user/qryUserInfo", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})public Result<User> qryUserInfo() {return userService.qryUserInfo();}/*** 更新用户信息*/@RequestMapping(value = "/user/update", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})public Result<User> update(HttpRequest request) {User user = new User();user.setUserId(request.getString("user_id"));user.setName(request.getString("name"));user.setSex(request.getInteger("sex"));user.setType(User.UserType.get(request.getInteger("type")));return userService.update(user, ImageUtil.stringToBytes(request.getString("user_image")));}/*** 更新用户密码*/@RequestMapping(value = "/user/updatePwd", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})public Result<User> updatePwd(HttpRequest request) {return userService.updatePwd(request.getString("old_pwd"), request.getString("pwd"));}
}
用户登陆控制层:
@RestController
public class LoginController {@Resource(name = "loginService")private ILoginService loginService;/*** 用户登录调用 在登陆成功生成两个token 同时返回各自首页* * 学生 student/student* * 老师 teacher/teacher* * 管理员 admin/admin*/@RequestMapping(value = "/login/login", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})public Result<Token> login(HttpRequest request) {return loginService.login(request.getString("login_name"), request.getString("pwd"));}/*** 登录检查*/@RequestMapping(value = "/login/check", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})public Result<Token> check() {return new Result<>();}/*** token 续约*/@RequestMapping(value = "/login/refresh", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})public Result<Token> refresh(HttpRequest request) {String refreshToken = request.getString("refresh_token");String urlId = request.getString("url_id");Token token = TokenCache.getInstance().get(urlId);if(token == null){ExceptionHelper.error(ErrorCode.ERROR_CODE_0003);}try {Claims claims = TokenUtils.parseToken(refreshToken);if (StringUtils.isNotEmpty((String.valueOf(claims.getOrDefault("student_id", ""))))) {claims.put("student_id", SessionContext.get("student_id"));}if (StringUtils.isNotEmpty((String.valueOf(claims.getOrDefault("teacher_id", ""))))) {claims.put("teacher_id", SessionContext.get("teacher_id"));}if (StringUtils.isNotEmpty((String.valueOf(claims.getOrDefault("login_name", ""))))) {claims.put("login_name", SessionContext.get("login_name"));}claims.put("name", claims.get("name"));token.setToken(TokenUtils.createToken(claims, TokenUtils.expireTime));token.setRefreshToken(TokenUtils.createToken(claims, TokenUtils.long_expireTime));TokenCache.getInstance().add(token);} catch (Exception e) {ExceptionHelper.error(ErrorCode.ERROR_CODE_0003);}return new Result<>(token);}/*** 退出系统*/@RequestMapping(value = "/login/exit", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})public Result<Token> exit(HttpRequest request) {String urlId = request.getString("url_id");if (StringUtils.isNotEmpty(urlId)) {TokenCache.getInstance().remove(urlId);}return new Result<>();}
}
管理员控制器:
/*** 管理员控制器*/
@RestController
public class AdminController {@Resource(name = "adminService")private IAdminService adminService;/*** 管理员 查询管理员列表*/@RequestMapping(value = "/admin/qryPage", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})@RoleAnnotation(types = {RoleEnum.admin})public ListResult<Admin> qryPage(HttpRequest request) {Map<String, Object> param = new HashMap<>();int pageNo = request.containsKey("page_no") ? request.getInteger("page_no") : 1;int pageSize = request.containsKey("page_size") ? request.getInteger("page_size") : 20;if (request.containsKey("login_name")) {param.put("login_name", request.getString("login_name"));}if (request.containsKey("name")) {param.put("name", request.getString("name"));}return adminService.qryPage(param, pageNo, pageSize);}/*** 管理员 添加管理员*/@RequestMapping(value = "/admin/add", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})@RoleAnnotation(types = {RoleEnum.admin})public Result<Admin> insert(HttpRequest request) {Admin admin = new Admin();admin.setLoginName(request.getString("login_name"));admin.setName(request.getString("admin_name"));admin.setPwd(request.getString("login_name"));admin.setSex(request.getInteger("sex"));admin.setUpdateTime(new Date());return adminService.insert(admin, ImageUtil.stringToBytes(request.getString("admin_image")));}/*** 管理员 更新管理员*/@RequestMapping(value = "/admin/update", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})@RoleAnnotation(types = {RoleEnum.admin})public Result<Admin> update(HttpRequest request) {Admin admin = new Admin();admin.setLoginName(request.getString("login_name"));admin.setName(request.getString("admin_name"));admin.setPwd(request.getString("login_name"));admin.setSex(request.getInteger("sex"));admin.setUpdateTime(new Date());return adminService.update(admin, ImageUtil.stringToBytes(request.getString("admin_image")));}/*** 管理员 删除管理员*/@RequestMapping(value = "/admin/del", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})@RoleAnnotation(types = {RoleEnum.admin})public Result<Admin> del(HttpRequest request) {List<String> adminIdList = new ArrayList<>();JSONArray array = request.getJSONArray("admin_id_list");for (int i = 0; i < array.size(); i++) {adminIdList.add(array.getString(i));}return adminService.del(adminIdList);}
}
源码获取:博客首页 "资源" 里下载!
相关文章:

来玩Play框架05 数据库
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢! 数据库是整个站点的数据储藏室。用户提交的数据可以存储在数据库中,以便未来使用。Play可以通过JDBC和数据库通信。我讲介绍Play和my…

mysql数据库之linux版本
http://repo.mysql.com/yum/mysql-5.6-community/ 安装 安装方式一(在线安装) # 查看和mysql…

LINUX UMASK详解
一 权限掩码umask umask是chmod配套的,总共为4位(gid/uid,属主,组权,其它用户的权限),不过通常用到的是后3个,例如你用chmod 755 file(此时这文件的权限是属主读(4)写(2)+执行(1),同…

ubuntu14.04安装hadoop2.6.0(伪分布模式)
版本:虚拟机下安装的ubuntu14.04(64位),hadoop-2.6.0 下面是hadoop2.6.0的官方英文教程: http://hadoop.apache.org/docs/r2.6.0/hadoop-project-dist/hadoop-common/SingleCluster.html#Pseudo-Distributed_Operation hadoop下载…

Java项目:生活旅行分享平台(java+Springboot+JPA+Jsp+Html+js+Ajax+maven+mysql)
源码获取:博客首页 "资源" 里下载! 一、项目运行 环境配置: Jdk1.8 Tomcat8.5 mysql Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持) 项目技术: Springboot SpringMVC JPA Jsp Htm…

Servlet和SpringMVC补课
1.web.xml加载顺序 http://mianhuaman.iteye.com/blog/1105522 关键点:ServletContext -> context-param -> listener -> filter -> servlet 2.beans xmlns http://www.w3school.com.cn/xml/xml_namespaces.asp 用于避免元素命名冲突。在Spring中应用极…

gdb debug
1. dir 添加源代码查找路径 一般工程的代码会有多路径,gdb会在当前目录下搜索符号对应的代码。利用dir <path> 可以添加代码搜索路径; 例如工程目录: ./ ./dir_1/ ./dir_2/ 可以用如下命令添加代码搜索路径: dir dir…

Java项目:嘟嘟图片展览馆管理系统(java+Springboot+SpringMVC+JPA+Jsp+maven+mysql)
源码获取:博客首页 "资源" 里下载! 一、项目运行 环境配置: Jdk1.8 Tomcat8.5 mysql Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持) 项目技术: Springboot SpringMVC JPA Jsp Htm…

javascript编译与运行机理(1)--
随着学习js的深入就越想了解其内部的运行机理,看了很多文章,感觉下面总结的不错。但囿于个人水平,只是达到了理解层面,还不能提出自己的见解,只好把资料罗列出来,留待以后总结: 1、Javascript的…
Citrix Synergy 2014 重要信息快速一览
今天的互联网、社交媒体的确强大,我们可以足不出户了解到9600公里(北京到LA的距离)之外的美国发生的事情。今天从Brain Madden大神那儿又扒到了一些经过提炼的关于Citrix Synergy 2014(Citrix每年一度的大会)的会议内容…

stm32 flash和sram
FLASH是用来存储程序的,SRAM是用来存储程序运行中的中间变量转载于:https://www.cnblogs.com/CodeWorkerLiMing/p/10984065.html

常见主机字节序
常见主机字节序1. Little endian:将低序字节存储在起始地址2. Big endian:将高序字节存储在起始地址LE little-endian最符合人的 思维的字节序地址低位存储值的低位地址高位存储值的高位怎么讲是最符合人的思维的字节序࿰…

Java项目:仿小米电子产品售卖商城系统(java+SpringBoot+Vue+MySQL+Redis+ElementUI)
源码获取:博客首页 "资源" 里下载! 项目描述:这是一个基于SpringBootVue框架开发的仿小米电子产品售卖商城系统。首先,这是一个前后端分离的项目,代码简洁规范,注释说明详细。其次,这…

在js中使用createElement创建HTML对象和元素
1.创建链接 <script language"javascript"> var o document.body; //创建链接 function createA(url,text) { var a document.createElement("a"); a.href url; a.innerHTML text; a.style.color "red"; o.appendChild(a); …

Leetcode | 3Sum
Given an array S of n integers, are there elements a, b, c in S such that a b c 0? Find all unique triplets in the array which gives the sum of zero. Note:Elements in a triplet (a,b,c) must be in non-descending order. (ie, a ≤ b ≤ c)The solution set …

玩转 JavaScript 面试:何为函数式编程?
函数式编程在 JavaScript 领域着实已经成为一个热门话题。就在几年前,很多 JavaScript 程序员甚至都不知道啥是函数式编程,但是就在近三年里我看到过的每一个大型应用的代码库中都包含了函数式编程思想的大规模使用。 函数式编程(缩写为 FP)是一种通过组…

正则表达式分类 区别
原文地址:http://www.cnblogs.com/chengmo/archive/2010/10/10/1847287.html 正则表达式:在计算机科学中,是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。在很多文本编辑器或其他工具里,正则表达式通常被用…

Java项目:嘟嘟校园一卡通系统(java+JSP+Servlet+html+css+JavaScript+JQuery+Ajax+mysql)
源码获取:博客首页 "资源" 里下载! 一、项目简述 功能:卡管理,卡消费,卡充值,图书借阅,消费,记录,注销等等功能。 二、项目运行 环境配置: Jdk…

OC与C语言的区别
C语言是面向过程的编程语言,而OC则是面向对象的编程语言。面向对象:打个比方,就是你做一次菜,让老婆做个菜,吃饭,这就是面向对象,效率高面向过程,就是每一个细节:比如你要先把或开到合适的位置.然后还要洗菜 ,等油热了,才能开始炒菜,然后调料,...,起锅,到碗里,吃饭.…

Hutool之集合工具——CollectionUtil
为什么80%的码农都做不了架构师?>>> 集合工具 CollectionUtil 这个工具主要增加了对数组、集合类的操作。 1. join 方法 将集合转换为字符串,这个方法还是挺常用,是StrUtil.split的反方法。这个方法的参数支持各种类型对象的集合…

15:解决IntelliJ IDEA的乱码问题
1. -Dfile-encodingsUTF-8 ,全局: 转载于:https://www.cnblogs.com/gzhbk/p/10991335.html

C++ 和C 语言混合代码导致的问题
C语言中操作字符串用C运行时函数:strtok, strcmp, strcpy等等,直接操作内存。在c引入的字符串操作类std:string ,string类中必有一个私有成员,其是一个char*,用户记录从堆上分配内存的地址,其在构造时分配内…

SVN详细使用教程
SVN简介: 为什么要使用SVN? 程序员在编写程序的过程中,每个程序员都会生成很多不同的版本,这就需要程序员有效的管理代码,在需要的时候可以迅速,准确取出相应的版本。 Subversion是什么? 它是一…

Java项目:药店信息管理系统(java+SSM+JSP+layui+maven+mysql)
源码获取:博客首页 "资源" 里下载! 一、项目简述 环境配置: Jdk1.8 Tomcat8.5 mysql Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持) 项目技术: JSP Spring SpringMVC MyBatis ht…

MongoDB简单操作
MongoDB简单操作 Hadoop核心技术厂商Cloudera将在2014/06推出hadoop Ecosystem与MongoDB的整合产品,届时MongoDB与ipmala及hbase,hive一起用; 开源linux领军企业RHEL也宣布RHEL将整合MongoDB用于简化用户账号管理与LDAP一起用; 数据仓库之MPP技术 领军者莫非 Vertica,exterdata…

Windows Presentation Foundation(介绍外连接)
Windows Presentation Foundation 2011/08/12更新:2010 年 12 月 Windows Presentation Foundation (WPF) 为开发人员提供了统一的编程模型,可用于构建合并了 UI、媒体和文档的丰富 Windows 智能客户端用户体验。 欢迎使用 WPF 了解 WPF: WP…

Linux中与进程终止相关的信号SIGTERM,SIGKILL,SIGINT
1. SIGTERM “kill pid” 会发送SIGTERM到进程pid. This is the termination signal sent by killcommand by default. 2. SIGINT 在终端中敲入interrupt key(DELETE或ctrlc)会产生SIGINT信号。这个信号会被发送到进程(inforeground proc…

Java项目:嘟嘟二手书商城系统(java+JSP+Springboot+maven+mysql+ThymeLeaf+FTP)
源码获取:博客首页 "资源" 里下载! 一、项目简述 功能: 主页显示商品; 所有二手书商品展示,可进行商品搜索; 点击商品进入商品详情页,具有立即购买和加入购物车功能,可增减…

SQL用法总结
1、创建数据库语句 create table persons(id INT NOT NULL AUTO_INCREMENT,lastname VARCHAR(255) NOT NULL,firstname VARCHAR(255) NOT NULL,PRIMARY KEY (ID)) DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci; 2、创建数据库时,PK、NN、UQ、BIN、UN、…

[leetcode] Binary Tree Preorder Traversal
Given a binary tree, return the preorder traversal of its nodes values. For example:Given binary tree {1,#,2,3}, 1\2/3return [1,2,3]. Note: Recursive solution is trivial, could you do it iteratively? 给定一棵二叉树,使用非递归的方法进行先序遍历。…