目 录
摘 要 I
Abstract II
引 言 1
1 相关技术简介 3
1.1 框架 3
1.1.1 SpringMVC框架 3
1.1.2 Spring框架 3
1.1.3 Mybits框架 3
1.2 开发语言 3
1.2.1 JAVA 3
1.2.2 JavaScript 3
1.2.3 JSP 4
1.3 设计模式 4
1.4 数据库 4
2 系统分析 5
2.1 社会可行性 5
2.2 经济可行性 5
2.3 技术可行性 5
2.4 操作可行性 6
3 系统概要设计 7
3.1 系统目标设计 7
3.2 系统设计思想 7
3.3 系统功能描述 8
3.3.1 高校信息管理 8
3.3.2 用户信息管理 8
3.4 系统用例图 11
3.5 数据库设计 12
3.5.1 数据库技术简介 12
3.5.2 E-R图 12
3.5.3 总体表设计 13
3.5.4 数据库表结构 14
4 系统详细设计与实现 19
4.1 数据爬取阶段 19
4.1.1 高校基础信息的爬取 20
4.1.2 高校专业信息的爬取 21
4.1.3 高校招生信息的爬取 22
4.1.4 其它信息爬取 23
4.2 数据清洗过程 23
4.3 程序流程图 24
4.4 模块详细设计 25
4.4.1 登录模块 25
4.4.2 超级管理员功能模块界面 27
4.4.3 普通管理员功能模块界面 30
4.4.4 普通用户模块 33
5 系统测试 37
5.1 单元测试 37
5.2 集成测试 37
5.3 压力测试 41
5.3.1 在线用户数量压力测试 41
5.3.2 用户获取数据量压力测试 42
5.3.3 页面访问压力测试 43
结 论 45
致 谢 46
参考文献 47
摘 要
在网络发达的现在,人们获取信息的途径也越来越丰富,动动手指就有成千上万的信息唾手可得,但随之而来的就是消息的复杂性也越来越高作为学生中的一员,深知在查找学校相关信息时也变得更加便利,但随之而来的就是更为复杂的信息。为了解决人们在查询相关信息时的观赏性、复杂性和不确定性等问题,结合近年来随着大数据时代的来袭应运而生的数据可视化技术,将信息更直观的展示给客户。数据可视化技术的基本思想就是讲单一的作为基点,然后试图去寻找基点与基点之间的关联性,通过大量有关联性的数据集构成一个图像,并且可以从不同维度观察数据,因此可以更深入地了解和分析数据。为人们提供直观、交互式和响应式的视觉环境。
高校信息数据可视化数据均为真实数据,通过爬虫技术爬取。爬取数据额外技术操作包括采用IP代理池转换数据包和数据清洗。清洗过后的数据可为本系统使用。
关键词:数据可视化;SSM框架;系统;数据清洗;爬虫技术
Abstract
Nowadays, with the develop of the Internet, people have more and more ways to obtain information. With their fingers, there are thousands of information at their fingertips, but with it comes the complexity of the information. One member knows that it becomes more convenient when looking for school-related information, but more complicated information comes with it. In order to solve the problems of people’s enjoyment, complexity and uncertainty when querying related information, combined with the data technology that has emerged in recent as the era of big data has emerged, the information is more intuitively displayed to customers. The basic idea of data visualization technology is to talk about the single as the base point, and then try to find the correlation between the base point and the base point. A large number of related data sets form an image, and the data can be observed from different dimensions, so it can be deeper. Understand and analyze data.
University information data visualization data are all real data, which are crawled by crawler technology. The additional technical operations of crawling data include packet conversion and data cleaning with IP agent pool. The cleaned data can be used for the system.
Keywords: Data visualization;SSM framework;System;Data cleaning;The crawler technology
引 言
数据可视化技术起步于国外。1990年,第一届IEEE可视化会议,聚集了来自诸如物理学、化学、图形和图形处理等跨学科领域的研究人员学术团体,以从事和鼓励可视化科学研究[1]。
作为近几年最火的前端数据可视化框架,ECharts凭借着其丰富的可视化表达、增量的渲染技术、识别数据差异等优点独占鳌头。另外,ECharts是百度得开源项目,可以和百度开源接口对接。在数据差异化方面,ECharts会找到两组数据之间的差异,然后通过合适的动画去表现数据的变化,让数据动起来[2]。多样的表达方法,趣味的表达形式,既可以丰富人们的视觉感受,又可以满足本次项目需求。
当前时代是一个快速发展的信息时代。信息处理是各行各业必不可少的。随着互联网技术的不断发展,基于前端页面的数据可视化技术也应运而生,并在近年来获得了巨大的发展,成为一种全新的数据处理模式,因其清晰、直观的特点被越来越多的人所喜爱。数据可视化技术对信息的准确性、信息传递技术都提出了更高的要求。
在更加坚信知识改变命运的今天,2019年有1031万人共赴高考[3],高考成为了众多学子改变命运的第一步,但在这之后的择校就成为了他们的另一道鸿沟。近3000所高校,数不清的专业与之对应的分数线,每个人都希望能将自己的分数“物尽其用”,但总会因为信息繁杂、笼统而与“最好”的失之交臂,因此更有效的高校信息获取来源成为当今学子更应注意的问题。
各大高校都有自己的官方网址,上面记录了各种各样的信息,如果要获取相关高校的信息,通常步骤就是先百度高校的官方网址,之后从官方网址的导航内一点点查询自己需要的信息。在查询到信息之后,大部分是通过手抄、记事本等工具记录,在得到大量信息之后又无法清晰的看出数据之间的关联系,对人们造成了很大的困扰。当然,在信息发达的今天,几乎每家每户都有自己的私人电脑,所以也可以将从各个官方网址得到的数据保存在数据整理工具内,让工具代为处理得到的数据,可是光靠人的观察很难不会出现错误。总的来说,需要一个规范、系统的管理方式。尽管私人电脑比较常见,但是没有相应的信息管理系统,也就只能作为闲置资源而已,这就是高校信息数据可视化系统所要解决的问题。
基于这些问题,有必要建立一个高校信息数据可视化系统。用爬虫技术爬取高校信息,由代码自动实现,在节省人力的同时,还提高了工作效率。使高校信息的查询规范化,系统化,程序化,避免信息的复杂性,提高信息处理的速度和准确性,能够及时、准确、有效的进行高校信息查询等操作[4]。另外,本论文文章结构如下:
第1章,相关技术简介:开发语言和开发环境;
第2章,系统分析:社会、经济、技术、操作等;
第3章,系统概要设计:对系统进行需求分析,角色划分,模块设计,功能划分等等;
第4章,系统详细设计与实现:包括对数据库的设计,前端页面的基本绘制,各驱动版本的选择,后台SSM框架的搭建工作,数据库的链接,各功能的开发,角色的权限管理,前后端数据交互,以及最重要的数据可视化处理;
第5章,系统测试。在发开阶段完成系统测试,例如压力测试等。
1 相关技术简介
1.1 框架
1.1.1 SpringMVC框架
高校信息数据可视化系统通过使用SpringMVC框架实现Servlet和JSP相互配合的方法实现所有功能[5]。其目的是为了解决由JSP或Servlet在实现系统功能时出现的固有问题。
1.1.2 Spring框架
Spring是一个开源框架,为解决高校信息数据可视化系统开发的复杂性而创建的。它的优点是采用JavaBean这个概念去解决以前只有EJB才能做到的工作内容。 Spring是一个轻量级的控制反转(IOC)和面向切面(AOP)的容器框架,任何JAVA应用都可以从Spring中受益[6]。
1.1.3 Mybits框架
Mybatis是对于现阶段来说一个非常优秀的持久层框架,在高校信息数据可视化系统中承担了与数据库交互的功能。它的优点是可以自定义SQL,存储过程,同时还能够实现高级映射。高校信息数据可视化系统后台使用Mybatis避免了手动设置参数和获取结果集[7]。
1.2 开发语言
1.2.1 JAVA
JAVA是一种具有简单、跨平台、面向对象等特点的编程语言,相较其它语言来说具有出色的性能。高校信息数据可视化系统选取JAVA语言开发的原因之一就是它可以在不同平台上运行,只需要在对应的平台上安装JAVA虚拟机即可。并且JAVA还提供了NULL指针检测、数组边界检测、异常出口、Byte code校验等功能[8]。以上优点非常符合本项目开发需求。
1.2.2 JavaScript
JavaScript是一种脚本语言,是一种动态类型的,弱类型的,基于原型的语言。其主要用于服务器端执行,高校信息数据可视化系统前端采用JSP页面开发,与JavaScript可以很好地兼容。JavaScript最大的作用还是用于浏览器端,因为它不需要服务器支持。而随着服务器的强壮,虽然现在的程序员更喜欢运行于服务端的脚本以保证安全,但JavaScript仍然以其跨平台、容易上手等优势大行其道[9]。
1.2.3 JSP
JSP页面是由HTML代码和JAVA代码混合而成,使得它既具有JAVA面向对象的特点,也有HTML所有标签。其具有优点:只编写一次,却可以多次、在多个地方运行;拥有很强大的伸缩属性;众多主流开发工具的支持等。JSP可以使用成熟的Beans 组件来实现复杂商务功能[10]。
1.3 设计模式
该系统使用MVC设计模式来实现系统构建。高校信息数据可视化系统的前端用JSP页面,数据可视化部分采用ECharts插件;模型层用MySQL作为数据库层;控制层用SSM框架进行搭建,Bean层和Dao层则采用Mybatis逆向工程生成,减少部分开发周期。在某种意义上,架构的模式部分是让应用程序处于领先地位的全部原因[11]。综上所述,最终选择MVC的开发模式。
1.4 数据库
本系统使用MySQL数据库,高校信息数据可视化系统选取其是因为性价比高,它是少数在开源免费的同时还具有极高性能的一款开源数据库,考虑到开发成本的问题,最终选取MySQL数据库作为高校信息数据可视化系统的数据库层。另外它的可移植性强,MySQL能够运行与多种系统平台上,如windouws,Linux,Unix等,MySQL支持最常用的数据管理功能,适用于中小型企业甚至大型网站应用[12]。
2 系统分析
系统分析也称为可行性分析,是开发高校信息数据可视化系统的必要阶段。在这个阶段内首先要研究的就是系统开发的必要性和可能性。必要性是指在现在的情况下是否有必要开发一个高校信息数据可视化系统来填补这个查询类工具的不足。可行性就要从“社会可行性”,“经济可行性”,“技术可行性”和“操作可行性”四个方面进行分析了。例如开发这个系统是否会造成资源浪费等等。
2.1 社会可行性
社会可行性有的时候也被称为操作可行性。其主要论述了一些需要发布上线的系统在开发和运行中是否可以执行下去,并且也论述了系统在开发和运行中对企业等组织的影响。
在当前通讯速度的不断加快,计算机技术和软件技术的不断更新使管理系统不仅适用于企业或单位,甚至学生也可能需要采用这种先进的数据可视化技术。新的数据可视化系统对数据管理的概念产生了影响,并将带来一些积极的影响。而且,该系统满足相关产业的要求,不与国家法律法规相抵触,对促进信息产业的发展具有一定的作用,因此在社会方面是可行的。
2.2 经济可行性
根据成本/收益分析方法,可以使用此系统所需的软件和硬件资源。由于大学的信息数据可视化系统是作为毕业项目自行开发的,因此开发成本的投资非常小。最初的资本投资主要集中在购买服务器上。因此,这在经济上是可行的。
2.3 技术可行性
该系统主要依靠JAVA技术以MySQL数据库实现,数据可视化由ECharts实现,后台采用目前较为成熟的SSM框架搭建,另外依赖管理采用Maven。Maven将jar包保存到自定义仓库中,随用随取,用之如无,则会自动下载。并且Maven可以将一个项目拆分成多个文件,以实现项目的分布式发布。数据爬取采用Python中的request模块,代理池中的IP地址也均为网络爬取可得,具体流程如图2.1所示。
图2.1 网络爬取流程图
高校信息数据可视化系统采用现阶段流行的开发技术,这样的技术在安全性和健壮性上相对稳定,当然这些技术的兼容性也是足够的,可以匹配市面上大部分电脑机型、系统等。所以,高校信息数据可视化系统在技术上是完全可行的。
2.4 操作可行性
高校信息数据可视化系统开发的核心就是方便。在绘制前端页面时应该有简约、美观等特点,在操作方面应该简单化,使初次操作本系统的用户也可以得心应手。基于系统美观、简介、可操作的特点使得它在操作性上可行。
3 系统概要设计
3.1 系统目标设计
系统开发的总体目标是实现对高校基本信息的爬取,对信息的系统化、规范化、自动化和可视化,减少用户查询信息时的工作量,增加可靠性,从而达到高校信息查询高效率的目的,使得用户能够方便直观地查看相关信息及专业人士能够在短的时间内发现数据的关联性,从而提高查询效率。毕竟计算机的资源是有额度的,因此要设计出功能强大的高校信息数据可视化系统,而且还要尽可能减少对计算机资源的占用。
普通用户的需求是查询各大高校以学校、专业、每年录取分数、省分数线等信息分类的关联信息,以及个人注册信息的修改,学校主要信息包括:每年的录取分数线、高校官网、邮箱、电话、地址、邮编、学校特色等;超级管理员对数据库的所有信息进行维护(日志信息只能查看与删除、其余信息皆可进行增删改查);普通管理员为各个大学官方信息维护账号,可对本校的各类信息进行维护(例如:学校每年录取分数线、专业分布、专业简介、学校简介、学校特色等信息)。
对系统的其他需求:提供方便的查询方法(如:以省份、学校名称、是否为985或者211大学、学校性质等信息进行高校检索,并能反映出高校的基本信息);按照不同的角色身份提供不同的功能授权;提供较为完善的差错控制与友好的用户界面,尽量避免误操作[13]。
综上,高校信息数据可视化系统的开发主要涉及到超级管理员对所有信息表的管理,普通管理员对本校信息的管理,普通用户对高校信息的查看(数据可视化部分)。
3.2 系统设计思想
高校信息数据可视化系统主要是便于普通用户查询高校相关信息。高校信息数据可视化系统的普通用户应该在系统中注册,只有注册成功后,通过注册后的账号密码登录,才可以查询高校的信息。另外在系统中应该还要有各个高校的信息,因为只有系统中存在高校信息,用户才可以通过查询操作进行相关高校信息查询,高校信息数据可视化系统中的所有信息基本都与高校信息相关联。
3.3 系统功能描述
普通用户的功能主要包括两部分:高校信息查询(高校基本信息查询、数据信息可视化等);用户信息管理(普通用户注册、修改、注销注册信息)。
普通管理员的功能主要为本校信息的维护(本校信息包括基本信息地址、邮箱、官网等,专业信息,招生简章信息等)。
高级管理员的主要功能用来维护所有的信息(登录信息,登录日志信息,修改密码信息等)。
3.3.1 高校信息管理
对高校基本信息进行有条件查询(如:高校类型、高校所在地、高校特色、高校名称模糊查询等)、对高校专业信息进行有条件查询(如:专业类型、专业名称模糊查询等)、快讯信息进行有查询(还有分数信息包含数据可视化等)[14]。
3.3.2 用户信息管理
注册新用户、用户注册信息、用户注销。超级管理员可查看高校信息数据可视化系统中所有用户的基本信息,并可以新增用户、删除用户的权限等操作;普通用户也可自己注册系统用户[15],如图3.1所示。
图3.1 权限管理模块图
超级管理员页面应具有的功能模块如下[16]:
超级管理员用户信息维护:超级管理员通过高校信息数据可视化系统可以对用户信息表进行操作,包括修改用户的基础信息,如遇用户忘记密码时,可通过超级管理员强制恢复默认密码;也可随意增加所有权限的用户;也可删除其余用户;
用户日志信息维护:超级管理员通过高校信息数据可视化系统维护所有用户的登录信息;并对用户登录信息进行删除操作;由于用户日志信息是用户在登录时默认记录,所以无法进行增加操作;
密码日志信息维护:超级管理员通过系统维护所有用户的修改密码信息,包括新密码与旧密码等;并对密码修改信息进行删除操作;由于密码修改信息是用户在修改时默认记录,所以无法进行增加操作;
高校类型维护:高校类型信息是在普通用户查询时的条件查询选项,而且是高校在添加基础信息时的选项;
专业类型维护:专业类型信息是在普通用户查询时的条件查询选项,而且是高校在添加基础信息时的选项;在查询各大高校信息本校时,会出现高校专业列表,作为高校专业添加的默认选项;
快讯信息维护:省份信息是在普通用户查询时的条件查询选项,而且是高校在添加基础信息时的选项,如图3.2所示;
图3.2 高校信息数据可视化系统超级管理员功能模块
普通管理员页面应具有的功能模块如下:
招生简章信息维护:普通管理员通过系统可以对本校招生简章信息表进行操作,可以修改招生简章信息,也可随意增加招生简章信息;
高校基本信息维护:普通管理员通过系统维护本校基本信息,维护内容包括修改高校的基本信息,字段包括地址、电话、高校特色、邮箱、城市、邮编、高校类型等;
专业信息维护:普通管理员通过系统维护本校的专业信息,维护内容包括包括添加本校专业名称类型等操作,字段包括专业类型、专业名称、专业简介等;
录取分数线信息维护:普通管理员通过系统可以对本校录取分数线信息维护,维护内容包括添加本年录取分数线的最高分、最低分与平均分等,字段包括但不限于时间、分数、文理等,如图3.3所示;
图3.3 高校信息数据可视化系统普通管理员功能模块
普通用户页面应具有的功能如下:
注册用户:对于游客来说,需要在高校信息数据可视化系统系统中注册系统用户方可使用高校信息数据可视化系统;
注销用户:如果普通用户已经登录且暂时不想再使用高校信息数据可视化系统的用户,可对自己的登录信息进行注销操作;
普通用户查询高校信息:通过可选条件或输入模糊查询信息对系统中已存在的高校信息进行查询,并通过链接找到高校主页,了解更详细的信息;
高校信息数据可视化:在对查询到的高校信息中,有部分信息以可交互式图表的形式展示,例如录取分数信息是以动态折线图与饼状图的形式展示,折线图用来呈现数据的变化趋势,饼状图用来对比数据所占比例;专业信息以饼状交互图内展示,能够使用户在交互途中得到更准确的信息等等。功能如图3.4所示。
图3.4 高校信息数据可视化系统普通用户功能模块
3.4 系统用例图
用例图(Use Case Diagram)是由高校信息数据可视化系统的需求分析到最终实现的第一步,其中要有对角色的设计以及角色对系统的操作。用例图中显示了谁是相关的角色、角色能够使用系统中的什么服务,角色需要为系统做些什么,使角色能够轻松的理解用例图中元素用途,也便于开发人员最后实现这些元素对应的功能。用例图在各种开发之前的设计阶段中被广泛的应用,但是它最常用来描述系统及子系统[17],如图3.5所示。普通管理员如图3.6所示,普通用户如图3.7所示。
图3.5 高校信息数据可视化系统超级管理员用例图
图3.6 高校信息数据可视化系统普通管理员用例图
图3.7 高校信息数据可视化系统普通用户用例图
3.5 数据库设计
3.5.1 数据库技术简介
数据库技术与计算机软件的关系是密不可分的,最早的数据库是IMS数据库系统。在本系统中,我们选用MySQL进行数据管理。
MySQL最大的优点就是容易上手、操作方便,其特性对于初学者相当友好,再加上本系统是针对高校开发的,考虑到MySQL的稳定性、安全机制、处理大数据、处理速度等方面,非常适合采用MySQL数据库管理系统[18]。
3.5.2 E-R图
通过实体关系模型来表示数据库的关系,例如专业基本信息表与专业简介信息表之间就是一一对应的关系,一个专业基本信息对应着一个专业基本信息的简介,一个专业信息简介则对应着多个专业信息简介日志信息,一个高校对应着多个快讯信息,一个快讯信息对应着一个快讯内容并且对应着多个快讯日志信息,一个快讯简介对应着多个快讯简介日志,一个高校对应着多个单位性质和多个毕业生流向信息,一个高校同时还对应着多个分数信息等,如图3.8所示。
图3.8 E-R图
3.5.3 总体表设计
本系统中共用到了21个数据表。在创建数据表的是过程中,组合主键的字段应该尽可能的减少。毕竟主键的功能其中一个是作为索引,另一个是做为子表的外键,组合主键越少,运行时间越短,成本越低,而且节省了索引存储空间[19],具体如表3.1所示:
表3.1 数据库表名称与对应存放数据内容
表名 解释
DANWEI 毕业生流向单位类型数量
JIANJIE 各高校简介
KUAIXUN 存放各高校的招生简章
KUAIXUN_LOG 招生简章更改日志
KUAIXUNCONTENT 招生简章内容存放
KUAIXUNCONTENT_LOG 招生简章内容更改日志
LIUXIANG 毕业生流向地比例
MAJOR 按专业分类
MESSAGE 各高校的基本信息
ONEZHUANYE 单一高校的专业信息
ONEZHUANYEJJ 单一高校专业信息的简介
ONEZHUANYEJJ_LOG 单一高校专业信息的简介日志
PICI 录取批次记录表
SCH_TYPE_NAME 高校类型记录表
SHENGFEN 全国省份信息记录所在表
(表3.1续表)
表名 解释
SHENGSORCE 省分数线记录表
SORCE 高校录取分数线
UPDATE_PASSWORD_LOG 密码更新日志表
USER 用户信息表
USER_LOG 用户登录日志表
ZHUANYE_TYPE 专业类型信息记录表
3.5.4 数据库表结构
DANWEI表是为了存放从网上爬取来的各大高校毕业生流向工作岗位的单位属性,例如其中会有国有企业、外企、民营等等相关信息,具体字段与数据类型如表3.2所示。
表3.2 DANWEI表字段名称与数据类型
是否主键 字段名 字段描述 数据类型 长度
是 ID id INT(11) 11
DSCHID dschid INT(11) 11
DNAME dname VARCHAR(45) 45
DRATE drate FLOAT
D1 d1 VARCHAR(45) 45
D2 d2 VARCHAR(45) 45
D3 d3 VARCHAR(45) 45
D4 d4 VARCHAR(45) 45
D5 d5 VARCHAR(45) 45
KUAIXUN表是为了存放从网上爬取来的各大高校发布的本学校的一些快讯信息,例如其中会有录取详情、热点专业、本校专业特色等等相关信息,具体字段与数据类型如表3.3所示。
表3.3 KUAIXUN表字段名称与数据类型
是否主键 字段名 字段描述 数据类型 长度
是 ID id INT(11) 11
KXID kxid INT(11) 11
KXSCHID kxschid INT(11) 11
KXIS_FULL kxis_full INT(11) 11
KXIS_SINGLE kxis_single INT(11) 11
KXTITLE kxtitle VARCHAR(450) 450
KXTYPE kxtype VARCHAR(45) 45
UPDATE_TIME update_time DATETIME
KXYEAR kxyear VARCHAR(45) 45
KUAIXUN_LOG表是为了快讯信息的日志信息,例如快讯信息的删除、修改等相关操作改变的信息,具体字段与数据类型如表3.4所示。
表3.4 KUAIXUN_LOG表字段名称与数据类型
是否主键 字段名 字段描述 数据类型 长度
是 ID id INT(11) 11
KXID kxid INT(11) 11
KXSCHID kxschid INT(11) 11
KXIS_FULL kxis_full INT(11) 11
KXIS_SINGLE kxis_single INT(11) 11
KXTITLE kxtitle VARCHAR(450) 450
KXTYPE kxtype VARCHAR(45) 45
UPDATE_TIME update_time DATETIME
KXYEAR kxyear VARCHAR(45) 45
KUAIXUNCONTENT表是为了存放从网上爬取来的各大高校发布的本学校的一些快讯信息详细内容,例如其中会有快讯信息的ID、快讯内容、快讯类型等等相关信息,具体字段与数据类型如表3.5所示。
表3.5 KUAIXUNCONTENT表字段名称与数据类型
是否主键 字段名 字段描述 数据类型 长度
是 KXCID kxcid INT(11) 11
ID id INT(11) 11
IS_FULL is_full INT(11) 11
SCHOOL_ID school_id INT(11) 11
STATUS status INT(11) 11
TYPE type INT(11) 11
CONTENT content LONGTEXT
SCHOOL_NAME school_name VARCHAR(450) 450
TITLE title VARCHAR(450) 450
TYPE_NAME type_name VARCHAR(450) 450
UPDATE_TIME update_time DATETIME
KUAIXUNCONTENT_LOG表是为了存放从网上爬取来的各大高校发布的本学校的一些快讯信息详细内容后管理员进行删除、修改等相关操作留下的记录信息,具体字段与数据类型如表3.6所示。
表3.6 KUAIXUNCONTENT_LOG表字段名称与数据类型
是否主键 字段名 字段描述 数据类型 长度
是 ID id INT(11) 11
KXCID kxcid INT(11) 11
IS_FULL is_full INT(11) 11
SCHOOL_ID school_id INT(11) 11
(表3.6续表)
是否主键 字段名 字段描述 数据类型 长度
STATUS status INT(11) 11
TYPE type INT(11) 11
CONTENT content LONGTEXT
SCHOOL_NAME school_name VARCHAR(450) 450
TITLE title VARCHAR(450) 450
TYPE_NAME type_name VARCHAR(450) 450
UPDATE_TIME update_time DATETIME
LIUXIANG表是为了存放从网上爬取来的各大高校毕业生参加工作的流向信息,具体字段与数据类型如表3.7所示。
表3.7 LIUXIANG表字段名称与数据类型
是否主键 字段名 字段描述 数据类型 长度
是 LXID lxid INT(11) 11
LXSCHID lxschid INT(11) 11
LXNUM lxnum INT(11) 11
LXPRO lxpro VARCHAR(45) 45
LXPRONAME lxproname VARCHAR(45) 45
LXRATE lxrate FLOAT
LXSORT lxsort INT(11) 11
MESSAGE表是为了存放从网上爬取来的各大高校发布的本学校的一些基本信息,例如其中会有高校所在地、官网网址、本校特色等等相关信息,具体字段与数据类型如表3.8所示。
表3.8 MESSAGE表字段名称与数据类型
是否主键 字段名 字段描述 数据类型 长度
是 ID id INT(11) 11
AD_LEVEL ad_level INT(11) 11
ADDRESS address VARCHAR(450) 450
ADMISSIONS admissions INT(11) 11
AREA area FLOAT
BELONG belong VARCHAR(45) 45
CENTRAL central INT(11) 11
CITY_ID city_id INT(11) 11
CITY_NAME city_name VARCHAR(45) 45
CODE_ENROLL code_enroll VARCHAR(45) 45
CONTENT content VARCHAR(500) 500
COUNTY_ID county_id INT(11) 11
DUAL_CLASS_NAME dual_class_name VARCHAR(45) 45
E_APP e_app INT(11) 11
E_PC e_pc VARCHAR(45) 45
EMAIL email VARCHAR(450) 450
F211 f211 INT(11) 11
F985 f985 INT(11) 11
(表3.8续表)
是否主键 字段名 字段描述 数据类型 长度
LEVEL level INT(11) 11
LEVEL_NAME level_name VARCHAR(50) 50
LOGO logo VARCHAR(450) 450
NAME name VARCHAR(45) 45
NUM_ACADEMICIAN num_academician INT(11) 11
NUM_DOCTOR num_doctor INT(11) 11
NUM_LAB num_lab INT(11) 11
NUM_LIBRARY num_library VARCHAR(45) 45
NUM_MASTER num_master INT(11) 11
PHONE phone VARCHAR(450) 450
POSTCODE postcode VARCHAR(50) 50
PROVINCE_ID province_id INT(11) 11
PROVINCE_NAME province_name VARCHAR(45) 45
SCHOOL_ID school_id VARCHAR(45) 45
SCHOOL_NATURE school_nature VARCHAR(45) 45
SCHOOL_NATURE_NAME school_nature_name VARCHAR(45) 45
SCHOOL_TYPE school_type VARCHAR(45) 45
SCHOOL_TYPE_NAME school_type_name VARCHAR(45) 45
MSHORT mshort VARCHAR(45) 45
SITE site VARCHAR(500) 500
STATUS status INT(11) 11
TYPE_NAME type_name VARCHAR(45) 45
ONEZHUANYE表是为了存放从网上爬取来的各大高校发布的本学校的一些专业信息,例如其中会有学校ID、专业名称等等相关信息,具体字段与数据类型如表3.9所示。
表3.9 ONEZHUANYE表字段名称与数据类型
是否主键 字段名 字段描述 数据类型 长度
是 OZYID ozyid INT(11) 11
OZYSCHID ozyschid INT(11) 11
OZYNAME ozyname VARCHAR(45) 45
OZYSPECIAL_TYPE ozyspecial_type INT(11) 11
OZYLEVEL3_CODE ozylevel3_code INT(11) 11
OZYSPECIAL_ID ozyspecial_id INT(11) 11
OZYTYPE_NAME ozytype_name VARCHAR(45) 45
OZYCONID ozyconid INT(11) 11
OZYYEAR ozyyear INT(11) 11
OZYSPECIAL_NAME ozyspecial_name VARCHAR(45) 45
ONEZHUANYEJJ表是为了存放从网上爬取来的各大高校发布的本学校的一些专业信息的简介内容,例如其中会有专业信息的ID、专业简介、专业类型等等相关信息,具体字段与数据类型如表3.10所示。
表3.10 ONEZHUANYEJJ表字段名称与数据类型
是否主键 字段名 字段描述 数据类型 长度
是 ZYJJID zyjjid INT(11) 11
ZYJJNUM zyjjnum INT(11) 11
ZYJJCON zyjjcon VARCHAR(10000) 10000
LEVEL1_NAME level1_name VARCHAR(45) 45
LEVEL2_NAME level2_name VARCHAR(45) 45
LEVEL3_NAME level3_name VARCHAR(45) 45
ZYJJNAME zyjjname VARCHAR(45) 45
ZYJJSCHID zyjjschid INT(11) 11
ZYJJSPECIAL_ID zyjjspecial_id INT(11) 11
ONEZHUANYEJJ_LOG表是为了存放从网上爬取来的各大高校发布的本学校的一些专业信息详细内容后管理员进行删除、修改等相关操作留下的记录信息,具体字段与数据类型如表3.11所示。
表3.11 ONEZHUANYEJJ_LOG表字段名称与数据类型
是否主键 字段名 字段描述 数据类型 长度
是 ID id INT(11) 11
ZYJJID zyjjid INT(11) 11
ZYJJNUM zyjjnum INT(11) 11
ZYJJCON zyjjcon VARCHAR(10000) 10000
LEVEL1_NAME level1_name VARCHAR(45) 45
LEVEL2_NAME level2_name VARCHAR(45) 45
LEVEL3_NAME level3_name VARCHAR(45) 45
ZYJJNAME zyjjname VARCHAR(45) 45
ZYJJSCHID zyjjschid INT(11) 11
ZYJJSPECIAL_ID zyjjspecial_id INT(11) 11
UPDATE_TIME update_time DATETIME
SORCE表是为了存放从网上爬取来的各大高校的分数信息,具体字段与数据类型如表3.12所示。
表3.12 SORCE表字段名称与数据类型
是否主键 字段名 字段描述 数据类型 长度
是 ID id INT(11) 11
SCH_ID sch_id INT(11) 11
SCH_NAME sch_name VARCHAR(45) 45
DATE date VARCHAR(45) 45
LAST last VARCHAR(45) 45
TOP top VARCHAR(45) 45
AVG avg VARCHAR(45) 45
PEOPLE people VARCHAR(45) 45
LUQU luqu VARCHAR(45) 45
4 系统详细设计与实现
4.1 数据爬取阶段
数据获取来源主要有高考志愿填报网与高考网,其他辅助信息皆爬取于互联网信息。由于部分网站有反爬取功能,部分为固定IP限定访问次数,所以需要动态IP来解决无法访问的问题[20]。代码如下:
def ip_test(ip):
try:
if ip.split(“:”)[0] == ‘http’:
proxies = {
‘http’: ip
}
else:
proxies = {
‘https’: ip
}
response = requests.get(url=url, headers=head, proxies=proxies)
ip_list.append(ip)
print(ip + “可用”)
except:
print(ip + “不可用”)
for ip in test_list:
ip_test(ip)
print(“总共爬取%s个ip,可用ip为:%s,不可用ip为:%s”
%(len(test_list),
len(ip_list),len(test_list)-len(ip_list)))
import random
def ip_proxy():
ip = ip_list[random.randrange(0, len(ip_list))]
if(ip.find(‘https’) == -1):
proxies = {
‘http’: ip
}
else:
proxies = {‘https’: ip}
return proxies
4.1.1 高校基础信息的爬取
高校基础信息的爬取步骤基本为,找到数据源网页,寻找数据获取方式,如果是json文件则通过固定连接获取[21];如是页面数据,则通过页面解析或得数据,如图4.1所示。
图4.1 解析高校基本信息网站图
在得到页面数据后,通过代码进行分析、整合、爬取并存入数据库中:
try:
tr = soup.find(‘table’,bgcolor=‘#E1E1E1’).find_all(‘tr’)#.find定位到所需数据位置 .find_all查找所有的tr(表格)
listData = []
db = pymysql.connect(“localhost”, “root”, “123456”, “college”)
使用cursor()方法获取操作游标
cursor = db.cursor()
去除标签栏
for j in tr[1:-1]: #tr2[1:]遍历第1列到最后一列,表头为第0列
td = j.find_all(‘td’)#td表格
Date = td[0].get_text().strip() #遍历时间
Last = td[1].get_text().strip() #遍历最低分
Top = td[2].get_text().strip() #遍历最高分
Avg = td[3].get_text().strip() #遍历平均分
People = td[4].get_text() #遍历人数
Luqu = td[5].get_text() #遍历录取批次
sql=“INSERTINTOsorce(sch_name,date,last,top,avg,people,luqu) VALUES(%s,%s,%s,%s,%s,%s,%s)” % (“'” + name[num] + “'”,“'” + Date + “'”, “'” + Last + “'”,“'” + Top + “'”, “'” + Avg + “'”, “'” + People + “'”, “'” + Luqu + “'”)
print(sql)
4.1.2 高校专业信息的爬取
爬取高考志愿网的专业信息,首先获取网站的网址,并根据网址通过浏览器进行访问,访问过后查看网页源代码,查找需要数据的所在标签,如源码中没有所需数据,则通过控制台查看获取数据时的所有网络文件,找到对应的请求数据,并根据其规律进行解析,使用python代码进行爬取[22],效果如图4.2所示。
图4.2 解析高校专业信息网站图
主要代码如下:
def get_message(allnum):
count = 1
db = pymysql.connect(“localhost”, “root”, “123456”, “college”)
# 使用cursor()方法获取操作游标
cursor = db.cursor()
for con in allnum:
sql = “INSERT INTO major(degree,id,level1,level1_name,level2,level2_name,level3,level3_name,limit_year,name,rank,rank_type,rankall,spcode,special_id,view_month,view_total,view_week) VALUES(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)”%(“'”+st(con,‘degree’)+“'”,“'”+st(con,‘id’)+“'”,num(con,‘level1’),“'”+st(con,‘level1_name’)+“'”,num(con,‘level2’),“'”+st(con,‘level2_name’)+“'”,num(con,‘level3’),“'”+st(con,‘level3_name’)+“'”,“'”+st(con,‘limit_year’)+“'”,“'”+st(con,‘name’)+“'”,num(con,‘rank’),num(con,‘rank_type’),num(con,‘rankall’),“'”+st(con,‘spcode’)+“'”,num(con,‘special_id’),num(con,‘view_month’),num(con,‘view_total’),num(con,‘view_week’))
print(sql)
try:
# 执行sql语句
cursor.execute(sql)
# 提交到数据库执行
db.commit()
print(“执行%d次爬取”%count)
except Exception as e:
# 如果发生错误则回滚
db.rollback()
print(e)
print(“回滚”)
4.1.3 高校招生信息的爬取
爬取高考志愿网的招生信息,首先获取网站的网址,并根据网址通过浏览器进行访问,访问过后查看网页源代码,查找需要数据的所在标签,通过控制台查看获取数据时的所有网络文件,找到对应的请求数据,并根据其规律进行解析,使用python代码进行爬取,效果如图4.3所示。
图4.3 解析高校招生信息网站图
主要代码如下:
def get_message(allnum):
count = 1
db = pymysql.connect(“localhost”, “root”, “123456”, “college”)
# 使用cursor()方法获取操作游标
cursor = db.cursor()
for i in allnum:
for t in range(0, 40):
try:
except OSError:
pass
continue
if (result.status_code == 200):
break
try:
res = result.json()
items = res.get(‘data’)
for value in items:
4.1.4 其它信息爬取
其他信息包括毕业生流向单位类型数量、各高校简介、毕业生流向地比例、高校的专业信息、高校专业信息的简介、录取批次记录、高校类型记录、全国省份信息、省分数线、高校录取分数线等。由于代码量众多,不在论文中展示,全部代码放在成品项目中。
4.2 数据清洗过程
从网上获取的数据一般都是参差不齐的,需要对数据进行整理,去除特殊字符,并归并到对应的数据类型中[23],拿其中一部分代码示例,代码如下:
def st(con,t):
stringer = “”
if(con is None):
stringer = “—”
else:
stringer = con
return stringer
sch = pymysql.connect(“localhost”, “root”, “123456”, “school”)
使用cursor()方法获取操作游标
schcursor = sch.cursor()
for i in all_content:
try:
# 执行sql语句
schcursor.execute(sql)
# 提交到数据库执行
sch.commit()
except Exception as e:
# 如果发生错误则回滚
sch.rollback()
print(“回滚”)
4.3 程序流程图
现阶段的主要任务是为了确定该怎样才能实现符合要求的高校信息数据可视化系统,经过现阶段的设计工作,直接可以得出高校信息数据可视化系统的准确精确描述,在之后的编码阶段就可以把描述直接翻译成程序语言。
详细设计的任务应该是在设计过程简单明了的同时在逻辑上能够准确的实现对应功能。它的目的不在于编写出具体的程序,反而是要在编写程序之前设计出程序开发的思路,并根据这个开发思路编写出实际的程序,从而开发出完整的系统,如图4.4所示。
图4.4 整体流程图
4.4 模块详细设计
按照概要设计描述的高校信息数据可视化应具有的具体功能来具体实现该系统,尽量实现高校信息数据可视化系统的每一个要求,做到尽善尽美。
在开发之前将高校信息数据可视化系统按照功能划分成若干个模块,单个模块实现各自部分功能,功能之间通过函数调用。
4.4.1 登录模块
高校信息数据可视化系统登录功能需要对用户身份进行验证,因为高校信息数据可视化系统对所有用户开放,在用户登录时后台会进行角色判断。此外登录界面设计了跳转至注册界面的按钮,新用户可点击跳转至注册界面进行注册操作;
有账号的用户,在通过输入账号和密码,在判断角色权限后转至相应的页面,如图4.5所示。
图4.5 用户登录流程图
登陆成功后登录系统界面如图4.6:
图4.6 登录界面
如果输入的登录信息有误(用户名在数据库中不存在或者密码错误),则显示登录错误提示信息,分别如4.7和图4.8所示:
图4.7 登录验证用户名不存在提示
图4.8 登录验证密码错误提示
主要代码:
@RequestMapping(value=“/userlogin”,method=RequestMethod.POST)
@ResponseBody
public Msg Login(User user,Model model) {
UserExample userExample = new UserExample();
UserExample.Criteria criteria = userExample.createCriteria();
criteria.andUsernameEqualTo(user.getUsername());
List users = userService.getUserName(userExample);
User newuser = new User();
for (int i = 0; i < users.size(); i++) {
newuser = (User)users.get(i);
}
if(user.getPassword().equals(newuser.getPassword())){
newuser.setUpdated(new Date());
userService.updateUser(newuser);
httpSession.setAttribute(“name”, newuser.getUsername());
httpSession.setAttribute(“userType”, “”+newuser.getUserType());
return Msg.success().add(“userType”, “”+newuser.getUserType());
}else{
return Msg.fail();
}
}
4.4.2 超级管理员功能模块界面
超级管理员在登录页面验证通过后,会自动跳转至超级管理员界面,如图4.9所示:
图4.9 超级管理员登录
根据登录用户的角色查询该用户所对应的功能模块为信息管理模块,超级管理员登录成功后可进行信息维护等操作。
主要代码:
@RequestMapping(value=“/selusername”,method=RequestMethod.GET)
@ResponseBody//获取用户名,查询用户名是否存在
public Msg getUsername(@RequestParam(value=“username”)String username,Model model) {
UserExample userExample = new UserExample();
UserExample.Criteria criteria = userExample.createCriteria();
criteria.andUsernameEqualTo(username);
List users = userService.getUserName(userExample);
User user = new User();
for (int i = 0; i < users.size(); i++) {
user = (User)users.get(i);
}
if(username.equals(user.getUsername())){
return Msg.success();
}else{
return Msg.fail();
}
}
从上面的代码可以看出,本项目的所有数据都是从数据库中读取出的。系统表一共是6个表,分别是用户信息表,图4.10为登录日志信息表,主要能对用户、角色等信息在登录过后产生的日志信息进行维护;图4.11为密码修改信息表,主要是有用户在修改密码之后生成的记录信息的维护;图4.12为高校基础维护表,对高校基本信息(名称、地址、高校类型等)进行维护;图4.13为专业信息维护表;图4.14为快讯信息维护表。
图4.10 登录日志维护
图4.11 密码修改信息维护
图4.12 高校基础维护
图4.13 专业信息维护
图4.14 快讯信息维护
4.4.3 普通管理员功能模块界面
普通管理员在登录页面成功登录后,会自动跳转至普通管理员界面,如图4.15所示:
在这里插入图片描述
图4.15 普通管理员登录
高校信息数据可视化系统根据登录用户的角色乐行查询可操作界面,管理员登录成功后可对应的维护信息等。
主要代码:
@RequestMapping(value=“/selusername”,method=RequestMethod.GET)
@ResponseBody//获取用户名,查询用户名是否存在
public Msg getUsername(@RequestParam(value=“username”)String username,Model model) {
UserExample userExample = new UserExample();
UserExample.Criteria criteria = userExample.createCriteria();
criteria.andUsernameEqualTo(username);
List users = userService.getUserName(userExample);
User user = new User();
for (int i = 0; i < users.size(); i++) {
user = (User)users.get(i);
}
if(username.equals(user.getUsername())){
return Msg.success();
}else{
return Msg.fail();
}
}
从上面的代码可以看出,本项目的所有数据都是从数据库中获取。普通管理员可管理的表是5个表,分别是招生简章信息维护表,高校基本信息维护表,专业信息维护表,专业内容表,录取分数维护表,如图4.16、图4.17、图4.18、图4.19所示。
图4.16 招生简章信息维护
图4.17 高校基本信息维护
图4.18 专业信息维护
图4.19 录取分数维护
4.4.4 普通用户模块
普通用户登录界面如图4.20所示:
图4.20 普通用户登录界面
普通用户登录之后会进入首页,首页展示各大高校的轮播图信息,并且导航栏有对应的功能列表可供选择。在页面下方有快速功能栏,里面有一些学校的选项标签,可通过点击选项标签快速找到对应学校。页面下方右侧有高考倒计时,提示高考具体时间,精确到分钟。
图4.21 高校列表界面
高校列表界面显示了所有高校的部分信息(高校所在地、高校性质、学校网址、学校名称、学校校徽等等)。点击学校校徽可进入对应信息页面。另外可通过高校所在地、高校类型、高校特色、学历层次及高校名称等快速查询到所需学校信息,如图4.21所示。
主要代码:
@RequestMapping(“/user/collegecontent”)
public String collegecontent(@RequestParam(value=“id”,defaultValue=“459”)String id,Model model){
MessageExample messageExample = new MessageExample();
MessageExample.Criteria criteria = messageExample.createCriteria();
criteria.andSchoolIdEqualTo(id);
List messages = messageService.getMessage(messageExample);
Message message = new Message();
for (int i = 0; i < messages.size(); i++) {
message = (Message)messages.get(i);
}
model.addAttribute(“pageInfo”,message);
return “user/collegecontent”;
}
@RequestMapping(“/user/allmessage”)
@ResponseBody
public Msg getAllMessages(Model model) {
List messages = messageService.getAll();
return Msg.success().add(“pageInfo”,messages);
}
图4.22 高校具体信息界面
高校具体信息其中包括:高校类型、通讯地址、学校简介、重点实验室数量、联系电话、电子邮箱、博士点、硕士点等重要信息,如图4.22所示。另外高校其他信息如图4.23、图4.24所示。
图4.23 高校专业设置界面
图4.24 高校专业信息可视化界面
图4.25 高校分数信息可视化界面
根据高校历年分数,利用ECharts实现数据的可视化处理,其中折线图部分,纵轴代表分数,横轴代表年份,折线图是为了方便查看历年来的分数走势,上方的饼状图则是为了方便查看历年来最低分、最高分与平均分的差量。数据可视化界面可交互,需随鼠标移动而发生变化,将鼠标悬停在想要查看的数据上,即可查看对应信息[24],如图4.25所示。
代码如下:
trigger: ‘axis’,
showContent: false,
//showDelay: 20, // 显示延迟,添加显示延迟可以避免频繁切换,单位ms
//hideDelay: 100, // 隐藏延迟,单位ms
//transitionDuration : 0.4, // 动画变换时间,单位s
backgroundColor: ‘rgba(0,0,0,0.7)’, // 提示背景颜色,默认为透明度为0.7的黑色
borderColor: ‘#333’, // 提示边框颜色
borderRadius: 4, // 提示边框圆角,单位px,默认为4
borderWidth: 0, // 提示边框线宽,单位px,默认为0(无边框) padding: 5, // 提示内边距,单位px,默认各方向内边距为5,
// 接受数组分别设定上右下左边距,同css
axisPointer : { // 坐标轴指示器,坐标轴触发有效
type : ‘line’, // 默认为直线,可选为:‘line’ | ‘shadow’
lineStyle : { // 直线指示器样式设置
color: ‘#48b’,
width: 2,
type: ‘solid’
},
shadowStyle : { // 阴影指示器样式设置
width: ‘auto’, // 阴影大小
color: ‘rgba(150,150,150,0.3)’ // 阴影颜色
}
},
5 系统测试
软件测试是完成系统的第一步,对高校信息数据可视化系统进行软件测试的目的是为了查找在软件开发阶段存在的问题与漏洞,验证逻辑的正确性以及业务的正确性,并通过不断的测试来提高和完善产品的质量。
在这个过程中,有很多的错误在不断测试中就会浮出水面,针对高校信息数据可视化系统,主要采用的软件测试步骤如下:
5.1 单元测试
单元测试是系统测试的初级方法,在系统开发阶段对系统的每一个模块使用Junit进行测试,在现在这个阶段能够发现一些代码上和程序逻辑上的错误,在发现错误的同时就可随时修补。单元测试贯彻程序编码的整个过程,在编写高校信息数据可视化系统时基本是随时随地都在进行的,如图5.1所示。
图5.1 高校信息数据可视化系统单元测试界面
5.2 集成测试
单元测试结束之后就到了集成测试阶段,在该阶段是对高校信息数据可视化系统来进行综合测试。该测试阶段要对完整系统进行测试,分别从三个用户的角度,对系统的各个功能进行测试,以下的部分测试图5.2所示。
图5.2 集成测试界面
所针对所有用户,测试登录页面、注册页面和密码修改页面的所有功能,测试结果如表5.1所示。
表5.1 登录、注册、忘记密码测试用例
测试项 测试方法 与期望结果
登录界面账号输入框 数据测试 一致
登录界面账号输入错误提示 数据测试 一致
登录界面密码输入框 数据测试 一致
登录界面密码输入错误提示 数据测试 一致
登录界面提交测试 点击测试 一致
注册界面账号输入框 数据测试 一致
注册界面账号输入格式错误提示 数据测试 一致
注册界面密码输入框 数据测试 一致
注册界面密码输入不一致提示 数据测试 一致
注册界面邮箱输入框 数据测试 一致
注册界面邮箱输入格式错误提示 数据测试 一致
注册界面提交测试 点击测试 一致
忘记密码界面账号输入框 数据测试 一致
忘记密码界面账号输入格式错误提示 数据测试 一致
忘记密码界面密码输入框 数据测试 一致
忘记密码界面密码输入格式错误提示 数据测试 一致
(表5.1续表)
测试项 测试方法 与期望结果
忘记密码界面邮箱输入框 数据测试 一致
忘记密码界面邮箱输入格式错误提示 数据测试 一致
忘记密码界面提交测试 点击测试 一致
所针普通用户,普通用户查询高校信息时的所有功能,包括高校列表浏览、高校条件查询等,测试结果如表5.2所示。
表5.2 普通用户测试用例
测试项 测试方法 与期望结果
普通用户信息显示 观察测试 一致
普通用户退出 点击测试 一致
首页轮播图 观察测试 一致
首页高考日期倒计时 观察测试 一致
首页跳转链接 点击测试 一致
高校列表查询 点击测试 一致
高校列表按高校名称模糊查询 数据测试 一致
高校列表跳转高校主页 点击测试 一致
高校基本信息显示 观察测试 一致
高校分数信息数据可视化 点击测试 一致
高校专业信息数据可视化 点击测试 一致
高校专业简介显示 观察测试 一致
高校毕业生流向地数据可视化 观察测试 一致
高校毕业生流向地数据可视化图片下载 点击测试 一致
高校毕业生流向地数据可视化信息刷新 点击测试 一致
高校毕业生流向地数据文字显示 观察测试 一致
高校毕业生入职类型数据可视化 观察测试 一致
毕业生入职类型数据可视化图片下载 点击测试 一致
毕业生入职类型数据可视化信息刷新 点击测试 一致
高校毕业生入职类型数据文字显示 观察测试 一致
所针普通管理员,普通管理员管理本校信息的各项信息,包括高校基本信息、高校专业、高校快讯等,测试结果如表5.3所示。
表5.3 普通管理员测试用例
测试项 测试方法 与期望结果
高校基本信息显示 观察测试 一致
高校基本信息的填写 数据测试 一致
高校基本信息的修改 点击测试 一致
高校基本信息链接跳转 点击测试 一致
专业信息的添加 数据测试 一致
专业信息的显示 观察测试 一致
专业信息的修改 数据测试 一致
专业信息的删除 点击测试 一致
点击专业信息显示简介 观察测试 一致
专业简介输入 数据测试 一致
专业简介修改 点击测试 一致
快讯信息的添加 数据测试 一致
快讯信息的显示 观察测试 一致
快讯信息的修改 数据测试 一致
快讯信息的删除 点击测试 一致
点击快讯信息显示简介 观察测试 一致
快讯简介输入 数据测试 一致
快讯简介修改 点击测试 一致
分数信息的添加 数据测试 一致
分数信息的显示 观察测试 一致
分数信息的修改 数据测试 一致
分数信息的删除 点击测试 一致
所针超级管理员,超级管理员管理账号、日志等各项信息,包括账号信息、各项日志等,测试结果如表5.4所示。
表5.4 超级管理员测试用例
测试项 测试方法 与期望结果
账号信息的添加 数据测试 一致
账号信息的显示 观察测试 一致
账号信息的修改 数据测试 一致
账号信息的删除 点击测试 一致
(表5.4续表)
测试项 测试方法 与期望结果
账号信息的模糊查询 数据测试 一致
密码修改日志信息的显示 观察测试 一致
密码修改日志信息的删除 点击测试 一致
登录日志信息的显示 观察测试 一致
登录日志信息的删除 点击测试 一致
高校基本信息的显示 观察测试 一致
高校基本信息的删除 点击测试 一致
5.3 压力测试
使用压力测试的软件,针对同时在线用户数量、同时间的用户获取数据量、同时间的页面响应进行压力测试[25]。
5.3.1 在线用户数量压力测试
这部分主要是通过同一时间的用户在线数量和一段时间内的用户在线数量进行压力测试。使用Apache Jmater软件创建进程。
首先以千位用户同时访问进行测试,可以看到平均响应时间为664,并没有发现丢包现象,总用时1.9秒左右,效果如图5.3所示。
图5.3 千位用户压力测试界面
然后以万位用户同时访问进行测试,可以看到平均响应时间为1110,并没有发现丢包现象,总用时9秒左右。可以发现随着同时访问数量的增加,服务器的响应时间也会随之增加,但还未出现崩溃或丢包的现象。效果如图5.4所示。
图5.4 万位用户压力测试界面
5.3.2 用户获取数据量压力测试
首先以千次同时访问进行测试,可以看到平均响应时间为132,并没有发现丢包现象,总用时1秒左右,效果如图5.5所示。
图5.5 千次访问压力测试界面
然后以万次同时访问进行测试,可以看到平均响应时间为2675,并没有发现丢包现象,总用时20秒左右。可以发现随着同时访问数量的增加与数据包大小的增加,服务器的响应时间也会随之明显增加,但还未出现崩溃或丢包的现象。效果如图5.6所示。
图5.6 万次访问压力测试界面
5.3.3 页面访问压力测试
首先以千次同时访问进行测试,可以看到平均响应时间为2,并没有发现丢包现象,总用时5秒左右[26],效果如图5.7所示。
图5.7 千次访问压力测试界面
然后以万次同时访问进行测试,可以看到平均响应时间为4,并没有发现丢包现象,总用时8秒左右,效果如图5.8所示
图5.8 万次访问压力测试界面
因为该系统作为辅助信息查询类工具,在现阶段具有同时能处理以万计数的请求就可以。当然,该系统应该还有更强大的数据处理能力,这与服务器的设备与带宽也相关[27],这个系统并不是决定信息处理速度的唯一关键。
结 论
经过几个月的设计和开发,基于SSM的高校信息数据可视化系统基本开发完毕。其功能也符合先前提出的需求。在开发之前,曾访问过许多Web开发相关的网站,同时也搜集了大量有关于Web开发相关的资料作为参考并运用,从中也学习了很多之前没有了解过的关于Web开发方面的知识。
高校信息数据可视化系统可以作为一般的查询类系统,对于该系统来说,模块清晰,功能明确,还具有如下特点:
采用B/S的结构体系,使系统同时具有高维护性和高重用性。
采用SSM框架的开发模式,使逻辑分离,代码更加容易管理。
后台采用的MySQL数据库,有可扩展、易于使用和安全的特点。
但由于本人开发时间和开发技术实在有限,还有很多地方可以改进。例如浏览界面的美观方面,功能上的进一步优化,在数据库的负载均衡方面,对人性化的处理还不是特别细致。对本人来说,整个系统的开发是符合预期目标的,但有些方面还要在今后的学习中提高。
毕业设计对我来说并不仅仅是毕业的要求与任务,通过完成高校信息数据可视化系统让我知道了自己这些年来学习知识的不足,让我掌握了发现问题并解决问题的能力,学习到了很多书本上学习不到的知识,也让我对书本上的知识有了更加灵活的认识。在每个开发阶段和设计阶段我都遇到各种各样的问题并且学习到更多新的知识,对自己的动手能力提高很大。在完整高校信息数据可视化系统过程中,本人基本上完成了系统各个模块的功能,已经符合毕业设计的要求。
此次开发高校信息数据可视化系统为我以后的学习积累了很多宝贵的经验。在系统开发完成的同时也感到了劳动成果的来之不易,那时才明白了毕业设计是一个从学校走向社会最后锻炼的机会。
致 谢
在这次毕业设计中,随着毕业论文的结尾,短暂而又充实的大学生涯也将落下帷幕。大学生活总是使人难忘,五年来,给我帮助的人太多太多,令我感动的时刻数不胜数,岁月的脚步依然匆匆,我会把每一份关怀,每一份勉励都铭记、珍藏。
这次毕业设计能够顺利完成,首先应该感谢我的指导老师李朋老师和王凤伟老师。他们渊博的学识、仔细认真的态度、对问题深刻的分析以及对我热情的指导和鼓励,都给我留下了深刻的印象,使我终身难忘。他们以其严谨的治学态度、精益求精的科学精神、良好的工作作风,深深地感染和激励着我。老师们平时对待工作认真负责,而且为人和善,在老师们的指导、鼓励和关怀下,我完成了该软件系统的开发和系统文档的编写。在做毕业设计的这几个月中,从课题的选择,到文档的编写,再到项目的最终完成,老师们也孜孜不倦的帮我解决了许多专业问题,也教会了我许多为人处事的道理,对我以后的人生有很大的启示。在此,要对老师们表示衷心的感谢。老师们,谢谢您们的栽培!
同时,也要感谢这四年来在学习和生活中给予我关怀的同学们,同窗的友情同样珍贵,我们一同学习生活,这一路与你们同行真好!感谢我所有朋友对我的帮助、关怀。希望以后大家无论在生活中还是工作上都发挥团结协作的精神,因为团结就是力量!
我更要感谢我的家人对我学业上的支持和鼓励,感谢所有关心帮助过我的人,感谢学校!
是大家对我的关爱、理解和支持陪伴我度过生命中许多难忘的日子,你们是我学习和生活的精神支柱,谢谢,谢谢你们!希望每个人在以后的生活工作中事事顺心。
本系统开发的成功,是对我几年来的大学学习生活所作的总结,通过它扩大了知识面,也增加了不少实践的经验,为以后的学习生涯打下了坚实的基础。
由于个人水平有限,在该软件系统的设计和系统文档的编写过程中难免出现错误,希望老师和同学们批评,指正。
参考文献
[1] 李苹, 李勇, 范全润. 高校教学状态数据可视化分析平台的设计与实现[J]. 实验技术与管理, 2020, (05) :46-51
[2] 郑戟明, 柳青. ECharts在数据可视化课程中的应用[J]. 电脑知识与技术, 2020, 16(2) :9-11
[3] 汤仕琦. 基于指数平滑法的高考人数预测研究[J]. 财会学习, 2019, (4) :128-129
[4] 戴姣. 图书管理系统的设计的可行性与需求分析[J]. 东方教育, 2015, (4) :531-531
[5] 吴玫, 刘大君. 基于Struts2框架的在线课程平台系统的设计[J]. 软件, 2020, 41(3) :242-244
[6] 孙旸. 基于SSM框架的高校信息采集管理系统设计与实现[J]. 无线互联科技, 2019, 16(23) :48-50
[7] 王丽, 宗镇欣. 基于SSM框架的学生信息管理系统[J]. 电脑知识与技术, 2019, 15(28) :95-96
[8] 田昊坤. JAVA编程平台的优点分析[J]. 中国科技投资, 2017, (19) :370
[9] 郭珂. 用JavaScript脚本语言编写试题网页[J]. 电脑编程技巧与维护, 2014, (6) :65-67
[10] 苏原, 伍家乐, 谢明. 基于JSP技术的工作提示服务网[J]. 电脑知识与技术, 2020, 16(8) :64-65
[11] 冉启武, 皇金锋, 董锋斌等. 基于MVC模式的教学管理电子信息系统设计[J]. 现代电子技术, 2020, 43(4) :54-57
[12] 刘建宏, 钟嫩妹. PHP和MySQL在网站开发中的优势[J]. 数码世界, 2017, (6) :172
[13] 洪植林. 基于SSM框架的高校实验室信息管理系统的设计与实现[D]. 浙江 :浙江工业大学, 2016 :14-15
[14] 时义斌. 高校学生信息管理系统的设计与实现[J]. 数码世界, 2020, (2) :205
[15] 李文杰. 基于SSM框架的高校信息采集与管理系统[J]. 信息记录材料, 2019, 20(10) :144-145
[16] R Fauzan, R Fauzan, V Y Pamungkas, et al.Information System for Asset Management[J]. IOP Conference Series: Materials Science and Engineering, 2019, 662(2) :022020 (8pp)
[17] 郑申茂. 基于JAVAEE和Android的农业信息服务平台设计与开发[D]. 华中师范大学, 2014 :24-28
[18] 郑明秋, 蒙连超, 赵海侠主编. MySQL数据库实用教程[M]. 北京 :北京理工大学出版社, 2017.12 :1-11
[19] 王兵兵, 陈能, 丁雅雪. 基于MYSQL的智慧社区助老关爱平台数据库设计[J]. 信息通信, 2019, (2) :152-154
[20] 杜超. 浅析基于python的网络爬虫技术[J]. 数码设计(下), 2019, (12) :15
[21] Linxuan Yu, Linxuan Yu, Yeli Li, et al. Summary of web crawler technology research[J]. Journal of Physics : Conference Series, 2020, 1449(1) :012036 (7pp)
[22] Md. Abu Kausar, V. S. Dhaka, Sanjeev Kumar Singh.Implementation of Parallel Web Crawler through .NET Technology[J]. International Journal of Modern Education and Computer Science (IJMECS), 2014, 6(8) :59-65
[23] 翟曜, 李芬芬, 张正伟等. 学堂在线MOOC课程的数据爬取与统计分析[J]. 电脑与电信, 2019, (9) :33-35
[24] 陈俊生, 彭莉芬. 基于Python+ECharts的大数据可视化系统的设计与实现[J]. 安徽电子信息职业技术学院学报, 2019, 18(4) :6-22
[25] 薛金川. Web系统压力测试方法研究与实践[J]. 科技创新与应用, 2016, (19) :80-80
[26] 吕成成, 张龙, 邓茜等. Web应用程序搜索功能的组合测试[J]. 计算机科学与探索, 2019, (11) :1119-1131
[27] Di Lu, Di Lu, Yuping Qiu, et al.Design of Campus Resource Sharing Platform based on SSM Framework[J]. IOP Conference Series : Materials Science and Engineering, 2019, 490(6) :062043 (6pp)