C#项目—彩票选号
C#彩票选号软件
今天做了一个彩票选号的小软件,将学到的知识点总结如下(新手小白,多提意见);
1.写程序的思路
- 实体类(属性、方法)
- No1. 随机数组集合(属性)
- No2. 创建集合对象(构造方法)
- No3. 生成随机数组(实例方法)
- No4. 生成多组随机数组(实例方法)
- No5. 遍历随机数组生成号码列表(实例方法)
- 主程序调用类方法
- No1. 创建类对象(调用类中的属性、方法实现相应功能)
- No2. 传递界面控件属性值到数组元素并添加到类对象中
- No3. 界面展示控件添加类方法(列表添加<随机数组>)
2.学到的知识点
- 循环嵌套(思考坐标轴≈X<横向n个行数>;Y<一行数中的n个元素>)
//遍历集合的元素——遍历元素的元素——添加到方法集合中(字符串拼接)——集合排序方法
public List<string> listNum()
{
List<string> list = new List<string>();
string listNumNam;
for (int i = 0; i < this.SelectNum.Count; i++)
{
listNumNam = "第" + i + "组: ";
for (int j = 0; j < this.SelectNum[i].Length; j++)
{
listNumNam += this.SelectNum[i][j] + " ";
}
list.Add(listNumNam); //【记住】
}
list.Reverse();
return list;
}
- 文件的操作(保存、打开)
//引用system.IO——创建文件流对象——创建写入器对象——写入数据——关闭写入器——关闭文件流;
private void btnSave_Click(object sender, EventArgs e)
{
FileStream fileStream = new FileStream("NumList.txt", FileMode.Create);
StreamWriter writer = new StreamWriter(fileStream);
for (int i = 0; i < this.listNum.Items.Count; i++)
{
writer.WriteLine(this.listNum.Items[i]);
}
writer.Close();
fileStream.Close();
MessageBox.Show("保存成功", "提示您", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
//打开——直接打开文件夹中的文件
private void btnSaveOpen_Click(object sender, EventArgs e)
{
System.Diagnostics.Process.Start("Explorer.exe",
"J:\\自学视频\\1C#\\喜科堂 郭哥推荐\\练习第三遍\\练习第三遍\\bin\\Debug\\NumList.Txt");
}
- 集合、数组(增加-Add、AddRange、删除-RemoveAt)
//类对象的成员变量添加元素(Add)
this.objSelectNum.SelectNum.Add(txtNums);
//界面控件添加列表元素(类对象的遍历集合方法-AddRange)
this.listNum.Items.AddRange(this.objSelectNum.listNum().ToArray());
//类对象的成员删除所选元素(元素索引号-RemoveAt)
this.objSelector.selectNum.RemoveAt(this.list_num.SelectedIndex);
- 关键字:Random(随机数-Next)
//随机选择一个比10小的数(Next)
ranNum7[i] = this.randomNum.Next(10).ToString();
- 定时器的应用(启动、停止、实时刷新)
3.经验技巧
- 开发控件的属性可以查看界面后的designer中的控件缺省代码并修改应用
- 控件的事件'重置'-可清除不小心双击后的代码
4.UI界面

5.代码实现
【实体类】
- 功能一:定义一个保存选号的成员并【创建对象】
//属性-临时号码(用于存储随机号及数组的)
public List<string[]> selectNum { get; set; }
private Random randomNum = new Random();
//构造方法-创建临时号码对象
public Selector()
{
this.selectNum = new List<string[]>();
}
- 功能二:生成7个随机数【数组】并将数组返回
//实例方法-随机选7个号
public string[] selectNumArray()
{
string[] ranNum7 = new string[7];
for (int i = 0; i < 7; i++)
{
ranNum7[i] = this.randomNum.Next(10).ToString();
}
return ranNum7;
}
- 功能三:生成n组随机数组无需返回【带参数】
//实例方法-随机选n组号
public void selectNumGroup(int groupNum)
{
for (int i = 0; i < groupNum; i++)
{
selectNum.Add(selectNumArray());
}
}
- 功能四:【遍历】成员变量生成号码表
//实例方法-号码列表
public List<string> listNum()
{
List<string> listData = new List<string>();
string listName;
for (int i = 0; i < this.selectNum.Count; i++)
{
if (i < 9) { listName = "第0" + (i + 1) + "组: "; }
else {listName = "第" + (i + 1) + "组: ";}
for (int j = 0; j < this.selectNum[i].Length; j++)
{
if (j == 5) { listName += selectNum[i][j] + " "; } else
{listName += selectNum[i][j] + " ";}
}
listData.Add(listName); //重点
}
listData.Reverse(); //重点
return listData;
}
【主函数】
- Step01:【初始化】
//初始化
public FrmMain()
{
InitializeComponent();
this.timer_sleep.Stop();
this.btn_randomGro.Enabled = true;
this.btn_confirm.Enabled = true;
this.btn_random.Enabled = true;
this.btn_clear.Enabled = false;
this.btn_dele.Enabled = false;
this.timer1.Start();
}
- Step02:【创建类对象】
//创建类对象
private Selector objSelector = new Selector();
- Step03:【添加列表-AddRange】调用实体类<遍历成员而生成的列表>
//实例方法-列表显示
public void showList()
{
this.list_num.Items.Clear(); //先清空列表,再添加
this.list_num.Items.AddRange(this.objSelector.listNum().ToArray()); //重点
}
- Step04:【缺省类】关闭、最小化、窗口拖拽
//关闭
private void btnClose_Click(object sender, EventArgs e)
{
this.Close();
}
//最小化
private void btnMin_Click(object sender, EventArgs e)
{
this.WindowState = FormWindowState.Minimized;
}
窗口拖拽
#region 拖动窗体的实现
private Point mouseOff;//鼠标移动位置变量
private bool leftFlag;//标签是否为左键
private void FrmMain_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
mouseOff = new Point(-e.X, -e.Y); //得到变量的值
leftFlag = true; //点击左键按下时标注为true;
}
}
private void FrmMain_MouseMove(object sender, MouseEventArgs e)
{
if (leftFlag)
{
Point mouseSet = Control.MousePosition;
mouseSet.Offset(mouseOff.X, mouseOff.Y); //设置移动后的位置
Location = mouseSet;
}
}
private void FrmMain_MouseUp(object sender, MouseEventArgs e)
{
if (leftFlag)
{
leftFlag = false;//释放鼠标后标注为false;
}
}
//在所需移动的控件事件中选定3方法即可实现
#endregion
- Step05:【随机选号】让标签数字滚动,开始定时器即可(使能按钮)
//随机选号
private void btn_random_Click(object sender, EventArgs e)
{
this.timer_sleep.Start();
this.btn_random.Enabled = false;
this.btn_confirm.Enabled = true;
}
- Step06:【确认选号】停止滚动、并保存当前数字到成员变量、并显示列表
//确认选号
private void btn_confirm_Click(object sender, EventArgs e)
{
this.timer_sleep.Stop();
string[] txtNums ={
lblNum1.Text,
lblNum2.Text,
lblNum3.Text,
lblNum4.Text,
lblNum5.Text,
lblNum6.Text,
lblNum7.Text }; //难点
this.objSelector.selectNum.Add(txtNums);
showList();
this.btn_confirm.Enabled = false;
this.btn_random.Enabled = true;
- Step07:【随机组选】将组数传递到参数方法、显示列表
//随机组选
private void btn_randomGro_Click(object sender, EventArgs e)
{
this.objSelector.selectNumGroup(Convert.ToInt16(this.lblNumGro.Text));
showList();
this.btn_clear.Enabled = true;
this.btn_dele.Enabled = true;
}
- Step08:【清除、清空】获取选中的索引,调用集合项的【RemoveAt】;【Clear】
//删除
private void brn_dele_Click(object sender, EventArgs e)
{
this.objSelector.selectNum.RemoveAt(this.list_num.SelectedIndex); //重点
showList();
}
//清空
private void btn_clear_Click(object sender, EventArgs e)
{
this.list_num.Items.Clear();
this.objSelector.selectNum.Clear(); //重点
btn_clear.Enabled = false;
btn_dele.Enabled = false;
}
- Step09:【扩展】文件的打开保存、实时刷新
#region 【扩展】文件的打开保存、定时器实时刷新
//保存到文件
private void btnSave_Click(object sender, EventArgs e)
{
FileStream fs = new FileStream("NumList.Txt", FileMode.Create); //重点
StreamWriter sw = new StreamWriter(fs);
for (int i = 0; i < this.list_num.Items.Count; i++)
{
sw.WriteLine(this.list_num.Items[i]);
}
sw.Close();
fs.Close();
MessageBox.Show("保存成功", "提示您", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
//打开文件夹
private void btnsaveOpen_Click(object sender, EventArgs e)
{
System.Diagnostics.Process.Start("Explorer.exe",
"J:\\自学视频\\1C#\\喜科堂 郭哥推荐\\练习第二遍\\彩票选号软件\\bin\\Debug\\NumList.Txt");
}
//定时器实时监测数值-初始化开始定时器timer1
private void timer1_Tick(object sender, EventArgs e)
{
if (this.list_num.Items.Count == 0 || this.list_num.SelectedItem == null)
{
this.btn_dele.Enabled = false;
}
else
{
this.btn_dele.Enabled = true;
}
}
#endregion
程序开发思路图(愿与新手讨论学习该小软件的开发流程<有意请留言>):

C#项目—彩票选号的更多相关文章
- c 语言彩票选号
最近刚学了c语言,就做了个彩票选号程序练手玩玩,做的不好请见谅 1.分为前区(1-35)和后区(1-12)号码 2.先循环随机前区号在循环后区号 3.生成随机时数判断是否有重复值,和之前5期是否出现过 ...
- iOS彩票项目--第三天,搭建竞技场和发现,搭建幸运选号和我的彩票界面
一.竞技场搭建--UISegmentedControl的使用 // 重写 自定义控制器的view - (void)loadView { UIImageView *imgView = [[UIImage ...
- Lamda一行代码实现"36选7"随机自动选号
南粤风采36选7是广东的一种彩票玩法.非常简单的从1-36个数字选7个. 今天在同事面前炫耀了一把,只用一行Lamda代码实现随机自动选号 Enumerable.Range(, ).Select(x ...
- Js随机数--网页版的体育彩票选号器
<script> function Quickpick() { var ball for( ball = 0; ball < 5; ball++) { this[ball] = pa ...
- python爬虫练手项目快递单号查询
import requests def main(): try: num = input('请输入快递单号:') url = 'http://www.kuaidi100.com/autonumber/ ...
- Eclipse 项目红色叹号:Build Path Problem
Description Resource Path Location TypeA cycle was detected in the build path of project 'shgl-categ ...
- C# 5 break continue 球员成绩 彩票 选班长
二.新课: 1.break与continue. 这两个关键字一般放在循环的花括号里面使用. break--结束整个循环. continue--结束本次循环,进入下次循环. break的案例: ...
- [Java] 项目红色叹号 案例1则
一般红色叹号是build path出错. 除了检查出错的library外,还要注意Order an Export选项中未勾选的Library. 之前导入项目后,没有勾选JRE和Maven Depend ...
- Myeclipse中导入新项目报叹号
Myeclipse中导入新项目报红色叹号 原因是导入项目中,有的jar路径不对, 在上图中,先把报错的jar移除,之后将JRE开头的那个library移除,最后点击add Library,选择jre. ...
- Maven项目红色叹号+JavaWeb: 报错信息The superclass "javax.servlet.http.HttpServlet" was not found on the Java B
昨天写的关于解决JavaWeb: 报错信息The superclass "javax.servlet.http.HttpServlet" was not found on the ...
随机推荐
- FPGA案例开发手册——基于全志T3+Logos FPGA核心板
前 言 本文档主要提供评估板FPGA端案例测试方法,适用的开发环境为Windows 7 64bit和Windows 10 64bit. 本文案例基于创龙科技的全志T3+Logos FPGA核心板,它是 ...
- 【规范】Git分支管理,看看我司是咋整的
前言 缘由 Git分支管理好,走到哪里都是宝 事情起因: 最近翻看博客中小伙伴评论时,发现文章[规范]看看人家Git提交描述,那叫一个规矩一条回复: 本狗亲测在我司中使用规范的好处,遂把我司的Git分 ...
- VS2015 、VS2017 MFC输出日志到控制台窗口
原来使用VS2010建立的项目,安装VS2017后,发现MFC无法通过调试窗口输出printf打印的内容,在CSDN上找到了一个解决方案,使用后恢复打印调试信息功能,推荐如下: https://blo ...
- css 手稿
CSS 网页的布局和外观的显示样式 没有一张图解决不了的事:https://www.processon.com/mindmap/5e368a8be4b0d27af184e118 选择器 * 通配符选择 ...
- SpringBoot 解决跨域问题
今天遇到一个很神奇的问题,之前写的项目,后端跨域都处理好的,按部就班使用原来的方式,前后端都开发完之后,部署本地后,跨域没起效,一脸懵逼,然后使用公司另外一个同事的跨域解决方案,具体我也没深入研究到底 ...
- Java FastJson解析json字符串
json转map Map<String, 实体类> titleMap=JSON.parseObject(JSON字符串, new TypeReference<HashMap<S ...
- [oeasy]python0078_变量部分总结_variable_summary
删除变量 回忆上次内容 上次研究了变量的死 有生就有死 原本的死是在程序退出的时候自动执行的 也可以手动给变量执行死刑 del del(a)之后 dir()就无法在当前作用域(scope)内观 ...
- [oeasy]python0099_雅达利大崩溃_IBM的开放架构_兼容机_oem
雅达利大崩溃 回忆上次内容 个人计算机浪潮已经来临 苹果公司迅速发展 微软公司脱离mits准备做纯软件公司 IBM用大型机思路制作的5100惨败 Commodore 64 既做计算机 又做游戏机 计算 ...
- Day 10 - 动态规划与树状数组
动态规划基础 主要介绍动态规划的基本思想,以及动态规划中状态及状态转移方程的设计思路,帮助各位初学者对动态规划有一个初步的了解. 引入 [IOI1994] 数字三角形. 给定一个 \(r\) 行的数字 ...
- 格式输出函数printf()详解_C语言
printf函数称为格式输出函数,其关键字最末一个字母f即为"格式"(format)之意.其功能是按用户指定的格式,把指定的数据显示到显示器屏幕上. printf函数调用的一般形式 ...