基于移动应用的城市公共气象服务平台的设计与实现

news2025/7/28 13:44:19

项目描述

临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下,你想解决的问题,今天给在家介绍一篇基于移动应用的城市公共气象服务平台的设计与实现。

功能需求

当前主流移动气象信息服务系统的服务器端主要采用GCD技术来构建,在这种结构中客户端对于数据的查询请求都是通过执行Objective-C代码来实现的。Objective-C虽然简单容易开发,但是存在两方面的缺陷,其一是在处理大量并发请求时资源开销大,执行速度慢。其二是允许用户直接访问数据库,安全性差。为了充分发挥服务器端性能,提高系统安全性。系统改进了服务器端架构,通过引入MVC技术优化执行效率 ,增加监控系统提高了管理效率。系统主要由五部分组成。

APP客户端,负责与用户的交互,发送用户请求到服务器端。天气APP应用主要是通过手机客户端为用户提供详细的未来目的城市天气信息以及与天气信息内容相关的提示。天气APP应用包括选择城市、添加多个城市、删除所选城市、查看所选城市当日天气详情、查看所选城市未来一周天气状况趋势图、查看所选城市生活指数等六个主要功能。

(1)选择城市,初次使用APP时选择一个城市进行查看相应模块。
(2)添加多个城市 ,如果想查看除了当前所选城市以外的其他城市天气信息,可点击主页里的加号进行添加城市操作。
(3)删除所选城市 ,如果不想查看某个城市的天气信息,则可进入主页点击右上角的编辑图标进行删除相关城市,以停止查看所选城市信息。
(4)查看所选城市当日天气详情, 点击屏幕下方“天气”按钮可查看所选城市的实时温度、风向、湿度及当前日期。
(5) 查看所选城市未来一周天气状况趋势图,点击屏幕下方“趋势”按钮可查看所选城市的未来几天的天气趋势图。
(6)查看所选城市生活指数。

服务器端
负责接收用户请求并对请求作出响应。

内容管理子系统
WEB式的用户和产品信息管理平台。

内容发布子系统
将各种气象资料自动加T并推送到后台服务器

监控子系统
负责收集各种状态信息,并通过消息机制把信息发送给管理员。这种设计有如下优点:①服务器端采用MVC设计模式,采用这种架构的服务器端避免了用户直接访问数据库,提高了安全性。②由于把数据计 算与产品处理任务交给了分布式的内容发布子系统,客户端不需要大量的计算处理与存 储需求。降低了客户端的实现难度和硬件要求。③使用MVC设计模式实现了基于规范标准的开放性,实现了跨平台的数据交换,系统还使用了特定的用户校验方式来保障数据安全。④采用分布式的架构便于功能与处理能力的扩展,业务流程在管理员监控下运行,系统稳定性好。

具备以下功能:

通过对系统概况的描述和分析,已经对气象服务平台开发技术要点,气象预报业务关系分析。本节对平台各个菜单功能模块系统设计,进行详细的展示和描述,是系统的基础。
系统中的核心用户是系统管理员,管理员登录后,通过管理员菜单来管理后台系统。主要功能有:管理员管理、城市天气信息、用户信息、预警信息、退出等功能。用户进入系统可以进行天气预报等。
在这里插入图片描述

在这里插入图片描述

系统功能模块框架图

在这里插入图片描述

部分效果图

登录注册界面:
在这里插入图片描述
管理界面
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

前端效果
在这里插入图片描述

在这里插入图片描述

数据库设计

系统中用到了5张表,针对每个表都进行了设计,下面对部分核心表进行汇总罗列展示。
(1)用户信息表
在这里插入图片描述

(2)气象信息表
在这里插入图片描述

(3)未来天气信息表
在这里插入图片描述

部分代码

package cn.weather.config;

import cn.weather.controller.*;
import cn.weather.entity.User;
import cn.weather.entity.Yj;
import cn.weather.entity._MappingKit;
import com.jfinal.config.*;
import com.jfinal.core.JFinal;
import com.jfinal.kit.PropKit;
import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
import com.jfinal.plugin.druid.DruidPlugin;
import com.jfinal.template.Engine;

