2016-03-02 3 views
-2

Мне нужна помощь с моей программой на C#. Предполагается спросить, сколько в партии, тогда пользователь вводит свою цену на вход, если они хотят, чтобы напиток добавлял это, а затем берет скидку. Проблема, с которой я сталкиваюсь, заключается в том, что если я делаю больше, чем один в партии, и они получают скидку, это не дает правильных результатов. Вот мой код.Моя программа заказа на C# не вычисляется правильно

class Program 
{ 
    static void Main(string[] args) 
    { 
     int inParty = 0; 
     int discoutSelection = 0; 
     double entreeAmount = 0; 
     int drinkSelection = 0; 
     double drinkPrice = 1.25; 
     double discount = 0; 
     double orderAmount = 0; 
     double tax = 0.07; 
     double taxAmount = 0; 
     double finalTotal = 0; 

     Console.WriteLine("**********Welcome to K&W**********\n\n"); 

     Console.Write("How many are in your part? "); 
     inParty = Convert.ToInt32(Console.ReadLine()); 

     while(inParty > 0) 
     { 
      inParty--; 

      Console.Write("\nEnter your entree amount: $"); 
      entreeAmount = Convert.ToDouble(Console.ReadLine()); 
      Convert.ToDouble(orderAmount += entreeAmount); 

      Console.Write("Do you want a drink, enter 1 for yes or another number for no. "); 
      drinkSelection = Convert.ToInt32(Console.ReadLine()); 
      if (drinkSelection == 1) 
      { 
       Convert.ToDouble(orderAmount += drinkPrice); 
      } 
      else 
      { 
       Console.WriteLine("\tNo drink at this time"); 
      } 

      Console.Write("\nPlease choose a discount, enter 1 for senior, 2 for child or 3 for none: "); 
      discoutSelection = Convert.ToInt32(Console.ReadLine()); 
      if (discoutSelection == 1) 
      { 
       //Convert.ToDouble(discount = 0.10); 
       orderAmount = Convert.ToDouble(orderAmount * 0.90); 

      } 
      if (discoutSelection == 2) 
      { 
       //Convert.ToDouble(discount = 0.20); 
       orderAmount = Convert.ToDouble(orderAmount * 0.80); 

      } 

      finalTotal += Convert.ToDouble(orderAmount); 
      entreeAmount = 0; 
      drinkSelection = 0; 
      discoutSelection = 0; 
      orderAmount = 0; 

     } 

     taxAmount = Convert.ToDouble(orderAmount * tax); 
     finalTotal = Convert.ToDouble(orderAmount + taxAmount); 

     Console.WriteLine("\nYour bill is below:\n"); 
     Console.WriteLine("Your subtotal is\t{0:C}", orderAmount); 
     Console.WriteLine("Tax amount is\t{0:C}", taxAmount); 
     Console.WriteLine("Your final bill is:\t{0:C}", finalTotal); 

     Console.WriteLine("\n\nThank you for your order come again soom!!"); 
    } 
} 

}

+2

Вы должны использовать тип «десятичный» для денежных значений. Это гораздо более точно при выполнении таких расчетов. – ChrisF

+0

Это также поможет, если вы сообщите нам, какие ожидаемые значения и какие значения вы на самом деле получаете. – ChrisF

+4

*** UAFD *** * (Используйте A F ### ing Debugger) * Установите точку останова, выполните свой код, просмотрите переменные. – abelenky

ответ

1

Ваш расчет в конце задачи является неправильным. Вы используете неправильную переменную

double subTotal = finalAmount; 
taxAmount = Convert.ToDouble(finalTotal * tax); 
finalTotal = Convert.ToDouble(finalTotal + taxAmount); 

orderAmount сбрасывается до нуля в конце каждого цикла

Console.WriteLine("\nYour bill is below:\n"); 
Console.WriteLine("Your subtotal is\t{0:C}", subTotal); 
Console.WriteLine("Tax amount is\t{0:C}", taxAmount); 
Console.WriteLine("Your final bill is:\t{0:C}", finalTotal); 

И, наконец, вы должны использовать десятичного типа данных при расчетах с участием значения денег.

+2

Единственное, что я бы добавил к этому, это то, что было бы яснее, если бы были какие-то классы для хранения значений и которые могли бы выполнять свои собственные вычисления. –

+0

Согласен, конечно .... – Steve

+0

Не преподавайте в классах в колледже, и это похоже на классный проект. – Claudius