# 82期-2组-考试培训项目后端 **Repository Path**: markwinse/Java82_2Exam_Backend ## Basic Information - **Project Name**: 82期-2组-考试培训项目后端 - **Description**: 这是Java82期2组 在线考试系统项目的前端 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: develop - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2021-10-25 - **Last Updated**: 2024-09-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 82期-2组-考试培训项目后端 #### 介绍 这是Java82期2组 在线考试系统项目的前端 #### 软件架构 软件架构说明 #### 开发日志 2021/10/25 `今日任务安排` 1. 完成项目结构图的梳理 2. 确定核心业务,划分各个任务优先级,确定第一阶段开发目标 3. 跑通具体核心业务功能的逻辑 4. 梳理所需数据库以及关联 `今日准备做的内容` 1. 初步完成项目结构图。(1) 崔、杨完成考试系统的结构梳理。(2) 朱、李完成教师系统的结构梳理。(3) 高完成管理员系统、学员系统的结构梳理。(4) 讨论完成整合,划分各个任务优先级,确定初期项目结构规划图。 2. 完成业务逻辑流程图,并整理出所需数据库。(1) 李完成考试系统的逻辑流程图。(2) 杨、崔完成教师系统的逻辑流程图。(3) 高完成用户系统的逻辑流程图。(4) 朱完成学员系统的逻辑流程图。(5) 讨论完成整合,梳理核心业务所需要的基础数据库及关联。 `项目问题总结`:1. 针对题库表的构建产生两种思路。一种是以选项作为字段,在判断正确答案的时候比对数据内容char,另一种是将选项另起一行作为数据,通过pid与自身所属的题目相连。前者的优势在于便于查询,新增只需要执行一条语句,但缺点在于如果用户希望增加新的选项,通过java新增字段会破坏数据库,后者的优势在于可以增加新的选项,选项通过pid绑定题目,但缺点在于数据库很冗余,同时新增数据的视乎需要多条语句,效率降低。2. 如何记录学生的答卷?3. 如何防作弊? `项目问题解决`:1. 选用将选项作为字段的思路,保证数据库内容的统一性,同时方便新增和查询,暂时放弃新增选项这种使用频率较低的功能,数据库简单便于开发。2. 采取mysql库存储题库以及生成的试卷,在考试前将试卷信息提取到Redis数据库中,考试中以Redis展示页面,学生作答之后答卷以键值对存入Redis,考试完毕后从Redis写入mysql存储。3. 监听切屏,同时禁用右键和ctrl+c。 2021/10/26 `今日任务安排` 1. 完成数据库的设计 2. 完成数据库的建立 3. 梳理小组开发规范,做开发前期准备 4. 评估开发难度和时长 `今日准备做的内容` 1. 完成数据库字段梳理。(1) 崔、杨完成题库表、单选题、多选题、判断题、填空题、解答题的字段整理。(2) 朱完成试卷表、教师学生信息表的字段梳理。(3) 李完成答卷表、考试表的字段梳理。(4) 高完成用户表、角色表、权限表的字段梳理。(4) 讨论完成整合,使用powerdesigner完成数据库设计。 2. 高完成数据库建立。 3. 梳理小组开发规范。 (1) 统一数据库字段命名与实体类属性命名 (2) 统一编码规范。(3) 规定Git操作规范,确定上传顺序及操作。 4.评估开发难度及时长。 (1) 根据假想业务在数据库内进行数据查询,确保核心业务所需数据都可以查询到。 (2) 针对核心业务所需的技术进行专项复习。 `项目问题总结`:1. 原定用户表包含老师和学生详细信息,但由于老师学生的详细信息属性有所不同,所以还可以再分。2. 原定题目表集成所有题型,使用题型表外键来区分,但不同题型判断正确的业务有所不同,所以还可以再分。 `项目问题解决`:1. 用户表只包含账户信息和角色,老师学生详细信息表分为新的两张表,通过外键与用户表创建联系。2. 将题目表和题型表合并,分为不同题型对应的数据库,确保不可再分。 2021/10/27 `今日任务安排` 1. 练习并掌握Git的使用 2. 确定编程规范 3. 分配模块完成基础CRUD `今日准备做的内容` 1. 练习Git的使用。通过反复pull、push项目来练习Git的使用,同时理解Git机制。 2. 确定编程规范。对类名、属性名、方法名进行规范。 3. 分配模块完成基础CRUD。完成各个表格实体类创建,完成各个表格基础CUD,以及全部查询和单例查询。 (1) 高完成BaseController、BaseService、角色信息表、用户信息表、权限表、菜单信息表 (2) 杨、崔完成题库表、题目表、题库类型表。(3) 李完成老师表、学生表、班级表。(4) 朱完成考试表、试卷表、试卷类型表、答卷表 `昨日完成情况` 1.swagger昨日引入了2.9,今天升级成了3.0。 2.已完成部分表格。 `项目问题总结`:1. 上传Git设置忽略未能同步,出现了文件冲突。2.题库数据库不符合业务要求。 `项目问题解决`:1. 通过反复调试解决。2.对题库表的字段进行了更改,新增了题库类型表。 2021/10/28 `今日任务安排` 1. 练习并掌握Git的使用 2. 确定编程规范 3. 分配模块完成基础CRUD `今日准备做的内容` 1. 对实体类和Controller接口的swagger注解进行完善 2. 继续完成后端CRUD。 `昨日完成情况` 1.继续完成部分后端基础CRUD。 2.其他任务均已完成。 `项目进度` 项目目前核心业务有四大主要模块,题库模块今日完成了业务查询实现的梳理,教师学生模块完成了基础的CRUD,用户模块所有表的基础CRUD,考试模块完成了试卷表的CRUD `项目问题总结`:1. 实体类中外键关联实体类时,在swagger测试无法输入外键属性。 2.swagger缺少输出文档的必要内容,如中文注释等。3.题库表与不同类型题目库如何联表查询? `项目问题解决`:1. 在Entity实体类中加上一下注解@JsonIgnoreProperties(value = {"hibernateLazyInitializer", "handler"}) 2.在实体类和Controller接口上加入了swagger的注解。3.因为各题型的题目库并无直接关联,所以要分别查询5个类型的题目库。 2021/10/29 `今日任务安排` 1. 完成后端所有CRUD `今日准备做的内容` 1. 高完成含中间表的关联CRUD模板书写 2. 完成后端所有表格的CRUD。 `昨日完成情况` 1.杨完成了题库表的联表分页查询、添加、修改、删除、以及关联中间表的删除,崔修改部分错误属性类型、完成了判断题的CRUD,学习了递归查询的SQL语句书写,朱修改部分错误属性类型、完成了考试表、试卷表的CRUD,李完成学生表、班级表的CRUD、重新梳理了spring、springboot注解、梳理了项目过程SQL中一对一,多对一,多表涉及中间表的查询,高完成了User、Power、Menu、Role、Teacher的单表CRUD。 2.在实体类添加了@ApiModel注解、在属性上添加了@ApiModelProperty注解、在Controller上添加了@Api(tags="")注解、在方法上添加了@ApiOpertion注解。 `项目进度` 项目目前核心业务有四大主要模块,四大模块基本CRUD均已完成。 `项目问题总结`:1. 业务层调用运行sql语句来完成单表及其中间表数据修改时,无法将两个事务合成为一个来回滚 2.中间表CUD如何实现? 3.题库与中间表之间的联系可能需要后期优化改进,逻辑线需要再次梳理? `项目问题解决`:1. 在SpringBoot主函数上加入@EnableTransactionManagement注解开启手动事务管理,在实现类方法上加入@Transactional(isolation = Isolation.REPEATABLE_READ,rollbackFor = Exception.class)将方法中所有的SQL语句作为一个事务来控制 2.在单表实体中加入一个关联属性接受其需要加入中间表的关系,使用List来存储,传入后端后,通过foreach来加入中间表。新增时先向单表增加数据,通过useGeneratedKeys="true",keyProperty="id"两个属性可以使单表添加成功后实体类中有新增数据的id,方便中间表的添加。在删除数据时,也要删除中间表所有跟单表被删除数据关联的数据。修改实质上是先将中间表所有与被修改数据的关系删除,在将修改后的结果新增上去。如何从前端拿到修改后的结果呢?参考以前的修改,可能可以使用读取页面的相关值来实现。 3.等待前端基础页面完成,再进行优化。 #### 安装教程 1. xxxx 2. xxxx 3. xxxx #### 使用说明 1. xxxx 2. xxxx 3. xxxx #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request #### 特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目 5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)