实验报告15--2

来源:互联网 发布:秒杀红包软件 编辑:程序博客网 时间:2024/04/28 17:53

/* (程序头部注释开始)
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生 
* All rights reserved.
* 文件名称:设计分数类,开发一个窗口式程序,可以完成分数的四则运算

* 作    者:               zhang  lu              
* 完成日期:     2012    年 05      月  25 日
* 版 本 号:       V1.0   
* 对任务及求解方法的描述部分
* 输入描述:
* 问题描述:
* 程序输出:

* 程序头部的注释结束

*/

CFraction.h

[cpp] view plaincopyprint?
  1. using namespace std;      
  2.     
  3. int gcd(int m, int n);      
  4.     
  5. class CFraction    
  6. {    
  7. private:    
  8.     int nume;  // 分子    
  9.     int deno;  // 分母    
  10. public:    
  11.     //构造函数及运算符重载的函数声明    
  12.     CFraction(int nu=0,int de=1);   //构造函数,初始化用      
  13.     void Simplify();                    //化简(使分子分母没有公因子)        
  14.     void output();           //输出:以8/6为例,style为0时,输出8/6;   
  15.     int get_nume();  
  16.     int get_deno();  
  17.     CFraction operator+(CFraction &c);       
  18.     CFraction operator-(CFraction &c);    
  19.     CFraction operator*(CFraction &c);      
  20.     CFraction operator/(CFraction &c);    
  21.     CFraction operator-();    
  22.         
  23. };    


CFraction.cpp

[cpp] view plaincopyprint?
  1. #include "stdafx.h"  
  2. #include <iostream>  
  3. #include"CFraction.h"  
  4. CFraction::CFraction(int nu,int de)   //构造函数,初始化用       
  5. {    
  6.        if (de!=0)      
  7.        {      
  8.            nume=nu;      
  9.            deno=de;      
  10.        }      
  11.        else      
  12.        {      
  13.            cerr<<"初始化中发生错误,程序退出\n";      
  14.            system("pause");      
  15.          exit(0);      
  16.        }      
  17. }    
  18. void CFraction::Simplify()                    //化简(使分子分母没有公因子)     
  19. {     
  20.     int n;    
  21.     if(nume < 0)      
  22.     {      
  23.         n = gcd(-nume, deno);      
  24.     }      
  25.     else      
  26.     {      
  27.         n = gcd(nume, deno);      
  28.     }      
  29.       
  30.     nume = nume / n;        
  31.       
  32.     deno = deno / n;    
  33. }    
  34. // 求m,n的最大公约数      
  35. int gcd(int m, int n)      
  36. {      
  37.     int r;      
  38.     if (m<n){r=m;m=n;n=r;}      
  39.     while(r=m%n)  // 求m,n的最大公约数      
  40.     {      
  41.         m=n;      
  42.         n=r;      
  43.     }      
  44.     return n;      
  45. }      
  46.     
  47. void CFraction::output()          //输出:以8/6为例,style为0时,输出8/6;     
  48. {    
  49.     cout<<nume<<'/'<<deno<<endl;    
  50. }    
  51.   
  52. CFraction CFraction::operator+(CFraction &c)    
  53. {    
  54.     CFraction c2,c3,c4;    
  55.     c2.nume =nume*c.deno ;    
  56.     c3.nume =c.nume *deno;    
  57.     c2.deno =deno*c.deno ;    
  58.     c3.deno =c.deno *deno;    
  59.     c4.nume=c2.nume +c3.nume ;    
  60.     c4.deno =c2.deno ;    
  61.     c4.Simplify ();    
  62.     return c4;    
  63. }    
  64. CFraction CFraction::operator-(CFraction &c)    
  65. {    
  66.     CFraction c2,c3,c4;    
  67.     c2.nume =nume*c.deno ;    
  68.     c3.nume =c.nume *deno;    
  69.     c2.deno =deno*c.deno ;    
  70.     c3.deno =c.deno *deno;    
  71.     c4.nume=c2.nume -c3.nume ;    
  72.     c4.deno =c2.deno ;    
  73.     c4.Simplify ();    
  74.     return c4;    
  75. }    
  76. CFraction CFraction::operator*(CFraction &c)     
  77. {    
  78.     CFraction c2,c3,c4;    
  79.     c2.nume =nume*c.nume  ;    
  80.     c2.deno =deno*c.deno ;    
  81.     c2.Simplify ();    
  82.     return c2;    
  83. }    
  84. CFraction CFraction::operator/(CFraction &c)    
  85. {    
  86.     CFraction c2,c3;    
  87.     c2.nume =c.deno ;    
  88.     c2.deno =c.nume ;    
  89.     c3.nume =nume*c2.nume ;    
  90.     c3.deno =deno*c2.deno ;    
  91.     c3.Simplify ();    
  92.     return c3;    
  93. }    
  94. CFraction CFraction::operator-()    
  95. {    
  96.     CFraction c2;    
  97.     c2.nume =nume;    
  98.     c2.deno =deno;    
  99.     c2.Simplify ();    
  100.     if(c2.nume<0 || c2.deno<0)    
  101.     {    
  102.         if(c2.nume <0)    
  103.         {    
  104.             c2.nume =-nume;    
  105.         }    
  106.         else    
  107.         {    
  108.             c2.deno =-deno;    
  109.         }    
  110.     }    
  111.     else    
  112.     {    
  113.         c2.nume =-nume;    
  114.         c2.deno =deno;    
  115.     }    
  116.     return c2;    
  117. }    
  118. int CFraction::get_nume()  
  119. {  
  120.     return nume;  
  121. }  
  122. int CFraction::get_deno()  
  123. {  
  124.     return deno;  
  125. }  


MyCFrationDlg.cpp

[cpp] view plaincopyprint?
  1. void CMyCFractionDlg::OnBnClickedButton1()  
  2. {  
  3.     // TODO: Add your control notification handler code here  
  4.     UpdateData(); //将把界面上各控件输入的值“捕获”到与之关联的变量中  
  5.     CFraction c1(c_1,c_2),c2(c_4,c_5),c;  
  6.     if(c_3=='+')  
  7.     {  
  8.         c=c1+c2;  
  9.         c_6=c.get_nume();  
  10.         c_7=c.get_deno();  
  11.     }  
  12.     else if(c_3=='-')  
  13.     {  
  14.         c=c1-c2;  
  15.         c_6=c.get_nume();  
  16.         c_7=c.get_deno();  
  17.     }  
  18.     else if(c_3=='*')  
  19.     {  
  20.         c=c1*c2;  
  21.         c_6=c.get_nume();  
  22.         c_7=c.get_deno();  
  23.     }  
  24.     else  
  25.     {  
  26.         c=c1/c2;  
  27.         c_6=c.get_nume();  
  28.         c_7=c.get_deno();  
  29.     }  
  30.     UpdateData(FALSE); //用m_area的值更新界面上对应的控件的值并实现显示  
  31. }  


运行结果:

经验积累:

原创粉丝点击