翼度科技»论坛 编程开发 .net 查看内容

C#项目—彩票选号

5

主题

5

帖子

15

积分

新手上路

Rank: 1

积分
15
C#彩票选号软件

今天做了一个彩票选号的小软件,将学到的知识点总结如下;
1.写程序的思路


  • 实体类(属性、方法)
  • 主程序调用类方法
2.学到的知识点


  • 判断、循环
  • 文件的操作(保存、打开)
  • 集合、数组(增加-AddRange、删除-RemoveAt、排序-Reverse)
  • 关键字:Random(随机数-Next)
  • 定时器的应用(启动、停止、实时刷新)
3.经验技巧


  • 开发控件的属性可以查看界面后的designer中的控件缺省代码并修改应用
4.UI界面


5.代码实现

【实体类】


  • 功能一:定义一个保存选号的成员并【创建对象】
  1. //属性-临时号码(用于存储随机号及数组的)
  2. public List<string[]> selectNum { get; set; }
  3. private Random randomNum = new Random();
  4. //构造方法-创建临时号码对象
  5. public Selector()
  6. {
  7.     this.selectNum = new List<string[]>();
  8. }
复制代码

  • 功能二:生成7个随机数【数组】并将数组返回
  1. //实例方法-随机选7个号
  2. public string[] selectNumArray()
  3. {
  4.      string[] ranNum7 = new string[7];
  5.      for (int i = 0; i < 7; i++)
  6.      {
  7.          ranNum7[i] = this.randomNum.Next(10).ToString();
  8.      }
  9.      return ranNum7;
  10. }
复制代码

  • 功能三:生成n组随机数组无需返回【带参数】
  1. //实例方法-随机选n组号
  2. public void selectNumGroup(int groupNum)
  3. {
  4.     for (int i = 0; i < groupNum; i++)
  5.     {
  6.         selectNum.Add(selectNumArray());
  7.     }
  8. }
复制代码

  • 功能四【遍历】成员变量生成号码表
  1.   //实例方法-号码列表
  2.   public List<string> listNum()
  3.   {
  4.       List<string> listData = new List<string>();
  5.       string listName;
  6.       for (int i = 0; i < this.selectNum.Count; i++)
  7.       {
  8.           if (i < 9) { listName = "第0" + (i + 1) + "组:  "; }
  9.           else {listName = "第" + (i + 1) + "组:  ";}
  10.           for (int j = 0; j < this.selectNum[i].Length; j++)
  11.           {
  12.               if (j == 5) { listName += selectNum[i][j] + "    "; } else
  13.               {listName += selectNum[i][j] + "  ";}
  14.           }
  15.           listData.Add(listName); //重点
  16.       }
  17.       listData.Reverse();  //重点
  18.       return listData;
  19.   }
复制代码
【主函数】


  • Step01【初始化】
  1. //初始化
  2. public FrmMain()
  3. {
  4.     InitializeComponent();
  5.     this.timer_sleep.Stop();
  6.     this.btn_randomGro.Enabled = true;
  7.     this.btn_confirm.Enabled = true;
  8.     this.btn_random.Enabled = true;
  9.     this.btn_clear.Enabled = false;
  10.     this.btn_dele.Enabled = false;
  11.     this.timer1.Start();
  12. }
复制代码

  • Step02【创建类对象】
  1.    //创建类对象
  2.    private Selector objSelector = new Selector();
复制代码

  • Step03【添加列表-AddRange】调用实体类
  1.    //实例方法-列表显示
  2.    public void showList()
  3.    {
  4.        this.list_num.Items.Clear();  //先清空列表,再添加
  5.        this.list_num.Items.AddRange(this.objSelector.listNum().ToArray()); //重点
  6.    }
复制代码

  • Step04【缺省类】关闭、最小化、窗口拖拽
  1. //关闭
  2. private void btnClose_Click(object sender, EventArgs e)
  3. {
  4.     this.Close();
  5. }
  6. //最小化
  7. private void btnMin_Click(object sender, EventArgs e)
  8. {
  9.     this.WindowState = FormWindowState.Minimized;
  10. }
