2012-01-07 2 views
2

Я пытаюсь создать небольшую форму заказа на пиццу, но у меня проблема с расчетами. После выбора пиццы цена за единицу и общие расчеты в порядке, но выбор дополнений представляет проблему. После изменения значения NumericUpDown калории неправильны (все единицы имеют постоянные цены и калории). Имя NumericUpDown - numberofunit. Как я могу рассчитать их?Как вычислить значения текстовых полей с помощью NumericUpDown?

if (pepper.Checked) 
{ 
    string peppereklendi = 
     Convert.ToString(Convert.ToDouble(unitprice.Text)+ pepperprice); 

    unitprice.Text = peppereklendi; 

    total.Text = 
     Convert.ToString(Convert.ToDecimal(unitprice.Text) * numberofunit.Value); 

    string pepperkaloriekle = 
     Convert.ToString(Convert.ToInt16(gizlikalori.Text) + pepperkalori); 

    gizlikalori.Text = pepperkaloriekle; 

    amountofcalorie.Text = 
     Convert.ToString(Convert.ToDecimal(gizlikalori.Text) * numberofunit.Value); 
} 
else 
{ 
    string peppereklendi = unitprice.Text; 

    unitprice.Text = 
     Convert.ToString(Convert.ToDouble(peppereklendi) - pepperprice); 

    total.Text = Convert.ToString(Convert.ToDecimal(unitprice.Text) * numberofunit.Value); 

    string pepperkaloriekle = gizlikalori.Text; 

    gizlikalori.Text = 
     Convert.ToString(Convert.ToDouble(pepperkaloriekle) - pepperkalori); 

    amountofcalorie.Text = 
     Convert.ToString(Convert.ToDecimal(gizlikalori.Text) * numberofunit.Value); 
} 

Этот код является перечнем кода.

This is the form of my application.

+1

Это домашнее задание? –

+0

@MikeW да домашнее задание о вычислениях в пиццерии, я довольно новичок в C# –

+0

@ user1136403 В будущем, пожалуйста, задайте домашнее задание с помощью 'homework'. Это дает понять, что вы спрашиваете и почему. Спасибо – Basic

ответ

6

Вы должны действительно попытаться отделить логику вычисления от логики пользовательского интерфейса (формы). Тогда все станет намного яснее:

// Get values from the text boxes 
decimal up = Convert.ToDecimal(unitprice.Text); 
decimal calories = Convert.ToDecimal(gizlikalori.Text); 
decimal tot, totCalories; 

// Do the calculation 
if (pepper.Checked) { 
    up = up + pepperprice; 
    calories = calories + pepperkalori; 
} 
tot = up * numberofunit.Value; 
totCalories = calories * numberofunit.Value; 

// Assign the results to text boxes 
unitprice.Text = up.ToString(); 
total.Text = tot.ToString(); 
gizlikalori.Text = calories.ToString(); 
amountofcalorie.Text = totCalories.ToString(); 

Что вы делаете неправильно, что вы вычесть цену перец и перец калорий от цены единицы и единицы калорий, если не выбран перец. Тем не менее, цена единицы (и калорий) уже без перца!

Я не вижу, когда вы выполняете этот расчет, однако, если вы выполняете его каждый раз, когда вы увеличиваете количество единиц, то вы каждый раз добавляете цену перца! Было бы лучше иметь отдельную переменную для базовой цены единицы, которая остается неизменной при проверке дополнений. Затем всегда начинайте расчет с базовой цены.

Кроме того, вы смешиваете множество разных типов номеров. Это не имеет никакого смысла.

Следующим шагом, чтобы еще больше улучшить код, было бы создание отдельного класса для вычислений. Вы также можете использовать привязку данных. Это полностью устранит необходимость совершения конверсий. См. Мой ответ на следующий пост : manipulating-textbox-variables-in-calculations

+0

спасибо, что я попробовал сейчас –

+1

Пожалуйста, отметьте ответ Оливье как принятый, если он сработает для вас. –

+0

@GarryVass Я думаю, что он все еще находится в таймауте для новых пользователей, принимающих ответы. – Basic

Смежные вопросы