购物车(复合类)【S】

购物车(复合类)

题目描述

定义一个商品类,包含私有数据成员:商品编号、名称、颜色、尺码、单价、数量。成员函数有:计算总价(单价*数量)、输出商品信息。具体输出格式见样例输出。构造函数及其它函数可根据题目需要自行添加。

定义一个购物车类,包含私有数据成员:商品对象集合、商品总数、购物车所有商品总价。方法有:添加商品、删除商品、减少商品数量、增加商品数量,输出购物车中的商品清单。构造函数及其它函数可根据题目需要自行添加。

编写主函数,定义上述类对象,根据样例的输入、输出实现购物车的简单模拟。

购物车操作分别用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;
}

 

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值