项目介绍:
该系统创作于2022年5月,包含详细数据库设计。基于springboot技术,数据层为MyBatis,mysql数据库,具有完整的业务逻辑,适合选题:智慧学习、在线学习、在线考试、学习系统、考试系统等。
项目功能:
数据库表结构文档:
系统包含技术:
后端:springBoot、mybatis
前端:bootstrap、js、css等,html页面
开发工具:idea
数据库:mysql 5.7
JDK版本:jdk1.8
部分截图说明:
下面是登录页面
登录可以选择角色,我们先看管理员的功能
管理员可以对学生进行管理
管理员也可以对教师进行管理
管理员查看视频资源
管理员对课程进行管理
教师对试题管理
教师对试卷进行管理
教师查看考试结果
学生可以进行考试
学生也可以查看学习视频
学生修改个人信息
部分代码:
拦截器配置
@Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { HttpSession session = request.getSession(); if(session.getAttribute("ad") != null){ return true; } // 不符合条件的给出提示信息,并转发到主页面 request.setAttribute("msg", "您还没有登录,请先登录!"); request.getRequestDispatcher("/gologin.jsp").forward(request, response); //返回true通过,返回false拦截 return false; }
注册拦截器
@Override public void addInterceptors(InterceptorRegistry registry) { //注册自己的拦截器并设置拦截的请求路径 registry.addInterceptor(new AuthInterceptor()).addPathPatterns("/**")//拦截的访问路径,拦截所有 .excludePathPatterns("/static/*","/**/**/*.css","/**/**/*.js","/**/**/**/*.css","/**/**/**/*.js","/**/**/**/*.jpg") .excludePathPatterns("/gologin","/login","/loginOut","/register","/registerSub","/upload/*");//排除的请求路径,排除静态资源路径 super.addInterceptors(registry); }
上传文件地址映射
@Value("${uploadDir}") private String uploadDir; @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/upload/**").addResourceLocations("file:" + uploadDir); super.addResourceHandlers(registry); }
文件上传
/** * 文件上传 */ @RequestMapping(value = "/uploadFile") @ResponseBody public JSONObject uploadFile(HttpServletRequest request) throws IOException { JSONObject jsonObject = new JSONObject(); try { MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; //使用UUID给图片重命名,并去掉四个“-” // 获取上传的文件 MultipartFile multiFile = multipartRequest.getFile("file"); SimpleDateFormat sf = new SimpleDateFormat("yyyyMMddHHmmss"); String name = sf.format(new Date()); //获取文件的扩展名 String ext = FilenameUtils.getExtension(multiFile.getOriginalFilename()); //以绝对路径保存重名命后的图片 multiFile.transferTo(new File(uploadDir+"/"+name + "." + ext)); jsonObject.put("code",name + "." + ext); return jsonObject; } catch (Exception e) { e.printStackTrace(); jsonObject.put("code", 0); return jsonObject; } }
课程对应操作
/** * 分页查询 * pageIndex 当前页码 * pageSize 显示条数 */ @RequestMapping(value = "/findCourse") public String findCourse(Integer pageIndex, Integer pageSize,String cname, Model model,HttpServletRequest request) { HttpSession session = request.getSession(); if(session.getAttribute("ad") == null){ session.setAttribute("msg", "对不起,请登录!"); return "login"; } Map mp = new HashMap(); mp.put("cname",cname); String type = (String)session.getAttribute("type"); if(type.equals("02")){ Teacher teacher = (Teacher)session.getAttribute("ad"); mp.put("tid",teacher.getId()); } PageInfo<Course> pageList = courseService.findPageInfo(pageIndex,pageSize,mp); model.addAttribute("pageList",pageList); if(type.equals("02")){ Map mps = new HashMap(); Teacher teacher = (Teacher)session.getAttribute("ad"); mps.put("id",teacher.getId()); List<Teacher> teacherList = teacherService.queryFilter(mps); model.addAttribute("teacherList",teacherList); }else{ List<Teacher> teacherList = teacherService.getAll(); model.addAttribute("teacherList",teacherList); } return "CourseList"; } /** * 添加 */ @RequestMapping(value = "/addCourse" ,method = RequestMethod.POST) @ResponseBody public String addCourse( @RequestBody Course course) { try{ SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); course.setCreateTime(sf.format(new Date())); courseService.addCourse(course); return "200"; }catch (Exception e){ e.printStackTrace(); return "201"; } } /** * 删除 */ @RequestMapping( "/deleteCourse") @ResponseBody public String deleteCourse(String id) { int d = courseService.deleteCourse(id); return "CourseList"; } /** * 修改 */ @RequestMapping( "/updateCourse") @ResponseBody public String updateCourse(@RequestBody Course course) { try{ courseService.updateCourse(course); return "200"; }catch (Exception e){ e.printStackTrace(); return "201"; } }
以上就是部分功能展示,从整体上来看,本系统功能是十分完整的,界面设计简洁大方,交互友好,数据库设计也很合理,规模适中,代码工整,清晰,适合学习使用。
好了,今天就到这儿吧,小伙伴们点赞、收藏、评论,一键三连走起呀,下期见~~