- 数据库设计
- 页面的设计
- 登录界面
- 提取公共部分
- 个人信息的修改
- 课表查询
- 成绩查询
因为教务系统主要分成了学生端,教师端,管理员端,因此需要创建三个表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在对应的页面中插入公共部分内容:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)