摘 要
随着工业化和城市化的快速发展,空气质量问题日益引起人们的关注。为了有效监测和分析空气质量数据,及时预警和应对空气污染事件,开发一套高效、实时的空气质量分析系统变得尤为重要。Hadoop作为一种分布式计算框架,具有处理海量数据的能力和高度的可扩展性,为空气质量实时分析提供了强大的技术支持。
基于Hadoop的空气质量实时分析系统能够实现对空气质量数据的快速采集、存储、处理和分析。该系统能够利用Hadoop的分布式计算能力,对海量的空气质量数据进行并行处理,提取出关键信息并进行实时分析。
此外,基于Hadoop的空气质量实时分析系统还具有高度的可扩展性和灵活性,可以适应不同场景和需求的变化。无论是城市级别的空气质量监测还是区域性的污染预警,该系统都能够提供准确、及时的数据分析结果。
因此,设计并实现一套基于Hadoop的空气质量实时分析系统对于提升空气质量监测和分析能力、促进环境保护和可持续发展具有重要意义。本文将详细介绍该系统的设计与实现过程,以期为相关领域的研究和应用提供参考和借鉴。
关键词:空气质量实时分析系统;Hadoop框架;系统设计
Design and implementation of a real-time air quality analysis system based on Hadoop
Abstract
With the rapid development of industrialization and urbanization, air quality issues are increasingly attracting people's attention. In order to effectively monitor and analyze air quality data, timely warn and respond to air pollution incidents, it is particularly important to develop an efficient and real-time air quality analysis system. Hadoop, as a distributed computing framework, has the ability to process massive amounts of data and high scalability, providing powerful technical support for real-time analysis of air quality.
The Hadoop based real-time air quality analysis system can achieve rapid collection, storage, processing, and analysis of air quality data. This system can utilize Hadoop's distributed computing power to perform parallel processing on massive air quality data, extract key information, and perform real-time analysis.
In addition, the real-time air quality analysis system based on Hadoop also has high scalability and flexibility, which can adapt to changes in different scenarios and needs. Whether it is urban level air quality monitoring or regional pollution warning, this system can provide accurate and timely data analysis results.
Therefore, designing and implementing a Hadoop based real-time air quality analysis system is of great significance for improving air quality monitoring and analysis capabilities, promoting environmental protection and sustainable development. This article will provide a detailed introduction to the design and implementation process of the system, in order to provide reference and inspiration for research and application in related fields.
Keywords: Real time air quality analysis system; Hadoop framework; system design
目 录
第1章 绪论
1.1研究背景与意义
随着工业化、城市化的快速发展,空气质量问题日益严重,对人们的健康和生活质量造成了严重影响。为了有效应对这一挑战,空气质量实时分析系统的设计与实现显得尤为重要。该系统能够及时收集、处理和分析空气质量数据,提供准确、全面的空气质量信息,为政府决策、公众健康提供有力支持。同时,空气质量实时分析系统还能够监测空气污染事件,及时预警和应对,减少空气污染对人们的影响。因此,空气质量实时分析系统的设计与实现对于环境保护、公众健康和生活质量的提升具有重要意义。
1.2国内外研究现状
国内研究现状:
近年来,随着国内环境问题的日益突出,空气质量实时分析系统在国内得到了广泛的关注和研究。国内的研究主要集中在系统的数据采集、处理和分析技术方面。例如,通过布置空气质量监测站点和移动监测设备,收集各个位置的空气质量数据,并运用传感器技术实时监测空气中的颗粒物、二氧化硫、一氧化碳等关键指标。此外,国内的研究还涉及如何利用大数据、云计算等技术对空气质量数据进行高效处理和分析,以提供实时、准确的空气质量信息。
国外研究现状:
在国外,空气质量实时分析系统的研究与应用相对较为成熟。一些发达国家早已建立了完善的空气质量监测网络,并运用先进的技术手段进行空气质量数据的采集和分析。例如,基于ZigBee技术的空气质量检测系统已经在一些地区得到应用,实现了对特定区域内空气质量的实时监测。此外,国外的研究还关注如何将空气质量数据与气象学、数值模拟等技术相结合,进行科学的分析和预测,为政府决策和公众健康提供更加精准的依据。
综上所述,国内外在空气质量实时分析系统的设计与实现方面均取得了一定的成果。然而,随着环境问题的不断变化和技术的持续进步,仍需要进一步加强研究和应用,提高系统的准确性和实时性,以更好地服务于环境保护和公众健康。
1.3论文结构
第一章是论文的绪论部分,主要介绍了课题的研究背景意义及研究现状。
第二章研究了空气质量实时分析系统的所采用的开发技术和开发工具。
第三章研究了空气质量实时分析系统的需求分析,根据系统的特点,分析系统采用的体系结构及开发方法,以及该系统的运行环境,并分析了业务流程,绘制了业务流程以及数据流程。
第四章是对系统的详细设计进行说明。
第五章是系统的具体实现,介绍系统的各个模块的具体实现。
第六章在前几章的基础上对系统进行测试和运行。
第2章 主要技术和工具介绍
2.1 Hadoop框架介绍
Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。Hadoop实现了一个分布式文件系统( Distributed File System),其中一个组件是HDFS(Hadoop Distributed File System)。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,而MapReduce则为海量的数据提供了计算。
2.2 MySQL 数据库
MySQL 是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL 所使用的 SQL 语言是用于访问数据库的最常用标准化语言。因为其自身的功能相当强大,目前已成为最为流行的数据库软件之一[7]。
MySQL是一个开放源码的小型关联式数据库管理系统,开发者为瑞典MySQL AB公司。目前MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库[8]。
2.3 B/S结构
系统计划采用BS模式,是因为比传统的C/S结构具有明显的优越性。B/S模式也就是浏览器/服务器模式,它的界面部分是在浏览器端展示,而主要工作是由服务器端进行实现的,用户的请求由浏览器端提交给服务器端进行处理,而服务器将处理结果反馈给浏览器端,在浏览器端界面描画给用户查看。采用B/S模式不仅可以避免用户必须安装专业软件才能开发系统或者访问系统的局限性,而且更加便利。
2.4 JAVA技术
Java主要采用CORBA技术和安全模型,可以在互联网应用的数据保护。它还提供了对EJB(Enterprise JavaBeans)的全面支持,java servlet API,SSM(java server pages),和XML技术。
JAVA语言功能:
面向对象:面向对象是Java编程语言的标志之一,是一种软件开发方法。最重要的是将所有东西变成对象,然后以某种方式编程。编程时,代码和数据写在每个对象上。 面向对象编程方法的出现使得人们在编程过程中的设计思考和操作变得非常简单,同时也提高了程序的安全性。
跨平台:Java流行的一个关键特性是它的跨平台特性,这使得用Java编程变得容易。您可以用Java编写程序并在其他地方运行它,而无需在编译后更改它。
垃圾回收机制:用来将那些在程序不操作时无用的对象所占用的内存空间释放掉,C ++最被人厌恶的就是因为其不能将在编程的过程中所占用的内存空间进行及时的释放,导致随着编程时间的变长所占用的内存空间越来越多。对于一些编程高手而言,他们会在刚开始编程的时候配置一块内存地址放在堆栈上,然后在不需要的时候会对其进行释放,而一些新手和菜鸟在很多的时候会忘记删除这个内存地址,从而导致程序在运行的过程中会变得十分的不稳定,最终有可能会导致程序崩溃。所以很多C ++的高手在编写程序时往往都会将删除后的指针的值设置为NULL,然后在删除之前确定一个指针的值是否为NULL。
2.5 MVVM模式介绍
MVVM是Model-View-ViewModel的简写。它本质上就是MVC 的改进版。MVVM 就是将其中的View 的状态和行为抽象化,让我们将视图 UI 和业务逻辑分开。当然这些事 ViewModel 已经帮我们做了,它可以取出 Model 的数据同时帮忙处理 View 中由于需要展示内容而涉及的业务逻辑。微软的WPF带来了新的技术体验,如Silverlight、音频、视频、3D、动画……,这导致了软件UI层更加细节化、可定制化。同时,在技术层面,WPF也带来了 诸如Binding、Dependency Property、Routed Events、Command、DataTemplate、ControlTemplate等新特性。MVVM(Model-View-ViewModel)框架的由来便是MVP(Model-View-Presenter)模式与WPF结合的应用方式时发展演变过来的一种新型架构框架。它立足于原有MVP框架并且把WPF的新特性糅合进去,以应对客户日益复杂的需求变化。
第3章 系统分析
3.1可行性分析
分析用户需求和数据需求,得到一个方案,然后设定系统的开发方案,为每个功能模块设计出物理设计方案,开发本系统的是否可行?本文从技术上、操作上和经济上对本系统的开发进行可行性分析。
3.1.1经济可行性
空气质量实时分析系统属于一个工具型的系统,它可以节省工作人员大量数据收集、方便快捷,能够极大地提高工作效率,最大限度的降低管理员的工作量,使管理尽量简便,同时促进交易数据管理的信息化、现代化,及时提供必要的信息统计。因为整个系统采用Tomcat+MySQL+java组合,这几个软件都是免费开源的,系统开发所需的费用是比较低的,由于系统并不复杂,其运行与培训费用也不会占用很多资金,可以预见系统完成后可以带来较大的经济效益。
3.1.2技术可行性
本系统选用Windows 10作为操作平台,结合MySQL数据库管理系统,确保了跨平台的兼容性和数据管理的稳定性。MySQL在Windows 7和Windows 10上均可顺畅运行,并提供数据复制功能,有效替代了传统的手工单据数据传递方式。应用软件开发则选用Pycharm平台,确保了开发效率和代码质量。综上所述,技术选型和平台搭配合理,完全满足系统的技术需求,确保了系统的技术可行性。
3.1.3操作可行性
本系统使用的是现流行的开发语言,即Hadoop技术。同时所有的信息都是以网页的形式展示,系统中的信息都可以在后台操作数据库达到数据更新的效果。用户只需要会计算机的基本操作或者会上网就可以使用本系统。系统布局较简单,功能操作不复杂,完全符合现代市场需求。
3.2需求分析
针对现存的问题和需要,通过功能需求的分析,特建立了数字化、信息化的空气质量实时分析系统。
本系统主要分为普通用户和管理员两大部分,普通用户主要包含了注册登录、首页 、天气资讯、天气预报、我的账户、个人中心(个人首页、收藏)功能模块。下面分别简单阐述一下这几个功能模块需求。
表3-1功能需求表
编号 | 功能名称 | 功能描述 |
| 普通用户注册登录 | 普通用户可以通过注册账号并使用用户名和密码登录系统,以便访问个人信息和使用系统功能。 |
| 天气资讯 | 普通用户可以查看天气相关的资讯,包括空气质量解读、环境保护知识等内容。 |
| 天气预报 | 普通用户能够浏览天气预报信息,包括未来几天的天气情况、空气质量趋势等 |
| 收藏 | 用户可以将感兴趣的内容加入收藏夹,方便日后查看和管理。 |
管理员主要包含了登录、系统用户、天气预报管理、氧气数据管理、PH数据管理、系统管理、资源管理(天气资讯、资讯分类)功能模块。下面分别简单阐述一下这几个功能模块需求。
表3-2功能需求表
编号 | 功能名称 | 功能描述 |
| 管理员登录 | 管理员需要通过管理员账号和密码登录系统,以便进行管理和监控。 |
| 系统用户 | 管理员需要进行系统用户的管理,包括添加新用户、修改用户信息、重置密码、权限管理等操作。 |
| 天气预报管理 | 管理员需要管理系统的天气预报信息,包括更新和维护天气预报的准确性和及时性。 |
| 氧气数据管理 | 管理员需要管理系统中的氧气数据,包括实时监测数据、历史数据的存储和维护。 |
| PH数据管理 | 管理员需要管理系统中的PH数据,包括实时监测数据、历史数据的存储和维护。 |
| 系统管理 | 管理员需要管理系统的轮播图,包括添加、编辑、删除等操作。 |
| 资源管理 | 管理员需要管理系统的天气资讯,包括添加新闻、编辑新闻内容、删除新闻等操作,并能对新闻进行分类管理 |
3.3非功能需求分析
首先主要考虑的是系统功能软件,在具体设计的环节上,是不是能够较好的满足各类用户的基本功能需求,如果不能较好的满足用户需求,那么这个系统的存在是没有价值的。软件系统的非功能性求分析,从7个方面展开,一个是性能分析,针对系统;一个是安全分析,针对系统,一个是完整度分析,针对系统,一个是可维护分析,针对系统,一个是可扩展性分析,针对系统,一个是适应业务的性能分析。面对房源数据可视化分析系统存在的性能、安全、扩展、完整度等7个方面性能综合比对分析后发现,需要相应的非功能性需求分析。
3.4安全性需求分析
3.4.1系统的安全性
安全性对每一个系统来说都是非常重要的。安全性很好的系统可以保护企业的信息和用户的信息不被窃取。提高系统的安全性不仅是对用户的负责,更是对企业的负责。尤其针对于天气数据分析系统来说,必须要有很好的安全性来保障整个系统。
系统具有对使用者有权限控制,针对角色的不通限制使用者的权限,以此来确保系统的安全性。
3.4.2数据的安全性
数据库中的数据是从外界输入的,当数据的输入时,由于种种原因,输入的数据会无效,或者是脏数据。因此,怎样保证输入的数据符合规定,成为了数据库系统,尤其是多用户的关系数据库系统首要关注的问题。
因此,在写入数据库时,要保证数据完整性、正确性和一致性。
3.5用例分析
根据3.2需求分析,得出系统用例图如下:
普通用户用例图如3-1所示。
图3-1 普通用户用例图
管理员用例图如3-2所示。
图3-2 管理员用例图
3.6数据流程分析
对系统的数据流进行分析,系统的使用者为管理员。系统主要对界面信息传送,登录信息的验证,管理员各种操作的响应做处理。
系统顶层数据流图如下图所示。
图3-3 顶层数据流图
要判断用户是是什么身份,是根据登录的数据来判断后,跳转到对应的功能界面。在系统的内部用户就可以对数据进行操作,数据库中心就可以接收到系统传输的有效数据流来对数据sql语句进行对应操作。
系统底层数据流图如下图所示。

