This commit is contained in:
闵宪瑞 2025-05-27 16:46:03 +08:00
parent 03d32a62b3
commit 681abbd5be
18 changed files with 40 additions and 314 deletions

View File

@ -1,271 +0,0 @@
/*
Navicat Premium Data Transfer
Source Server : localhost_3306
Source Server Type : MySQL
Source Server Version : 80013
Source Host : localhost:3306
Source Schema : xm_examination
Target Server Type : MySQL
Target Server Version : 80013
File Encoding : 65001
Date: 12/10/2024 22:52:44
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for admin
-- ----------------------------
DROP TABLE IF EXISTS `admin`;
CREATE TABLE `admin` (
`id` int(10) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '账号',
`password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '密码',
`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '姓名',
`avatar` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '头像',
`role` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '角色',
`phone` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '电话',
`email` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '邮箱',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '管理员表' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of admin
-- ----------------------------
INSERT INTO `admin` VALUES (1, 'admin', 'admin', '管理员', 'http://localhost:9090/files/download/1721114905635-柴犬.jpeg', 'ADMIN', '18899990011', 'admin2@xm.com');
-- ----------------------------
-- Table structure for article
-- ----------------------------
DROP TABLE IF EXISTS `article`;
CREATE TABLE `article` (
`id` int(10) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '帖子标题',
`img` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '帖子主图',
`content` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL COMMENT '帖子内容',
`time` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '发布时间',
`student_id` int(10) NULL DEFAULT NULL COMMENT '学生ID',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 8 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '帖子信息表' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of article
-- ----------------------------
INSERT INTO `article` VALUES (2, '关于学习Java枚举的笔记经验分享', 'http://localhost:9090/files/download/1728563732106-2.png', '<p><strong>基于Springboot3+Vue3的在线考试系统</strong></p><p>角色:管理员、教师、学生</p><p>功能模块:</p><p>登录注册:(已完成)</p><p>个人中心:(已完成)</p><p>修改密码:(已完成)</p><p>管理员信息:(已完成)</p><p>教师信息:(已完成)</p><p>学生信息:(已完成)</p><p>考试安排:(已完成)</p><p>题型管理:包括单选、多选、判断、填空、简答(已完成)</p><p>课程管理:(已完成)</p><p>学习交流管理:</p><p>题库管理:题库里的题目需要根据课程进行分类,不同的课程都得有对应的题库,教师可以给自己的课程题库里新增试题(已完成)</p><p>组卷:选择课程出卷时,支持随机和人工从题库里抽选题目,组成试卷</p><p>试卷预览:</p><p>成绩管理:</p><p>自动阅卷:客观题自动阅卷,主观题(简答)可以支持手动给分</p><p>前台学生:</p><p>查看考试安排、查看试卷</p><p>在线答题:试卷每种题型在线展示,供学生答题</p><p>学习交流:发布学习心得</p><p><img src=\"http://localhost:9090/files/download/1728566947212-柴犬.jpeg\" alt=\"\" data-href=\"\" style=\"\"/></p>', '2024-10-10 20:35:34', 1);
INSERT INTO `article` VALUES (3, '武哥10万字Springboot经典教程学习笔记', 'http://localhost:9090/files/download/1728564558044-9.png', '66666', '2024-10-10 20:49:20', 2);
INSERT INTO `article` VALUES (5, '在线考试系统功能点描述分享', 'http://localhost:9090/files/download/1728564833337-10.png', '<p>基于Springboot3+Vue3的在线考试系统</p><p>角色:管理员、教师、学生</p><p>功能模块:</p><p>登录注册:(已完成)</p><p>个人中心:(已完成)</p><p>修改密码:(已完成)</p><p>管理员信息:(已完成)</p><p>教师信息:(已完成)</p><p>学生信息:(已完成)</p><p>考试安排:(已完成)</p><p>题型管理:包括单选、多选、判断、填空、简答(已完成)</p><p>课程管理:(已完成)</p><p>学习交流管理:</p><p><br></p><p>题库管理:题库里的题目需要根据课程进行分类,不同的课程都得有对应的题库,教师可以给自己的课程题库里新增试题(已完成)</p><p>组卷:选择课程出卷时,支持随机和人工从题库里抽选题目,组成试卷</p><p>试卷预览:</p><p>成绩管理:</p><p>自动阅卷:客观题自动阅卷,主观题(简答)可以支持手动给分</p><p>前台学生:</p><p>查看考试安排、查看试卷</p><p>在线答题:试卷每种题型在线展示,供学生答题</p><p>学习交流:发布学习心得</p><p><br></p>', '2024-10-10 20:53:55', 1);
INSERT INTO `article` VALUES (6, 'Vue3基础知识学习笔记', 'http://localhost:9090/files/download/1728568543079-7.png', '<p>哈哈哈</p><p>呵呵呵</p><p>嘿嘿嘿</p><p>嘎嘎嘎</p><p>啦啦啦</p>', '2024-10-10 21:55:52', 1);
INSERT INTO `article` VALUES (7, '前端三件套htmlcssjs学习心得', 'http://localhost:9090/files/download/1728568566399-right.jpg', '<p>哈哈哈</p><p>哈哈哈</p><p>嘿嘿黑</p><p>呵呵呵</p><p>嘎嘎嘎</p>', '2024-10-10 21:56:13', 1);
-- ----------------------------
-- Table structure for course
-- ----------------------------
DROP TABLE IF EXISTS `course`;
CREATE TABLE `course` (
`id` int(10) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '课程名称',
`img` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '课程封面',
`score` int(10) NULL DEFAULT NULL COMMENT '课程学分',
`teacher_id` int(10) NULL DEFAULT NULL COMMENT '教师ID',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '课程信息表' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of course
-- ----------------------------
INSERT INTO `course` VALUES (2, 'Java基础入门课', 'http://localhost:9090/files/download/1728545691210-Java基础入门课程.jpg', 3, 1);
INSERT INTO `course` VALUES (3, 'Vue最新实战教程', 'http://localhost:9090/files/download/1728545950698-Vue最新教程.jpg', 3, 1);
INSERT INTO `course` VALUES (4, 'Java入学课程', 'http://localhost:9090/files/download/1728545989297-Java入学课程.jpg', 3, 2);
-- ----------------------------
-- Table structure for exam_plan
-- ----------------------------
DROP TABLE IF EXISTS `exam_plan`;
CREATE TABLE `exam_plan` (
`id` int(10) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '标题',
`content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL COMMENT '内容',
`time` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '发布时间',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '考试安排表' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of exam_plan
-- ----------------------------
INSERT INTO `exam_plan` VALUES (1, '关于第一学期期末考试的安排', '考试时间xxxx-xx-xx考试地点xxxx。注意事项xxxx', '2024-10-10 14:21:13');
INSERT INTO `exam_plan` VALUES (2, '关于考试考场纪律和作弊处罚措施', '本着公平公正原则,考试过程严禁作弊,请监考老师以及同学严格遵守,一旦发现,会取消该门课的考试资格,等待补考,如果补考作弊,该门课需要重修!', '2024-10-10 14:21:28');
INSERT INTO `exam_plan` VALUES (3, '信息工程学院期末考试安排', '本着公平公正原则,考试过程严禁作弊,请监考老师以及同学严格遵守,一旦发现,会取消该门课的考试资格,等待补考,如果补考作弊,该门课需要重修!', '2024-10-10 14:21:40');
INSERT INTO `exam_plan` VALUES (4, '软件学院期末考试安排', '考试时间xxxx-xx-xx考试地点xxxx。注意事项xxxx', '2024-10-10 14:21:51');
INSERT INTO `exam_plan` VALUES (5, '经济管理学期末考试安排', '考试时间xxxx-xx-xx考试地点xxxx。注意事项xxxx', '2024-10-10 14:22:05');
INSERT INTO `exam_plan` VALUES (6, '物流工程学院考试安排', '考试时间xxxx-xx-xx考试地点xxxx。注意事项xxxx', '2024-10-12 22:35:08');
-- ----------------------------
-- Table structure for notice
-- ----------------------------
DROP TABLE IF EXISTS `notice`;
CREATE TABLE `notice` (
`id` int(10) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '公告标题',
`content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL COMMENT '公告内容',
`time` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '发布时间',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '系统公告表' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of notice
-- ----------------------------
INSERT INTO `notice` VALUES (1, '今天天气真的不错', '今天好开心呀!因为天气很好,我又可以肆无忌惮的跟着武哥和青哥学习了!!真的好开心!', '2024-07-16 15:51:17');
INSERT INTO `notice` VALUES (2, '项目所有功能开发完毕!', '我的项目所有的功能都开发完啦!真的很有成就感!', '2024-07-16 15:52:22');
INSERT INTO `notice` VALUES (3, '项目功能都测试完成,准备上线!', '经过半个月的学习和练习,终于把这个项目完成了,可以打包上线了!', '2024-07-16 15:52:56');
-- ----------------------------
-- Table structure for question
-- ----------------------------
DROP TABLE IF EXISTS `question`;
CREATE TABLE `question` (
`id` int(10) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '题目名称',
`course_id` int(10) NULL DEFAULT NULL COMMENT '课程ID',
`teacher_id` int(10) NULL DEFAULT NULL COMMENT '教师ID',
`type_id` int(10) NULL DEFAULT NULL COMMENT '题型ID',
`option_a` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '选项A',
`option_b` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '选项B',
`option_c` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '选项C',
`option_d` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '选项D',
`answer` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '题目答案',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 8 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '题目信息表' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of question
-- ----------------------------
INSERT INTO `question` VALUES (2, 'Java是世界上最好的语言', 2, 1, 3, NULL, NULL, NULL, NULL, '正确');
INSERT INTO `question` VALUES (3, '下面哪一项不是Java基本数据类型', 2, 1, 1, 'int', 'int', 'float', 'let', 'D');
INSERT INTO `question` VALUES (4, '下面哪些选项是Java的特点', 2, 1, 2, 'Java是后端语言', 'Java是前端语言', 'Java是强类型语言', 'Java是弱类型语言', 'A,C');
INSERT INTO `question` VALUES (5, 'Java语言的创造者是______。', 2, 1, 4, NULL, NULL, NULL, NULL, 'James Gosling');
INSERT INTO `question` VALUES (6, '请写一个冒泡排序算法。', 2, 1, 5, NULL, NULL, NULL, NULL, 'public void bubbleSort(int[] source) {\n for(int i = source.length - 1; i > 0; i--) {\n for(int j = 0; j < i; j++) {\n if(a[j] > a[j+1])\n swap(source, j, j+1); \n }\n }\n}');
INSERT INTO `question` VALUES (7, '所有的Java项目里都有一个启动的______方法。', 4, 2, 4, NULL, NULL, NULL, NULL, 'main');
-- ----------------------------
-- Table structure for question_type
-- ----------------------------
DROP TABLE IF EXISTS `question_type`;
CREATE TABLE `question_type` (
`id` int(10) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '题型名称',
`score` int(10) NULL DEFAULT NULL COMMENT '题型分数',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '题型信息表' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of question_type
-- ----------------------------
INSERT INTO `question_type` VALUES (1, '单选题', 4);
INSERT INTO `question_type` VALUES (2, '多选题', 5);
INSERT INTO `question_type` VALUES (3, '判断题', 2);
INSERT INTO `question_type` VALUES (4, '填空题', 4);
INSERT INTO `question_type` VALUES (5, '简答题', 20);
-- ----------------------------
-- Table structure for score
-- ----------------------------
DROP TABLE IF EXISTS `score`;
CREATE TABLE `score` (
`id` int(10) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '试卷名称',
`course_id` int(10) NULL DEFAULT NULL COMMENT '课程ID',
`teacher_id` int(10) NULL DEFAULT NULL COMMENT '教师ID',
`student_id` int(10) NULL DEFAULT NULL COMMENT '学生ID',
`paper_id` int(10) NULL DEFAULT NULL COMMENT '试卷ID',
`score` int(10) NULL DEFAULT NULL COMMENT '成绩得分',
`status` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '状态',
`answer` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL COMMENT '提交结果',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '成绩信息表' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of score
-- ----------------------------
INSERT INTO `score` VALUES (2, 'Java基础入门课小测验2', 2, 1, 1, 2, 13, '已阅卷', '[{\"typeName\":\"单选题\",\"questionId\":3,\"score\":4,\"answer\":\"D\",\"newAnswer\":\"D\"},{\"typeName\":\"多选题\",\"questionId\":4,\"score\":5,\"answer\":\"A,C\",\"newAnswer\":\"A,C\"},{\"typeName\":\"判断题\",\"questionId\":2,\"score\":2,\"answer\":\"正确\",\"newAnswer\":\"正确\"},{\"typeName\":\"填空题\",\"questionId\":5,\"score\":4,\"answer\":\"James Gosling\",\"newAnswer\":\"张三\"},{\"typeName\":\"简答题\",\"questionId\":6,\"score\":20,\"answer\":\"public void bubbleSort(int[] source) {\\n for(int i = source.length - 1; i > 0; i--) {\\n for(int j = 0; j < i; j++) {\\n if(a[j] > a[j+1])\\n swap(source, j, j+1); \\n }\\n }\\n}\",\"newAnswer\":\"public static void main() \"}]');
INSERT INTO `score` VALUES (3, 'Java基础入门课小测验3', 2, 1, 1, 3, NULL, '待阅卷', '[{\"typeName\":\"单选题\",\"questionId\":3,\"score\":4,\"answer\":\"D\",\"newAnswer\":\"D\"},{\"typeName\":\"多选题\",\"questionId\":4,\"score\":5,\"answer\":\"A,C\",\"newAnswer\":\"A,C\"},{\"typeName\":\"简答题\",\"questionId\":6,\"score\":20,\"answer\":\"public void bubbleSort(int[] source) {\\n for(int i = source.length - 1; i > 0; i--) {\\n for(int j = 0; j < i; j++) {\\n if(a[j] > a[j+1])\\n swap(source, j, j+1); \\n }\\n }\\n}\",\"newAnswer\":\"public void bubbleSort(int[] source) {\\n for(int i = source.length - 1; i > 0; i--) {\\n for(int j = 0; j < i; j++) {\\n if(a[j] > a[j+1])\\n swap(source, j, j+1); \\n }\\n }\\n}\"}]');
INSERT INTO `score` VALUES (4, 'Java基础入门课小测验1', 2, 1, 1, 1, 20, '已阅卷', '[{\"typeName\":\"判断题\",\"questionId\":2,\"score\":2,\"answer\":\"正确\",\"newAnswer\":\"正确\"},{\"typeName\":\"单选题\",\"questionId\":3,\"score\":4,\"answer\":\"D\",\"newAnswer\":\"D\"},{\"typeName\":\"多选题\",\"questionId\":4,\"score\":5,\"answer\":\"A,C\",\"newAnswer\":\"C,A\"},{\"typeName\":\"填空题\",\"questionId\":5,\"score\":4,\"answer\":\"James Gosling\",\"newAnswer\":\"James Gosling\"},{\"typeName\":\"简答题\",\"questionId\":6,\"score\":20,\"answer\":\"public void bubbleSort(int[] source) {\\n for(int i = source.length - 1; i > 0; i--) {\\n for(int j = 0; j < i; j++) {\\n if(a[j] > a[j+1])\\n swap(source, j, j+1); \\n }\\n }\\n}\",\"newAnswer\":\"public static void main( ) {\\n System.print......\\n 老师我不会了,给我点辛苦分吧~\\n}\"}]');
-- ----------------------------
-- Table structure for student
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
`id` int(10) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '账号',
`password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '密码',
`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '姓名',
`avatar` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '头像',
`role` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '角色',
`phone` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '电话',
`email` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '邮箱',
`status` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '状态',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '学生信息表' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES (1, 'zhangsan', '123456', '张三', 'http://localhost:9090/files/download/1728486694570-柴犬.jpeg', 'STUDENT', '18899990000', 'zhangsan@xm.com', '审核通过');
INSERT INTO `student` VALUES (2, 'lisi', '123456', '李四', 'http://localhost:9090/files/download/1728486728196-拉布拉多.jpeg', 'STUDENT', '18899995555', 'lisi@xm.com', '审核通过');
INSERT INTO `student` VALUES (3, 'wangwu', '123456', '王五', 'http://localhost:9090/files/download/1728486753434-柯基.jpeg', 'STUDENT', '18844445555', 'wangwu@xm.com', '审核通过');
INSERT INTO `student` VALUES (4, 'zhaoliu', '123456', 'zhaoliu', NULL, 'STUDENT', NULL, NULL, '待审核');
-- ----------------------------
-- Table structure for teacher
-- ----------------------------
DROP TABLE IF EXISTS `teacher`;
CREATE TABLE `teacher` (
`id` int(10) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '账号',
`password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '密码',
`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '姓名',
`avatar` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '头像',
`role` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '角色',
`phone` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '电话',
`email` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '邮箱',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '教师信息表' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of teacher
-- ----------------------------
INSERT INTO `teacher` VALUES (1, 'zhang', '123456', '张老师', 'http://localhost:9090/files/download/1728484762449-柴犬.jpeg', 'TEACHER', '18800001111', 'zhang@xm.com');
INSERT INTO `teacher` VALUES (2, 'li', '123456', '李老师', 'http://localhost:9090/files/download/1728484862680-柯基.jpeg', 'TEACHER', '18877776666', 'li@xm.com');
INSERT INTO `teacher` VALUES (3, 'zhao', '123456', 'zhao', NULL, 'TEACHER', NULL, NULL);
-- ----------------------------
-- Table structure for test_paper
-- ----------------------------
DROP TABLE IF EXISTS `test_paper`;
CREATE TABLE `test_paper` (
`id` int(10) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '试卷名称',
`course_id` int(10) NULL DEFAULT NULL COMMENT '课程ID',
`teacher_id` int(10) NULL DEFAULT NULL COMMENT '教师ID',
`type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '类型',
`start` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '开始时间',
`end` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '结束时间',
`time` int(10) NULL DEFAULT NULL COMMENT '考试时长',
`question_ids` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '题目IDs',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '试卷信息表' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of test_paper
-- ----------------------------
INSERT INTO `test_paper` VALUES (1, 'Java基础入门课小测验1', 2, 1, '手动选题', '2024-10-11', '2024-10-26', 60, '[2,3,4,5,6]');
INSERT INTO `test_paper` VALUES (2, 'Java基础入门课小测验2', 2, 1, '自动组卷', '2024-10-11', '2024-10-26', 60, '[3,4,2,5,6]');
INSERT INTO `test_paper` VALUES (3, 'Java基础入门课小测验3', 2, 1, '自动组卷', '2024-10-11', '2024-10-24', 60, '[3,4,6]');
INSERT INTO `test_paper` VALUES (4, 'Java基础入门小测验4', 2, 1, '手动选题', '2024-10-12', '2025-11-13', 60, '[3,4,2,6]');
INSERT INTO `test_paper` VALUES (5, 'Java基础入门小测验5', 2, 1, '自动组卷', '2024-10-12', '2025-10-09', 60, '[3,4,2,5,6]');
SET FOREIGN_KEY_CHECKS = 1;

View File

@ -4,7 +4,7 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<link rel="icon" href="/favicon.ico"> <link rel="icon" href="/favicon.ico">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>在线考试系统</title> <title>在线实验系统</title>
</head> </head>
<body> <body>
<div id="app"></div> <div id="app"></div>

View File

@ -1,5 +1,5 @@
@forward "element-plus/theme-chalk/src/common/var.scss" with ($colors: ( @forward "element-plus/theme-chalk/src/common/var.scss" with ($colors: (
"primary": ("base": #1baf8a), "primary": ("base": #e78f63),
"success": ("base": #46b61f), "success": ("base": #46b61f),
"warning": ("base": #f1cf61), "warning": ("base": #f1cf61),
"danger": ("base": #e52f2f), "danger": ("base": #e52f2f),

View File

@ -5,14 +5,14 @@
.manager-header { .manager-header {
height: 60px; height: 60px;
background-color: #07c796; background-color: #f67c40;
display: flex; display: flex;
align-items: center; align-items: center;
box-shadow: 0 1px 4px rgba(0, 21, 41, .08); box-shadow: 0 1px 4px rgba(0, 21, 41, .08);
} }
.manager-header-left { .manager-header-left {
background-color: #07c796; background-color: #f67c40;
width: 250px; width: 250px;
height: 100%; height: 100%;
padding-left: 10px; padding-left: 10px;
@ -87,8 +87,8 @@
.el-menu-item.is-active { .el-menu-item.is-active {
background-color: #cdf4ea !important; background-color: #cdf4ea !important;
color: #07c796; color: #f67c40;
border-right: 3px solid #07c796; border-right: 3px solid #f67c40;
} }
.el-menu-item:not(.is-active):hover { .el-menu-item:not(.is-active):hover {
@ -96,7 +96,7 @@
} }
.el-menu-item:hover { .el-menu-item:hover {
background-color: #e6f9f5 !important; background-color: #e6f9f5 !important;
color: #07c796 !important; color: #f67c40 !important;
} }
/deep/.el-breadcrumb__inner { /deep/.el-breadcrumb__inner {

Binary file not shown.

Before

Width:  |  Height:  |  Size: 61 KiB

After

Width:  |  Height:  |  Size: 203 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 73 KiB

After

Width:  |  Height:  |  Size: 386 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 104 KiB

View File

@ -15,10 +15,10 @@ const router = createRouter({
{ path: 'password', meta: { name: '修改密码' }, component: () => import('@/views/manager/Password.vue'), }, { path: 'password', meta: { name: '修改密码' }, component: () => import('@/views/manager/Password.vue'), },
{ path: 'teacher', meta: { name: '教师信息' }, component: () => import('@/views/manager/Teacher.vue'), }, { path: 'teacher', meta: { name: '教师信息' }, component: () => import('@/views/manager/Teacher.vue'), },
{ path: 'student', meta: { name: '学生信息' }, component: () => import('@/views/manager/Student.vue'), }, { path: 'student', meta: { name: '学生信息' }, component: () => import('@/views/manager/Student.vue'), },
{ path: 'examPlan', meta: { name: '考试安排' }, component: () => import('@/views/manager/ExamPlan.vue'), }, { path: 'examPlan', meta: { name: '实验安排' }, component: () => import('@/views/manager/ExamPlan.vue'), },
{ path: 'questionType', meta: { name: '题型信息' }, component: () => import('@/views/manager/QuestionType.vue'), }, { path: 'questionType', meta: { name: '题型信息' }, component: () => import('@/views/manager/QuestionType.vue'), },
{ path: 'course', meta: { name: '课程信息' }, component: () => import('@/views/manager/Course.vue'), }, { path: 'course', meta: { name: '课程信息' }, component: () => import('@/views/manager/Course.vue'), },
{ path: 'question', meta: { name: '题库信息' }, component: () => import('@/views/manager/Question.vue'), }, { path: 'question', meta: { name: '实验信息' }, component: () => import('@/views/manager/Question.vue'), },
{ path: 'share', meta: { name: '交流分享' }, component: () => import('@/views/manager/Share.vue'), }, { path: 'share', meta: { name: '交流分享' }, component: () => import('@/views/manager/Share.vue'), },
{ path: 'testPaper', meta: { name: '交流分享' }, component: () => import('@/views/manager/TestPaper.vue'), }, { path: 'testPaper', meta: { name: '交流分享' }, component: () => import('@/views/manager/TestPaper.vue'), },
{ path: 'score', meta: { name: '交流分享' }, component: () => import('@/views/manager/Score.vue'), }, { path: 'score', meta: { name: '交流分享' }, component: () => import('@/views/manager/Score.vue'), },

View File

@ -4,12 +4,12 @@
<div class="front-header"> <div class="front-header">
<div class="front-header-left"> <div class="front-header-left">
<img src="@/assets/imgs/logo.png" alt=""> <img src="@/assets/imgs/logo.png" alt="">
<div class="title">在线考试系统</div> <div class="title">在线实验系统</div>
</div> </div>
<div class="front-header-center"> <div class="front-header-center">
<el-menu :default-active="router.currentRoute.value.path" router mode="horizontal"> <el-menu :default-active="router.currentRoute.value.path" router mode="horizontal">
<el-menu-item index="/front/home">首页</el-menu-item> <el-menu-item index="/front/home">首页</el-menu-item>
<el-menu-item index="/front/exam">在线考试</el-menu-item> <el-menu-item index="/front/exam">在线实验</el-menu-item>
<el-menu-item index="/front/forum">交流论坛</el-menu-item> <el-menu-item index="/front/forum">交流论坛</el-menu-item>
<el-menu-item index="/front/score">我的成绩</el-menu-item> <el-menu-item index="/front/score">我的成绩</el-menu-item>
<el-menu-item index="/front/myShare">我的分享</el-menu-item> <el-menu-item index="/front/myShare">我的分享</el-menu-item>
@ -83,4 +83,4 @@
<style scoped> <style scoped>
@import "@/assets/css/front.css"; @import "@/assets/css/front.css";
</style> </style>

View File

@ -2,7 +2,7 @@
<div class="login-container"> <div class="login-container">
<div style="width: 45%"></div> <div style="width: 45%"></div>
<div class="login-box"> <div class="login-box">
<div style="font-weight: bold; font-size: 24px; text-align: center; margin-bottom: 30px; color: #1450aa">欢迎登录在线考试系统</div> <div style="font-weight: bold; font-size: 24px; text-align: center; margin-bottom: 30px; color: #1450aa">欢迎登录在线实验系统</div>
<el-form ref="formRef" :model="data.form" :rules="data.rules"> <el-form ref="formRef" :model="data.form" :rules="data.rules">
<el-form-item prop="username"> <el-form-item prop="username">
<el-input :prefix-icon="User" size="large" v-model="data.form.username" placeholder="请输入账号"></el-input> <el-input :prefix-icon="User" size="large" v-model="data.form.username" placeholder="请输入账号"></el-input>
@ -34,8 +34,6 @@ import { reactive, ref } from "vue";
import { User, Lock } from "@element-plus/icons-vue"; import { User, Lock } from "@element-plus/icons-vue";
import request from "@/utils/request.js"; import request from "@/utils/request.js";
import {ElMessage} from "element-plus"; import {ElMessage} from "element-plus";
import router from "@/router/index.js";
const data = reactive({ const data = reactive({
form: {}, form: {},
dialogVisible: true, dialogVisible: true,

View File

@ -3,7 +3,7 @@
<div class="manager-header"> <div class="manager-header">
<div class="manager-header-left"> <div class="manager-header-left">
<img src="@/assets/imgs/logo.png" alt=""> <img src="@/assets/imgs/logo.png" alt="">
<div class="title">在线考试系统管理后台</div> <div class="title">在线实验系统管理后台</div>
</div> </div>
<div class="manager-header-center"> <div class="manager-header-center">
<el-breadcrumb separator="/"> <el-breadcrumb separator="/">
@ -44,10 +44,10 @@
<span>信息管理</span> <span>信息管理</span>
</template> </template>
<el-menu-item v-if="data.user.role === 'ADMIN'" index="/manager/notice">系统公告</el-menu-item> <el-menu-item v-if="data.user.role === 'ADMIN'" index="/manager/notice">系统公告</el-menu-item>
<el-menu-item v-if="data.user.role === 'ADMIN'" index="/manager/examPlan">考试安排</el-menu-item> <el-menu-item v-if="data.user.role === 'ADMIN'" index="/manager/examPlan">实验安排</el-menu-item>
<el-menu-item v-if="data.user.role === 'ADMIN'" index="/manager/questionType">题型信息</el-menu-item> <el-menu-item v-if="data.user.role === 'ADMIN'" index="/manager/questionType">题型信息</el-menu-item>
<el-menu-item index="/manager/course">课程信息</el-menu-item> <el-menu-item index="/manager/course">课程信息</el-menu-item>
<el-menu-item index="/manager/question">题库信息</el-menu-item> <el-menu-item index="/manager/question">实验信息</el-menu-item>
<el-menu-item index="/manager/testPaper">试卷信息</el-menu-item> <el-menu-item index="/manager/testPaper">试卷信息</el-menu-item>
<el-menu-item index="/manager/score"> <el-menu-item index="/manager/score">
{{ data.user.role === 'ADMIN' ? '成绩管理' : '阅卷打分'}} {{ data.user.role === 'ADMIN' ? '成绩管理' : '阅卷打分'}}
@ -101,4 +101,4 @@ if (!data.user.id) {
<style scoped> <style scoped>
@import "@/assets/css/manager.css"; @import "@/assets/css/manager.css";
</style> </style>

View File

@ -65,11 +65,11 @@ const reset = () => {
} }
const navTo = (item) => { const navTo = (item) => {
if (item.status === '未开始') { if (item.status === '未开始') {
ElMessage.warning('该考试还未开放') ElMessage.warning('该实验还未开放')
return return
} }
if (item.status === '已结束') { if (item.status === '已结束') {
ElMessage.warning('该考试已结束') ElMessage.warning('该实验已结束')
return; return;
} }
request.get('/testPaper/check/' + item.id).then(res => { request.get('/testPaper/check/' + item.id).then(res => {
@ -88,4 +88,4 @@ load()
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
} }
</style> </style>

View File

@ -7,7 +7,7 @@
</el-carousel> </el-carousel>
<div style="width: 80%; margin: 20px auto"> <div style="width: 80%; margin: 20px auto">
<div style="font-size: 18px; display: flex"> <div style="font-size: 18px; display: flex">
<div style="flex: 1">正在进行中的考试</div> <div style="flex: 1">正在进行中的实验</div>
<div style="width: 100px; text-align: right; color: #666666; font-size: 15px; cursor: pointer" @click="navTo('/front/exam')">查看更多</div> <div style="width: 100px; text-align: right; color: #666666; font-size: 15px; cursor: pointer" @click="navTo('/front/exam')">查看更多</div>
</div> </div>
<div style="margin-top: 15px"> <div style="margin-top: 15px">
@ -50,7 +50,7 @@
</el-row> </el-row>
</div> </div>
<div style="width: 300px; margin-left: 30px"> <div style="width: 300px; margin-left: 30px">
<div style="font-size: 18px; margin-bottom: 15px">考试安排</div> <div style="font-size: 18px; margin-bottom: 15px">实验安排</div>
<div class="card"> <div class="card">
<div @click="viewContent(item)" style="line-height: 43px; padding: 0 10px; cursor: pointer" v-for="item in data.examPlanData">{{ item.title }}</div> <div @click="viewContent(item)" style="line-height: 43px; padding: 0 10px; cursor: pointer" v-for="item in data.examPlanData">{{ item.title }}</div>
</div> </div>
@ -69,12 +69,11 @@
import {reactive} from "vue"; import {reactive} from "vue";
import carousel_1 from "@/assets/imgs/carousel-1.jpg"; import carousel_1 from "@/assets/imgs/carousel-1.jpg";
import carousel_2 from "@/assets/imgs/carousel-2.jpg"; import carousel_2 from "@/assets/imgs/carousel-2.jpg";
import carousel_3 from "@/assets/imgs/carousel-3.jpg";
import request from "@/utils/request.js"; import request from "@/utils/request.js";
import {ElMessage} from "element-plus"; import {ElMessage} from "element-plus";
const data = reactive({ const data = reactive({
carouselData: [carousel_1, carousel_2, carousel_3], carouselData: [carousel_1, carousel_2],
examData: [], examData: [],
articleData: [], articleData: [],
examPlanData: [], examPlanData: [],
@ -122,11 +121,11 @@ const navTo = (url) => {
} }
const navToTestPaper = (item) => { const navToTestPaper = (item) => {
if (item.status === '未开始') { if (item.status === '未开始') {
ElMessage.warning('该考试还未开放') ElMessage.warning('该实验还未开放')
return return
} }
if (item.status === '已结束') { if (item.status === '已结束') {
ElMessage.warning('该考试已结束') ElMessage.warning('该实验已结束')
return; return;
} }
request.get('/testPaper/check/' + item.id).then(res => { request.get('/testPaper/check/' + item.id).then(res => {
@ -147,4 +146,4 @@ loadExamPlan()
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
} }
</style> </style>

View File

@ -1,6 +1,6 @@
<template> <template>
<div style="width: 60%; margin: 30px auto"> <div style="width: 60%; margin: 30px auto">
<div style="font-weight: bold; font-size: 17px">我的考试{{ data.tableData.length }}</div> <div style="font-weight: bold; font-size: 17px">我的实验{{ data.tableData.length }}</div>
<div style="margin: 20px 0"> <div style="margin: 20px 0">
<el-table stripe :data="data.tableData"> <el-table stripe :data="data.tableData">
<el-table-column prop="name" label="试卷名称" show-overflow-tooltip/> <el-table-column prop="name" label="试卷名称" show-overflow-tooltip/>
@ -57,4 +57,4 @@ const navTo = (url) => {
location.href = url location.href = url
} }
load() load()
</script> </script>

View File

@ -4,10 +4,10 @@
<div style="margin-top: 15px; color: #666666; text-align: center"> <div style="margin-top: 15px; color: #666666; text-align: center">
<span>课程名称{{ data.testPaperData.courseName }}</span> <span>课程名称{{ data.testPaperData.courseName }}</span>
<span style="margin: 0 30px">授课教师{{ data.testPaperData.teacherName }}</span> <span style="margin: 0 30px">授课教师{{ data.testPaperData.teacherName }}</span>
<span>考试时间{{ data.testPaperData.time }} 分钟</span> <span>实验时间{{ data.testPaperData.time }} 分钟</span>
</div> </div>
<div style="margin-top: 10px; text-align: center; color: red"> <div style="margin-top: 10px; text-align: center; color: red">
考试倒计时{{ data.hour }} {{ data.minutes }} {{ data.seconds }} 实验倒计时{{ data.hour }} {{ data.minutes }} {{ data.seconds }}
</div> </div>
<div style="margin-top: 50px"> <div style="margin-top: 50px">
<div v-for="item in data.testPaperData.questions" style="margin-bottom: 20px"> <div v-for="item in data.testPaperData.questions" style="margin-bottom: 20px">
@ -120,4 +120,4 @@ loadTestPaper()
.el-checkbox { .el-checkbox {
display: block; display: block;
} }
</style> </style>

View File

@ -28,7 +28,7 @@
<el-pagination @current-change="load" background layout="prev, pager, next" :page-size="data.pageSize" v-model:current-page="data.pageNum" :total="data.total" /> <el-pagination @current-change="load" background layout="prev, pager, next" :page-size="data.pageSize" v-model:current-page="data.pageNum" :total="data.total" />
</div> </div>
<el-dialog title="考试安排" v-model="data.formVisible" width="40%" destroy-on-close> <el-dialog title="实验安排" v-model="data.formVisible" width="40%" destroy-on-close>
<el-form ref="form" :model="data.form" label-width="70px" style="padding: 20px"> <el-form ref="form" :model="data.form" label-width="70px" style="padding: 20px">
<el-form-item prop="title" label="标题"> <el-form-item prop="title" label="标题">
<el-input v-model="data.form.title" placeholder="请输入标题"></el-input> <el-input v-model="data.form.title" placeholder="请输入标题"></el-input>
@ -156,4 +156,4 @@ const reset = () => {
} }
load() load()
</script> </script>

View File

@ -15,7 +15,7 @@
</el-timeline> </el-timeline>
</div> </div>
<div class="card" style="flex: 50%; height: 350px; margin-left: 5px"> <div class="card" style="flex: 50%; height: 350px; margin-left: 5px">
<div style="font-weight: bold; font-size: 18px; padding: 10px 0 30px 10px">考试安排</div> <div style="font-weight: bold; font-size: 18px; padding: 10px 0 30px 10px">实验安排</div>
<el-timeline style="max-width: 600px"> <el-timeline style="max-width: 600px">
<el-timeline-item <el-timeline-item
v-for="(item, index) in data.planData" v-for="(item, index) in data.planData"
@ -68,4 +68,4 @@ const loadExamPlan = () => {
} }
loadNotice() loadNotice()
loadExamPlan() loadExamPlan()
</script> </script>

View File

@ -24,12 +24,12 @@
</el-table-column> </el-table-column>
<el-table-column prop="start" label="开始时间" /> <el-table-column prop="start" label="开始时间" />
<el-table-column prop="end" label="结束时间" /> <el-table-column prop="end" label="结束时间" />
<el-table-column prop="time" label="考试时长"> <el-table-column prop="time" label="实验时长">
<template v-slot="scope"> <template v-slot="scope">
{{ scope.row.time }} 分钟 {{ scope.row.time }} 分钟
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="status" label="考试状态"> <el-table-column prop="status" label="实验状态">
<template v-slot="scope"> <template v-slot="scope">
<el-tag v-if="scope.row.status === '进行中'" type="primary">{{ scope.row.status }}</el-tag> <el-tag v-if="scope.row.status === '进行中'" type="primary">{{ scope.row.status }}</el-tag>
<el-tag v-if="scope.row.status === '未开始'" type="warning">{{ scope.row.status }}</el-tag> <el-tag v-if="scope.row.status === '未开始'" type="warning">{{ scope.row.status }}</el-tag>
@ -78,8 +78,8 @@
value-format="YYYY-MM-DD" value-format="YYYY-MM-DD"
/> />
</el-form-item> </el-form-item>
<el-form-item prop="time" label="考试时长"> <el-form-item prop="time" label="实验时长">
<el-input v-model="data.form.time" placeholder="请输入考试时长(分钟)"></el-input> <el-input v-model="data.form.time" placeholder="请输入实验时长(分钟)"></el-input>
</el-form-item> </el-form-item>
<el-form-item prop="type" label="出题方式"> <el-form-item prop="type" label="出题方式">
<el-select v-model="data.form.type" placeholder="请选择出题方式"> <el-select v-model="data.form.type" placeholder="请选择出题方式">
@ -249,4 +249,4 @@ const reset = () => {
load() load()
loadCourse() loadCourse()
</script> </script>