You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++运行时创建并命名对象 实现预算APP动态添加商品条目需求

C++ 预算计算APP动态条目功能实现方案

1. 先修正完善Item类定义

你原有代码存在拼写错误(Public应为小写public),且缺少必要的成员初始化、访问接口,修正后代码如下:

#include <string>
#include <ctime>
class Item
{
private:
    std::string name;
    std::string date;
    int amount;
    float singlePrice;
    float totalPrice;
public:
    // 构造函数:自动生成当前日期,计算总价
    Item(std::string name, int amount, float singlePrice)
        : name(std::move(name)), amount(amount), singlePrice(singlePrice)
    {
        totalPrice = amount * singlePrice;
        // 自动生成yyyy-mm-dd格式日期
        time_t now = time(0);
        char buf[20];
        strftime(buf, sizeof(buf), "%Y-%m-%d", localtime(&now));
        date = buf;
    }
    // 提供访问接口供外部读取数据
    std::string getName() const { return name; }
    std::string getDate() const { return date; }
    int getAmount() const { return amount; }
    float getSinglePrice() const { return singlePrice; }
    float getTotalPrice() const { return totalPrice; }
};

2. 运行时动态创建存储商品条目

不需要所谓「动态命名对象」,直接用C++标准库容器std::vector存储动态生成的Item实例即可,你可以随时通过用户输入添加新条目,不需要提前硬编码任何对象名:

#include <vector>
#include <iostream>

int main()
{
    // 存储所有商品条目的容器
    std::vector<Item> itemList;
    // 初始化总预算,可自定义或者让用户输入
    float totalBudget = 5000.0f;

    // 示例:用户交互添加条目
    while(true) {
        std::cout << "请输入商品名称(输入exit结束添加):";
        std::string name;
        std::cin >> name;
        if(name == "exit") break;

        std::cout << "请输入购买数量:";
        int amount;
        std::cin >> amount;

        std::cout << "请输入商品单价:";
        float price;
        std::cin >> price;

        // 直接在容器尾部创建Item对象,无需提前定义变量名
        itemList.emplace_back(name, amount, price);
        std::cout << "添加成功!\n";
    }

3. 剩余可支配金额计算

遍历容器内所有条目累加总支出,用总预算减去总支出即可得到剩余金额:

// 计算总支出
    float totalSpent = 0.0f;
    for(const auto& item : itemList) {
        totalSpent += item.getTotalPrice();
    }
    float remaining = totalBudget - totalSpent;
    std::cout << "总预算:" << totalBudget << " 元,已支出:" << totalSpent << " 元,剩余可支配:" << remaining << " 元\n";

4. 条目数据持久化到文件

你可以将itemList内的所有数据写入本地文本文件,下次启动APP时可读取恢复:

#include <fstream>

// 保存数据到文件
void saveItems(const std::vector<Item>& items, const std::string& filePath)
{
    std::ofstream out(filePath);
    for(const auto& item : items) {
        out << item.getDate() << "," << item.getName() << "," << item.getAmount() << "," 
            << item.getSinglePrice() << "," << item.getTotalPrice() << "\n";
    }
    out.close();
}

// 从文件加载数据
std::vector<Item> loadItems(const std::string& filePath)
{
    std::vector<Item> res;
    std::ifstream in(filePath);
    if(!in.is_open()) return res;

    std::string line;
    while(std::getline(in, line)) {
        // 按逗号分隔解析字段,解析后调用emplace_back添加到res即可
    }
    in.close();
    return res;
}

内容的提问来源于stack exchange,提问作者user16538261

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 19:24:03