天气查询系统

项目要求

项目知识点

问题与解决

代码分部

结果展示


项目要求

1.显示天气预报系统界面
2.系统可以通过选择城市配置获取不同城市天气信息
3.查看实时的天气信息

(当前温度、最高温度、最低温度、当前湿度、最高湿度、最低湿度、风向、风力、风级等信息)
4.查看未来一周天气
5.能够输入指定日期并获得该天不同时间段的历史信息(点击左右按键,查看输入日期前一天后一天的信息)(不实现历史信息)

1.选择城市        2.历史天气        3.实时天气        4.未来天气        5.退出

项目知识点

通过使用 http 协议查询并获取 api.k780.com 网站天气信息并分析

提取并分割信息方式采用strstr + strncpy(空间泄露?)或 JSON(添加头文件以及函数的使用)

绘制菜单采用\033屏幕控制

采用 snprntf 函数拼接网址报文,结合read,write网络相关函数获取信息

定义全局变量模式以便switch选择

定义结构体存放关键字信息

  • 实现功能:

选择查询方式:历史天气        实时天气        未来天气

每个查询方式实现:

1. 信息获取        建立连接        =>        输入数据(城市)        =>        拼接命令        =>

                          服务器发送        =>        客户端接收

2. 信息处理        查找关键字        =>        提取关键字信息

3. 信息打印        打印关键字信息

问题与解决

(√)1.刚开始只实现模式为实时天气,后续添加其他模式要注意报文的改变

(√)2.模式菜单的选择>>
  w上移s下移p选择
  移动时清除原来的>>, 选择的退出循环

(√)3.返回模式后switch判断

(√)4.报文的变化

  •     未来报文:

          https://sapi.k780.com/?app=weather.future①模式切换
          &weaId=1②换成获取的城市名
          &③多一个&                经过测试与不多添加&相同,可省略
          &appkey=10003&sign=b59bc3ef ...... f2a4&format=json

  •     未来指数(未解决)

          https://sapi.k780.com/?app=weather.lifeindex①
          &weaId=1②
          &appkey=10003&sign=b59bc3ef ...... 2a4&format=json

  •     实时报文: 

          https://sapi.k780.com/?app=weather.today①
          &weaId=1②
          &appkey=10003&sign=b59bc3ef ......2a4&format=json

  未来返回的缺少temp_curr,aqi, wea_curr
                        多六个生活指数
                        风向+风力拼成一个

 注意: strstr截断文本时+1可以在再次寻找当前字符串时寻找到下一个,而不是当前的

(√)5.获取未来数据的方式
  目前打算:在主函数中用i获取天数
       随后调用msg_get函数逐个获取futuer[i]

(√)6.模式选择历史和返回应该回到欢迎页面,但报段错误

  退出:使用while循环解决,在整体输入完后再解决

  返回:设置跳点,跳通过转GO函数实现跳转回模式菜单页面

7.多查询几次会出现段错误,目前认为是strncpy导致空间溢出或网络问题

8.避免空间泄露,最好只读取一次信息进行分析(未解决)

(√)9.未来7日存入数据定义weather_t future[7];存入
  输出菜单时在菜单函数外清屏
  防止每次输入都会清屏,最终只输出最后一天的数据

(√)11.可以重置光标位置

(√)12.ping api.k780.com出来两个端口,注意上网许可

代码分部

客户端函数(主函数)

要点:

        1. 定义全局模式

        2. ping 网址 api.k780.com 有两个地址,注意能否上网,端口号为80

要点:

        1. 欢迎 和 模式菜单的绘制并显示(菜单代码部分)

        2. 设置跳转起始点

        3. 获取模式结果后switch 处理单个模式:未获取数据打印提示

                                                                      获取数据修改报文分布

                                                                      返回:进入下一次循环 即 返回欢迎菜单

要点:

        1. 注意保报文每个分部的含义即需要修改的地方

        2. 模式1,2,3进入信息获取与处理(模式3未实现)

        3. 每次获取信息时先清空数组空间,避免空间泄露

        4. 未来天气数据获取需要存放至数量为7的结构体空间,注意处理方式(可以重新定义函数减轻主函数体量,未实现)

        5. 未来天气菜单页面显示需要在显示菜单外清屏,否则每次获取菜单时都会清屏,最后只显示最后一组数据

要点:

        1. 返回结果会跳转到设置的起点,即模式菜单

        2. 退出结果会结束循环置下一循环,即欢迎菜单

