当前位置: 首页 > news >正文

C++分数计算器

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,我试着查找问题所在,最后原来是赋值错了,修改完毕,运行完美,到此结束,程序结束。虽说做本次实验途中出现了许多问题,但最后也都被解决了。从中看出了自己的不足之处有很多,希望通过本次实验以后自己能汲取这些失败的教训,为以后的学习打好坚实的基础。

相关文章:

  • 为何要3次握手?TCP协议的稳定性保障机制
  • 02.PostgreSQL 查询处理期间发生了什么?
  • 实现一个简单的网络通信下(udp)
  • 计算机网络——传输层
  • C++ 智能指针和内存管理:使用指南和技巧
  • 鸿蒙App开发 HarmonyOS:网络请求+三方库使用+底栏切换+列表+Banner
  • Python 错误 TypeError: __str__ Returned Non-String but Printing Output
  • Redis中缓存穿透、击穿、雪崩以及解决方案
  • PHP如何实现邮箱验证
  • 如何解决ajax浏览器缓存
  • 微信小程序保存二维码的过程
  • 构建第一个ArkTS应用(纯HarmonyOS应用)
  • 打印菱形图案C语言
  • C++服务器 支持http、tcp protobuf、websocket,linux开源框架 零依赖轻松编译部署 Reactor
  • SCAU:前一个和后一个字符
  • 【Amaple教程】5. 插件
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • 5、React组件事件详解
  • Linux gpio口使用方法
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • PermissionScope Swift4 兼容问题
  • React组件设计模式(一)
  • 百度地图API标注+时间轴组件
  • 鱼骨图 - 如何绘制?
  • 《码出高效》学习笔记与书中错误记录
  • k8s使用glusterfs实现动态持久化存储
  • MPAndroidChart 教程:Y轴 YAxis
  • puppet连载22:define用法
  • 阿里云服务器购买完整流程
  • 交换综合实验一
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • (echarts)echarts使用时重新加载数据之前的数据存留在图上的问题
  • (LeetCode 49)Anagrams
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (论文阅读22/100)Learning a Deep Compact Image Representation for Visual Tracking
  • (论文阅读30/100)Convolutional Pose Machines
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (十八)SpringBoot之发送QQ邮件
  • (十六)Flask之蓝图
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • (一)kafka实战——kafka源码编译启动
  • (最简单,详细,直接上手)uniapp/vue中英文多语言切换
  • ****Linux下Mysql的安装和配置
  • *上位机的定义
  • .NET开源项目介绍及资源推荐:数据持久层
  • .NET设计模式(11):组合模式(Composite Pattern)
  • ;号自动换行
  • @Transient注解
  • [1181]linux两台服务器之间传输文件和文件夹
  • [BZOJ 4598][Sdoi2016]模式字符串
  • [C]整形提升(转载)
  • [Flutter]设置应用包名、名称、版本号、最低支持版本、Icon、启动页以及环境判断、平台判断和打包
  • [IDF]啥?
  • [IE编程] IE 是如何决定Accept-Language 属性的