【任务2】设计分数类,开发一个窗口式程序,可以完成分数的四则运算(参考第8 周任务3)。可供参
考的一个界面如图13,在报告中展示主要的代码(同任务1)。
MyCFraction.cpp
#include "stdafx.h"
//#include "iostream"
#include"MyCFraction.h"
int CFraction::gcd(int x,int y)
{
int r;
while(y!=0)
{
r=x%y;
x=y;
y=r;
}
return x;
}
void CFraction::simplify()
{
int n = gcd(nume,deno);
nume = nume/n;
deno = deno/n;
}
CFraction CFraction::operator + (const CFraction &c)
{
CFraction c1;
c1.nume = nume * c.deno + c.nume *deno;
c1.deno = deno * c.deno;
c1.simplify();
return c1;
}
CFraction CFraction::operator - (const CFraction &c)
{
CFraction c1;
c1.nume = nume * c.deno - c.nume *deno;
c1.deno = deno * c.deno;
c1.simplify();
return c1;
}
CFraction CFraction::operator * (const CFraction &c)
{
CFraction c1;
c1.nume = nume * c.nume;
c1.deno = deno * c.deno;
c1.simplify();
return c1;
}
CFraction CFraction::operator / (const CFraction &c)
{
CFraction c1;
c1.nume = nume * c.deno;
c1.deno = deno * c.nume;
c1.simplify();
return c1;
}
int CFraction::get_nume()
{
return nume;
}
int CFraction::get_deno()
{
return deno;
}
MyCFraction.h
class CFraction
{
private:
int nume;
int deno;
public:
CFraction (int nu=0, int de=1):nume(nu),deno(de){}
void simplify();
int gcd(int x,int y);
int get_nume();
int get_deno();
CFraction operator + (const CFraction &c);
CFraction operator - (const CFraction &c);
CFraction operator * (const CFraction &c);
CFraction operator / (const CFraction &c);
};
button
void CCFrationDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(); //将把界面上各控件输入的值“捕获”到与之关联的变量中
CFraction c1(c_1,c_2),c2(c_4,c_5),c;
if(c_3=='+')
{
c=c1+c2;
c_6=c.get_nume();
c_7=c.get_deno();
}
else if(c_3=='-')
{
c=c1-c2;
c_6=c.get_nume();
c_7=c.get_deno();
}
else if(c_3=='*')
{
c=c1*c2;
c_6=c.get_nume();
c_7=c.get_deno();
}
else
{
c=c1/c2;
c_6=c.get_nume();
c_7=c.get_deno();
}
UpdateData(FALSE); //更新界面上对应的控件的值并实现显示
}
、
积累经验:
利用MFC没有了主函数,对输出结果的处理应该设置int get_nume(); int get_deno(); 用来获取结果。
对取最大公约数 以及化简的算法应进一步熟悉。
在void CCFrationDlg::OnBnClickedButton1() 和 MyCFraction.cpp 中 都要记得加上#include"MyCFraction.h"。