C++商店管理系统

news2024/9/28 19:22:30

代码中使用了C++11的特性

后面有些输出(cout输出的)的提示文本是英文,因为懒得敲中文

源码在最后面 文末投票参与一下谢谢

商品数据保存在

items.txt

用户数据保存在

users.txt

实现功能

1.添加商品(商品ID,商品名,库存数量,价格)填写完信息后询问是否执行
2.修改商品(先提示原有信息,再修改:商品名,库存数量,价格)填写完信息后询问是否执行
3.删除商品(删除该商品信息)填写完信息后询问是否执行
4.查找商品(按商品ID查询/按商品名查询)
5.创建用户(用户ID,用户名,金钱,密码,电话号码)填写完信息后询问是否执行
6.修改用户(先提示原有信息,再修改:用户名,金钱,密码,电话号码)填写完信息后询问是否执行
7.删除用户(删除某个用户的所有信息)填写完信息后询问是否执行
8.充值/扣款(输入用户ID,询问充值/扣款,并输入金额)填写完信息后询问是否执行
9.显示所有用户
10.显示所有商品
11.购买商品(先列出所有商品,再输入用户ID(用户不存在提示失败),密码(如果密码不对提示失败),购买商品总数,购买商品的ID(根据购买总数输入一个商品ID或一组商品ID)依次询问每一个商品ID买几份,最后计算总金额,如果该用户钱不够则提示“金额不足”,如果钱够询问是否购买,并扣除金额,在商品数据里扣除库存)填写完信息后询问是否执行

数据结构

商品数据结构

ID,名称,库存,价格

struct Item {
    string id;
    string name;
    int stock;
    double price;
};

用户数据结构

ID,用户名,金钱,密码,电话号码

struct User {
    string id;
    string username;
    double money;
    string password;
    string phone;
};

效果图

菜单

显示商品

源代码

编译注意事项

在连接器命令行加入以下命令

-std=c++11

源代码(main.cpp 此处就不分成多个文件了)

#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>
#include <string>
#include <cstring>
#include <algorithm> // For find_if
using namespace std;

struct Item {
    string id;
    string name;
    int stock;
    double price;
};

struct User {
    string id;
    string username;
    double money;
    string password;
    string phone;
};

vector<Item> items;
vector<User> users;

const string itemsFile = "items.txt";
const string usersFile = "users.txt";

void loadItems() {
    ifstream file(itemsFile);
    if (!file) return;
    Item item;
    string line;
    while (getline(file, line)) {
        istringstream ss(line);
        getline(ss, item.id, ',');
        getline(ss, item.name, ',');
        ss >> item.stock;
        ss.ignore();
        ss >> item.price;
        items.push_back(item);
    }
    file.close();
}

void saveItems() {
    ofstream file(itemsFile);
    for (const auto& item : items) {
        file << item.id << ',' << item.name << ',' << item.stock << ',' << item.price << '\n';
    }
    file.close();
}

void loadUsers() {
    ifstream file(usersFile);
    if (!file) return;
    User user;
    string line;
    while (getline(file, line)) {
        istringstream ss(line);
        getline(ss, user.id, ',');
        getline(ss, user.username, ',');
        ss >> user.money;
        ss.ignore();
        getline(ss, user.password, ',');
        getline(ss, user.phone, ',');
        users.push_back(user);
    }
    file.close();
}

void saveUsers() {
    ofstream file(usersFile);
    for (const auto& user : users) {
        file << user.id << ',' << user.username << ',' << user.money << ',' << user.password << ',' << user.phone << '\n';
    }
    file.close();
}

bool isIDUnique(const string& id, const vector<Item>& itemsList) {
    for (const auto& item : itemsList) {
        if (item.id == id) return false;
    }
    return true;
}

bool isIDUnique(const string& id, const vector<User>& usersList) {
    for (const auto& user : usersList) {
        if (user.id == id) return false;
    }
    return true;
}

void addItem() {
    Item item;
    cout << "Enter item ID: ";
    cin >> item.id;
    if (!isIDUnique(item.id, items)) {
        cout << "Item ID already exists.\n";
        return;
    }
    cout << "Enter item name: ";
    cin >> item.name;
    cout << "Enter item stock: ";
    cin >> item.stock;
    cout << "Enter item price: ";
    cin >> item.price;

    cout << "Confirm addition (y/n)? ";
    char confirm;
    cin >> confirm;
    if (confirm == 'y' || confirm == 'Y') {
        items.push_back(item);
        saveItems();
        cout << "Item added successfully.\n";
    } else {
        cout << "Item addition cancelled.\n";
    }
}

void modifyItem() {
    string id;
    cout << "Enter item ID to modify: ";
    cin >> id;

    auto it = find_if(items.begin(), items.end(), [&id](const Item& item) { return item.id == id; });
    if (it == items.end()) {
        cout << "Item not found.\n";
        return;
    }

    Item original = *it;
    cout << "Current item information: \n";
    cout << "ID: " << original.id << "\n";
    cout << "Name: " << original.name << "\n";
    cout << "Stock: " << original.stock << "\n";
    cout << "Price: " << original.price << "\n";

    cout << "Enter new item name: ";
    cin >> it->name;
    cout << "Enter new item stock: ";
    cin >> it->stock;
    cout << "Enter new item price: ";
    cin >> it->price;

    cout << "Confirm modification (y/n)? ";
    char confirm;
    cin >> confirm;
    if (confirm == 'y' || confirm == 'Y') {
        saveItems();
        cout << "Item modified successfully.\n";
    } else {
        cout << "Item modification cancelled.\n";
    }
}

void deleteItem() {
    string id;
    cout << "Enter item ID to delete: ";
    cin >> id;

    auto it = remove_if(items.begin(), items.end(), [&id](const Item& item) { return item.id == id; });
    if (it == items.end()) {
        cout << "Item not found.\n";
        return;
    }

    cout << "Confirm deletion (y/n)? ";
    char confirm;
    cin >> confirm;
    if (confirm == 'y' || confirm == 'Y') {
        items.erase(it, items.end());
        saveItems();
        cout << "Item deleted successfully.\n";
    } else {
        cout << "Item deletion cancelled.\n";
    }
}

void searchItem() {
    int choice;
    cout << "Search by (1) ID or (2) Name: ";
    cin >> choice;

    if (choice == 1) {
        string id;
        cout << "Enter item ID: ";
        cin >> id;
        auto it = find_if(items.begin(), items.end(), [&id](const Item& item) { return item.id == id; });
        if (it == items.end()) {
            cout << "Item not found.\n";
        } else {
            cout << "ID: " << it->id << "\n";
            cout << "Name: " << it->name << "\n";
            cout << "Stock: " << it->stock << "\n";
            cout << "Price: " << it->price << "\n";
        }
    } else if (choice == 2) {
        string name;
        cout << "Enter item name (or part of it): ";
        cin >> name;
        bool found = false;
        for (const auto& item : items) {
            if (strstr(item.name.c_str(), name.c_str())) {
                cout << "ID: " << item.id << "\n";
                cout << "Name: " << item.name << "\n";
                cout << "Stock: " << item.stock << "\n";
                cout << "Price: " << item.price << "\n";
                found = true;
            }
        }
        if (!found) {
            cout << "No items found.\n";
        }
    } else {
        cout << "Invalid choice.\n";
    }
}

void addUser() {
    User user;
    cout << "Enter user ID: ";
    cin >> user.id;
    if (!isIDUnique(user.id, users)) {
        cout << "User ID already exists.\n";
        return;
    }
    cout << "Enter username: ";
    cin >> user.username;
    cout << "Enter money: ";
    cin >> user.money;
    cout << "Enter password: ";
    cin >> user.password;
    cout << "Enter phone number: ";
    cin >> user.phone;

    cout << "Confirm addition (y/n)? ";
    char confirm;
    cin >> confirm;
    if (confirm == 'y' || confirm == 'Y') {
        users.push_back(user);
        saveUsers();
        cout << "User added successfully.\n";
    } else {
        cout << "User addition cancelled.\n";
    }
}

