当前位置: 首页 > news >正文

天气查询系统

项目要求

项目知识点

问题与解决

代码分部

结果展示


项目要求

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.dtcms.com/a/356966.html

相关文章:

  • 2025_WSL2_Ubuntu20.04_C++20_concept 环境配置
  • el-select多选下拉框出现了e611
  • MySQL 中ORDER BY排序规则
  • 物联网平台中的Swagger(二)安全认证与生产实践
  • Socket编程核心API与结构解析
  • 【C++】掌握类模板:多参数实战技巧
  • 构筑沉浸式3D世界:渲染、资源与体验的协同之道
  • 云计算学习笔记——逻辑卷管理、进程管理、用户提权RAID篇
  • N32G43x Flash 驱动移植与封装实践
  • DBeaver 的 PostgreSQL 驱动包默认存储位置
  • 序列化和反序列的学习
  • 移动社交时代电商流量获取新路径:基于社群与开源AI智能名片链动2+1模式S2B2C商城小程序的探索
  • 【基础-单选】关于Button组件,下面哪个样式是胶囊型按钮
  • 大模型之RAG, 检索增强生成
  • 【若依】RuoYi-Vue-springboot3分离版
  • RS485、RS232、RS422协议
  • 浔川代码编辑器v2.1.0公测版上线时间公告
  • 基于FPGA的DDR3读写实验学习
  • LeetCode算法日记 - Day 26: 归并排序、交易逆序对的总数
  • 河南葱香鸡蛋,嫩滑香浓超棒!
  • 企业微信如何设置长期有效的获客二维码?3步生成!
  • 机器人视觉检测
  • 决胜财报季,证券投研如何实现财报自动化分析录入?
  • 企微智能表格对接业务系统
  • 指纹手机技术:破解亚马逊多账号运营痛点的底层逻辑与实践
  • useEffect中直接使用 await报错
  • 直流电机驱动与TB6612
  • Shell 中 ()、(())、[]、{} 的用法详解
  • X-anylabeling3.2标注工具的安装与使用
  • Python五天极限复习