一、项目介绍
本工程实验项目是基于学生选课系统,给管理员、教师、学生提供登录权限,教师可以给学生评定成绩,学生可以选择课程,并查看成绩。
本文将通过角度分析了设计模式、软件架构和各类视图软件系统的特点,并包含项目所需的接口API、数据库设计,给出系统的详细设计方案。
二、系统架构
本项目采用模型-视图-控制器模式,也称为MVC模式(Model View Controller)。用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。它把软件系统分为三个基本部分:
模型(Model):负责存储系统的中心数据。
视图(View):将信息显示给用户(可以定义多个视图)。
控制器(Controller):处理用户输入的信息。负责从视图读取数据,控制用户输入,并向模型发送数据,是应用程序中处理用户交互的部分。负责管理与用户交互交互控制。
视图和控制器共同构成了用户接口。
整个项目的开发采用WEB开发中十非常重要的SSM框架,也即Spring+SpringMVC+mybatis。前端主要由bootstrap完成,背景用particles.js插件,mysql8.0配置主从复制实现读写分离。
3.接口API
在MVC架构下,项目使用23种设计模式中的中介者模式。中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。中介者模式属于行为型模式。
- 抽象中介者:定义好同事类对象到中介者对象的接口,用于各个同事类之间的通信。一般包括一个或几个抽象的事件方法,并由子类去实现。
- 中介者实现类:从抽象中介者继承而来,实现抽象中介者中定义的事件方法。从一个同事类接收消息,然后通过消息影响其他同时类。
- 同事类:如果一个对象会影响其他的对象,同时也会被其他对象影响,那么这两个对象称为同事类。在类图中,同事类只有一个,这其实是现实的省略,在实际应用中,同事类一般由多个组成,他们之间相互影响,相互依赖。同事类越多,关系越复杂。并且,同事类也可以表现为继承了同一个抽象类的一组实现组成。在中介者模式中,同事类之间必须通过中介者才能进行消息传递。
4.系统视图
4.1分解视图
分解是构建软件架构模型的关键步骤,分解视图也是描述软件架构模型的关键视图,一般分解视图呈现为较为明晰的分解结构(breakdown structure)特点。分解视图用软件模块勾划出系统结构,往往会通过不同抽象层级的软件模块形成层次化的结构。将选课系统划分为三个子系统,即登录子系统、选课子系统和信息子系统,对于这些子系统,可继续划分使用课程类、学生类、管理员类、教师类。
4.2执行视图
执行视图展示了系统运行时的时序结构特点,比如流程图、时序图等。执行视图中的每一个执行实体,一般称为组件(Component),都是不同于其他组件的执行实体。如果有相同或相似的执行实体那么就把它们合并成一个。可以最终分解到软件的基本元素和软件的基本结构,可以对系统整体的业务逻辑有较为直观的体现。
4.3泛化视图
泛化视图展现了软件模块之间的一般化或具体化的关系,下图展示了本项目个类的继承关系,学生、教师以及管理员都继承与用户这个接口。
4.3工作分配视图
工作分配视图将系统分解成可独立完成的工作任务,以便分配给各项目团队和成员。工作分配视图有利于跟踪不同项目团队和成员的工作任务的进度,也有利于在个项目团队和成员之间合理地分配和调整项目资源。下图是本项目的工作分配视图。
5.数据库设计
(1)学生
字段名称 |
字段类型 |
字段描述 |
Student_id |
int |
主键 |
account |
varchar |
账号 |
password |
varchar |
密码 |
name |
varchar |
姓名 |
|
varchar |
电子邮件 |
class |
varchar |
班级 |
lessons |
set |
课程 |
(2)教师
字段名称 |
字段类型 |
字段描述 |
Teacher_id |
int |
主键 |
account |
varchar |
账号 |
password |
varchar |
密码 |
name |
varchar |
姓名 |
|
varchar |
电子邮件 |
course |
varchar |
课程 |
(3)管理员
字段名称 |
字段类型 |
字段描述 |
Administrator_id |
int |
主键 |
Account |
varchar |
账号 |
password |
varchar |
密码 |
name |
varchar |
姓名 |
|
varchar |
电子邮件 |
jurisdiction |
int |
权限 |
(4)课程
字段名称 |
字段类型 |
字段描述 |
Course_id |
int |
主键 |
Course_name |
varchar |
课程名称 |
Course_location |
varchar |
上课地点 |
Course_time |
varchar |
上课时间 |
Course_weeks |
varchar |
课程的周数 |
Course_teacher |
varchar |
授课老师 |
Course_credit |
int |
课程学分 |
(5)成绩
字段名称 |
字段类型 |
字段描述 |
Course_id |
Int |
主键 |
Course_grade |
set |
成绩表 |
Course_student |
set |
学生表 |
6.项目实现视图
实现视图是描述软件架构与源文件之间的映射关系,由软件项目的源文件目录树来呈现典型的实现视图。下图给出了本项目的实现视图:
其中handler文件是属于架构中的控制器结构,如下所示。
public class LoginHandler { @Autowired AdminService adminServiceImpl; @Autowired StudentService studentService; @Autowired TeacherService teacherService; //管理员登录 @RequestMapping("/adminlogin") public String loginStudent(@RequestParam("aname") String aname, @RequestParam("apassword") String apassword, Model model, HttpSession httpSession) { ... } // 管理员退出登录 @RequestMapping("/adminlogout") public ModelAndView adminLogout(HttpSession httpSession) { ... return new ModelAndView(new RedirectView("/StudentInfo/index.jsp")); } // 学生登录 @RequestMapping("/studentlogin") public ModelAndView loginStudent(@RequestParam("sid") String sid, @RequestParam("spassword") String spassword, Model model, HttpSession httpSession, HttpServletRequest httpRequest) { ... } // 学生退出登录 @RequestMapping("/studentlogout") public ModelAndView studentLogout(HttpSession httpSession) { ... return new ModelAndView(new RedirectView("/StudentInfo/index.jsp")); } // 教师登录 @RequestMapping("/teacherlogin") public ModelAndView loginTeacher(@RequestParam("tid") String tid, @RequestParam("tpassword") String tpassword, Model model, HttpSession httpSession) { ... } // 教师退出登录 @RequestMapping("/teacherlogout") public ModelAndView teacherLogout(HttpSession httpSession) { ... return new ModelAndView(new RedirectView("/StudentInfo/index.jsp")); } }
其中包含了三个实现类,包括了学生、管理员、教室的了登录与退出等工作。
7.运行环境和技术选型说明
由SpringMVC+MyBatis为主要框架,mysql8.0配置主从复制实现读写分离,主机丛机分别为腾讯云的服务器,而项目部署在阿里云上。前端主要由bootstrap完成,背景用particles.js插件。数据库交互查询用到pagehelper分页。
工具 | eclipse、navicat |
环境 | JDK1.8、tomcat9.0、mysql8.0 |
前端 | JavaScript、jQuery、bootstrap4、particles.js |
后端 | maven、SpringMVC、MyBatis、ajax、mysql读写分离、mybatis分页 |
8.概念原型与核心工作机制
一、概念
概念是人对能代表某种事物或发展过程的特点及意义所形成的思维结论,概念原型是一种虚拟化的、理想化的软件产品形式。也就是说,概念原型 = 用例 + 数据模型。
二、工作机制
学生进行登录,选择学生窗口登录,填入账号以及密码进行登录,系统进行校验,完成登录。学生可以在登录界面点击修改密码,通过邮件认证方式进行修改确认;学生可以根据课程名称,选择课程,或者推选课程,并可以查看课程成绩;教师登录后,可以查看自己课程信息,如课程地点时间,并对学生打分;管理员掌管对用户信息以及成绩课程数据的增删改查最高权限。
9.总结
本文接着上一篇博客,继续更加系统的学习了软件在设计过程中所要经历的步骤,从设计模式、软件架构和各类视图的设计,可以更加清晰的了解到软件设计的需求,可以帮助更加了解项目结构,以设计出功能更加完备的软件。
参考文献
https://www.cnblogs.com/smilekiller/p/14091491.html,基于学生选课系统的需求分析与概念模型
https://github.com/fuzui/StudentInfo, 基于SSM的学生信息管理系统(选课)
https://blog.csdn.net/zhengzhb/article/details/7430098,中介者模式