void modifyUser() {
    string id;
    cout << "Enter user ID to modify: ";
    cin >> id;

    auto it = find_if(users.begin(), users.end(), [&id](const User& user) { return user.id == id; });
    if (it == users.end()) {
        cout << "User not found.\n";
        return;
    }

    User original = *it;
    cout << "Current user information: \n";
    cout << "ID: " << original.id << "\n";
    cout << "Username: " << original.username << "\n";
    cout << "Money: " << original.money << "\n";
    cout << "Password: " << original.password << "\n";
    cout << "Phone: " << original.phone << "\n";

    cout << "Enter new username: ";
    cin >> it->username;
    cout << "Enter new money: ";
    cin >> it->money;
    cout << "Enter new password: ";
    cin >> it->password;
    cout << "Enter new phone number: ";
    cin >> it->phone;

    cout << "Confirm modification (y/n)? ";
    char confirm;
    cin >> confirm;
    if (confirm == 'y' || confirm == 'Y') {
        saveUsers();
        cout << "User modified successfully.\n";
    } else {
        cout << "User modification cancelled.\n";
    }
}

void deleteUser() {
    string id;
    cout << "Enter user ID to delete: ";
    cin >> id;

    auto it = remove_if(users.begin(), users.end(), [&id](const User& user) { return user.id == id; });
    if (it == users.end()) {
        cout << "User not found.\n";
        return;
    }

    cout << "Confirm deletion (y/n)? ";
    char confirm;
    cin >> confirm;
    if (confirm == 'y' || confirm == 'Y') {
        users.erase(it, users.end());
        saveUsers();
        cout << "User deleted successfully.\n";
    } else {
        cout << "User deletion cancelled.\n";
    }
}

void rechargeDeduct() {
    string id;
    cout << "Enter user ID: ";
    cin >> id;

    auto it = find_if(users.begin(), users.end(), [&id](const User& user) { return user.id == id; });
    if (it == users.end()) {
        cout << "User not found.\n";
        return;
    }

    cout << "Enter (1) Recharge or (2) Deduct: ";
    int choice;
    cin >> choice;
    double amount;
    cout << "Enter amount: ";
    cin >> amount;

    if (choice == 1) {
        it->money += amount;
    } else if (choice == 2) {
        if (it->money < amount) {
            cout << "马内不够 Insufficient funds.\n";
            return;
        }
        it->money -= amount;
    } else {
        cout << "无效的选择 Invalid choice.\n";
        return;
    }

    cout << "确认交易 (y/n)? ";
    char confirm;
    cin >> confirm;
    if (confirm == 'y' || confirm == 'Y') {
        saveUsers();
        cout << "交易成功 Transaction successful.\n";
    } else {
        cout << "交易已取消 Transaction cancelled.\n";
    }
}

void displayUsers() {
    for (const auto& user : users) {
        cout << "唯一身份 ID: " << user.id << "\n";
        cout << "用户名 Username: " << user.username << "\n";
        cout << "金钱 Money: " << user.money << "\n";
        cout << "手机号 Phone: " << user.phone << "\n";
        cout << "----------------------\n";
    }
}

void displayItems() {
    for (const auto& item : items) {
        cout << "唯一身份 ID: " << item.id << "\n";
        cout << "名称 Name: " << item.name << "\n";
        cout << "库存 Stock: " << item.stock << "\n";
        cout << "价格 Price: " << item.price << "\n";
        cout << "----------------------\n";
    }
}

