-1

私は、現金取引後に顧客に与えられる釣り銭を計算し、各金種の銀行券と硬貨の数を決定するプログラムを書くように頼まれた牙を持っています。

ユーザーは、商品の原価と顧客から受け取った金額を入力する必要があります。

10 進数の引数 Cost と Chashreceived に加えて、100、50、20、10、5、2、1、50c、10c、5c、2c、1c の整数引数を受け入れるメソッドを持つクラスが必要です。

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);

}
}
}
4

3 に答える 3

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;
于 2013-02-11T20:51:12.467 に答える
1

コードを簡素化し、読みやすさを向上させる 1 つの方法は、ほとんどの場合、コードを理解しにくくする条件と入れ子になった算術演算を排除することです。

int が何度もキャストされているようです。これはおそらく、最初から int を使用するのが最善であることを意味します。cost 変数と cashreceived 変数を 10 進数型として宣言しても、両方とも 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;
于 2014-02-16T02:51:41.860 に答える