当前位置: 首页 > article >正文

C#开发实例1—彩票选号

C#开发入门,彩票选号软件,总结如下(适用于新手);

目录

  • 1.写程序的思路
  • 2.学到的知识点
  • 3.经验技巧
  • 4.UI界面
  • 5.代码实现
    • 扩展1.文件的打开保存、实时刷新
    • 扩展2:窗口拖拽
  • 6.总结
  • END


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:\\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;
}
  • 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;
}

扩展1.文件的打开保存、实时刷新

#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:\\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

扩展2:窗口拖拽

#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

6.总结

程序开发思路图:


END


http://www.kler.cn/a/455230.html

相关文章:

  • Spring5.1.3 @Autorwired注解原理重新回顾
  • 【unity c#】深入理解string,以及不同方式构造类与反射的性能测试(基于BenchmarkDotNet)
  • 【Unity3D】ECS入门学习(六)状态组件 ISystemStateComponentData
  • 基于BiTCN双向时间卷积网络实现电力负荷多元时序预测(PyTorch版)
  • http 请求总结get
  • 《迁移学习与联邦学习:推动人工智能发展的关键力量》
  • tryhackme-Cyber Security 101-Networking-Tcpdump: The Basics(tcpdump:基础知识)
  • 【只生一个好 - 单例设计模式(Singleton Pattern)】
  • C++第五六单元测试
  • VUE3+VITE简单的跨域代理配置
  • 详细对比JS中XMLHttpRequest和fetch的使用
  • 【开发问题记录】执行 git cz 报require() of ES Module…… 错误
  • 内置ALC的前置放大器D2538A/D3308
  • 一个服务器可以搭建几个网站?搭建一个网站的流程介绍
  • Rocky DEM tutorial7_Conical Dryer_锥形干燥器
  • Linux | 零基础Ubuntu卸载MySQL Server 零痕迹
  • 支持selenium的chrome driver更新到131.0.6778.204
  • 吴恩达深度学习-第一周作业-题目
  • 结构方程模型【SEM】:非线性、非正态、交互作用及分类变量分析
  • 【人工智能学习】线性回归模型使用Python实现简单的线性回归
  • 我们来学mysql -- 区分大写
  • 王佩丰24节Excel学习笔记——第十八讲:Lookup和数组
  • C++ 的IO流(标准IO流 和文件IO流)
  • css 样式隐形
  • python如何使用RSA加密,避免明文密码
  • Centos7.9自动封禁IP