C++仓库管理系统

news2024/11/15 11:47:05

功能                代码在效果图后面

1.添加物品  2.删除物品 3.更新物品数量 4.查询物品 5.列出所有物品  6.保存并退出

注意事项:退出要输入“6”退出才能保存数据,不要直接按X关掉窗口(不会保存数据)。

效果图

源代码

编译时在连接器命令行加入以下数据

-std=c++11

#include <iostream>
#include <vector>
#include <fstream>
#include <string>
#include <algorithm>

struct Item {
    int id;
    std::string name;
    int quantity;
    std::string type;
};

class WarehouseManagement {
public:
    WarehouseManagement(const std::string& filename) : filename(filename) {
        loadFromFile();
    }

    bool authenticate(const std::string& username, const std::string& password) {
        return username == "root" && password == "123";
    }

    void addItem(const Item& item) {
        items.push_back(item);
        saveToFile();
    }

    void removeItem(int id) {
        auto it = std::remove_if(items.begin(), items.end(), [id](const Item& item) {
            return item.id == id;
        });
        items.erase(it, items.end());
        saveToFile();
    }

    void updateItemQuantity(int id, int quantity) {
        for (auto& item : items) {
            if (item.id == id) {
                item.quantity = quantity;
                saveToFile();
                return;
            }
        }
    }

    Item* queryItem(int id) {
        for (auto& item : items) {
            if (item.id == id) {
                return &item;
            }
        }
        return nullptr;
    }

    void printItems() {
        for (const auto& item : items) {
            std::cout << "ID: " << item.id << ", 名称: " << item.name
                      << ", 数量: " << item.quantity << ", 类型: " << item.type << '\n';
        }
    }

private:
    std::vector<Item> items;
    std::string filename;

    void loadFromFile() {
        std::ifstream file(filename);
        if (!file.is_open()) return;

        Item item;
        while (file >> item.id >> item.name >> item.quantity >> item.type) {
            items.push_back(item);
        }
        file.close();
    }

    void saveToFile() {
        std::ofstream file(filename);
        if (!file.is_open()) return;

        for (const auto& item : items) {
            file << item.id << ' ' << item.name << ' ' << item.quantity << ' ' << item.type << '\n';
        }
        file.close();
    }
};

int main() {
    WarehouseManagement wm("warehouse.txt");

    std::string username, password;
    std::cout << "请输入用户名: ";
    std::cin >> username;
    std::cout << "请输入密码: ";
    std::cin >> password;

    if (!wm.authenticate(username, password)) {
        std::cout << "无效的用户名或密码。\n";
        return 1;
    }

    int choice;
    do {
        std::cout << "1. 添加物品\n2. 删除物品\n3. 更新物品数量\n4. 查询物品\n5. 列出所有物品\n6. 退出\n";
        std::cout << "请输入您的选择: ";
        std::cin >> choice;

        switch (choice) {
            case 1: {
                Item item;
                std::cout << "请输入物品ID: ";
                std::cin >> item.id;
                std::cout << "请输入物品名称: ";
                std::cin >> item.name;
                std::cout << "请输入物品数量: ";
                std::cin >> item.quantity;
                std::cout << "请输入物品类型: ";
                std::cin >> item.type;
                wm.addItem(item);
                break;
            }
            case 2: {
                int id;
                std::cout << "请输入要删除的物品ID: ";
                std::cin >> id;
                wm.removeItem(id);
                break;
            }
            case 3: {
                int id, quantity;
                std::cout << "请输入要更新的物品ID: ";
                std::cin >> id;
                std::cout << "请输入新的数量: ";
                std::cin >> quantity;
                wm.updateItemQuantity(id, quantity);
                break;
            }
            case 4: {
                int id;
                std::cout << "请输入要查询的物品ID: ";
                std::cin >> id;
                Item* item = wm.queryItem(id);
                if (item) {
                    std::cout << "ID: " << item->id << ", 名称: " << item->name
                              << ", 数量: " << item->quantity << ", 类型: " << item->type << '\n';
                } else {
                    std::cout << "物品未找到。\n";
                }
                break;
            }
            case 5:
                wm.printItems();
                break;
            case 6:
                break;
            default:
                std::cout << "无效的选择。请再试一次。\n";
                break;
        }
    } while (choice != 6);

    return 0;
}

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

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

相关文章

C语言 底层逻辑详细阐述指针(一)万字讲解 #指针是什么? #指针和指针类型 #指针的解引用 #野指针 #指针的运算 #指针和数组 #二级指针 #指针数组

文章目录 前言 序1&#xff1a;什么是内存&#xff1f; 序2&#xff1a;地址是怎么产生的&#xff1f; 一、指针是什么 1、指针变量的创建及其意义&#xff1a; 2、指针变量的大小 二、指针的解引用 三、指针类型存在的意义 四、野指针 1、什么是野指针 2、野指针的成因 a、指…

Unity客户端接入原生Google支付

Unity客户端接入原生Google支付 1. Google后台配置2. 开始接入Java部分C#部分Lua部分 3. 导出工程打包测试参考踩坑注意 1. Google后台配置 找到内部测试&#xff08;这个测试轨道过审最快&#xff09;&#xff0c;打包上传&#xff0c;这个包不需要接入支付&#xff0c;如果已…

机器人开源调度系统OpenTcs6-架构运行分析

系统启动 启动 Kernel&#xff1a;加载核心应用&#xff0c;初始化系统配置和状态。 启动 Plant Overview&#xff1a;加载图形用户界面&#xff0c;初始化模型和用户界面。 模型导入和配置 在 Plant Overview 中导入或创建工厂布局模型。 配置路径、位置和车辆信息。 车辆连…

用DrissionPage过某里滑块分析

最近我又在找工作了&#xff0c;悲哀啊~&#xff0c;面试官给了一道题&#xff0c;要求如下&#xff1a; 爬虫机试&#xff1a;https://detail.1688.com/offer/643272204627.html 过该链接的滑动验证码&#xff0c;拿到正确的商品信息页html&#xff0c;提取出商品维度的信息&a…

排序一次讲清(从冒泡到基数)

文章目录 冒泡原理代码pythonc 选择原理代码pythonc 插入原理代码pythonc 希尔原理代码pythonc 快排原理代码pythonc 归并原理代码pythonc 堆原理代码pythonc 计数原理代码pythonc 桶原理代码pythonc 基数原理代码pythonc 【待更新】 冒泡 原理 如果我们想要让数组从左至右从…

海豚调度器(DolphinScheduler)集群搭建详细笔记

海豚调度器集群搭建笔记 1.DolphinScheduler Cluster部署1.1 集群部署规划1.2 集群准备工作1.3 初始化数据库1.4 修改安装环境配置1.5 安装DolphinScheduler1.6 启停命令1.7 登录 DolphinScheduler UI 1.DolphinScheduler Cluster部署 分布式去中心化易扩展的工作流任务调度系…

【最强八股文 -- 计算机网络】TCP 四次挥手的过程及原因

第一次挥手&#xff1a;FIN 报文第二次挥手&#xff1a;ACK 报文第三次挥手&#xff1a;FIN 报文第四次挥手&#xff1a;ACK 报文 为什么需要四次挥手&#xff1f; 为什么需要 TIME_WAIT 状态&#xff1f; TIME_WAIT 的时间为什么是 2MSL&#xff1f;

springboot服务如何执行sql脚本文件

当sql脚本文件包含不同数据库实例sql时&#xff0c;遍历读取sql文件再插入时&#xff0c;由于是不同的数据库实例这种方式就不行了&#xff0c;这时就需要程序直接执行sql脚本。 springboot执行sql脚本 /*** 执行sql脚本* throws SQLException*/ private void executeSqlScri…

go-zero框架入门

go-zero框架环境的安装 goctl 若想用go-zero框架&#xff0c;还需要一些前置条件&#xff1a; 安装goctl go install github.com/zeromicro/go-zero/tools/goctllatest可以使用 goctl 命令查看是否安装成功 成功后安装protoc goctl env check --install --verbose --force…

重生奇迹MU 三代翅膀行情