图3-4 底层数据流图
第4章 系统设计
4.1开发环境
- 软件体系结构方案:采用B/S模式,B/S代表的是服务器端由Web服务器发放,客户端由浏览器接收的系统,它的前台是Html语言,由浏览器解释。B/S结构可以由Web服务器能够解释的脚本语言如Django。
- 操作系统方案:Windows10(旗舰版)操作系统,该系统可以兼容需要的软件,并且具有良好的运行速度,界面良好。
- 后台数据库:选用MySQL。MySQL旨在通过数据库加密、更加安全的默认设置、加强的密码政策和细化许可控制、及加强的安全模型等特性,为企业数据提供最高级别的安全性。
- 开发工具:前台网页使用Dreamweaver工具,后台逻辑选用Pycharm。
- 开发语言:java语言。
- 开发技术:Hadoop+MVC +Html+CSS+JS技术
4.2系统结构设计
本系统使用的角色主要有系统管理员和普通用户,主要由管理员使用,以管理员的身份在登录页面输入账号和密码,经过数据库身份验证,验证成功后登录系统主页,可以使用后台首页、系统用户、天气预报管理、氧气数据管理、PH数据管理、系统管理、资源管理(天气资讯、资讯分类)等功能操作。同时管理员可以通过关键字搜索可以搜索相应的信息,下载导入文件,导入各类信息列表至系统中。
系统的功能结构图如下图所示。

