货币加减(输入输出重载)

题目描述

定义CMoney类,包含元、角、分三个数据成员,友元函数重载‘+’、‘-’,实现货币的加减运算(假设a-b中a的金额始终大于等于b的金额),重载输入、输出,实现货币的输入,输出。

读入最初的货币值,对其不断进行加、减操作,输出结果。

可根据需要,为CMoney类添加构造函数或其它成员函数。

输入

测试次数

每组测试数据格式如下:

第一行,初始货币:元 角 分

第二行开始,每行一个操作:add 元 角 分(加)、minus 元 角 分(减)、stop(结束)

输出

对每组测试数据,输出操作终止后的货币金额,具体输出格式见样例。

输入样例

2
0 0 0
add 48 9 0
minus 0 5 3
add 18 6 8
add 12 1 2
stop
10 2 5
add 5 8 0
add 32 1 2
minus 10 5 9
minus 37 5 8
stop

输出样例

79元1角7分
0元0角0分

代码

#include<iostream>
#include<string>
using namespace std;
class CMoney{
	private:
		int yuan,jiao,fen;
	public:	
		CMoney(int y,int j,int f):yuan(y),jiao(j),fen(f){}
		friend CMoney operator +(CMoney&,CMoney&);
		friend CMoney operator -(CMoney&,CMoney&);
		void show(){
			cout<<yuan<<"元"<<jiao<<"角"<<fen<<"分"<<endl;
		}	
};
CMoney operator +(CMoney &c1,CMoney &c2){
    int y,j,f;
	y=c2.yuan+c1.yuan;                        
	j=c1.jiao+c2.jiao;
	f=c1.fen+c2.fen;
	int mo=0;
	if(f>=10)
	{
		mo=f/10;
		f-=mo*10;
		j+=mo;
	}
	if(j>=10)
	{
		mo=j/10;
		j-=mo*10;
		y+=mo;	
	}
	return CMoney(y,j,f);
}
CMoney operator -(CMoney &c1,CMoney &c2){
	int mo;
	int m1,m2,y,j,f;
	m1=c1.yuan*100+c1.jiao*10+c1.fen;
	m2=c2.yuan*100+c2.jiao*10+c2.fen;
	
	if(m1<m2)
	mo=m2-m1;
	else
	mo=m1-m2;
	
	y=mo/100;
	j=((mo/10)*10-y*100)/10;
	f=mo-(mo/10)*10;
	return CMoney(y,j,f);
}
int main()
{
	int t;
	int y,j,f;
	string a;
	cin>>t;
	while(t)
	{
		cin>>y>>j>>f;
		CMoney money(y,j,f);
		while(1)
		{
			cin>>a;
			if(a=="stop")
			{
				money.show();
				break;
			}
			else if(a=="add"){
				cin>>y>>j>>f;
				CMoney money1(y,j,f);
				money=money + money1;
			}
			else{
				cin>>y>>j>>f;
				CMoney money1(y,j,f);
				money=money - money1;
			}
		}
		t--;
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值