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
程式開發邏輯圖如下所示: