面向对象程序设计大作业报告.doc_第1页
面向对象程序设计大作业报告.doc_第2页
面向对象程序设计大作业报告.doc_第3页
面向对象程序设计大作业报告.doc_第4页
面向对象程序设计大作业报告.doc_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

面向对象程序设计大作业-计算器类学 院 名 称 (四号宋体居中)填写全称 专业班级 (四号宋体居中)填写全称 学生姓名 (四号宋体居中) 学 号 (四号宋体居中) 指 导 教 师 (四号宋体居中) 完成时间: 年 月 日计算器类1. 编程目的2. 系统简介本计算器程序可以进行加减乘除平方的基本运算,及二进制,十进制,八进制,十六进制之间的转换,三角函数的计算。程序是用类实现的,采用多文件结构。3. 编程思路将程序分成三个模块,分别是:加减乘除平方基本运算模块;进制转换模块;三角函数计算模块;然后设计一个menu()函数将对三个模块进行调用,该函数通过主函数进行调用。程序分成三个文件,分别是:calculator.h 、caculator.cpp main.cpp;4. 总体设计(附类图)(1)加减乘除平方进本运算模块:该功能主要是利用运算符重载,对+ - * / 进行重载,使其完成相应的计算;用户首先输入要计算的表达式,然后从表达式中提取出运算数和运算符,如果输入有误则对用户进行提示,让其重新进行输入;利用构造函数构造三个变量,分别对应运算数和结果,判断运算符的类型,调用重载函数进行计算通过构造函数将计算结果进行保存,最后调用类中的show()函数将结果显示出来;特别的,对于除法运算,应该判断除数是否为0,然后进行计算,由于计算结果可能不是整数,所以增加对double类型的构造函数,显示结果时调用的是show2()函数进行显示。(2)进制转换模块:本程序不光可以进行2,4,8,16进制之间的转换,可以进行任意进制之间的转换。用户首先输入需要进行进制转换的数和该数的进制,然后输入想要转换的进制。通过构造函数产生两个变量,然后调用scalechange()函数进行进制转换。并将结果进行输出。(3)三角函数模块:程序可对8种三角函数进行计算,用户首先输入三角函数表达式,然后程序从表达式中提取出想用的三角函数和运算数,然后判断三角函数的类型,通过构造函数定义类的变量,调用TriFunction()进行计算,同样的因为计算的三角函数的数比一定为整数,所以设置flaot类型的构造函数;在类中分别实现8中三角函数的功能,判断用户要计算的函数进行调用。(4)菜单函数:设置4个选项,分别为:加减乘除平方基本运算;进制转换;三角函数实现;退出程序。用户首先进行选择,如果输入正确,则根据选择调用相应的函数,否则提示用户重新进行输入,直到输入正确。(5)主程序:主程序比较简单,只是调用了menu()函数。(6)程序中用到的其他函数system(“pause”);表示按任意键继续;system(“cls”);表示将屏幕上的所有内容清除,为了让界面整洁。5. 关键技术说明(1) 加减乘除平方进本运算模块对于字符串和整数之间的转化利用了c语言中的函数atoi();通过调用类中的getnum()函数来判断除数是否为0。(2) 进制转换模块:在进行进制转换时用到了栈,直接运用STL中的stack,包含在头文件stack中。具体方法是:首先将要进行转换的数转化成10进制,然后将10进制转化成目的进制。转化成10进制的代码:基本思想是:对于n进制数abcdefg,转换成10进制数为:a*n6 + b*n5 + c*n4 + d*n3 +e*n2 + f*n1 + g*n0将十进制数m转换成n进制的思想是:不断将m%n放入栈中,直到m=0,然后依次输出栈的栈顶元素,直到栈为空。考虑到对于16进制的数,数中可能会输入ABCDEF或者abcdef,所以将输入的数字转换成字符串形式,并进行判断转换。(3) 三角函数模块:首先定义:char a86=log,log10,sin,asin,cos,acos,tan,atan;数组中包含的是三角函数。对数组进行遍历,同时通过函数strcmp()判断要计算的函数是否在其中,有的话调用函数直接进行计算,否则,提示用户重新进行输入。类中三角函数的实现直接调用了C语言中math.h头文件中的函数。通过函数atof()将字符串转化为flaot类型的数。6. 源代码calculator.h#ifndef CALCULATOR_H#define CALCULATOR_Hclass calculatorprivate:int num;double num2;int scal;/几进制char tri10;/三角函数float ang;/弧度public:calculator(int a);/加减乘除calculator(double a);/计算除法calculator(int a,int b);/进制转换calculator(float a,char *s);/三角函数void show();void show2();/除法输出int getnum();calculator operator +(const calculator &c2);/加calculator operator -(const calculator &c2);/减calculator operator *(const calculator &c2);/乘calculator operator /(const calculator &c2);/除calculator operator (const calculator &c2);/平方void scalechange();/进制转换void TriFunction();/三角函数void Cos();void Sin();void Log();void Log10();void Asin();void Acos();void Tan();void Atan();#endifcalculator.cpp#include#include#include#include#include#include#include calculator.husing namespace std;void menu();calculator:calculator(int a)num=a;calculator:calculator(double a)num2=a;calculator:calculator(int a,int b)num=a;scal=b;calculator:calculator(float a,char *s)ang=a;strcpy(tri,s);void calculator:show()cout结果为:numendl;void calculator:show2()cout结果为:setprecision(3)num2endl;calculator calculator:operator +(const calculator &c2)return calculator(num+c2.num);calculator calculator:operator -(const calculator &c2)return calculator(num-c2.num);calculator calculator:operator *(const calculator &c2)return calculator(num*c2.num);calculator calculator:operator /(const calculator &c2)return calculator(1.0*num/c2.num);calculator calculator:operator (const calculator &c2)return calculator(num*num);int calculator:getnum()return num;void calculator:scalechange()int a,b,i,j=1,n;i=1;a=0;coutn;if(scal=16)/转换成十进制for(i=strlen(num3)-1;i=0;i-)if(num3i=A & num3i=a & num3i=0;i-)a+=j*(num3i-0);j*=scal;stacks;while(a)s.push(a%n);a/=n;coutscal 进制数 num3转换成 n 进制数为: ;while(!s.empty()couts.top() ;s.pop();coutendl;system(pause);system(cls);menu();void calculator:Cos()cout计算结果为:cos(ang)endl;void calculator:Sin()cout计算结果为:sin(ang)endl;void calculator:Log()cout计算结果为:log(ang)endl;void calculator:Log10()cout计算结果为:log10(ang)endl;void calculator:Asin()cout计算结果为:asin(ang)endl;void calculator:Acos()cout计算结果为:acos(ang)endl;void calculator:Tan()cout计算结果为:tan(ang)endl;void calculator:Atan()cout计算结果为:atan(ang)endl;void calculator:TriFunction()int i,j=0;char a86=log,log10,sin,asin,cos,acos,tan,atan;for(i=0;i8;i+)if(strcmp(ai,tri)=0)j=1;break;if(j=0)cout您输入的三角函数表达式有误!请重新进行输入!endl;system(pause);system(cls);menu();elseswitch(i)case 0:Log();break;case 1:Log10();break;case 2:Sin();break;case 3:Asin();break;case 4:Cos();break;case 5:Acos();break;case 6:Tan();break;case 7:Atan();break;system(pause);system(cls);menu();main.cpp#include#include#include#include#include#include#include calculator.husing namespace std;void menu()int n;coutendl 欢迎使用本计算器,请根据提示选择相应的功能endl;cout endl;cout 1、加减乘除平方基本运算。endl;cout 2、进制转换。endl;cout 3、三角函数实现。endl;cout 0、退出程序。endlendl;coutn;switch(n)case 1:char express100;char a100,b100;char c;int i,count;cout请输入加减乘除表达式(表达式形式为ab= 代表加减乘除平方,以回车表示结束)endl;cout示例:(1)23+45 (2)23-22 (3)4*4 (4)12/3 (5)42endl;cout注:本计算器计算的是整数的基本运算。endl;cout请输入你的表达式:express;count=0;for(i=0;istrlen(express);i+)if(expressi=+ | expressi=- | expressi=* | expressi=/ | expressi=)break;elseacount+=expressi;c=expressi;i+;count=0;for(;istrlen(express);i+)bcount+=expressi;calculator c1(atoi(a);calculator c2(atoi(b);switch(c)case +:calculator c3(c1+c2);c3.show();system(pause);system(cls);menu();break;case -:calculator c3(c1-c2);c3.show();system(pause);system(cls);menu();break;case *:calculator c3(c1*c2);c3.show();system(pause);system(cls);menu();break;case /:if(c2.getnum()=0)cout除数为0!endl;system(pause);system(cls);menu();break;calculator c3(c1/c2);c3.show2();system(pause);system(cls);menu();break;case :calculator c3(c1c2);c3.show();system(pause);system(cls);menu();break;default:cout您输入的运算符有误!请重新进行输入!endl;system(pause);system(cls);menu();break;case 2:int m,mm;cout请输入需要进制转换的数和转换成的几进制的数:endl;cout注:本计算器针对的是整数之间的进制转换。endl;coutmmm;calculator c(m,mm);c.scalechange();break;case 3:int i,j;char exp100;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论