首页 > 其他分享 >周三打卡

周三打卡

时间:2023-04-26 18:25:54浏览次数:32  
标签:return cout int MenuItem 周三 menuItem 打卡 quantity

题目描述:

设计一个能够模拟餐厅点餐流程的程序,需要实现以下功能:

  1. 显示菜单:输出餐厅提供的所有菜品及其价格。
  2. 点餐:输入菜品名称和数量,将菜品添加到订单中。
  3. 修改订单:输入菜品名称和数量,修改订单中已有的菜品的数量。
  4. 删除订单:输入菜品名称,将菜品从订单中删除。
  5. 订单总价:计算订单中所有菜品的总价。

设计思路:

为了实现这个点餐程序,我们需要设计以下几个类:

  1. MenuItem类:用于储存菜品信息,包括菜品名称和价格等属性,以及一些方法,如获取与设置菜品信息。
  2. OrderItem类:用于储存订单项,包括菜品名称、数量和小计等属性,以及一些方法,如计算小计的方法。
  3. Order类:用于储存所有的订单项,包括添加订单项、修改订单项、删除订单项、计算订单总价等方法。
  4. Menu类:用于显示菜单,接收用户输入,并调用相应的Order类中的方法。

程序流程图:

start --> displayMenu --> getUserChoice --> performAction --> end
                        |               |
                        v               v
                     addOrder         modifyOrder
                        |               |
                        v               v
                   deleteOrder       calculateTotal

代码实现:

#include <bits/stdc++.h>
using namespace std;
class MenuItem {
private:
string name;
int price;
public:
MenuItem(string n, int p) : name(n), price(p) {}
string getName() { return name; }
int getPrice() { return price; }
};
class OrderItem {
private:
MenuItem menuItem;
int quantity;
public:
OrderItem(MenuItem mi, int q) : menuItem(mi), quantity(q) {}
MenuItem getMenuItem() { return menuItem; }
int getQuantity() { return quantity; }
void setQuantity(int q) { quantity = q; }
int getSubtotal() { return menuItem.getPrice() * quantity; }
};
class Order {
private:
vector<OrderItem> orderItems;
public:
void addOrder(MenuItem menuItem, int quantity) {
OrderItem orderItem = OrderItem(menuItem, quantity);
orderItems.push_back(orderItem);
}

void modifyOrder(MenuItem menuItem, int quantity) {
for (int i = 0; i < orderItems.size(); i++) {
if (orderItems[i].getMenuItem().getName() == menuItem.getName()) {
orderItems[i].setQuantity(quantity);
break;
}
}
}

void deleteOrder(MenuItem menuItem) {
for (int i = 0; i < orderItems.size(); i++) {
if (orderItems[i].getMenuItem().getName() == menuItem.getName()) {
orderItems.erase(orderItems.begin() + i);
break;
}
}
}

int calculateTotal() {
int total = 0;
for (OrderItem orderItem : orderItems) {
total += orderItem.getSubtotal();
}
return total;
}
};
class Menu {
private:
Order order;
vector<MenuItem> menuItems = {
MenuItem("A", 10),
MenuItem("B", 15),
MenuItem("C", 20),
MenuItem("D", 25)
};
public:
void displayMenu() {
cout << "Menu:" << endl;
for (MenuItem menuItem : menuItems) {
cout << menuItem.getName() << ": $" << menuItem.getPrice() << endl;
}
cout << endl;
}

string getMenuItemName() {
string name;
cout << "Enter the name of the item: ";
getline(cin >> ws, name);
return name;
}

int getQuantity() {
int quantity;
cout << "Enter the quantity of the item: ";
cin >> quantity;
return quantity;
}

int getUserChoice() {
int choice;
cout << "Enter your choice: ";
cin >> choice;
cout << endl;
return choice;
}

void performAction(int choice) {
string menuItemName;
int quantity, total;

switch (choice) {
case 1:
displayMenu();
break;
case 2:
menuItemName = getMenuItemName();
quantity = getQuantity();
for (MenuItem menuItem : menuItems) {
if (menuItem.getName() == menuItemName) {
order.addOrder(menuItem, quantity);
cout << quantity << " " << menuItemName << "(s) have been added to the order." << endl << endl;
return;
}
}
cout << "Invalid item name. Please try again." << endl << endl;
break;
case 3:
menuItemName = getMenuItemName();
quantity = getQuantity();
for (MenuItem menuItem : menuItems) {
if (menuItem.getName() == menuItemName) {
order.modifyOrder(menuItem, quantity);
cout << menuItemName << "(s) quantity has been modified to " << quantity << "." << endl << endl;
return;
}
}
cout << "Invalid item name. Please try again." << endl << endl;
break;
case 4:
menuItemName = getMenuItemName();
for (MenuItem menuItem : menuItems) {
if (menuItem.getName() == menuItemName) {
order.deleteOrder(menuItem);
cout << menuItemName << "(s) have been removed from the order." << endl << endl;
return;
}
}
cout << "Invalid item name. Please try again." << endl << endl;
break;
case 5:
total = order.calculateTotal();
cout << "Total: $" << total << endl << endl;
break;
default:
cout << "Invalid choice. Please try again." << endl << endl;
}
}
};
int main() {
Menu menu = Menu();
int choice;

while (true) {
cout << "1. Display menu" << endl;
cout << "2. Add item to order" << endl;
cout << "3. Modify item in order" << endl;
cout << "4. Delete item from order" << endl;
cout << "5. Calculate order total" << endl;
choice = menu.getUserChoice();
menu.performAction(choice);
}

return 0;
}

标签:return,cout,int,MenuItem,周三,menuItem,打卡,quantity
From: https://www.cnblogs.com/zeyangshuaige/p/17356912.html

相关文章

  • 每日打卡-14
    一.问题描述  请编写一个抽象类Shape,在此基础上派生出类Rectangle和Circle,二者都有计算对象面积的函数getArea()、计算对象周长的函数getPerim()。  在此基础上,通过继承Rectangle得到一个新的类Square,然后在Shape中增加一个函数intgetVertexCount()const用来获得当前......
  • 2023年4月26日周三
    计划完成毕设的修改学习angular框架知道接口怎么回事,尝试或明白一个接口怎么写执行09点43分  看完翻译,开始修改论文15点00分  增加了两个数据库表详情,完成了小芳的要求15点00分  看文档约束再改排版16点01分  改完17点04分  看看angular框架记录问题想......
  • c++打卡第十六天
    一、问题描述。  二、设计思路。①、我们可以写出最终获得利息加本金的公式,即两千乘以利息加上其所存的年限,其中年限可以通过20除以不同的年限求得最大值。②、获取各个年范围后,使用for循环穷举出每种情况所得的最终金额,同时打印出当所获得金额最大时,每个不同的存钱方案是......
  • 打卡4(java)
    importjava.util.Scanner;publicclassMain{publicstaticvoidmain(String[]args){Scannersc=newScanner(System.in);inta=sc.nextInt(),b=sc.nextInt();intc=sc.nextInt(),d=sc.nextInt();intx=a*60+b,y=c*60+d;......
  • 编程打卡:来玩玩Ruby语言吧2.1!
    编程打卡:来玩玩Ruby语言吧2.1!我们前面实现了一个有趣的树类Tree,但它不具有简洁的用户接口,来设置一棵新树,为它写一个初始化方法,接受散列表和数组嵌套的结构。写好之后,你可以这样设置新树:{'grandpa'=>{'dad'=>{'child1'=>{},'child2'=>{}},'uncle'=>{'child3�......
  • 打卡第十二天
    输入一个8位二进制数,将其转换为十进制输出一、1.将二进制数每一位乘以该位的2的次方相加- 二、三、#include<iostream>usingnamespacestd;doublepower(doublex,intn){ doubleq=1.0; while(n--) q*=x; returnq;}intmain(){ intq=0; cout<<"输入数字:"; for(inti......
  • 4.26打卡
    #include<iostream>#include<iomanip>#include<cmath>usingnamespacestd;constdoubleTINY_VALUE=1e-10;doubletsin(doublex){doubleg=0;doublet=x;intn=1;do{g+=t;n++;t=-t*x*x/(2*......
  • 第八天打卡
    #include<iostream>#defineN10usingnamespacestd;intmain(){inta[N],x,i,aa;for(i=0;i<N;i++)scanf("%d",&a[i]);for(i=1;i<=N-1;i++)for(x=0;x<N-i;x++){if(a[x]<a[x+1]){......
  • 打卡9
    特殊a串数列求和给定两个均不超过9的正整数a和n,要求编写程序求a+aa+aaa++⋯+aa⋯a(n个a)之和。输入格式:输入在一行中给出不超过9的正整数a和n。输出格式:在一行中按照“s=对应的和”的格式输出。输入样例:23输出样例:s=246代码:#include<stdio.h>intmain(){inta,n;......
  • 每日打卡输入输出流
    //#include<iostream>//#include<iomanip>//#include<cmath>//usingnamespacestd;//intmain()//{// intd=16;// cout<<hex<<d<<endl;// /*格式输出// 使用控制符控制输出格式// dec设置整数的基数为10// hex设置整数的基数为168// oct设置整数的基数为8......