一:项目背景
智慧校园数据监控系统是在信息化发展的大趋势下提出的,通过信息化的结合,科学化的管理,对在校学生的行为习惯进行监控并加以分析
- 智慧校园数据监控系统的简要概述
智慧校园数据监控系统通过对学生行为的监控,提高学生状态信息的及时性和准确性,从而满足学校对学生情况进行监控的要求。智慧校园监控系统能够提高学生管理工作的效率和准确性,即使正确地采集学生行为数据进行存储,之后调用数据并对其进行分析,最后将数据可视化,提高管理工作的效率和学生的自制能力
- 智慧校园数据监控系统的意义
智慧校园数据监控系统的提出为校园智能化发展提供了新的方向,科学,有效的管理模式能够充分发挥学生的潜力,使学生养成自主学习,生活自律的良好习惯,具有对校园管理迅速,灵活,正确地理解和决策的能力。
- 智慧校园数据监控系统的优势
智慧校园数据监控是为了满足校园管理需求并利用互联网的发展给学生提供一个现代化,智能化的校园环境,为学生管理提供方便。
本系统使用柱状图,折线图,饼状图,雷达图,词云图,瀑布图等形式展示数据
智慧校园数据监控系统的功能和开发
智慧校园数据监控系统的开发
开发目标
- 需求获取:获取与智慧校园监控系统对象和来源不同的需求信息。
- 需求分析:对获取的需求信息进行分析,再综合已收集到的需求信息,找出不足的地方,进一步完善需求,建立智慧校园数据监控系统的需求模型。
- 需求定义:使用合适的语言进行描述,按照标准格式描述智慧校园数据监控系统的需求,并生成需求规格说明以及相关文档。
- 需求验证:审查和验证需求规格说明以及相关文档是否正确,完整地表达了用户对智慧校园数据监控系统的需求。
建模工具
目前,常用的建模工具有三种
- Pencil
Pencil是专业的手绘风格原型图绘制软件,主要基于Firefox的GUI开发,既可以当作Firefox插件使用,也可以独立运行,可支持导出HTML,PNG,Word等格式文件。
- Visio
Visio是office软件系列中用于绘制流程图和示意图的软件,是目前国内用得最多的CASE(计算机辅助软件工程)工具,他提供了日常使用的大多数框图的绘画功能,其优势在于使用方便,安装后的Visio既可以单独运行,也可以在word中作为对象插入,与word集成良好。
- Axure
Axure是由美国 Axure Software Solution 公司开发的一款快速原型设计工具,它能快速,高效地创建原型,同时支持多人协作设计和版本控制管理,让负责定义需求和规格,设计功能和页面的工程师能够快速创建应用软件和web(全球广域网)网站的线框图,流程图,原型和规格说明文档。
二:需求分析
需求分析的概述,重要性,以及如何对系统进行需求分析
- 需求分析也被称作软件需求分析或系统需求分析,是开发人员通过对用户描述的功能及性能等需求进行深入,细致的研究和分析,准确理解用户的具体要求,将用户非形式的需求表述转化为完整的需求定义,就软件功能等需求达成一致意见,从而确定系统必须做什么的过程。
- 需求分析是软件开发中一个非常重要的环节,在开发过程中起决定性作用。需求分析具有方向性和决策性,为开发指明了方向,提供了策略。需求的合理性越强,开发的可行性也越强,可以说需求分析的重要性远远大于开发过程。通过需求分析这个环节,可以明确智慧校园数据监控系统的功能要求以及页面布局要求,确定系统开发的非功能需求等。
- 智慧校园数据监控系统采用原型化方法进行需求分析,利用原型图直观的分析页面的布局和功能及其实现的难易程度,反映系统的原貌,便于开发人员根据用户需求全面的考虑软件系统的体系结构和算法,了解系统要做什么,怎么做,做到何种程度以及系统对数据库,开发环境,框架需求等因素的要求。
功能需求
分为四个大模块,每个模块划分几部分小模块
登录模块:

登录模块包含用户登录和忘记密码两个子模块,结构如图1.1所示。
人员管理模块:

人员管理模块包含学生管理和教师管理两个子模块,结构如图1.2所示
综合信息分析模块:

综合信息分析模块包含综合信息,餐饮数据分析,网络数据分析,设备与科研数据分析,就业数据分析五个子版块,结构如图1.3所示
学生数据分析模块:

学生数据分析模块包含综合信息,个人综合数据分析,个人活动数据分析,个人信息修改四个子模块,结构如图1.4所示
非功能需求
性能要求:
本系统需要在网络正常的大数据环境中运行,服务器应能够保证系统正常运行和及时响应:
- 处理小批量实时数据响应时间应在2秒以内
- 处理大批量离线数据响应时间应在60秒以内
安全性:
本系统的核心大数据处理程序不与公网连接,安全性较高。
- 本系统采用Django框架进行数据展示,采用MVT框架模式,即模型M,视图V和模板T。数据分析处理部分采用大数据技术,从而做到了数据分析与展示分离,保证了原数据的安全性。
- 本系统仅在进行数据展示时才与公网连接,数据分析在局域网内完成,从物理层面保证了数据的安全性。
三:系统详细设计
本系统通过离线数据分析和实时数据分析两种方式相结合实现。
- 离线数据处理
离线数据处理也叫批处理,主要应用于不需要快速响应的数据分析和需要对历史数据进行分析的场景。离线数据处理各步骤之间是串行计算离线处理,如图2.1所示

- 实时数据处理
实时数据处理用于需要快速响应的场景和在短时间内计算大量数据集。实时数据处理采用Lambda框架,Lambda架构的目标是设计出一个能满足实时大数据系统的关键特性的架构,可集成Hadoop,Kafka,Storm,Spark等各类大数据组件,实时数据处理平台的架构 如图2.2所示

此模块是为以上分析模块设计提供思路和参数暂不细讲
包括系统界面设计的指导
四:数据库设计
本模块为整套系统提供数据支持。
- 数据库设计概述
数据库设计(database design)是在指定的生产环境中建立数据库,构建出性能最优的数据库模式,从而满足应用程序的需求。数据库设计在开发过程中是最重要且复杂的步骤,往往耗费整个开发周期的45%以上。数据库设计不仅仅是创建页面中所需的字段,更重要的是考虑系统运转,模块交互,中转数据和表之间的联系等。
- Mysql数据库的优势
Mysql是一个多用户多线程的SQL数据库,其以客户机/服务器结构实现由一个服务器守护程序和不同的客户程序组成,能够快捷,有效,安全地处理大量数据。
概念模型
概念模型设计是定义用户最终的数据需求和将元素按逻辑单位分组的过程。概念模型设计应独立于最终的物理实现,其目的是便于用户掌握数据的组织结构以及更加全面地设计物理数据库。概念模型设计常用的方法是实体关系方法,即研究模块内需要什么实体以及实体间的联系方式,并画出E-R(entity relationship diagram)图。采用实体关系方法可以建立满足用户需要的概念模型。
根据智慧校园数据监控系统各模块的需求可知,系统需要保存的信息如表2.3所示
| 模块名称 | 基本信息 |
| 登录模块 | 用户登录,忘记密码 |
| 人员管理模块 | 学生管理,教师管理 |
| 综合信息分析模块 | 综合信息,餐饮数据分析,网络数据分析,设备与科研数据分析,就业数据分析 |
| 学生数据分析模块 | 综合信息,个人综合数据分析,个人活动数据分析,个人信息修改 |
建立数据库表时对照着概念模型,给出了表的一些参数进行对照建表,如学生表给出的(stuno,name,sex,class,major,address,education,password,tfwork等)根据这些建表保存数据。
各模块介绍
登录模块
1.登录模块实体
登录模块使用到了学生信息实体和教师信息实体,如下图所示


学生信息实体描述了学生的学号,姓名等基础信息和就业情况等信息,学生信息由管理员统一导入实体中:教师信息实体描述了教师的工号,职称等信息。其中学生的学号和教师的工号为登录系统的账号,用户在登录页面输入与数据库匹配的账号和密码即可登录。以学生账号登录只能修改当前登录的账号的姓名,年级,专业,住址和密码。
2.登录模块E-R图
由实体和实体关系可以分析出本模块的E-R图,如图所示,其中矩形代表实体,菱形代表实体间的关系。