void purchaseItem() {
    displayItems();

    string userID;
    cout << "输入用户ID Enter user ID: ";
    cin >> userID;

    auto userIt = find_if(users.begin(), users.end(), [&userID](const User& user) { return user.id == userID; });
    if (userIt == users.end()) {
        cout << "用户不存在 User not found.\n";
        return;
    }

    string password;
    cout << "输入密码 Enter password: ";
    cin >> password;
    if (userIt->password != password) {
        cout << "密码问题 Incorrect password.\n";
        return;
    }

    int itemCount;
    cout << "输入要购买的商品类型总数 Enter total number of item types to purchase: ";
    cin >> itemCount;

    vector<Item> purchaseItems;
    double totalAmount = 0.0;

    for (int i = 0; i < itemCount; ++i) {
        string itemID;
        cout << "输入要购买的商品ID Enter item ID to purchase: ";
        cin >> itemID;

        auto itemIt = find_if(items.begin(), items.end(), [&itemID](const Item& item) { return item.id == itemID; });
        if (itemIt == items.end()) {
            cout << "找不到商品 Item not found.\n";
            return;
        }

        int quantity;
        cout << "输入商品的数量 Enter quantity for item " << itemID << ": ";
        cin >> quantity;

        if (itemIt->stock < quantity) {
            cout << "没有足够的库存 Not enough stock for item " << itemID << ".\n";
            return;
        }

        totalAmount += itemIt->price * quantity;
        itemIt->stock -= quantity;
    }

    if (userIt->money < totalAmount) {
        cout << "没钱你买个屁 Insufficient funds.\n";
        return;
    }

    cout << "确认购买总金额 Confirm purchase of total amount " << totalAmount << " (y/n)? ";
    char confirm;
    cin >> confirm;
    if (confirm == 'y' || confirm == 'Y') {
        userIt->money -= totalAmount;
        saveUsers();
        saveItems();
        cout << "购买成功 Purchase successful.\n";
    } else {
        cout << "购买已取消 Purchase cancelled.\n";
    }
}

int main() {
    loadItems();
    loadUsers();

    int choice;
    do {
        cout << "Store Management System\n";
        cout << "1. Add Item              添加商品\n";
        cout << "2. Modify Item           修改商品\n";
        cout << "3. Delete Item           删除商品\n";
        cout << "4. Search Item           搜索商品\n";
        cout << "5. Add User              添加用户\n";
        cout << "6. Modify User           修改用户\n";
        cout << "7. Delete User           删除用户\n";
        cout << "8. Recharge/Deduct Money 充值扣款\n";
        cout << "9. Display Users         显示用户\n";
        cout << "10. Display Items        显示商品\n";
        cout << "11. Purchase Item        购买商品\n";
        cout << "0. Exit                  退出系统\n";
        cout << "输入你的选择 Enter your choice: ";
        cin >> choice;

        switch (choice) {
            case 1: addItem(); break;
            case 2: modifyItem(); break;
            case 3: deleteItem(); break;
            case 4: searchItem(); break;
            case 5: addUser(); break;
            case 6: modifyUser(); break;
            case 7: deleteUser(); break;
            case 8: rechargeDeduct(); break;
            case 9: displayUsers(); break;
            case 10: displayItems(); break;
            case 11: purchaseItem(); break;
            case 0: break;
            default: cout << "无效的选择 请重试 Invalid choice. Try again.\n"; break;
        }
    } while (choice != 0);

    return 0;
}

送一句:

每览博文,心旷神怡。笔力雄健,辞藻华丽。字字珠玑,句句精辟。文采斐然,情理交融。洞察秋毫,独具慧眼。高屋建瓴,立意深远。条分缕析,言简意赅。才思敏捷,匠心独运。学贯中西,通古达今。博古通今,见微知著。旁征博引,信手拈来。引人入胜,发人深省。启人心智,增人见识。文以载道,言为心声。雅俗共赏,老少咸宜。启迪后学,惠泽四方。期许未来,佳作不断。

笔力遒劲,辞藻华美。洞若观火,别具匠心。学富五车,旁征博引。引人入胜,启人心智。期许未来,佳作连连。

人话:

每当阅读博主的文章,总是感到心情舒畅、精神愉悦。博主的文笔有力且优美,语言华丽而富有魅力。每个字都如同珍珠般珍贵,每一句话都精准到位。文章不仅文采出众,而且情感与道理完美结合。博主能够洞察细微之处,拥有独特的见解。文章立意高远,布局巧妙。分析条理清晰,言简意赅。才思敏捷,创作充满创意。学识广博,贯通古今中外。博文既能够追溯历史,又能洞察当下。广泛引用,信手拈来。文章引人入胜,能够激发人们的深刻思考。不仅增长见识,还能启迪智慧。文章既有深度又有广度,适合各种年龄层次的人阅读。博主的文章对于后学者有着重要的启发作用,惠及广大读者。我们期待博主未来能够创作出更多优秀的作品。

笔力非常强劲,语言华丽动人。洞察事物本质,独具创新思维。学识丰富,广泛引用典故。文章引人入胜,能够启迪智慧。期待未来,优秀作品不断。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1980665.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