import org.beetl.core.GroupTemplate;
import org.beetl.ext.jfinal3.JFinal3BeetlRenderFactory;

import java.util.HashMap;
import java.util.Map;

/**
 * api 引导配置
 */
public class DemoConfig extends JFinalConfig {
    /**
     * 运行此 main 方法可以启动项目,此main方法可以放置在任意的Class类定义中,不一定要放于此
     * <p>
     * 使用本方法启动过第一次以后,会在开发工具的 debug、run config 中自动生成
     * 一条启动配置,可对该自动生成的配置再添加额外的配置项,例如 VM argument 可配置为:
     * -XX:PermSize=64M -XX:MaxPermSize=256M
     */
    public static void main(String[] args) {
        /**
         * 特别注意:Eclipse 之下建议的启动方式
         */
//        JFinal.start("WebRoot", 80, "/", 5);

        /**
         * 特别注意:IDEA 之下建议的启动方式,仅比 eclipse 之下少了最后一个参数
         */
        JFinal.start("src/main/webapp", 8088, "/");
    }

    /**
     * 配置常量
     */
    public void configConstant(Constants me) {
        // 加载少量必要配置,随后可用PropKit.get(...)获取值
        PropKit.use("config.properties");
        me.setDevMode(PropKit.getBoolean("devMode", false));
        JFinal3BeetlRenderFactory rf = new JFinal3BeetlRenderFactory();
        rf.config();
        me.setRenderFactory(rf);
        GroupTemplate gt = rf.groupTemplate;
        Map<String, Object> shard = new HashMap<String, Object>();// 共享变量
        shard.put("ctx", JFinal.me().getContextPath());// 添加共享变量上下文路�?
        gt.setSharedVars(shard);// 设置共享变量
        me.setMaxPostSize(1200000000);
    }

    /**
     * 配置路由
     */
    public void configRoute(Routes me) {
       // me.add("/", IndexController.class);
      me.add("/ww", AddController.class);
        me.add("/", IndexController.class);
        me.add("/manager", ManagerController.class);
        me.add("/addmg", AddManagerController.class);
        me.add("/weather", WeatherController.class);
        me.add("/yj", YjController.class);
        me.add("/user", UserController.class);



    }

    public void configEngine(Engine me) {
    }

    public static DruidPlugin createDruidPlugin() {
        return new DruidPlugin(PropKit.get("jdbcUrl"), PropKit.get("user"), PropKit.get("password").trim());
    }

    /**
     * 配置插件
     */
    public void configPlugin(Plugins me) {
        // 配置C3p0数据库连接池插件
        DruidPlugin druidPlugin = createDruidPlugin();
        me.add(druidPlugin);
        // 配置ActiveRecord插件
        ActiveRecordPlugin arp = new ActiveRecordPlugin(druidPlugin);
        // 所有映射在 MappingKit 中自动化搞定
        arp.setShowSql(true);
        _MappingKit.mapping(arp);
        me.add(arp);
    }

    /**
     * 配置全局拦截器
     */
    public void configInterceptor(Interceptors me) {

    }

    /**
     * 配置处理器
     */
    public void configHandler(Handlers me) {

    }
}

安装部署需求

eclipse、idea运行启动

系统部署

系统开发后,在生产环境配置项目运行环境,具体步骤如下:
安装linux或者windows10操作系统;
安装JDK1.8并配置环境变量;
安装MySQL5.7版本以上版本数据库,创建数据库并执行脚本创建表;
在IDEA中编辑进行打包;
下载并配置Tomcat8.0服务器,配置系统服务,上传项目打包文件

本项目用到的技术和框架

1.开发语言:Java
2.开发模式:B/S
3.数据库:MySQL
4.框架:jsp+servlet+JDBC

本项目中的关键点

此系统的开发采用java语言开发,基于B/S结构,这些开发环境使系统更加完善。使用到的工具和技术都是开源免费的。

环境工具

开发工具 Eclipse/IDEA
语言 JDK1.8 、jsp、CSS、servlet、Android
硬件:笔记本电脑;
软件:Tomcat8.0 Web服务器、Navicat数据库客户端、MySQL;
操作系统:Windows 10;
其它软件:截图工具、常用浏览器;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/16387.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

spark分布式计算框架

MapReduce是计算逻辑清晰的&#xff0c;只有两个步骤&#xff0c;任务是JVM进程级别&#xff0c;每执行到什么步骤 去申请具体的资源。 而spark根本不知道具体有几个stage&#xff0c;逻辑未知&#xff0c;每个人的job stage等根本不知道。它是默认倾向于抢占资源的&#xff0c…

C++11 条件变量

目录 条件变量 1 成员函数 wait函数 wait_for函数 wait_until函数 notify_one函数 notify_all函数 2 Demo1 sync_queue.h condition-sync-queue.cpp 3 Demo2 2-sync_queue.h 2-condition-sync-queue.cpp C/CLinux服务器开发/后台架构师【零声教育】-学习视频教程…

汇编内中断

内中断 文章目录内中断1.内中断的产生2.中断处理程序、中断向量表、中断过程3.iret指令4.除法错误中断的处理5.单步中断6.int指令7.BIOS和DOS所提供的中断例程1.内中断的产生 任何一个通用的CPU&#xff0c;都具备一种能力&#xff0c;可以在执行完当前正在执行的指令之后&…

StartDT奇点云通过CMMI5全球软件领域最高级别成熟度认证

近日&#xff0c;奇点云正式通过全球软件领域最高级别认证——CMMI 5级认证&#xff0c;标志着奇点云的软件技术研发能力、项目管理能力、质量保障能力、方案交付能力等均达到优化管理级的国际先进水平。 CMMI&#xff08;软件能力成熟度模型集成&#xff09;是国际上用于评价软…

JAVA开发(Redis的使用, redis数据类型)

Redis是一个缓存型数据库&#xff0c;或者平时就叫它缓存。它支持存储的类型有以下几种&#xff1a; string&#xff08;字符串&#xff09; hash&#xff08;哈希&#xff09; list&#xff08;列表&#xff09; set&#xff08;集合&#xff09; zset(sorted set&#xff1a;…

智慧电网解决方案-最新全套文件

智慧电网解决方案-最新全套文件一、建设背景二、思路架构三、建设方案四、获取 - 智慧电网全套最新解决方案合集一、建设背景 电力公司如今面临的紧迫需求问题似乎无穷无尽&#xff0c;例如&#xff1a;提高可靠性&#xff1b;降低成本&#xff1b;提高效率&#xff1b;满足环…

(十)C++中的左值lvalue右值rvaue

文章目录1.C中的变量名是如何存储及引用2.C中的左值与右值3.右值引用4.移动语义move函数参考文献欢迎访问个人网络日志&#x1f339;&#x1f339;知行空间&#x1f339;&#x1f339; 1.C中的变量名是如何存储及引用 int a 0;如上&#xff0c;在C中声明一个变量时&#xff0…

【0143】 System V共享内存(Shared Memory)

文章目录 1. 共享内存1.1 共享内存分类2. System V IPC密钥3. System V 共享内存调用3.1 shmget()3.2 shmat()3.3 shmdt()3.4 shmctl()4. 实战演练4.1 服务端程序代码实现4.2 客户端程序代码实现1. 共享内存 共享内存是 Linux 和其他类 Unix 系统下可用的三种进程间通信 (IPC)…

Docker下安装Zookeeper以及Kafka

一、安装Zookeeper 1. 查看Zookeeper镜像以及版本 访问Zookeeper镜像库地址 也可以通过命令docker search zookpper在命令行搜索zookeeper镜像&#xff0c;但是通过该命令无法查看远程镜像版本信息。 NAME&#xff1a;镜像名(镜像仓库源的名称) DESCRIPTION&#xff1a;对该镜…

yolov5剪枝实战2:网络剪枝原理介绍

1. 网络轻量化相关技术 网络轻量化的相关技术分类:1. 网络剪枝(Network pruning) 2. 稀疏表示(Sparse representation) 3. Bits precision(低比特表示,比如不用浮点型,使用int量化) 4. Kownledge distillation(知识蒸馏) 2. 网络剪枝 神经网络一般都是over-parameterized,…

SharePoint Integrator Delphi版