图4-1系统功能结构图
4.3数据库设计
4.3.1数据库设计概述
为了实现系统的功能设计,就要有相应的数据库表设计。根据系统的功能设计要求为各个数据库表设计字段、数据类型、是否为空等的相关信息。在实际调研和需求分析的基础上,对该系统设计数据库。再有系统的需求分析可以看出,本系统有两个角色:普通用户和管理员,他们分别在系统的运行和使用中起着不同的作用。合理的数据库结构设计可以提高数据存储的效率,保证数据的完整性和一致性。数据库中表的设计主要考虑两个方面:一是整个管理系统的所有表中的数据要共享性高、冗余度小、占用最可能小的存储空间。
4.3.2概念设计
概念设计是整个数据库设计的关键,在概念设计阶段,由需求分析得到了E-R模型。E-R图是识别功能模型与数据模型间关联关系的,在主题数据库的抽取和规范化的过程中,采用的是简化的E-R图表示方法,从而避免过繁过细的E-R图表示影响规划的直观和可用性。是对现实世界的抽象和概括,是数据库设计人员进行数据可设计的有力工具,能够方便直接地表达应用中的各种语义知识,令一方面它简单、清晰、易于用户理解。

图4-2系统总体ER图
4.3.3数据表
数据库逻辑结构就是将E-R图在数据库中用具体的字段进行描述。用字段和数据类型描述来使对象特征实体化,最后形成具有一定逻辑关系的数据库表结构。空气质量实时分析系统所需要的部分数据结构表如下表所示。
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | token_id | int | 10 | 0 | N | Y | 临时访问牌ID | |
2 | token | varchar | 64 | 0 | Y | N | 临时访问牌 | |
3 | info | text | 65535 | 0 | Y | N | ||
4 | maxage | int | 10 | 0 | N | N | 2 | 最大寿命:默认2小时 |
5 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
6 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
7 | user_id | int | 10 | 0 | N | N | 0 | 用户编号: |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | article_id | mediumint | 8 | 0 | N | Y | 文章id:[0,8388607] | |
2 | title | varchar | 125 | 0 | N | Y | 标题:[0,125]用于文章和html的title标签中 | |
3 | type | varchar | 64 | 0 | N | N | 0 | 文章分类:[0,1000]用来搜索指定类型的文章 |
4 | hits | int | 10 | 0 | N | N | 0 | 点击数:[0,1000000000]访问这篇文章的人次 |
5 | praise_len | int | 10 | 0 | N | N | 0 | 点赞数 |
6 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
7 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
8 | source | varchar | 255 | 0 | Y | N | 来源:[0,255]文章的出处 | |
9 | url | varchar | 255 | 0 | Y | N | 来源地址:[0,255]用于跳转到发布该文章的网站 | |
10 | tag | varchar | 255 | 0 | Y | N | 标签:[0,255]用于标注文章所属相关内容,多个标签用空格隔开 | |
11 | content | longtext | 2147483647 | 0 | Y | N | 正文:文章的主体内容 | |
12 | img | varchar | 255 | 0 | Y | N | 封面图 | |
13 | description | text | 65535 | 0 | Y | N | 文章描述 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | type_id | smallint | 5 | 0 | N | Y | 分类ID:[0,10000] | |
2 | display | smallint | 5 | 0 | N | N | 100 | 显示顺序:[0,1000]决定分类显示的先后顺序 |
3 | name | varchar | 16 | 0 | N | N | 分类名称:[2,16] | |
4 | father_id | smallint | 5 | 0 | N | N | 0 | 上级分类ID:[0,32767] |
5 | description | varchar | 255 | 0 | Y | N | 描述:[0,255]描述该分类的作用 | |
6 | icon | text | 65535 | 0 | Y | N | 分类图标: | |
7 | url | varchar | 255 | 0 | Y | N | 外链地址:[0,255]如果该分类是跳转到其他网站的情况下,就在该URL上设置 | |
8 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
9 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | auth_id | int | 10 | 0 | N | Y | 授权ID: | |
2 | user_group | varchar | 64 | 0 | Y | N | 用户组: | |
3 | mod_name | varchar | 64 | 0 | Y | N | 模块名: | |
4 | table_name | varchar | 64 | 0 | Y | N | 表名: | |
5 | page_title | varchar | 255 | 0 | Y | N | 页面标题: | |
6 | path | varchar | 255 | 0 | Y | N | 路由路径: | |
7 | position | varchar | 32 | 0 | Y | N | 位置: | |
8 | mode | varchar | 32 | 0 | N | N | _blank | 跳转方式: |
9 | add | tinyint | 3 | 0 | N | N | 1 | 是否可增加: |
10 | del | tinyint | 3 | 0 | N | N | 1 | 是否可删除: |
11 | set | tinyint | 3 | 0 | N | N | 1 | 是否可修改: |
12 | get | tinyint | 3 | 0 | N | N | 1 | 是否可查看: |
13 | field_add | text | 65535 | 0 | Y | N | 添加字段: | |
14 | field_set | text | 65535 | 0 | Y | N | 修改字段: | |
15 | field_get | text | 65535 | 0 | Y | N | 查询字段: | |
16 | table_nav_name | varchar | 500 | 0 | Y | N | 跨表导航名称: | |
17 | table_nav | varchar | 500 | 0 | Y | N | 跨表导航: | |
18 | option | text | 65535 | 0 | Y | N | 配置: | |
19 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
20 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | collect_id | int | 10 | 0 | N | Y | 收藏ID: | |
2 | user_id | int | 10 | 0 | N | N | 0 | 收藏人ID: |
3 | source_table | varchar | 255 | 0 | Y | N | 来源表: | |
4 | source_field | varchar | 255 | 0 | Y | N | 来源字段: | |
5 | source_id | int | 10 | 0 | N | N | 0 | 来源ID: |
6 | title | varchar | 255 | 0 | Y | N | 标题: | |
7 | img | varchar | 255 | 0 | Y | N | 封面: | |
8 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
9 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | comment_id | int | 10 | 0 | N | Y | 评论ID: | |
2 | user_id | int | 10 | 0 | N | N | 0 | 评论人ID: |
3 | reply_to_id | int | 10 | 0 | N | N | 0 | 回复评论ID:空为0 |
4 | content | longtext | 2147483647 | 0 | Y | N | 内容: | |
5 | nickname | varchar | 255 | 0 | Y | N | 昵称: | |
6 | avatar | varchar | 255 | 0 | Y | N | 头像地址:[0,255] | |
7 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
8 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
9 | source_table | varchar | 255 | 0 | Y | N | 来源表: | |
10 | source_field | varchar | 255 | 0 | Y | N | 来源字段: | |
11 | source_id | int | 10 | 0 | N | N | 0 | 来源ID: |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | daily_data_id | int | 10 | 0 | N | Y | 日常数据ID | |
2 | city_name | varchar | 64 | 0 | Y | N | 城市名称 | |
3 | start_time | varchar | 64 | 0 | Y | N | 开始时间 | |
4 | end_time | varchar | 64 | 0 | Y | N | 结束时间 | |
5 | pm25 | varchar | 64 | 0 | Y | N | PM2.5 | |
6 | pm10 | varchar | 64 | 0 | Y | N | PM10 | |
7 | nitric_oxide | varchar | 64 | 0 | Y | N | 一氧化氮 | |
8 | nitrogen_dioxide | varchar | 64 | 0 | Y | N | 二氧化氮 | |
9 | nitrogen_oxide | varchar | 64 | 0 | Y | N | 氮氧化物 | |
10 | ammonia_gas_value | varchar | 64 | 0 | Y | N | 氨气数值 | |
11 | sulfur_dioxide | varchar | 64 | 0 | Y | N | 二氧化硫 | |
12 | carbon_monoxide | varchar | 64 | 0 | Y | N | 一氧化碳 | |
13 | ozone | varchar | 64 | 0 | Y | N | 臭氧 | |
14 | relative_humidity | varchar | 64 | 0 | Y | N | 相对湿度 | |
15 | wind_speed_value | varchar | 64 | 0 | Y | N | 风速数值 | |
16 | wind_direction_value | varchar | 64 | 0 | Y | N | 风向数值 | |
17 | snow_distribution | varchar | 64 | 0 | Y | N | 积雪分布 | |
18 | atmospheric_pressure_value | varchar | 64 | 0 | Y | N | 大气压值 | |
19 | xylene_value | varchar | 64 | 0 | Y | N | 二甲苯值 | |
20 | air_pressure | varchar | 64 | 0 | Y | N | 空气压强 | |
21 | rf_value | varchar | 64 | 0 | Y | N | 射频数值 | |
22 | gas_column_radio_frequency | varchar | 64 | 0 | Y | N | 气柱射频 | |
23 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
24 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | hits_id | int | 10 | 0 | N | Y | 点赞ID: | |
2 | user_id | int | 10 | 0 | N | N | 0 | 点赞人: |
3 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
4 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
5 | source_table | varchar | 255 | 0 | Y | N | 来源表: | |
6 | source_field | varchar | 255 | 0 | Y | N | 来源字段: | |
7 | source_id | int | 10 | 0 | N | N | 0 | 来源ID: |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | oxygen_data_id | int | 10 | 0 | N | Y | 氧气数据ID | |
2 | city_name | varchar | 64 | 0 | Y | N | 城市名称 | |
3 | record_date | date | 10 | 0 | Y | N | 记录日期 | |
4 | oxygen_value | varchar | 64 | 0 | Y | N | 氧气数值 | |
5 | record_remarks | text | 65535 | 0 | Y | N | 记录备注 | |
6 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
7 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | ph_data_id | int | 10 | 0 | N | Y | PH数据ID | |
2 | city_name | varchar | 64 | 0 | Y | N | 城市名称 | |
3 | record_date | date | 10 | 0 | Y | N | 记录日期 | |
4 | ph_value | varchar | 64 | 0 | Y | N | PH数值 | |
5 | record_remarks | text | 65535 | 0 | Y | N | 记录备注 | |
6 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
7 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | praise_id | int | 10 | 0 | N | Y | 点赞ID: | |
2 | user_id | int | 10 | 0 | N | N | 0 | 点赞人: |
3 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
4 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
5 | source_table | varchar | 255 | 0 | Y | N | 来源表: | |
6 | source_field | varchar | 255 | 0 | Y | N | 来源字段: | |
7 | source_id | int | 10 | 0 | N | N | 0 | 来源ID: |
8 | status | bit | 1 | 0 | N | N | 1 | 点赞状态:1为点赞,0已取消 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | regular_users_id | int | 10 | 0 | N | Y | 普通用户ID | |
2 | user_name | varchar | 64 | 0 | Y | N | 用户姓名 | |
3 | user_gender | varchar | 64 | 0 | Y | N | 用户性别 | |
4 | user_phone_number | varchar | 64 | 0 | Y | N | 用户电话 | |
5 | user_age | varchar | 64 | 0 | Y | N | 用户年龄 | |
6 | examine_state | varchar | 16 | 0 | N | N | 已通过 | 审核状态 |
7 | user_id | int | 10 | 0 | N | N | 0 | 用户ID |
8 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
9 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | slides_id | int | 10 | 0 | N | Y | 轮播图ID: | |
2 | title | varchar | 64 | 0 | Y | N | 标题: | |
3 | content | varchar | 255 | 0 | Y | N | 内容: | |
4 | url | varchar | 255 | 0 | Y | N | 链接: | |
5 | img | varchar | 255 | 0 | Y | N | 轮播图: | |
6 | hits | int | 10 | 0 | N | N | 0 | 点击量: |
7 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
8 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | upload_id | int | 10 | 0 | N | Y | 上传ID | |
2 | name | varchar | 64 | 0 | Y | N | 文件名 | |
3 | path | varchar | 255 | 0 | Y | N | 访问路径 | |
4 | file | varchar | 255 | 0 | Y | N | 文件路径 | |
5 | display | varchar | 255 | 0 | Y | N | 显示顺序 | |
6 | father_id | int | 10 | 0 | Y | N | 0 | 父级ID |
7 | dir | varchar | 255 | 0 | Y | N | 文件夹 | |
8 | type | varchar | 32 | 0 | Y | N | 文件类型 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | user_id | mediumint | 8 | 0 | N | Y | 用户ID:[0,8388607]用户获取其他与用户相关的数据 | |
2 | state | smallint | 5 | 0 | N | N | 1 | 账户状态:[0,10](1可用|2异常|3已冻结|4已注销) |
3 | user_group | varchar | 32 | 0 | Y | N | 所在用户组:[0,32767]决定用户身份和权限 | |
4 | login_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 上次登录时间: |
5 | phone | varchar | 11 | 0 | Y | N | 手机号码:[0,11]用户的手机号码,用于找回密码时或登录时 | |
6 | phone_state | smallint | 5 | 0 | N | N | 0 | 手机认证:[0,1](0未认证|1审核中|2已认证) |
7 | username | varchar | 16 | 0 | N | N | 用户名:[0,16]用户登录时所用的账户名称 | |
8 | nickname | varchar | 16 | 0 | Y | N | 昵称:[0,16] | |
9 | password | varchar | 64 | 0 | N | N | 密码:[0,32]用户登录所需的密码,由6-16位数字或英文组成 | |
10 | | varchar | 64 | 0 | Y | N | 邮箱:[0,64]用户的邮箱,用于找回密码时或登录时 | |
11 | email_state | smallint | 5 | 0 | N | N | 0 | 邮箱认证:[0,1](0未认证|1审核中|2已认证) |
12 | avatar | varchar | 255 | 0 | Y | N | 头像地址:[0,255] | |
13 | open_id | varchar | 255 | 0 | Y | N | 针对获取用户信息字段 | |
14 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
15 | vip_level | varchar | 255 | 0 | Y | N | 会员等级 | |
16 | vip_discount | double | 11 | 2 | Y | N | 0.00 | 会员折扣 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | group_id | mediumint | 8 | 0 | N | Y | 用户组ID:[0,8388607] | |
2 | display | smallint | 5 | 0 | N | N | 100 | 显示顺序:[0,1000] |
3 | name | varchar | 16 | 0 | N | N | 名称:[0,16] | |
4 | description | varchar | 255 | 0 | Y | N | 描述:[0,255]描述该用户组的特点或权限范围 | |
5 | source_table | varchar | 255 | 0 | Y | N | 来源表: | |
6 | source_field | varchar | 255 | 0 | Y | N | 来源字段: | |
7 | source_id | int | 10 | 0 | N | N | 0 | 来源ID: |
8 | register | smallint | 5 | 0 | Y | N | 0 | 注册位置: |
9 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
10 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | weather_quality_id | int | 10 | 0 | N | Y | 天气质量ID | |
2 | city_name | varchar | 64 | 0 | Y | N | 城市名称 | |
3 | forecast_date | date | 10 | 0 | Y | N | 预报日期 | |
4 | weather_conditions | varchar | 64 | 0 | Y | N | 天气状况 | |
5 | image_display | varchar | 255 | 0 | Y | N | 图片展示 | |
6 | air_quality | varchar | 64 | 0 | Y | N | 空气质量 | |
7 | pm25 | int | 10 | 0 | Y | N | 0 | PM2.5 |
8 | pm10 | int | 10 | 0 | Y | N | 0 | PM10 |
9 | nitric_oxide | int | 10 | 0 | Y | N | 0 | 一氧化氮 |
10 | nitrogen_dioxide | int | 10 | 0 | Y | N | 0 | 二氧化氮 |
11 | nitrogen_oxide | int | 10 | 0 | Y | N | 0 | 氮氧化物 |
12 | ammonia_gas_value | int | 10 | 0 | Y | N | 0 | 氨气数值 |
13 | sulfur_dioxide | int | 10 | 0 | Y | N | 0 | 二氧化硫 |
14 | carbon_monoxide | int | 10 | 0 | Y | N | 0 | 一氧化碳 |
15 | hits | int | 10 | 0 | N | N | 0 | 点击数 |
16 | praise_len | int | 10 | 0 | N | N | 0 | 点赞数 |
17 | location_address | varchar | 64 | 0 | Y | N | 当前位置 | |
18 | location_lng | varchar | 64 | 0 | Y | N | 当前位置经度 | |
19 | location_lat | varchar | 64 | 0 | Y | N | 当前位置纬度 | |
20 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
21 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
第5章 系统实现
5.1普通用户功能模块
5.1.1 前台首页界面
当进入空气质量实时分析系统的时候,系统以上中下的布局进行展示,首先映入眼帘的是系统的导航栏,中间是全国气温距平预报图,最下面是天气预报,其主界面展示如下图所示。

