分数计算器设计-韩明泽

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

荆楚理工学院
课程设计成果
学院: 计算机工程学院班级: 2014级计算机科学与技术2班
学生姓名: 韩明泽学号: 2014404010216
设计地点(单位)教学楼B栋102实验室
设计题目: 分数计算器设计
完成日期: 2016 年 06 月 18 日
指导教师评语:
成绩(五级记分制):
教师签名:
C++面向对象程序设计课程设计报告
摘要
随着面向对象程序设计方法的不断普及和应用,学习和掌握C++语言已经成为许多计算机专业工作者和广大计算机应用人员的迫切需要。

C++语言是在C语言基础上扩充了面向对象机制而形成的一种面向对象程序设计语言,它继承了C 语言的全部优点和功能外,还支持面向对象程序设计。

本次分数计算器设计运用了C++中类和派生类的使用,实行对流提取和流插入运算符进行重载;分数对整数的加、减、乘和除法运算;整数对分数的加、减、乘和除法运算;分数对分数的加、减、乘和除法运算。

最后对整个设计过程进行了总结。

【关键词】:C++;类;分数的加、减、乘、除计算。

目录
1、问题描述 (1)
2、功能要求 (1)
3、问题的解决方案 (1)
4、功能调试 (2)
4.1 开始界面 (2)
4.2 分数与整数的加法运算调试 (3)
4.3 整数与分数的减法运算调试 (3)
4.4 分数与分数的乘法运算调试 (4)
4.5 分数与分数的除法运算调试 (4)
4.6 分数分母为0错误测试 (5)
5、总结 (5)
参考文献 (6)
附录:源代码 (7)
1、问题描述
定义一个整数类。

定义一个分数类,由整数类派生出。

能对分数进行各种计算和输入/输出。

2、功能要求
(1)定义整数类和分数类。

其中,包括构造函数、析构函数、显示函数等。

(2)输入/输出:对流提取和流插入运算符进行重载。

(3)计算功能:可进行分数的加、减、乘和除法运算。

(4)化简功能:将分数化简为最简分数。

(5)异常处理功能:分数中分母不能为零。

(6)菜单功能:每种功能的操作都是在菜单中进行相应选择。

3、问题的解决方案
根据系统功能要求,可以将问题解决分为以下步骤:
(1)应用系统分析,建立该系统的功能模块框图以及界面的组织和设计;
图3.1 功能应用模块
(2)分析系统中的各个实体及它们之间的关系;
图3.1 各个实体关系
(3)根据问题描述,设计系统的类层次;
class Integer //定义整数类
class Fraction:public Integer //分数类,由整数类进行派生friend istream & operator>>(istream & ,Fraction & ); //重载输入流
friend ostream & operator<<(ostream & ,Fraction & ); //重载输出流
(4)完成类中各个成员函数的描述和定义;
Fraction(int a=0,int b=1) //分数类成员函数
display() //实现成员函数
operator+(Fraction &c) //重载两个分数的加法运算符
operator-(Fraction &c) //重载两个分数的减法运算符
operator*(Fraction &c) //重载两个分数的乘法运算符
operator/(Fraction &c) //重载两个分数的除法运算符
operator+(int n) //重载分数和整数的加法运算
operator-(int n) //重载分数减整数的减法运算符
operator *(int n) //重载分数与整数的乘法运算符
operator/(int n) //重载分数除以整数的除法运算符
Fraction predigest(); //约分函数
main() //主函数
4、功能调试
4.1 开始界面
图4.1 开始界面
图4.2 分数与整数的加法运算4.3 整数与分数的减法运算调试
图4.3 整数与分数的减法运算
图4.4 分数与分数的乘法运算调试4.5 分数与分数的除法运算调试
图4.5 分数与分数的除法运算调试
4.6 分数分母为0错误测试
图4.6 错误测试
5、总结
通过此次的课程设计,我们将本学期由课本上所学习的有关内容应用到实践当中,刚开始拿到手感觉一头雾水,不知道到底是从哪里开头去设计一个课题,虽然提供了解决方案让我可以照着步骤去做,但是没有老师的辅导,下手真不容易。

后来在老师的帮助下理清了程序设计的一条条思路后,画了设计层次图,然后一步一步深入,把程序完成了。

其中也遇到很多麻烦,在网上搜索解决了问题。

