高校在线考试系统-JAVA.VUE【源码论文】

  博主介绍:👉全网个人号和企业号粉丝40W+,每年辅导几千名大学生较好的完成毕业设计,专注计算机软件领域的项目研发,不断的进行新技术的项目实战👈
⭐️热门专栏推荐订阅⭐️ 订阅收藏起来,防止下次找不到

🔎千套JAVA项目实战持续更新中~

🔎百套小程序APP项目实战持续更新中~

🔎百套Python实战项目持续更新中~
有需求的各位可以先收藏起来,还有大家在毕设选题,开题报告有疑惑的都可以找我,帮你完成文档

⚠️文末联系方式获取完整资料⚠️

 

第4章  系统设计

本章主要讲述的是在线考试系统的设计开发结构,简单介绍了开发流程与数据库设计的原则以及数据表的关系结构图,并且详细的展示了数据表的内部结构信息与属性。

4.1 系统体系结构

系统启动后,在登录界面,输入正确的账号、密码、角色,选择进入管理员界面或学生、教师界面,管理员界面是用来管理页面与系统的所有功能,教师自己权限内功能操作,学生界面可以正常的使用,并对课程信息、学习交流等进行份内的操作,系统登录结构图如图4-1所示。

图4-1 系统登录结构图

管理员模块属于是网站的后台,进入之后有大量的管理员功能,管理员也可以使用学生、教师模块的功能,为了维护网站的稳定与页面的布局,将管理员模块的功能详细化后可以使用系统管理对页面进行布局修改,可以发布公告提示用户规范,学生模块只可以对课程信息、学习交流、在线考试等进行查询等,并且更改个人信息,在线考试系统总体结构图如图4-2所示。

图4-2 在线考试系统总体结构图

4.2  开发流程设计

系统的开发流程设计简单的介绍了开发过程,先对任务书进行分析,根据要实现的功能对各个模块进行开发,之后再对模块一一进行测试,测试成功后将模块整合再测试整体功能,完善整体结构。开发系统流程图如图4-3所示。

图4-3开发系统流程图

4.3  数据库设计原则

数据库设计之后,根据数据库关系,可以更加清晰地了解到数据库结构,每一个数据表之间的关系,再创建数据表。快速更改和查询对应的信息,有了数据库就不用在程序和代码中寻找。

分析在线考试系统的数据结构后,在E-R图中分析管理员登录时的模式,需要输入用户名与密码,角色,管理员信息E-R如图4-4所示。

图4-4 管理员信息E-R图

在线考试E-R图如图4-5所示。

图4-5在线考试E-R图

试题内容E-R图如图4-6所示。

图4-6试题内容E-R图

教师信息E-R图如图4-7所示。

图4-7教师信息E-R图

课程信息E-R图如图4-8所示。

4.4  数据表信息

在关系数据E-R图中,分析并创建数据表,数据表用来记录信息,数据表关系由多个数据表组成,下面介绍的是数据表各个字段信息如下表所示。

表4-1:课程类别

字段名称

类型

长度

字段说明

主键

默认值

id

bigint

主键

  主键

addtime

timestamp

创建时间

CURRENT_TIMESTAMP

kechengleibie

varchar

200

课程类别

表4-2:教师

字段名称

类型

长度

字段说明

主键

默认值

id

bigint

主键

  主键

addtime

timestamp

创建时间

CURRENT_TIMESTAMP

jiaoshigonghao

varchar

200

教师工号

mima

varchar

200

密码

jiaoshixingming

varchar

200

教师姓名

touxiang

longtext

4294967295

头像

xingbie

varchar

200

性别

zhicheng

varchar

200

职称

banjimingcheng

varchar

200

班级名称

lianxidianhua

varchar

200

联系电话

表4-3:学习交流

字段名称

类型

长度

字段说明

主键

默认值

id

bigint

主键

  主键

addtime

timestamp

创建时间

CURRENT_TIMESTAMP

title

varchar

200

帖子标题

content

longtext

4294967295

帖子内容

parentid

bigint

父节点id

userid

bigint

用户id

username

varchar

200

用户名

avatarurl

longtext

4294967295

头像

isdone

varchar

200

状态

表4-4:考试记录表

字段名称

类型

长度

字段说明

主键

默认值

id

bigint

主键

  主键

