• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

人生五十年,如梦亦似幻

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

商店商品管理系统总结与深度分析

一,进度总结
本次对商店商品管理系统的修改,让代码能够适配当前版本系统与初步的改进,主要包括:
从 “固定数组、易崩溃、数据易丢失” ,到 “、稳定性强、数据持久化” ;提升跨平台运行能力。
实现对数据的增删改查与对数据的保存功能。
二,关键修改点

  1. 动态数据结构:从固定数组到 vector
    define MAXSIZE 100 + 商品结构体数组 std::vector 动态容器
    按需分配内存,避免固定数组的内存浪费;
    商品数量无上限,适配不同规模商店需求;
    内置push_back/erase方法,简化商品增删逻辑,消除数组越界风险
    核心代码示例:
    // 封装后的商品管理类核心成员
    class GoodsManager {
    private:
    vector goodsList; // 替代固定大小的Goods数组
    string dataFile = "Myshop.txt"; // 数据持久化文件路径
    public:
    // 添加商品:自动扩容,无需判断数组是否满
    void addGoods(const Goods& goods) {
    goodsList.push_back(goods);
    saveToFile(); // 新增后自动持久化
    }
    // 删除商品:按索引安全删除,避免越界
    bool deleteGoods(int index) {
    if (index < 0 || index >= goodsList.size()) {
    cout << "商品索引无效!" << endl;
    return false;
    }
    goodsList.erase(goodsList.begin() + index);
    saveToFile();
    return true;
    }
    };
  2. 输入验证:全维度防错机制
    针对原始代码 “输入非法数据导致程序崩溃 / 逻辑异常” 的问题,重构后实现类型校验、范围校验、格式校验三层防护:
    价格 / 库存验证:限制为非负数,输入非数字 / 负数时重置输入流并重新提示:
    // 通用数值验证函数(适配价格、库存)
    template
    T getValidNumber(const string& prompt, T minVal = 0) {
    T num;
    while (true) {
    cout << prompt;
    if (cin >> num && num >= minVal) break;
    // 重置cin错误状态+清空缓冲区
    cin.clear();
    cin.ignore(numeric_limits::max(), '\n');
    cout << "输入无效!请输入不小于" << minVal << "的数字" << endl;
    }
    return num;
    }
    // 调用示例:获取合法进价
    float inPrice = getValidNumber("请输入商品进价:", 0);
    int storage = getValidNumber("请输入商品库存:", 0);
    商品类型 / 品牌验证:封装独立输入函数,支持模糊校验(避免空输入):
    cpp
    运行
    string getValidString(const string& prompt) {
    string str;
    while (true) {
    cout << prompt;
    cin.ignore(); // 清空换行符缓冲区
    getline(cin, str);
    if (!str.empty()) break;
    cout << "输入不能为空!请重新输入" << endl;
    }
    return str;
    }
    // 调用示例:获取商品类型
    string type = getValidString("请输入商品类型:");
    菜单选择验证:避免输入非数字导致死循环:
    int getValidMenuChoice(int min, int max) {
    int choice;
    while (true) {
    cout << "请选择操作(" << min << "-" << max << "):";
    if (cin >> choice && choice >= min && choice <= max) break;
    cin.clear();
    cin.ignore(numeric_limits::max(), '\n');
    cout << "输入无效!请输入" << min << "-" << max << "之间的数字" << endl;
    }
    return choice;
    }

三,修改难点
原代码距今久远,随着版本迭代与更新,编译器可能无法成功编译出结果,需要进行修改与调试,使得其能够在vs2022中成功编译出来;部分设计理念可能过于落后,使得代码安全性与实用性特别低,需要进行着重修改。
四,运行图片

屏幕截图 2026-03-12 110104

屏幕截图 2026-03-12 110033

屏幕截图 2026-03-12 110127

屏幕截图 2026-03-12 110207
五,代码来源
https://files.cnblogs.com/files/jingxinbk/超市商品管理系统.rar

posted on 2026-03-12 11:09  易居白  阅读(22)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3