图5-1 前台首页界面图
5.1.2 用户注册界面
空气质量实时分析系统的游客和普通用户时可以进行注册登录,当用户右上角“注册”按钮的时候,当填写上自己的账号+密码+确认密码+昵称+邮箱+用户姓名+性别+身份+电话等信息再点击“注册”按钮后将会先验证输入的有没有空数据,再次验证密码和确认密码是否是一样的,最后验证输入的账户名和数据库表中已经注册的账户名是否重复,只有都验证没问题后即可用户注册成功。其用户注册界面展示如下图所示。

图5-2注册界面图
注册关键代码如下:
/**
* 注册
* @param user
* @return
*/
@PostMapping("register")
public Map<String, Object> signUp(@RequestBody User user) {
// 查询用户
Map<String, String> query = new HashMap<>();
Map<String,Object> map = JSON.parseObject(JSON.toJSONString(user));
query.put("username",user.getUsername());
List list = service.selectBaseList(service.select(query, new HashMap<>()));
if (list.size()>0){
return error(30000, "用户已存在");
}
map.put("password",service.encryption(String.valueOf(map.get("password"))));
service.insert(map);
return success(1);
}
5.1.3 用户登录界面
空气质量实时分析系统中的前台上注册后的用户是可以通过自己的用户名和密码进行登录的,当普通用户输入完整的自己的用户名和密码信息并点击“登录”按钮后,将会首先验证输入的有没有空数据,再次验证输入的账户名+密码和数据库中当前保存的用户信息是否一致,只有在一致后将会登录成功并自动跳转到空气质量实时分析系统的首页中;否则将会提示相应错误信息,用户登录界面如下图所示。

