用C#开发的双色球走势图(一)

时间:2022-08-28 17:01:53

首先声明,个人纯粹无聊之作,不作商业用途。

我相信每个人都拥有一个梦想那就是有朝一日能中500W,这个也一直是我的梦想,并默默每一期双色球或多或少要贡献自己一点点力量,本人并不属于那种铁杆的彩票迷,每次都是纯粹娱乐而已,因为深知这个中奖的概率太低了,每一次买也是随机而已,运气好的话还能中个五块钱,运气不好的话随机买五注,甚至一个号码也中不到,每次去购买双色球都会看到走势图,所以个人最近就花了一点时间在这个上面,进行了一番研究,现将研究成果写出来,供园友一起探讨,愿各位早日中500W。

双色球开奖数据个人也是从某网站抓取的,不保存到数据库,根据这些原始数据去分析双色球的走势,如有基本走势图、红球三分区走势图、红球四分区走势图、红球七分区走势图、红球连号走势图、和值走势图、篮球综合走势图和历史同期等等组成。

首先介绍双色球原始数据是如何获取的?这个对于各位来说都比较简单,就是获取HTML源码,根据HTML去提取相关信息。

用C#开发的双色球走势图(一)

获取网页上数据后,再提取HTML相关信息,提取代码如下:

 1 /// <summary>
2 /// 循环解析Tr
3 /// </summary>
4 /// <param name="wnRepo"></param>
5 /// <param name="content"><tbody></tbody>之间的内容</param>
6 private void ResolveTr(string content)
7 {
8 listWinNo.Clear();
9 //--
10 string trContent = string.Empty;
11 WinNo wn = null;
12 Regex regex = new Regex("<tr>");
13 //在<tbody></tbody>之间的内容搜索所有匹配<tr>的项
14 MatchCollection matches = regex.Matches(content);
15 foreach (Match item in matches)
16 {
17 wn = new WinNo();
18 //如果当前匹配项的下一个匹配项的值不为空
19 if (!string.IsNullOrEmpty(item.NextMatch().Value))
20 {
21 trContent = content.Substring(item.Index, item.NextMatch().Index - item.Index);
22 }
23 //最后一个<tr>的匹配项
24 else
25 {
26 trContent = content.Substring(item.Index, content.Length - item.Index);
27 }
28 ResolveTd(ref wn, trContent);
29 //wnRepo.Insert(wn);
30 listWinNo.Add(wn);
31 }
32 }

存放双色球红球和篮球的实体类:

 1     #region * 实体类
2 public class WinNo
3 {
4 /// <summary>
5 /// 期号
6 /// </summary>
7 public string QiHao { get; set; }
8
9 /// <summary>
10 /// 第一个红球号码
11 /// </summary>
12 public int R1 { get; set; }
13 /// <summary>
14 /// 第二个红球号码
15 /// </summary>
16 public int R2 { get; set; }
17 /// <summary>
18 /// 第三个红球号码
19 /// </summary>
20 public int R3 { get; set; }
21 /// <summary>
22 /// 第四个红球号码
23 /// </summary>
24 public int R4 { get; set; }
25 /// <summary>
26 /// 第五个红球号码
27 /// </summary>
28 public int R5 { get; set; }
29 /// <summary>
30 /// 第六个红球号码
31 /// </summary>
32 public int R6 { get; set; }
33 /// <summary>
34 /// 篮球号码
35 /// </summary>
36 public int B { get; set; }
37
38 /// <summary>
39 /// 用于存放历史数据
40 /// </summary>
41 public List<string> Data { get; set; }
42 }
43 #endregion

获取每一期的号码,并返回一个实体:

 1  /// <summary>
2 /// 在一个TR中,解析TD,获取一期的号码
3 /// </summary>
4 /// <param name="wn"></param>
5 /// <param name="trContent"></param>
6 private void ResolveTd(ref WinNo wn, string trContent)
7 {
8 List<int> redBoxList = null;
9 //匹配期号的表达式
10 string patternQiHao = "<td align=\"center\" title=\"开奖日期";
11 Regex regex = new Regex(patternQiHao);
12 Match qhMatch = regex.Match(trContent);
13 wn.QiHao = trContent.Substring(qhMatch.Index + 17 + patternQiHao.Length, 7);
14 //匹配蓝球的表达式
15 string patternChartBall02 = "<td class=\"chartBall02\">";
16 regex = new Regex(patternChartBall02);
17 Match bMatch = regex.Match(trContent);
18 wn.B = Convert.ToInt32(trContent.Substring(bMatch.Index + patternChartBall02.Length, 2));
19 //存放匹配出来的红球号码
20 redBoxList = new List<int>();
21 //匹配红球的表达式
22 string patternChartBall01 = "<td class=\"chartBall01\">";
23 regex = new Regex(patternChartBall01);
24 MatchCollection rMatches = regex.Matches(trContent);
25 foreach (Match r in rMatches)
26 {
27 redBoxList.Add(Convert.ToInt32(trContent.Substring(r.Index + patternChartBall01.Length, 2)));
28 }
29 //匹配红球的表达式
30 string patternChartBall07 = "<td class=\"chartBall07\">";
31 regex = new Regex(patternChartBall07);
32 rMatches = regex.Matches(trContent);
33 foreach (Match r in rMatches)
34 {
35 redBoxList.Add(Convert.ToInt32(trContent.Substring(r.Index + patternChartBall07.Length, 2)));
36 }
37 //排序红球号码
38 redBoxList.Sort();
39 //第一个红球号码
40 wn.R1 = redBoxList[0];
41 //第二个红球号码
42 wn.R2 = redBoxList[1];
43 wn.R3 = redBoxList[2];
44 wn.R4 = redBoxList[3];
45 wn.R5 = redBoxList[4];
46 wn.R6 = redBoxList[5];
47 }

通过线程池同时去分析双色球的这些数据,节省显示数据的时间,让用户体验更好,这个每个人应该都会。

用C#开发的双色球走势图(一)

1.基本走势图

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

用C#开发的双色球走势图(一)

不带遗漏数据的走势图:

用C#开发的双色球走势图(一)

显示双色球基本走势图关键代码如下:

 1   #region * 基本走势图
2 /// <summary>
3 /// 基本走势图
4 /// </summary>
5 /// <param name="obj"></param>
6 private void GetData1(object obj)
7 {
8 table.Clear();
9 cleantable.Clear();
10 if (listWinNo != null && listWinNo.Count > 0)
11 {
12 foreach (WinNo item in listWinNo)
13 {
14 DataRow dr = table.NewRow();
15 dr["QiHao"] = item.QiHao;
16 dr["R" + item.R1] = "R" + GetStr(item.R1.ToString());//红1
17 dr["R" + item.R2] = "R" + GetStr(item.R2.ToString());//红2
18 dr["R" + item.R3] = "R" + GetStr(item.R3.ToString());//红3
19 dr["R" + item.R4] = "R" + GetStr(item.R4.ToString());//红4
20 dr["R" + item.R5] = "R" + GetStr(item.R5.ToString());//红5
21 dr["R" + item.R6] = "R" + GetStr(item.R6.ToString());//红6
22 dr["B" + item.B] = "B" + GetStr(item.B.ToString());//篮球
23 table.Rows.Add(dr);
24
25 DataRow cleandr = cleantable.NewRow();
26 cleandr["QiHao"] = item.QiHao;
27 cleandr["R" + item.R1] = GetStr(item.R1.ToString());//红1
28 cleandr["R" + item.R2] = GetStr(item.R2.ToString());//红2
29 cleandr["R" + item.R3] = GetStr(item.R3.ToString());//红3
30 cleandr["R" + item.R4] = GetStr(item.R4.ToString());//红4
31 cleandr["R" + item.R5] = GetStr(item.R5.ToString());//红5
32 cleandr["R" + item.R6] = GetStr(item.R6.ToString());//红6
33 cleandr["B" + item.B] = GetStr(item.B.ToString());//篮球
34 cleantable.Rows.Add(cleandr);
35 }
36
37 for (int j = 1; j < 34; j++)
38 {
39 int xint = 0;
40 for (int i = 0; i < table.Rows.Count; i++)
41 {
42 if (string.IsNullOrEmpty(table.Rows[i]["R" + j].ToString()))
43 {
44 xint++;
45 table.Rows[i]["R" + j] = xint;
46 }
47 else
48 {
49 xint = 0;
50 }
51 }
52 }
53
54 for (int j = 1; j < 17; j++)
55 {
56 int xint = 0;
57 for (int i = 0; i < table.Rows.Count; i++)
58 {
59 if (string.IsNullOrEmpty(table.Rows[i]["B" + j].ToString()))
60 {
61 xint++;
62 table.Rows[i]["B" + j] = xint;
63 }
64 else
65 {
66 xint = 0;
67 }
68 }
69 }
70
71 if (this.IsHandleCreated)
72 {
73 this.Invoke((MethodInvoker)delegate
74 {
75 if (flag)
76 {
77 cleantable.DefaultView.Sort = "QiHao DESC";
78 this.gridControl1.DataSource = cleantable.DefaultView.ToTable();
79 }
80 else
81 {
82 table.DefaultView.Sort = "QiHao DESC";
83 this.gridControl1.DataSource = table.DefaultView.ToTable();
84 }
85 });
86 }
87 }
88 }
89 #endregion

