C#專案—彩票選號

郭恩硕發表於2024-08-10

C#彩票選號軟體

今天做了一個彩票選號的小軟體,將學到的知識點總結如下;

1.寫程式的思路

  • 實體類(屬性、方法)
  • 主程式呼叫類方法

2.學到的知識點

  • 判斷、迴圈
  • 檔案的操作(儲存、開啟)
  • 集合、陣列(增加-AddRange、刪除-RemoveAt、排序-Reverse)
  • 關鍵字:Random(隨機數-Next)
  • 定時器的應用(啟動、停止、實時重新整理)

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

程式開發邏輯圖如下所示:


相關文章