2.2增加打折

2018-08-26 16:18 更新

商场收银系统v1.1关键代码如下:

double total = 0.0d;
private void btnOk_Click(object sender, EventArgs e){
    double totalPrices = 0d;
    
    //cbxType是一个下拉选择框,分别有“正常收费”、“打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("单价:" + txtPrice.Text + "数量:" + txtNum.Text
        + cbxType.SelectedItem + "合计:" + totalPrices.ToString());
    lblResult.Text = total.ToString();
}

“这下可以了吧,只要我事先把商场可能的打折都做成下拉选择框的项,要变化的可能性就小多了。”小菜说道。

blob.png

“这比刚才灵活性上是好多了,不过重复代码很多,像Convert.ToDouble(),你这里就写了8遍,而且4个分支要执行的语句除了打折多少以外几乎没什么不同,应该考虑重构一下。不过还不是最主要的,现在我的需求又来了,商场的活动加大,需要有满300返100的促销算法,你说怎么办?”

“满300返100,那要是700就要返200了?这个必须要写函数了吧?”

“小菜呀,看来之前教你的白教了,这里面看不出什么名堂吗?” 

“哦!我想起来了,你的意思是简单工厂模式是吧,对的对的,我可以先写一个父类,再继承它实现多个打折和返利的子类,利用多态,完成这个代码。”

“你打算写几个子类?”

“根据需求呀,比如8折、7折、5折、满300送100、满200送50……要几个写几个。”

“小菜又不动脑子了,有必要这样吗?如果我现在要3折,我要满300送80,你难道再去加子类?你不想想看,这当中哪些是相同的,哪些是不同的?”

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号