红球三分区走势图显示效果如下:(同时也包括带遗漏数据和不带遗漏数据的效果)

用C#开发的双色球走势图(一)

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

用C#开发的双色球走势图(一)

实现红球三分区走势图关键代码:

  1   #region * 红球三分区走势图
2 /// <summary>
3 /// 红球三分区走势图
4 /// </summary>
5 /// <param name="obj"></param>
6 private void GetData2(object obj)
7 {
8 sedredtable.Clear();
9 sedcleanredtable.Clear();
10 if (listWinNo != null && listWinNo.Count > 0)
11 {
12 foreach (WinNo item in listWinNo)
13 {
14 List<int> redList = new List<int>();
15 redList.Add(item.R1);
16 redList.Add(item.R2);
17 redList.Add(item.R3);
18 redList.Add(item.R4);
19 redList.Add(item.R5);
20 redList.Add(item.R6);
21 //--
22 DataRow reddr = sedredtable.NewRow();
23 reddr["QiHao"] = item.QiHao;
24 reddr["R" + item.R1] = "R" + GetStr(item.R1.ToString());//红1
25 reddr["R" + item.R2] = "R" + GetStr(item.R2.ToString());//红2
26 reddr["R" + item.R3] = "R" + GetStr(item.R3.ToString());//红3
27 reddr["R" + item.R4] = "R" + GetStr(item.R4.ToString());//红4
28 reddr["R" + item.R5] = "R" + GetStr(item.R5.ToString());//红5
29 reddr["R" + item.R6] = "R" + GetStr(item.R6.ToString());//红6
30 reddr["A1"] = item.R1 + item.R2 + item.R3 + item.R4 + item.R5 + item.R6;//和值
31 reddr["A2"] = item.R6 - item.R1;//跨度
32 reddr["A3"] = GetQujian(redList);//区间比
33 reddr["A4"] = GetJio(redList);//奇偶比
34 sedredtable.Rows.Add(reddr);
35
36 DataRow cleanreddr = sedcleanredtable.NewRow();
37 cleanreddr["QiHao"] = item.QiHao;
38 cleanreddr["R" + item.R1] = GetStr(item.R1.ToString());//红1
39 cleanreddr["R" + item.R2] = GetStr(item.R2.ToString());//红2
40 cleanreddr["R" + item.R3] = GetStr(item.R3.ToString());//红3
41 cleanreddr["R" + item.R4] = GetStr(item.R4.ToString());//红4
42 cleanreddr["R" + item.R5] = GetStr(item.R5.ToString());//红5
43 cleanreddr["R" + item.R6] = GetStr(item.R6.ToString());//红6
44 cleanreddr["A1"] = item.R1 + item.R2 + item.R3 + item.R4 + item.R5 + item.R6;//和值
45 cleanreddr["A2"] = item.R6 - item.R1;//跨度
46 cleanreddr["A3"] = GetQujian(redList);//区间比
47 cleanreddr["A4"] = GetJio(redList);//奇偶比
48 sedcleanredtable.Rows.Add(cleanreddr);
49 }
50
51 for (int j = 1; j < 34; j++)
52 {
53 int xint = 0;
54 for (int i = 0; i < sedredtable.Rows.Count; i++)
55 {
56 if (string.IsNullOrEmpty(sedredtable.Rows[i]["R" + j].ToString()))
57 {
58 xint++;
59 sedredtable.Rows[i]["R" + j] = xint;
60 }
61 else
62 {
63 xint = 0;
64 }
65 }
66 }
67
68 if (this.IsHandleCreated)
69 {
70 this.Invoke((MethodInvoker)delegate
71 {
72 if (flag)
73 {
74 sedcleanredtable.DefaultView.Sort = "QiHao DESC";
75 this.gridControl2.DataSource = sedcleanredtable.DefaultView.ToTable();
76 }
77 else
78 {
79 sedredtable.DefaultView.Sort = "QiHao DESC";
80 this.gridControl2.DataSource = sedredtable.DefaultView.ToTable();
81 }
82 });
83 }
84 }
85 }
86
87 /// <summary>
88 /// 区间比
89 /// </summary>
90 /// <param name="redList"></param>
91 /// <returns></returns>
92 private string GetQujian(List<int> redList)
93 {
94 int xint1 = 0;
95 int xint2 = 0;
96 int xint3 = 0;
97 foreach (int item in redList)
98 {
99 if (item < 12)
100 {
101 xint1++;
102 }
103 else if (item > 11 && item < 23)
104 {
105 xint2++;
106 }
107 else if (item > 22)
108 {
109 xint3++;
110 }
111 }
112 return xint1.ToString() + ":" + xint2.ToString() + ":" + xint3.ToString();
113 }
114
115 /// <summary>
116 /// 奇偶比
117 /// </summary>
118 /// <param name="redList"></param>
119 /// <returns></returns>
120 private string GetJio(List<int> redList)
121 {
122 int xint1 = 0;//奇数
123 int xint2 = 0;//偶数
124 foreach (int item in redList)
125 {
126 if (item % 2 == 0)
127 {
128 xint2++;//偶数
129 }
130 else
131 {
132 xint1++;//奇数
133 }
134 }
135 return xint1.ToString() + ":" + xint2.ToString();
136 }
137 #endregion

请看下篇:  http://www.cnblogs.com/jara/p/4122379.html

用C#开发的双色球走势图(一)的更多相关文章

  1. 用C&num;开发的双色球走势图&lpar;二&rpar;

    昨晚由于时间的原因只写了一部分内容,今天将这一部分内容补充完毕,多谢各位园友的支持. 这是用C#开发的双色球走势图(一)新的园友可以看昨晚写的内容,以免脱节.首先回复园友的评论,有说好的有说不好的,本 ...

  2. 用C&num;开发的双色球走势图(原创)值得园友拥有(二)接上一篇

    昨晚由于时间的原因只写了一部分内容,今天将这一部分内容补充完毕,多谢各位园友的支持. 这是用C#开发的双色球走势图(原创)值得园友拥有 新的园友可以看昨晚写的内容,以免脱节.首先回复园友的评论,有说好 ...

  3. 用C&num;开发的双色球走势图(原创)值得园友拥有

    首先声明,个人纯粹无聊之作,不作商业用途. 我相信每个人都拥有一个梦想那就是有朝一日能中500W,这个也一直是我的梦想,并默默每一期双色球或多或少要贡献自己一点点力量,本人并不属于那种铁杆的彩票迷,每 ...

  4. 一款强大的双色球走势图,助你500W梦想,js&plus;mvc&plus;html

    序言 估计每个人都有中500W的梦想,我关注双色球也有一定年数了,可最多中也只有10块钱,这已经算是最大的奖,最近闲来无事,研究下怎么去开发双色球的走势图,觉得还是蛮有意思的,用MVC+JS+HTMl ...

  5. APP开发项目思维导图

    APP开发项目思维导图 下载思维导图:APP开发项目.xmind.zip --------------------------------------- APP开发项目 app项目标记: 未启动 功能 ...

  6. WPF Devexpress 控件库中ChartControl 实现股票分时走势图

    概要 从事金融行业开发 ,会接触些图表控件,这里我分享一下自己基于DevExpress.Charts.v16.2开发的股票分时走势图的经验. 附上源码:点击跳转 如果需要讨论,Q群:580749909 ...

  7. 【转】使用Python matplotlib绘制股票走势图

    转载出处 一.前言 matplotlib[1]是著名的python绘图库,它提供了一整套绘图API,十分适合交互式绘图.本人在工作过程中涉及到股票数据的处理如绘制K线等,因此将matplotlib的使 ...

  8. CozyRSS开发记录1-原型图与Grid

    CozyRSS开发记录1-原型图与Grid 1.使用MockPlus画出最简陋的原型图 这个界面参考了目前我最常使用的RSS阅读-傲游浏览器的内置RSS阅读器.主体框架划分为上.左下.右下三块,分别是 ...

  9. WebService学习--股票走势图&plus;天气预报实现

        互联网上面有很多的免费webService服务,我们可以调用这些免费的WebService服务,将一些其他网站的内容信息集成到我们的Web应用中显示,下面就以获取股票数据和天气预报为例进行学习 ...

随机推荐

  1. nsurl 测试ATS

    LIPEIdeMacBook-Air:~ lipei$ nscurl --ats-diagnostics https://xxxxx.com/ Starting ATS Diagnostics Con ...

  2. 【转】【MMX】 基于MMX指令集的程序设计简介

    (一) MMX技术简介 Intel 公司的MMX™(多媒体增强指令集)技术可以大大提高应用程序对二维三维图形和图象的处理能力.Intel MMX技术可用于对大量数据和复杂数组进行的复杂处理,使用MMX ...

  3. flex中在basewidget中不能使用图表组件问题

    参考 http://blog.sina.com.cn/s/blog_51e3d0e70101hljz.html

  4. vs2015web工程中的html引用压缩后css后无法智能提示的问题解决

    环境:win10x64 vs2015企业版 项目:空白web项目(.net framework4) 问题:html页面加入压缩后的css(eg:bootstrap.min.css),编码的时候无法智能 ...

  5. mediawiki在windows下的安装

    mediawiki在windows下的安装 对于刚接触wiki的朋友们来说,配置一个服务器环境,安装并运行mediawiki是一件很麻烦的事情,在这里,我尽量用通俗易懂的语言,介绍mw(mediawi ...

  6. 【转】ActiveMQ与虚拟通道

    郑重提示,本文转载自http://shift-alt-ctrl.iteye.com/blog/2065436 ActiveMQ提供了虚拟通道的特性(Virtual Destination),它允许一个 ...

  7. 自动化测试之路2---python安装

    借鉴这位老哥的文章http://www.cnblogs.com/shabbylee/p/6792555.html

  8. Ocelot简易教程(六)之重写配置文件存储方式并优化响应数据

    本来这篇文章在昨天晚上就能发布的,悲剧的是写了两三千字的文章居然没保存,结果我懵逼了.今天重新来写这篇文章.今天我们就一起来探讨下如何重写Ocelot配置文件的存储方式以及获取方式. 作者:依乐祝 原 ...

  9. workerman程序调试

    现象1 启动后报错类似如下: php start.php start PHP Warning: stream_socket_server(): unable to connect to tcp://x ...

  10. BP神经网络在python下的自主搭建梳理

    本实验使用mnist数据集完成手写数字识别的测试.识别正确率认为是95% 完整代码如下: #!/usr/bin/env python # coding: utf-8 # In[1]: import n ...