面向对象程序设计|复合类

题目一:生日打折

题目描述:

定义一个日期类Date,包含数据成员year\month\day,还包含构造函数及其他函数(根据需要自己添加)

定义一个会员类VIP,包含数据成员id和birth,其中id是整数表示会员编号;birth是Date类型表示生日。

类VIP包含构造函数和其他函数(根据需要自己添加),还包含一个折扣函数Discount。函数Discount返回结果为浮点数表示折扣,函数包含1个参数为日期类型,函数功能是判断参数日期是否会员生日,是则折扣为0.5,不是则折扣为0.95

编写程序实现上述类功能并实现输入输出的要求

输入要求:

第一行输入年、月、日,表示今天日期

第二行输入t表示有t个会员

第三行输入第1个会员的ID、生日的年、月、日

第四行输入第1个会员的消费金额

依次类推输入下一个会员的两行数据.....

输出要求:

根据会员的消费金额,调用Discount函数判断今天是否会员生日并得到折扣,然后计算会员打完折的消费金额

每一行先输出会员编号,再输出会员打完折的消费金额,消费金额只需要输出整数部分

输入样例:

2017 4 20
2
1111 2000 4 20
136
2222 2000 3 30
125

 输出样例:
 

1111's consumption is 68
2222's consumption is 118
#include
#include
#include
#include 
#include
#include
using namespace std;

class Date//定义日期类
{
public:
	Date() {}
	Date(int year0, int month0, int day0)
	{
		year = year0;
		month = month0;
		day = day0;
	}
	int getYear()
	{
		return year;
	}
	int getMonth()
	{
		return month;
	}
	int getDay()
	{
		return day;
	}
private:
	int year, month, day;
};

class VIP//定义VIP类
{
public:
	VIP(int ID0, Date& birth0)
	{
		ID = ID0;
		birth = birth0;
	}
	double Discount(Date d0)
	{
		if ((d0.getMonth() == birth.getMonth()) && (d0.getDay() == birth.getDay()))//如果是生日就打5折,不是就打95折
		{
			return 0.5;
		}
		else
		{
			return 0.95;
		}
	}
	void print()
	{
		cout << ID << "'s consumption is ";
	}
private:
	int ID;
	Date birth;
};

int main()
{
	int ynow, mnow, dnow, t;
	cin >> ynow >> mnow >> dnow >> t;
	Date now(ynow, mnow, dnow);//用now来表示今天的日期
	while (t--)
	{
		int y_0, m_0, d_0, id;
		double money, dis;
		cin >> id >> y_0 >> m_0 >> d_0;//输入会员编号及其生日
		Date birthday(y_0, m_0, d_0);
		VIP vip(id, birthday);
		cin >> money;
		dis = vip.Discount(now);
		vip.print();
		cout << int(money * dis) << endl;
	}
}

问题二:购物车

题目描述:

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

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

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

购物车操作分别用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
#include
#include
#include
#include 
#include
#include
using namespace std;

class Good {
public:
	Good() {}
	void setGood(int ID0, string gdname0, string gdcolor0, string gdsize0, double gdprice0, int gdnum0)
	{
		gdID = ID0;
		gdname = gdname0;
		gdcolor = gdcolor0;
		gdsize = gdsize0;
		gdprice = gdprice0;
		gdnum = gdnum0;
	}
	double getSumPrice()
	{
		return gdnum * gdprice;
	}
	int getId()
	{
		return gdID;
	}
	int getNum()
	{
		return gdnum;
	}
	void printGood()
	{
		cout << gdname << "," << gdcolor << "," << gdsize << "," << fixed << setprecision(2) << gdprice << "," << gdnum << "," << fixed << setprecision(2) << getSumPrice() << endl;
	}
	void addNum()
	{
		gdnum++;
	}
	void downNum()
	{
		gdnum--;
		if (gdnum < 1)
		{
			gdnum = 1;
		}
	}
	void Delete()
	{
		gdnum = 0;
	}
private://商品私有属性:商品编号、名称、颜色、尺码、单价、数量
	int gdID, gdnum;
	double gdprice;
	string gdname, gdsize, gdcolor;

};

class Shopping {
public:
	Shopping(int a)
	{
		good = new Good[a];//定义商品指针的动态内存
	}
	Good& getGood(int x)
	{
		return good[x];
	}
	int getGoodNum()
	{

	}
	double getSumPrice()
	{

	}
	void printShopping(int y, int z)//打印输出购物车
	{
		double sumprice = 0;
		cout << "商品清单:" << endl;
		cout << "商品,颜色,尺码,单价,数量,小计" << endl;
		for (int i = y - 1; i >= 0; i--)
		{
			if (this->getGood(i).getNum() != 0)//如果商品数量不为0,即输出该商品//在类内调用函数用this
			{
				this->getGood(i).printGood();
				sumprice += this->getGood(i).getSumPrice();
			}
		}
		cout << "----------" << endl;
		cout << z << "件商品,总商品金额" << fixed << setprecision(2) << sumprice << endl;
	}
private:
	Good* good;

};


int main() {
	int t;
	cin >> t;
	while (t--)
	{
		int n, all, total;
		cin >> n;
		all = 0;
		total = 0;
		Shopping cart(n);//定义cart为购物车
		while (n--)//总共执行8次操作
		{
			int id0, num0;
			double price0;
			string name0, size0, color0, operation;
			cin >> operation;
			if (operation == "ADD")//添加商品操作
			{
				cin >> id0 >> name0 >> color0 >> size0 >> price0 >> num0;
				cart.getGood(all).setGood(id0, name0, color0, size0, price0, num0);
				all++;//商品种类增加
				total += num0;//总商品数量增加num0
			}
			else if (operation == "UP")//商品数量增加
			{
				cin >> id0;
				for (int i = 0; i < all; i++)
				{
					if (cart.getGood(i).getId() == id0)//找到购物车里对应的商品
					{
						cart.getGood(i).addNum();//商品数量+1
					}
				}
				total++;//总商品数量+1
			}
			else if (operation == "DOWN")//商品数量减少
			{
				cin >> id0;
				for (int i = 0; i < all; i++)
				{
					if (cart.getGood(i).getId() == id0)//找到购物车里对应的商品
					{
						cart.getGood(i).downNum();//商品数量-1
					}
				}
				total--;
			}
			else if (operation == "DELETE")//移除商品
			{
				cin >> id0;
				for (int i = 0; i < all; i++)
				{
					if (cart.getGood(i).getId() == id0)//找到购物车里对应的商品
					{
						total -= cart.getGood(i).getNum();//总商品数量减去其数量
						cart.getGood(i).Delete();//删除商品
					}
				}
			}
		}
		cart.printShopping(all, total);//打印输出购物车里的所有信息
	}
	return 0;
}

你可能感兴趣的:(Simple,C++,算法,C++,开发语言)