C#實現點餐系統案例

一.編程思想

1.首先考慮需要什麼樣的界面;
2.界面中需要用到的控件,以及控件的簡單設置;
3.在不需要按鈕控件的情況下,點擊會生成按鈕的實現;
4.通過點擊後生成的菜品統計以及價格的自動計算;

二.編程核心

1.獲取控件中的內容;
2.添加按鈕點擊事件;
3.對控件中的內容封裝傳遞後並在下一步取出;
4.label控件和button控件的生成;
5.主要用到了foreach進行遍歷;

三.實現過程

1.界面的設置
本次主要用到的控件有flowLayoutPanel1和label,
flowLayoutPanel:處理其組件的佈局並在流局中自動排列它們; (文本內容可以自行設置)

在這裏插入圖片描述
但是必須對flowLayoutPanel進行邊框設置,否則會不可見
在這裏插入圖片描述

2.控件的簡單設置
tag:與對象關聯的用戶自定義數據,(主要用來獲取控件的文本,tag內的內容可以自己設置,3個都要進行設置)

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述


四.代碼實現部分

1.在窗體加載時完成的操作
在加載時用代碼進行對應菜品編號的獲取並生成對應數字的按鈕,代碼如下:
 private void Form1_Load(object sender, EventArgs e)
        {
            this.Text ="地方點餐系統";
            //爲菜品添加點擊後的按鈕
            //採用foreach循環進行遍歷
            //control:控件類型
            foreach (Control item in flowLayoutPanel1.Controls)//遍歷 flowLayoutPanel1中的控件
            {
                //實例化button
                Button bt = new Button();
                bt.Size = new Size(50,50);//設置按鈕的大小
                bt.Font = new Font("楷體",20f);//設置按鈕中的字體
                bt.Tag = item;//對item進行封裝以便於點擊按鈕事件時可以獲取想要的東西
                //遍歷 flowLayoutPanel中的label對tag進行獲取並生成對應文本的button按鈕
                foreach (Control control in item.Controls)//遍歷flowLayoutPanel1中對應的label控件
                {
                    if (control.Tag.ToString()=="index")
                    {
                        bt.Text =control.Text;//將獲取到的control文本值賦給按鈕bt
                     }
                }
                flowLayoutPanel10.Controls.Add(bt);//向要顯示的flowLayoutPanel中添加對應的按鈕
                bt.Click += Btn_Click;//添加點擊事件
                bt.AutoSize = true;//自動適應內容的大小
            }
          
        }
2.當點擊對應按鈕時應該獲取到的"菜名"
private void Btn_Click(object sender, EventArgs e)
        {
            Button index = (Button)sender;//sender的對象是button
            Control fz = (Control)index.Tag;//對獲取到的tag進行控件類型的轉換
            //實例化label控件
            Label lb = new Label();
            lb.Font = new Font("楷體", 20f);//設置label中的字體
            foreach (Control item in fz.Controls)//對獲取到tag內容的進行遍歷
            {
                if (item.Tag.ToString()=="name")//判斷獲取到的tag是否等於name,也就是菜名
                {
                    lb.Text = item.Text;
                }
                lb.AutoSize = true;//顯示完整的label名稱
                flowLayoutPanel11.Controls.Add(lb);//向要顯示的flowLayoutPanel中添加對應的label
        }
3.對應的菜品價格進行相加
 int count=0;//定義一個變量用於計算最下面的價格相加問題
 if (item.Tag.ToString()=="money")//判斷獲取到的tag是否等於money,也就是價格
                {
                    count += int.Parse(item.Text);
                }
                label27.Text = count + "元";

五.運行結果

在這裏插入圖片描述


六.案例完成難點分析

1.對於生成按鈕點擊事件
//bt爲你前面所實例化按鈕的名稱
 bt.Click += Btn_Click;//添加點擊事件
 bt.Click -= Btn_Click;//取消點擊事件
 Button index = (Button)sender;//sender的對象是button
2.對於tag的封裝再進行獲取
 bt.Tag = item;//對item進行封裝以便於點擊按鈕事件時可以獲取想要的東西
 Control fz = (Control)index.Tag;//對獲取到的tag進行控件類型的轉換

所謂熟能生巧,萬事開頭難,只要堅持不懈多多努力沒有什麼可以阻擋我們前進的步伐!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章