用C#开发的双色球走势图(原创)值得园友拥有
首先声明,个人纯粹无聊之作,不作商业用途。
我相信每个人都拥有一个梦想那就是有朝一日能中500W,这个也一直是我的梦想,并默默每一期双色球或多或少要贡献自己一点点力量,本人并不属于那种铁杆的彩票迷,每次都是纯粹娱乐而已,因为深知这个中奖的概率太低了,每一次买也是随机而已,运气好的话还能中个五块钱,运气不好的话随机买五注,甚至一个号码也中不到,每次去购买双色球都会看到走势图,所以个人最近就花了一点时间在这个上面,进行了一番研究,现将研究成果写出来,供园友一起探讨,愿各位早日中500W。
双色球开奖数据个人也是从某网站抓取的,不保存到数据库,根据这些原始数据去分析双色球的走势,如有基本走势图、红球三分区走势图、红球四分区走势图、红球七分区走势图、红球连号走势图、和值走势图、篮球综合走势图和历史同期等等组成。
首先介绍双色球原始数据是如何获取的?这个对于各位来说都比较简单,就是获取HTML源码,根据HTML去提取相关信息。

获取网页上数据后,再提取HTML相关信息,提取代码如下:
/// <summary>
/// 循环解析Tr
/// </summary>
/// <param name="wnRepo"></param>
/// <param name="content"><tbody></tbody>之间的内容</param>
private void ResolveTr(string content)
{
listWinNo.Clear();
//--
string trContent = string.Empty;
WinNo wn = null;
Regex regex = new Regex("<tr>");
//在<tbody></tbody>之间的内容搜索所有匹配<tr>的项
MatchCollection matches = regex.Matches(content);
foreach (Match item in matches)
{
wn = new WinNo();
//如果当前匹配项的下一个匹配项的值不为空
if (!string.IsNullOrEmpty(item.NextMatch().Value))
{
trContent = content.Substring(item.Index, item.NextMatch().Index - item.Index);
}
//最后一个<tr>的匹配项
else
{
trContent = content.Substring(item.Index, content.Length - item.Index);
}
ResolveTd(ref wn, trContent);
//wnRepo.Insert(wn);
listWinNo.Add(wn);
}
}
存放双色球红球和篮球的实体类:
#region * 实体类
public class WinNo
{
/// <summary>
/// 期号
/// </summary>
public string QiHao { get; set; } /// <summary>
/// 第一个红球号码
/// </summary>
public int R1 { get; set; }
/// <summary>
/// 第二个红球号码
/// </summary>
public int R2 { get; set; }
/// <summary>
/// 第三个红球号码
/// </summary>
public int R3 { get; set; }
/// <summary>
/// 第四个红球号码
/// </summary>
public int R4 { get; set; }
/// <summary>
/// 第五个红球号码
/// </summary>
public int R5 { get; set; }
/// <summary>
/// 第六个红球号码
/// </summary>
public int R6 { get; set; }
/// <summary>
/// 篮球号码
/// </summary>
public int B { get; set; } /// <summary>
/// 用于存放历史数据
/// </summary>
public List<string> Data { get; set; }
}
#endregion
获取每一期的号码,并返回一个实体:
/// <summary>
/// 在一个TR中,解析TD,获取一期的号码
/// </summary>
/// <param name="wn"></param>
/// <param name="trContent"></param>
private void ResolveTd(ref WinNo wn, string trContent)
{
List<int> redBoxList = null;
//匹配期号的表达式
string patternQiHao = "<td align=\"center\" title=\"开奖日期";
Regex regex = new Regex(patternQiHao);
Match qhMatch = regex.Match(trContent);
wn.QiHao = trContent.Substring(qhMatch.Index + + patternQiHao.Length, );
//匹配蓝球的表达式
string patternChartBall02 = "<td class=\"chartBall02\">";
regex = new Regex(patternChartBall02);
Match bMatch = regex.Match(trContent);
wn.B = Convert.ToInt32(trContent.Substring(bMatch.Index + patternChartBall02.Length, ));
//存放匹配出来的红球号码
redBoxList = new List<int>();
//匹配红球的表达式
string patternChartBall01 = "<td class=\"chartBall01\">";
regex = new Regex(patternChartBall01);
MatchCollection rMatches = regex.Matches(trContent);
foreach (Match r in rMatches)
{
redBoxList.Add(Convert.ToInt32(trContent.Substring(r.Index + patternChartBall01.Length, )));
}
//匹配红球的表达式
string patternChartBall07 = "<td class=\"chartBall07\">";
regex = new Regex(patternChartBall07);
rMatches = regex.Matches(trContent);
foreach (Match r in rMatches)
{
redBoxList.Add(Convert.ToInt32(trContent.Substring(r.Index + patternChartBall07.Length, )));
}
//排序红球号码
redBoxList.Sort();
//第一个红球号码
wn.R1 = redBoxList[];
//第二个红球号码
wn.R2 = redBoxList[];
wn.R3 = redBoxList[];
wn.R4 = redBoxList[];
wn.R5 = redBoxList[];
wn.R6 = redBoxList[];
}
通过以上几个步骤就拿到网站关于双色球红球和篮球的原始数据,下面就根据这些原始数据进行分析。
通过线程池同时去分析双色球的这些数据,节省显示数据的时间,让用户体验更好,这个每个人应该都会。

