用dvc++编写程序1、问题描述 超市中商品分为四类,分别是食品、化妆品、日用品和饮料。每种商品都包含商品编号、商品名称、商品类别、价格、库存量和生产厂家、品牌等信息。 2、要求: 1) 添加功能:主要完成商品信息的添加,并对数据进行相应的存储。注意:添加记录时,商品编号不能重,所以相同的商品编号的记录不能添加。 2) 查询功能:可按商品编号、商品名称、商品类别、生产厂家(注意,按商品名称、商品类别、生产厂家都可能会查询到多条记录)进行查询。若存在相应信息,输出所查询的信息,若不存在该记录,则提示“该记录不存在!”。查询结果有多条记录时,可按商品编号进行排序输出。 3) 修改功能:可根据商品编号的查询结果对相应的记录进行修改。 4) 删除功能:主要完成商品信息的删除。输入要删除的商品编号,根据查询结果删除该物品的记录,如果该商品不在物品库中,则提示“该商品不存在”。 5) 文件保存和文件读取功能:能对输入的数据进行相应的文件存储和从文件中读取到内存。 四、设计要求
时间: 2024-02-17 13:05:24 浏览: 125
以下是使用 DVC++ 编写的程序,实现了您所描述的功能:
```c++
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
// 商品信息类
class Commodity {
public:
Commodity(string id, string name, string category, double price, int stock, string manufacturer, string brand) {
this->id = id;
this->name = name;
this->category = category;
this->price = price;
this->stock = stock;
this->manufacturer = manufacturer;
this->brand = brand;
}
// 获取商品编号
string get_id() const {
return id;
}
// 获取商品名称
string get_name() const {
return name;
}
// 获取商品类别
string get_category() const {
return category;
}
// 获取商品价格
double get_price() const {
return price;
}
// 获取商品库存量
int get_stock() const {
return stock;
}
// 获取商品生产厂家
string get_manufacturer() const {
return manufacturer;
}
// 获取商品品牌
string get_brand() const {
return brand;
}
private:
string id; // 商品编号
string name; // 商品名称
string category; // 商品类别
double price; // 商品价格
int stock; // 商品库存量
string manufacturer; // 商品生产厂家
string brand; // 商品品牌
};
// 超市类
class Supermarket {
public:
// 添加商品
void add_commodity(Commodity* commodity) {
if (commodity_map.find(commodity->get_id()) == commodity_map.end()) {
commodity_list.push_back(commodity);
commodity_map[commodity->get_id()] = commodity;
} else {
cout << "商品编号已存在!" << endl;
}
}
// 查询商品
void query_commodity(string query_str) {
vector<Commodity*> query_result;
for (auto it = commodity_map.begin(); it != commodity_map.end(); it++) {
Commodity* commodity = it->second;
if (commodity->get_id() == query_str
|| commodity->get_name() == query_str
|| commodity->get_category() == query_str
|| commodity->get_manufacturer() == query_str) {
query_result.push_back(commodity);
}
}
if (query_result.empty()) {
cout << "该记录不存在!" << endl;
return;
}
sort(query_result.begin(), query_result.end(), [](Commodity* c1, Commodity* c2) { return c1->get_id() < c2->get_id(); });
for (auto it = query_result.begin(); it != query_result.end(); it++) {
Commodity* commodity = *it;
cout << "编号:" << commodity->get_id() << ",名称:" << commodity->get_name() << ",类别:" << commodity->get_category() << ",价格:" << commodity->get_price() << ",库存量:" << commodity->get_stock() << ",生产厂家:" << commodity->get_manufacturer() << ",品牌:" << commodity->get_brand() << endl;
}
}
// 修改商品
void modify_commodity(string id, string name, string category, double price, int stock, string manufacturer, string brand) {
auto it = commodity_map.find(id);
if (it == commodity_map.end()) {
cout << "该商品不存在!" << endl;
return;
}
Commodity* commodity = it->second;
commodity->get_name() = name;
commodity->get_category() = category;
commodity->get_price() = price;
commodity->get_stock() = stock;
commodity->get_manufacturer() = manufacturer;
commodity->get_brand() = brand;
}
// 删除商品
void delete_commodity(string id) {
auto it = commodity_map.find(id);
if (it == commodity_map.end()) {
cout << "该商品不存在!" << endl;
return;
}
commodity_list.erase(remove(commodity_list.begin(), commodity_list.end(), it->second), commodity_list.end());
commodity_map.erase(it);
}
// 从文件中读取商品信息
void load_commodity(string filename) {
ifstream fin(filename);
string line;
while (getline(fin, line)) {
string id, name, category, manufacturer, brand;
double price;
int stock;
sscanf(line.c_str(), "%s %s %s %lf %d %s %s", &id, &name, &category, &price, &stock, &manufacturer, &brand);
add_commodity(new Commodity(id, name, category, price, stock, manufacturer, brand));
}
fin.close();
}
// 将商品信息存储到文件中
void save_commodity(string filename) {
ofstream fout(filename);
for (auto it = commodity_list.begin(); it != commodity_list.end(); it++) {
Commodity* commodity = *it;
fout << commodity->get_id() << " " << commodity->get_name() << " " << commodity->get_category() << " " << commodity->get_price() << " " << commodity->get_stock() << " " << commodity->get_manufacturer() << " " << commodity->get_brand() << endl;
}
fout.close();
}
private:
vector<Commodity*> commodity_list; // 商品列表
unordered_map<string, Commodity*> commodity_map; // 商品编号到商品的映射
};
int main() {
Supermarket supermarket;
// 从文件读取商品信息
supermarket.load_commodity("commodity.txt");
int choice;
do {
// 输出菜单
cout << "请选择操作:" << endl;
cout << "1. 添加商品" << endl;
cout << "2. 查询商品" << endl;
cout << "3. 修改商品" << endl;
cout << "4. 删除商品" << endl;
cout << "5. 保存商品信息" << endl;
cout << "6. 退出程序" << endl;
cin >> choice;
switch (choice) {
case 1: { // 添加商品
string id, name, category, manufacturer, brand;
double price;
int stock;
cout << "请输入商品编号:";
cin >> id;
cout << "请输入商品名称:";
cin >> name;
cout << "请输入商品类别:";
cin >> category;
cout << "请输入商品价格:";
cin >> price;
cout << "请输入商品库存量:";
cin >> stock;
cout << "请输入商品生产厂家:";
cin >> manufacturer;
cout << "请输入商品品牌:";
cin >> brand;
supermarket.add_commodity(new Commodity(id, name, category, price, stock, manufacturer, brand));
break;
}
case 2: { // 查询商品
string query_str;
cout << "请输入查询条件:";
cin >> query_str;
supermarket.query_commodity(query_str);
break;
}
case 3: { // 修改商品
string id, name, category, manufacturer, brand;
double price;
int stock;
cout << "请输入商品编号:";
cin >> id;
cout << "请输入商品名称:";
cin >> name;
cout << "请输入商品类别:";
cin >> category;
cout << "请输入商品价格:";
cin >> price;
cout << "请输入商品库存量:";
cin >> stock;
cout << "请输入商品生产厂家:";
cin >> manufacturer;
cout << "请输入商品品牌:";
cin >> brand;
supermarket.modify_commodity(id, name, category, price, stock, manufacturer, brand);
break;
}
case 4: { // 删除商品
string id;
cout << "请输入商品编号:";
cin >> id;
supermarket.delete_commodity(id);
break;
}
case 5: { // 保存商品信息
supermarket.save_commodity("commodity.txt");
break;
}
}
} while (choice != 6);
return 0;
}
```
注意:这里使用了 C++11 中的 unordered_map,如果需要使用更早版本的 C++,可以改用 map。此外,为了简化代码,这里没有做输入格式验证,实际应用中可以根据需要添加。
阅读全文