[转载]用C#开发的双色球走势图(原创)值得园友拥有 – 罗宇皓 – 博客园.
首先声明,个人纯粹无聊之作,不作商业用途。
我相信每个人都拥有一个梦想那就是有朝一日能中500W,这个也一直是我的梦想,并默默每一期双色球或多或少要贡献自己一点点力量,本人并不属于那种铁杆 的彩票迷,每次都是纯粹娱乐而已,因为深知这个中奖的概率太低了,每一次买也是随机而已,运气好的话还能中个五块钱,运气不好的话随机买五注,甚至一个号 码也中不到,每次去购买双色球都会看到走势图,所以个人最近就花了一点时间在这个上面,进行了一番研究,现将研究成果写出来,供园友一起探讨,愿各位早日 中500W。
双色球开奖数据个人也是从某网站抓取的,不保存到数据库,根据这些原始数据去分析双色球的走势,如有基本走势图、红球三分区走势图、红球四分区走势图、红球七分区走势图、红球连号走势图、和值走势图、篮球综合走势图和历史同期等等组成。
首先介绍双色球原始数据是如何获取的?这个对于各位来说都比较简单,就是获取HTML源码,根据HTML去提取相关信息。
获取网页上数据后,再提取HTML相关信息,提取代码如下:
/// /// 循环解析Tr /// ////// 之间的内容 private void ResolveTr(string content) { listWinNo.Clear(); //-- string trContent = string.Empty; WinNo wn = null; Regex regex = new Regex(" "); //在 之间的内容搜索所有匹配 的项 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); } //最后一个的匹配项 else { trContent = content.Substring(item.Index, content.Length - item.Index); } ResolveTd(ref wn, trContent); //wnRepo.Insert(wn); listWinNo.Add(wn); } }
存放双色球红球和篮球的实体类:
#region * 实体类 public class WinNo { /// /// 期号 /// public string QiHao { get; set; } /// /// 第一个红球号码 /// public int R1 { get; set; } /// /// 第二个红球号码 /// public int R2 { get; set; } /// /// 第三个红球号码 /// public int R3 { get; set; } /// /// 第四个红球号码 /// public int R4 { get; set; } /// /// 第五个红球号码 /// public int R5 { get; set; } /// /// 第六个红球号码 /// public int R6 { get; set; } /// /// 篮球号码 /// public int B { get; set; } /// /// 用于存放历史数据 /// public List Data { get; set; } } #endregion
获取每一期的号码,并返回一个实体:
/// /// 在一个TR中,解析TD,获取一期的号码 /// //////private void ResolveTd(ref WinNo wn, string trContent) { List redBoxList = null; //匹配期号的表达式 string patternQiHao = " Regex regex = new Regex(patternQiHao); Match qhMatch = regex.Match(trContent); wn.QiHao = trContent.Substring(qhMatch.Index + 17 + patternQiHao.Length, 7); //匹配蓝球的表达式 string patternChartBall02 = ""; regex = new Regex(patternChartBall02); Match bMatch = regex.Match(trContent); wn.B = Convert.ToInt32(trContent.Substring(bMatch.Index + patternChartBall02.Length, 2)); //存放匹配出来的红球号码 redBoxList = new List(); //匹配红球的表达式 string patternChartBall01 = " "; regex = new Regex(patternChartBall01); MatchCollection rMatches = regex.Matches(trContent); foreach (Match r in rMatches) { redBoxList.Add(Convert.ToInt32(trContent.Substring(r.Index + patternChartBall01.Length, 2))); } //匹配红球的表达式 string patternChartBall07 = " "; regex = new Regex(patternChartBall07); rMatches = regex.Matches(trContent); foreach (Match r in rMatches) { redBoxList.Add(Convert.ToInt32(trContent.Substring(r.Index + patternChartBall07.Length, 2))); } //排序红球号码 redBoxList.Sort(); //第一个红球号码 wn.R1 = redBoxList[0]; //第二个红球号码 wn.R2 = redBoxList[1]; wn.R3 = redBoxList[2]; wn.R4 = redBoxList[3]; wn.R5 = redBoxList[4]; wn.R6 = redBoxList[5]; }
通过以上几个步骤就拿到网站关于双色球红球和篮球的原始数据,下面就根据这些原始数据进行分析。
通过线程池同时去分析双色球的这些数据,节省显示数据的时间,让用户体验更好,这个每个人应该都会。
1.基本走势图
基本走势图包括红球和篮球的走势情况,包括可以显示和不显示遗漏数据的走势图,效果图分别如下:
不带遗漏数据的走势图:
显示双色球基本走势图关键代码如下:
#region * 基本走势图 /// <summary> /// 基本走势图 /// </summary> /// <param name="obj"></param> private void GetData1(object obj) { table.Clear(); cleantable.Clear(); if (listWinNo != null && listWinNo.Count > 0) { 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 = 1; j < 34; j++) { int xint = 0; for (int i = 0; i < table.Rows.Count; i++) { if (string.IsNullOrEmpty(table.Rows[i]["R" + j].ToString())) { xint++; table.Rows[i]["R" + j] = xint; } else { xint = 0; } } } for (int j = 1; j < 17; j++) { int xint = 0; for (int i = 0; i < table.Rows.Count; i++) { if (string.IsNullOrEmpty(table.Rows[i]["B" + j].ToString())) { xint++; table.Rows[i]["B" + j] = xint; } else { xint = 0; } } } 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 > 0) { 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 = 1; j < 34; j++) { int xint = 0; for (int i = 0; i < sedredtable.Rows.Count; i++) { if (string.IsNullOrEmpty(sedredtable.Rows[i]["R" + j].ToString())) { xint++; sedredtable.Rows[i]["R" + j] = xint; } else { xint = 0; } } } 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 = 0; int xint2 = 0; int xint3 = 0; foreach (int item in redList) { if (item < 12) { xint1++; } else if (item > 11 && item < 23) { xint2++; } else if (item > 22) { xint3++; } } return xint1.ToString() + ":" + xint2.ToString() + ":" + xint3.ToString(); } /// <summary> /// 奇偶比 /// </summary> /// <param name="redList"></param> /// <returns></returns> private string GetJio(List<int> redList) { int xint1 = 0;//奇数 int xint2 = 0;//偶数 foreach (int item in redList) { if (item % 2 == 0) { xint2++;//偶数 } else { xint1++;//奇数 } } return xint1.ToString() + ":" + xint2.ToString(); } #endregion
预知下文如何,请听下回分解!望各位园友拍砖灌水,让博主有动力继续下面…
3.红球四分区走势图
4.红球七分区走势图
5.红球连号走势图
6.和值走势图
7.篮球综合走势图
8.历史同期
敬请期待下文的补充…