2.2增加打折

2018-08-26 16:18 更新

商場(chǎng)收銀系統(tǒng)v1.1關(guān)鍵代碼如下:

double total = 0.0d;
private void btnOk_Click(object sender, EventArgs e){
    double totalPrices = 0d;
    
    //cbxType是一個(gè)下拉選擇框,分別有“正常收費(fèi)”、“打8折”、“打7折”和“打5折”
    switch(cbxType.SelectedIndex){
        case 0:
            totalPrices = Convert.ToDouble(txtPrice.Text) 
            * Convert.ToDouble(txtNum.Text);
            break;
        case 1:
            totalPrices = Convert.ToDouble(txtPrice.Text) 
            * Convert.ToDouble(txtNum.Text) * 0.8;
            break;
        case 2:
            totalPrices = Convert.ToDouble(txtPrice.Text) 
            * Convert.ToDouble(txtNum.Text) * 0.7;
            break;
        case 3:
            totalPrices = Convert.ToDouble(txtPrice.Text) 
            * Convert.ToDouble(txtNum.Text) * 0.5;
            break;
    }
    total = total + totalPrices;
    lbxList.Items.Add("單價(jià):" + txtPrice.Text + "數(shù)量:" + txtNum.Text
        + cbxType.SelectedItem + "合計(jì):" + totalPrices.ToString());
    lblResult.Text = total.ToString();
}

“這下可以了吧,只要我事先把商場(chǎng)可能的打折都做成下拉選擇框的項(xiàng),要變化的可能性就小多了?!毙〔苏f(shuō)道。

blob.png

“這比剛才靈活性上是好多了,不過(guò)重復(fù)代碼很多,像Convert.ToDouble(),你這里就寫了8遍,而且4個(gè)分支要執(zhí)行的語(yǔ)句除了打折多少以外幾乎沒(méi)什么不同,應(yīng)該考慮重構(gòu)一下。不過(guò)還不是最主要的,現(xiàn)在我的需求又來(lái)了,商場(chǎng)的活動(dòng)加大,需要有滿300返100的促銷算法,你說(shuō)怎么辦?”

“滿300返100,那要是700就要返200了?這個(gè)必須要寫函數(shù)了吧?”

“小菜呀,看來(lái)之前教你的白教了,這里面看不出什么名堂嗎?” 

“哦!我想起來(lái)了,你的意思是簡(jiǎn)單工廠模式是吧,對(duì)的對(duì)的,我可以先寫一個(gè)父類,再繼承它實(shí)現(xiàn)多個(gè)打折和返利的子類,利用多態(tài),完成這個(gè)代碼?!?/p>

“你打算寫幾個(gè)子類?”

“根據(jù)需求呀,比如8折、7折、5折、滿300送100、滿200送50……要幾個(gè)寫幾個(gè)?!?br />

“小菜又不動(dòng)腦子了,有必要這樣嗎?如果我現(xiàn)在要3折,我要滿300送80,你難道再去加子類?你不想想看,這當(dāng)中哪些是相同的,哪些是不同的?”

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)