/*
*尚品货架可以看成一个栈,栈顶商品的生产日期最早,栈底商品的生产日期最近。
*上货时,需要倒货架,以保证生产日期较新的商品在较靠里的位置
*针对一种特定商品,实现上述管理过程
*测试数据:由学生自己确定一组测试数据。注意测试边界数据,如空栈。
*/
shelf.h
#include <iostream>
#include <string>using namespace std;
struct Goods{
int number;
string name;
char date[10];
};
class GoodsShelf{
public:
GoodsShelf(int size);
~GoodsShelf();bool goodsShelfEmpty();
bool goodsShelfFull();
bool push(Goods goods);
bool pop(Goods &goods);
void goodsShelfTraverse();
private:
int m_iTop;
Goods *m_pBuffer;
int m_iSize;
};
GoodsShelf::GoodsShelf(int size){
m_iSize = size;
m_pBuffer = new Goods[size];
m_iTop = 0;
}
GoodsShelf::~GoodsShelf(){
delete [] m_pBuffer;
}
bool GoodsShelf::goodsShelfEmpty(){
if(m_iTop == 0)
return true;
return false;
}
bool GoodsShelf::goodsShelfFull(){
if(m_iTop == m_iSize)
return true;
return false;
}
bool GoodsShelf::push(Goods goods){
if(goodsShelfFull())
return false;m_pBuffer[m_iTop] = goods;
m_iTop++;
return true;
}
bool GoodsShelf::pop(Goods &goods){
if(goodsShelfEmpty())
return false;
m_iTop--;
goods = m_pBuffer[m_iTop];
return true;
}
void GoodsShelf::goodsShelfTraverse(){
for(int i = m_iTop-1;i>=0;i--)
cout<<m_pBuffer[i].number<<" "<<m_pBuffer[i].name<<" "<<m_pBuffer[i].date<<endl;;
}
demo.cpp
#include <iostream>
#include "shelf.h"
using namespace std;
int main(){
//指定货架容量
GoodsShelf s1(10),s2(10);
Goods goods;
int n;
cout<<"请输入货架上现有商品数量:";
cin>>n;
cout<<"请输入货架上现有商品的编号,商品名,日期(从货架最里端到最外端依次输入):"<<endl;
for(int i=1;i<=n;i++){
cin>>goods.number;
cin>>goods.name;
cin>>goods.date;
s1.push(goods);
}
while(!s1.goodsShelfEmpty()){
s1.pop(goods);
s2.push(goods);
}
cout<<"请输入新上货架商品的数量:";
cin>>n;
cout<<"请输入新上货架商品的编号,商品名,日期:(日期从新到旧依次输入)"<<endl;
for( i=1;i<=n;i++){
cin>>goods.number;
cin>>goods.name;
cin>>goods.date;
s1.push(goods);
}
while(!s2.goodsShelfEmpty()){
s2.pop(goods);
s1.push(goods);
}
cout<<"放入新货品后货架上的所有商品的编号,商品名,日期(从货架最外端到最里端依次输出):"<<endl;
s1.goodsShelfTraverse();
return 0;
}