一个关于天气预报的VS2010C#编程,如何把天气,风向转化为代码呢?

zhanglong454 2012-07-08 12:16:28
如题 一个关于天气预报的VS2010C#编程,如何把天气,风向转化为代码呢?
比如我通过下面的代码测出是:天气:晴天;温度:026;风向:南;风速:04
我自己规定下十几种天气里,晴天是01,温度零上为0**,零下为1**,风向有8种,南为01
则输出一串代码串:01026001
这样测出的代码就可以和另外一个模块通信了。
也就是我需要把天气,温度,风向,风速编译成特殊的代码,然后编个协议就可以通信了。
如何做呢?
我编好的天气查询代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Xml;
using System.IO;
using System.Text.RegularExpressions;

namespace WeatherApiTest
{

class Program
{
static void Main(string[] args)
{
bool iscontinue = false; //判断是否再次查询
string cityName = "changsha";
do
{
Console.Write("天气查询软件(首次查询有联网时间,请稍后)Tea.大龙\n\r请输入要查询城市的拼音(首次默认changsha,之后为上一次输入,回车键即可)\n\r:");
iscontinue = true;
if (iscontinue)
{
string temp = Console.ReadLine().Trim();//控制台输入的城市拼音
if (!string.IsNullOrEmpty(temp))
{
cityName = temp;
}

}
Console.WriteLine();
XmlDocument xmlDocument = GoogleWeatherAPI_Parser(@"http://www.google.com/ig/api?hl=zh-cn&weather=" + cityName);
try
{
XmlNodeList dayinfo = xmlDocument.SelectNodes("xml_api_reply/weather/current_conditions");
Console.WriteLine(cityName + ": 天气:" + dayinfo[0].SelectSingleNode("condition").Attributes["data"].InnerText +
" " + dayinfo[0].SelectSingleNode("humidity").Attributes["data"].InnerText +
" " + dayinfo[0].SelectSingleNode("wind_condition ").Attributes["data"].InnerText);

XmlNodeList weekList = xmlDocument.SelectNodes("xml_api_reply/weather/forecast_conditions");//获取forecast_conditions节点的List集合
///SelectSingleNode(“”)获取节点根据节点名称
foreach (var obj in weekList)
{
XmlNode xmlNode = obj as XmlNode;
Console.WriteLine(xmlNode.SelectSingleNode("day_of_week").Attributes["data"].InnerText + " "
+ xmlNode.SelectSingleNode("condition ").Attributes["data"].InnerText + " "
+ xmlNode.SelectSingleNode("low").Attributes["data"].InnerText + "-"
+ xmlNode.SelectSingleNode("high").Attributes["data"].InnerText + " ");
}
}

catch (Exception)
{
Console.WriteLine("请检查一下城市拼音是否正确!");
}
Console.WriteLine("是否重新查询? (是Y/否N)");
string str = Console.ReadLine();
iscontinue = str.ToUpper() != "N";

} while (iscontinue);
}

/// <summary>
/// 获取城市天气的XML文东
/// </summary>
/// <param name="baseUrl">url路径</param>
/// <returns></returns>
private static XmlDocument GoogleWeatherAPI_Parser(string baseUrl)
{
HttpWebRequest GWP_Request;
HttpWebResponse GWP_Response = null;
XmlDocument GWP_XMLdoc = null;
try
{
GWP_Request = (HttpWebRequest)WebRequest.Create(string.Format(baseUrl));
GWP_Request.UserAgent = @"Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.8.1.4) Gecko/20070515 Firefox/2.0.0.4";
GWP_Response = (HttpWebResponse)GWP_Request.GetResponse();
GWP_XMLdoc = new XmlDocument();
GWP_XMLdoc.Load(GWP_Response.GetResponseStream());
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
GWP_Response.Close();
return GWP_XMLdoc;
}
}
}
//谢谢各位大神了!在线等!
...全文
609 35 打赏 收藏 转发到动态 举报
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuruitao647 2014-06-12
  • 打赏
  • 举报
回复
就是拼接字符串而已啊。
zhanglong454 2014-06-12
  • 打赏
  • 举报
回复
感谢各位的帮助啊,最终结果还是出来了的。
c2606050113 2012-07-10
  • 打赏
  • 举报
回复
做成后台网站也可以。
前台传入code码 后台转换完 返回字符串
c2606050113 2012-07-10
  • 打赏
  • 举报
回复
static void codeToString()
{
string code= Console.ReadLine();
if (code.Trim()!= "")
{
DataClasses1DataContext context = new DataClasses1DataContext();
string[] str = new string[3];
str[0] = code.Substring(0, 2);
str[1] = code.Substring(2, 3);
str[2] = code.Substring(5, 3);
string str1 = "";
if (str[1].Substring(0, 1) == "1")
{
str1 = "温度:零下" + str[1].Substring(1) + "度";
}
else
{
str1 = "温度:" + str[1].Substring(1) + "度";
}
var linqdata = from table in context.天气情况
where table.编码 == str[0]
select table.天气;
var linqdata1 = from table in context.风向
where table.编码 == str[2]
select table.风向1;
Console.WriteLine("天气:" + linqdata.ToList()[0] + " " + str1 + " " + "风向:" + linqdata1.ToList()[0]);
Console.ReadLine();
}
}

DataClasses1DataContext 是Linq to sql classes. 数据库操作用这个简单方便
c2606050113 2012-07-10
  • 打赏
  • 举报
回复
视窗也行。控制台也行 都有可以
zhanglong454 2012-07-10
  • 打赏
  • 举报
回复
[Quote=引用 30 楼 的回复:]
static void codeToString()
{
string code= Console.ReadLine();
if (code.Trim()!= "")
{
DataClasses1DataContext context = new DataClasses1DataContext();
string[] str = new string[3];
……
[/Quote]
我调用这个试试
zhanglong454 2012-07-10
  • 打赏
  • 举报
回复
[Quote=引用 31 楼 的回复:]
做成后台网站也可以。
前台传入code码 后台转换完 返回字符串
[/Quote]
哦哦。我试下。能有你Q么?
zhanglong454 2012-07-10
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 的回复:]

protected void Button1_Click(object sender, EventArgs e)
{
if (TextBox1.Text.Trim ()!= "")
{
DataClasses1DataContext context = new DataClasses1DataContext();
string[] ……
[/Quote]
你给的程序加到哪一块呢?是不是要做成视窗?
Kogeo_Guan 2012-07-09
  • 打赏
  • 举报
回复
不懂winform 如何实现。。 新手求学!
不过如果是网站的话 我会使用 第3方提供的 api.
zhanglong454 2012-07-09
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 的回复:]
用webservice

http://www.webxml.com.cn/WebServices/WeatherWebService.asmx
[/Quote]
怎么用呢? 要重新编一个? 他的这个更好?
zhanglong454 2012-07-09
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 的回复:]
我自己规定下十几种天气里,晴天是01,温度零上为0**,零下为1**,风向有8种,南为01
则输出一串代码串:01026001
你自己都说完了
还不会组合格字符串吗
最不怕麻烦的就是挨个判断你取到的天气信息,然后给结果字符串累加你对象的数字编码
[/Quote]
我怎么把我获得的天气进行转码呢?这个不会啊。
  • 打赏
  • 举报
回复
用webservice

http://www.webxml.com.cn/WebServices/WeatherWebService.asmx
缭绕飘渺 2012-07-09
  • 打赏
  • 举报
回复
我自己规定下十几种天气里,晴天是01,温度零上为0**,零下为1**,风向有8种,南为01
则输出一串代码串:01026001
你自己都说完了
还不会组合格字符串吗
最不怕麻烦的就是挨个判断你取到的天气信息,然后给结果字符串累加你对象的数字编码

c2606050113 2012-07-09
  • 打赏
  • 举报
回复

protected void Button1_Click(object sender, EventArgs e)
{
if (TextBox1.Text.Trim ()!= "")
{
DataClasses1DataContext context = new DataClasses1DataContext();
string[] str = new string[3];
str[0] = TextBox1.Text.Substring(0, 2);
str[1] = TextBox1.Text.Substring(2, 3);
str[2] = TextBox1.Text.Substring(5, 3);
string str1 = "";
if (str[1].Substring(0, 1) == "1")
{
str1 = "温度:零下" + str[1].Substring (1)+"度";
}
else
{
str1 = "温度:" + str[1].Substring(1) + "度";
}
var linqdata = from table in context.天气情况
where table.编码 == str[0]
select table.天气;
var linqdata1 = from table in context.风向
where table.编码 == str[2]
select table.风向1;
Label1.Text = "天气:" + linqdata.ToList()[0] + " " + str1 + " " + "风向:" + linqdata1.ToList()[0];
}
}

c2606050113 2012-07-09
  • 打赏
  • 举报
回复
只是给你说了个方向 表格自己想办法建 怎么方便怎么来
zhanglong454 2012-07-09
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 的回复:]
补充
建3个表
天气表:字段名:天气状况;值:数字编码
温度表:同上
风向表:同上
[/Quote]
能帮我搞下么?我脑子有点不好使了
c2606050113 2012-07-09
  • 打赏
  • 举报
回复
补充
建3个表
天气表:字段名:天气状况;值:数字编码
温度表:同上
风向表:同上
c2606050113 2012-07-09
  • 打赏
  • 举报
回复
这个用数据库做挺好做的。
1、天气、温度、风向 三个字段 建立对照表。
2、根据数字编码 sql查询。
3、override ToString()方法 解析成你自己想要的
zhanglong454 2012-07-09
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 的回复:]
不懂winform 如何实现。。 新手求学!
不过如果是网站的话 我会使用 第3方提供的 api.
[/Quote]
是啊,这个也是调用了API,但是我不知怎么把它的代码查出来。。
zhanglong454 2012-07-09
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 的回复:]
按照协议解
[/Quote]
哪来的协议呢?
加载更多回复(12)

110,561

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