人员管理模块
1.人员管理模块实体
人员管理模块中使用的实体包括学生的信息,职称人数比例,教师男女比例,各专业中不同职称的人数,就业比例,教师信息,学生男女比例和各专业人数比例。
简单介绍几个实体:
(1).学生信息
学生信息实体描述了学生的基本信息,学生的基本信息由管理员插入数据实体中,实体中包含学号,姓名,性别,年级,专业,住址等基础信息和就业情况等信息。用户不能自行注册新用户,只能够修改当前登录账号的姓名,性别,年级,专业,住址和密码。
(2).职称人数比例
职称人数比例实体描述了每个职业的人数,实体中包含职称和数量。职称人数比例由Hive对teacher数据集根据职称进行分组统计所得,数据由系统自动写入,用户无法修改。
(3).教师男女比例
教师男女比例实体描述了教师的男女比例,实体中包含性别和数量。男女比例由Hive对teacher数据集根据性别进行分组统计所得,数据由系统自动写入,用户无法修改。
(4).就业比例
就业比例实体描述了就业与未就业学生的比例,实体中包含是否就业和数量。就业比例由Hive对student数据集根据是否就业进行分组统计所得,数据由系统自动写入,用户无法修改。
(5).教师信息
教师信息实体描述了教师的基本信息,教师的基本信息由数据集经过MapReduce数据清洗后导入Mysql中,用户不能自行注册新账号,只能够修改姓名,性别,职称,专业和密码。实体中包含工号,姓名,性别,职称,专业和密码。
(6).各专业人数比例
各专业人数比例实体描述了每个专业的学生人数,实体中包含了专业和数量。各专业人数比例由Hive对学生信息表中的专业进行分组统计所得,数据由系统自动写入,用户无法修改。
2.人员管理模块E-R图
由实体和实体关系可以分析出本模块的E-R图,如图2.5所示,其中矩形代表实体,菱形代表实体间的关系。

综合信息分析模块
1.综合信息模块实体
综合信息模块包括各年级就业人数对比,教师人数统计,生源地分布,学生分布,人群消费,使用流量统计和实时消费额等实体
简单介绍
(1).使用流量统计
使用流量统计实体描述了学生访问各类型网站所使用的流量,实体中包含连接类型和流量。使用流量由Hive对internet数据集根据连接类型进行分组并对流量进行求和所得,数据由系统自动写入,用户无法修改。
(2)实时消费额
实施消费额实体描述了所有在校生实时的消费总额信息,实体中包含了时间和金额。实时消费额由Hive对canteen数据集根据时间和金额进行实时计算总金额所得,数据由系统自动写入,用户无法修改。
2。综合信息模块E-R图
由实体和实体关系可以分析出本模块的E-R图,如图2.6所示。其中矩形代表实体,菱形代表实体间的关系。

此模块还包含(餐饮数据分析模块实体,网络数据分析模块实体,设备与科研数据分析模块实体,就业数据分析模块实体)这里就不列举了
学生数据分析模块
1.综合信息模块分析
综合信息模块包括各年级就业人数对比,市场需求学历,薪水分布,就业去向分布,各专业平均薪资,各城市需求人数,各专业就业人数排名前五和就业学生总数。
这是最后一个模块和前面几个模块大差不差,就不多做介绍,数据都是由系统自动写入,用户无法修改,下一个模型比较麻烦,所以这里就不过多介绍,留着力气给下一个模型。
关系模型
1.登录模块
根据登录模块E-R图和实体图,可以分析出实体中包含的列,从而画出本模块的关系模型。
(1).学生信息(用户编号,学号,姓名,性别,年级,专业,住址,学历,密码,是否就业,就业地,薪资,行业,是否与专业相关,性别学历)。
(2)教师信息(用户编号,工号,姓名,性别,职称,专业,密码)。
确定好概念模型和关系模型之后,需要建立数据库的物理数据模型。物理数据模型是对实体和实体之间的具体管理进行模型化处理转换而成的,每个实体对应一个物理数据模型。
简单来说就是建表,我是在Hive中创建的表,大约51个表,首先要创建的是基础表,单个写太慢了,使用脚本来创建更快捷。
#基础表创建
hive -e "CREATE EXTERNAL TABLE internet(stuno string,time string,address string,type string,flow int,url string,urltype string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LOCATION '/school/internet/output';"
hive -e "CREATE EXTERNAL TABLE student(stuno string,name string,sex string,class string,major string,address string,education string,password string,tfwork string,workaddress string,salary float,industry string,specialty string,gendereducation string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LOCATION '/school/student/output';"
hive -e "CREATE EXTERNAL TABLE teacher(jobn string,name string,sex string,title string,major string,password string)ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LOCATION '/school/teacher/output';"
hive -e "CREATE EXTERNAL TABLE canteen(stuno string,time string,address string,money float) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LOCATION '/school/canteen/output';"
hive -e "CREATE EXTERNAL TABLE consumption(stuno string,time string,address string,type string,money float) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LOCATION '/school/consumption/output';"
hive -e "CREATE EXTERNAL TABLE equipment(devicename string,equipmenttype string,time string,money float) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LOCATION '/school/equipment/output';"
hive -e "CREATE EXTERNAL TABLE scientificresearch(research string,projecttime string,arrivaltime string,money float)ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LOCATION '/school/scientificresearch/output';"
hive -e "CREATE EXTERNAL TABLE work(time string,typesofwork string,level string,education string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LOCATION '/school/work/output';"
hive -e "CREATE EXTERNAL TABLE recruit(post string,company string,salary string,releasetime string,education string,number int,address string,experience string,log string,lat string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LOCATION '/school/recruit/output';"
hive -e "CREATE EXTERNAL TABLE lifecharacteristics(stuno string,library string,wifirequest string,absorbed string,diligence string,eat string,sleep string,healthy string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LOCATION '/school/lifecharacteristics/output';"
#创建Hive表
hive -e "DROP TABLE internet;"
hive -e "DROP TABLE student;"
hive -e "DROP TABLE teacher;"
hive -e "DROP TABLE canteen;"
hive -e "DROP TABLE consumption;"
hive -e "DROP TABLE equipment;"
hive -e "DROP TABLE scientificresearch;"
hive -e "DROP TABLE work;"
hive -e "DROP TABLE recruit;"
hive -e "CREATE EXTERNAL TABLE internet(stuno string,time string,address string,type string,flow int,url string,urltype string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LOCATION '/school/internet/output';"
hive -e "CREATE EXTERNAL TABLE student(stuno string,name string,sex string,class string,major string,address string,education string,password string,tfwork string,workaddress string,salary float,industry string,specialty string,gendereducation string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LOCATION '/school/student/output';"
hive -e "CREATE EXTERNAL TABLE teacher(jobn string,name string,sex string,title string,major string,password string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LOCATION '/school/teacher/output';"
hive -e "CREATE EXTERNAL TABLE canteen(stuno string,time string,address string,money float) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LOCATION '/school/canteen/output';"
hive -e "CREATE EXTERNAL TABLE consumption(stuno string,time string,address string,type string,money float) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LOCATION '/school/consumption/output';"
hive -e "CREATE EXTERNAL TABLE equipment(devicename string,equipmenttype string,time string,money float) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LOCATION '/school/equipment/output';"
hive -e "CREATE EXTERNAL TABLE scientificresearch(research string,projecttime string,arrivaltime string,money float) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LOCATION '/school/scientificresearch/output';"
hive -e "CREATE EXTERNAL TABLE work(time string,typesofwork string,level string,education string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LOCATION '/school/work/output';"
hive -e "CREATE EXTERNAL TABLE recruit(post string,company string,salary string,releasetime string,education string,number int,address string,experience string,log string,lat string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LOCATION '/school/recruit/output';"
hive -e "CREATE EXTERNAL TABLE lifecharacteristics(stuno string,library string,wifirequest string,absorbed string,diligence string,eat string,sleep string,healthy string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LOCATION '/school/lifecharacteristics/output';"
#删除
hive -e "drop table academic_requirements"
hive -e "drop table address_people_num"
hive -e "drop table address_work_num"
hive -e "drop table average_total_canteen_income"
hive -e "drop table card_solution_num"
hive -e "drop table catering_group_composition"
hive -e "drop table catering_score"
hive -e "drop table class_major_people_num"
hive -e "drop table class_work_num"
hive -e "drop table clean_core"
hive -e "drop table daily_frequency"
hive -e "drop table diligent_defen"
hive -e "drop table education_num"
hive -e "drop table equipment_type_amount"
hive -e "drop table flow_urltype"
hive -e "drop table income_each_canteen"
hive -e "drop table income_of_each_canteen"
hive -e "drop table internet_use"
hive -e "drop table life_score"
hive -e "drop table major_avg_salary"
hive -e "drop table major_title_num"
hive -e "drop table major_work_number"
hive -e "drop table male_to_female_ratio"
hive -e "drop table master_time_domain_traffic"
hive -e "drop table money_of_research"
hive -e "drop table month_money"
hive -e "drop table month_money_teaching"
hive -e "drop table my_concern"
hive -e "drop table number_of_professional_titles"
hive -e "drop table phd_time_domain_flow"
hive -e "drop table professional_scale"
hive -e "drop table quantity_of_research"
hive -e "drop table sex_proportion"
hive -e "drop table statistics_of_papers_published"
hive -e "drop table statistics_of_scientific_research_works"
hive -e "drop table student_address_num"
hive -e "drop table t_f_work"
hive -e "drop table title_proportion"
hive -e "drop table undergraduate_time_domain_traffic"
hive -e "drop table wage_distribution"
hive -e "drop table whereabouts_of_employment"
hive -e "drop table wifi_connect_num"
hive -e "drop table wifi_type_data_traffic"
hive -e "drop table work_experience_distribution"
把脚本上传到/opt/var/sh(这是我的目录)给与执行权限就可以运行,运行脚本时遇到一些问题
创建的基础表hive和hdfs网页上面都会存在,这个运行没有问题就可以进行数据分析,运行结果如下图
下图就是基础表创建

