【人脸识别实战一】系统架构设计
1、前言《人脸识别实战》系列文章将讲述一个人脸识别系统的设计与实现过程。本文是系列文章的开篇,主要描述系统的整体架构和各模块的功能职责,以及系统所需要的环境依赖部署。详细的设计细节及项目源码地址在以下的公众号发布:
文章同步更新在公众号AIPlayer,欢迎扫码关注,共同进步
2、系统整体架构2.1 服务器端
(1)网络消息处理模块
主要负责管理客户端发送来的网络连接请求、消息数据的收发与数据协议解析,以及对图像数据的编解码处理。在系统中以JSON格式进行消息封装,使用TCP连接进行收发通信,而图像数据的解码仅支持OpenCV对图像数据的编解码操作。
(2)图像处理模块
图像处理模块负责处理人脸图像的数据,需要实现的功能包括:
人脸检测:如果客户端发送来的图像数据是人脸图像则不需要再进行检测,否则就需要对人脸进行检测。系统将采用基于ncnn实现的MTCNN算法进行部署。
人脸对齐:将检测到的人脸图像区域调整到正常角度,系统中将使用OpenCV的仿射变换来进行对齐。
人脸特征提取:系统将集成FaceNet和InsightFace两种算法进行人脸的特征提取。
人脸特征比对:使用欧式距离进行人脸特征比对,在阈值范围内选择最小值作为比对结果。
(3)数据库管理模块
数据库管理模块负责数据库的连接与管理以及用户数据的增删改查,主要包括新用户的信息及人脸特征的注册与删除,以及人脸特征比对时的查询操作。系统中使用MySql数据库作为存储仓库。
2.2客户端
(1)网络处理模块
主要的功能与服务器端相同,可以复用。
(2)图像处理模块
图像处理模块在客户端中仅需要实现人脸检测及人脸对齐即可。
3、环境部署3.1依赖
(1)硬件依赖
服务器端:需要运行的人脸特征算法比较耗时,需要GPU加速支持。
客户端:摄像头读取图像,处理器仅需要CPU即可。
(2)软件依赖
服务器端
TensorflowC++动态库:用于支持FaceNet与InsightFace的运行。
OpenCVC++动态库:用于支持图像数据读取,编解码,人脸对齐等操作。
ncnn:用于实现MTCNN。
Cuda:支持GPU运行。
MySql:数据库开发库。
客户端
OpenCV:用于支持图像数据读取,编解码及人脸对齐等操作。
ncnn:用于实现MTCNN算法的人脸检测。
3.2 环境部署
(1)基础依赖安装
sudo apt-get install -y cmakesudoapt-getinstall-ylibeigen3-devsudoapt-getinstall-yzlib1gzlib1g.devsudoapt-getinstall-ybuild-essentiallibgtk2.0-devlibavcodec-devsudoapt-getinstall-ylibavformat-devlibjpeg-devlibtiff5-devsudoapt-getinstall-ylibswscale-devlibjasper-devsudoapt-getinstallmysql-servermysql-clientlibmysqlclient-devsudoapt-getinstalllibopenblas-dev(2)OpenCV编译安装
wgethttps://github.com/opencv/opencv/archive/4.1.1.zipsudoapt-getinstall-yunzipunzip-x4.1.1.zipOPENCV_DIR=$(pwd)/opencv-4.1.1cd$OPENCV_DIRmkdirbuildcdbuildcmake-DCMAKE_BUILD_TYPE=Release-DCMAKE_INSTALL_PREFIX=/usr/local..sudomakesudomakeinstallsudoecho/usr/local/lib>>/etc/ld.so.conf.d/opencv.confsudoldconfigsudoecho-e"PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig exportPKG_CONFIG_PATH">>/etc/bash.bashrcsource/etc/bash.bashrcsudoupdatedb(3)tensorflow动态库编译
下载源码gitclonehttps://github.com/tensorflow/tensorflow.gitcd到tensorflow目录,更新到1.14版本gitcheckoutr1.14执行./configure进行项目配置使用bazel工具进行编译bazelbuild--config=opt//tensorflow:libtensorflow_cc.so编译完成后,在tensorflow根目录下出现bazel-bin,bazel-genfiles等文件夹,按顺序执行以下命令将对应的libtensorflow_cc.so文件和其他文件拷贝进入/usr/local/lib/目录完成后就准备好了tensorflow_cc.so文件,后面在C++编译环境和代码目录下编译时链接这些库即可,比如在CMakefile.txt中添加mkdir/usr/local/include/tfcp-rbazel-genfiles//usr/local/include/tf/cp-rtensorflow/usr/local/include/tf/cp-rthird_party/usr/local/include/tf/cp-rbazel-bin/tensorflow/libtensorflow*/usr/local/lib/完成后就准备好了tensorflow_cc.so文件,后面在C++编译环境和代码目录下编译时链接这些库即可,比如在CMakefile.txt中添加include_directories(/usr/local/include/tf)target_link_libraries(face_id-ltensorflow_cc-ltensorflow_framework)(4)Cuda安装 可以参考官网及其它网络资源的教程,这里不再详述。
后续文章发布在公众号AIPlayer,欢迎扫码关注,共同进步
如何进行系统的架构设计
一个软件项目在需求确定后,就可以开始系统的架构设计了。架构设计不同于编写代码,需要遵循严格的语法和编程规范。它没有规范可遵循,存在即合理,适合系统开发和运行的架构就是最合理的系统架构。
系统的架构设计是在业务需求已经清晰的前提下进行的,假定在系统需求分析阶段已经确定了系统的功能和业务范围,也明确了系统运营需求。在上述需求还没有确定的情况下,不适宜开展系统的架构设计,需要回到需求分析阶段完善上述需求后再开展系统的架构设计。
系统架构就是一些模型图,模型图是人们用来理解系统和沟通的工具。这些模型图需要提供给系统相关干系人来理解系统,系统相关干系人有项目经理、产品经理、开发人员、系统运营维护人员、客户、项目投资人等。这些干系人有不同的知识背景,对同一架构模型图也会有不同的认知和理解:如果把开发架构模型图给产品经理或客户看,他们定然看不懂也不能理解;同样的道理,如果只把逻辑架构图给开发人员看,就不能正确地指导开发人员构建开发环境。
因此架构设计师在进行系统架构设计时,需要从系统的不同维度进行设计,以满足系统相关干系人理解系统架构的需求。架构设计模型主要有逻辑架构、开发架构、数据架构、物理架构和运行架构五种模型图。一般来说需要设计的系统架构模型有逻辑架构、开发架构和物理架构三种架构模型图。数据架构模型一般放在数据库中进行设计,运行架构和物理架构基本相近,只是在物理架构中加了数据的流向,因此一些系统设计使用物理架构代替了运行架构。
设计逻辑架构模型
逻辑架构模型主要是确定系统的功能范围和系统划分。在设计逻辑架构模型时,可以抓住两个关键点:一个关键点是对系统进行逻辑划分,将一个大系统划分为多个子系统;另外一个关键点是明确各子系统之间的协作和调用关系。
绘制逻辑架构的模型图有系统流程图和系统结构图:系统流程图描述了系统各子系统、相关文件和数据之间的关系,记录了整个系统的体系结构;系统结构图也称为层次图,它以层次方式描述了系统从顶层到最底层的功能分解。
下图分别是人脉系统的系统流程图和系统结构图。
图1人脉系统流程图
图2人脉系统结构图
上面的人脉系统流程图和人脉系统结构图就是依据人脉系统需求规格说明书给出的功能和业务范围绘制的。
设计开发架构模型
开发架构模型图是给开发人员看的,开发架构模型指导开发人员如何来架构系统的开发环境。开发环境包括系统开发框架的选型、开发工具和编程语言、模块划分等内容。下图是人脉系统开发架构模型图。
图3人脉系统开发架构模型图
开发架构模型图给出了技术体系是B/S结构,开发框架选择SSM,开发语言是JavaEE。系统采用三层结构,分别是表示层、WEB应用层和数据层。表现层是JSP页面,在浏览器中运行,表现层是MVC的View。WEB应用层的控制层是MVC的Controller,业务逻辑层是MVC的Service,实体层是MVC的POJO。数据层由MyBaits数据库开发框架组成。(PlainOrdinaryJavaObject 实际就是普通JavaBeans)
设计物理架构模型
物理架构模型是给系统部署人员和运营维护人员看的,主要给出系统的部署环境模型,包括网络环境、硬件环境和软件环境。下图是系统部署网络环境模型图。
图4系统部署网络环境模型图
从上面网络环境模型图中可以看出,系统部署只需要一台主机,要求支持HTTP协议和远程桌面协议。系统可以考虑部署到阿里云或腾讯云。
系统的架构设计主要涉及到三种模型图,分别是逻辑架构模型、开发架构模型和物理架构模型。逻辑架构模型一般采用系统流程图和系统结构图建模;开发架构模型没有标准的模型图,可以使用PPT或Visio绘图工具进行绘制;物理架构模型主要是由网路环境、硬件和软件环境组成。
系统架构设计说明书
1. 引言1.1 编写目的编写本文档主要用于说明关于高校问卷调查管理系统的具体系统架构设计。其中,具体说明了系统架构设计的目标和约束需求,规定了系统的开发环境和运行环境,阐述了逻辑架构设计的整体思想和具体设计的实现,介绍了系统的主要业务流程和系统的功能模块的划分以及模块之间的联系,表明了系统采用存储的数据库类型以及数据库又采用了什么设计编辑工具和数据库中存储的各种表的具体信息,最后是设计了系统核心功能的界面原型。
本文档是对系统架构设计的详细说明,通过编写该系统架构设计说明书,有利于了甲方更好地理解系统逻辑架构和系统相关功能,也便于系统管理员更好地管理系统以及在出现问题后能够更好地对系统进行维护。
1.2 读者对象系统管理者:在系统正式运行后,系统的管理者,主要用来维护系统的正常运行,保证系统数据库信息的安全,能够及时应对系统在运行时出现的一些小问题。
系统开发人员:整个系统的主要开发人员,也是系统架构和功能的主要设计人员,负责系统的web前端和后端的开发。
系统测试人员:在系统完成了初步实现后,对系统进行各方面的测试,其中包括系统的功能是否全面,系统的响应和事件的处理是否快捷,系统的安全性以及系统整体的业务流程等方面。
1.3 参考资料[1]李伟/吴庆海,《软件架构的艺术》,电子工业出版社,2009-04
[2]邓春晖/秦映波,《Web前端开发简明教程》,人民邮电出版社,2017-12
[3]TillAdam,《架构之美》,机械工业出版社,2009-11
[4]许令波,《深入分析JavaWeb技术内幕》,电子工业出版社,2012-09
[5]陈康贤,《大型分布式网站架构设计与实践》,电子工业出版社,2014-09
[6]施瓦茨(BaronSchwartz)/扎伊采夫(PeterZaitsev)/特卡琴科(VadimTkachenko),《高性能MySQL》,电子工业出版社,2013-05
1.4 术语与缩写解释缩写、术语
解释
Web
(WorldWideWeb)即全球广域网,也称为万维网,它是一种基于超文本和HTTP的、全球性的、动态交互的、跨平台的分布式图形信息系统。
UI
用户界面(UserInterface,简称 UI,亦称使用者界面[1])是系统和用户之间进行交互和信息交换的媒介,它实现信息的内部形式与人类可以接受形式之间的转换。
Html5
HTML5是构建Web内容的一种语言描述方式。HTML5是互联网的下一代标准,是构建以及呈现互联网内容的一种语言方式.被认为是互联网的核心技术之一。
Css3
层叠样式表(英文全称:CascadingStyleSheets)是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言。
JavaScript
JavaScript(简称“JS”)是一种具有函数优先的轻量级,解释型或即时编译型的高级编程语言。
Java
Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。
Windows
MicrosoftWindows操作系统是美国微软公司研发的一套操作系统,它问世于1985年,起初仅仅是Microsoft-DOS模拟环境,后续的系统版本由于微软不断的更新升级,不但易用,也当前应用最广泛的操作系统。
2. 系统概述
高校问卷调查管理系统是一款能够设计问卷、发布问卷、收集问卷以及对问卷收集信息分析的多功能应用型系统。用户登陆系统,可以根据自己的需求设计问卷的主题性质和问卷的题目,题目可定义为单选题、多选题、判断题以及主观意见题;在完成问卷的设计后,用户在系统数据库中选择需要接受调查问卷的人群,通过系统将设计好的问卷发布给相关人员;当待问卷调查人员填写好并提交问卷后,系统会对该问卷进行收集并存储在相关数据库中;当大部分都被填写好,系统会对问卷中信息进行整理和分析,并将结果呈现给用户,以供用户参考。
高校问卷调查管理系统是为提高政府教育管理的针对性与有效性,便于政府人员从学生和教师获知其对学校、专业、教学情况、教学资源配套、学校管理水平等多方面评价的信息收集。互联网是效率最高、短时间内涉及人员广的渠道之一,所以依托互联网的调查问卷需求应运而生,通过信息的反馈,进行信息的初步帅选与分析,能够及时反应当前高校情况,为管理手段和政策方针提供依据。
高校问卷调查管理系统主要满足的功能需求如下:
(1)项目发布功能,根据调查内容和性质的不同可定义成不同的项目,在每个项目下可定义问卷。
(2)设计问卷,调查问卷可进行问卷题目编辑,题型包含单选题和填空题两种类型。
(3)待问卷人员导入,包括学生和教师两种角色,通过excel模板导入待问卷人员信息,学生包括学号、姓名、所属学校、专业、班级、性别、手机号、电子邮箱。教师包括教师号、姓名、所属院校、性别、手机号码、电子邮箱。
(4)发布问卷,通过系统将问卷发布到待问卷人员,可通过短信和邮件两种方式获得问卷链接地址。
(5)问卷被提交后,结果被记录。
(6)系统对问卷结果进行统计并进行分析,可查看总体参与人数,答题选项比例、不同学生、不同学校、不同年级、不同专业、不同院校级别、不同性别的答题报表或图表分析。
3. 架构设计目标和约束3.1 架构设计目标架构设计的主要目的是为了解决软件系统复杂度带来的问题。
架构设计是宏观性考量,在整体上理解问题的复杂性,给出方案,并论证方案的可行性,提供一系列准则指导执行。
因此,架构设计的目标主要有以下几点:
(1)提前识别问题的复杂性和关注点,提供可行的经过论证的解决方案;
(2)建立服务质量指标,确定设计方案可以满足指定的质量指标;
(3)规划整体设计,提供长远的可扩展性;
(4)为实际开发确定基本框架。
3.2 约束需求3.2.1软件、硬件环境(包括运行环境和开发环境)的约束软件开发和运行是基于64位Windows操作系统,所以软件可在64位Windows操作系统上的网页浏览器中正常打开和运行。采用WebStorm-2020完成Web前端的开发,EclipseIDEforJavaDevelopers-2020完成后端开发,MySQL8.0进行数据库的设计和编辑,最终在Windows10操作系统上的GoogleChrome浏览器完成系统的测试和最终运行。
3.2.2接口/协议的约束(1)内部接口/协议的约束
在内部接口方面,各模块之间采用函数调用、参数传递、返回值等方式进行信息传递。接口传递的信息将是以数据结构封装的数据,以参数传递或返回值的形式在各模块间传输。
(2)外部接口/协议的约束
在输入方面,对于键盘、鼠标等外部设备的输入,可用VISUAL C++的标准输入/输出,对输入进行处理。
在输出方面,如打印机的连接及使用,也可用VISUAL C++的标准输入/输出对其进行处理。在网络传输部分和网络硬件部分,为了实现高速传输,将使用高速ATM。
3.2.3用户界面的约束UI的设计开发基于html5、css3和JavaScript等前端开发语言。在UI的设计中要具备适用性,易于用户理解;当错误操作时会有提示信息和防错处理,整体的布局和色彩的适用要合理,在事件的响应方面要最高效率,整体界面可复用,控件设置满足单一应对原则。网络通信协议采用 HTTP和TCP/IP协议,调用接口采用 Web Service,系统通过内嵌浏览器技术与扩展对象插件接口集成。
3.2.4软件质量的约束(1)正确性
UI上的控件能够正确且及时响应,实现该控件对应功能,错误操作会进行信息提示,同时添加防错处理,及时应对出现的错误操作。
(2)可靠性
设置备用服务器保证系统正常工作。当遇到断电重启的情况,能够实现系统断电后的自动重启,且较少人工维护量和实现系统稳定运行。
(3)效率
数据信息的采集通讯支持10秒以上的实时数据传输(受网络环境影响),并且要求系统的响应时间不超过5秒。
(4)安全性
用户注册/登录系统,关键数据操作,需要验证码进行验证,关于数据采用MD5加密技术。
(5)可扩展性
系统在整体设计上要充分考虑可扩展性,当用户的需求变化时,系统可进行相应的处理;当系统在运行中,客户如果对原有功能作调整或变更,系统应该能够灵活地修改。同时,预留接口,能扩展到其他监测系统。
3.3 开发与运行环境类别
标准配置
最低配置
开发环境
Windows10操作系统
Windows8操作系统
WebStorm-2020
WebStrom-2018
EclipseIDEforJava
Developers-2020
EclipseIDEforJava
Developers-2018
MySQL8.0
MySQL8.0
测试环境
Windows10操作系统
Windows8操作系统
GoogleChrome(64位)
GoogleChrome(32位)
运行环境
Windows10操作系统
Windows8操作系统
GoogleChrome(64位)
GoogleChrome(32位)
4. 系统总体设计4.1 设计思想
三层架构(3-tierarchitecture)通常意义上的三层架构就是将整个业务应用划分为:界面层(UserInterfacelayer)、业务逻辑层(BusinessLogicLayer)、数据访问层(Dataaccesslayer)。区分层次的目的即为了“高内聚低耦合”的思想。3个层次中,系统主要功能和业务逻辑都在业务逻辑层进行处理。
图4.1三层架构图
所谓三层体系结构,是在客户端与数据库之间加入了一个“中间层”,也叫组件层。这里所说的三层体系,不是指物理上的三层,不是简单地放置三台机器就是三层体系结构,也不仅仅有B/S应用才是三层体系结构,三层是指逻辑上的三层,即使这三个层放置到一台机器上。三层体系的应用程序将业务规则、数据访问、合法性校验等工作放到了中间层进行处理。通常情况下,客户端不直接与数据库进行交互,而是通过COM/DCOM通讯与中间层建立连接,再经由中间层与数据库进行交互。
4.2 软件逻辑架构设计分层的原因:
(1)分层设计允许你分割功能进入不同区域。换句话说,层在设计中就是逻辑组件的分组。例如,A层可以访问B层,但B层不能访问A层。 (2)用分层的方法,以提高应用程序的可维护性,并使其更容易扩展,以提高性能。
设计分层的原则 (1)层意味着组建的逻辑分组。例如,对用户界面,业务逻辑和数据访问组建应该使用不同的不同的层。 (2)在一个层内组建应该聚合的。如业务层组建仅应提供与业务逻辑相关的操作,而不是提供其他操作。 (3)在设计的每一个层接口时要考虑好物理边界。如果通信扩展了物理边界,使用基于消息操作;否则使用基于对象操作。 (4)考虑使用接口类型(interface)来定义每层的接口。这将允许你创建该接口的不同实现,提高可测性。 (5)对于Web应用程序,在表示层和业务逻辑层之间实现基于消息的接口是一个好主意,即使这两层没有跨越物理边界。基于消息的接口更适合于无状态的Web操作。
·数据访问层: 有时候也称为是持久层,其功能主要是负责数据库的访问,可以访问数据库系统、二进制文件、文本文档或是XML文档。简单的说法就是实现对数据表的Select,Insert,Update,Delete的操作。如果要加入ORM的元素,那么就会包括对象和数据表之间的mapping,以及对象实体的持久化。主要是对原始数据(数据库或者文本文件等存放数据的形式)的操作层,而不是指原始数据,也就是说,是对数据的操作,而不是数据库,具体为业务逻辑层或表示层提供数据服务。·业务逻辑层: 主要是针对具体的问题的操作,也可以理解成对数据层的操作,对数据业务逻辑处理,如果说数据层是积木,那逻辑层就是对这些积木的搭建。业务逻辑层(BusinessLogicLayer)无疑是系统架构中体现核心价值的部分。它的关注点主要集中在业务规则的制定、业务流程的实现等与业务需求有关的系统设计,也即是说它是与系统所应对的领域(Domain)逻辑有关,很多时候,也将业务逻辑层称为领域层。业务逻辑层在体系架构中的位置很关键,它处于数据访问层与表示层中间,起到了数据交换中承上启下的作用。由于层是一种弱耦合结构,层与层之间的依赖是向下的,底层对于上层而言是“无知”的,改变上层的设计对于其调用的底层而言没有任何影响。如果在分层设计时,遵循了面向接口设计的思想,那么这种向下的依赖也应该是一种弱依赖关系。因而在不改变接口定义的前提下,理想的分层式架构,应该是一个支持可抽取、可替换的“抽屉”式架构。正因为如此,业务逻辑层的设计对于一个支持可扩展的架构尤为关键,因为它扮演了两个不同的角色。对于数据访问层而言,它是调用者;对于表示层而言,它却是被调用者。依赖与被依赖的关系都纠结在业务逻辑层上,如何实现依赖关系的解耦,则是除了实现业务逻辑之外留给设计师的任务。·表示层: 位于最外层(最上层),离用户最近。用于显示数据和接收用户输入的数据,为用户提供一种交互式操作的界面。主要表示WEB方式,也可以表示成WINFORM方式,WEB方式也可以表现成:aspx,如果逻辑层相当强大和完善,无论表现层如何定义和更改,逻辑层都能完善地提供服务。
4.3 系统主要业务流程设计
图4.2业务流程图
4.4 功能模块划分功能模块划分如下图所示:
图4.3功能模块划分
4.4.1. 模块一描述模块名称
模块功能(职责)概述
UI模块
该模块用户可见,是系统和用户之间进行交互和信息交换的媒介,它实现信息的内部形式与人类可以接受形式之间的转换。
系统管理模块
该模块是整个系统核心,它的关注点主要集中在业务规则的制定、业务流程的实现等与业务需求有关的系统设计
数据库模块
数据库是“按照数据结构来组织、存储和管理数据的仓库”用来收集用户所填信息,注册信息及一切有关数据,对系统提供数据支持
4.4.2. 模块一接口设计接口的变化,对于外部的表现来看,无非是输入和输出的变化,在实际的软件工程中,由于需求的变更,软件功能和规格的变化,接口的变化也在所难免,如何将修改的影响降低,在设计中还是有些方法来使用。
·应对输入变化的场景:
(1)尽量不要用参数的个数来变化;
(2)C语言中接口使用数据结构的变化来保证接口的兼容性;
(3)使用无值型的指针,通过强制转换来适应不同的结构体,同样保证了接口的兼容性,接口参数使用字符串,通过规范字符串的格式来进行不同参数的修改和传递,保证接口不变化,有点类似数据结构的方式,URL字串使用就是典型的方式。
·应对输出变化的场景:
(1)返回数据的定义需要进行规范,常用的方式是返回错误码;
(2)返回数据指针;
(3)返回数据结构/类。
5. 数据库设计概述5.1 数据库环境说明MySQL是一种关系型数据库管理系统,关系型数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。这次采用的是开发设计工具是MySQL8.0版本。
特点:
·开源
·支持大型的数据库
·使用标准的SQL数据库语言形式
·可以运行于多个系统上,并且支持多种语言
·对PHP有很好的支持
·可以定制
5.2系统概念架构设计基于用例模型创建系统概念模型,创建实体类类图。
government
-account:int
-password:int
+printInfo():void
ts(teachersandstudents)
+Id:int
+name:string
+sex:string
+phonenumber:string
+e-mail:string
+printInfo():void
questionnaire
-type:string
+option:string
+printInfo():void
5.2 数据库逻辑架构设计
根据系统概念模型,以及根据需求分析和系统逻辑架构,进行数据库逻辑架构设计。
图5.1政府人员E-R图
图5.2问卷系统E-R图
图5.3师生E-R图
政府人员主要是问卷的设计及发布者,以及能够得到问卷反馈的信息的人。
高校授课老师和学生是问卷的填写人员,在规定时间内完成问卷的填写并提交问卷。问卷系统是数据库的一个模型,主要区分问卷类型,问卷的发布者登录系统从而发布具体类型的问卷,而发布的问卷由师生填写完毕后反馈给政府人员,整体体关系由E-R图展示如下。
图5.4概念模型关系图
5.3 表汇总说明表汇总
用途
学生信息表
用于存储高校学生的各种信息,如学生的学校,学号,专业,姓名等。
教师信息表
用于存储高校教师的各种信息,如老师的姓名,所属学校,教职工号等。
用户信息表
用于存储用户的个人账户信息,如用户的账号,密码,个人信息等。
管理员信息表
用于记录管理员的个人账户信息,如管理员的账号,密码,个人信息等。
6. 用户界面设计
图6.1登陆界面
图6.2功能选择界面
高校教务管理系统设计方案
1、前言本文主要是针对一个高校教务管理系统的分析与总结,主要阐述项目的完整设计方案和一些软件结构特点,并采用不同的视图来描述项目的软件系统概念原型。高校教务管理水平的高低直接反映了学校教学管理水平的高低,关系到学校在社会竞争中的生存与发展。随着科学技术的不断发展,随着教育改革的不断深入,学校教务管理将面临许多新的问题和挑战。而高校教务管理系统,可以有效地解决问题,提高工作效率,改进教学管理方式,提高教育教学管理水平。让用户、开发人员等更好的了解本项目。
2、软件设计方案总述软件设计从大的方面来说,有软件架构风格与策略的不同,从具体实现方面来说,有设计模式的不同,从底层来说,数据的存取以及语言的实现也不一样。只有采取最适合项目的软件设计方案,综合性能、成本、开发效益、可用性,才能获得最好的软件设计效果。软件架构风格有很多,如分层架构、典型的MVC架构和MVVM架构、管道-过滤器、客户端-服务、P2P(如区域链)、发布订阅风格、CRUD、层次化架构等;典型的设计模式有工厂模式、单例模式、装饰模式、代理模式、外观模式、享元模式等;典型的软件架构的描述方法视图,比如分解视图、依赖视图、泛化视图、执行视图、实现视图、部署视图等。
3、设计模式设计模式的本质是面向对象设计原则的实际运用总结出的经验模型。对类的封装性、继承性和多态性以及类的关联关系和组合关系的充分理解的基础上才能准确理解设计模式。正确使用设计模式具有以下优点。可以提高程序员的思维能力、编程能力和设计能力。使程序设计更加标准化、代码编制更加工程化,使软件开发效率大大提高,从而缩短软件的开发周期。使设计的代码可重用性高、可读性强、可靠性高、灵活性好、可维护性强。
4、软件架构本系统包含多种用户,包含教师、学生、管理员等等,选择适应系统开发的B/S框架。B/S结构指的是Browser/Server(浏览器/服务器)结构,就是只需要安装维护一个服务器,而客户端采用浏览器的方式来运行软件。它是随着Internet技术而兴起的,是对C/S结构的一种变化和改进。主要利用了WWW浏览器技术,结合多种Script语言和新技术,将系统功能实现的核心部分集中到服务器上,简化了系统的开发、维护和使用。是一种全新的软件系统构造技术。它只需要安装一个浏览器和数据库,就可以让浏览器通过WebServer同数据库进行数据交互。
该架构不需要安装客户端,可以直接运行在Web浏览器中。B/S架构可以直接放在Internet网络上,从而达到通过某些特权来控制多客户端访问的目的以及交互方式。B/S架构由于不需要安装客户端,因此不存在更新多个客户端以及升级服务器等问题。B/S架构工作原理如下:5、视图分解视图分解是构建软件架构模型的关键步骤,分解视图也是描述软件架构模型的关键视图,一般分解视图呈现为较为明晰的分解结构(breakdownstructure)特点。分解视图用软件模块勾划出系统结构,往往会通过不同抽象层级的软件模块形成层次化的结构。分解视图由子系统(Subsystem)、包(Package)、类(Class)、组件(Component)、库(Library)、软件模块(Module)、软件单元(Softwareunit)等部分组成。根据对高校教务管理系统的分析,分为四大模块,系统的分解视图如下:
依赖视图依赖视图展现了软件模块之间的依赖关系。比如一个软件模块A调用了另一个软件模块B,那么我们说软件模块A直接依赖软件模块B。如果一个软件模块依赖另一个软件模块产生的数据,那么这两个软件模块也具有一定的依赖关系。依赖视图在项目计划中有比较典型的应用。比如它能帮助我们找到没有依赖关系的软件模块或子系统,以便独立开发和测试,同时进一步根据依赖关系确定开发和测试软件模块的先后次序。依赖视图在项目的变更和维护中也很有价值。比如它能有效帮助我们理清一个软件模块的变更对其他软件模块带来影响范围。根据对高校教务管理系统的分析,系统的依赖视图如下:
泛化视图泛化视图展现了软件模块之间的一般化或具体化的关系,典型的例子就是面向对象分析和设计方法中类之间的继承关系。值得注意的是,采用对象组合替代继承关系,并不会改变类之间的泛化特征。因此泛化是指软件模块之间的一般化或具体化的关系,不能局限于继承概念的应用。泛化视图有助于描述软件的抽象层次,从而便于软件的扩展和维护。比如通过对象组合或继承很容易形成新的软件模块与原有的软件架构兼容。
执行视图执行视图展示了系统运行时的时序结构特点,比如流程图、时序图等。执行视图中的每一个执行实体,一般称为组件(Component),都是不同于其他组件的执行实体。如果有相同或相似的执行实体那么就把它们合并成一个。执行实体可以最终分解到软件的基本元素和软件的基本结构,因而与软件代码具有比较直接的映射关系。在设计与实现过程中,我们一般将执行视图转换为伪代码之后,再进一步转换为实现代码。根据对高校教务管理系统的分析,分为四大模块,系统的执行视图如下:学籍管理模块:排课管理模块:选课管理模块:教务管理模块:
实现视图实现视图是描述软件架构与源文件之间的映射关系。比如软件架构的静态结构以包图或设计类图的方式来描述,但是这些包和类都是在哪些目录的哪些源文件中具体实现的呢?一般我们通过目录和源文件的命名来对应软件架构中的包、类等静态结构单元,这样典型的实现视图就可以由软件项目的源文件目录树来呈现。实现视图有助于码农在海量源代码文件中找到具体的某个软件单元的实现。实现视图与软件架构的静态结构之间映射关系越是对应的一致性高,越有利于软件的维护,因此实现视图是一种非常关键的架构视图。系统源代码目录如下:
部署视图部署视图是将执行实体和计算机资源建立映射关系。这里的执行实体的粒度要与所部署的计算机资源相匹配,比如以进程作为执行实体那么对应的计算机资源就是主机,这时应该描述进程对应主机所组成的网络拓扑结构,这样可以清晰地呈现进程间的网络通信和部署环境的网络结构特点。当然也可以用细粒度的执行实体对应处理器、存储器等。部署视图有助于设计人员分析一个设计的质量属性,比如软件处理网络高并发的能力、软件对处理器的计算需求等。系统的部署视图如下:
工作分配视图工作分配视图将系统分解成可独立完成的工作任务,以便分配给各项目团队和成员。工作分配视图有利于跟踪不同项目团队和成员的工作任务的进度,也有利于在个项目团队和成员之间合理地分配和调整项目资源,甚至在项目计划阶段工作分配视图对于进度规划、项目评估和经费预算都能起到有益的作用。每个视图都是从不同的角度对软件架构进行描述和建模,比如从功能的角度、从代码结构的角度、从运行时结构的角度、从目录文件的角度,或者从项目团队组织结构的角度。软件架构代表了软件系统的整体设计结构,它应该是所有这些视图的集合。但我们不会将不同角度的这些视图整合起来,因为不便于阅读和更新。不过我们会有意识地将不同角度的视图之间的映射关系和重叠部分了然于胸,从而深刻理解软件架构内在的一致性和完整性,这就是系统概念原型。最终小组内部工作分配安排如下:
6、数据库设计数据库设计如下:
教师信息数据项名称字段数据类型长度教工号char20教师姓名varchar20密码varchar20学生信息数据项名称字段数据类型长度学号char20学生姓名char20专业char20班级号int20密码varchar20教务员信息数据项名称字段数据类型长度教务员编号char20教务员姓名varchar20密码varchar20课程信息数据项名称字段数据类型长度课程号char20学号char20教工号char20教室char20上课时间char207、软件系统运行环境和技术选型本项目采用JavaWeb应用开发技术,前端部分采用HTML、CSS、JavaScript等技术实现用户界面的开发,后台服务器端基于Java语言进行开发。数据库使用mysql数据库。开发平台:javaeclipse数据库:mysql
8、概念原型和系统核心工作机制概念原型概念是人对能代表某种事物或发展过程的特点及意义所形成的思维结论。概念原型是一种虚拟的、理想化的软件产品形式。本例中样例主要包括教务员可以通过Excel表格批量导入学生信息,同时对个别的学生信息进行修改,教务员可以录入预计开设的课程及相关信息,教务员可对已录入课程的信息进行修改,教务员可以删除已录入的课程,学生可对本人的课表信息进行查询,学生可以根据培养计划进行选课,教务员可以安排考场和考试时间,任课教师可以在规定的时间段内录入学生成绩。核心工作机制学籍管理模块教务员可以通过Excel表格批量导入学生信息,同时对个别的学生信息进行修改。
排课管理模块教务员进行1.课程录入,教务员可以录入预计开设的课程及相关信息。2.课程修改,教务员可对已录入课程的信息进行修改。3.删除课程,教务员可以删除已录入的课程。
选课管理模块学生进行1.学生课表,学生可对本人的课表信息进行查询。2.选课,学生可以根据培养计划进行选课。
考务管理模块考务员进行1.考试安排,教务员可以安排考场和考试时间。2.成绩录入,任课教师可以在规定的时间段内录入学生成绩。
9、总结根据上课所学知识最终完成了高校教务管理系统的设计方案,实现了对项目设计模式、软件架构、概念原型、以及运行环境和人员分工的描述,指导我们更好的进行系统开发。
参考资料:https://gitee.com/mengning997/se/tree/master/ppthttps://zhuanlan.zhihu.com/p/71222679