1. 项目背景与真题解析
2023年12月GESP C++七级考试中的"商品交易"题目,是一道典型的算法与数据结构综合应用题。这道题目考察了考生对面向对象编程、容器使用和算法设计的掌握程度,非常具有代表性。
题目要求实现一个商品交易系统,主要功能包括:
- 商品信息的存储与管理
- 交易记录的生成与统计
- 多种查询功能的实现
这类题目在GESP高级别考试中很常见,也反映了当前编程能力认证考试注重实践应用的趋势。下面我将从多个维度详细解析这道真题的解题思路和实现方法。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 题目需求分析
2.1 核心功能需求
题目给出的商品交易系统需要实现以下核心功能:
-
商品管理功能:
- 添加新商品(包含名称、价格、库存等信息)
- 修改商品信息
- 删除商品
-
交易处理功能:
- 记录交易(包含商品、数量、时间等信息)
- 计算交易金额
- 更新库存
-
查询统计功能:
- 按商品名称查询
- 按时间范围查询交易记录
- 统计销售额
2.2 输入输出要求
输入格式通常包括:
- 操作类型(添加、修改、删除、交易、查询等)
- 相关参数(商品信息、交易数量等)
输出格式要求:
- 操作结果反馈
- 查询结果的格式化输出
3. 数据结构设计
3.1 商品类设计
首先需要设计一个商品类(Commodity)来存储商品信息:
cpp复制class Commodity {
private:
string name; // 商品名称
double price; // 单价
int stock; // 库存
public:
// 构造函数
Commodity(string n, double p, int s) : name(n), price(p), stock(s) {}
// Getter和Setter方法
string getName() const { return name; }
double getPrice() const { return price; }
int getStock() const { return stock; }
void setPrice(double p) { price = p; }
void setStock(int s) { stock = s; }
// 其他方法
void increaseStock(int amount) { stock += amount; }
bool decreaseStock(int amount) {
if(stock >= amount) {
stock -= amount;
return true;
}
return false;
}
};
3.2 交易记录类设计
交易记录类(Transaction)用于记录每笔交易的信息:
cpp复制class Transaction {
private:
string commodityName; // 商品名称
int quantity; // 交易数量
double amount; // 交易金额
time_t time; // 交易时间
public:
Transaction(string name, int qty, double amt)
: commodityName(name), quantity(qty), amount(amt) {
time = std::time(nullptr); // 获取当前时间
}
// Getter方法
string getCommodityName() const { return commodityName; }
int getQuantity() const { return quantity; }
double getAmount() const { return amount; }
time_t getTime() const { return time; }
};
3.3 系统管理类设计
商品交易系统类(CommoditySystem)用于管理整个系统:
cpp复制class CommoditySystem {
private:
unordered_map<string, Commodity> commodities; // 商品集合
vector<Transaction> transactions; // 交易记录
public:
// 商品管理方法
bool addCommodity(const string& name, double price, int stock);
bool modifyCommodity(const string& name, double newPrice);
bool removeCommodity(const string& name);
// 交易处理方法
bool makeTransaction(const string& name, int quantity);
// 查询方法
void queryCommodity(const string& name) const;
void queryTransactions(time_t start, ti
