基于留学管理与分析系统设计方案
1.前言
上一次课题根据工程实践的项目,进行用例建模、业务领域建模、数据建模、形成概念原型。本次课题的主题继续针对工程实践项目,进行软件系统分析和设计,最终形成软件系统概念原型。
2.项目背景
我的工程实践是留学信息管理与分析系统的设计与开发。该系统是为用户提供有关留学服务信息的双边平台,管理人员定期维护系统,学生可以通过该系统搜索学校相关信息,并根据所提供的自身信息获得相应的留学建议。用户可以在此平台上填写自己的基本信息、偏好等,系统会通过分析用户的需求、自身的条件、留学地的社会环境和安全问题、留学学校信息、留学专业信息等给用户一个合理的选择区间,给用户提供参考和指导。
3.软件架构
工程实践是一个Web项目,所以可以使用B/S架构,结构如下:

但是当任何一个地方发生变化时,都需要重新开发整个系统。"多层"放在一层,分工不明确耦合度高——难以适应需求变化,可维护性低、可扩展性低。所以我们选择采用三层架构,结构如下。
三层分别为:
- 表现层(UI):通俗讲就是展现给用户的界面,他担当者接受用户信息和给用户显示用户信息的功能,即用户在使用一个系统的时候他的所见所得。
- 业务逻辑层(BLL):针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理、最明显的就是三大语句、判断、循环、多分支、这个一定是在逻辑层的。
- 数据访问层(DAL):该层所做事务直接操作数据库,针对数据的增添、删除、修改、更新、查找等。
优点:发生在哪一层的变化,只需更改该层,不需要更改整个系统。层次清晰,分工明确,每层之间耦合度低——提高了效率,适应需求变化,可维护性高,可扩展性高。
4.设计模式
设计模式采用MVC模式,MVC中M、V和C所代表的含义如下:
- Model(模型):代表一个存取数据的对象及其数据模型。
- View(视图):代表模型包含的数据的表达方式,一般表达为可视化的界面接口。
- Controller(控制器):作用于模型和视图上,控制数据流向模型对象,并在数据变化时更新视图。控制器可以使视图与模型分离开解耦合。