图5-3用户登录界面图
登录的逻辑代码如下所示。
/**
* 登录
* @param data
* @param httpServletRequest
* @return
*/
@PostMapping("login")
public Map<String, Object> login(@RequestBody Map<String, String> data, HttpServletRequest httpServletRequest) {
log.info("[执行登录接口]");
String username = data.get("username");
String email = data.get("email");
String phone = data.get("phone");
String password = data.get("password");
List resultList = null;
Map<String, String> map = new HashMap<>();
if(username != null && "".equals(username) == false){
map.put("username", username);
resultList = service.select(map, new HashMap<>()).getResultList();
}
else if(email != null && "".equals(email) == false){
map.put("email", email);
resultList = service.select(map, new HashMap<>()).getResultList();
}
else if(phone != null && "".equals(phone) == false){
map.put("phone", phone);
resultList = service.select(map, new HashMap<>()).getResultList();
}else{
return error(30000, "账号或密码不能为空");
}
if (resultList == null || password == null) {
return error(30000, "账号或密码不能为空");
}
//判断是否有这个用户
if (resultList.size()<=0){
return error(30000,"用户不存在");
}
User byUsername = (User) resultList.get(0);
Map<String, String> groupMap = new HashMap<>();
groupMap.put("name",byUsername.getUserGroup());
List groupList = userGroupService.select(groupMap, new HashMap<>()).getResultList();
if (groupList.size()<1){
return error(30000,"用户组不存在");
}
UserGroup userGroup = (UserGroup) groupList.get(0);
//查询用户审核状态
if (!StringUtils.isEmpty(userGroup.getSourceTable())){
String sql = "select examine_state from "+ userGroup.getSourceTable() +" WHERE user_id = " + byUsername.getUserId();
String res = String.valueOf(service.runCountSql(sql).getSingleResult());
if (res==null){
return error(30000,"用户不存在");
}
if (!res.equals("已通过")){
return error(30000,"该用户审核未通过");
}
}
//查询用户状态
if (byUsername.getState()!=1){
return error(30000,"用户非可用状态,不能登录");
}
String md5password = service.encryption(password);
if (byUsername.getPassword().equals(md5password)) {
// 存储Token到数据库
AccessToken accessToken = new AccessToken();
accessToken.setToken(UUID.randomUUID().toString().replaceAll("-", ""));
accessToken.setUser_id(byUsername.getUserId());
tokenService.save(accessToken);
// 返回用户信息
JSONObject user = JSONObject.parseObject(JSONObject.toJSONString(byUsername));
user.put("token", accessToken.getToken());
JSONObject ret = new JSONObject();
ret.put("obj",user);
return success(ret);
} else {
return error(30000, "账号或密码不正确");
}
}
5.1.4天气资讯界面
当用户点击空气质量实时分析系统中导航栏上的“天气资讯”后将会进入到该“天气资讯”界面,然后选择想要看的天气资讯,点击进入到详细界面,在详细界面可以收藏+点赞+评论等操作。天气资讯界面如下图所示。

