c++分数计算器课设.docx
- 文档编号:3617574
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:21
- 大小:348.32KB
c++分数计算器课设.docx
《c++分数计算器课设.docx》由会员分享,可在线阅读,更多相关《c++分数计算器课设.docx(21页珍藏版)》请在冰豆网上搜索。
c++分数计算器课设
c++分数计算器课设(总21页)
课程设计报告
课程名称算法与程序设计
课题名称分数计算器设计
专业信息与计算科学
班级1601班
学号1428
姓名王世成许依哲
指导教师王祝君、赵钍焱
2018年01月04日
湖南工程学院
课程设计任务书
课程名称算法与程序设计
课题分数计算器设计
专业班级信息与计算科学1601班
学生姓名王世成许依哲
学号1428
指导老师王祝君、赵钍焱
审批
任务书下达日期2017年12月18日
任务完成日期2018年01月04日
一.设计要求:
1、问题描述
定义一个整数类。
定义一个分数类,由整数类派生。
能对分数进行各种计算和输入/输出。
2、功能要求
(1)定义整数类和分数类。
其中,包括构造函数、析构函数、显示函数等。
(2)输入/输出:
对流提取和流插入运算符进行重载。
(3)计算功能:
可进行分数的加、减、乘和除法运算。
(4)化简功能:
将分数化简为最简分数。
(5)异常处理功能:
分数中分母不能为零。
(6)菜单功能:
每种功能的操作都是在菜单中进行相应选择。
3、问题的解决方案
根据系统功能要求,可以将问题解决分为以下步骤:
应用系统分析,建立该系统的功能模块框图以及界面的组织和设计;
(2)分析系统中的各个实体及它们之间的关系;
(3)根据问题描述,设计系统的类层次;
(4)完成类层次中各个类的描述;
(5)完成类中各个成员函数的定义;
(6)完成系统的应用模块;
(7)功能调试;
(8)完成系统总结报告。
前言
在网站上找了一个源代码对它进行了分析,我们一起读懂这个程序在这个过程当中碰到我不懂的和他不懂的地方,但是经过两个人的合作最终把程序全部都读懂了,如由开始的定义整数类,不清楚为什么要定义两个,后来慢慢看下去之后就知道了,因为这个要由整数类派生出分数类,在后面也碰到王看不懂的地方如约分,经过我给他举实例然后再通过用程序代码打上去,慢慢就对这个分数计算器的计算功能全部了解了,包括后面的层次图,我通过上网XX层次图的结构,他则对整个程序进行分析,从整个层面上看。
拿到这个课题之后我们一起查找资料,源代码有很多不理解的地方,我们一起学习,一点点的理解。
还有层次图的设计,系统的调试,分析,一个个过程慢慢摸索,两个人互相帮助下,完成了这个课题。
系统调试过程出现一些问题,后来经过询问来老师,上网搜索的方法纠正了错误,让程序顺利进行。
二、设计内容
(一)需求分析
系统设计目的与意义:
制作一个分数计算器,以完成分数与分数,整数与分数之间的四则运算,以及分数的化简,并对分数进行输入/输出。
(二)总体设计
系统功能分析;
(1)定义整数类和分数类。
其中,包括构造函数、析构函数、显示函数等。
(2)输入/输出:
对流提取和流插入运算符进行重载。
(3)计算功能:
可进行分数的加、减、乘和除法运算。
(4)化简功能:
将分数化简为最简分数。
(5)异常处理功能:
分数中分母不能为零。
(6)菜单功能:
每种功能的操作都是在菜单中进行相应选择。
系统功能模块划分与设计(系统功能模块图):
(三)详细设计
类层次图
(四)系统调试
系统主界面
进行分数与整数运算调试
进行分数约分调试
进行分数与分数运算调试
退出调试
进行分母为0的调试
(六)使用说明及编程体会
按照屏幕上的提示进行操作,输入整数与分数,其次按照页面弹出来的文字进行分数与分数的四则运算或者整数与分数的四则运算,在调试的过程中我们忽略了这是由多个文件合并而来的大文件,之间合并在一起去操作,导致怎么运行都是出现一个错误,最后拆分开来就调试成功了,包括后面的处理整个过程真的有点麻烦,最后还是坚持下来了,觉得挺好的,当然完成这个课设也让我们再次感觉到这么学科的好处以及学习的乐趣
(七)关键源程序(带注释)
//分数计算器:
#include<>
classInteger//整数类
{
protected:
intfz;
intfm;
public:
Integer(inta=0,intb=1):
fz(a),fm(b){}
~Integer(){}
voiddisplay();
};
classFraction:
publicInteger//分数类,进行计算和输入输出
{
public:
Fraction(inta=0,intb=1):
Integer(a,b){}
friendistream&operator>>(istream&,Fraction&);//重载输入流
friendostream&operator<<(ostream&,Fraction&);//重载输出流
Fractionoperator+(Fraction&c);//重载+运算符(分数与分数)
Fractionoperator+(intn);//重载+运算符(整数与分数)
Fractionoperator-(Fraction&c);//重载-运算符(分数与分数)
Fractionoperator-(intn);//重载-运算符(整数与分数)
friendFractionoperator-(intn,Fraction&c);
Fractionoperator*(Fraction&c);//重载*运算符(分数与分数)
Fractionoperator*(intn);//重载*运算符(整数与分数)
Fractionoperator/(Fraction&c);//重载/运算符(分数与分数)
Fractionoperator/(intn);//重载/运算符(整数与分数)
friendFractionoperator/(intn,Fraction&c);
Fractionpredigest();//约分函数
voiddisplay();
};
//实现函数(分数计算器设计)
#include<>
//#include"分数计算器"
voidInteger:
:
display()
{
cout< cout<<"------------------分数计算器-----------------"< cout<<"请选择功能: "< cout<<"1分数与整数的四则运算。 "< cout<<"2整数与分数的四则运算。 "< cout<<"3分数与分数的四则运算。 "< cout<<"0输入0退出。 "< } FractionFraction: : predigest()//定义约分函数 { intn,d,t,sign=1; Fractiontemp; if(fz<0&&fm<0) { fz=-fz; fm=-fm; } if(fz>0&&fm<0) { fm=-fm; sign=-1; } if(fz<0&&fm>0) { fz=-fz; sign=-1; } n=fz; d=fm; intr; if(n {t=n;n=d;d=t;} r=n%d; while(r! =0) { n=d; d=r;//d为最大公约数 r=n%d; } =sign*(fz/d); =fm/d; returntemp; } FractionFraction: : operator+(Fraction&c)//重载两个分数的加法运算符 { Fractiontemp; =fz*+fm*; =fm*; returntemp; } FractionFraction: : operator+(intn)//重载分数和整数的加法运算 { Fractiontemp; =fm*n+fz; =fm; returntemp; } Fractionoperator-(intn,Fraction&c) { Fractiontemp; =*; =; returntemp; } FractionFraction: : operator-(intn)//重载分数减整数的减法运算符 { Fractiontemp; =fz-fm*n; =fm; returntemp; } FractionFraction: : operator-(Fraction&c)//重载两个分数的减法运算符 { Fractiontemp; =fz*-fm*; =fm*; returntemp; } FractionFraction: : operator*(Fraction&c)//重载两个分数的乘法运算符 { Fractiontemp; =fz*; =fm*; returntemp; } FractionFraction: : operator*(intn)//重载分数与整数的乘法运算符 { Fractiontemp; =fz*n; =fm; returntemp; } FractionFraction: : operator/(Fraction&c)//重载两个分数的除法运算符 { Fractiontemp; =fz*; =fm*; returntemp; } FractionFraction: : operator/(intn)//重载分数除以整数的除法运算符 { Fractiontemp; =fz; =fm*n; returntemp; } Fractionoperator/(intn,Fraction&c) { Fractiontemp; =n*; =; returntemp; } ostream&operator<<(ostream&output,Fraction&t)//重载输出运算符,输出分数 { inta,b,c; a=; b=; if(a==0||b==0)//当分子,或者分母为0时,输出0 cout<<"0"; if(b==1)//当分母为1时,输出分子 cout< if(a>b&&b! =1)//判断分数为假分数 { c=a/b; a=a%b; cout< if(a! =0) cout<<"又"< } if(a<0&&-a>b&&b! =1)//当分数为负时,判断为假分数 { c=-a/b; a=-a%b; c=-c; cout<<'='< if(a! =0) cout<<"又"< } if>0&&<&&! =0&&! =1)//判断为真分数 output<<<<'/'<<; if<0&&<&&! =0&&! =1)//判断为真分数 output<<"("<<<<'/'<<<<")"; returnoutput; } istream&operator>>(istream&input,Fraction&t)//重载输入运算符,输入分数 {inta,c; charb; input>>a>>b>>c; if(b=='/'&&c! =0) { =a; =c; } else cout<<"错误! ! ! 输入格式错误或分母为0! 请退出重新输入! "< returninput; } #include<> intmain()//main函数 { Integerdis; Fractiona,b,result,real; intm,z; charc;//数据类型 (); while(m! =0) { cout<<"请输入: (0-3): "; cin>>m; if(m==1)//分数与整数的运算 { cout< "; cin>>a; cout< "; cin>>c; cout< "; cin>>z; if(c=='+') result=a+z; if(c=='-') result=a-z; if(c=='*') result=a*z; if(c=='/') result=a/z; real=(); cout<<"运算式规范为:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c+ 分数 计算器
![提示](https://static.bdocx.com/images/bang_tan.gif)