信息获取处理函数(部分)

要点:

        1. 函数传入参数为从网址获取的信息以及模式(不同模式需要获取的信息有不同)

        2. strstr获取关键字信息为分部的起点

        3. 根据获取信息内容为jansson模式,strchr获取结尾部分为分部的结尾

        4. 再获取分布的长度,通过strncpy截取信息进行结构体的存放

        5. 可使用JSON方式截取信息

        6. 函数返回整个结构体weather_t

菜单函数(部分)

要点:

        1. 可通过定义全局变量,对变量进行四则运算处理横纵坐标(未实现)

        2. 注意重新定义光标位置注意全局美观(后续菜单一样)

要点:

        1. 模式菜单选择通过键盘输入进行操作,添加操作说明部分

        2. getchar有阻塞作用,选择输入p结束阻塞,确定并返回模式

        3. 模式仅有5个,注意循环的判断操作

        4. 选择模式时注意画面的反馈:清楚移动前的 >> ,显示移动后的 >>

要点:

        1. 构造边框并显示,添加图标改变颜色增加多样性,注意要结合整体的位置

        2. 单独对一部分信息进行了图标变换,由于需要进行信息与汉字的判断,结合计算机存放信息的底层逻辑,查找汉字的编码进行判断操作

        3. 未来天气与未来指数菜单同理,区别与清屏在主函数清屏(客户端代码部分有解释)

结果展示

欢迎菜单:

根据报文格式,可以输入城市的汉字或拼音

模式菜单:

历史天气:

实时天气:

q e 退出与返回正常

天气图标变化正常

未来天气:

未来指标:

期望显示:

返回正常

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

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

相关文章

三重积分的对称性

文章目录前言柱面球面前言 规律作息 柱面 太牛了。我完全看不懂。实际上就类似于极坐标系。 球面 看到这么多东西,我真害怕。今天是 8.30 ,不管 9.10 有没有复习完概率的强化,我都一定要开始套卷,还有专业课的复习。ϕ\phiϕ…

深入理解 RabbitMQ:从底层原理到实战落地的全维度指南

引言: 本文总字数:约 18500 字预计阅读时间:45 分钟 为什么我们需要 RabbitMQ? 在当今分布式系统架构中,消息队列已成为不可或缺的核心组件。想象一下,当你在电商平台下单时,系统需要处理库存…

宽带有丢包,重传高的情况怎么优化

