面向对象程序设计大作业报告.docx
《面向对象程序设计大作业报告.docx》由会员分享,可在线阅读,更多相关《面向对象程序设计大作业报告.docx(18页珍藏版)》请在冰豆网上搜索。
![面向对象程序设计大作业报告.docx](https://file1.bdocx.com/fileroot1/2022-12/1/75bf33ce-cf8b-440a-a164-8bea619c7c0a/75bf33ce-cf8b-440a-a164-8bea619c7c0a1.gif)
面向对象程序设计大作业报告
面向对象程序设计大作业
------计算器类
学院名称(四号宋体居中)填写全称
专业班级(四号宋体居中)填写全称
学生姓名(四号宋体居中)
学号(四号宋体居中)
指导教师(四号宋体居中)
完成时间:
年月日
计算器类
1.编程目的
2.系统简介
本计算器程序可以进行加减乘除平方的基本运算,及二进制,十进制,八进制,十六进制之间的转换,三角函数的计算。
程序是用类实现的,采用多文件结构。
3.编程思路
将程序分成三个模块,分别是:
加减乘除平方基本运算模块;进制转换模块;三角函数计算模块;然后设计一个menu()函数将对三个模块进行调用,该函数通过主函数进行调用。
程序分成三个文件,分别是:
calculator.h、caculator.cppmain.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*n^6+b*n^5+c*n^4+d*n^3+e*n^2+f*n^1+g*n^0
将十进制数m转换成n进制的思想是:
不断将m%n放入栈中,直到m=0,然后依次输出栈的栈顶元素,直到栈为空。
考虑到对于16进制的数,数中可能会输入ABCDEF或者abcdef,所以将输入的数字转换成字符串形式,并进行判断转换。
(3)三角函数模块:
首先定义:
chara[8][6]={"log","log10","sin","asin","cos","acos","tan","atan"};
数组中包含的是三角函数。
对数组进行遍历,同时通过函数strcmp()判断要计算的函数是否在其中,有的话调用函数直接进行计算,否则,提示用户重新进行输入。
类中三角函数的实现直接调用了C语言中math.h头文件中的函数。
通过函数atof()将字符串转化为flaot类型的数。
6.源代码
calculator.h
#ifndefCALCULATOR_H
#defineCALCULATOR_H
classcalculator
{
private:
intnum;
doublenum2;
intscal;//几进制
chartri[10];//三角函数
floatang;//弧度
public:
calculator(inta);//加减乘除
calculator(doublea);//计算除法
calculator(inta,intb);//进制转换
calculator(floata,char*s);//三角函数
voidshow();
voidshow2();//除法输出
intgetnum();
calculatoroperator+(constcalculator&c2);//加
calculatoroperator-(constcalculator&c2);//减
calculatoroperator*(constcalculator&c2);//乘
calculatoroperator/(constcalculator&c2);//除
calculatoroperator^(constcalculator&c2);//平方
voidscalechange();//进制转换
voidTriFunction();//三角函数
voidCos();
voidSin();
voidLog();
voidLog10();
voidAsin();
voidAcos();
voidTan();
voidAtan();
};
#endif
calculator.cpp
#include
#include
#include
#include
#include
#include
#include"calculator.h"
usingnamespacestd;
voidmenu();
calculator:
:
calculator(inta)
{
num=a;
}
calculator:
:
calculator(doublea)
{
num2=a;
}
calculator:
:
calculator(inta,intb)
{
num=a;
scal=b;
}
calculator:
:
calculator(floata,char*s)
{
ang=a;
strcpy(tri,s);
}
voidcalculator:
:
show()
{
cout<<"结果为:
"<}
voidcalculator:
:
show2()
{
cout<<"结果为:
"<}
calculatorcalculator:
:
operator+(constcalculator&c2)
{
returncalculator(num+c2.num);
}
calculatorcalculator:
:
operator-(constcalculator&c2)
{
returncalculator(num-c2.num);
}
calculatorcalculator:
:
operator*(constcalculator&c2)
{
returncalculator(num*c2.num);
}
calculatorcalculator:
:
operator/(constcalculator&c2)
{
returncalculator(1.0*num/c2.num);
}
calculatorcalculator:
:
operator^(constcalculator&c2)
{
returncalculator(num*num);
}
intcalculator:
:
getnum()
{
returnnum;
}
voidcalculator:
:
scalechange()
{
inta,b,i,j=1,n;i=1;a=0;
cout<<"想要转换成几进制的数?
请输入:
";
cin>>n;
if(scal==16)//转换成十进制
{
for(i=strlen(num3)-1;i>=0;i--)
{
if(num3[i]>='A'&&num3[i]<='F')
a+=j*(num3[i]-'A'+10);
elseif(num3[i]>='a'&&num3[i]<='f')
a+=j*(num3[i]-'a'+10);
else
a+=j*(num3[i]-'0');
j*=scal;
}
}
else//转换成十进制
{
for(i=strlen(num3)-1;i>=0;i--)
{
a+=j*(num3[i]-'0');
j*=scal;
}
}
stacks;
while(a)
{
s.push(a%n);
a/=n;
}
cout<";
while(!
s.empty())
{
cout<s.pop();
}
cout<system("pause");
system("cls");
menu();
}
voidcalculator:
:
Cos()
{
cout<<"计算结果为:
"<}
voidcalculator:
:
Sin()
{
cout<<"计算结果为:
"<}
voidcalculator:
:
Log()
{
cout<<"计算结果为:
"<}
voidcalculator:
:
Log10()
{
cout<<"计算结果为:
"<}
voidcalculator:
:
Asin()
{
cout<<"计算结果为:
"<}
voidcalculator:
:
Acos()
{
cout<<"计算结果为:
"<}
voidcalculator:
:
Tan()
{
cout<<"计算结果为:
"<}
voidcalculator:
:
Atan()
{
cout<<"计算结果为:
"<}
voidcalculator:
:
TriFunction()
{
inti,j=0;
chara[8][6]={"log","log10","sin","asin","cos","acos","tan","atan"};
for(i=0;i<8;i++)
{
if(strcmp(a[i],tri)==0)
{
j=1;
break;
}
}
if(j==0)
{
cout<<"您输入的三角函数表达式有误!
请重新进行输入!
"<system("pause");
system("cls");
menu();
}
else
{
switch(i)
{
case0:
Log();
break;
case1:
Log10();
break;
case2:
Sin();
break;
case3:
Asin();
break;
case4:
Cos();
break;
case5:
Acos();
break;
case6:
Tan();
break;
case7:
Atan();
break;
}
system("pause");
system("cls");
menu();
}
}
main.cpp
#include
#include
#include
#include
#include
#include
#include"calculator.h"
usingnamespacestd;
voidmenu()
{
intn;
cout<cout<<""<cout<<"1、加减乘除平方基本运算。
"<cout<<"2、进制转换。
"<cout<<"3、三角函数实现。
"<cout<<"0、退出程序。
"<cout<<"请做出你的选择:
";
cin>>n;
switch(n)
{
case1:
{
charexpress[100];
chara[100],b[100];
charc;
inti,count;
cout<<"请输入加减乘除表达式(表达式形式为a@b=@代表加减乘除平方,以回车表示结束)"<cout<<"示例:
(1)23+45
(2)23-22(3)4*4(4)12/3(5)4^2"<cout<<"注:
本计算器计算的是整数的基本运算。
"<cout<<"请输入你的表达式:
"<cin>>express;
count=0;
for(i=0;i{
if(express[i]=='+'||express[i]=='-'||express[i]=='*'||express[i]=='/'||express[i]=='^')
break;
else
a[count++]=express[i];
}
c=express[i];
i++;
count=0;
for(;ib[count++]=express[i];
calculatorc1(atoi(a));
calculatorc2(atoi(b));
switch(c)
{
case'+':
{
calculatorc3(c1+c2);
c3.show();
system("pause");
system("cls");
menu();
break;
}
case'-':
{
calculatorc3(c1-c2);
c3.show();
system("pause");
system("cls");
menu();
break;
}
case'*':
{
calculatorc3(c1*c2);
c3.show();
system("pause");
system("cls");
menu();
break;
}
case'/':
{
if(c2.getnum()==0)
{
cout<<"除数为0!
"<system("pause");
system("cls");
menu();
break;
}
calculatorc3(c1/c2);
c3.show2();
system("pause");
system("cls");
menu();
break;
}
case'^':
{
calculatorc3(c1^c2);
c3.show();
system("pause");
system("cls");
menu();
break;
}
default:
cout<<"您输入的运算符有误!
请重新进行输入!
"<system("pause");
system("cls");
menu();
break;
}
}
case2:
{
intm,mm;
cout<<"请输入需要进制转换的数和转换成的几进制的数:
"<cout<<"注:
本计算器针对的是整数之间的进制转换。
"<cout<<"需要转换的数和该数的进制:
";
cin>>m>>mm;
calculatorc(m,mm);
c.scalechange();
break;
}
case3:
{
inti,j;
charexp[100];
cout<<"请输入三角函数表达式(示例:
sin(0),cos(0),tan(0),log(0)等):
"<cout<<"注:
本计算器计算的类型是弧度的三角函数。
"<cin>>exp;
chara[10],b[10];
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
j=0;
for(i=0;i{
if(exp[i]=='(')
break;
a[j++]=exp[i];
}
i++;
j=0;
for(;i{
if(exp[i]==')')
break;
b[j++]=exp[i];
}
calculatorc(atof(b),a);
c.TriFunction();
break;
}
case0:
cout<<"谢谢使用本计算器,程序作者:
韩邵杰"<exit(0);
break;
default:
cout<<"您的选择有误!
请重新进行选择!
"<system("pause");
system("cls");
menu();
break;
}
}
intmain()
{
menu();
return0;
}
7.测试(主界面及各功能模块的运行图及说明)
(1)程序运行后的界面:
(2)选择1进行加减乘除平方运算:
(3)按任意键继续之后回到界面
(1),然后减输入乘除平方进行测试:
(4)除法运算除数为0时:
(5)进制转换:
10进制转换成16进制:
十进制转换成2进制:
8进制转换成2进制:
2进制转换成16进制:
16进制转换成8进制:
(6)三角函数测试:
(7)选择0退出程序:
8.系统评价及展望