改变计算器

时间:2013-02-11 20:20:18

标签: c#

我有一个象牙,我被要求编写一个程序来计算在现金交易后给予客户的变更,并确定每个面额中的纸币和硬币的数量。

用户必须支付商品成本和从客户收到的金额。

我必须有一个类接受十进制参数,Cost和Chashreceived,以及整数参数:Hunderds,Fifties,Twenties,Tens,Fives,Twos,Ones,50c,10c,5c,2c和1c。 / p>

i减去Cost和Cashreceived的成本,并计算退货所需的笔记和硬币的确切数量。

我已经尝试过,但是当我必须放入硬币时会出现问题。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ChangeCalculator
{
class Program
{
    static void Main(string[] args)
    {
        clsCash Money = new clsCash();
        clsCash Paid = new clsCash();
        Console.WriteLine("What is the cost of the goods?");
        Money.Cost = Convert.ToDecimal(Console.ReadLine());
        Console.WriteLine("How much was recived?");
        Paid.CashRecieved = Convert.ToDecimal(Console.ReadLine());
        Money.GetChange(Money.Cost, Paid.CashRecieved);
        Console.Read();
    }
}

class clsCash
{


private decimal cost;
private decimal cashRecieved;
public decimal Cost
{
    get
    {
        return cost;
    }
    set
    {
        cost = value;
    }
}
public decimal CashRecieved
{
    get
    {
        return cashRecieved;
    }
    set
    {
        cashRecieved = value;
    }
}




public void GetChange(decimal Cost, decimal CashRecieved)
{

    decimal change = CashRecieved - Cost;
    int hundreds = 0;
    int fifty = 0;
    int twenty = 0;
    int ten = 0;
    int five = 0;
    int two = 0;
    int one = 0;
    int centsfifty = 0;
    int centsten = 0;
    int centsfive = 0;
    int centstwo = 0;
    int centsone = 0;
    do
   {

    if (change >= 100)
    {
         hundreds = (int)change / 100;
         change = (int)change % 100;
    } //while (change > 0);
    else if (change >= 50)
    {
        fifty = (int)change / 50;
        change = change % 50;
    }
    else if (change >= 20)
    {
        twenty = (int)change / 20;
        change = change % 20;
    }
    else if (change >= 10)
    {
        ten = (int)change / 10;
        change = change % 10;
    }
    else if (change >= 5)
    {
        five = (int)change / 5;
        change = change % 5;
    }
    else if (change >= 2)
    {
        two = (int)change / 2;
        change = change % 2;
    }

    else if (change >= 1)
    {
        one = (int)change / 1;
        change = change % 1;
    }
    else if (change > 1)
    {
        decimal fhu = change / 0.5m;
        centsfifty = (int)fhu;
        change = change % 0.5m;
        Console.WriteLine("YOUR CHANGE IS:");
    }

    } while (change >= 0);


    Console.WriteLine("YOUR CHANGE IS:");
    Console.WriteLine("---------------");
    Console.WriteLine("HUNDREDS RANDS \t:  {0}", hundreds);
    Console.WriteLine("FIFTY RANDS \t:  {0}", fifty);
    Console.WriteLine("TWENTY RANDS \t:  {0}", twenty);
    Console.WriteLine("TEN RANDS \t:  {0}", ten);
    Console.WriteLine("FIVE RANDS \t:  {0}", five);
    Console.WriteLine("TWO RANDS \t:  {0}", two);
    Console.WriteLine("ONE RANDS \t:  {0}", one);
    Console.WriteLine("50 CENTS \t:  {0}", centsfifty);

}
}
}

3 个答案:

答案 0 :(得分:1)

您可以使用一种模式来获取此类金额,

这是一个让你入门的小例子,你可以将它包装在一个函数或其他东西中,但它可以让你知道从哪里开始。

// number to find values from
int change = 254;

int _hundreds = 100;
int _fifty = 50;
int _twenty = 20;
int _ten = 10;
int _five = 5;
int _two = 2;
int _one = 1;

int hundreds = (int)(change / _hundreds);
int fifty = (int)((change % _hundreds) / _fifty);
int twenty = (int)(((change % _hundreds) % _fifty) / _twenty);
int ten = (int)((((change % _hundreds) % _fifty) % _twenty) / _ten);
int five = (int)(((((change % _hundreds) % _fifty) % _twenty) % _ten) / _five);
int two = (int)((((((change % _hundreds) % _fifty) % _twenty) % _ten) % _five) / _two);
int one = (int)(((((((change % _hundreds) % _fifty) % _twenty) % _ten) % _five) % _two) / _one);

返回

hundreds = 2
fifty = 1
twenty = 0
ten = 0
five = 0
two = 2
one = 0;

答案 1 :(得分:1)

帮助简化代码并提高代码可读性的一种方法是消除条件和条件 嵌套算术运算,几乎总是让代码更难理解。

我看到int被抛出太多次了,这可能意味着从一开始就使用int是最好的。尽管您将成本和cashreceived变量声明为十进制类型,但它们都被转换为int。 因此,最好从头开始将它们都声明为int,这将有助于简化转换。

你可能会做这样的事情

hundreds = change / 100;
change %= 100;

fifty = change / 50;
change %= 50;

ten = change / 10;
change %= 10;

five = change / 5;
change %= 5;

two = change / 2;
change %= 2;

one = change;

答案 2 :(得分:0)

而不是

     if (change >= 100)
     {
     hundreds = (int)change / 100;
     change = (int)change % 100;

     }

尝试使用

        if (change >= 100)
        {
            decimal rand = change / 100;
            hundred= (int)rand;
            change = change % 100;
        }


        if (change >= 50)
        {
            decimal rand = (int)change / 50;
            fifty = (int)rand;
            change = change % 50;
        }


        if (change >= 20)
        {
            decimal rand = change / 20;
            twenty = (int)rand;
            change = change % 20;
        }

我希望这会有所帮助。