宽带丢包和重传率高是一个非常影响网络体验的常见问题。它会导致游戏卡顿、视频通话模糊、网页加载慢等。别担心,我们可以按照从易到难的顺序,系统地排查和优化。请遵循以下步骤:第一步:基础排查(自己动手,…

Kotlin 协程之Channel 的高阶应用

前言 了解了 Channel 的基础概念和基本使用 后,我们再来看一看 Channel 的特性以及高阶应用。 Channel 是"热流" 热流概念 Channel 是热流(Hot Stream),具备以下特性: 数据的生产和消费是两套独立的流程 …

PostgreSQL表空间(Tablespace)作用(管理数据库对象的存储位置)(pg_default、pg_global)

文章目录**1. 灵活的数据存储管理**- **逻辑与物理分离**:表空间为数据库对象(如表、索引)提供了一个逻辑名称与物理存储路径的映射。用户无需直接操作底层文件路径,只需通过表空间名称管理数据。- **多数据库共享表空间**&#x…

Ansible 核心运维场景落地:YUM 仓库、SSH 公钥、固定 IP 配置技巧

1:如何一次性验证所有主机能否被 Ansible 访问? 答:使用临时命令:ansible all -m ansible.builtin.ping或验证 sudo 是否正常:ansible all -m ansible.builtin.ping --become -K2:如何用 Ansible 统一配置…

rman导致的报错ORA-27037: unable to obtain file status

有套3节点的11204集群环境,在db2上配置了rman备份,今天例行检查时发现db1和db3上不定期有报错,报错如下:Control file backup creation failed:failure to open backup target file /u01/app/oracle/product/11.2.0/db_1/dbs/snap…

Kubernetes 与 GitOps 的深度融合实践指南

前言:在云原生技术飞速发展的今天,Kubernetes(简称 K8s)已成为容器编排领域的事实标准,而 GitOps 作为一种基于 Git 的云原生运维理念,正与 K8s 深度融合,为企业实现自动化、可追溯、可审计的应…

REST-assured 接口测试编写指南

REST-assured 简介 REST-assured 是一个基于 Java 的 DSL(领域特定语言)库,专门用于简化 RESTful API 测试的编写。它提供了流畅的 API 接口,使得测试代码更加易读易写,支持 JSON 和 XML 等多种响应格式的验证。 基本环…

内网应用如何实现外网访问?外地通过公网地址访问内网服务器的设置方法

一、内网应用程序在外网需要连接访问遇到的问题我们经常需要在内网中部署服务,比如一个 Web 服务器或者数据库,但由于本地没有公网IP,这些服务无法直接从外地公网访问。如自己家里的监控系统,在家时能查看,但出门在外就…

ubuntu24.04 QT中配置opencv4.12

假如生成的opencv路径是:/usr/local/opencv4.12QT core guigreaterThan(QT_MAJOR_VERSION, 4): QT widgetsCONFIG c17# You can make your code fail to compile if it uses deprecated APIs. # In order to do so, uncomment the following line. #DEFINE…

客户端是否都需要主动发送`FindService`报文来寻找服务

<摘要> 在AUTOSAR SOME/IP-SD的服务发现流程中&#xff0c;客户端是否需要主动发送FindService报文来寻找服务&#xff0c;是理解服务订阅逻辑的一个关键。这将直接影响到事件组订阅的触发时机和网络行为。下文将结合规范&#xff0c;对这一问题进行深入剖析。 <解析&…

Go语言流式输出实战:构建高性能实时应用

什么是流式输出&#xff1f; 流式输出&#xff08;Streaming Output&#xff09;是一种服务器推送技术&#xff0c;允许数据在生成过程中逐步发送到客户端&#xff0c;而不是等待所有数据准备就绪后一次性发送。这种技术显著改善了用户体验&#xff0c;特别是在处理大量数据或长…

操作系统上的Docker安装指南:解锁容器化新世界

摘要&#xff1a;本文详细介绍了Docker在不同操作系统上的安装方法。主要内容包括&#xff1a;Windows系统通过Docker Desktop安装&#xff0c;需启用Hyper-V和WSL2&#xff1b;Mac系统同样使用Docker Desktop&#xff0c;根据芯片类型选择版本&#xff1b;Linux系统以Ubuntu为…

【微信小程序】分别解决H5的跨域代理问题 和小程序正常不需要代理问题

——总问&#xff1a;何为跨域和代理&#xff1f; &#x1f539;什么叫跨域&#xff1f; 前端在浏览器里发请求时&#xff0c;如果 域名 / 协议 / 端口 三个中有一个不一样&#xff0c;就会触发 跨域问题。 例子&#xff1a; 页面跑在 http://localhost:5173你要请求接口 http:…

数字签名 digital signature

文章目录1、严谨的定义2、技术原理&#xff1a;如何工作&#xff1f;第一步&#xff1a;发送者 - 签名过程第二步&#xff1a;接收者 - 签名验证过程3、C语言实现示例4、关键技术要点5、安全注意事项6、最重要的应用&#xff1a;TLS/SSL 与网站安全1、严谨的定义 数字签名是一…

对于STM32工程模板

工程模板文件下载链接 https://download.csdn.net/download/qq_58631644/91809234 重命名 打开这个文件夹 重命名保持一致 双击打开

使用 SmartIDE 开发长安链 Go 语言智能合约

文章目录官方文档Chrome 插件登录 SmartIDE合约调试合约编译官方文档 使用SmartIDE编写Go智能合约 Chrome 插件 https://git.chainmaker.org.cn/chainmaker/chainmaker-smartplugin/-/releases 登录 SmartIDE https://ide.chainmaker.org.cn/ 合约调试 合约编译

MEM课程之物流与供应链管理课程经典案例及分析-个人原创内容放在此保存

供应链管理课程案例 特殊时期期间,美国出现养猪户对数百万头猪实施安乐死和奶农倾倒牛奶现象。从供应链的角度分析该现象并提出应对思路。要求有分析框架和文献支撑。 供应链管理课程案例分析 从供应链角度分析特殊时期美国猪安乐死和倾倒牛奶现象 本文描述了特殊时期期间,美…

Transformer:从入门到精通

学习一个深度学习模型&#xff0c;我们首先需要从理论的角度理解它的构架&#xff0c;进而理解代码。 Transformer背景 首先我们知道&#xff0c;神经网络有一个巨大的家族&#xff0c;其中的CNN&#xff08;卷积神经网络&#xff09;源于视觉研究&#xff0c;目标是让机器自…