基础表建好之后可以查询一下是否全部创建成功,查询指令如下
hive -e "show tables;"
我在创建表那里给出了三段代码,分布是基础表和Hive表还有一个是删除表的指令,这三个代码分布是三个可执行脚本,运行时可能会遇到”反引号“问题,等出现问题时那个字段出现问题进行单独改正即可。
查询之后就可以进行数据分析
实现可视化用的是Django
2.数据库安全设计
该系统的所有原数据均保存在大数据集群中,在不需要与可视化系统进行数据交互时处于独立状态,不与外部网络进行连接,以保证数据的安全。数据可视化系统采用Mysql数据库,并设置为只允许已授权的用户访问和读取数据库的内容。由于Mysql数据库中仅保存数据分析的结果性数据,窃取数据的意义不大。
五:登录与人员管理模块
在智慧校园数据监控系统中,为了实现用户登录功能,建立了登录模块。用户在登录页面输入正确的账号和密码,就可以进入智慧校园数据监控系统。为实现学生和教师的精细化管理,建立了人员管理模块。
- 登录与人员管理模块概述
登录模块是用户进入智慧校园数据监控系统的入口,用户只有登录系统之后才能操作系统的基本功能。本模块主要介绍智慧校园数据监控系统登录功能的设计与实现,使用前端框架jQuery实现前后端数据的传递。
在人员管理模块,管理员可以对学生和教师的信息进行修改,删除等操作,具有相应权限的用户可以对学生和教师的信息进行修改。在管理员对数据库进行修改的过程中,使用JSON(轻量级的数据交换格式)进行数据的传递。
在修改密码模块中学生和教师只能修改当前登录账号的密码,且只能操作自己权限范围内的功能,这样的形式保证了系统的安全性,可以防止用户对重要数据进行修改。
- jQuery框架概述
jQuery是一个快速,简洁的JavaScript框架,它简化了JavaScript编程,使页面代码更加简洁,实现了使用更少的代码实现更多的功能。与其他框架相比,jQuery的优势体现在方方面面,它是轻量级框架,具有强大的选择器,出色的DOM操作封装,可靠的事件处理机制,并且拥有详细的文档说明和各种应用讲解,还有许多成熟的插件可供选择。
DOM操作是网页开发中非常重要的一部分,它允许开发者以编程方式控制和操作网页的内部结构,包括但不限于元素的增删改等操作,从而创建出富有交互性、响应式和动态的网页应用程序。
登录模块
登录模块是智慧校园数据监控系统的入口,选择不同的登陆方式可以分别实现学生和老师的登录,登录模块分为两部分,即用户登录和忘记密码。


流程处理
用户登录模块主要用于采集用户输入的账号密码,并验证所输入的信息格式是否正确,当用户输入基本信息并点击登录按钮之后,首先判断用户输入的信息是否符合格式,然后将信息传递给后台进行验证,用户登录流程图如下。

数据库设计
根据功能分析和流程处理可分析出用户登录模块所需的数据库表,下面举两个例子。
| 序号 | 列名 | 数据类型 | 数据来源 | 是否为空 | 是否主键 | 备注 |
| 1 | id | int | 自动生成 | 否 | 是 | 编号 |
| 2 | stuno | varchar(255) | 管理员输入 | 否 | 否 | 学号 |
| 3 | password | varchar(255) | 管理员输入 | 否 | 否 | 密码 |
| 序号 | 列名 | 数据类型 | 数据来源 | 是否为空 | 是否主键 | 备注 |
| 1 | id | int | 自动生成 | 否 | 是 | 编号 |
| 2 | Jobn | varchar(255) | 管理员输入 | 否 | 否 | 工号 |
| 3 | password | varchar(255) | 管理员输入 | 否 | 否 | 密码 |
其他表里的列名,数据类型,数据来源,是否为主键,和上面两个表相差不大,上面两个表是基础表。
忘记密码
1.概要设计
(1)原型设计
忘记密码模块的主要功能是通过用户的账号和姓名对密码进行修改,并判断信息填写是否符合格式。
(2)功能分析
用户点击忘记密码按钮进入忘记密码页面,在该页面输入账号,姓名和密码,后台验证输入的账号和姓名是否匹配,匹配成功则进行密码的修改,匹配失败则提示账号或姓名存在错误。
流程大概就是输入账号,姓名和新密码,保存并修改密码,前端发出请求,后台去验证输入的账号和姓名是否一致,一致就正常修改密码,不一致就直接结束。 前端发出请求,后台验证这个步骤还没有看过,后续应该会去看一看。
百度了一下”前后端交互,修改密码校验“简单看一下;前端发送新密码和旧密码后端进行接收,后端验证旧密码和数据库里面的旧密码是否一致,如果一致密码修改成功,将新密码保存数据库,如果不一致前端响应旧密码错误。
来源1:https://blog.csdn.net/qq_41333410/article/details/123989873
来源2:https://blog.csdn.net/m0_56758388/article/details/132896798
#前端代码
changePw.html
<body>
<div class="message-content">
<div class="message-top" style="height: 3rem">
<div class="message-title" id="menuName">修改密码</div>
</div>
<div class="message-list">
<div>
<input type="hidden" id="userCode" th:value="${userCode}"/>
<div style="margin-right: 10px">
<div style="margin-top: 20px;">
旧密码:
<input type="password" name="oldPassword" id="oldPassword" class="input"/>
</div>
<div style="margin-top: 20px;">
新密码:
<input type="password" name="newPassword" id="newPassword" class="input"/>
</div>
<div style="margin-top: 20px;">
确认新密码:
<input type="password" name="reNewPassword" id="reNewPassword" class="input"/>
</div>
<div style="margin-top: 20px;text-align: center;">
<span class="errorMsg" style="color:red" id="errorMsg"></span>
<span class="successMsg" style="color:green" id="successMsg"></span>
</div>
<div style="margin-top: 40px;text-align: center;">
<input class="button" type="button" value="保存" id="save" style="margin-right:30px;width: 60px; height:30px;"></input>
<input class="button" type="button" value="清空" id="clear" style="width: 60px; height:30px;"></input>
</div>
</div>
</div>
</div>
</div>
</body>
以上代码实现界面如下
前端还有js和css代码,就不放出来了。
接下来登场的是后端代码(java)
1、修改画面展示方法
/**
* 修改密码
* @param request
* @param userCode
* @param menuName
* @return
*/
@RequestMapping(value = "/changePw")
public ModelAndView changePw(WebRequest request, String userCode, String menuName) {
ModelAndView mav = new ModelAndView("userSetting/changePw");
String socketId = userCode;
if(!StringUtils.isEmpty(socketId) && socketId.split("\\|").length > 1){
userCode = socketId.split("\\|")[1];
}
mav.addObject("socketId", socketId);
//页面标题
mav.addObject("menuName",menuName);
mav.addObject("userCode",userCode);
mav.addObject("systemTitle", systemTitle);
return mav;
}
2、保存密码处理方法
@RequestMapping(value = "/savePwd",method = RequestMethod.POST)
@ResponseBody
public int savePwd(String userCode, String oldPassword, String newPassword) {
int updateFlag = 0;
String socketId = userCode;
if(!StringUtils.isEmpty(socketId) && socketId.split("\\|").length > 1){
userCode = socketId.split("\\|")[1];
}
MD5UtilController md5Util=new MD5UtilController();
if(oldPassword == null || newPassword == null){
return 0;
}
String old = md5Util.getMD5(oldPassword.getBytes());
String newP = md5Util.getMD5(newPassword.getBytes());
List<LoginDto> user=userService.selectUserByUserId(userCode);
if(user != null && user.size() > 0){
String pwd = user.get(0).getPassword();
if(pwd != null && old.equals(pwd)){
try {
// 成功返回1
updateFlag = userService.savePwd(userCode,newP);
} catch (Exception e) {
// 不成功返回0,数据库回滚
updateFlag = 2;
}
}else{
// 旧密码错误
updateFlag = 3;
}
} else {
// 用户不存在
updateFlag = 4;
}
return updateFlag;
}
以上就是修改密码的前后端交互
人员管理模块
人员管理模块主要对学生和教师的信息进行管理,包括学生管理和教师管理两个子模块。

1.学生管理
学生管理模块主要将符合用户需求的学生信息以列表的形式展现在页面上,拥有该权限的用户可以对学生信息进行操作。页面设置了相应的文本框以及修改,删除,查看详情按钮,用来实现相应的功能,其页面如图3.2所示

