• 基于springboot的智慧学习(在线学习考试)系统


    博主主页猫头鹰源码

    博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万+、专注Java技术领域和毕业设计项目实战

    主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询

    文末联系获取

    项目介绍: 

    该系统创作于2022年5月,包含详细数据库设计。基于springboot技术,数据层为MyBatis,mysql数据库,具有完整的业务逻辑,适合选题:智慧学习、在线学习、在线考试、学习系统、考试系统等。

    项目功能:

    数据库表结构文档:

     

    系统包含技术:

    后端:springBoot、mybatis
    前端:bootstrap、js、css等,html页面
    开发工具:idea
    数据库:mysql 5.7
    JDK版本:jdk1.8

    部分截图说明:

    下面是登录页面

    登录可以选择角色,我们先看管理员的功能

     管理员可以对学生进行管理

      管理员也可以对教师进行管理

      管理员查看视频资源

      管理员对课程进行管理

    教师对试题管理

    教师对试卷进行管理

     教师查看考试结果

     学生可以进行考试

    学生也可以查看学习视频

    学生修改个人信息

     部分代码:

     拦截器配置

    1. @Override
    2. public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    3. HttpSession session = request.getSession();
    4. if(session.getAttribute("ad") != null){
    5. return true;
    6. }
    7. // 不符合条件的给出提示信息,并转发到主页面
    8. request.setAttribute("msg", "您还没有登录,请先登录!");
    9. request.getRequestDispatcher("/gologin.jsp").forward(request, response);
    10. //返回true通过,返回false拦截
    11. return false;
    12. }

    注册拦截器

    1. @Override
    2. public void addInterceptors(InterceptorRegistry registry)
    3. {
    4. //注册自己的拦截器并设置拦截的请求路径
    5. registry.addInterceptor(new AuthInterceptor()).addPathPatterns("/**")//拦截的访问路径,拦截所有
    6. .excludePathPatterns("/static/*","/**/**/*.css","/**/**/*.js","/**/**/**/*.css","/**/**/**/*.js","/**/**/**/*.jpg")
    7. .excludePathPatterns("/gologin","/login","/loginOut","/register","/registerSub","/upload/*");//排除的请求路径,排除静态资源路径
    8. super.addInterceptors(registry);
    9. }

    上传文件地址映射

    1. @Value("${uploadDir}")
    2. private String uploadDir;
    3. @Override
    4. public void addResourceHandlers(ResourceHandlerRegistry registry) {
    5. registry.addResourceHandler("/upload/**").addResourceLocations("file:" + uploadDir);
    6. super.addResourceHandlers(registry);
    7. }

    文件上传

    1. /**
    2. * 文件上传
    3. */
    4. @RequestMapping(value = "/uploadFile")
    5. @ResponseBody
    6. public JSONObject uploadFile(HttpServletRequest request) throws IOException {
    7. JSONObject jsonObject = new JSONObject();
    8. try {
    9. MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
    10. //使用UUID给图片重命名,并去掉四个“-”
    11. // 获取上传的文件
    12. MultipartFile multiFile = multipartRequest.getFile("file");
    13. SimpleDateFormat sf = new SimpleDateFormat("yyyyMMddHHmmss");
    14. String name = sf.format(new Date());
    15. //获取文件的扩展名
    16. String ext = FilenameUtils.getExtension(multiFile.getOriginalFilename());
    17. //以绝对路径保存重名命后的图片
    18. multiFile.transferTo(new File(uploadDir+"/"+name + "." + ext));
    19. jsonObject.put("code",name + "." + ext);
    20. return jsonObject;
    21. } catch (Exception e) {
    22. e.printStackTrace();
    23. jsonObject.put("code", 0);
    24. return jsonObject;
    25. }
    26. }

    课程对应操作

    1. /**
    2. * 分页查询
    3. * pageIndex 当前页码
    4. * pageSize 显示条数
    5. */
    6. @RequestMapping(value = "/findCourse")
    7. public String findCourse(Integer pageIndex, Integer pageSize,String cname, Model model,HttpServletRequest request) {
    8. HttpSession session = request.getSession();
    9. if(session.getAttribute("ad") == null){
    10. session.setAttribute("msg", "对不起,请登录!");
    11. return "login";
    12. }
    13. Map mp = new HashMap();
    14. mp.put("cname",cname);
    15. String type = (String)session.getAttribute("type");
    16. if(type.equals("02")){
    17. Teacher teacher = (Teacher)session.getAttribute("ad");
    18. mp.put("tid",teacher.getId());
    19. }
    20. PageInfo<Course> pageList = courseService.findPageInfo(pageIndex,pageSize,mp);
    21. model.addAttribute("pageList",pageList);
    22. if(type.equals("02")){
    23. Map mps = new HashMap();
    24. Teacher teacher = (Teacher)session.getAttribute("ad");
    25. mps.put("id",teacher.getId());
    26. List<Teacher> teacherList = teacherService.queryFilter(mps);
    27. model.addAttribute("teacherList",teacherList);
    28. }else{
    29. List<Teacher> teacherList = teacherService.getAll();
    30. model.addAttribute("teacherList",teacherList);
    31. }
    32. return "CourseList";
    33. }
    34. /**
    35. * 添加
    36. */
    37. @RequestMapping(value = "/addCourse" ,method = RequestMethod.POST)
    38. @ResponseBody
    39. public String addCourse( @RequestBody Course course) {
    40. try{
    41. SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    42. course.setCreateTime(sf.format(new Date()));
    43. courseService.addCourse(course);
    44. return "200";
    45. }catch (Exception e){
    46. e.printStackTrace();
    47. return "201";
    48. }
    49. }
    50. /**
    51. * 删除
    52. */
    53. @RequestMapping( "/deleteCourse")
    54. @ResponseBody
    55. public String deleteCourse(String id) {
    56. int d = courseService.deleteCourse(id);
    57. return "CourseList";
    58. }
    59. /**
    60. * 修改
    61. */
    62. @RequestMapping( "/updateCourse")
    63. @ResponseBody
    64. public String updateCourse(@RequestBody Course course) {
    65. try{
    66. courseService.updateCourse(course);
    67. return "200";
    68. }catch (Exception e){
    69. e.printStackTrace();
    70. return "201";
    71. }
    72. }

    以上就是部分功能展示,从整体上来看,本系统功能是十分完整的,界面设计简洁大方,交互友好,数据库设计也很合理,规模适中,代码工整,清晰,适合学习使用。

    好了,今天就到这儿吧,小伙伴们点赞、收藏、评论,一键三连走起呀,下期见~~

  • 相关阅读:
    猿创征文|.NET最佳实践开发工具推荐
    裁剪图片vue-cropper实例 基础功能 预览 获取裁剪后图片数据
    【重识云原生】第六章容器6.1.2节——容器安装部署
    【ldt_struct】0ctf2021-kernote
    如何设计大电流九线导电滑环
    MySQL触发器使用指南大全
    新巨丰深交所上市:市值82亿 伊利是股东,贡献70%收入
    自动化部署的艺术:Conda包依赖管理的终极指南
    课程1-带有一个隐藏层的平面数据分类
    Linux内存管理(二十四):slub 分配器之kmem_cache_free
  • 原文地址:https://blog.csdn.net/mtyedu/article/details/126630784