addtime

timestamp

创建时间

CURRENT_TIMESTAMP

userid

bigint

用户id

username

varchar

200

用户名

paperid

bigint

在线考试id(外键)

papername

varchar

200

在线考试名称

questionid

bigint

试题内容id(外键)

questionname

varchar

200

试题内容名称

options

longtext

4294967295

选项,json字符串

score

bigint

分值

0

answer

varchar

200

正确答案

analysis

longtext

4294967295

答案解析

myscore

bigint

试题内容得分

0

myanswer

varchar

200

考生答案

表4-5:试题内容

字段名称

类型

长度

字段说明

主键

默认值

id

bigint

主键

  主键

addtime

timestamp

创建时间

CURRENT_TIMESTAMP

paperid

bigint

所属在线考试id(外键)

papername

varchar

200

在线考试名称

questionname

varchar

200

试题内容名称

options

longtext

4294967295

选项,json字符串

score

bigint

分值

0

answer

varchar

200

正确答案

analysis

longtext

4294967295

答案解析

type

bigint

试题内容类型,0:单选题 1:多选题 2:判断题 3:填空题(暂不考虑多项填空)

0

sequence

bigint

试题内容排序,值越大排越前面

100

表4-6:在线考试表

字段名称

类型

长度

字段说明

主键

默认值

id

bigint

主键

  主键

addtime

timestamp

创建时间

CURRENT_TIMESTAMP

name

varchar

200

在线考试名称

time

int

考试时长(分钟)

status

int

在线考试状态

0

表4-16:课程信息

字段名称

类型

长度

字段说明

主键

默认值

id

bigint

主键

  主键

addtime

timestamp

创建时间

CURRENT_TIMESTAMP

kechengbianhao

varchar

200

课程编号

kechengmingcheng

varchar

200

课程名称

fengmiantupian

longtext

4294967295

封面图片

kechengleibie

varchar

200

课程类别

kechengjianjie

varchar

200

课程简介

banjimingcheng

varchar

200

班级名称

jiaoxueshipin

longtext

4294967295

教学视频

kechengxiangqing

longtext

4294967295

课程详情

shangchuanshijian

date

上传时间

jiaoshigonghao

varchar

200

教师工号

jiaoshixingming

varchar

200

教师姓名

thumbsupnum

int

0

crazilynum

int

0

clicktime

datetime

最近点击时间

clicknum

int

点击次数

0

4.5  本章小结

本章具体讲述了系统的大体结构,主要包括学生、教师和管理员三大系统模块,使其各个功能简洁明了。同时对数据库的设计原则进行分析,从而提高了系统的效率。


第5章  系统实现

本章讲述的是系统对各个模块功能实现的效果图,对管理员功能和学生、教师功能分别进行了展示,页面布局清晰,操作简单快捷,基本实现了对学生、教师和管理员对系统的需求。

5.1前台系统功能实现

当游客打开系统的网址后,首先看到的就是首页界面。在这里,游客能够看到在线考试系统的导航条显示首页、课程信息、学习交流、在线考试、校园公告、后台管理、个人中心等。系统首页界面如图5-1所示:

图5-1 系统首页界面

这是一个学生注册的界面,当学生没有账户时可以通过注册来登录系统,只需要根据相应的提示,输入学号、密码、学生姓名、头像、性别、班级名称、教师工号、联系方式等信息即可。学生注册界面如图5-2所示:

图5-2 学生注册界面

这是学生登录界面,学生在登录页面填写账号或者密码,点击登录,如图5-3所示:

图5-3学生登录页面

学生点击课程信息页面的搜索栏输入课程名称、课程简介、教师姓名进行查询,然后可以查看课程编号、课程名称、封面图片、课程类别、课程简介、教学视频、上传时间、教师工号、教师姓名、点击次数等信息,如果有需要可以点击点赞、收藏或者评论等操作,如图5-4所示:

图5-4课程信息页面

学生通过学习交流填写标题、类型、内容,进行发布帖子,与其他学生可以在下方发表评论,可依关键字搜索帖子,如图5-5所示:

图5-5学习交流页面

在个人中心页面可以更新个人详细信息,还可以对我的发布、考试记录、错题本、我的收藏进行详细操作;如图5-6所示:

图5-6个人中心界面

5.2后台管理员功能实现

