Изменить калькулятор с помощью C#

#c# #while-loop

#c# #цикл while

Вопрос:

Я пытаюсь написать программу, которая принимает цену и уплаченную сумму и выводит номиналы изменений. У меня возникли проблемы со следующим.

  • Мне также хотелось бы, чтобы печатались только применимые номиналы изменений (т.е., Если изменение равно 71, показывайте только FithyBills = 1, TwentyBills = 1 и Bills = 1 и игнорируйте остальные). В настоящее время он показывает все с другими записанными как десять счетов = 0 и так далее).

Вот код

 using System;

namespace ChangeCalulator
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Write("Item Price: ");
            int price = Convert.ToInt32(Console.ReadLine());
            Console.Write("Amount Paid: ");
            int paid = Convert.ToInt32(Console.ReadLine());
            while (paid < pice)
            {
                Console.WriteLine("You have paid less than the price");
                Console.Write("Paid: ");
                paid = Convert.ToInt32(Console.ReadLine());

            }
            decimal changeamount = paid - price;

            Change change = new Change(changeamount);
            //This displays the change based on each denominantion
            Console.WriteLine($"Hundred SEK Bills: {change.HundredBills}");
            Console.WriteLine($"Fifty SEK Bills: {change.FiveBills}");
            Console.WriteLine($"Twenty SEK Bills: {change.TwentyBills}");
            Console.WriteLine($"Ten SEK Bills: {change.TenBills}");
            Console.WriteLine($"Five SEK Bills: {change.FiveBills}");
            Console.WriteLine($"One SEK: {change.Bills}");

            Console.ReadKey();
        }
    }
    //The Change class  will create a public integer variable for each denomination and store the values.
    public class Change
    {
        private int changeamount;

        public int HundredBills { get; }
        public int FiftyBills { get; }
        public int TwentyBills { get; }
        public int TenBills { get; }
        public int FiveBills { get; }
        public int Bills { get; }
        //This calculates the number of each denomination the amount equals
        public Change(decimal price)
        {
            HundredBills = (int)(changeamount / 100);
            price %= 100;

            FiftyBills = (int)(changeamount / 50);
            price %= 50;

            TwentyBills = (int)(changeamount / 20);
            price %= 20;

            TenBills = (int)(changeamount / 10);
            price %= 10;

            FiveBills = (int)(changeamount / 5);
            price %= 5;

            Bills = (int)(changeamount / 1);
            price %= 1;
        }
    }
}
 

Любая помощь по этому вопросу очень ценится.

Комментарии:

1. Итак, в чем именно проблемы? Не заставляйте нас гадать или тратить годы, пытаясь понять это. Пожалуйста, объясните, где именно вы застряли. Сделайте так, чтобы людям было проще помогать вам!

2. Можете ли вы объяснить немного больше по вашему 2-му пункту. Это непонятно. Предположим, что счет равен 71, тогда что вы хотите напечатать?

3. Console.WriteLine($"Fifty SEK Bills: {change.FiveBills}"); Должно ли это быть change.FiftyBills ?

4. Я внес изменения и прояснил вопросы. Спасибо вам.

5. Похоже, вам нужно пересчитать changeamount после установки каждой *Bills суммы. И перед вызовом проверьте каждое *Bills свойство на 0 Console.WriteLine . Мой предыдущий комментарий остается…

Ответ №1:

В конструкторе public Change(decimal price) вам нужно использовать price :

 public Change(decimal price)
{
    HundredBills = (int)(price / 100);
    price %= 100;

    FiftyBills = (int)(price / 50);
    price %= 50;

    TwentyBills = (int)(price / 20);
    price %= 20;

    TenBills = (int)(price / 10);
    price %= 10;

    FiveBills = (int)(price / 5);
    price %= 5;

    Bills = (int)(price / 1);
    price %= 1;
}
 

Затем вы можете удалить ненужное changeamount поле.

Рабочая демонстрация: https: //dotnetfiddle.net/NbyZPc

Что касается того, чтобы не печатать значения 0, простая if (theValue > 0) проверка вокруг каждой строки записи должна выполнить это.

Комментарии:

1. Спасибо. Это устранило вторую проблему