/* (程序头部注释开始)
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生
* All rights reserved.
* 文件名称:
* 作 者: 臧鹏
* 完成日期: 2012 年 5月 28 日
* 版 本 号:
* 对任务及求解方法的描述部分
* 输入描述:
* 问题描述:窗口程序,完成分数的四则运算
* 程序输出:
* 程序头部的注释结束
*/
//CFraction.h
class CFraction
{
private:
int nume; // 分子
int deno; // 分母
int gcd(int nu, int de); //求最大公约数的函数
public:
CFraction(int nu=0,int de=1); //构造函数,初始化用
CFraction operator+(CFraction &t);
CFraction operator-(CFraction &t);
CFraction operator*(CFraction &t);
CFraction operator/(CFraction &t);
void Simplify();
int get_nume();
int get_deno();
};
//CFraction.cpp
#include"stdafx.h"
#include"CFraction.h"
using namespace std;
CFraction::CFraction(int nu,int de) //构造函数
{
nume = nu;
deno = de;
}
void CFraction::Simplify() //化简(使分子分母没有公因子)
{
int n = gcd(nume,deno);
nume = nume/n;
deno = deno/n;
}
int CFraction::gcd(int x,int y) //求公约数的函数
{
int r;
while( y!= 0)
{
r = x%y;
x = y;
y = r;
}
return x;
}
CFraction CFraction:: operator+(CFraction &t)
{
CFraction cf;
if(deno==t.deno) //分母相同时比较分子
{
cf.deno=deno;
cf.nume=nume+t.nume;
}
else //否则同分比较分子
{
cf.deno=deno*t.deno;
cf.nume=nume*t.deno+deno*t.nume;
}
cf.Simplify();
return cf;
}
CFraction CFraction:: operator-(CFraction &t)
{
CFraction cf;
if(deno==t.deno)
{
cf.deno=deno;
cf.nume=nume-t.nume;
}
else
{
cf.deno=deno*t.deno;
cf.nume=t.deno*nume-t.nume*deno;
}
cf.Simplify();
return cf;
}
CFraction CFraction:: operator*(CFraction &t)
{
CFraction cf;
cf.deno = deno*t.deno;
cf.nume = nume*t.nume;
cf.Simplify();
return cf;
}
CFraction CFraction:: operator/(CFraction &t)
{
CFraction cf;
cf.deno = deno*t.nume;
cf.nume = nume*t.deno;
cf.Simplify();
return cf;
}
int CFraction::get_nume()
{
return this->nume;
}
int CFraction::get_deno()
{
return this->deno;
}
//分数计算器Dlg.cpp
void C分数计算器Dlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData();//将把界面上各控件输入的值获取到与之关联的变量中
CFraction c1(c1_deno,c1_nume),c2(c2_deno,c2_nume),c(0,1);
if(sign == '+')//此处填空的那个添加变量中的类型用CString,变量名用sign
{
c = c1+c2;
}
else if(sign == '-')
{
c = c1 - c2;
}
else if(sign == '*')
{
c = c1 * c2;
}
else if(sign == '/')
{
c = c1 / c2;
}
c_nume = c.get_nume();
c_deno = c.get_deno();
UpdateData(FALSE);
}
经验积累:
给那些框框添加变量时,一定要慢,要细心,要是弄错一个就酿成大错。还是窗口的形式输出比较过瘾啊,多做几个熟悉熟悉工具箱中的功能