零食自动售货机可以售出若干种商品,其中,商品属性包括:商品代码、商品名、商品单价、商品总量、商品库存量;售货机中的货币属性包括:货币面值、货币数量;售货机电子账户包括:账号、金额。顾客购买商品可选择两种付款形式:第一种是扫码付款,微信或支付宝扫码模拟均可;第二种是投入面值为1/5/10/20元钱币购买商品,自动售货机吐出商品,并且找给用户零钱,零钱的面值分别为1元、2元和5元。如果商品用完,或者无法找零,则给出用户一个提示:商品已售完,并且退还钱币,为了避免流失顾客,希望你的售货机能够尽可能地给用户找零。为了调查用户的喜好,希望得到各种商品的每日消费数据,并由此来调整货柜中各类货物的存贮量。
要求:编写一个零食自动售货机系统。实现以下功能:
【功能要求】
(1)库存查询:检索当前各种商品的储存量。
(2)销售查询:持有密码的管理员可统计每种商品的销售量和销售额。
(3)货币查询:持有密码的管理员可统计所有不同面值的货币数目及总金额数,并检验货币总金额是否与总销售额一致。
(4)销售界面:顾客选择商品,确认后,扫码付款获得商品或投入钱币获得商品和零钱;或者直接显示错误并退还钱币。
(5)设计友好的界面和菜单:每种功能的操作都是在菜单中进行相应选择。
要求写详细注释
设计并编写面向对象的c++简单应用程序
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
8条回答 默认 最新
Watch the clown 2023-06-14 23:38关注获得2.50元问题酬金 。最近都是课题,需要讲解可以留言

#include <iostream> #include <vector> #include <iomanip> using namespace std; class Commodity { public: int code; string name; double price; int quantity; int salesVolume; double salesRevenue; Commodity(int c, string n, double p, int q, int v = 0, double r = 0.0) { code = c; name = n; price = p; quantity = q; salesVolume = v; salesRevenue = r; } void sellCommodity(int q) { quantity -= q; salesVolume += q; salesRevenue += q * price; } }; class Currency { public: double value; int quantity; Currency(double v, int q) { value = v; quantity = q; } }; class Account { public: int id; double balance; Account(int i = 0, double b = 0.0) { id = i; balance = b; } }; class VendingMachine { public: vector<Commodity> commodities; vector<Currency> currencies; Account account; int password; VendingMachine(vector<Commodity> c, vector<Currency> u, Account a = Account(), int p = 1234) { commodities = c; currencies = u; account = a; password = p; } void displayMenu() { cout << "商品清单:" << endl; for (int i = 0; i < commodities.size(); i++) { cout << commodities[i].code << " " << commodities[i].name << " " << fixed << setprecision(2) << commodities[i].price << "元/个" << endl; } } bool checkCommodity(int code) { for (int i = 0; i < commodities.size(); i++) { if (commodities[i].code == code) { return true; } } return false; } bool checkStock(int code) { for (int i = 0; i < commodities.size(); i++) { if (commodities[i].code == code) { return commodities[i].quantity > 0; } } return false; } void buyCommodity(int code, double money) { for (int i = 0; i < commodities.size(); i++) { if (commodities[i].code == code) { if (money < commodities[i].price) { cout << "金额不足,请重新选择!" << endl; return; } if (commodities[i].quantity == 0) { cout << "商品已售完,请选择其他商品!" << endl; return; } double change = money - commodities[i].price; if (change > 0) { cout << "找零:" << fixed << setprecision(2) << change << "元" << endl; account.balance += commodities[i].price; } else { account.balance += money; } commodities[i].sellCommodity(1); cout << "购买成功!" << endl; return; } } cout << "商品不存在,请重新选择!" << endl; } void displaySales() { int totalVolume = 0; double totalRevenue = 0.0; cout << "销售情况:" << endl; for (int i = 0; i < commodities.size(); i++) { totalVolume += commodities[i].salesVolume; totalRevenue += commodities[i].salesRevenue; cout << commodities[i].name << " 销售量:" << commodities[i].salesVolume << " 销售额:" << fixed << setprecision(2) << commodities[i].salesRevenue << "元" << endl; } cout << "总销售量:" << totalVolume << " 总销售额:" << fixed << setprecision(2) << totalRevenue << "元" << endl; } void displayStock() { cout << "库存情况:" << endl; for (int i = 0; i < commodities.size(); i++) { cout << commodities[i].name << " 剩余数量:" << commodities[i].quantity << endl; } } void displayCurrency() { int totalQuantity = 0; double totalValue = 0.0; cout << "货币情况:" << endl; for (int i = 0; i < currencies.size(); i++) { totalValue += currencies[i].value * currencies[i].quantity; totalQuantity += currencies[i].quantity; cout << currencies[i].value << "元:数量 " << currencies[i].quantity << endl; } cout << "-------------------------" << endl; cout << "总金额数:" << totalValue << "元" << endl; cout << "货币数量:" << totalQuantity << endl; } void displaySalesInterface(int password) { if (password != this->password) { cout << "密码错误!" << endl; return; } displaySales(); displayCurrency(); if (checkTotalRevenue()) { cout << "货币总金额与总销售额一致。" << endl; } else { cout << "货币总金额与总销售额不一致,请检查货币情况!" << endl; } } bool checkTotalRevenue() { double totalRevenue = 0.0; for (int i = 0; i < commodities.size(); i++) { totalRevenue += commodities[i].salesRevenue; } double totalValue = 0.0; for (int i = 0; i < currencies.size(); i++) { totalValue += currencies[i].value * currencies[i].quantity; } return totalRevenue == totalValue; } void displayStockInterface(int password) { if (password != this->password) { cout << "密码错误!" << endl; return; } displayStock(); } }; int main() { Commodity c1(1, "啤酒", 3.5, 10, 10); Commodity c2(2, "玩具", 5.0, 10, 10); Commodity c3(3, "糖果", 8.0, 10, 10); Commodity c4(4, "巧克力吧", 11.0, 20, 10); vector<Commodity> commodities = {c1, c2, c3,c4}; Currency u1(1, 10); Currency u2(2, 10); Currency u3(5, 10); Currency u4(7, 10); vector<Currency> currencies = {u1, u2, u3,u4}; Account account(123456, 0.0); VendingMachine vm(commodities, currencies, account, 1234); vm.displayMenu(); int code; double money; cout << "请输入商品代码:" << endl; cin >> code; if (!vm.checkCommodity(code)) { cout << "商品不存在,请重新选择!" << endl; return 0; } if (!vm.checkStock(code)) { cout << "商品已售完,请选择其他商品!" << endl; return 0; } cout << "请输入金额:" << endl; cin >> money; vm.buyCommodity(code, money); vm.displaySales(); vm.displayStock(); int password; cout << "请输入管理员密码:" << endl; cin >> password; vm.displaySalesInterface(password); cout << "请输入管理员密码:" << endl; cin >> password; vm.displayStockInterface(password); return 0; }评论 打赏 举报 编辑记录解决 2无用