C++商店管理系统

代码中使用了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.rhkb.cn/news/391905.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分享一个基于人脸识别的小区物业管理系统Spring Boot(源码、调试、LW、开题、PPT)

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人 八年开发经验&#xff0c;擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等&#xff0c;大家有这一块的问题可以一起交流&…

Liunx 小程序之进度条

Liunx 小程序之进度条 效果前提条件回车和换行缓冲区倒计时 进度条纯进度条模拟下载的进度条Progressbar.hProgressbar.cmain.cmakefile 效果 先来看效果&#xff0c;这其实是一个动态的进度条&#xff0c;后有源码&#xff0c;运行即可&#xff1a; 前提条件 在制作之前有两…

数论基础知识(上)

目录 数学符号 整除与约数 最大公约数&#xff08;gcd)和最小公倍数&#xff08;lcm) 质数 (素数) 算术基本定理&#xff08;唯一分解定理&#xff09; 约数个数 约数之和 分解质因数&#xff08;枚举法&#xff09; 试除法求约数&#xff08;枚举法&#xff09; 数学…

RTSP系列四:RTSP Server/Client实战项目

RTSP系列&#xff1a; RTSP系列一&#xff1a;RTSP协议介绍-CSDN博客 RTSP系列二&#xff1a;RTSP协议鉴权-CSDN博客 RTSP系列三&#xff1a;RTP协议介绍-CSDN博客 RTSP系列四&#xff1a;RTSP Server/Client实战项目-CSDN博客 目录 一、RTSP Server实战项目 1、准备 2、…

F4Pan网盘解析获取下载链接的工具系统源码

F4Pan网盘解析获取下载链接的工具系统源码&#xff0c;F4Pan(下称本项目)使用的接口全部来自于官方&#xff0c;无任何破坏接口的行为&#xff0c;本项目所有代码全部开源&#xff0c;仅供学习参考使用&#xff0c;请遵守相关的法律法规&#xff0c;禁止商用&#xff0c;若无视…

java+springboot+mysql校园二手书销售平台设计与实现00895-计算机毕业设计项目选题推荐(附源码)

摘 要 信息化社会内需要与之针对性的信息获取途径&#xff0c;但是途径的扩展基本上为人们所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人们经常能够获得不同类型信息&#xff0c;这也是技术最为难以攻克的课题。针对校园二手书销售平台等问题&#xff0c;对校…

快速体验LLaMA-Factory 私有化部署和高效微调Llama3模型FAQ

序言 之前已经介绍了在超算互联网平台SCNet上使用异构加速卡AI 显存64GB PCIE&#xff0c;私有化部署Llama3模型&#xff0c;并对 Llama3-8B-Instruct 模型进行 LoRA 微调、推理和合并 &#xff0c;详细内容请参考另一篇博客&#xff1a;快速体验LLaMA-Factory 私有化部署和高…

计算机网络基础 - 计算机网络和因特网(2)

计算机网络基础 计算机网络和因特网Internet 结构和 ISP分组延时、丢失和吞吐量四种分组延时分组丢失吞吐量 协议层次及其服务模型概念数据单元&#xff08;DU&#xff09;协议栈TCP/IP 协议各层次的协议数据单元IOS/OSI 参考模型 计算机网络和因特网的历史早期计算机网路&…

自动驾驶的六个级别是什么?

自动驾驶汽车和先进的驾驶辅助系统&#xff08;ADAS&#xff09;预计将帮助拯救全球数百万人的生命&#xff0c;消除拥堵&#xff0c;减少排放&#xff0c;并使我们能够在人而不是汽车周围重建城市。 自动驾驶的世界并不只由一个维度组成。从没有任何自动化到完整的自主体验&a…

偷懒神器:auto 的讲解

1. auto 的定义 在c/c11之前&#xff0c;auto用来修饰局部变量&#xff0c;表明该变量是一个自动变量&#xff0c;函数结束后该变量销毁   c11中&#xff0c;赋予auto全新的含义。其中表示&#xff1a;auto不再是一个存储类型指示符&#xff0c;而是作为一个新的类型指示符来…

熊海1.0cmsPHP代码审计

熊海1.0cmsPHP代码审计 环境搭建 下载之后直接使用phpstduy搭建就好了 工具使用 比如使用seay审计系统 sql大多数是存在的&#xff0c;但是没有文件上传&#xff0c;这个就是需要自己去验证 漏洞审计 SQL注入 有点多&#xff0c;随便拿一个举例子 就比如我们的登录页面…

Ceres Cuda加速

文章目录 一、简介二、准备工作三、实现代码四、实现效果参考资料一、简介 字Ceres2.2.1版本之后,作者针对于稠密矩阵的分解计算等操作进行了Cuda加速,因此这里就基于此项改动测试一下效果。 二、准备工作 1、首先是需要安装Cuda这个英伟达第三方库,https://developer.nvidi…

日企的“目标式招聘”到底什么意思?

看到篇文章称&#xff1a;日企的目标式招聘&#xff0c;高效率招聘。这是什么意思呢&#xff1f;小编今天来跟大家讲一讲。 首先&#xff0c;日企的目标式招聘&#xff0c;其实企业也是迫不得已。一个大型企业的招聘负责人说&#xff1a;“以前我们都是认真地考察每一位应聘者&…

Vue 使用elementUI-plus el-calendar加 公历转农历 是否节假日 等

效果图&#xff1a; 1. 使用到自定文件 calendar.js /*** 1900-2100区间内的公历、农历互转* charset UTF-8* Author Jea杨(JJonlineJJonline.Cn)* Time 2014-7-21* Time 2016-8-13 Fixed 2033hex、Attribution Annals* Time 2016-9-25 Fixed lunar LeapMonth Param…

浏览器事件循环详解

1. 浏览器的进程模型 1.1. 何为进程&#xff1f; 程序运行需要有它自己的专属内存空间&#xff0c;可以把这块内存空间简单的理解为进程。 每个应用至少有一个进程&#xff0c;进程之间相互独立&#xff0c;即使要通信&#xff0c;也需要双方同意。 1.2. 何为线程&#xff1f…

NodeJS的安装【windows】

文章目录 1 安装包下载2 下载过程3 测试 1 安装包下载 Node.js中文网&#xff1a;https://nodejs.cn 2 下载过程 3 测试

【游戏引擎之路】登神长阶(八)——Python之旅行,休息一下,去看看新世界

5月20日-6月4日&#xff1a;攻克2D物理引擎。 6月4日-6月13日&#xff1a;攻克《3D数学基础》。 6月13日-6月20日&#xff1a;攻克《3D图形教程》。 6月21日-6月22日&#xff1a;攻克《Raycasting游戏教程》。 6月23日-7月1日&#xff1a;攻克《Windows游戏编程大师技巧》。 7月…

基于huggingface和langchain快速开发大模型应用

目录 一、HuggingFace. 2 1.1定义... 2 1.2活跃度... 2 1.3 工具集... 2 二、HuggingFace工具介绍... 3 2.1 Pipelines. 3 2.1.1定义... 3 2.1.2常见参数... 3 2.2、AutoClass. 4 2.2.1定义... 4 2.2.2 支持模型架构列表... 4 三、HuggingFace案例介绍... 4 3.1基…

Midjourney小技巧-提升出图质量的常用公式

一个公式让你的Midjourney生成更具韵味的人像身影图 step1-测试&#xff1a;输入提示词 - 一个面容精致的亚洲女性 - An Asian woman with a delicate face 生成的图片还是挺唯美的&#xff0c;就是过于单调&#xff0c;稀疏平常 step2-使用公式&#xff1a; 谁谁&#xff0…

flutter开发环境搭建与android studio 安装配置

flutter开发环境搭建与android studio 安装配置 安装 android studio 下载安装 Android Studio 开发工具 Android Studio官网安装的时看到配置路径就换成自己其他盘的路径即可&#xff0c;其他的一路下一步就ok安装完毕&#xff0c;运行打开缺少 android sdk 按照提示下载即可…