面向对象程序设计大作业报告.docx

上传人:b****4 文档编号:4454885 上传时间:2022-12-01 格式:DOCX 页数:18 大小:137.19KB
下载 相关 举报
面向对象程序设计大作业报告.docx_第1页
第1页 / 共18页
面向对象程序设计大作业报告.docx_第2页
第2页 / 共18页
面向对象程序设计大作业报告.docx_第3页
第3页 / 共18页
面向对象程序设计大作业报告.docx_第4页
第4页 / 共18页
面向对象程序设计大作业报告.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

面向对象程序设计大作业报告.docx

《面向对象程序设计大作业报告.docx》由会员分享,可在线阅读,更多相关《面向对象程序设计大作业报告.docx(18页珍藏版)》请在冰豆网上搜索。

面向对象程序设计大作业报告.docx

面向对象程序设计大作业报告

 

面向对象程序设计大作业

------计算器类

学院名称(四号宋体居中)填写全称

专业班级(四号宋体居中)填写全称

学生姓名(四号宋体居中)

学号(四号宋体居中)

指导教师(四号宋体居中)

完成时间:

年月日

计算器类

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(;i

b[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.系统评价及展望

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1