购物车(复合类)
题目描述
定义一个商品类,包含私有数据成员:商品编号、名称、颜色、尺码、单价、数量。成员函数有:计算总价(单价*数量)、输出商品信息。具体输出格式见样例输出。构造函数及其它函数可根据题目需要自行添加。
定义一个购物车类,包含私有数据成员:商品对象集合、商品总数、购物车所有商品总价。方法有:添加商品、删除商品、减少商品数量、增加商品数量,输出购物车中的商品清单。构造函数及其它函数可根据题目需要自行添加。
编写主函数,定义上述类对象,根据样例的输入、输出实现购物车的简单模拟。
购物车操作分别用ADD、DELETE、UP、DOWN表示,具体格式描述如下:
ADD 商品编号 商品名称 颜色 尺码 单价 数量 //添加1个或多个同类商品,若购物车已有指定编号商品,只需增加数量;若无,添加在购物车首部。
DELETE 商品编号 //删除购物车中给定商品编号的所有商品,不存在删除不成功的情况,即购物车中一定有给定编号的物品。
UP 商品编号 //购物车中商品编号的商品数量加1,不存在操作不成功的情况。
DOWN 商品编号 //购物车中商品编号的商品数量减1,且最小为1。
为更好理解题目,可在京东购物车里试操作。样例中的数据来源于该网站,包括颜色和尺码。为简化题目,假设同一商品不同颜色、尺码,不同编号。
输入
测试次数t
每组测试数据为:
购物车操作次数n,后跟n行操作。
输出
对每组测试数据,输出操作结束后的购物车商品清单,输出格式见样例,商品统计前输出10个-符号。所有测试数据操作结束后的购物车均非空。
样例一:
输入
1
8
ADD 2018040801 格力变频冷暖空调KFR-26GW 大1匹 变频挂机 2999 1
ADD 2018040802 长虹65D2P高清HDR平板LED液晶 1 1 4799 1
ADD 2018040803 康佳LED55X9人工智能平板电视机 null 55寸 4999 1
UP 2018040802
UP 2018040803
DOWN 2018040803
DELETE 2018040802
ADD 2018040802 长虹65D2P高清HDR平板LED液晶 1 1 4799 2
输出:
商品清单:
商品,颜色,尺码,单价,数量,小计
长虹65D2P高清HDR平板LED液晶,1,1,4799.00,2,9598.00
康佳LED55X9人工智能平板电视机,null,55寸,4999.00,1,4999.00
格力变频冷暖空调KFR-26GW,大1匹,变频挂机,2999.00,1,2999.00
----------
4件商品,总商品金额17596.00
code【注意输出格式】
#include<iostream>
#include<cstdio>
#include<string>
#include<iomanip>
using namespace std;
class SHOP
{
string id,name,color,size;
double unit;
int cnt;
public:
SHOP(){}
SHOP(string _id,string _name,string _color,string _size,int _unit,int _cnt)
{
id=_id;
name=_name;
color=_color;
size=_size;
unit=_unit;
cnt=_cnt;
}
SHOP(SHOP &r_p)
{
id=r_p.id;
name=r_p.name;
color=r_p.color;
size=r_p.size;
unit=r_p.unit;
cnt=r_p.cnt;
}
int getcnt()
{
return cnt;
}
double getsum()
{
return unit*cnt;
}
string getid()
{
return id;
}
void addcnt()
{
cnt++;
}
void subcnt()
{
cnt--;
}
void print()
{
cout<<name<<","<<color<<","<<size<<",";
cout<<fixed<<setprecision(2);
cout<<unit<<",";
cout<<fixed<<setprecision(0);
cout<<cnt<<",";
cout<<fixed<<setprecision(2);
double summ;
summ=getsum();
cout<<summ<<endl;
}
};
class CAR
{
SHOP *article;
int kind;
public:
CAR()
{
article=new SHOP[1000];
kind=0;
}
int find(SHOP p)
{
for(int i=1;i<=kind;i++)
{
if(p.getid()==article[i].getid())
{
return 1;
}
}
return 0;
}
int find2(string idd)
{
for(int i=1;i<=kind;i++)
{
if(idd==article[i].getid())
{
return i;
}
}
}
void add(SHOP p)
{
if(find(p))
{
p.addcnt();
}
else
{
kind++;
article[kind]=p;
}
}
void del(string idd)
{
int index;
index=find2(idd);
for(int i=index;i<kind;i++)
{
article[i]=article[i+1];
}
kind--;
}
void up(string idd)
{
int index;
index=find2(idd);
article[index].addcnt();
}
void down(string idd)
{
int index;
index=find2(idd);
article[index].subcnt();
}
void print()
{
double ans=0;
int sum=0;
cout<<"商品清单:"<<endl;
cout<<"商品,颜色,尺码,单价,数量,小计"<<endl;
for(int i=kind;i>=1;i--)
{
article[i].print();
ans+=article[i].getsum();
sum+=article[i].getcnt();
}
cout<<"----------"<<endl;
cout<<sum<<"件商品,总商品金额"<<ans<<endl;
}
~CAR()
{
delete []article;
}
};
int main()
{
int t;
cin>>t;
while(t--)
{
CAR car;
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
char tag[10];
string id,name,color,size;
double unit;
int cnt;
cin>>tag;
if(tag[0]=='A')
{
cin>>id>>name>>color>>size>>unit>>cnt;
SHOP shop(id,name,color,size,unit,cnt);
car.add(shop);
}
else if(tag[0]=='D'&&tag[1]=='E')
{
cin>>id;
car.del(id);
}
else if(tag[0]=='U')
{
cin>>id;
car.up(id);
}
else if(tag[0]=='D'&&tag[1]=='O')
{
cin>>id;
car.down(id);
}
}
car.print();
}
return 0;
}