用户进入该页面后可以选择学号,姓名,年级,专业等筛选条件进行筛选查询,并进行相应的操作,也可以查看学生的统计信息。
学生管理主要通过对学生数据文件中包含的数据进行可视化处理,分析统计实现,学生数据一般保存在数据库中,因此需要将数据从数据库中导出到本地文件中,学生数据文件如下(一部分)
201800001,尤出中,女,研三,自动化,长治,本科生,123456,True,武汉,10928,互联网,True,女本科
201800002,严国襟,女,博一,自动化,常德,博士生,123456,True,綦江,9039,工程机械,False,女博士
201800003,许有大,女,博二,国民经济管理,成都,在职博士生,123456,False,False,0,False,False,女博士
201800004,陶中是,男,大四,能源与动力工程,重庆,本科生,123456,True,温江,11806,互联网,True,男本科
201800005,严她的,女,大二,自动化,毕节,本科生,123456,False,False,0,False,False,女本科
201800006,郑在他,男,大一,人力资源管理,长春,本科生,123456,False,False,0,False,False,男本科
201800007,卫后为,男,大四,机械工程,沧州,本科生,123456,False,False,0,False,False,男本科
这些数据存储在student基础表里,根据这些数据进行统计分析,分析内容有“就业比例:对学生是否就业进行统计,男女比例:对学生的男女人数进行统计,各专业人数比例:对学生各个专业的人数进行统计。”
根据上面的统计分析创建合适的数据库表
实现顺序
学生管理模块主要对采集到的学生数据进行就业比例,男女比例和各专业人数比例的分析并提供了修改数据的功能。本系统所有离线数据分析的实现顺序一致,此处以就业比例为例介绍离线数据分析的实现顺序。

实现步骤
- 管理员启动Flume将数据采集到HDFS中
- 编写MapReduce程序对数据进行清洗,并按照规定的格式输出到HDFS中。
- Hive使用清洗后的数据创建表
- 使用Hive统计就业比例,并将结果保存到一个新的Hive表中。
- 在Mysql中创建与Hive中存储的分析结果表结构和名称一致的Mysql表,并使用Sqoop将Hive中的分析结果导出到Mysql中。
- 用户点击学生管理页面。
- 使用Django读取Mysql中的数据。
- Django将数据返回到HTML页面生成视图。
2.教师管理
教师管理模块主要将符合用户需求的教师信息以列表的形式展现在页面上,拥有该权限的用户可以对教师信息进行操作。页面设置了相应的文本框以及修改,删除,查询按钮,用来实现相应的功能,其页面如下图3.4所示

教师管理模块的主要使用者是管理员,此页面中显示所有教师信息,用户可以对教师信息进行查询,修改,删除等操作。
用户可以选择“工号,专业,姓名,职称”来进行查询相应的教师信息。
教师管理模块主要通过对教师数据文件包含的数据进行可视化处理,分析统计实现,教师数据同样被保存在数据库中,使用时需要将数据从数据库中导出到本地文件中。教师数据文件如下(部分)
19121300001,杨一庐,男,教授,能源与动力工程,123456
19121300002,李们自,男,助教,计算机科学与技术,123456
19121300003,蒋了就,女,副教授,自动化,123456
19121300004,杨章大,女,教授,自动化,123456
这个教师表和学生表一样都是基础表,同时也要进行统计分析,根据分析建立相应的数据库表,其实该系统基础表都是一个流程,处理过程都差不太多,处理完的数据再往MySQL数据库里面导出,这样能保证数据的安全性,教师表比学生表简单点,教师没有那么多的信息需要处理,学生还要涉及到是否就业等等一些信息。
教师数据分析内容“职称人数比例:对教师的职称进行统计,男女比例:对教师的男女人数进行统计,各专业中不同职称的人数:对每个职称的各专业教师的人数进行统计”
六:综合信息分析模块
在智慧校园数据监控系统中,为了实现校园综合信息的展示,建立了综合信息分析模块。通过综合信息分析模块,用户可以对餐饮,网络,设备与科研,就业等情况进行查看,分析。
- 综合信息分析模块概述
综合信息分析模块显示与学生及教师相关的一些信息。通过综合信息查看餐饮,网络,就业,学生分布等各个部分的总体情况,通过餐饮数据分析查看餐饮消费的详细情况,通过网络数据分析查看网络使用及浏览类型的详细情况,通过设备与科研数据分析查看设备与科研的详细情况,通过就业数据分析查看学生的就业情况以及当前企业招聘的相关情况。
- JSON概述
JSON是一种轻量级的数据交换格式,是存储和交换文本信息的语法。JSON采用完全独立于语言的文本格式,并且比XML更易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。这些特性使得JSON成为理想的数据转换语言。在对数据库进行修改的过程中,使用JSON进行数据的传递。它的语法格式简单,具有清晰的层次结构,比XML更容易阅读,这些优势在本系统中得到了充分的发挥。
模块开发
在校教师登录智慧校园数据监控系统后,可以在综合信息分析模块中查看学生的餐饮消费详情,上网浏览情况,使用流量时域情况,就业情况等。综合信息分析模块分为五部分,即综合信息,餐饮数据分析,网络数据分析,设备与科研数据分析以及就业数据分析。综合信息分析模块用例图如图3.5所示

综合信息模块显示学生和教师的一些简要信息,包括各年级就业人数对比,教师人数统计,学生分布,生源地分布图,实施消费额,使用流量统计以及人群消费等内容。

2.功能分析
(1)综合信息页面描述
综合信息模块显示在校师生的的整体情况,通过该模块教师可以查看学生来自哪个城市,目前在校学生人数,各个年级有多少学生等。
(2)原数据格式
综合信息主要通过对多个不同的原数据文件中包含的数据进行分析统计得出,包括学生数据文件,教师数据文件,餐饮数据文件以及网络数据文件等。
(3)数据库设计
根据功能分析和数据分析内容可分析出综合信息模块所需的数据库表,下面列举几个
| 序号 | 列名 | 数据类型 | 数据来源 | 是否为空 | 是否主键 | 备注 |
| 1 | id | int | 自动生成 | 否 | 是 | 编号 |
| 2 | class | varchar(255) | 数据分析结果 | 否 | 否 | 年级 |
| 3 | num | int | 数据分析结果 | 否 | 否 | 数量 |
| 序号 | 列名 | 数据类型 | 数据来源 | 是否为空 | 是否主键 | 备注 |
| 1 | id | int | 自动生成 | 否 | 是 | 编号 |
| 2 | title | varchar(255) | 数据分析结果 | 否 | 否 | 职称 |
| 3 | sex | varchar(2) | 数据分析结果 | 否 | 否 | 性别 |
| 4 | num | int | 数据分析结果 | 否 | 否 | 数量 |
还有一个综合信息数据分析内容,列举几个
| 内容 | 描述 |
| 各年级就业人数对比 | 对当前各年级的就业人数进行统计 |
| 教师人数统计 | 对各职称对应的男女人数进行统计 |
| 学生分布 | 对当前各学历学生的总数进行统计 |
详细设计
(1)项目结构
综合信息模块的项目结构如图4.1所示

(2)实现顺序
综合信息模块主要对采集到的数据进行各年级就业人数对比,教师人数统计,学生分布,生源地分布,实时消费额,使用流量统计和人群消费的分析。本系统中所有实时数据分析的实时顺序一致,此处以实时消费额为例介绍实时数据分析的实现顺序,如下图4.2所示

(3)实现步骤
(1)管理员启动Flume实时将采集到的数据交由Kafka。
(2)编写Spark Streaming程序实时接收Kafka中的数据进行分析。
(3)将分析结果保存到Mysql数据库中
(4)用户点击综合信息页面。
(5)Ajax实时调用Django读取数据库中数据的方法。
(6)Django将数据返回到HTML页面生成视图。
页面效果就是图3.6的效果
餐饮数据分析
1.概要设计
(1)原型设计
餐饮数据分析模块显示今日总额,今日频次,实时餐饮总额,历史日均总额,餐饮人群组成,实时用餐人数等内容,其页面如图4.3所示

(2)功能分析
餐饮数据分析主要是查看学生的餐饮消费情况,从而能够有针对性的对各个食堂进行管理
(3)原数据格式
餐饮数据分析主要通过对餐饮数据文件以及学生数据文件中包含的数据进行分析统计得出,餐饮数据文件由于数据较多,可以直接以本地文件的格式存放,如图4.4所示