这一次课程设计也使我在应用过程中更加清楚的了解并掌握C++语言的各部分的内容,进一步加深了对C++语言的认识与理解,尤其注重了C++语言与C 语言不同的部分,同时提高了个人程序设计思想,及时发现一些错误,并在调试过程中更加深刻的认识到C++语言程序的严谨性。

认识到C++语言,他不仅全面兼容了C语言,保持了C语言的简洁、高效和接近汇编语言的特点,更对C的类型系统进行了改革和扩充,比C语言更安全,编译系统更强大。

总之,通过此次课程设计,我们学到了许多我们在书本上学不到的知识,受益匪浅。

通过实践,我们能更好地掌握C++语言,并运用它编写应用程序。

我们对它的功能和实用性、严密性,和对程序的编写都有了比较深刻的体会。

毫无疑问,编程过程中我们遇到了许多问题,但通过我们不懈的努力,团结奋斗的精神,我们终究将问题一一解除,最终实现了程序的各项功能。

虽然我们的程序还不够完善,加以改进以实现更多的功能。

但通过这次的课程设计我们不仅学到了许多知识,学会如何设计一个应用程序,包括程序设计方法,调试程序,还学会如何解决问题,学会将所学知识运用到实际情况中。

参考文献
[1]李素若,杜华兵编.《C++面向对象程序设计》.北京:中国水利水电出版社,2013.
[2]李素若,杜华兵编.《C++面向对象程序设计习题解答及上机指导》.北京:中国水利水电
出版社,2013.
[3]郑莉,傅仕星编.《C++面向对象程序设计》.清华大学出版社,2003.
[4]谭浩强编.《C++面向对象程序设计》.北京:清华大学出版社,2006.
[5]Davis Chapman,《学用Visual c++ 6.0》,清华大学出版社,2001.
附录:源代码
//分数计算器h.h:
#include<iostream.h>
class Integer //整数类
{
protected:
int fz;
int fm;
public:
Integer(int a=0,int b=1):fz(a),fm(b){}
~Integer(){}
void display();
};
class Fraction:public Integer //分数类,进行计算和输入输出
{
public:
Fraction(int a=0,int b=1):Integer(a,b){}
friend istream & operator>>(istream & ,Fraction & ); //重载输入流
friend ostream & operator<<(ostream & ,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();
};
//实现函数(分数计算器设计)
#include<iostream.h>
//#include"分数计算器h.h"
void Integer::display ()
{
cout<<endl;
cout<<" ------------------分数计算器-----------------"<<endl<<endl;
cout<<" 请选择功能: "<<endl;
cout<<" 1 分数与整数的四则运算。

"<<endl<<endl; cout<<" 2 整数与分数的四则运算。

"<<endl<<endl; cout<<" 3 分数与分数的四则运算。

"<<endl<<endl; cout<<" 0 输入0退出。

"<<endl<<endl;
}
Fraction Fraction::predigest()//定义约分函数
{
int n,d,t,sign=1;
Fraction temp;
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;
int r;
if(n<d) //辗转相除,求分子n与分母d的最大公约数{t=n;n=d;d=t;}
r=n%d;
while(r!=0)
{
n=d;
d=r; //d为最大公约数
r=n%d;
}
temp.fz=sign*(fz/d);
temp.fm=fm/d;
return temp;
}
Fraction Fraction::operator+(Fraction &c)//重载两个分数的加法运算符
{
Fraction temp;
temp.fz=fz*c.fm+fm*c.fz;
temp.fm=fm*c.fm;
return temp;
}
Fraction Fraction::operator+(int n)//重载分数和整数的加法运算
{
Fraction temp;
temp.fz=fm*n+fz;
temp.fm=fm;
return temp;
}
Fraction operator-(int n,Fraction &c)
{
Fraction temp;
temp.fz=c.fm*n-c.fz ;
temp.fm=c.fm;
return temp;
}
Fraction Fraction::operator-(int n) //重载分数减整数的减法运算符
{
Fraction temp;
temp.fz=fz-fm*n;
temp.fm=fm;
return temp;
}
Fraction Fraction::operator-(Fraction &c) //重载两个分数的减法运算符
{
Fraction temp ;
temp.fz =fz*c.fm -fm*c.fz;
temp.fm =fm*c.fm;
return temp;
}
Fraction Fraction::operator*(Fraction &c) //重载两个分数的乘法运算符
{
Fraction temp;
temp.fz=fz*c.fz;
temp.fm=fm*c.fm;
return temp;
}
Fraction Fraction::operator *(int n) //重载分数与整数的乘法运算符
{
Fraction temp;
temp.fz=fz*n;
temp.fm=fm;
return temp;
}
Fraction Fraction::operator/(Fraction &c) //重载两个分数的除法运算符
{
Fraction temp;
temp.fz=fz*c.fm;
temp.fm=fm*c.fz;
return temp;
}
Fraction Fraction::operator/(int n) //重载分数除以整数的除法运算符
{
Fraction temp;
temp.fz=fz;
temp.fm=fm*n;
return temp;
}
Fraction operator /(int n,Fraction &c)
{
Fraction temp;
temp.fz =n*c.fm ;
temp.fm =c.fz ;
return temp;
}
ostream& operator<<(ostream &output,Fraction &t) //重载输出运算符,输出分数
{
int a,b,c;
a=t.fz;
b=t.fm;
if(a==0||b==0) //当分子,或者分母为0时,输出0 cout<<"0";
if(b==1) //当分母为1时,输出分子
cout<<a;
if(a>b&&b!=1) //判断分数为假分数
{
c=a/b;
a=a%b;
cout<<c;
if(a!=0)
cout<<"又"<<a<<'/'<<b;
}
if(a<0&&-a>b&&b!=1) //当分数为负时,判断为假分数
{
c=-a/b;
a=-a%b;
c=-c;
cout<<'='<<c;
if(a!=0)
cout<<"又"<<a<<'/'<<b<<endl;
}
if(t.fz>0&&t.fz<t.fm && t.fm!=0&&t.fm!=1) //判断为真分数
output<<t.fz<<'/'<<t.fm;
if(t.fz<0 && -t.fz<t.fm && t.fm!=0 && t.fm!=1) //判断为真分数output<<"("<<t.fz<<'/'<<t.fm<<")";
return output;
}
istream& operator>>(istream &input,Fraction &t) //重载输入运算符,输入分数
{ int a,c;
char b;
input>>a>>b>>c;
if(b=='/' && c!=0 )
{
t.fz=a;
t.fm=c;
}
else
cout<<"错误!!!输入格式错误或分母为0!请退出重新输入!"<<endl;
return input;
}
#include<iostream.h>
int main() //main函数
{
Integer dis;
Fraction a,b,result,real;
int m,z;
char c; //数据类型
dis.display ();
while(m!=0)
{
cout<<" 请输入:(0-3): ";
cin>>m;
if(m==1) //分数与整数的运算
{
cout<<endl<<" 请输入一个分数: ";
cin>>a;
cout<<endl<<" 请输入运算符: ";
cin>>c;
cout<<endl<<" 输入一个正整数: ";
cin>>z;
if(c=='+')
result=a+z;
if(c=='-')
result=a-z;
if(c=='*')
result=a*z;
if(c=='/')
result=a/z;
real=result.predigest();
cout<<"运算式规范为:"<<a<<c<<z<<'='<<a.predigest ()<<c<<z<<'='<<real<<endl;
cout<<endl;
}
if(m==2) //整数与分数的运算
{
cout<<endl;
cout<<endl<<" 请输入一个正整数: ";
cin>>z;
cout<<endl<<" 请输入运算符: ";
cin>>c;
cout<<endl<<" 请输入一个分数: ";
cin>>b;
if(c=='+')
result=b+z;
if(c=='-')
result=z-b;
if(c=='*')
result=b*z;
if(c=='/')
result=z/b;
real=result.predigest();
cout<<"运算式规范为: "<<z<<c<<b<<'='<<z<<c<<b.predigest ()<<'='<<real<<endl;
cout<<endl;
}
if(m==3) //分数与分数的运算
{
cout<<endl;
cout<<endl<<" 请输入一个分数: ";
cin>>a;
cout<<endl<<" 请输入运算符: ";
cin>>c;
cout<<endl<<" 请输入一个分数: ";
cin>>b;
if(c=='+')
result=a+b;
if(c=='-')
result=a-b;
if(c=='*')
result=a*b;
if(c=='/')
result=a/b;
real=result.predigest();
cout<<"运算式规范为:"<<a<<c<<b<<'='<<a.predigest ()<<c<<b.predigest ()<<'='<<real<<endl;
cout<<endl;
}
}
return 0;
}。

相关文档
最新文档