图5-4天气资讯界面图
5.1.5天气预报界面
当用户点击空气质量实时分析系统中导航栏上的“天气预报”后将会进入到该“天气预报”列表界面,然后选择想要看的天气预报,点击进入到详细界面,在详细界面可以收藏+点赞+评论等操作。天气预报界面如下图所示。

图5-5 天气预报界面图
天气预报关键代码如下:
@PostMapping("/set")
@Transactional
public Map<String, Object> set(HttpServletRequest request) throws IOException {
service.update(service.readQuery(request), service.readConfig(request), service.readBody(request.getReader()));
return success(1);
}
5.1.6收藏界面
用户可以将感兴趣的内容加入收藏夹,方便日后查看和管理。收藏界面如下图所示。

图5-6 收藏界面图
5.2管理员功能模块
5.2.1系统用户管理界面
空气质量实时分析系统中的管理人员在“系统用户”这一菜单是中可以对管理员、普通用户进行管控。界面如下图所示。

图5-7用户管理界面图
用户管理关键代码如下:
@PostMapping("/add")
@Transactional
public Map<String, Object> add(HttpServletRequest request) throws IOException {
service.insert(service.readBody(request.getReader()));
return success(1);
}
public Map<String, Object> addMap(Map<String,Object> map){
service.insert(map);
return success(1);
}
5.2.2 天气预报管理界面
管理员点击“天气预报管理”会显示天气预报列表和天气预报添加这两个子菜单,支持输入城市名称、预报日期、紫外线数进行查询、重置、添加等操作。管理员输入预报日期、体感温度、紫外线数、氧气数值、当前位置、天气状况、降水量度、空气湿度、空气PH值,通过这些数据推荐出空气质量和天气情况。管理员负责更新和维护天气预报的准确性和及时性。天气预报列表和天气预报添加界面如下图所示。