因为是具有人机交互界面的网站,用户界面可能随着需求变更而发生改变,例如,当要扩展一个应用程序的功能时,通常需要修改菜单和添加页面来反映这种变化。如果用户界面和核心功能逻辑紧密耦合在一起,要扩展功能通常是非常困难的,因为任何改动很容易在其他功能上产生错误。为了包容需求上的变化而导致的用户界面的修改不会影响软件的核心功能代码,可以采用将模型、视图和控制器相分离的思想。使用MVC模式的目的在于将Model和View的实现代码分离,从而使同一个程序可以使用不同的表现形式。
5.API文档
| 接口名称 | 接口地址 | 请求方式 | 请求参数 | 响应信息 | 备注 |
|---|---|---|---|---|---|
| 用户登录 | /admin/login/checklogin | GET | 用户名、密码、验证码 | 登录状态信息 | 用户输入正确的用户名、密码以及验证码才能登录成功 |
| 用户注册 | /user/register/checkregister | POST | 用户名、密码、验证码 | 注册成功消息 | |
| 获取用户列表 | /admin/user_list | GET | 显示用户页面 | ||
| 修改用户信息 | /admin/user_list/edit | PUT | 用户ID | 修改结果消息 | |
| 删除用户 | admin/user_list/delete | DELETE | 用户ID | 删除结果消息 | |
| 获取顶尖高校信息 | /index | GET | 主页面 | 在主页面根据综合评分,显示顶尖高校列表 | |
| 获取高校信息 | /college/college/all | GET | 学校页面 | 获取学校列表在学校页面中展示 | |
| 获取学校具体信息 | /college/college/detail | GET | 学校ID | 学校更多信息 | |
| 筛选学校 | /college/college/index | GET | 国家、QS排名(可选择) | 学校页面 | 通过设置条件初步筛选学校 |
| 搜索学校 | /college/college/search | GET | 关键词 | 学校页面 | 根据用户提供关键词模糊搜索 |
| 获取论坛主要信息 | /microblog/home | GET | 论坛主页与帖子 | 在论坛主页显示主要信息和帖子 | |
| 获取关注列表 | /microblog/home/friend | GET | 关注列表 | ||
| 获取粉丝列表 | /microblog/home/fan | GET | 粉丝列表 | ||
| 获取收藏列表 | /microblog/home/collect | GET | 收藏列表 | ||
| 获取某一用户具体信息 | /microblog/friend/index | GET | 用户ID | 用户信息 | |
| 发帖 | /microblog/post/post | POST | 文章ID、类型、内容 | 发帖、更帖、评论 | |
| 点赞 | /microblog/post/praise | PUT | 文章ID | ||
| 修改个人信息 | /user/setting/save | PUT | 昵称、年龄、GPA | 设置结果消息 |
6.概念原型视图
软件架构模型是通过一组关键视图来描述的,同一个软件架构,由于选取的视角(Perspective)和抽象层次不同可以得到不同的视图,这样一组关键视图搭配起来可以完整地描述一个逻辑自洽的软件架构模型。一般来说,我们常用的几种视图有分解视图、依赖视图、泛化视图、执行视图、实现视图、部署视图和工作任务分配视图。
6.1分解视图
分解是构建软件架构模型的关键步骤,分解视图也是描述软件架构模型的关键视图,一般分解视图呈现为较为明晰的分解结构特点。对系统的常用分解方法有面向功能分解,面向数据分解,面向特征分解,面向并发分解等,根据本项目的特点,比较适合面向功能的分解方法,分解视图如下:

6.2依赖视图
依赖视图展现了软件模块之间的依赖关系。依赖视图在项目计划中有比较典型的应用。比如它能帮助我们找到没有依赖关系的软件模块或子系统,以便独立开发和测试,同时进一步根据依赖关系确定开发和测试软件模块的先后次序。依赖视图在项目的变更和维护中也很有价值。比如它能有效帮助我们理清一个软件模块的变更对其他软件模块带来影响范围。
.png)
6.3执行视图
执行视图展示了系统运行时的时序结构特点,比如流程图、时序图等。执行视图中的每一个执行实体,一般称为Component,都是不同于其他组件的执行实体。如果有相同或相似的执行实体那么就把它们合并成一个。执行实体可以最终分解到软件的基本元素和软件的基本结构,因而与软件代码具有比较直接的映射关系。在设计与实现过程中,我们一般将执行视图转换为伪代码之后,再进一步转换为实现代码。
用户登录后管理个人信息
用户首先登录系统,登录失败三次后退出系统,登录成功后进入后台修改自己的个人信息。
.png)
用户浏览学校和专业信息
用户登录后进入主页面,系统自动和数据库交互获取主页面信息,用户浏览学校具体信息和专业具体信息,数据库提供根据的学校ID和专业ID返回给页面相关数据。
.png)
6.4实现视图
实现视图是描述软件架构与源文件之间的映射关系。比如软件架构的静态结构以包图或设计类图的方式来描述。一般我们通过目录和源文件的命名来对应软件架构中的包、类等静态结构单元,这样典型的实现视图就可以由软件项目的源文件目录树来呈现。实现视图有助于码农在海量源代码文件中找到具体的某个软件单元的实现。实现视图与软件架构的静态结构之间映射关系越是对应的一致性高。
项目的目录树如下:
├─.idea
│ └─libraries
├─sais-base
│ └─src
│ └─test
│ └─java
│ └─com
│ └─sais
│ └─saisbase
├─sais-entity
│ └─src
│ └─main
│ ├─java
│ │ └─com
│ │ └─sais
│ │ └─saisentity
│ └─resources
├─sais-mapper
│ └─src
│ └─main
│ ├─java
│ │ └─com
│ │ └─sais
│ │ └─saismapper
│ └─resources
│ └─mapping
├─sais-service
│ └─src
│ └─main
│ └─java
│ └─com
│ └─sais
│ └─saisservice
└─sais-web
└─src
└─main
├─java
│ └─com
│ └─sais
│ └─saisweb
│ ├─admin
│ ├─college
│ ├─common
│ │ ├─kaptcha
│ │ └─utils
│ ├─microblog
│ └─user
└─resources
├─static
│ ├─admin
│ │ ├─css
│ │ └─js
│ ├─college
│ │ ├─css
│ │ └─images
│ │ ├─colleges
│ │ └─square
│ ├─common
│ │ └─images
│ └─microblog
│ ├─css
│ ├─images
│ └─js
└─templates
├─admin
│ ├─change_password
│ ├─common
│ ├─complain_list
│ ├─login
│ ├─slide_list
│ └─user_list
├─college
│ ├─college
│ ├─common
│ ├─guide
│ ├─help
│ └─index
└─microblog
├─comment
├─common
├─forward
├─friend
├─home
├─index
└─login
6.5部署视图
部署视图是将执行实体和计算机资源建立映射关系。这里的执行实体的粒度要与所部署的计算机资源相匹配,比如以进程作为执行实体那么对应的计算机资源就是主机,这时应该描述进程对应主机所组成的网络拓扑结构,这样可以清晰地呈现进程间的网络通信和部署环境的网络结构特点。当然也可以用细粒度的执行实体对应处理器、存储器等。部署视图有助于设计人员分析一个设计的质量属性,比如软件处理网络高并发的能力、软件对处理器的计算需求等。
.png)
6.6工作分配视图
工作分配视图将系统分解成可独立完成的工作任务,以便分配给各项目团队和成员。工作分配视图有利于跟踪不同项目团队和成员的工作任务的进度,也有利于在个项目团队和成员之间合理地分配和调整项目资源,甚至在项目计划阶段工作分配视图对于进度规划、项目评估和经费预算都能起到有益的作用。

