C++分数计算器各种分数计算类型都能计算
代码:https://mbd.pub/o/bread/ZZeZk5hx
一 目的
(1)定义一个整数类。 定义一个分数类,由整数类派生。能对分数进行各种计算和输入/输出。可进行分数的加、减、乘和除法等四则运算。
流程图:
流程图
二 需求分析
1、问题描述
实现分数的计算器功能,对分数进行四则运算和输入/输出。
2、需求以及实现功能介绍
(1)定义整数类和分数类。其中,包括构造函数、析构函数、显示函数等。
(2)输入/输出:对流提取和流插入运算符进行重载。
(3)计算功能:可进行分数的加、减、乘和除法运算。
(4)化简功能:将分数化简为最简分数。
(5)异常处理功能:分数中分母不能为零。
(6)菜单功能:每种功能的操作都是在菜单中进行相应选择。
3、设计步骤
根据系统功能要求,可以将问题解决分为以下步骤:
(1)应用系统分析,建立该系统的功能模块框图以及界面的组织和设计;
(2)分析系统中的各个实体及它们之间的关系;
(3)根据问题描述,设计系统的类层次;
(4)完成类层次中各个类的描述;
(5)完成类中各个成员函数的定义;
(6)完成系统的应用模块;
(7)功能调试;
(8)完成系统总结报告。
三 概要设计
1、函数类设计
(1)正数类设计
class Integer //定义一个整数类{protected: //私有属性 int fz; //分子 int fm; //分母 public: //公有属性 Integer(int a=0,int b=1):fz(a),fm(b){}~Integer(){} //析构函数 void display(); //显示函数 };
2、整数类派生分数类的关系
3、所有函数和类的定义
Fraction(int a=0,int b=1):Integer(a,b){}//分数类成员
friend istream & operator>>(istream &input,Fraction &); //输入重载friend ostream & operator<<(ostream &output,Fraction &); //输出重载 Fraction operator+(Fraction &c);//重载+运算符(分数和分数) Fraction operator+(int n);//重载+运算符(整数与分数) Fraction operator-(Fraction &c);//重载-运算符(分数与分数) Fraction operator-(int n);//重载-运算符(整数与分数) friend Fraction operator-(int n,Fraction &c); Fraction operator*(Fraction &c);//重载*运算符(分数与分数) Fraction operator*(int n);//重载*运算符(整数与分数) Fraction operator/(Fraction &c);//重载/运算符(分数与分数)Fraction operator/(int n);//重载/运算符(整数与分数) friend Fraction operator/(int n,Fraction &c); Fraction predigest();//约分函数void display();//输出函数
main() //主函数
四 详细设计
设计流程图:
五 调试分析
1、调试方法
首先打开开发软件Visual Studio,运行程序,出现错误修改再运行,直至运行结果0 error , 0 warning 结束。接着进入程序界面,看程序能否实现所要求的各项功能,再作下一步的修改。
2、调试时出现的问题及解决方案:
(1)当多次运行程序时,屏幕被运行数据占满,显得很杂乱。解决方案:引用清屏函数,及时销掉所占内存。(2)在进行运算时要实现反复运算得有返回功能,由于我们程序分支,不能正常的调用完毕后进入下一个循环,自动返回。解决方案:用if语句,判断输入功能对于的数字,然后运行函数块。(3)还有一些小错误,比如未声明就直接使用变量、未对一些变量初始化、声明是空值函数却有返回值、缺少";"、使用getch() , system("cls")却 缺少相应的头文件﹐出现警告。
六 测试结果
1、主界面调试
2、分数与整数运算调试:
七 用户使用说明
按照屏幕上的提示进行操作,输入整数与分数,其次按照页面弹出来的文字进行分数与分数的四则运算或者整数与分数的四则运算。分数计算器程序的每种功能都可以用菜单选项列出,用户可以根据需要选择相应的菜单项,从而执行不同的子程序以完成相应的功能。增加运算符重载功能,使所设计的分数计算器可以进行四则运算&幂运算&逻辑运算。四则运算&幂运算可以用菜单选项列出,用户可以根据需要选择相应的运算。程序具有判断功能,当有非法的输入时(如分母等于零等),能给出提示信息并退出运算。
八 课程设计总结
在这次C++编程过程中,我基本完成了编写程序和实习要求,经过知识的考验,让我深有感触,也让我知道编程不仅需要聪明的头脑,而且也需要耐心和恒心。在程序调试过程中,出现了很多错误和本不应该出现的毛病,然在老师的指导和同学们的帮助下,我把调试过程中的错误和毛病一一更正,完成了调试和编写程序过程,在这里我对谆谆教导我的老师和鼎立相助的同学们表示感谢。在这次设计中,我清楚的知道自己的知识结构和能力水平的不足,在原有的基础之上更应该有待加强,学人之长,补己之短,也要严谨认真的对待每一个问题。同时也要加强自身的自学能力和提高自我解决问题的能力水平,在这次实习中,我清楚的知道自己的知识结构和能力水平的不足,在原有的基础之上更应该有待加强,学人之长,补己之短,也要严谨认真的对待每一个问题。同时也要加强自身的自学能力和提高自我解决问题的能力水平。在设计过程中涉及到派生类,必须从整数类中派生分数类,还得有构造函数、析构函数、显示函数等。 虽说上面这些老师都讲过,但我还没有掌握住,不得不把书拿出来看一遍。随后就是分数与分数,分数与整数,整数与分数的约分了,若果两个分数相加还得同分,约分,求出最大公约数。又上网补习了这一方面的知识,还好网上的这些知识比较容易理解,在这方面没有浪费多长时间。最后无非就是输入输出流的重载了,说真的我对这些知识懵懵懂懂,一知半解。途中这方面出了问题,也不知道哪错了,日志里就是说输入输出流里面的问题,于是又上网查了些这些问题,最后不知道改了哪个地方,程序好了,能运行了,搞得我很懵逼。既然程序能运行了,我就试着运行了,首先我运行了分数与整数的运算,没啥问题,对我来说是个很好的信号。随后我又运行了分数与分数运算,出错了结果为0,我试着查找问题所在,最后原来是赋值错了,修改完毕,运行完美,到此结束,程序结束。虽说做本次实验途中出现了许多问题,但最后也都被解决了。从中看出了自己的不足之处有很多,希望通过本次实验以后自己能汲取这些失败的教训,为以后的学习打好坚实的基础。