用C#实现一个硬币罐

时间:2012-12-10 18:55:37

标签: c# oop object

我有一个面向对象的通用编程问题。这是来自作业,我已经写了我的答案,但我怀疑教师正在寻找什么。我正在寻找任何关于C#OOP技术用于正确实现该类的任何人的意见和建议。

问题: 用C#实现一个硬币罐。硬币罐只接受美国硬币,体积为32液量盎司。此外,该罐子有一个计数器,用于跟踪收集的总金额,并能够将计数重置为0.00美元

我的代码:

interface ICoinJar
{
    int coinage
    {
        get;
        set;
    }
    void resetcount();
}


static class USCoinTypes
{
 //Might want to make this a static array.
    public static readonly int US_CURRENCY_TYPE = 1;
    public static readonly int CURRENCY_AMOUNT = 0;
    public static readonly int CURRENCY_VOLUME = 1;
    public static readonly int MAX_VOLUME = 32;

    public enum CoinTypes
    {
        ONE_CENT = 0,
        FIVE_CENT,
        TEN_CENT,
        TWENTY_FIVE_CENT
    }

    public static readonly int[,] CoinInfo =
    {
        //amount, volume
        {1,5},
        {5,6},
        {10,3},
        {25,8}
    };

}


class USCoinJar : ICoinJar 
{

    // coinage in cents (NOT $)
    public int coinage { get; set; }
    public int volume { get; set; }

    public USCoinJar()
    {
    }

    //in Cents.
    //Could also make this accept an array for inserting multiple coins.
    public bool addcoins(int amount, int volume,  USCoinTypes.CoinTypes currencytype)
    {
        if (this.volume + volume > USCoinTypes.MAX_VOLUME)
            return false;
        coinage = coinage + amount;
        this.volume = this.volume + volume;
        return true;
    }

    public void resetcount()
    {
        coinage = 0;
        volume = 0;
    }
}

1 个答案:

答案 0 :(得分:3)

您的实施几乎没有问题:

  • 你将造币和卷都暴露为可写,这意味着我可以说coinage = 100000; volumne = 0;并且你的程序会继续,好像什么都没有错。
  • 您要求用户计算音量,不要让您的用户做数学运算
  • 您实际上并不允许用户告诉您足够的信息来计算音量。如果我拨打25美分的附加币,这意味着四分之一,25便士,镍等等。
  • static readonly int的值是什么,以及为什么要将它们作为数组?
  • 命名,除非您的教授另有说法,否则您应该遵循Microsoft提出的naming guidelines

我可以继续,但这足以让你开始正确地了解你的真实要求以及你将如何满足它们。