复制代码
窗口拖拽
  1. #region  拖动窗体的实现
  2. private Point mouseOff;//鼠标移动位置变量
  3. private bool leftFlag;//标签是否为左键
  4. private void FrmMain_MouseDown(object sender, MouseEventArgs e)
  5. {
  6.     if (e.Button == MouseButtons.Left)
  7.     {
  8.         mouseOff = new Point(-e.X, -e.Y); //得到变量的值
  9.         leftFlag = true;                  //点击左键按下时标注为true;
  10.     }
  11. }
  12. private void FrmMain_MouseMove(object sender, MouseEventArgs e)
  13. {
  14.     if (leftFlag)
  15.     {
  16.         Point mouseSet = Control.MousePosition;
  17.         mouseSet.Offset(mouseOff.X, mouseOff.Y);  //设置移动后的位置
  18.         Location = mouseSet;
  19.     }
  20. }
  21. private void FrmMain_MouseUp(object sender, MouseEventArgs e)
  22. {
  23.     if (leftFlag)
  24.     {
  25.         leftFlag = false;//释放鼠标后标注为false;
  26.     }
  27. }
  28. //在所需移动的控件事件中选定3方法即可实现
  29. #endregion
复制代码

  • Step05【随机选号】让标签数字滚动,开始定时器即可(使能按钮)
  1. //随机选号
  2. private void btn_random_Click(object sender, EventArgs e)
  3. {
  4.     this.timer_sleep.Start();
  5.     this.btn_random.Enabled = false;
  6.     this.btn_confirm.Enabled = true;
  7. }
复制代码

  • Step06【确认选号】停止滚动、并保存当前数字到成员变量、并显示列表
  1. //确认选号
  2. private void btn_confirm_Click(object sender, EventArgs e)
  3. {
  4.     this.timer_sleep.Stop();
  5.     string[] txtNums ={
  6.         lblNum1.Text,
  7.         lblNum2.Text,
  8.         lblNum3.Text,
  9.         lblNum4.Text,
  10.         lblNum5.Text,
  11.         lblNum6.Text,
  12.         lblNum7.Text };  //难点
  13.     this.objSelector.selectNum.Add(txtNums);
  14.     showList();
  15.     this.btn_confirm.Enabled = false;
  16.     this.btn_random.Enabled = true;
复制代码

  • Step07【随机组选】将组数传递到参数方法、显示列表
  1.   //随机组选
  2.   private void btn_randomGro_Click(object sender, EventArgs e)
  3.   {
  4.       this.objSelector.selectNumGroup(Convert.ToInt16(this.lblNumGro.Text));
  5.       showList();
  6.       this.btn_clear.Enabled = true;
  7.       this.btn_dele.Enabled = true;
  8.   }
复制代码

  • Step08【清除、清空】获取选中的索引,调用集合项的【RemoveAt】;【Clear】
  1. //删除
  2. private void brn_dele_Click(object sender, EventArgs e)
  3. {
  4.     this.objSelector.selectNum.RemoveAt(this.list_num.SelectedIndex); //重点
  5.     showList();
  6. }
  7. //清空
  8. private void btn_clear_Click(object sender, EventArgs e)
  9. {
  10.     this.list_num.Items.Clear();
  11.     this.objSelector.selectNum.Clear();  //重点
  12.     btn_clear.Enabled = false;
  13.     btn_dele.Enabled = false;
  14. }
复制代码

  • Step09【扩展】文件的打开保存、实时刷新
  1. #region 【扩展】文件的打开保存、定时器实时刷新
  2. //保存到文件
  3. private void btnSave_Click(object sender, EventArgs e)
  4. {
  5.     FileStream fs = new FileStream("NumList.Txt", FileMode.Create);  //重点
  6.     StreamWriter sw = new StreamWriter(fs);
  7.     for (int i = 0; i < this.list_num.Items.Count; i++)
  8.     {
  9.         sw.WriteLine(this.list_num.Items[i]);
  10.     }
  11.     sw.Close();
  12.     fs.Close();
  13.     MessageBox.Show("保存成功", "提示您", MessageBoxButtons.OK, MessageBoxIcon.Warning);
  14. }
  15. //打开文件夹
  16. private void btnsaveOpen_Click(object sender, EventArgs e)
  17. {
  18.     System.Diagnostics.Process.Start("Explorer.exe",
  19.         "J:\\自学视频\\1C#\\喜科堂 郭哥推荐\\练习第二遍\\彩票选号软件\\bin\\Debug\\NumList.Txt");
  20. }
  21. //定时器实时监测数值-初始化开始定时器timer1
  22. private void timer1_Tick(object sender, EventArgs e)
  23. {
  24.     if (this.list_num.Items.Count == 0 || this.list_num.SelectedItem == null)
  25.     {
  26.         this.btn_dele.Enabled = false;
  27.     }
  28.     else
  29.     {
  30.         this.btn_dele.Enabled = true;
  31.     }
  32. }
  33. #endregion
复制代码
程序开发逻辑图如下所示:


来源:https://www.cnblogs.com/guoenshuo/p/18348165
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具