文章目录
前言
关于超市货架管理系统,具体使用语言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