/* (程序头部注释开始)
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生
* All rights reserved.
* 文件名称:设计分数类,开发一个窗口式程序,可以完成分数的四则运算
* 作 者: zhang lu
* 完成日期: 2012 年 05 月 25 日
* 版 本 号: V1.0
* 对任务及求解方法的描述部分
* 输入描述:
* 问题描述:
* 程序输出:
* 程序头部的注释结束
*/
CFraction.h
- using namespace std;
- int gcd(int m, int n);
- class CFraction
- {
- private:
- int nume; // 分子
- int deno; // 分母
- public:
- //构造函数及运算符重载的函数声明
- CFraction(int nu=0,int de=1); //构造函数,初始化用
- void Simplify(); //化简(使分子分母没有公因子)
- void output(); //输出:以8/6为例,style为0时,输出8/6;
- int get_nume();
- int get_deno();
- CFraction operator+(CFraction &c);
- CFraction operator-(CFraction &c);
- CFraction operator*(CFraction &c);
- CFraction operator/(CFraction &c);
- CFraction operator-();
- };
CFraction.cpp
- #include "stdafx.h"
- #include <iostream>
- #include"CFraction.h"
- CFraction::CFraction(int nu,int de) //构造函数,初始化用
- {
- if (de!=0)
- {
- nume=nu;
- deno=de;
- }
- else
- {
- cerr<<"初始化中发生错误,程序退出\n";
- system("pause");
- exit(0);
- }
- }
- void CFraction::Simplify() //化简(使分子分母没有公因子)
- {
- int n;
- if(nume < 0)
- {
- n = gcd(-nume, deno);
- }
- else
- {
- n = gcd(nume, deno);
- }
- nume = nume / n;
- deno = deno / n;
- }
- // 求m,n的最大公约数
- int gcd(int m, int n)
- {
- int r;
- if (m<n){r=m;m=n;n=r;}
- while(r=m%n) // 求m,n的最大公约数
- {
- m=n;
- n=r;
- }
- return n;
- }
- void CFraction::output() //输出:以8/6为例,style为0时,输出8/6;
- {
- cout<<nume<<'/'<<deno<<endl;
- }
- CFraction CFraction::operator+(CFraction &c)
- {
- CFraction c2,c3,c4;
- c2.nume =nume*c.deno ;
- c3.nume =c.nume *deno;
- c2.deno =deno*c.deno ;
- c3.deno =c.deno *deno;
- c4.nume=c2.nume +c3.nume ;
- c4.deno =c2.deno ;
- c4.Simplify ();
- return c4;
- }
- CFraction CFraction::operator-(CFraction &c)
- {
- CFraction c2,c3,c4;
- c2.nume =nume*c.deno ;
- c3.nume =c.nume *deno;
- c2.deno =deno*c.deno ;
- c3.deno =c.deno *deno;
- c4.nume=c2.nume -c3.nume ;
- c4.deno =c2.deno ;
- c4.Simplify ();
- return c4;
- }
- CFraction CFraction::operator*(CFraction &c)
- {
- CFraction c2,c3,c4;
- c2.nume =nume*c.nume ;
- c2.deno =deno*c.deno ;
- c2.Simplify ();
- return c2;
- }
- CFraction CFraction::operator/(CFraction &c)
- {
- CFraction c2,c3;
- c2.nume =c.deno ;
- c2.deno =c.nume ;
- c3.nume =nume*c2.nume ;
- c3.deno =deno*c2.deno ;
- c3.Simplify ();
- return c3;
- }
- CFraction CFraction::operator-()
- {
- CFraction c2;
- c2.nume =nume;
- c2.deno =deno;
- c2.Simplify ();
- if(c2.nume<0 || c2.deno<0)
- {
- if(c2.nume <0)
- {
- c2.nume =-nume;
- }
- else
- {
- c2.deno =-deno;
- }
- }
- else
- {
- c2.nume =-nume;
- c2.deno =deno;
- }
- return c2;
- }
- int CFraction::get_nume()
- {
- return nume;
- }
- int CFraction::get_deno()
- {
- return deno;
- }
MyCFrationDlg.cpp
- void CMyCFractionDlg::OnBnClickedButton1()
- {
- // TODO: Add your control notification handler code here
- 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); //用m_area的值更新界面上对应的控件的值并实现显示
- }
运行结果:
经验积累: