当前位置:   article > 正文

【java毕业设计源码】基于SSM框架的在线智能题库管理系统设计与实现_java题库系统源码git

java题库系统源码git

该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程等学习内容。

目录

一、项目介绍:

二、文档学习资料:

三、模块截图:

四、开发技术与运行环境:

五、代码展示:

六、数据库表截图:

七、配套学习资料​编辑



关键词:计算机毕业设计,源码网站,源码下载,java毕业设计源码,开题报告,毕业设计定制,小程序毕业设计源码,本科毕业设计


一、项目介绍:

背景:
随着互联网的普及和信息化的发展,教育行业也在不断变革和创新。在线教育成为了一种新的教学模式,它能够突破时间和空间的限制,为学生提供更加灵活和便捷的学习方式。而在线题库管理系统作为在线教育的重要组成部分,能够为教师和学生提供高质量的题库资源,帮助他们更好地进行学习和教学。

目的:
本课题旨在设计和实现一个基于SSM框架的在线智能题库管理系统,通过该系统,教师可以方便地创建、编辑和管理题库资源,学生可以根据自己的需求进行题目的筛选和练习,从而提高学习效率和学习成绩。

意义:
1. 提高教学效率:教师可以通过系统快速地创建和编辑题库资源,为学生提供更加丰富和多样化的学习资源,从而提高教学效率。
2. 个性化学习:学生可以根据自己的学习需求进行题目的筛选和练习,实现个性化学习,提高学习效果。
3. 数据分析和评估:系统可以对学生的学习情况进行数据分析和评估,为教师提供学生学习情况的反馈,帮助教师更好地进行教学。
4. 技术推广:通过该系统的设计和实现,可以推广SSM框架在教育领域的应用,为其他教育机构提供参考和借鉴。

二、文档学习资料:

三、模块截图:

四、开发技术与运行环境

技术栈:

1. 前端技术:

   Vue.js:用于构建用户界面的渐进式JavaScript框架。

   Element UI:Vue的UI组件库,用于快速构建界面。

   Axios:基于Promise的HTTP客户端,用于与后端进行通信。

2. 后端技术:

   Spring:用于构建业务逻辑层的Java框架。

   Spring MVC:用于构建Web层的Spring框架。

   MyBatis:一个支持定制化SQL、存储过程以及高级映射的持久层框架。

3. 数据库技术:

   MySQL:常用的关系型数据库管理系统。

4. 构建工具:

   Maven:项目管理和构建自动化工具。

运行环境:

1. 开发环境:

   IDE:如IDEA或eclipse,用于编码和调试。

   本地数据库:如MySQL,用于数据存储和查询。

   本地服务器:如Tomcat7.0,用于部署和运行Web应用。

五、代码展示:

  1. /**
  2. * 考场
  3. * 后端接口
  4. * @author
  5. * @email
  6. */
  7. @RestController
  8. @Controller
  9. @RequestMapping("/kaochang")
  10. public class KaochangController {
  11. private static final Logger logger = LoggerFactory.getLogger(KaochangController.class);
  12. private static final String TABLE_NAME = "kaochang";
  13. @Autowired
  14. private KaochangService kaochangService;
  15. @Autowired
  16. private TokenService tokenService;
  17. @Autowired
  18. private DictionaryService dictionaryService;
  19. //级联表非注册的service
  20. //注册表service
  21. @Autowired
  22. private YonghuService yonghuService;
  23. /**
  24. * 后端列表
  25. */
  26. @RequestMapping("/page")
  27. public R page(@RequestParam Map<String, Object> params, HttpServletRequest request){
  28. logger.debug("page方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));
  29. String role = String.valueOf(request.getSession().getAttribute("role"));
  30. if(false)
  31. return R.error(511,"永不会进入");
  32. else if("学生".equals(role))
  33. params.put("yonghuId",request.getSession().getAttribute("userId"));
  34. CommonUtil.checkMap(params);
  35. PageUtils page = kaochangService.queryPage(params);
  36. //字典表数据转换
  37. List<KaochangView> list =(List<KaochangView>)page.getList();
  38. for(KaochangView c:list){
  39. //修改对应字典表字段
  40. dictionaryService.dictionaryConvert(c, request);
  41. }
  42. return R.ok().put("data", page);
  43. }
  44. /**
  45. * 后端详情
  46. */
  47. @RequestMapping("/info/{id}")
  48. public R info(@PathVariable("id") Long id, HttpServletRequest request){
  49. logger.debug("info方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
  50. KaochangEntity kaochang = kaochangService.selectById(id);
  51. if(kaochang !=null){
  52. //entity转view
  53. KaochangView view = new KaochangView();
  54. BeanUtils.copyProperties( kaochang , view );//把实体数据重构到view中
  55. //修改对应字典表字段
  56. dictionaryService.dictionaryConvert(view, request);
  57. return R.ok().put("data", view);
  58. }else {
  59. return R.error(511,"查不到数据");
  60. }
  61. }
  62. /**
  63. * 后端保存
  64. */
  65. @RequestMapping("/save")
  66. public R save(@RequestBody KaochangEntity kaochang, HttpServletRequest request){
  67. logger.debug("save方法:,,Controller:{},,kaochang:{}",this.getClass().getName(),kaochang.toString());
  68. String role = String.valueOf(request.getSession().getAttribute("role"));
  69. if(false)
  70. return R.error(511,"永远不会进入");
  71. Wrapper<KaochangEntity> queryWrapper = new EntityWrapper<KaochangEntity>()
  72. .eq("kaochang_name", kaochang.getKaochangName())
  73. .eq("kaochang_address", kaochang.getKaochangAddress())
  74. ;
  75. logger.info("sql语句:"+queryWrapper.getSqlSegment());
  76. KaochangEntity kaochangEntity = kaochangService.selectOne(queryWrapper);
  77. if(kaochangEntity==null){
  78. kaochang.setInsertTime(new Date());
  79. kaochang.setCreateTime(new Date());
  80. kaochangService.insert(kaochang);
  81. return R.ok();
  82. }else {
  83. return R.error(511,"表中有相同数据");
  84. }
  85. }
  86. /**
  87. * 后端修改
  88. */
  89. @RequestMapping("/update")
  90. public R update(@RequestBody KaochangEntity kaochang, HttpServletRequest request) throws NoSuchFieldException, ClassNotFoundException, IllegalAccessException, InstantiationException {
  91. logger.debug("update方法:,,Controller:{},,kaochang:{}",this.getClass().getName(),kaochang.toString());
  92. KaochangEntity oldKaochangEntity = kaochangService.selectById(kaochang.getId());//查询原先数据
  93. String role = String.valueOf(request.getSession().getAttribute("role"));
  94. // if(false)
  95. // return R.error(511,"永远不会进入");
  96. //根据字段查询是否有相同数据
  97. Wrapper<KaochangEntity> queryWrapper = new EntityWrapper<KaochangEntity>()
  98. .notIn("id",kaochang.getId())
  99. .andNew()
  100. .eq("kaochang_name", kaochang.getKaochangName())
  101. .eq("kaochang_address", kaochang.getKaochangAddress())
  102. ;
  103. logger.info("sql语句:"+queryWrapper.getSqlSegment());
  104. KaochangEntity kaochangEntity = kaochangService.selectOne(queryWrapper);
  105. if(kaochangEntity==null){
  106. kaochangService.updateById(kaochang);//根据id更新
  107. return R.ok();
  108. }else {
  109. return R.error(511,"表中有相同数据");
  110. }
  111. }
  112. /**
  113. * 删除
  114. */
  115. @RequestMapping("/delete")
  116. public R delete(@RequestBody Integer[] ids, HttpServletRequest request){
  117. logger.debug("delete:,,Controller:{},,ids:{}",this.getClass().getName(),ids.toString());
  118. List<KaochangEntity> oldKaochangList =kaochangService.selectBatchIds(Arrays.asList(ids));//要删除的数据
  119. kaochangService.deleteBatchIds(Arrays.asList(ids));
  120. return R.ok();
  121. }
  122. /**
  123. * 批量上传
  124. */
  125. @RequestMapping("/batchInsert")
  126. public R save( String fileName, HttpServletRequest request){
  127. logger.debug("batchInsert方法:,,Controller:{},,fileName:{}",this.getClass().getName(),fileName);
  128. Integer yonghuId = Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId")));
  129. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  130. try {
  131. List<KaochangEntity> kaochangList = new ArrayList<>();//上传的东西
  132. Map<String, List<String>> seachFields= new HashMap<>();//要查询的字段
  133. Date date = new Date();
  134. int lastIndexOf = fileName.lastIndexOf(".");
  135. if(lastIndexOf == -1){
  136. return R.error(511,"该文件没有后缀");
  137. }else{
  138. String suffix = fileName.substring(lastIndexOf);
  139. if(!".xls".equals(suffix)){
  140. return R.error(511,"只支持后缀为xls的excel文件");
  141. }else{
  142. URL resource = this.getClass().getClassLoader().getResource("../../upload/" + fileName);//获取文件路径
  143. File file = new File(resource.getFile());
  144. if(!file.exists()){
  145. return R.error(511,"找不到上传文件,请联系管理员");
  146. }else{
  147. List<List<String>> dataList = PoiUtil.poiImport(file.getPath());//读取xls文件
  148. dataList.remove(0);//删除第一行,因为第一行是提示
  149. for(List<String> data:dataList){
  150. //循环
  151. KaochangEntity kaochangEntity = new KaochangEntity();
  152. // kaochangEntity.setKaochangUuidNumber(data.get(0)); //考场编号 要改的
  153. // kaochangEntity.setKaochangName(data.get(0)); //考场名称 要改的
  154. // kaochangEntity.setKaochangAddress(data.get(0)); //考场位置 要改的
  155. // kaochangEntity.setKaochangContent("");//详情和图片
  156. // kaochangEntity.setInsertTime(date);//时间
  157. // kaochangEntity.setCreateTime(date);//时间
  158. kaochangList.add(kaochangEntity);
  159. //把要查询是否重复的字段放入map中
  160. //考场编号
  161. if(seachFields.containsKey("kaochangUuidNumber")){
  162. List<String> kaochangUuidNumber = seachFields.get("kaochangUuidNumber");
  163. kaochangUuidNumber.add(data.get(0));//要改的
  164. }else{
  165. List<String> kaochangUuidNumber = new ArrayList<>();
  166. kaochangUuidNumber.add(data.get(0));//要改的
  167. seachFields.put("kaochangUuidNumber",kaochangUuidNumber);
  168. }
  169. }
  170. //查询是否重复
  171. //考场编号
  172. List<KaochangEntity> kaochangEntities_kaochangUuidNumber = kaochangService.selectList(new EntityWrapper<KaochangEntity>().in("kaochang_uuid_number", seachFields.get("kaochangUuidNumber")));
  173. if(kaochangEntities_kaochangUuidNumber.size() >0 ){
  174. ArrayList<String> repeatFields = new ArrayList<>();
  175. for(KaochangEntity s:kaochangEntities_kaochangUuidNumber){
  176. repeatFields.add(s.getKaochangUuidNumber());
  177. }
  178. return R.error(511,"数据库的该表中的 [考场编号] 字段已经存在 存在数据为:"+repeatFields.toString());
  179. }
  180. kaochangService.insertBatch(kaochangList);
  181. return R.ok();
  182. }
  183. }
  184. }
  185. }catch (Exception e){
  186. e.printStackTrace();
  187. return R.error(511,"批量插入数据异常,请联系管理员");
  188. }
  189. }
  190. /**
  191. * 前端列表
  192. */
  193. @IgnoreAuth
  194. @RequestMapping("/list")
  195. public R list(@RequestParam Map<String, Object> params, HttpServletRequest request){
  196. logger.debug("list方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));
  197. CommonUtil.checkMap(params);
  198. PageUtils page = kaochangService.queryPage(params);
  199. //字典表数据转换
  200. List<KaochangView> list =(List<KaochangView>)page.getList();
  201. for(KaochangView c:list)
  202. dictionaryService.dictionaryConvert(c, request); //修改对应字典表字段
  203. return R.ok().put("data", page);
  204. }
  205. /**
  206. * 前端详情
  207. */
  208. @RequestMapping("/detail/{id}")
  209. public R detail(@PathVariable("id") Long id, HttpServletRequest request){
  210. logger.debug("detail方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
  211. KaochangEntity kaochang = kaochangService.selectById(id);
  212. if(kaochang !=null){
  213. //entity转view
  214. KaochangView view = new KaochangView();
  215. BeanUtils.copyProperties( kaochang , view );//把实体数据重构到view中
  216. //修改对应字典表字段
  217. dictionaryService.dictionaryConvert(view, request);
  218. return R.ok().put("data", view);
  219. }else {
  220. return R.error(511,"查不到数据");
  221. }
  222. }
  223. /**
  224. * 前端保存
  225. */
  226. @RequestMapping("/add")
  227. public R add(@RequestBody KaochangEntity kaochang, HttpServletRequest request){
  228. logger.debug("add方法:,,Controller:{},,kaochang:{}",this.getClass().getName(),kaochang.toString());
  229. Wrapper<KaochangEntity> queryWrapper = new EntityWrapper<KaochangEntity>()
  230. .eq("kaochang_uuid_number", kaochang.getKaochangUuidNumber())
  231. .eq("kaochang_name", kaochang.getKaochangName())
  232. .eq("kaochang_address", kaochang.getKaochangAddress())
  233. ;
  234. logger.info("sql语句:"+queryWrapper.getSqlSegment());
  235. KaochangEntity kaochangEntity = kaochangService.selectOne(queryWrapper);
  236. if(kaochangEntity==null){
  237. kaochang.setInsertTime(new Date());
  238. kaochang.setCreateTime(new Date());
  239. kaochangService.insert(kaochang);
  240. return R.ok();
  241. }else {
  242. return R.error(511,"表中有相同数据");
  243. }
  244. }
  245. }

六、数据库表截图:

七、配套学习资料

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/495462
推荐阅读
相关标签
  

闽ICP备14008679号