图5-8天气预报列表界面图

图5-9天气预报添加界面图
5.2.3 氧气数据管理界面
管理员点击“氧气数据管理”会显示氧气数据列表和氧气数据添加这两个子菜单,支持输入城市名称、记录日期进行查询、重置、删除等操作。通过输入城市名称、记录备注、记录日期、氧气数值进行氧气数据添加。氧气数据列表和氧气数据添加界面如下图所示。

图5-10氧气数据列表界面图

图5-11氧气数据添加界面图
氧气数据添加关键代码如下:
@RequestMapping(value = "/del")
@Transactional
public Map<String, Object> del(HttpServletRequest request) {
service.delete(service.readQuery(request), service.readConfig(request));
return success(1);
}
public void delete(Map<String,String> query,Map<String,String> config){
QueryWrapper wrapper = new QueryWrapper<E>();
toWhereWrapper(query, "0".equals(config.get(FindConfig.GROUP_BY)),wrapper);
baseMapper.delete(wrapper);
log.info("[{}] - 删除操作:{}",wrapper.getSqlSelect());
}
管理员点击“PH数据管理”会显示PH数据列表和PH数据添加这两个子菜单,支持输入城市名称、记录日期进行查询、重置、删除等操作。通过输入城市名称、记录备注、记录日期、PH数值进行氧气数据添加。PH数据列表和PH数据添加界面如下图所示。

图5-12 PH数据列表界面图

图5-13 PH数据添加界面图
5.2.5系统管理界面
空气质量实时分析系统中的管理人员在“系统管理”这一菜单下是可以对空气质量实时分析系统内的轮播图进行添加修改的,其管理界面如下图所示。

图5-14系统管理界面图
第6章 系统测试
系统开发的最后一个步骤就是系统测试,系统测试也是整个系统十分重要的一个环节,测试的好坏关系到产品的发展。客户对软件的质量、性能和可靠性等需求就要通过测试来实现。测试过程要必须遵循严谨性、完善性、规范性的原则,测试的主要目的就是看看在系统运行中,是否会出现bug,然后对出现的bug进行调试,直到程序完美运行。但是软件的测试只能尽可能的减少bug,理论上来说是无法达到消除bug。但是bug越少,系统出错的几率就越低,用户使用起来也更方便、更安全。
近年来,软件包含测试从现在的检验当中来看,系统接近预期目标可能出现的问题,并对这些错误做出相应的修正,假如我们不进行早期的测试错误就会延续下去,最后所做出的成品就会有很大的困难。
我们要在这个测试的过程当中找出错误。测试成软件开发的主要一部分,自从有了程序的设计那天开始,它就成为了重要的组成部分。经过统计来看,软件测试可以占据这个系统45%的工作量,而在软件开发的成本当中,对于测试成本来说它包含了很多的测试工作。每个程序测试时都会出现和遇到错误。在整个程序的开发过程当中,人为去查找错误是非常复杂和困难的,所以我们一般都会找一些测试的工具来进行测试
6.1系统测试的意义
随着现代信息的快速发展,在社会各大领域中已经都开始应用网络信息技术,在应用网络技术的同时人们也开始把软件的质量问题作为了一个重要焦点来关注,因为一个软件的好与坏它决定着这个系统在市场上的生存,所以我们必须要把软件质量来做好,这样才有一定的生存能力。对于用户来说它们首先选用的都是保证这个系统软件的质量问题,因为一个系统的软件质量决定着用户在后期上成本经济的问题。图6-1就是纠错测试流程。

图6-1 测试与纠错信息流程
6.2 测试方法
黑盒测试又被人们称作为功能测试,通常是在程序的接口来做一些测试的方法,它一般包括对程序的功能和使用的方法来做出一些数据的接受和输出,同时还可以做出正确的输出信息,并保证与外部信息的完整性。
白盒测试通常被人们称作为结构测试,在整个程序的结构和处理当中它是由程序当中的逻辑测试和检验程序来完成一些正确的工作。
具体的功能测试它是包括:系统的适用性、准确性、安全性等功能测试。
6.3测试分析
本空气质量实时分析系统满足相关信息的管理需求,在设计时借鉴了国内外优秀系统的优点,从界面到系统设计都保证了管理员能够方便操作。系统的主要特点和优点归纳如下:
(1)本系统用的移置性和针对性都比较高,因为针对性高可以提供更好的服务而移置性可以在多个系统上运行,更给客户带来了极大的方便。
(2)该空气质量实时分析系统内容全面,管理方便可以及时的全面的处理各种错误,异常,这样避免了很多因客户的马虎操作而出现的失误,其操作方便,会员界面友好,能够上网的人都可以很好的进行操作。
经过对上述的测试结果分析,所有基本功能齐全,操作简单,系统运行性能良好,系统安全可靠,能促进房地产交易的发展,发展前景广阔。
第7章 总结
本文深入研究了空气质量实时分析系统。主要内容涵盖以下几个方面:
1.文章探讨了系统开发的背景及其意义,为整个研究奠定了理论基础。
2.进行了详细的需求分析,并根据这些需求,深入剖析了数据字典,为系统的构建提供了明确的方向。
3.文章对系统的功能模块进行了概述,详细设计了数据库表结构,并研究了系统的ER图,从而确保了数据的完整性和关联性。
4.本文还详细介绍了系统的各项功能,并成功构建了该系统。技术上,系统采用Win10操作系统和Pycharm下的java环境,数据库的建立则依赖于MySQL软件。整个系统的设计和开发主要使用java语言,而图片处理则通过Photoshop CS6实现,确保了系统在视觉和功能上的完善与美观。
在开发过程中,如何合理使用MySQL数据库并设计后台表结构,使系统更加合理和健壮,成为了一个挑战。通过深入研究相关资料和充分的需求分析,我们成功解决了这些问题。当然,如果条件允许,我们希望能够进一步丰富系统的功能模块,完善某些功能,并增强用户权限处理的逻辑性。未来,随着条件的改善,我们将继续对系统进行深入的研究和开发。
本文所研究的空气质量实时分析系统,在技术和实际应用上都具有较高的价值,为改善空气质量提供了有力的技术支持。
致 谢
经历了几个月的毕业设计之旅,遭遇了无数难题与挑战,几经波折后,近乎要摧毁我当初选择这个题目的信心。好在我的导师一直坚持对我悉心支持,并对此套系统提出了诸多改善意见,解决了我所遇到的众多难题,房地产交易大数据分析也得以在这样的境况下圆满完成。老师给予了我正确的指导和极大的帮助,这不仅仅使我获得了足够多的开发经验,更使我在系统设计过程中少走了许多的弯路,巩固了以前所学的知识,提高了应用能力,这使我对以后的工作也信心满满。
敬业的工作态度都给予了我极大的鼓励与帮助。对于提出的问题和遇到的困难都给予细心的解答和真诚的帮助,再次表示衷心的感谢。我还要对学院及系里的各位领导、老师们表示谢意,在这次毕业论文期间给我们提供了良好的学习和生活环境,并给予软硬件的支持,使得我的系统设计工作及论文撰写工作更加顺畅、便利。最后我还要感谢所有为我的毕业设计提出指导意见的各位老师、同学。
参考文献
[1]Yusuf Mathiinul Hakim,Risfidian Mohadi,Mardiyanto Mardiyanto,Idha Royani. Ammonium-assisted Intercalation of Java Bentonite as Effective of Cationic Dye Removal[J]. Journal of Ecological Engineering,2022(prepublish).
[2]郑歆.Java程序设计课程的教学实践[J].集成电路应用,2022,39(11):94-95.DOI:10.19339/j.issn.1674-2583.2022.11.036.
[3]. USU Software Asset Management is Verified for Data Discovery of JAVA Software[J]. M2 Presswire,2022.
[4]李乐.Java语言应用研究[J].智慧中国,2022(09):80-81.
[5]娄用够.基于B/S的实验室数据管理系统设计[J].信息与电脑(理论版),2022,34(18):86-88.
[6]彭莉芬.大数据视域下Java集合应用研究[J].福建电脑,2022,38(09):55-58.DOI:10.16707/j.cnki.fjpc.2022.09.012.
[7]欧阳桂秀.基于Java和MySQL的数据库管理系统的设计与实现[J].信息记录材料,2022,23(09):240-242.DOI:10.16009/j.cnki.cn13-1295/tq.2022.09.007.
[8]仓业金.基于Java的软件保护技术研究[J].电脑知识与技术,2022,18(23):29-30+52.DOI:10.14004/j.cnki.ckt.2022.1597.
[9]余晓明,孙咸凯,曹远见,蒋俊慧,吴超.基于B/S架构的企业干部信息管理系统[J].自动化技术与应用,2022,41(07):170-172+190.DOI:10.20033/j.1003-7241.(2022)07-0170-04.
[10]杨迎.Java技术在嵌入式系统中的作用探讨[J].无线互联科技,2022,19(14):96-98.
[11]杜成龙.基于MVC模式的三层架构研究[J].软件,2022,43(06):100-102.
[12]于昕,廖晨伶,周卫丽.基于MVC的软件架构重构与优化研究[J].吉林化工学院学报,2021,38(07):49-52.DOI:10.16039/j.cnki.cn22-1249.2021.07.010.
[13]檀翔.基于B/S架构的分布式测控技术研究[J].现代信息科技,2021,5(05):8-12+18.DOI:10.19850/j.cnki.2096-4706.2021.05.002.
[14]张国华,叶苗,王自然,周婷婷.大数据Hadoop框架核心技术对比与实现[J].实验室研究与探索,2021,40(02):145-148+176.DOI:10.19927/j.cnki.syyt.2021.02.028.
[15]王珈珞,曹前.基于Hadoop框架下高职微课程的研究与分析[J].现代信息科技,2020,4(18):140-143.DOI:10.19850/j.cnki.2096-4706.2020.18.039.
[16]许文鹏,李胜广,赵士伟,李思,李攀.基于Hadoop框架的大数据平台探析[J].中国安防,2020(04):38-45.
[17]陈彬.基于Hadoop框架的海量数据运营系统研究[J].自动化技术与应用,2020,39(03):178-181.
[18]蔡晓晨,徐勇.基于Hadoop框架在电力大数据技术的探究[J].信息技术与信息化,2019(12):254-256.
[19]陈龙,黄丹芸.基于hadoop框架的大数据处理与分析系统[J].福建电脑,2018,34(05):116-117.DOI:10.16707/j.cnki.fjpc.2018.05.059.
[20]陈坤. 基于Hadoop框架的专题信息存储及多维分析系统构建研究[D].南京理工大学,2018.