后台管理员登录,在登录页面选择需要登录的角色,在正确输入用户名和密码后,点击登录操作;如图5-7所示。                               

图5-7 后台管理员登录界面

管理员进入系统主页面,主要功能包括对系统首页、个人中心、学生管理、教师管理、 班级管理、课程类别管理、课程信息管理、学习交流、在线考试管理、试题内容管理、系统管理、考试管理等进行操作。管理员主页面如图5-8所示:

图5-8 管理员主界面

JAVA后端代码实现

package com.controller;
 
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.Map;
 
import javax.servlet.http.HttpServletRequest;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
 
import com.annotation.IgnoreAuth;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.entity.TokenEntity;
import com.entity.UserEntity;
import com.service.TokenService;
import com.service.UserService;
import com.utils.CommonUtil;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.ValidatorUtils;
 
/**
 * 登录相关
 */
@RequestMapping("users")
@RestController
public class UserController{
	
	@Autowired
	private UserService userService;
	
	@Autowired
	private TokenService tokenService;
 
	/**
	 * 登录
	 */
	@IgnoreAuth
	@PostMapping(value = "/login")
	public R login(String username, String password, String captcha, HttpServletRequest request) {
		UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));
		if(user==null || !user.getPassword().equals(password)) {
			return R.error("账号或密码不正确");
		}
		String token = tokenService.generateToken(user.getId(),username, "users", user.getRole());
		return R.ok().put("token", token);
	}
	
	/**
	 * 注册
	 */
	@IgnoreAuth
	@PostMapping(value = "/register")
	public R register(@RequestBody UserEntity user){
//    	ValidatorUtils.validateEntity(user);
    	if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) {
    		return R.error("用户已存在");
    	}
        userService.insert(user);
        return R.ok();
    }
 
	/**
	 * 退出
	 */
	@GetMapping(value = "logout")
	public R logout(HttpServletRequest request) {
		request.getSession().invalidate();
		return R.ok("退出成功");
	}
	
	/**
     * 密码重置
     */
    @IgnoreAuth
	@RequestMapping(value = "/resetPass")
    public R resetPass(String username, HttpServletRequest request){
    	UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));
    	if(user==null) {
    		return R.error("账号不存在");
    	}
    	user.setPassword("123456");
        userService.update(user,null);
        return R.ok("密码已重置为:123456");
    }
	
	/**
     * 列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,UserEntity user){
        EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>();
    	PageUtils page = userService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.allLike(ew, user), params), params));
        return R.ok().put("data", page);
    }
 
	/**
     * 列表
     */
    @RequestMapping("/list")
    public R list( UserEntity user){
       	EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>();
      	ew.allEq(MPUtil.allEQMapPre( user, "user")); 
        return R.ok().put("data", userService.selectListView(ew));
    }
 
    /**
     * 信息
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") String id){
        UserEntity user = userService.selectById(id);
        return R.ok().put("data", user);
    }
    
    /**
     * 获取用户的session用户信息
     */
    @RequestMapping("/session")
    public R getCurrUser(HttpServletRequest request){
    	Long id = (Long)request.getSession().getAttribute("userId");
        UserEntity user = userService.selectById(id);
        return R.ok().put("data", user);
    }
 
    /**
     * 保存
     */
    @PostMapping("/save")
    public R save(@RequestBody UserEntity user){
//    	ValidatorUtils.validateEntity(user);
    	if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) {
    		return R.error("用户已存在");
    	}
        userService.insert(user);
        return R.ok();
    }
 
    /**
     * 修改
     */
    @RequestMapping("/update")
    public R update(@RequestBody UserEntity user){
//        ValidatorUtils.validateEntity(user);
    	UserEntity u = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername()));
    	if(u!=null && u.getId()!=user.getId() && u.getUsername().equals(user.getUsername())) {
    		return R.error("用户名已存在。");
    	}
        userService.updateById(user);//全部更新
        return R.ok();
    }
 
    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids){
        userService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }
}

源码获取

大家点赞、收藏、关注 ,让更多需要的同学看到

不同开发语言专栏推荐订阅

 🔎千套JAVA项目实战持续更新中~

🔎百套小程序APP项目实战持续更新中~

🔎百套Python实战项目持续更新中~

👇下方有我的微信名片👇

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值