基于学⽣选课系统的软件系统设计⽅案
0.概述
  本⽂主要针对学⽣选课系统这⼀⼯程实践项⽬,从设计模式、软件架构和各类视图⾓度分析了软件系统的特点,结合项⽬的接⼝API、数据库设计,基于上述分析,形成了该软件系统的概念原型[1]。
  对于该项⽬的基础需求分析,可以参见上⼀⽂“从学⽣选课系统的设计中体会《从需求分析到软件设计》”。该系统可以为学⽣、教师和管理员三者提供选课、退课、成绩登记等功能[2]。
1.系统架构
在系统架构⽅⾯,选课系统项⽬采⽤Web系统常⽤的MVC的模式开发,使⽤SpringMVC作为项⽬的主要架构。MVC模式是软件⼯程中的⼀种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller),即MVC。下图给出了⼀个通⽤MVC的三层架构图。模型和视图有着业务层⾯的业务数据紧密耦合关系,控制器的核⼼⼯作就是业务逻辑处理。这种架构的最⼤特点就是⽤户界⾯容易随着需求的变更⽽改变,可以包容需求上的变化导致修改⽤户界⾯的程序⽽不变影响软件的核⼼功能代码。不难想到,鉴于MVC架构的特点,可以较为完善的解决我们的需求。
结合MVC和选课系统的业务特点,我们将系统的数据流通过的过程分为三层:视图层、应⽤层和数据层。
视图层主要负责数据的展现;应⽤层主要负责业务逻辑处理;数据库层负责数据的读写以及数据的持久化。系统架构图、实现⽅案如下图所⽰。由SpringMVC+MyBatis为主要框架,前端采⽤bootsrap框架,后端使⽤mysql8.0配置主从复制实现读写分离[3]。
2.接⼝API
  该项⽬的接⼝较为众多且繁杂,这⾥以学⽣登录⽤例为例⼦说明在MVC架构下的系统的接⼝API设计。在MVC架构下,我们采取的设计模式为“中介者模式”,其接⼝的UML图如下所⽰:
  在登录⽤例中,学⽣模型中封装了学⽣类这⼀数据结构,并对外提供了访问学⽣类信息的接⼝(get,set⽅法)。视图设定为登录视图,⽤于显⽰登录信息、按钮等相关信息,完成交互。将视图和模型联系起来的便是登录控制器,将从页⾯获得的账号密码信息在数据库中查询,完成核⼼的逻辑操作。
3.系统视图
3.1 执⾏视图
执⾏视图如系统流图,可以较为明显的展现了系统运⾏时的时序结构特点,他可以最终分解到软件的基本元素和软件的基本结构,可以对系统整体的业务逻辑有较为直观的体现。下图给出了本项⽬的系统视图,从不同⽤户的登录⽤例开始,根据⽤户的需求,系统会根据⽤户的交互结果依次执⾏下去。
3.2 分解视图
分解视图通过划分软件系统为⼦系统、包、类、组件等不同的系统结构,可以体现出不同的抽象层级中软件模块的层次化结构。下图给出了本项⽬的分解视图:我们将选课系统划分为三个⼦系统,即登录⼦系统、选课⼦系统和信息⼦系统,对于这些⼦系统,⼜可以划分为若⼲类,如课程类、学⽣类、管理员类等。
3.3 泛化视图
泛化视图展现了软件模块之间的⼀般化或者具体化的关系,典型的例⼦就是类之间的继承关系。如下图所⽰了本项⽬的继承关系,学⽣、教师和管理员这三种⽤户类型都继承⾃基本⽤户,并通过课程进⾏相互联系。这种视图有利于我们了解系统的抽象层次结构,也有利于系统功能的扩展。
3.4 项⽬活动视图
  活动是某件事情正在进⾏时的状态,它既可以是现实⽣活中正在进⾏的某⼀项⼯作,也可以是软件系统中正在运⾏的某个对象的⼀个操作。活动具体表现为⼀系列动作组成的视图,⽽活动图就可以⽤于描述⽤例内部的⼯作流程。下图给出了学⽣选课⽤例的活动视图,可以看到学⽣⽤户和管理员内部在该⽤例下的联系和⼯作⽅式。
3.5 部署视图
  由SpringMVC+MyBatis为主要框架,mysql8.0配置主从复制实现读写分离,主机丛机分别为腾讯云的服务器,⽽项⽬部署在阿⾥云上。具体实现视图如下所⽰:
3.6 ⼯作分配视图
⼯作分配视图可以清晰的展现出项⽬分⼯。⼯作分配视图有利于跟踪不同项⽬团队和成员的⼯作任务的进度,对于不同团队成员所擅长的地⽅进⾏合适的分⼯可以较⼤限度的提升团队的⼯作效率。下图给出了本项⽬的⼀个⼯作分配视图。
4.数据库设计
4.1 学⽣表
数据名数据类型数据长度能否NULL是否为主键备注
student_id bigint16N Y学⽣id
account varchar20N N账号
password varchar20N N密码
name varchar20N N姓名
college varchar20N N所属学院
major varchar20N N专业
phonenumber bigint16Y N电话
email varchar20Y N邮箱地址
lesson set1000Y N所选课程
4.2 教师表
数据名数据类型数据长度能否NULL是否为主键备注
Teacher_id bigint16N Y教师id
account varchar20N N账号
password varchar20N N密码
name varchar20N N姓名
phonenumber bigint16Y N电话
email varchar20Y N邮箱地址
college varchar20Y N所属学院
lesson set1000Y N教学课程
4,3 管理员表
数据名数据类型数据长度能否为NULL是否为主键备注
account_id bigint16N Y管理员id
account varchar20N N账号
password varchar20N N密码
name varchar20N N姓名
jurisdiction int16N N权限等级
phonenumber bigint16Y N电话
email varchar20Y N邮箱地址
4.4 课程表
数据名数据类型数据长度能否为NULL是否为主键备注
lesson_id bigint16N Y课程id
lesson_time varchar20N N课程时间
lesson_name varchar20N N课程名
teacher_id bigint16N N教师id
credit bigint16N N学分
5.项⽬实现视图
  实现视图是描述软件架构和源⽂件之间的映射关系,通常可以由软件的项⽬源⽂件的⽬录树呈现。
  下图给出了本项⽬的实现视图。回顾本项⽬的系统架构为MVC架构,下⾯就此架构说明项⽬的实现视图。
  模型部分由selc.sql⽂件和pojo⽂件下定义的类决定(如course、student、teacher类等),并在mapper⽂件夹中定义了这些类的访问接⼝。
  视图部分由webapp⽂件夹决定,以webapp⽂件下的student为例,提供了各类交互⽅法,如退选课程、选择课程、修改个⼈信息等操作:
  控制器部分,以handler⽂件为例,其中实现了将视图层和模型层联系起来的众多⽅法,如LoginHandler代码中,集成了教师、学⽣和管理员的登录和退出登录的操作,这些操作完成的时候,会将模型数据和页⾯显⽰结合起来,即实现了MVC架构的核⼼功能。
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"));mvc和三层架构的理解
}
}
6.系统运⾏环境
  本项⽬的运⾏环境和技术选型如下表所⽰:由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分页
7.概念原型及⼯作机制
7.1 概念原型概念
概念是⼈对能代表某种事物或者发展过程的特点及其意义所形成的思维结论,⽽概念原型是⼀种虚拟化的、理想化的软件产品形式。我们可以得到这样的公式:概念原型=⽤例+数据模型。[5]
7.2 系统⼯作机制
  概念原型需要结合具体的⽤例与数据模型去分析,就好像程序是由算法和数据结构两部分组成的。
  学⽣⽤户输⼊学号和密码,登录系统,可以点击个⼈中⼼修改个⼈信息(登录密码、邮箱、出⽣年⽉、联系⽅式等);在选课允许的时间内,选择和退选课程,查看课表和成绩,这些都是业务操作的结果。在教师⽤例下,教师⽤户登录后,可以查看⾃⼰的课程安排,在期末的时候也能对学⽣的课程进⾏成绩评定。⽽对于管理员⽤例来说,具有最⾼的权限,统筹课程、⽤户和成绩的管理,对于这些信息进⾏全局的维护与增删改查,完成相关业务⼯作后,管理员即可退出系统。对于这些业务操作都是经过相应的操作器,完成后端数据模型和视图进⾏交互。
8.总结
  本⽂从系统架构为基础,从设计模式出发,从项⽬的各种视图⾓度分析了项⽬的层次⾓度和⼯作原理,结合数据库设计、API接⼝设计,得出了系统的概念原型和系统的⼯作机制。由于本⼈才疏学浅,项⽬也处于初级阶段,⽂章也可能存在诸多问题,还希望⼤家多多见谅,批评指正。
参考⽂献
[3]基于分布式缓存和消息中间件的选课系统设计与实现,陈鹏

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。