卓越运营必备神器:规划复杂项目、使用标准的项目模板,看Minitab Workspace!

可确保过程与产品卓越性的可视化工具 您是否知道Minitab Workspace是专门为Minitab统计软件配套而设计的&#xff1f; 您和您的团队或许会面临以下相关问题: 1) 在规划复杂项目上存在困难&#xff0c;如业务优化项目; 2) 因完成工作需要而使用多种未知品牌的产品; 3) 缺乏…

Python 设计模式之抽象工厂模式

文章目录 从一个例子谈起抽象工厂模式的组件构成根据抽象工厂模式实现抽象工厂模式的缺点 抽象工厂模式属于创建型设计模式&#xff0c;一般用来创建复杂的对象&#xff0c;这种对象由许多小对象组成&#xff0c;这些小对象都属于某个特定的类别。 从一个例子谈起 常见的例子是…

springboot企业人力资源管理系统-计算机毕业设计源码29005

目录 摘要 1 绪论 1.1 选题背景与意义 1.2国内外研究现状 1.3论文结构与章节安排 2系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1系统开发流程 2.2.2 用户登录流程 2.2.3 系统操作流程 2.2.4 添加信息流程 2.2.5 修改信息流程 2.2.6 删除信息流程 2.3 系统功能…

【Windows 11 】Missing Customize FOlder OPtion 文件夹右键自定义消失

突然发现win11 无法修改文件夹的默认图标原来是因为没有自定义选项了。微软有人问&#xff0c;大神解决了这个问题 右键缺少的是自定义这个标签 自定义长这样子&#xff1a; HKEY_CLASSES_ROOT\Directory\shellex\PropertySheetHandlers 下已经有了 {ef43ecfe-2ab9-4632-bf21…

uniapp 让同一个子组件重新加载

给子组件添加不同的 “key” 值&#xff0c;当 key 值改变时&#xff0c;Vue 会认为这是一个不同的组件&#xff0c;并重新创建它

C语言——贪吃蛇游戏

用c语言在window环境的控制台中模拟写出贪吃蛇小游戏。 一.要实现的基本的功能 如下&#xff1a; 贪吃蛇的地图绘制 贪吃蛇吃食物的功能&#xff08;方向控制蛇的动作&#xff09; 贪吃蛇撞墙死亡判断 贪吃蛇撞自己死亡判断 计算得分 贪吃蛇的速度 暂停游戏 二 贪吃蛇的铺垫准…

【HTML入门】第二十二课 - 【实战】做一个注册页面

这一小节&#xff0c;我们继续纯HTML标签的使用&#xff0c;这一节我们做一个 注册页面。说到注册页面&#xff0c;其实大家的网站都大同小异&#xff0c;所以我们就不四处去找设计图了&#xff0c;我们自己想一个注册页面&#xff0c;想想注册页面都应该有哪些元素&#xff0c…

探究全局代理是什么?有什么作用?

今天&#xff0c;我们来聊聊一个经常被提及但很多人不太了解的概念——全局代理。那么&#xff0c;全局代理到底是什么&#xff1f;它有什么用&#xff1f;以及如何正确使用呢&#xff1f;接下来&#xff0c;小编就带大家一探究竟&#xff01; 什么是全局代理&#xff1f; 通俗…

360联合国内15个最强大模型推出“AI助手”碾压GPT4o!全球首部《人工智能法案》正式生效!|AI日报

文章推荐 GPT-4o版「Her」终于来了&#xff01;英伟达股价两周内下跌23%&#xff01;&#xff5c;AI日报 Apple Intelligence将在今年10月推出&#xff1f;AI毛绒玩具BubblePal回答人类幼崽十万个为什么&#xff01;&#xff5c;AI日报 今日热点 360放大招&#xff1a;联合…

Rodin来袭,AI建模再填猛将

AI建模&#xff0c;AI绘图&#xff0c;Rodin,人工智能&#xff0c;Stable Diffusion, Stable Diffusion,midjourney,Bing AI等人工智能在绘图界掀起腥风血雨&#xff0c;外界一致认为将取代原画师&#xff0c;但是真正的原画师却感觉良好&#xff0c;他们认为&#xff1a;“AI…