(4)数据分析内容
按照原型图对提供的餐饮数据进行统计分析,分析内容如下表
| 内容 | 描述 |
| 今日总额 | 对当日各个食堂的消费总额进行统计 |
| 今日频次 | 对当日各个食堂的消费次数进行统计 |
| 实时餐饮总额 | 按照每4秒更新1次的频率对所有的食堂的消费总额进行计算 |
| 历史日均总额 | 对之前所有食堂的消费总额按照男女学生进行统计,并按照日期进行排序 |
| 餐饮人数组成 | 对男女学生的消费人数及学历进行统计 |
| 实时用餐人数 | 按照每4秒更新1次的频率对所有食堂的消费次数进行计算 |
(5)数据库设计
根据功能分析和数据分析内容可分析出餐饮数据分析模块所需的数据库表,部分表如下
| 序号 | 列名 | 数据类型 | 数据来源 | 是否为空 | 是否主键 | 备注 |
| 1 | id | int | 自动生成 | 否 | 是 | 编号 |
| 2 | address | varchar(255) | 数据分析结果 | 否 | 否 | 地址 |
| 3 | money | float | 数据分析结果 | 否 | 否 | 消费 |
| 序号 | 列名 | 数据类型 | 数据来源 | 是否为空 | 是否主键 | 备注 |
| 1 | id | int | 自动生成 | 否 | 是 | 编号 |
| 2 | address | varchar(255) | 数据分析结果 | 否 | 否 | 食堂 |
| 3 | frequency | int | 数据分析结果 | 否 | 否 | 频次 |
| 序号 | 列名 | 数据类型 | 数据来源 | 是否为空 | 是否主键 | 备注 |
| 1 | id | int | 自动生成 | 否 | 是 | 编号 |
| 2 | time | varchar(255) | 数据分析结果 | 否 | 否 | 时间 |
| 3 | money | varchar(255) | 数据分析结果 | 否 | 否 | 金额 |
页面效果就是图4.3所示的效果。
网络数据分析
1.概要设计
(1)原型设计
网络数据分析模块显示男女学生浏览网站统计,WI-FI数据类型,使用流量,流量时域分布等内容,是对学生使用的网络数据进行分析。其页面如图4.5所示

(2)功能分析
网络数据分析模块的主要作用是查看当前学生相关的流量使用情况。
(3)原数据格式
网络数据分析主要通过对网络数据文件以及学生数据文件中包含的数据进行分析统计得出,网络数据文件同样由于数据众多,因此直接存放在本地文件中,如图4.6所示。

(4)数据分析内容
按照原型图对提供的网络数据进行统计分析,分析内容如下表所示
| 内容 | 描述 |
| wi-fi数据类型 | 对各年级的男女学生使用各类型软件的总流量进行统计 |
| 使用流量 | 对所有学生使用各类型软件的总流量进行统计 |
| 本科生流量时域分布 | 对本科生使用流量的时间,地点以及所用的总流量进行统计 |
| 硕士生流量时域分布 | 对硕士生使用流量的时间,地点以及所用的总流量进行统计 |
| 博士生流量时域分布 | 对博士生使用流量的时间,地点以及所用的总流量进行统计 |
(5)数据库设计
根据功能分析和数据分析内容可分析出网络数据分析模块所需的数据库表,如下表(部分)
| 序号 | 列名 | 数据类型 | 数据来源 | 是否为空 | 是否主键 | 备注 |
| 1 | id | int | 自动生成 | 否 | 是 | 编号 |
| 2 | education | varchar(255) | 数据分析结果 | 否 | 否 | 年级 |
| 3 | sex | varchar(2) | 数据分析结果 | 否 | 否 | 性别 |
| 4 | flow | int | 数据分析结果 | 否 | 否 | 流量 |
| 5 | urltype | varchar(255) | 数据分析结果 | 否 | 否 | 连接类型 |
| 序号 | 列名 | 数据类型 | 数据来源 | 是否为空 | 是否主键 | 备注 |
| 1 | id | int | 自动生成 | 否 | 是 | 编号 |
| 2 | urltype | varchar(255) | 数据分析结果 | 否 | 否 | 连接类型 |
| 3 | num | int | 数据分析结果 | 否 | 否 | 流量 |
| 序号 | 列名 | 数据类型 | 数据来源 | 是否为空 | 是否主键 | 备注 |
| 1 | id | int | 自动生成 | 否 | 是 | 编号 |
| 2 | address | varchar(255) | 数据分析结果 | 否 | 否 | 地址 |
| 3 | flow | int | 数据分析结果 | 否 | 否 | 流量 |
| 4 | hour | varchar(2) | 数据分析结果 | 否 | 否 | 时间 |
页面效果就是图4.5所示的效果
设备与科研数据分析
1.概要设计
(1)设备与科研数据分析模块显示校园设备统计,设备使用趋势,科研立项统计,科研到款统计,科研著作统计,论文发表统计等内容。其页面如图5.1所示。

(2)设备与科研数据分析模块主要用于对设备,科研以及论文著作等内容进行查看。以了解教师的项目情况。
(3)原数据格式
设备与科研数据分析主要通过对设备数据文件,科研数据文件以及论文著作数据文件中包含的数据进行分析统计得出,这些数据文件均通过数据库导出。设备数据文件如下图5.2所示。

科研数据文件如下图5.3。

论文著作数据文件如下图5.4。

(4)数据分析内容按照原型图对提供的设备,科研,论文著作数据进行统计分析,分析内容如下。
| 内容 | 描述 |
| 校园设备统计 | 对当前学校购买各类型设备所需的资金进行统计 |
| 设备使用趋势 | 对一年级中各个月份购买科研和教学设备所需的资金的趋势进行统计 |
| 科研立项统计 | 对科研立项总数和各类型科研立项占比进行统计 |
| 科研到款统计 | 对科研立项到款总金额和各类型科研立项到款占比进行统计 |
| 科研著作统计 | 对科研著作总数和各类型科研著作占比进行统计 |
| 论文发表统计 | 对各学历的学生和教师发表的各等级论文的数量进行统计 |
(5)数据库设计
根据功能分析和数据分析内容可以分析出设备与科研数据分析模块所需的数据库表,部分表如下所示。
| 序号 | 列名 | 数据类型 | 数据来源 | 是否为空 | 是否主键 | 备注 |
| 1 | id | int | 自动生成 | 否 | 是 | 编号 |
| 2 | equipmenttype | varchar(255) | 数据分析结果 | 否 | 否 | 设备类型 |
| 3 | money | float | 数据分析结果 | 否 | 否 | 金额 |
| 序号 | 列名 | 数据类型 | 数据来源 | 是否为空 | 是否主键 | 备注 |
| 1 | id | int | 自动生成 | 否 | 是 | 编号 |
| 2 | time | varchar(4) | 数据分析结果 | 否 | 否 | 时间 |
| 3 | money | int | 数据分析结果 | 否 | 否 | 金额 |
| 序号 | 列名 | 数据类型 | 数据来源 | 是否为空 | 是否主键 | 备注 |
| 1 | id | int | 自动生成 | 否 | 是 | 编号 |
| 2 | research | varchar(255) | 数据分析结果 | 否 | 否 | 科研类型 |
| 3 | number | int | 数据分析结果 | 否 | 否 | 数量 |
页面效果就是图5.1的所示效果。
就业数据分析
1.概要设计
(1)原型设计
就业数据分析模块显示各专业就业人数排名前五,学生就业城市排名前五,平均薪资,各年级就业人数,市场需求工作薪资,市场需求工作年限,市场需求学历,各城市需求人数对比以及各城市提供职位对比等内容。其页面如图5.5所示。

(2)功能分析
就业数据分析模块主要用于查看学生的就业情况以及当前各个公司提供的职位信息,以方便用户了解当前的职业发展。
(3)原数据格式
就业数据分析主要通过对招聘网站职位数据文件以及学生数据文件中包含的数据进行分析统计得出。招聘网站职位数据文件主要通过爬虫技术从招聘网站上获取并保存到本地文件中,如图5.7所示。

(4)数据分析内容
按照原型图对提供的就业数据进行统计分析,分析内容如下表。
| 内容 | 描述 |
| 各专业就业人数排名前五 | 对各个专业的就业人数进行统计并显示排名前五的专业 |
| 学生就业城市排名前五 | 对各个专业的就业去向进行统计并显示就业人数排名前五的城市 |
| 平均薪资 | 对就业学生的平均薪资以及各个专业的平均薪资进行统计 |
| 各年级就业人数 | 对各个年级的就业人数进行统计 |
| 市场需求工作薪资 | 对当前招聘公司提供岗位的薪资范围进行统计 |
| 市场需求工作年限 | 对当前招聘公司所提供的岗位的工作年限要求进行统计 |
| 市场需求学历 | 对当前招聘公司所提供岗位的学历要求进行统计 |
| 各城市需求人数对比 | 对各个城市的需求人数进行统计 |
| 各城市提供职位对比 | 对各个城市提供的岗位数量进行统计 |
(5)数据库设计
根据功能分析和数据分析内容可分析出就业数据分析模块所需的数据库表,部分表如下。
| 序号 | 列名 | 数据类型 | 数据来源 | 是否为空 | 是否主键 | 备注 |
| 1 | id | int | 自动生成 | 否 | 是 | 编号 |
| 2 | major | varchar(255) | 数据分析结果 | 否 | 否 | 专业 |
| 3 | num | int | 数据分析结果 | 否 | 否 | 人数 |
| 序号 | 列名 | 数据类型 | 数据来源 | 是否为空 | 是否主键 | 备注 |
| 1 | id | int | 自动生成 | 否 | 是 | 编号 |
| 2 | workaddress | varchar(255) | 数据分析结果 | 否 | 否 | 就业地址 |
| 3 | num | int | 数据分析结果 | 否 | 否 | 人数 |
| 序号 | 列名 | 数据类型 | 数据来源 | 是否为空 | 是否主键 | 备注 |
| 1 | id | int | 自动生成 | 否 | 是 | 编号 |
| 2 | major | varchar(255) | 数据分析结果 | 否 | 否 | 专业 |
| 3 | avg_salary | float | 数据分析结果 | 否 | 否 | 工资 |
2.详细设计
(1)实现顺序
就业数据分析模块主要对招聘信息和学生就业信息进行分析,得到各专业就业人数排名前五,学生就业城市排名前五,平均薪资,各年级就业人数,市场需求工作薪资,市场需求工作年限,市场需求学历,各城市需求人数对比和各城市提供职位对比。本系统中所有爬取数据分析的实现顺序一致,此处以各城市需求人数对比为例介绍爬取数据分析的实现顺序 ,如图5.8所示。