在重生奇迹MU游戏中&#xff0c;达到400级以上的玩家都知道&#xff0c;重生奇迹大陆拍卖行里最值钱的物品是翅膀。翅膀可以分为一代、二代和三代翅膀&#xff0c;而其中价格最高的则是三代翅膀。有时候&#xff0c;三代翅膀的售价非常之高&#xff0c;甚至有市无价。这是因为三…

[论文笔记] CT数据配比方法论——1、Motivation

我正在写这方面的论文,感兴趣的可以和我一起讨论!!!!!! Motivation 1、探测原有模型的配比: 配比 与 ppl, loss, bpw, benchmark等指标 之间的关系。 2、效果稳定的配比:配比 与 模型效果 之间的规律。 Experiments 1、主语言(什么语言作为主语言,几种主语言?…

PyTorch 深度学习实践-逻辑斯蒂回归

视频指路 参考博客笔记 参考笔记二 用来分类的模型 说明&#xff1a;1、 逻辑斯蒂回归和线性模型的明显区别是在线性模型的后面&#xff0c;添加了激活函数(非线性变换) ​ 2、分布的差异&#xff1a;KL散度&#xff0c;cross-entropy交叉熵 现在损失函数衡量不是距离而是分布…

Jmeter性能测试(九)

一、Jmeter性能测试需要特别注意的地方 1、参数化 2、请求参数 3、BeanShell 预处理程序更新jmeter请求参数 4、接口中不可重复的随机数处理 5、线程组设置 6、总结 二、参数化 1、参数化配置,多个参数用英文逗号隔开 2、wallet参数化文件,不要写表头,多个参数用英文逗号…

【YOLOv8改进[Conv]】KAN系列 |使用KACNConv改进C2f + 含全部代码和详细修改方式 + 手撕结构图

本文将进行在YOLOv8中使用KACNConv改进C2f 的实践,助力YOLOv8目标检测效果,文中含全部代码、详细修改方式以及手撕结构图。助您轻松理解改进的方法。训练速度会慢一些,要有心理准备哈! 改进前和改进后的参数对比: 目录

《基于 Kafka + Quartz 实现时限质控方案》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…

玳数科技集成 Flink CDC 3.0 的实践

摘要&#xff1a;本文投稿自玳数科技工程师杨槐老师&#xff0c;介绍了 Flink CDC 3.0 与 ChunJun 框架在玳数科技的集成实践。主要分为以下六个内容&#xff1a; 背景技术选型架构设计挑战与解决方案上线效果未来规划 1. 背景 玳数科技对内外部用户提供了一站式的数据开发治理…

【BUG】已解决:error: subprocess-exited-with-error

已解决&#xff1a;error: subprocess-exited-with-error 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰&#xff0c;211科班出身&#xff0c;就职于医疗科技公司&#xff0c;热衷分享知识&#xff0c;武汉城市开发者社区主…

【Vue】深入解析 Vue 生命周期:从创建到销毁的完整流程

文章目录 一、Vue 生命周期概述二、创建阶段1. beforeCreate 钩子2. created 钩子 三、挂载阶段1. beforeMount 钩子2. mounted 钩子 四、更新阶段1. beforeUpdate 钩子2. updated 钩子 五、销毁阶段1. beforeDestroy 钩子2. destroyed 钩子 六、Vue 3 的生命周期钩子变化七、生…

PHP pwn 学习 (2)

文章目录 A. 逆向分析A.1 基本数据获取A.2 函数逆向zif_addHackerzif_removeHackerzif_displayHackerzif_editHacker A.3 PHP 内存分配 A.4 漏洞挖掘B. 漏洞利用B.1 PHP调试B.2 exp 上一篇blog中&#xff0c;我们学习了一些PHP extension for C的基本内容&#xff0c;下面结合一…

软件著作权申请教程(超详细)(2024新版)软著申请

目录 一、注册账号与实名登记 二、材料准备 三、申请步骤 1.办理身份 2.软件申请信息 3.软件开发信息 4.软件功能与特点 5.填报完成 一、注册账号与实名登记 首先我们需要在官网里面注册一个账号&#xff0c;并且完成实名认证&#xff0c;一般是注册【个人】的身份。中…