1、面向对象程序设计大作业报告面向对象程序设计大作业-计算器类学 院 名 称 (四号宋体居中)填写全称 专业班级 (四号宋体居中)填写全称 学生姓名 (四号宋体居中) 学 号 (四号宋体居中) 指 导 教 师 (四号宋体居中) 完成时间: 年 月 日计算器类1.编程目的2.系统简介本计算器程序可以进行加减乘除平方的基本运算,及二进制,十进制,八进制,十六进制之间的转换,三角函数的计算。程序是用类实现的,采用多文件结构。3.编程思路将程序分成三个模块,分别是:加减乘除平方基本运算模块;进制转换模块;三角函数计算模块;然后设计一个menu()函数将对三个模块进行调用,该函数通过主函数进行调用。程序分成
2、三个文件,分别是:calculator.h 、caculator.cpp main.cpp;4.总体设计(附类图)(1)加减乘除平方进本运算模块: 该功能主要是利用运算符重载,对+ - * / 进行重载,使其完成相应的计算;用户首先输入要计算的表达式,然后从表达式中提取出运算数和运算符,如果输入有误则对用户进行提示,让其重新进行输入;利用构造函数构造三个变量,分别对应运算数和结果,判断运算符的类型,调用重载函数进行计算通过构造函数将计算结果进行保存,最后调用类中的show()函数将结果显示出来;特别的,对于除法运算,应该判断除数是否为0,然后进行计算,由于计算结果可能不是整数,所以增加对dou
3、ble类型的构造函数,显示结果时调用的是show2()函数进行显示。(2)进制转换模块: 本程序不光可以进行2,4,8,16进制之间的转换,可以进行任意进制之间的转换。用户首先输入需要进行进制转换的数和该数的进制,然后输入想要转换的进制。通过构造函数产生两个变量,然后调用scalechange()函数进行进制转换。并将结果进行输出。(3)三角函数模块: 程序可对8种三角函数进行计算,用户首先输入三角函数表达式,然后程序从表达式中提取出想用的三角函数和运算数,然后判断三角函数的类型,通过构造函数定义类的变量,调用TriFunction()进行计算,同样的因为计算的三角函数的数比一定为整数,所以设
4、置flaot类型的构造函数;在类中分别实现8中三角函数的功能,判断用户要计算的函数进行调用。(4)菜单函数: 设置4个选项,分别为:加减乘除平方基本运算;进制转换;三角函数实现;退出程序。用户首先进行选择,如果输入正确,则根据选择调用相应的函数,否则提示用户重新进行输入,直到输入正确。(5)主程序: 主程序比较简单,只是调用了menu()函数。(6)程序中用到的其他函数 system(“pause”);表示按任意键继续; system(“cls”);表示将屏幕上的所有内容清除,为了让界面整洁。5.关键技术说明(1)加减乘除平方进本运算模块对于字符串和整数之间的转化利用了c语言中的函数atoi(
5、);通过调用类中的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,所以将输入的数字
6、转换成字符串形式,并进行判断转换。(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 n
7、um; 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 -(c
8、onst 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(
9、); 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) an
10、g=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 calcu
11、lator: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:scalechang
12、e() 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
13、 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
14、计算结果为: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(); else switch(i) case 0:
15、 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 namespa
16、ce 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
17、)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; else acount+=expressi; c=expressi; i+; count=0; for(;istrlen(express);i+) bcount+=expressi; calculator c1(
18、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 /
19、: 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);
20、 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;cout请输入三角函数表达式(示例:sin(0),cos(0),tan(0),log(0)等):endl;cout注:本计算器计算的类型是弧度的三角函数。exp; char a10,b10; memset(a,0,sizeof(a); memset
21、(b,0,sizeof(b); j=0; for(i=0;istrlen(exp);i+) if(expi=() break; aj+=expi; i+; j=0; for(;istrlen(exp);i+) if(expi=) break; bj+=expi; calculator c(atof(b),a); c.TriFunction(); break; case 0: cout谢谢使用本计算器,程序作者:韩邵杰endl; exit(0); break; default: cout您的选择有误!请重新进行选择!endl; system(pause); system(cls); menu(); break; int main() menu(); return 0;7.测试(主界面及各功能模块的运行图及说明)(1)程序运行后的界面:(2)选择1进行加减乘除平方运算:(3)按任意键继续之后回到界面(1),然后减输入乘除平方进行测试: (4)除法运算除数为0时:(5)进制转换:10进制转换成16进制:十进制转换成2进制:8进制转换成2进制:2进制转换成16进制:16进制转换成8进制:(6)三角函数测试:(7)选择0退出程序:8.系统评价及展望
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1