(2)实现步骤
- Python爬取招聘信息。
- Flume监控爬取的招聘信息文件,将数据采集到HDFS中。
- 编写MapReduce程序对数据进行清洗,并按照规定的格式输出到HDFS中。
- Hive使用清洗后的数据创建表。
- 使用Hive统计各城市需求人数对比,并将结果保存到一个新的Hive表中。
- 在Mysql中创建与hive中存储的分析结果表结构和名称一致的MySQL表,并使用Sqoop将hive中的分析结果导出到MySQL中。
- 用户点击就业数据分析页面。
- 使用Django读取MySQL中的数据。
- Django将数据返回到HTML页面生成视图。
页面效果如图5.6所展示的效果。
七:学生数据分析模块
在智慧校园数据监控系统中,为了查看学生的详细信息,建立了学生数据分析模块。通过对学生数据分析模块,用户可以对学生的学习情况,饮食情况,清洁情况,生活情况等进行分析。
- 学生数据分析模块概述
学生数据分析模块展现与学生相关的一些信息。通过综合信息查看学生就业,市场需求信息等各个部分的总体情况,通过对个人综合数据分析查看学生的学习,饮食,清洁,生活等详细情况,通过个人活动数据分析查看学生的网络使用,消费,生活预警,学习预警等详细情况。
- Echarts概述
Echarts是一个纯JavaScript编写的一个图库表,用户只需对其进行简单的配置并提供图表所需的数据,即可在web网站或web应用程序中添加有交互性的图表,支持的图表类型有曲线图,区域图,柱状图,饼状图,散状点图和综合图表,Echarts运行速度块,兼容性好,能够完美的支持当前的大多数浏览器,并且主题多,动态交互性性能好,操作简单。
学生数据分析模块开发
在校学生登录智慧校园数据监控系统后,可以在学生数据分析模块中查看个人的餐饮消费详情,上网浏览情况,使用流量时域情况,个人信息等。学生数据分析分为四部分,即综合信息,个人综合数据分析,个人活动数据分析以及个人信息修改。学生数据分析模块用例图如图5.9所示。

综合信息
1.概要设计
(1)原型设计
综合信息模块显示学生的一些简要信息,包括各个年级就业人数对比,就业学生总数,就业去向分布,平均薪资,市场需求学历等内容。其页面如图3.6所示
(2)功能分析
综合信息模块显示学生就业情况,市场需求情况,通过该模块学生可以查看当前职位需求情况,薪水分布,学历要求,本校毕业生就业情况等。
(3)原数据格式
综合信息主要通过对多个不同的原数据文件中包含的数据进行分析统计得出,包括就业学生数据文件,招聘网站职位数据文件等。
(4)数据分析内容
按照原型图对提供的综合信息数据进行统计分析,分析内容如下所示。
| 内容 | 描述 |
| 各年级就业人数对比 | 对当前各个年级的就业人数进行统计 |
| 市场需求学历 | 对当前招聘公司提供的岗位的学历进行统计 |
| 薪水分布 | 对当前招聘公司提供的岗位薪资范围进行统计 |
| 平均薪资 | 对各个专业的平均薪资进行统计 |
| 就业去向城市总数 | 对就业去向的城市总数进行统计 |
| 就业学生总数 | 对就业学生的总人数进行统计 |
| 就业去向分布 | 对就业学生的就业省市进行统计 |
| 各城市需求人数 | 对各个城市的需求人数进行统计 |
| 各专业就业人数排名前五 | 对各个专业的就业人数进行统计并显示排名前五的专业 |
(5)数据库设计
根据功能分析和数据分析内容可以分析出综合信息模块所需的数据库表,部分表如下所示。
| 序号 | 列名 | 数据类型 | 数据来源 | 是否为空 | 是否主键 | 备注 |
| 1 | id | int | 自动生成 | 否 | 是 | 编号 |
| 2 | class | int | 数据分析结果 | 否 | 否 | 年级 |
| 3 | num | int | 数据分析结果 | 否 | 否 | 数量 |
| 序号 | 列名 | 数据类型 | 数据来源 | 是否为空 | 是否主键 | 备注 |
| 1 | id | int | 自动生成 | 否 | 是 | 编号 |
| 2 | education | varchar(255) | 数据分析结果 | 否 | 否 | 学历 |
| 3 | num | int | 数据分析结果 | 否 | 否 | 数量 |
| 序号 | 列名 | 数据类型 | 数据来源 | 是否为空 | 是否主键 | 备注 |
| 1 | id | int | 自动生成 | 否 | 是 | 编号 |
| 2 | wages | varchar(255) | 数据分析结果 | 否 | 否 | 工资 |
| 3 | num | int | 数据分析结果 | 否 | 否 | 数量 |
个人综合数据分析
1.概要设计
(1)原型设计
个人综合数据分析模块显示学生的个人信息,学习情况,饮食情况,清洁情况,生活情况,网络情况,综合情况等。其页面效果如图6.1所示

(2)功能分析
个人综合数据分析模块主要用于查看学生的餐饮消费情况,学习情况,饮食情况等,从而有针对性地对其在校生活习惯进行调节。
(3)原数据格式
个人综合数据分析主要通过对餐饮数据文件,学生数据文件,网络数据文件以及学生刷卡记录数据文件中包含的数据进行分析统计得出。学生刷卡记录数据由于数据量比较庞大,因此被存储在本地文件中,直接使用即可,文件如图6.2所示。

(4)学生分析内容
按照原型图对提供的数据进行统计分析,分析内容如下所示。
| 内容 | 描述 |
| 个人信息 | 对当前学生的学号,类别,刷卡次数,洗澡次数,联网次数,借书次数等进行统计。 |
| 勤奋得分 | 对当前学生去各个地点打卡的次数进行统计。 |
| 餐饮得分 | 对当前学生去食堂就餐和点外卖就餐的情况进行统计。 |
| 综合得分 | 对勤奋得分,餐饮得分,清洁得分,生活得分等进行计算,其中勤奋得分即去教学楼和图书馆打卡的次数占打卡总次数的比例,餐饮得分即去食堂就餐的次数占就餐总次数的比例,清洁得分即去浴室打卡的次数占全年总天数的比例,生活得分即咖啡,水果,超市,餐饮的消费金额占消费总金额的比例。 |
| 清洁得分 | 对当前学生去浴室的次数进行统计。 |
| 生活得分 | 对当前学生各项生活消费的次数进行统计。 |
| 我的关注 | 对当前学生浏览网站的频次进行统计。 |
(5)数据库设计
根据功能分析和数据分析内容可分析出个人综合数据分析模块所需的数据库表,部分表如下。
| 序号 | 列名 | 数据类型 | 数据来源 | 是否为空 | 是否主键 | 备注 |
| 1 | id | int | 自动生成 | 否 | 否 | 编号 |
| 2 | stuno | varchar(255) | 数据分析结果 | 否 | 否 | 学号 |
| 3 | address | varchar(255) | 数据分析结果 | 否 | 否 | 地址 |
| 4 | num | varchar(11) | 数据分析结果 | 否 | 否 | 次数 |
| 序号 | 列名 | 数据类型 | 数据来源 | 是否为空 | 是否主键 | 备注 |
| 1 | id | int | 自动生成 | 否 | 否 | 编号 |
| 2 | stuno | varchar(255) | 数据分析结果 | 否 | 否 | 学号 |
| 3 | waimainum | varchar(255) | 数据分析结果 | 否 | 否 | 外卖次数 |
| 4 | shitangnum | varchar(255) | 数据分析结果 | 否 | 否 | 食堂次数 |
| 序号 | 列名 | 数据类型 | 数据来源 | 是否为空 | 是否主键 | 备注 |
| 1 | id | int | 自动生成 | 否 | 否 | 编号 |
| 2 | stuno | varchar(255) | 数据分析结果 | 否 | 否 | 学号 |
| 3 | cleannum | varchar(255) | 数据分析结果 | 否 | 否 | 洗澡天数 |
| 4 | nocleannum | varchar(255) | 数据分析结果 | 否 | 否 | 未洗澡天数 |
页面效果就是图6.1所展示的效果
个人活动数据分析
1.概要设计
(1)原型设计
个人活动数据分析模块显示校园活动频次,生活特征比较,互联网情况,消费情况展示,生活预警,学习预警等内容,通过对学生的相关信息进行分析得出学生的在校情况。其页面如图6.3所示。

