Вычислить промежуточный итог, налог с продаж и общий объем заказа

#c#

#c#

Вопрос:

Хорошо, итак, я уверен, что об этом спрашивали раньше, но, похоже, я не могу найти ничего по этому поводу. Я пытаюсь создать задание для школы. Это меню заказа на обед, в котором вы можете оформить свой заказ. Мы должны рассчитать промежуточный итог, налог с продаж и общий объем заказа. Кажется, я не могу подобрать правильный код для использования, и я не уверен на 100%, что здесь попробовать.

  public partial class Form1 : Form
{

        decimal subtotal = 0m;
    decimal salesTax = 0m;
    decimal orderTotal = 0m; 
public Form1()
    {
        InitializeComponent();
        rdoBurger.Checked = true;
        rdoPizza.Checked = true;
        rdoSalad.Checked = true;

    }

    private void btnExit_Click(object sender, EventArgs e)
    {
        Close();
    }

    private void clearTotals()
    {

    }

    private void btnPlaceOrder_Click(object sender, EventArgs e)
    {
        if (sender is RadioButton)
        {
            clearTotals();
        }
        if (rdoBurger.Checked)
        {

            decimal subtotal = 6.95m;
            subtotal = Convert.ToDecimal(lblSubtotal.Text);
        }
  

Это то, что у меня есть, но это не показывает фактический промежуточный итог, он по-прежнему пуст. Чего я здесь не понимаю?

введите описание изображения здесь

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

1. lblSubtotal. Текст = промежуточный итог. toString();

2. Опубликуйте скриншот вашего интерфейса, чтобы мы могли понять, как вы его настроили. Это имеет значение, потому что имена ваших переменных указывают на то, что вы ~ вероятно ~ использовали RadioButtons, которые могут быть взаимоисключающими в зависимости от того, в какой контейнер (ы) они были помещены. Итак, в зависимости от того, как вы это настроили, вы можете выбрать только один из этих параметров одновременно, или вы можете выбрать несколько элементов…

3. @Idle_Mind ты имеешь в виду графический интерфейс? Я не уверен, что вы подразумеваете под интерфейсом. lblSubtotal — это имя текстового поля.

4. GUI = графический интерфейс пользователя … то есть то же самое, что и просто интерфейс. =)

Ответ №1:

Неплохое начало. Это больше похоже на то, что я ожидал увидеть:

     private void btnPlaceOrder_Click(object sender, EventArgs e)
    {
        // only ONE of these can be checked, so "else if" is used
        if (rdoBurger.Checked)
        {
            subtotal = 6.95m;
        }
        else if (rdoPizza.Checked)
        {
            subtotal = 5.95m;
        }
        else if (rdoSalad.Checked)
        {
            subtotal = 4.95m;
        }

        // multiple of these could be checked, so only "if" is used
        if (checkBox1.Checked)
        {
            subtotal = subtotal   100.00m; // whatever this item costs
        }
        if (checkBox2.Checked)
        {
            subtotal = subtotal   4.99m; // whatever this item costs
        }
        if (checkBox3.Checked)
        {
            subtotal = subtotal   10.99m; // whatever this item costs
        }

        // compute the tax and the total:
        salesTax = subtotal * 0.0775m;
        orderTotal = subtotal   salesTax;

        // output it to your labels/textboxes?
        lblSubtotal.Text = "$"   subtotal.ToString("F2");
        lblSalesTax.Text = "$"   salesTax.ToString("F2");
        lblOrderTotal.Text = "$"   orderTotal.ToString("F2");
    }
  

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

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

2. Просто используйте lblXXX.Text = ""; , чтобы очистить элементы управления. Чтобы снять флажок, используйте checkBox1.Checked = false; .

3. Мне нужно было бы просмотреть ваш обновленный код для проверки, но мой пример включает дополнения в вычисляемый налог с продаж.

4. Если вы хотите, чтобы он обновлялся немедленно при изменении выбора, затем подключите событие CheckedChanged ваших флажков и вызовите btnPlaceOrder.PerformClick(); , чтобы выполнить его пересчет. Вы могли бы сделать то же самое для радиокнопок…

Ответ №2:

У переключателей одновременно может быть выбрана только одна кнопка в контейнере. В этом случае кажется, что GroupBox является контейнером. Если бы у вас было несколько групп переключателей, вы могли бы использовать GroupBox в качестве контейнера и выбрать по одному переключателю в каждом GroupBox. Таким образом, вы не можете установить для всех свойств переключателей, отмеченных флажками, значение true.

В вашем btnPlaceOrder_Click отправителе явно не может быть переключатель. Отправитель — это кнопка, которая была нажата для запуска кода события.

     private void button1_Click(object sender, EventArgs e)
    {
        //Find the radio button that is selected
        RadioButton rButton = groupBox1.Controls.OfType<RadioButton>().FirstOrDefault(r => r.Checked == true);

        switch (rButton.Text)
        {
            case "Hamburger - $6.95":
                subTotal = 6.95m;
                break;
            case "Pizza - $5.95":
                subTotal = 5.95m;
                break;
            case "Salad - $4.95":
                subTotal = 4.95m;
                break;
        }

        //Add code to handle Add-on items
        //For example - The first check box is "Add Onions" - $0.50
        if (checkBox1.Checked)
            subTotal  = .5m;

        lblSubTotal.Text = subTotal.ToString();
        decimal tax = subTotal * .0775m;
        lblTax.Text = tax.ToString();
        decimal total = subTotal   tax;
        lblTotal.Text = total.ToString();
    }