Unable to clear output directory

Bug信息 Exception in thread "main" java.io.IOException: Unable to clear output directory hdfs://xxx/warehouse/hive/xx.db/xxx prior to writing to itat org.apache.spark.sql.execution.datasources.InsertIntoHadoopFsRelationCommand.deleteMatchingPart…

“智绘未来,慧聚南京”2024南京智博会

“智慧城市”一个听起来颇具未来感的词汇&#xff0c;在如今的南京市已逐步成为现实。在5G、物联网、人工智能、大数据等新一代信息技术的支撑下&#xff0c;南京市正逐渐变成一个可感知可“思考”的智能体&#xff0c;智慧社区、智慧医疗、智慧交通、智慧政务等数字化、智能化…

Flink-StarRocks详解:第六部分-即席查询大案例解析(第56天)

系列文章目录 数仓场景&#xff1a;即席查询案例 6.1 场景介绍 6.2 方案架构 6.3 方案特点 6.4 操作流程 6.4.1 步骤一&#xff1a;创建MySQL源数据表 6.4.2 步骤二&#xff1a;创建StarRocks表 6.4.3 步骤三&#xff1a;执行Flink任务&#xff0c;启动数据流 6.4.4 步骤四&am…

gemini2相机和宇树雷达L1的使用注意点

gemini2相机&#xff1a; 官方资料:Gemini2深度相机 (yahboom.com) 目前深度这一块智能提供某一点的深度数据&#xff0c;没有提供某一点的世界坐标&#xff0c;虽然网上有文章说是可以计算 已知深度图&#xff0c;获得某个像素点的三维坐标_深度图如何知道特征点的3d坐标-CS…

Windows系统下安装mujoco环境的教程【原创】

在学习Mujoco仿真的过程中&#xff0c;我先前是在linux系统下进行的研究与学习&#xff0c;今天来试试看在windows系统中安装mujoco仿真环境。 先前在linux中的一些关于mujoco学习记录的博客&#xff1a;Mujoco仿真【xml文件的学习 3】_mujoco打开xml文件-CSDN博客 下面开始wi…

怎么防止电脑上的重要视频被录屏

加密软件防录屏是通过一系列技术手段来防止视频内容在播放过程中被非法录制和传播。 一、视频加密技术 高强度加密算法&#xff1a;使用如AES256位等高强度加密算法对视频内容进行加密&#xff0c;确保视频在传输和存储过程中的安全性。这样&#xff0c;即使视频被录制&#…

黑科技,教你同时在一个电脑上同时开启多个微信

我们右键微信图标选择属性 然后 将这个目标复制下来 然后 我们新建一个文本文件 然后 在记事本中 输入 start 后面跟着微信目标内容 但是需要注意 双引号要换一下位置 换到盘符后面 例如 我的目标是 “D:\Program Files (x86)\Tencent\WeChat\WeChat.exe” 但是 我要输入 st…

第19课 Scratch入门篇:摇骰子

摇骰子 &#x1f3b2; 故事背景&#xff1a; 有一颗神奇的骰子&#xff0c;随机变换不同的样子&#xff0c;让我们一起来设计一款属于自己的骰子&#xff0c;和自己身边的人比比&#xff0c;看看谁的数字大&#xff01; 程序原理&#xff1a; 骰子数字的变化&#xff0c;只要…

javascript 的奇技巧淫一

1 、使用 !! 转换为布尔值 // 使用双重否定快速将任何值转换为布尔值。 let a !!1; // true let b !!0; // false2 、 短 If-Else 的三元运算符\ let price 100; let message price > 200 ? "Expensive" : "Cheap";3、 默认函数参数 // 设置函数…

引领未来:埃隆·马斯克与拉里·佩奇论道企业开放合作的创新之路——张驰咨询

开放式创新是企业在产品研发和商业化活动中&#xff0c;充分整合全社会的智力、资源&#xff0c;以最大限度调动社会各界智力资源&#xff0c;从而实现互利共赢的一种创新模式。它打破了传统封闭式创新的界限&#xff0c;使企业能够像使用内部资源一样借用外部资源进行创新。 …