SharePoint Integrator Delphi版 SharePoint Integrator包含易于使用的组件&#xff0c;用于连接流行的SharePoint Server结构&#xff0c;如网站、列表和文档。SharePoint Integrator组件支持对SharePoint对象的访问&#xff0c;允许应用程序轻松地查询和修改列表、访问托管文…

京东发布第三季度财报员工总数近50万 “以实助实”助力高质量就业

11月18日&#xff0c;京东集团&#xff08;纳斯达克股票代码&#xff1a;JD&#xff0c;港交所股票代号&#xff1a;9618&#xff09;发布了2022年三季度业绩。其中净收入为2435亿元人民币&#xff0c;同比增速高于同期国内社会消费品零售总额3.5%的增速&#xff1b;其中&#…

【17-微服务网关之Spring Cloud GatewaySpring Cloud Gateway网关服务搭建】

一.知识回顾 【0.三高商城系统的专题专栏都帮你整理好了&#xff0c;请点击这里&#xff01;】 【1-系统架构演进过程】 【2-微服务系统架构需求】 【3-高性能、高并发、高可用的三高商城系统项目介绍】 【4-Linux云服务器上安装Docker】 【5-Docker安装部署MySQL和Redis服务】…

“知识图谱补全”术语:知识图谱补全、三元组分类、链接预测

基本简介&#xff1a; 知识图谱补全通常定义为“三元组分类”或“链接预测”任务。首先&#xff0c;一条知识在知识图谱中通常由三元组表示&#xff1a;“头实体&#xff0c;关系&#xff0c;尾实体”。三元组分类即对于给定的三元组&#xff0c;预测其正确的概率。而链接预测…

VM虚拟机卡顿、闪退一系列问题与卸载重装问题(详细版)

最新发现好多虚拟机有闪退现象&#xff0c;对此我给出一系列解决方案&#xff0c;仅供参考 一.软件问题 1.虚拟机闪退 首先&#xff0c;如果是VMware Workstation Pro也就是软件本身闪退问题&#xff0c;即还没有运行或打开系统时就已经闪退&#xff0c;说明软件有问题&…

Windows系统VirtualBox下载与安装

Windows系统VirtualBox下载与安装 一、下载&#xff1a;https://www.virtualbox.org/wiki/Downloads 1.安装包 2.扩展包&#xff08;对USB 2.0、USB 3.0、远程桌面协议 VRDP等实用功能的支持&#xff09; 二、安装 1.如果安装出现本机缺少必要包的情况&#xff0c;不要慌&am…

3.1版本【HarmonyOS 第一课】正式上线!参与学习赢官方好礼>>

【课程介绍】《HarmonyOS第一课》是跟随版本迭代不断推出的系列化课程&#xff0c;本期课程基于HarmonyOS 3.1版本的新技术和特性&#xff0c;每个课程单元里面都包含视频、Codelab、文章和习题&#xff0c;帮助您快速掌握HarmonyOS的应用开发&#xff0c;快速了解新的特性和技…

基于PHP+MySQL汽车展览会网站的设计与实现

随着我国经济的发展,汽车已经进入了家家户户,但是很多时候人们因为各种原因需要进行汽车出行,但是很多时候人们有不知道购买什么样的汽车更适合自己,如果挨个去汽车4S既浪费时间又不能够把各类汽车都看全,人们更希望通过发达的车展来查询自己所需的汽车信息,本系统也是出于这样…

分享几个常用的可以从外部攻击视角发现甲方公司安全问题的开源工具

资产管理平台-ARL https://github.com/TophantTechnology/ARL 作为甲方&#xff0c;一定要有自己的资产平台&#xff0c;主要目的就是基于外部攻击视角不断发现风险&#xff0c;当然放在内网也可以&#xff0c;测试了很多开源的工具&#xff0c;最终还是选择了ARL&#xff0c;…

【深入理解C++】左值引用、常引用、右值引用、std::move()函数

文章目录1.左值引用2.常引用2.1 const引用可以指向临时数据2.2 const引用可以指向不同类型的数据2.3 const引用作为函数参数3.右值引用4.std::move()函数1.左值引用 左值引用只能绑定到左值上&#xff0c;不能绑定到右值上。 左值引用不能绑定到临时变量上&#xff0c;因为临…