(2)功能分析
个人活动数据分析模块的主要作用是查看学生的流量使用情况。
(3)原数据格式
个人活动数据分析主要通过对网络数据文件,学生数据文件,学生刷卡记录数据文件中包含的数据进行分析统计得出。
(4)数据分析内容
按照原型图对提供的数据进行统计分析,分析内容如下表。
| 内容 | 描述 |
| 校园活动频次 | 对每个月的wi-fi连接次数和刷卡次数进行统计 |
| 生活特征比较 | 对同年级学习成绩不同的学生的生活特征进行统计,之后将当前学生的生活特征与各个层次学生的生活特征进行比较,了解其不足与优势 |
| 互联网情况 | 对当前学生使用各个软件的流量以及总流量进行统计 |
| 消费情况展示 | 对当前学生的消费情况进行统计 |
| 生活预警 | 计算生活得分和勤奋得分,之后根据得分的平均值对生活质量进行判断 |
| 学习预警 | 计算图书馆刷卡次数,即全年刷卡总数除以12得到每个月的刷卡次数,搜索倾向主要是关注度高的浏览网站,根据刷卡次数划分学习质量并给出相关预警,以提示学生应该努力学习 |
(5)数据库设计
根据功能分析和数据分析内容可分析出个人活动数据分析模块所需的数据库表,部分表如下所示。
| 序号 | 列名 | 数据类型 | 数量来源 | 是否为空 | 是否主键 | 备注 |
| 1 | id | int | 自动生成 | 否 | 是 | 编号 |
| 2 | stuno | varchar(255) | 数据分析结果 | 否 | 否 | 学号 |
| 3 | time | varchar(255) | 数据分析结果 | 否 | 否 | 时间 |
| 4 | num | float | 数据分析结果 | 否 | 否 | 数量 |
| 序号 | 列名 | 数据类型 | 数量来源 | 是否为空 | 是否主键 | 备注 |
| 1 | id | int | 自动生成 | 否 | 是 | 编号 |
| 2 | stuno | varchar(255) | 数据分析结果 | 否 | 否 | 学号 |
| 3 | time | varchar(255) | 数据分析结果 | 否 | 否 | 时间 |
| 4 | frequency | float | 数据分析结果 | 否 | 否 | 数量 |
| 序号 | 列名 | 数据类型 | 数量来源 | 是否为空 | 是否主键 | 备注 |
| 1 | id | int | 自动生成 | 否 | 是 | 编号 |
| 2 | stuno | varchar(255) | 数据分析结果 | 否 | 否 | 学号 |
| 3 | urltype | varchar(255) | 数据分析结果 | 否 | 否 | 网络类型 |
| 4 | flow | float | 数据分析结果 | 否 | 否 | 流量 |
页面效果就是图6.3所展示的效果。
个人信息修改
1.概要设计
(1)原型设计
个人信息修改模块的主要功能是通过学生的学号对其姓名,性别,年级,专业,住址和密码等信息进行修改,并判断填写的信息是否符合格式,其页面如图6.4所示。

(2)功能分析
在该页面对相关信息进行修改,然后后台验证输入的学号是否存在,验证成功则进行信息的修改,验证失败则提示学号存在。
(2)流程处理
个人信息修改模块主要用于采集用户输入的相关信息,并验证所输入的信息格式是否正确。当前用户输入基本信息并点击确认按钮之后,首先判断用户输入的信息是否符合格式,然后将信息传递给后台进行验证并实现个人信息的修改。个人信息修改流程如图6.5所示。

(4)数据库设计
根据功能分析和流程处理可分析出个人信息修改模块所需的数据库表,如下所示。
| 序号 | 列名 | 数据类型 | 数据来源 | 是否为空 | 是否主键 | 备注 |
| 1 | id | int | 自动生成 | 否 | 是 | 编号 |
| 2 | stuno | varchar(255) | 管理员输入 | 否 | 否 | 学号 |
| 3 | name | varchar(255) | 管理员输入 | 否 | 否 | 姓名 |
| 4 | sex | char(2) | 管理员输入 | 否 | 否 | 性别 |
| 5 | class | varchar(255) | 管理员输入 | 否 | 否 | 年级 |
| 6 | major | varchar(255) | 管理员输入 | 否 | 否 | 专业 |
| 7 | address | varchar(255) | 管理员输入 | 否 | 否 | 住址 |
| 8 | password | varchar(255) | 管理员输入 | 否 | 否 | 密码 |
效果图就是图6.4所展示的效果。
八:系统测试和部署
随着软件的大型化和复杂化,软件的质量变得尤为重要,保证软件质量的重要手段之一就是软件测试。软件测试可以对软件的质量进行全面的评估,通过持续的测试及时提高软件的质量,降低软件的开发成本。
- 软件测试的概念
软件测试是伴随着软件的产生而产生的,软件测试是一种实际输出与预期输出之间的审核或者比较过程。软件测试的经典定义是,在规定的条件下对程序进行操作,已发现程序的错误,衡量软件的质量,并对其是否能够满足设计要求进行评估的过程。
- 软件测试的重要性
软件测试是软件开发过程的一个重要组成部分,在这个过程中,将对智慧校园数据监控系统的功能进行验证和确认,并根据需求文档以及设计文档对智慧校园数据监控系统及其功能用例进行测试。将整个系统作为测试对象,在实际的应用环境中,在用户的直接参与下进行测试,目的是尽快,尽早地发现功能与用户需求和预先定义的是否一致以及系统中存在的各种问题,并且在实际的应用环境中可以对系统性能的实现,与其他系统的配合情况以及遇到环境异常和人为恶意破坏时系统的自我保护等进行测试,软件测试模型如图6.6所示。
软件测试合格后,将进行系统部署,系统部署是将系统部署在甲方服务器上的过程,包括网络环境,硬件测试,软件环境的安装以及配置,以保证系统在服务器上稳定地运行。

软件测试
软件测试是软件开发过程的一个重要组成部分,是对产品进行验证和确认的过程,在这个阶段要对智慧校园数据监控系统进行测试计划的制订以及测试用例的编写,之后按照测试计划以及测试用例对项目进行测试,整理出测试结果并对其进行分析,最后对项目进行bug的修复。软件测试的基本流程如图6.7所示。

系统测试
1.系统测试的目的
智慧校园数据监控系统的系统测试是基于系统的整体需求说明书的黑盒类测试,对象不仅仅包括需测试的软件,还包括软件所依赖的硬件,如服务器,外部设备,数据采集系统,数据分析系统,数据存储系统等。系统测试应该在实际的应用环境中,在用户的直接参与下进行,目的是在实际的应用环境中观察性能的实现。
2.系统测试的范围
系统测试主要根据用户需求说明书以及系统设计过程中的相应文档对系统进行检验。单元测试由开发人员执行,而最终的系统测试由测试人员进行。系统测试主要包括功能测试,性能测试,数据测试,界面测试和兼容性测试等内容。
功能测试主要对登录模块、人员管理模块、综合信息分析模块、学生数据分析模块的数据采集、处理、分析、存储、可视化展示功能进行测试,记录相应的测试流程以及测试结果(相当于开发过程中的单元测试)。
性能测试是对项目整体进行的测试,包括大数据量测试、负载测试、压力测试、按钮状态是否正确测试等。
数据测试是对系统内数据的获取情况,存储情况进行的测试,查看是否能够正确获取数据并显示在页面上,获取的数据是否正确,数据存储格式是否符合需求等。
界面测试主要是查看调整浏览器大小后页面还能否完整显示,页面上的提示,警告,错误说明是否清楚,明了,恰当等。
兼容性测试主要查看改变浏览器是否会对可视化系统造成影响,更换服务器版本是否会对数据采集,处理,存储等功能造成影响等。
3.测试参考资料
在软件测试过程中,将根据开发过程中提交的文档进行全面,详细的测试,具体文档有《智慧校园数据监控系统需求分析报告》《智慧校园数据监控系统详细设计报告》《智慧校园数据监控系统数据库设计报告》《智慧校园数据监控系统测试计划》。
软件测试计划
在指定测试计划之前要整理软件测试所需的资源,包括软件资源,硬件资源,人力资源,具备了这些条件,测试才能展开。软件测试要规定清晰的测试阶段和测试内容,明确测试目的和测试周期,每一个测试周期的时间起始点都要写明,以便测试如期进行。本系统测试部分计划如下。、
要测试的是:
- 环境配置:具体测试内容有(MySQL数据库,Django框架环境,Hadoop环境)
- 功能测试:(登录模块,人员管理模块,综合信息分析模块,学生数据分析模块)
- 性能测试:测试最大并发数,发送请求时系统的响应时间
- 界面测试:测试(页面结构,包括菜单,背景,颜色,字体,按钮,title,提示信息的一致性等,友好型,易用性,合理性,正确性)
- 兼容性测试:用不同版本的不同浏览器测试:IE6.0,IE8.0,火狐,遨游,搜狗,360:分辨率:1024×768,800×600,操作系统:linux 不同的操作系统,浏览器,分辨率等组合测试。
软件测试环境的配置
在配置测试环境的过程中,需要遵循以下几个原则:
- 满足软件运行的最低要求,首先要保证支持软件正常运行。
- 测试机的操作系统选用相对普及的版本,保证不存在差异性。
- 搭建相对简单,独立的测试环境,除了操作系统外,测试机上只安装系统测试过程必须的软件,以免不相关的软件影响测试的实施。
- 在实施软件测试前,要用有效的正版杀毒软件检测软件环境,保证测试环境中没有病毒。
1.网络环境
网络环境是由软件运行时的网络系统,网络结构以及其他网络设备构成的环境,在本系统中,使用windows自带的网络即可。
2.服务器环境
服务器配置如下表所示:
| 资源名称/类型 | 配置 |
| 测试PC | 主频1.6GHz,硬盘40G,内存512MB |
| 应用服务器 | Django,Hadoop,Spark |
| 数据库管理系统 | MySQL |
| 应用软件 | Intelij IDEA ,JerBrains,PyCharm |
我自己搭建时,实际硬盘内存是50G往上,Django安装在了Windows系统上,因为Linux上面一些东西版本太低,所有就直接安装在Windows上了,不影响使用。
3.搭建环境的流程
根据所需的网络环境,服务器环境以及对硬件,软件的需求进行环境的搭建。在搭建环境的过程中系会暴露问题,需要进行记录并修改,直至环境搭建完成。搭建环境的流程如图6.8所示。

