餐厅计费程序功能
Restaurant Billing Program Function
我需要制作一个餐厅账单计算器程序,允许人们从菜单项列表中进行选择(一个函数),直到他们有了想要点的所有菜,然后在从列表中完成选择后计算总数。然后,它取他们投标的金额,减去总额加上税款和小费来计算变化。
我在这里和其他地方找到了一些想法和类似的项目,但没有什么能让我对如何最终确定这个项目有足够好的想法。我已经对程序进行了编码,但我不知道如何获取运行总数并不断累积,直到用户输入"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 << "nttBaseball Game Snacks" << endl;
cout << "1. Hamburger t$6.00"<< endl;
cout << "2. Hotdog tt$4.50" << endl;
cout << "3. Peanuts tt$3.75" << endl;
cout << "4. Popcorn tt$5.50" << endl;
cout << "5. Soda tt$2.80" << endl;
cout << "6. Chips tt$1.00"<< endl;
cout << "7. Water tt$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;
}
"余额"由showFees
函数计算。因此,您的问题是需要在后续调用中维护showFees
中的状态(一些数据)。最好的方法是使用OOP。当您使用过程范式在C++中编程时,我将向您介绍过程编程中可用的一些解决方案。
- 全局变量
你可以用一个全局变量来保存总数。这是最简单、最直观、最糟糕的解决方案。不要。
- 静态变量
您可以在showFees
中有一个静态变量来存储当前总数。好于全局变量,但仍然糟糕。
- 将总数存储在main中
创建一个表示总数的变量,将其初始化为0,然后创建showFees
的第三个参数,该参数使用指向双精度的指针。这样,对该变量所做的更改将在showFees
函数调用结束后保留。在C++中,您也可以使用引用(这是C++中推荐的方法)。
- 改进您的计划
在编程中有一个概念叫做模块化。使用函数,您不会有重复的代码。但是一个函数应该只做一件事,并且尽可能做到最好。这样,您的功能更小,更易于管理。在showFees
中,您可以做两件事:计算一些财务事项并生成输出。这应该总是分开的。计算或业务逻辑应该在一个函数中完成(可以按照我上面描述的方式工作),输出生成或视觉逻辑应该在另一个函数内完成。
当然,这是一个小程序,我所说的分离可能有些过头了。然而,您可以考虑如何改进您的功能,使其尽可能模块化。
- 在气泡排序程序中未声明错误功能
- 反向功能超出了我的 cpp 程序的范围
- LLVM | codegen 用于带有命令行选项的程序输入功能
- Cuda 基本程序 (将值写入矩阵和 std:cout 不起作用) ;主功能不启动
- 为什么我的显示功能会终止程序?
- 如何获得CMake Tools以在Visual Studio Code中编译具有C++11(或更高版本)功能的程序?
- 如何用共享库替换可执行C++程序的功能?
- 如何在数据库程序中添加"reduce the quantity of an item"功能?
- 如何在控制台应用程序中添加滚动功能以显示更大的输入
- 如何使用键盘的特殊键,如Command、Shift、Alt、Tab或C/C++程序中的功能键
- 使用Qt将应用程序的功能拆分为插件
- 是否有一个Windows驱动程序函数可以执行Windows文件api SeFileAttributes的等效功能
- 具有QList功能的QT应用程序<QString>"append"
- C 程序如果功能中的语句不执行.在逻辑上似乎是错误的
- 如何为带有计时功能的程序创建计时器?
- 如何使功能"run"工作。程序在调用运行时退出
- 为什么这个绕道功能会使程序崩溃
- 为什么功能程序的规律性允许按值传递和按常量引用传递?
- 朋友功能程序未产生主要功能中所需的值
- 在同一功能/程序中使用WebSocket++服务器和客户端