1.基本走势图
基本走势图包括红球和篮球的走势情况,包括可以显示和不显示遗漏数据的走势图,效果图分别如下:

不带遗漏数据的走势图:

显示双色球基本走势图关键代码如下:
#region * 基本走势图
/// <summary>
/// 基本走势图
/// </summary>
/// <param name="obj"></param>
private void GetData1(object obj)
{
table.Clear();
cleantable.Clear();
if (listWinNo != null && listWinNo.Count > )
{
foreach (WinNo item in listWinNo)
{
DataRow dr = table.NewRow();
dr["QiHao"] = item.QiHao;
dr["R" + item.R1] = "R" + GetStr(item.R1.ToString());//红1
dr["R" + item.R2] = "R" + GetStr(item.R2.ToString());//红2
dr["R" + item.R3] = "R" + GetStr(item.R3.ToString());//红3
dr["R" + item.R4] = "R" + GetStr(item.R4.ToString());//红4
dr["R" + item.R5] = "R" + GetStr(item.R5.ToString());//红5
dr["R" + item.R6] = "R" + GetStr(item.R6.ToString());//红6
dr["B" + item.B] = "B" + GetStr(item.B.ToString());//篮球
table.Rows.Add(dr); DataRow cleandr = cleantable.NewRow();
cleandr["QiHao"] = item.QiHao;
cleandr["R" + item.R1] = GetStr(item.R1.ToString());//红1
cleandr["R" + item.R2] = GetStr(item.R2.ToString());//红2
cleandr["R" + item.R3] = GetStr(item.R3.ToString());//红3
cleandr["R" + item.R4] = GetStr(item.R4.ToString());//红4
cleandr["R" + item.R5] = GetStr(item.R5.ToString());//红5
cleandr["R" + item.R6] = GetStr(item.R6.ToString());//红6
cleandr["B" + item.B] = GetStr(item.B.ToString());//篮球
cleantable.Rows.Add(cleandr);
} for (int j = ; j < ; j++)
{
int xint = ;
for (int i = ; i < table.Rows.Count; i++)
{
if (string.IsNullOrEmpty(table.Rows[i]["R" + j].ToString()))
{
xint++;
table.Rows[i]["R" + j] = xint;
}
else
{
xint = ;
}
}
} for (int j = ; j < ; j++)
{
int xint = ;
for (int i = ; i < table.Rows.Count; i++)
{
if (string.IsNullOrEmpty(table.Rows[i]["B" + j].ToString()))
{
xint++;
table.Rows[i]["B" + j] = xint;
}
else
{
xint = ;
}
}
} if (this.IsHandleCreated)
{
this.Invoke((MethodInvoker)delegate
{
if (flag)
{
cleantable.DefaultView.Sort = "QiHao DESC";
this.gridControl1.DataSource = cleantable.DefaultView.ToTable();
}
else
{
table.DefaultView.Sort = "QiHao DESC";
this.gridControl1.DataSource = table.DefaultView.ToTable();
}
});
}
}
}
#endregion
2.红球三分区走势图
红球三分区走势图显示效果如下:(同时也包括带遗漏数据和不带遗漏数据的效果)

不带遗漏数据的红球三分区走势图效果:

实现红球三分区走势图关键代码:
#region * 红球三分区走势图
/// <summary>
/// 红球三分区走势图
/// </summary>
/// <param name="obj"></param>
private void GetData2(object obj)
{
sedredtable.Clear();
sedcleanredtable.Clear();
if (listWinNo != null && listWinNo.Count > )
{
foreach (WinNo item in listWinNo)
{
List<int> redList = new List<int>();
redList.Add(item.R1);
redList.Add(item.R2);
redList.Add(item.R3);
redList.Add(item.R4);
redList.Add(item.R5);
redList.Add(item.R6);
//--
DataRow reddr = sedredtable.NewRow();
reddr["QiHao"] = item.QiHao;
reddr["R" + item.R1] = "R" + GetStr(item.R1.ToString());//红1
reddr["R" + item.R2] = "R" + GetStr(item.R2.ToString());//红2
reddr["R" + item.R3] = "R" + GetStr(item.R3.ToString());//红3
reddr["R" + item.R4] = "R" + GetStr(item.R4.ToString());//红4
reddr["R" + item.R5] = "R" + GetStr(item.R5.ToString());//红5
reddr["R" + item.R6] = "R" + GetStr(item.R6.ToString());//红6
reddr["A1"] = item.R1 + item.R2 + item.R3 + item.R4 + item.R5 + item.R6;//和值
reddr["A2"] = item.R6 - item.R1;//跨度
reddr["A3"] = GetQujian(redList);//区间比
reddr["A4"] = GetJio(redList);//奇偶比
sedredtable.Rows.Add(reddr); DataRow cleanreddr = sedcleanredtable.NewRow();
cleanreddr["QiHao"] = item.QiHao;
cleanreddr["R" + item.R1] = GetStr(item.R1.ToString());//红1
cleanreddr["R" + item.R2] = GetStr(item.R2.ToString());//红2
cleanreddr["R" + item.R3] = GetStr(item.R3.ToString());//红3
cleanreddr["R" + item.R4] = GetStr(item.R4.ToString());//红4
cleanreddr["R" + item.R5] = GetStr(item.R5.ToString());//红5
cleanreddr["R" + item.R6] = GetStr(item.R6.ToString());//红6
cleanreddr["A1"] = item.R1 + item.R2 + item.R3 + item.R4 + item.R5 + item.R6;//和值
cleanreddr["A2"] = item.R6 - item.R1;//跨度
cleanreddr["A3"] = GetQujian(redList);//区间比
cleanreddr["A4"] = GetJio(redList);//奇偶比
sedcleanredtable.Rows.Add(cleanreddr);
} for (int j = ; j < ; j++)
{
int xint = ;
for (int i = ; i < sedredtable.Rows.Count; i++)
{
if (string.IsNullOrEmpty(sedredtable.Rows[i]["R" + j].ToString()))
{
xint++;
sedredtable.Rows[i]["R" + j] = xint;
}
else
{
xint = ;
}
}
} if (this.IsHandleCreated)
{
this.Invoke((MethodInvoker)delegate
{
if (flag)
{
sedcleanredtable.DefaultView.Sort = "QiHao DESC";
this.gridControl2.DataSource = sedcleanredtable.DefaultView.ToTable();
}
else
{
sedredtable.DefaultView.Sort = "QiHao DESC";
this.gridControl2.DataSource = sedredtable.DefaultView.ToTable();
}
});
}
}
} /// <summary>
/// 区间比
/// </summary>
/// <param name="redList"></param>
/// <returns></returns>
private string GetQujian(List<int> redList)
{
int xint1 = ;
int xint2 = ;
int xint3 = ;
foreach (int item in redList)
{
if (item < )
{
xint1++;
}
else if (item > && item < )
{
xint2++;
}
else if (item > )
{
xint3++;
}
}
return xint1.ToString() + ":" + xint2.ToString() + ":" + xint3.ToString();
} /// <summary>
/// 奇偶比
/// </summary>
/// <param name="redList"></param>
/// <returns></returns>
private string GetJio(List<int> redList)
{
int xint1 = ;//奇数
int xint2 = ;//偶数
foreach (int item in redList)
{
if (item % == )
{
xint2++;//偶数
}
else
{
xint1++;//奇数
}
}
return xint1.ToString() + ":" + xint2.ToString();
}
#endregion
请看下篇:
用C#开发的双色球走势图(原创)值得园友拥有(二)接上一篇
如有兴趣可加QQ群:186841119
用C#开发的双色球走势图(原创)值得园友拥有的更多相关文章
- 用C#开发的双色球走势图(原创)值得园友拥有(二)接上一篇
昨晚由于时间的原因只写了一部分内容,今天将这一部分内容补充完毕,多谢各位园友的支持. 这是用C#开发的双色球走势图(原创)值得园友拥有 新的园友可以看昨晚写的内容,以免脱节.首先回复园友的评论,有说好 ...
- 用C#开发的双色球走势图(二)
昨晚由于时间的原因只写了一部分内容,今天将这一部分内容补充完毕,多谢各位园友的支持. 这是用C#开发的双色球走势图(一)新的园友可以看昨晚写的内容,以免脱节.首先回复园友的评论,有说好的有说不好的,本 ...
- 用C#开发的双色球走势图(一)
首先声明,个人纯粹无聊之作,不作商业用途. 我相信每个人都拥有一个梦想那就是有朝一日能中500W,这个也一直是我的梦想,并默默每一期双色球或多或少要贡献自己一点点力量,本人并不属于那种铁杆的彩票迷,每 ...
- 一款强大的双色球走势图,助你500W梦想,js+mvc+html
序言 估计每个人都有中500W的梦想,我关注双色球也有一定年数了,可最多中也只有10块钱,这已经算是最大的奖,最近闲来无事,研究下怎么去开发双色球的走势图,觉得还是蛮有意思的,用MVC+JS+HTMl ...
- APP开发项目思维导图
APP开发项目思维导图 下载思维导图:APP开发项目.xmind.zip --------------------------------------- APP开发项目 app项目标记: 未启动 功能 ...
- C#调用OpenCV开发简易版美图工具
前言 在C#调用OpenCV其实非常简单,因为C#中有很多OPenCV的开源类库. 本文主要介绍在WPF项目中使用OpenCVSharp3-AnyCPU开源类库处理图片,下面我们先来做开发前的准备工作 ...
- WPF Devexpress 控件库中ChartControl 实现股票分时走势图
概要 从事金融行业开发 ,会接触些图表控件,这里我分享一下自己基于DevExpress.Charts.v16.2开发的股票分时走势图的经验. 附上源码:点击跳转 如果需要讨论,Q群:580749909 ...
- 【转】使用Python matplotlib绘制股票走势图
转载出处 一.前言 matplotlib[1]是著名的python绘图库,它提供了一整套绘图API,十分适合交互式绘图.本人在工作过程中涉及到股票数据的处理如绘制K线等,因此将matplotlib的使 ...
- CozyRSS开发记录1-原型图与Grid
CozyRSS开发记录1-原型图与Grid 1.使用MockPlus画出最简陋的原型图 这个界面参考了目前我最常使用的RSS阅读-傲游浏览器的内置RSS阅读器.主体框架划分为上.左下.右下三块,分别是 ...
随机推荐
- Neuron network
关于神经网络你不能不知道的一切 作者|Kailash Ahirwar 编译|Sambodhi 编辑|Vincent AI前线导语:理解什么是人工智能,以及机器学习和深度学习是如何影响人工智能的,这是一 ...
- 关于jni调用报UnsatisfiedLinkError的可能
一.说明 最近在做一个项目,需要使用java去调本地动态连接库,之前做测试的时候直接用pojo进行测试,是能够正常调用的.后面项目需要将接口封装为REST api,所以在spring boot上面开发 ...
- php单点登陆简单实现 (iframe方式)
有四个网站分别为: www.a.com www.b.com www.c.com www.sso.com 需求是如果我们在sso登陆后,其他网站也会显示登陆中,不需要重复登陆,退出时,其他网站也会失效. ...
- linux系统命令笔记
一.linux系统目录 /bin 系统命令目录 /dev 设备目录 /home 每个系统用户在home下都有一个目录, 每个用户登录到系统后会自动登录到这个目录下, root用户会在/root文件夹下 ...
- geoserver 开发2
先上源码下载 上一章我们介绍了GeoServer源码分析的必要性(这个就见仁见智了)以及诸项准备工作,并且在最后还给出了OWS请求处理流程的伪代码. 这一章我们来看看要注册自己的服务需要做哪些工作.假 ...
- 并发编程(五)LockSupport
并发编程(五)LockSupport LockSupport 提供 park() 和 unpark() 方法实现阻塞线程和解除线程阻塞,实现的阻塞和解除阻塞是基于"许可(permit)&qu ...
- 【附案例】UI交互设计不会做?设计大神带你开启动效灵感之路
随着网络技术的创新发展,如今UI交互设计应用越来越广泛,显然已经成为设计的主流及流行的必然趋势.UI界面交互设计中的动效包括移动,滑块,悬停效果,GIF动画等.UI界面交互设计为何越来越受到青睐?它有 ...
- cucumber安装可能发生的错误
1.--ignore-certification-errors 解决:可能是你的chromedriver版本与ruby版本不匹配,换一个版本 2.找不到文件,certification verify ...
- hdu-1253(bfs+剪枝)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1253 思路:简单的bfs,就是要注意剪枝. #include<iostream> #inc ...
- hdu-1026(bfs+优先队列)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1026 题意:输入n,m和一个n*m的矩阵, .表示通路: x表示墙: n表示有一个怪物,消灭它需要n个 ...