题目一:生日打折
题目描述:
定义一个日期类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;
}