C++:超市货架管理系统


前言

关于超市货架管理系统,具体使用语言C++,其中用到STL Stack 和Vector
以个人的想法编写而成代码,感觉使用stack和vector比较方便,就天马行空的写下代码✍,供自己学习,仅供参考。


一、超市货架管理系统

1.题目说明

在商店中,每种商品用一个货架专门摆放。生产日期越近的越靠近货架底部,出货时从货架顶层取货。一天营业结束后,如果货架不满,则需要上货。如果直接将商品摆放到货架上,会使生产日期越近的商品越靠近货架顶层,这样就需要倒货架,使生产日期越近的越靠近货架底部。

2.功能要求及说明

设计一个算法实现商品货架的摆放管理,要求实现以下操作:
(1)初始化商品货架。商品种类不少于10种,每种商品的货架容量为100。
(2)每种商品至少包含商品名称,数量和生产日期3种属性,生产日期以年月日的形式存放。营业时间客户可以从货架取走商品,但取走商品的数量不能超过已有库存量;
(3)当天营业结束后,对货架不满的商品进行上货操作时,保证每一次上货后生产日期越近的商品越靠近货架底部;
(4)上货结束后,对每个商品按照从货架顶部到货架底部的顺序,打印出所有商品的数量和生产日期。
(5)采用模块化设计,分别以函数形式描述上述各功能,程序界面清晰简洁。

3.测试数据

当天营业结束时,商品“牛奶”的货架上有生产日期分别为“2017-01-14”和“2017-04-22”的各20份,进行上货操作。
新上牛奶的生产日期为“2017-05-13”。上货结束后打印该货架上的商品信息应为:
牛奶:
生产日期为“2017-01-14”的数量20;
生产日期为“2017-04-22”的数量20,
生产日期为“2017-05-13”的数量60。

4.提示

以栈结构实现商店货架。生产日期越近的越靠近栈底,出货时从栈顶取货。如果直接将商品摆放到货架上,会使生产日期越近的商品越靠近栈顶,这样就需要倒货架,使生产日期越近的越靠近栈底。

5.个人分析

  • 每一种商品包含信息,书写商品类,类中写信息
  • 商品种类不少于10种,每种商品货架容量为100,不确定商品种类有多少,书写货架类 使用动态数组保存商品种类
  • 上货、出货和打印信息,有关数量和生产日期,在关于生产日期的地方使用到栈和排序算法
  • (根据4.提示) 生产日期近的为最近生产的,远的为生产有一段时间的,生产日期远的物品会先生产先进栈,导致生产日期近的物品在栈顶,由于需要先售卖生产日期远的,所以需要倒栈使得生产日期远的在栈顶。 (好像有那么一丝丝的绕🤔)
  • 以栈结构实现商品货架,为方便和速率,使用STL stack,装载不同数量和生产日期的商品
  • 货架装载商品,商品包含信息,货架使用动态数组保存商品种类,商品用栈装载每一次进货该商品的信息,即动态数组 数组元素为栈 栈中元素为商品类信息

二、具体实现

1.商品类

商品类中信息包括名称、数量和日期:

 //商品类,商品信息
class Commodit     
{
   
public:
    string name;      //商品名称
    int num;        //数量
    int year;       //年份
    int month;      //月份
    int day;        //日期
};

2.货架类

货架类私有属性为商品类,即货架上放商品:

class Shelves       
{
   
private:
    Commodit* data;             //商品信息
public:
    void ComInit(stack<Commodit>&s, vector<stack<Commodit>>&v);//初始化
    void PutCom(stack<Commodit>&s, vector<stack<Commodit>>&v);//上货
    void OutCom(stack<Commodit>&s, vector<stack<Commodit>>&v);//出货
    void PrintCom(stack<Commodit>&s, vector<stack<Commodit>>&v);//显示货物的信息
};

这里使用了STL stack和vector 记得添加头文件

#include<vector>
#include<stack>

3.main方法

 Shelves S;                              //货架
 Commodit *com;                          //商品信息
 com = new Commodit;
stack<Commodit> s;                      //STL stack 
vector<stack<Commodit>> v;               //动态数组vector

菜单的话 就看自己设计啦

        switch (select)
        {
   
        case 1:                                 //1.初始化
            S.ComInit(s,v);
            break;
        case 2:                                 //2.营业时间售卖
            S.OutCom(s,v);
            break;
        case 3:                                 //3.营业结束上货
            S.PutCom(s,v);
            break;
        case 4:                                 //4.商品信息打印
            S.PrintCom(s,v);
            break;
        case 5:                                 //5.退出
            exit(0);
        default:
            break;
        }

4.初始化

初始化数据,这肯定是必不可少的😀

 cout << "请输入商品种类数量:" << endl;
    cin >> ComNUM;
    for (int i = 0; i <= ComNUM - 1; i++)
    {
   
        Commodit  C;                                        //商品类信息作为结点
        stack<Commodit> s;
        cout << "商品名称:" << endl;                       //商品名称
        cin >> C.name;                                      
        cout << "商品数量:" << endl;                       //商品数量
        cin >> C.num;
        if (C.num > 100)
        {
   
            C.num = 100;
        }
        cout << "商品的日期:(年--月--日):" << endl;     //商品日期
        cin >> C.year >> C.month >> C.day;
        cout << endl;
        s.push(C);                                          //商品信息作为结点进栈
        v.push_back(s);                                     //栈作为数组元素进数组
    }

依次输入商品的名称和数量,因为容量最大为100,所以数量最多为100
然后输入的商品信息入栈,栈又作为数组元素

5.出货售卖

到点出货售卖了😘
首先肯定是要输入商品的名称和需要买的数量的

 string BuyName;                                         //输入需要购买的商品名称
    int BuyNum,count=0;
    cout << "输入需要购买的商品的名称:" << endl;
    cin >> BuyName;                                         //要购买的数量
    cout 
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

iㅤ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值