项目部署
环境准备
1.JDK准备
由于大数据相关环境需要依靠Java,因此还需要进行JDK的安装。但由于CentOs系统自带JDK,因此需要删除自带的JDK中相关的openJDK文件才可以进行JDK的安装。JDK安装文件在开发工具的安装包中。安装完成后检验是否安装成功,进入命令行模式,输入”java-version”,出现以下则成功安装JDK。
rpm -qa|grep java #查看自带的java有哪些
以下是删除自带的jdk指令
rpm -e --nodeps java-1.8.0-openjdk-headless-1.8.0.262.b10-1.el7.x86_64
rpm -e --nodeps java-1.7.0-openjdk-headless-1.7.0.261-2.6.22.2.el7_8.x86_64
以下是解压jdk到指定目录
tar -zxvf jdk-8u281-linux-x64.tar.gz -C /opt/module/
[fjc@hadoop102 ~]$ java -version
java version “1.8.0_212”
Java(TM) SE Runtime Environment (build 1.8.0_212-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.212-b10, mixed mode)
2.MySQL安装
本系统采用MySQL数据库,安装包自备,通过rpm指令安装即可。数据库安装配置完成后如下所示。
[fjc@hadoop102 ~]$ mysql -uroot -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.28 MySQL Community Server (GPL)
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.
mysql>
3.Hadoop安装
Hadoop由于多个功能不同的组件组成,包括HDFS,MapReduce,Hive,Sqoop,Spark,Kafka等,能够实现数据的采集,处理,分析,存储等功能。因此,需进行各个组件安装配置,步骤如下。
安装解压指令:tar -zxvf xxxx -C /opt/module/ xxxx处是要解压的安装包
环境变量位置:
cd /etc/profile.d
vim my_env.sh
第一步:Hadoop安装。我的Hadoop版本是hadoop-3.1.3,解压安装包并安装到固定的位置,进行相关文件的配置,之后启动Hadoop进程,通过”jps“查看即可,安装之后启动Hadoop就可以用jps查看进程了,一定要有”Datanode,Namenode“。
第二步:Hive安装,我的hive版本是hive-3.1.2,安装步骤和Hadoop一样,安装完之后初始化数据库,通过”hive“命令启动Hive数据仓库即可,能成功启动hive就是安装成功。
第三步:Flume安装,步骤和上面一样,这个我没有安装,影响不大,配置好环境变量,输入”flume-ng version“查看版本,如果安装成功则显示版本号。
第四步:Sqoop安装,我的版本sqoop-1.4.7,安装步骤都是一样的,安装之后输入”sqoop -version“查看版本号,安装成功的话显示版本号。
第五步:Spark安装,我的版本spark-3.2.4,安装步骤同上,安装之后启动spark测试圆周率来判断是否安装成功。
第六步:Kafka安装,这个没有安装,安装步骤都是一样,启动之后用jps查看进程
4.python环境
Hadoop在实现数据的清洗时需要python,另外,Django可视化项目的实现也需要python语言的支持。python的安装文件自备,解压安装包指令和前几个步骤一样,编译安装并创建软连接即可,但需注意,centos自带python但是版本太可能会影响到python3.0的安装,可以删掉旧的软连接如果有的话。python也可以在本地运行不在虚拟机上装,我是python在本地。
5.Django环境
(1)安装
本系统的可视化部分使用Django3.0及以上的版本,解压缩之后通过”python setup.py install“指令进行安装即可。安装后输入”django-admin.py“查看Django的相关指令。
(2)配置
Django需要进行相关的配置,包括url路径,配置文件修改,MySQL数据库连接配置等
(3)运行
在项目及app创建完成后,配置settings.py以及urls.py,定义模板,输入”python man-ager.py runserver“启动Django,在浏览器输入”127.0.0.1:8000/路径“即可进入相应的页面。
上面是虚拟机的安装,我是安装在本地,简单介绍一下,有多种安装方法,我最常用的是在python里面直接安装,还有就是”pip install Django“这个指令 还有一个软件是anaconda 这个没用过但是挺方便的,安装好django之后使用”python manage.py runserver“这个指令运行Django,需要切换到相应的目录,目录里面一定要有这个manage.py启动之后如果没有报错的话,CTRL+左键 点击 127.0.0.1:8000/ 就可以,虚拟机可以,本地也行,虚拟机安装可能会有一些版本的报错。
系统部署
1.SQL文件的导入
将SQL文件附加到数据库中,创建完整的数据库,并进行简单的测试,验证数据库是否能够正常使用,完整的数据库如图7.1所示。

SQL导入:本地给出db.sql里面然后打开Navicat Premium 16 连接到MySQL然后运行SQL文件,选择本地bd.sql,然后字符集设置utf8 排序规则设置utf8_general_ci然后就可以了,检查表全部创建之后就可以进行接下来的导入步骤。
2.大数据任务的导入
将测试完成的MapReduce,Hive,Sqoop,Flume和Spark等数据分析代码导入生产环境中。
(1)MapReduce
将MapReduce代码导入大数据生产环境中,并编写定时执行脚本,设置程序每隔一段时间自动执行数据清洗任务,实现数据更新。
(2)Hive
将hive的SQL语句导入集群中,同样编写定时执行脚本,在MapReduce程序执行后执行,完成数据的定时分析。
(3)Sqoop
数据清洗与数据分析完成后将sqoop的代码导入集群中,完成数据可视化系统的迁移。
(4)Flume与Kafka
将测试完成的Flume代码导入集群中进行实时数据的采集,并采用Kafka接收。
(5)Spark
将测试完成的Spark Streaming程序编译为jar包的形式上传到集群中,实时接收Kafka的数据并完成数据的实时分析和数据库的导入。
以下代码是用sqoop导出到MySQL的代码,写的可执行脚本。
以下是数据分析的脚本
3.可视化模块的部署及访问
Django项目的部署非常简单,只需将项目文件拷贝到服务器中,再运行项目进行访问即可。
(1)使用IP地址访问
启动Django,打开浏览器,在地址栏输入”http://127.0.0.1:8000/路径“,进入项目登录界面,对客户机的系统进行简单的测试,保证项目能够正常地使用服务器数据库并正常运行。
(2)使用域名访问
除了通过IP地址访问空间,还可以通过域名对空间进行访问。域名是为了方便记忆而专门建立的一套地址转换系统,但是要访问一台互联网上的服务器,必须通过IP地址来实现。域名解析就是将域名重新转换为IP地址的过程。一个域名对应一个IP地址,但一个IP地址可以对应多个域名,所有多个域名可以同时被解析为一个IP地址。域名的解析需要由专业的域名服务器(DNS)来完成,流程为:域名→DNS(域名解析服务器)→网站,整个过程为自动操作,只需要将申请到的域名与网站空间的IP地址绑定即可。
错误总结:
sqoop导出到MySQL之后,中文数据乱码####,MySQL中表字符编码字符排序都没有问题,最后是在导入命令后加上\?useUnicode=true\&characterEncoding=utf-8重新导入才解决。
建表时报错,查看报错信息,time这个字节的原因应加上反引号“,加上之后重新创建没有报错。
这篇文章5月11日21:25开始写的5月29日下午写完的,还有一些地方需要完善,如果有时间的话再整理。