7.数据库设计
用户表
| 字段名 | uid | account | password | permission | infomation | register_time | login_time |
|---|---|---|---|---|---|---|---|
| 字段类型 | int(8) | varchar(50) | varchar(50) | int(8) | varchar(255) | datetime(0) | datetime(0) |
| 字段描述 | 用户ID | 用户账号 | 密码 | 权限 | 个人信息 | 注册时间 | 上次登录时间 |
| 备注 | 主键,默认生成 |
管理员表
| 字段名 | id | account | password | permission | login_information | login_history |
|---|---|---|---|---|---|---|
| 字段类型 | int(8) | varchar(50) | varchar(50) | int(8) | varchar(255) | varchar(255) |
| 字段描述 | 管理员ID | 管理员账号 | 密码 | 权限 | 登录信息 | 登录记录 |
| 备注 | 主键,默认生成 |
学校表
| 字段名 | sid | college_name | college_e_name | area | qs_rank | information |
|---|---|---|---|---|---|---|
| 字段类型 | int(8) | varchar(50) | varchar(50) | varchar(50) | int(8) | varchar(255) |
| 字段描述 | 学校ID | 学校中文名 | 学校英文名 | 地区 | QS排名 | 学校简介 |
| 备注 | 主键,默认生成 |
专业表
| 字段名 | mid | major_name | hot | information |
|---|---|---|---|---|
| 字段类型 | int(8) | varchar(50) | int(8) | varchar(255) |
| 字段描述 | 专业ID | 专业名称 | 热度 | 专业介绍 |
| 备注 | 主键,默认生成 |
学校-专业表
| 字段名 | s_m_id | sid | mid |
|---|---|---|---|
| 字段类型 | int(8) | int(8) | int(8) |
| 字段描述 | 学校_专业ID | 学校ID | 专业ID |
| 备注 | 主键,默认生成 | 外键 | 外键 |
论坛文章表
| 字段名 | aid | author | publish_time | hot | tag | content | leave_note |
|---|---|---|---|---|---|---|---|
| 字段类型 | int(8) | varchar(50) | datetime(0) | int(8) | varchar(50) | varchar(255) | varchar(255) |
| 字段描述 | 作者ID | 作者名 | 发布时间 | 热度 | 标签 | 内容 | 留言 |
| 备注 | 主键,默认生成 |
Merge关联表
| 字段名 | uid | sid | mid | aid |
|---|---|---|---|---|
| 字段类型 | int(8) | varchar(50) | varchar(50) | int(8) |
| 字段描述 | 用户ID | 学校ID | 专业ID | 作者ID |
| 备注 | 主键,默认生成 | 外键 | 外键 | 外键 |
8.运行环境和技术选型
本项目采用JavaWeb应用开发技术,基于Vue+Spring Boot实现一个留学信息管理与分析系统,旨在为用户提供完善的信息检索功能和建议与分析的推荐功能。前端部分采用HTML、CSS、JavaScript等技术实现用户界面的开发,并采用Vue+Vue-resource+Vue-cookie。后台服务器端基于Java语言进行开发,核心部分采用SpringBoot技术栈,ORM则选择myBatis框架。数据库管理方面使用轻量级MySQL数据库和Redis缓存技术,最终采用ECS云服务器实现系统的发布。使用RESTFul进行接口设计、使用前后端分离开发。后续则实现信息挖掘和可视化,以实现更强大的分析功能,使用Scrapy框架等。
- 前端开发平台:Visual Studio Code
- 后台开发平台:Intellij IDEA
- 数据库:MySQL & Redis
- 服务器:云服务器(ECS)
9.概念原型的核心工作机制
概念是人对能代表某种事物或发展过程的特点及意义所形成的思维结论。概念原型是一种虚拟的、理想化的软件产品形式。
概念原型=用例+数据模型。
软件架构代表了软件系统的整体设计结构,它应该是所有这些视图的集合。但我们不会将不同角度的这些视图整合起来,因为不便于阅读和更新。不过我们会有意识地将不同角度的视图之间的映射关系和重叠部分了然于胸,从而深刻理解软件架构内在的一致性和完整性,这就是系统概念原型。
概念原型的核心工作机制举例如下:
- 用户可以以游客身份进入系统,也可以登录进入,但游客身份只有本系统的查看权限。
- 用户注册系统时,输入手机号码,提交给系统,系统通过网络接口通信服务,发送验证码给手机,用户接收到验证码并输入、提交,系统核验后通过注册,并把手机号码作为账号插入用户表,用户完成注册。
- 用户搜索某某学校的某专业情况时,系统搜索数据库中的学校表以及专业表,经过一定的数据处理后,将信息返回给用户。
- 管理员登录系统,进入管理员页面,修改某某学校的简介时,系统查找到学校表的具体行,把管理员提交的简介内容与原简介内容进行合并修改。
- 从首页可以浏览推荐学校列表,或者从热榜查看热门学校,此外,也可以通过分类或者搜索查找自己感兴趣的学校。
- 点击进入论坛后,可以以一定的排序方式查看该帖子的回复列表,可以对帖子或者回复进行点赞点踩,评论等,当然也可以自己回复帖子。
10.参考资料
软件科学基础概论 https://gitee.com/mengning997/se/commit/6bfbce8ff5b200e7957ecd25650f8847604264a2
基于工程实践的需求分析与概念原型 https://www.cnblogs.com/cp777/p/14095030.html
三层架构详解 https://www.runoob.com/w3cnote/three-tier-architecture.html
MVC模式 https://www.runoob.com/design-pattern/mvc-pattern.html

浙公网安备 33010602011771号