基于Spring Boot的简易教务管理系统

基于Spring Boot的简易教务管理系统,第1张

基于Spring Boot的简易教务管理系统

文章目录
  • 数据库设计
  • 页面的设计
    • 登录界面
    • 提取公共部分
    • 个人信息的修改
    • 课表查询
    • 成绩查询

数据库设计

因为教务系统主要分成了学生端,教师端,管理员端,因此需要创建三个表student,teacher,admin,表示三种角色。

  • student表:

  • teacher表:

  • admin表:

    但是需要获取这个学生的课表信息,因此还需要创建一个course表,表示课程信息:

  • course表:

    此外,为了实现选课功能,我们需要保证那些课是需要选择的,所以,新建一个selectCourse表,用于存放开放选课的课程:

  • selectCourse表


在管理员添加、修改学生信息的时候,如果我们需要修改学生的学院的,我们需要给出一个下拉框,所以我们需要创建academy表,表示不同的学院信息,同理我们需要创建major表,表示不同的专业信息。

  • major表:

  • academy表:

    所以总的表有:

页面的设计 登录界面

为了使thymeleaf发生渲染作用,那么我们需要在对应的类上面使用的是@Controller注解,并且对应的方法上面不可以使用@ResponseBody注解,而不是@RestController注解(因为@RestController = @Controller + @ResponseBody)。一旦使用了@RestController或者@Controller + @ResponseBody注解,那么没有办法实现thymeleaf的渲染作用。

同时,如何来到登录界面之后,我们提交应该怎样获取登录用户的对应信息呢?此时我们将根据@RequestParam()注解,从而获取对应的信息,其中括号中的参数是我们想要获取的信息,这个参数需要和我们在template中的index中的名字需要一致。

@PostMapping("/user/login")
    public String login(@RequestParam("username")String username,
                        @RequestParam("password")String password,
                        @RequestParam("identity")String identity,
                        Model model, HttpSession session) {
        this.identity = identity;
        //需要获取这个登录的用户名以及密码以及所勾选的角色(利用@RequestParam()就可以获得对应的参属信息
        //登录成功之后,返回到主页面
        //定义一个sql语句,然后返回一个对象
        if(StringUtils.isEmpty(username)){
            model.addAttribute("name","用户名不可以为空");
            return "index";
        }
        if(StringUtils.isEmpty(password)){
            model.addAttribute("password","登录密码不可以为空");
            return "index";
        }

        String sql = "select password from " + identity + " where name = ?";
        try{
            String pass = jdbcTemplate.queryForObject(sql, String.class, new Object[]{username});
            if(!password.equals(pass)){
                model.addAttribute("password","用户密码错误");
                return "index";
            }else{
                //session对象设置loginUser(自定义的),并且它的值为username
                session.setAttribute("loginUser",username);
                return "redirect:/dashboard";
            }
        }catch (EmptyResultDataAccessException e){
            //学生为null,说明查无此人
            model.addAttribute("msg","查无此人,请重新输入");
            return "index";
        }

    }

但是看到上面的代码,为什么添加一个try-catch异常呢?代码并不会发生异常啊,然而,当我们输入的是表中不存在的数据的时候,本来需要返回查无此人的信息,但是如果没有try-catch,而仅仅靠if判断pass是否为空,从而得知当前的用户是否存在于数据库中是不可以,他会发生报错:`Incorrect result size: expected 1, actual 0`,这就是因为jdbcTemplate调用queryForObject的时候发生了报错。所以为了发生这样的错误,需要使用try-catch,一旦检测到适应空的数据,就会执行catch语句。

但是有一个bug没有解决,就是如果没有点击单选按钮的时候,就会发生了报错,具体原因还没有知道,如果有大佬知道的话,请指教哈!!!

提取公共部分

因为我们设计一个学生端的时候,有很多个选项,这时候我们需要提取一些公共部分,例如头部导航栏和侧边栏,因此我们定义了commons类,用来存放公共部分,然后利用thymelefat中的fragment来定义公共部分的名字,然后再对应的页面中插入这个公共部分即可。

这时候我们利用th:replace或者th:insert在对应的页面中插入公共部分内容:

					
										


					

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5638421.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存