Stephen curry 2023-06-14 23:10 采纳率: 0%
浏览 116
已结题

设计并编写面向对象的c++简单应用程序

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

  • 写回答

8条回答 默认 最新

  • Watch the clown 2023-06-14 23:38
    关注
    获得2.50元问题酬金

    。最近都是课题,需要讲解可以留言

    img

    #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;
    }
    
    
    
    
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 6月22日
  • 创建了问题 6月14日