Функция биллинга в ресторане

Мне нужно создать программу калькулятора счетов в ресторане, которая позволит людям выбирать из списка пунктов меню (функцию), пока у них не будет все, что они хотели заказать, а затем подсчитать общую сумму, когда они закончат выбирать из списка. Затем берется сумма, которую они предлагают, и вычитает общую сумму плюс налог и чаевые для расчета изменений.

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

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

#include <iostream>
#include <iomanip>
using namespace std;

// Function Prototypes
void showMenu();
void showFees(double, int);

int main()
{
int choice; //To Hold Menu Choice
double quantity = 1;//contants for menu choices
const int hamburgerChoice = 1;
const int hotdogChoice = 2;
const int peanutsChoice = 3;
const int popcornChoice = 4;
const int sodaChoice = 5;
const int chipsChoice = 6;
const int waterChoice = 7;
const int endOrderChoice = 8;

//constants for menu prices
const double hamburger = 6.00;
const double hotdog = 4.50;
const double peanuts = 3.75;
const double popcorn = 5.50;
const double soda = 2.80;
const double chips = 1.00;
const double water = 2.00;

//set precision
cout << fixed << showpoint << setprecision(2);

do
{
//display menu and get user choice
showMenu();
cin >> choice;

//validate choice
while (choice < hamburgerChoice || choice > endOrderChoice)
{
cout << "Please enter a valid menu choice: ";
cin >> choice;
}

//if the user does not want to quit proceed
if (choice != endOrderChoice)
{

//display fees
switch (choice)
{
case hamburgerChoice:
showFees(hamburger, quantity);
break;
case hotdogChoice:
showFees(hotdog, quantity);
break;
case peanutsChoice:
showFees(peanuts, quantity);
break;
case popcornChoice:
showFees(popcorn, quantity);
break;
case sodaChoice:
showFees(soda, quantity);
break;
case chipsChoice:
showFees(chips, quantity);
break;
case waterChoice:
showFees(water, quantity);
break;

}
}
}
while (choice != endOrderChoice);
system("pause");
return 0;

}
//*************************************************************
//Definition of function showMenu which displays the menu    **
//*************************************************************

void showMenu()
{
cout << "\n\t\tBaseball Game Snacks" << endl;
cout << "1. Hamburger \t$6.00"<< endl;
cout << "2. Hotdog \t\t$4.50" << endl;
cout << "3. Peanuts \t\t$3.75" << endl;
cout << "4. Popcorn \t\t$5.50" << endl;
cout << "5. Soda \t\t$2.80" << endl;
cout << "6. Chips \t\t$1.00"<< endl;
cout << "7. Water \t\t$2.00" << endl;
cout << "8. END ORDER" << endl;
cout << "Please enter your menu choice: ";
}

//************************************************************
//Definition of function showFees which caculates the total **
//bill                                                      **
//************************************************************

void showFees(double itemCost, int quantity)
{
double amtTendered;
double totalBill = (itemCost * quantity);
double taxRate = .065;
double tipRate = .20;
double tip = (totalBill * tipRate);
double tax = (totalBill * taxRate);
double amountDue = (totalBill + tax + tip);
cout << "Total Bill: $" << totalBill << endl;
cout << "Tax: $" << tax << endl;
cout << "Tip: $" << tip << endl;
cout << "Total Amount Due: $" << amountDue << endl;
cout << "Enter ammount tendered: $";
cin >> amtTendered;
double changeDue = amtTendered - amountDue;
cout << "Change Due: $" << changeDue << endl;

}

-5

Решение

«Баланс» рассчитывается по showFees функция. Итак, ваша проблема в том, что вам нужно поддерживать состояние (некоторые данные) в showFees в последующих звонках. Лучший способ сделать это — использовать ООП. Пока вы программируете на C ++ с использованием процедурной парадигмы, я укажу вам некоторые решения, доступные в процедурном программировании.

  1. Глобальные переменные

Вы можете иметь глобальную переменную для хранения суммы. Это самый простой, самый интуитивный и наихудший Решение, которое вы могли бы иметь. Не.

  1. Статические переменные

Вы можете иметь статическую переменную в showFees который хранит текущую сумму. Лучше, чем глобальная переменная, но все же плохой.

  1. Хранить сумму в основном

Создайте переменную, которая представляет сумму, инициализируйте ее 0 и создайте третий аргумент showFees это берет указатель на двойной. Таким образом, изменения, внесенные в эту переменную, останутся после showFees вызов функции заканчивается. В C ++ вы также можете использовать ссылки (это рекомендуемый способ в C ++).

  1. Улучшить вашу программу

В программировании есть концепция модульности. Используя функции, у вас нет дублирующего кода. Но функция должна делать только одно, и делать это как можно лучше. Таким образом, ваши функции становятся меньше и проще в управлении. В showFees Вы делаете 2 вещи: вычисляете некоторые финансовые вещи и генерируете продукцию. Это всегда должно быть отделено. Расчеты или бизнес логика, должно быть сделано в функции (которая может работать так, как я описал выше), а генерация вывода или визуальная логика — в другой функции.

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

2

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector