用c++写一段关于仓库管理系统的代码,要求:仓库中货物信息包括:货物编号、货物名称、货物单价、货物数量等。 功能要求: 1) 增加和删除货物信息 2) 按编号或名称查询货物信息 3) 显示库存量不足一定值(由用户输入)的货物信息 4) 显示所有货物的信息 5) 对所有货物信息读写文

时间: 2024-03-26 14:38:07 浏览: 153
好的,以下是一份 C++ 代码,实现了基本的仓库管理系统功能,可以满足您的需求。注意,该代码只是一个简单的示例,并未进行完整的测试和优化,请谨慎使用。 ```cpp #include <iostream> #include <fstream> #include <vector> #include <string> using namespace std; // 声明货物类 class Goods { public: Goods(string id, string name, double price, int quantity) { m_id = id; m_name = name; m_price = price; m_quantity = quantity; } string get_id() { return m_id; } string get_name() { return m_name; } double get_price() { return m_price; } int get_quantity() { return m_quantity; } void set_id(string id) { m_id = id; } void set_name(string name) { m_name = name; } void set_price(double price) { m_price = price; } void set_quantity(int quantity) { m_quantity = quantity; } private: string m_id; string m_name; double m_price; int m_quantity; }; // 声明仓库类 class Warehouse { public: Warehouse() { // 从文件中读取货物信息 ifstream infile("goods.txt"); string id, name; double price; int quantity; while (infile >> id >> name >> price >> quantity) { Goods goods(id, name, price, quantity); m_goods.push_back(goods); } infile.close(); } // 添加货物 void add_goods(Goods goods) { m_goods.push_back(goods); } // 删除货物 void delete_goods(string id) { for (vector<Goods>::iterator it = m_goods.begin(); it != m_goods.end(); it++) { if (it->get_id() == id) { m_goods.erase(it); break; } } } // 按编号查询货物 Goods* search_goods_by_id(string id) { for (vector<Goods>::iterator it = m_goods.begin(); it != m_goods.end(); it++) { if (it->get_id() == id) { return &(*it); } } return NULL; } // 按名称查询货物 vector<Goods*> search_goods_by_name(string name) { vector<Goods*> result; for (vector<Goods>::iterator it = m_goods.begin(); it != m_goods.end(); it++) { if (it->get_name() == name) { result.push_back(&(*it)); } } return result; } // 显示库存量不足一定值的货物信息 vector<Goods*> show_low_quantity_goods(int quantity) { vector<Goods*> result; for (vector<Goods>::iterator it = m_goods.begin(); it != m_goods.end(); it++) { if (it->get_quantity() < quantity) { result.push_back(&(*it)); } } return result; } // 显示所有货物信息 void show_all_goods() { for (vector<Goods>::iterator it = m_goods.begin(); it != m_goods.end(); it++) { cout << it->get_id() << " " << it->get_name() << " " << it->get_price() << " " << it->get_quantity() << endl; } } // 保存货物信息到文件 void save_to_file() { ofstream outfile("goods.txt"); for (vector<Goods>::iterator it = m_goods.begin(); it != m_goods.end(); it++) { outfile << it->get_id() << " " << it->get_name() << " " << it->get_price() << " " << it->get_quantity() << endl; } outfile.close(); } private: vector<Goods> m_goods; }; // 主函数 int main() { Warehouse warehouse; int choice; while (true) { cout << "1.添加货物 2.删除货物 3.按编号查询货物 4.按名称查询货物 5.显示库存量不足的货物 6.显示所有货物 7.保存货物信息到文件 8.退出" << endl; cout << "请选择操作:"; cin >> choice; switch (choice) { case 1: { string id, name; double price; int quantity; cout << "请输入货物编号:"; cin >> id; cout << "请输入货物名称:"; cin >> name; cout << "请输入货物单价:"; cin >> price; cout << "请输入货物数量:"; cin >> quantity; Goods goods(id, name, price, quantity); warehouse.add_goods(goods); cout << "货物添加成功!" << endl; break; } case 2: { string id; cout << "请输入货物编号:"; cin >> id; warehouse.delete_goods(id); cout << "货物删除成功!" << endl; break; } case 3: { string id; cout << "请输入货物编号:"; cin >> id; Goods* goods = warehouse.search_goods_by_id(id); if (goods == NULL) { cout << "找不到指定编号的货物!" << endl; } else { cout << goods->get_id() << " " << goods->get_name() << " " << goods->get_price() << " " << goods->get_quantity() << endl; } break; } case 4: { string name; cout << "请输入货物名称:"; cin >> name; vector<Goods*> result = warehouse.search_goods_by_name(name); if (result.size() == 0) { cout << "找不到指定名称的货物!" << endl; } else { for (vector<Goods*>::iterator it = result.begin(); it != result.end(); it++) { cout << (*it)->get_id() << " " << (*it)->get_name() << " " << (*it)->get_price() << " " << (*it)->get_quantity() << endl; } } break; } case 5: { int quantity; cout << "请输入库存量不足的货物数量:"; cin >> quantity; vector<Goods*> result = warehouse.show_low_quantity_goods(quantity); if (result.size() == 0) { cout << "没有库存量不足的货物!" << endl; } else { for (vector<Goods*>::iterator it = result.begin(); it != result.end(); it++) { cout << (*it)->get_id() << " " << (*it)->get_name() << " " << (*it)->get_price() << " " << (*it)->get_quantity() << endl; } } break; } case 6: { warehouse.show_all_goods(); break; } case 7: { warehouse.save_to_file(); cout << "货物信息保存成功!" << endl; break; } case 8: { return 0; } default: { cout << "无效的操作!" << endl; break; } } } return 0; } ``` 该代码实现了仓库管理系统的基本功能,包括添加货物、删除货物、按编号或名称查询货物、显示库存量不足一定值的货物信息、显示所有货物信息、对所有货物信息进行读写等操作。
阅读全文

大家在看

recommend-type

Cadence Allegro16.6高级进阶教程

Cadence Allegro16.6高级进阶教程主要是关于PCB layout设计的应用教程。
recommend-type

Romax学习资料-DC1模块-载荷谱处理

Romax学习资料-DC1模块_载荷谱处理
recommend-type

改进的Socket编程—客户端主要流程-利用OpenssL的C/S安全通信 程序设计

改进的Socket编程—客户端主要流程
recommend-type

考研计算机408历年真题及答案pdf汇总来了 计算机考研 计算机408考研 计算机历年真题+解析09-23年

408计算机学科专业基础综合考研历年真题试卷与参考答案 真的很全!2009-2023计算机408历年真题及答案解析汇总(pdf 2009-2023计算机考研408历年真题pdf电子版及解析 2023考研408计算机真题全解 专业408历年算题大全(2009~2023年) 考研计算机408历年真题及答案pdf汇总来了 计算机考研 计算机408考研 计算机历年真题+解析09-23年 408计算机学科专业基础综合考研历年真题试卷与参考答案 真的很全!2009-2023计算机408历年真题及答案解析汇总(pdf 2009-2023计算机考研408历年真题pdf电子版及解析 2023考研408计算机真题全解 专业408历年算题大全(2009~2023年) 考研计算机408历年真题及答案pdf汇总来了 计算机考研 计算机408考研 计算机历年真题+解析09-23年 408计算机学科专业基础综合考研历年真题试卷与参考答案 真的很全!2009-2023计算机408历年真题及答案解析汇总(pdf 2009-2023计算机考研408历年真题pdf电子版及解析 2023考研408计算机真题全解 专业4
recommend-type

从MELSEC-L系列向MELSEC iQ-L系列转换指南

从MELSEC-L系列向MELSEC iQ-L系列转换指南 适合自动化工程技术人员

最新推荐

recommend-type

C++ 中boost::share_ptr智能指针的使用方法

Boost 库的智能指针是 C++ 编程中的一种重要工具,它能够自动管理内存的释放,减少了程序员的负担。其中,boost::shared_ptr 是一种常用的智能指针,它能够使 C++ 的开发简单化。本文将详细介绍 boost::shared_ptr ...
recommend-type

数据结构 课程设计 商店货物管理系统

数据结构课程设计的目标是让学生将理论知识付诸实践,通过设计和实现商店货物管理系统来加深对数据结构的理解。在这个系统中,重点在于如何有效地存储和处理货物信息,以及如何实现货物的增删改查功能。这涉及到数据...
recommend-type

汽车租赁信息管理系统源代码 c++.docx

《汽车租赁信息管理系统源代码分析》 汽车租赁信息管理系统是一款基于C++编程语言设计的应用软件,主要用于汽车租赁公司的车辆管理。系统具备丰富的功能,包括车辆租赁、车辆信息添加、信息修改、信息显示、信息...
recommend-type

学籍管理系统源代码 c++.docx

在这个“学籍管理系统源代码”中,我们主要涉及到C++编程语言和面向对象编程的概念。系统设计了一个学生类(Student)和一个学籍管理类(StudentManagement),用于实现学校对学生信息的管理。以下是相关的知识点: ...
recommend-type

C++ boost::asio编程-异步TCP详解及实例代码

在C++编程中,Boost.Asio库是一个强大的网络编程工具,尤其适用于实现高效的异步TCP通信。本文将深入探讨Boost.Asio库中的异步TCP编程,并提供一个简单的异步TCP服务器的实例代码。 首先,理解异步TCP编程的核心...
recommend-type

Next.js入门指南及部署教程 - FarringCV

标题《FarringCV》和描述中所提到的知识点涉及前端开发、特别是React框架下的Next.js框架的使用。以下是详细的知识点梳理: 1. **Next.js框架概述**:Next.js 是一个用于React应用程序的开源开发框架,它支持服务器端渲染(SSR)和静态站点生成(SSG),使开发者能够构建服务器渲染的Web应用程序和静态网站,提供了一种快速、安全且可扩展的方式来构建服务器端渲染(SSR)的React应用程序。Next.js在Web开发中常用于提高应用性能和搜索引擎优化(SEO)效果。 2. **项目初始化与开发服务器运行**:描述中提到的“这是一个用引导的项目”,说明了这是一个通过某种初始化引导方式创建的项目。开发者被指导首先通过运行开发服务器来启动项目,可以使用`npm run dev`或者`yarn dev`命令。这一过程表明项目使用npm或yarn作为包管理工具。 3. **页面编辑与自动更新**:描述中提到修改`pages/index.js`文件可以实时预览页面效果,这说明Next.js支持热模块替换(Hot Module Replacement, HMR),它可以在不完全重新加载页面的情况下替换、添加或删除模块,从而提高开发效率。 4. **Next.js的API路由**:Next.js 提供了一个API路由功能,允许开发者在`pages/api`目录下创建API端点。该目录下的文件会被映射到`/api/*`路由,这意味着`pages/api/hello.js`文件定义了一个名为`/api/hello`的API端点,可以处理HTTP请求。 5. **了解Next.js的资源**:描述中推荐了多种学习Next.js的资源,包括了解Next.js的功能和API、交互式教程等,这些资源可以帮助开发者更好地掌握Next.js的高级特性和使用方法。 6. **Vercel部署**:Vercel 是一个云平台,专为Next.js应用程序提供支持,并且可以简化部署过程。描述中提到的“在Vercel上部署”说明了Next.js与Vercel的紧密集成,利用Vercel提供的功能可以轻松地部署Next.js应用。 7. **标签JavaScript**:Next.js是基于JavaScript的,因此在开发过程中使用的语言主要是JavaScript。此外,Next.js还支持TypeScript,它为JavaScript提供了可选的静态类型检查。 8. **压缩包子文件的文件名称列表**:“FarringCV-main”可能是项目源代码文件夹的名称,它指示了在该目录下可以找到所有的项目代码。 综上所述,本文档涵盖了Next.js的基本使用、项目开发流程、路由系统、部署以及学习资源等知识点。针对Next.js的深入理解可以借助上述资源以及对Next.js官方文档的研究,这对于前端开发工程师来说是一个非常实用的框架,尤其适合构建性能优秀、SEO友好的现代Web应用。
recommend-type

Flutter进阶实战技巧:核心要点深入解析,打造专业开发者秘籍

# 摘要 本文全面探讨了Flutter框架的核心概念、进阶组件与布局技巧、性能优化、跨平台开发能力以及未来的发展趋势。通过对Flutter的深入分析,详细阐述了高级布局组件的应用、状态管理方案、界面效果与交互动画的实现。同时,文章强调了性能监控工具的使用、代码优化实践和测试策略,以及如何通过使用平台通道和插件进行有效的跨平台开发。本文还包含多个实战案例分析,展示了如何构建高效响应式U
recommend-type

帮我写一个测试新软件的c语言代码

当然可以。以下是一个简单的C语言代码示例,用于测试新语言的语法和功能。这个示例程序将演示基本的输入输出操作、变量声明、条件语句、循环和函数调用。 ```c #include <stdio.h> // 函数声明 int add(int a, int b); int main() { // 变量声明 int num1, num2, sum; // 输入两个整数 printf("请输入第一个整数: "); scanf("%d", &num1); printf("请输入第二个整数: "); scanf("%d", &num2);
recommend-type

LeetCode-GO算法题解与数据结构掌握要点

【知识点详细解析】 1. LeetCode简介与使用 LeetCode是一个面向计算机科学和软件工程的在线编程平台,它提供了一系列编程题目供用户练习,同时支持多种编程语言,包括但不限于C++、Java、Python、Go等。LeetCode广泛用于算法和数据结构的练习,以及准备技术面试。在本文件中,用户关注的是LeetCode中与Go语言相关的练习。 2. LeetCode上升的温度题目 根据文件描述,“leetcode上升的温度”很可能是指LeetCode中的一个具体算法题目,尽管没有提供具体的题号。该题目可能是关于数组处理,需要寻找数组中满足特定条件的元素对,例如找出在给定温度数组中,今天比前一天的温度高的日子。 3. 刷题顺序建议 描述中提到了“hot100”,这通常指的是LeetCode上热度排名前100的题目。而后面提到的“数据结构”、“链表”、“栈和队列”、“字符串”、“哈希表”、“数组与矩阵”、“位运算”、“图”和“动态规划”是常见的数据结构和算法概念。用户被建议按照这些类别来练习题目,以系统地掌握算法和数据结构知识。 4. 链表相关题目 “两数相加”、“排序链表”、“合并K个升序链表”是链表操作的典型练习题目。这些题目覆盖了基础的链表操作,如创建和遍历链表,以及链表排序和合并等复杂操作。这些练习对于深化对链表这一数据结构理解非常有帮助。 5. 栈和队列 描述中提到了“栈和队列”以及“最大矩形(leetcode 84)”和“柱状图中最大的矩形(leetcode 85)”。这两道题目均涉及到栈的数据结构。栈是一种后进先出(LIFO)的数据结构,常用于算法中处理某些特定的顺序问题。用户需要熟练掌握栈的使用以及相关问题的解决方法。 6. 字符串与哈希表 在描述中提到“字符串”和“哈希表”,这是数据结构中处理文本和键值对信息的常用工具。字符串操作是编程中非常基础且重要的一部分,而哈希表则是在数据存储和查找方面广泛应用的数据结构。 7. 数组与矩阵、位运算 “数组与矩阵”和“位运算”是算法和编程中的基础概念。数组是一种线性数据结构,用于存储相同类型数据的集合。矩阵是一个二维数组,通常用于线性代数和图形处理。位运算涉及对数据的二进制表示进行操作,是优化算法性能的重要手段之一。 8. 图 “图”是表示实体之间关系的数据结构,在算法中有广泛的应用,如图的遍历、路径寻找、最短路径问题等。LeetCode中也包含许多与图相关的题目,需要用户掌握图的基本概念和常见的图算法。 9. 面试系列与动态规划 面试系列强调了算法在技术面试中的重要性,特别是动态规划。动态规划是一种解决复杂问题的算法方法,它将问题分解成相互重叠的子问题并使用记忆化来避免重复计算。它在很多大厂面试中是一个核心考察点。 10. 开发语言原理与应用底层理论知识 描述中提到了“开发语言原理”如Go的垃圾回收(GC)机制,以及“应用底层理论知识”如MySQL的底层引擎和索引实现。对于一名IT专业人士而言,理解你所使用的编程语言和数据库的内部工作原理是十分重要的,这可以帮助你更高效地编写代码和优化性能。 11. LeetCode-go-master压缩包子文件 该文件名称表明用户拥有一个名为“leetcode-go-master”的压缩包,这可能包含了与Go语言相关的LeetCode题目解答或者相关的编程资源。对于使用Go语言进行算法练习的用户来说,这样的资源库是非常宝贵的。 总结来说,文件描述涉及了算法学习路径、数据结构和编程概念,以及面试准备和开发语言原理等IT专业人士常见的知识领域。用户应该按照这些分类有条理地进行LeetCode练习,以全面提升自身的编程和算法能力。
recommend-type

【Flutter零基础快速入门】:2024年移动开发新趋势,15章慕课带你飞速上手

# 摘要 本论文旨在系统介绍Flutter开发技术及其在移动应用开发中的应用。首先,文章将简要介绍Flutter的基础知识与开发环境搭建,为初学者提供学习起点。随后,深入剖析Flutter的基础组件、常用界面组件以及状态管理机制,帮助开发者掌握构建交互式用户界面的核心技能。第三章将探讨进阶技巧,包括高级布局技术、动画效果实现及性能优化策略,以提升应用的运行效率和