完整版C++毕业课程设计简单计算器的设计.docx
- 文档编号:23808089
- 上传时间:2023-05-20
- 格式:DOCX
- 页数:21
- 大小:87.99KB
完整版C++毕业课程设计简单计算器的设计.docx
《完整版C++毕业课程设计简单计算器的设计.docx》由会员分享,可在线阅读,更多相关《完整版C++毕业课程设计简单计算器的设计.docx(21页珍藏版)》请在冰豆网上搜索。
完整版C++毕业课程设计简单计算器的设计
C++
课程设计报告
学生姓名:
刘建军
专业:
计算机应用技术
班级:
指导教师:
阳红星
目录
一、设计任务1
1.1选题意义1
1.2设计目标1
1.3关于virtualc++2
1.4可行性及需求分析3
二、程序设计与实现3
2.1程序结构3
2.2详细设计4
2.2.1程序流程图4
2.2.2程序设计具体步骤5
2.2.3程序运行界面23
三、设计难点与解决方法24
四、设计效果与不足之处24
4.1程序效果图24
4.2不足之处27
五、参考资料27
六、课程设计总结27
一、设计任务
1.1选题意义
此题选择意义在于引导学生学会设计简单的科学计算器,进一步掌握VisualC++应用程序。
统地学习面向对象编程思想,了解MFC架构,逐步熟悉可视化编程环境VisualC++,并在此环境下设计并实现一个简单计算器系统。
该计算器应能实现如下功能:
1)、数的加、减、乘、除、乘方等简单计算
2)、科学计算函数,包括正弦、余弦、正切、余切、开方、对数、指数等函数运算
3)、具备历史计算的记忆功能。
1.2设计目标
使计算器含有以下功能:
(1)、基本运算功能:
可以进行加、减、乘、除等基本运算。
(2)、三角函数运算功能:
可以一次完成三角函数之间的计算,求正弦函数(sin)、余弦函数(cos)、正切函数(tan)、余切函数(cot)等函数的值。
(3)、对数、指数运算功能:
可以一次求的对数函数(log、ln)、指数函数(exp)等函数的运算。
(4)、删除功能:
可以在输入错误时删除已输入的数值。
(5)、归零功能:
可以在计算完成后清空编辑框中的已有数值。
1.3关于virtualc++
关于VisualC++
VisualC++6.0是Microsoft公司在1998年推出的基于Windows9X和WindowsNT的优秀集成开发环境。
该环境为用户提供了良好的可视化编程环境,程序员可以里利用该开发环境轻松地访问C++源代码编辑器,资源编辑器和使用内部调试器,并且可以创建项目文件。
VisualC++6.0不仅包括编译器,而且它还包括许多有用组件,通过这些组件的协同工作,可以在VisualC++6.0集成环境中轻松地完成创建源文件,编辑资源,以及对程序的编译,连接和调试等各项工作。
VC++6.0是Windows9598、XP或WindowsNT下的一个应用程序,本身对软硬件没有特殊要求。
就是说它对环境的要求与Windows9598、WindowsNT要求是一致的。
硬件要求:
一般在586以上的处理器、16MB以上内存、100MB以上的硬盘。
软件要求:
Windows9598或WindowsNT3.51以上版本。
VC++6.0系统可以在一张CD盘上,也可以在“VisualStudio(VisualC++、VisualFoxpro)”等产品的第一张CD盘上。
一般都有一个VC的自动安装程序,也可以执行VC6目录下的setup.exe,在安装包的提示下进行,对初学者可采用“典型安装”方式。
在安装好VC6.0系统后,有时根据需要添加或删除某些部件,可插入CD盘重新执行setup.exe安装程序,安装程序会检测当前系统安装VC6的足件,用户单击“添加删除”按钮后,在“安装维护”对话框中选定要添加的部件或撤消选定要删除的部件。
与一般的应用软件一样,有以下两种启动方式:
(1)通过“开始”按钮,选择“程序”菜单,然后打开“MicrosoftVisualstudio6.0中文版”子菜单中的“MicrosoftVisualC++6.0中文版”程序。
(2)用户也可以使用命令行启动VC。
单击“开始”按钮后选择“运行”命令,在“运行”对话框中输入c:
\ProgramFiles\MicrosoftVisualStudio\VC98\VC6.exe(按默认盘符和路径安装)即可。
1.4可行性及需求分析
本设计是简单计算器。
日常计算机使用中,常常涉及到一些有关计算的问题,一个小型的计算器软件变得非常有用,该校型计算器需要空间资源较少,对电脑其他程序的应用影响较小。
它的设计按软件工程的方法进行,系统具有良好的界面、必要的交互信息和较好的健壮性;醒目美观的软件封面。
使用人员能快捷简单地进行操作。
即时准确地获得需要的计算的结果,充分降低了数字计算的难度和节约了时间,对人们的生活有一定的帮助。
本软件主要用于计算机windows2000XP以上版本的用户的使用,这次课程设计一般是实现简单计算器的功能。
要程序能实现:
加,减,乘,除,开方,倒数等运算功能;还要实现数据的输入,输出,计算,显示及程序退出等功能。
另外还可以实现多种科学计算的功能,如:
三角函数的计算,弧度与角度间的转换,对数指数的计算等等。
二、程序设计与实现
2.1程序结构
本计算器首先是通过在计算器的界面上按下相应的按钮,来进行基本的加,减,乘,除等基本运算,计算器还能够进行平方运算,求平方根运算,乘方运算,三角函数运算(包括正弦函数(sin)、余弦函数(cos)、正切函数(tan)、余切函数(cot)),对数函数(ln、log),指数函数(exp),幂函数(x~)等运算。
2.2详细步骤
2.2.1程序的流程图
2.2.2程序设计具体步骤
1)总体功能:
整个计算器除了基本的加、减、乘、除运算外,另外还有7个功能可以实现七大运算:
三角函数运算功能、对数函数运算功能、指数函数运算功能、乘方运算功能、平方运算功能、根式运算功能、归零功能。
各个运算功能的详细设计说明分别如下:
a、基本运算功能
主要实现数据的加、减、乘、除运算,提供简单的科学计算!
b、三角函数运算功能
用来执行三角函数的运算,包括正弦函数(sin)、余弦函数(cos)和正切函数(tan)
c、对数函数运算功能
用来执行对数函数的运算,包括以e为底ln函数和以10为底的lg函数。
d、指数函数运算功能
用来执行指数函数的运算。
e、乘方运算功能
用来执行乘方的运算,进行数值的成倍计算。
f、平方运算功能
用来执行平方运算,说到底它也属于乘方运算的范畴。
g、根式运算功能用来执行根式的运算。
r;
}
doubleoperate_one(doubleone,charcc)对一个数运算(含单目运算符:
如log(L),sin(S)等等)
{
doubler;
if(cc=='Q')
r=sqrt(one);
elseif(cc=='C')
r=cos(one);
elseif(cc=='S')
r=sin(one);
elseif(cc=='T')
r=tan(one);
elseif(cc=='c')
r=acos(one);
elseif(cc=='s')
r=asin(one);
elseif(cc=='t')
r=atan(one);
returnr;
}
doubleoperate_L(doublea,doubleb,chardian)求对数的值
{
doubler=log(b)log(a);
returnr;
}
2)运算符的比较等级
具体程序如下:
typedefstructnode为了处理符号而建立的链表(如:
1+(-2))
{
chardata;
node*next;
}node;
typedefstructstack_num存储数的栈
{
double*top;
double*base;
}stack_num;
typedefstructstack_char存储运算符号的栈
{
char*top;
char*base;
}stack_char;
stack_numS_num;定义
stack_charS_char;定义
charfu[18]={'\n',')','+','-','*','','%','^','Q','L','C','S','T','c','s','t','('};
intcompare[1000];表现出各运算符号的优先级
doubleshu[1000];存储"数"的数组
doubledai_result;运算的结果,是为了处理M运算(简介函数里有M的定义)
intbiao=0;和dia_result一样,为了处理M运算
charline[SIZE];输入的所要计算的表达式
voidinit()初始化
{
compare[fu[0]]=-2;用数字的大小表现出符号的优先级
compare[fu[1]]=-1;
compare[fu[2]]=2;
compare[fu[3]]=2;
compare[fu[4]]=4;
compare[fu[5]]=4;
compare[fu[6]]=4;
compare[fu[7]]=5;
for(inti=8;i<=15;i++)
compare[fu[i]]=6;
compare[fu[16]]=7;
S_num.base=(double*)malloc(sizeof(double)*SIZE);为栈开辟空间
S_char.base=(char*)malloc(sizeof(char)*SIZE);同上
S_num.top=S_num.base;
S_char.top=S_char.base;
}
voidpush_num(doublen)数字进栈
{
*++S_num.top=n;
}
voidpush_char(charc)运算符号进栈
{
*++S_char.top=c;
}
doublepop_num()数字出栈
{
doublem=*S_num.top;
S_num.top--;
returnm;
}
charpop_char()运算符号出栈
{
charcc=*S_char.top;
S_char.top--;
returncc;
}
charget_top_char()得到运算符号的栈中最顶端的运算符号
{
return*S_char.top;
}
3)整个表达式具体运算程序:
doublecompute()对整个表达式的计算
{
charc;表示运算符号
intp=0;用于shu[++p],先初始化
inti,j;
init();进行初始化
push_char('\n');
line[strlen(line)]='\n';
line[strlen(line)+1]='\0';
if(biao)
push_num(dai_result);把运算的结果先进栈,在这个结果的基础上继续进行运算
biao=0;
for(i=0;line[i]!
='\0';)把表达式中的数字字符串转化成可计算的数字
{
intflag=0;
intflag1=1;标记是否是运算符号
intflag2=1;标记是否出现'_';
double=0;是否是小数的类型
while
(1)
{
flag1=1;
for(j=0;j<=16;j++)
{
if(line[i]==fu[j])
{
flag1=0;
break;
}
}
if(line[i]=='_')
{
break;
}
if(line[i]=='.')
{
i++;
ge=0;
biao_dian=1;
}
if(line[i]=='P')
{
shu[++p]=pi;
i++;
break;
}
if(line[i]=='E')
{
shu[++p]=e;
i++;
break;
}
if(flag1)
{
)
ge++;
}
else
break;
}
if(flag)
{
if(biao_dian)
{
intr=1;
for(intk=1;k<=ge;k++)
r*=10;
=pop_char();
push_num(operate_one(one,dian));
}
elseif(ch=='L')
{
doubleone_L=pop_num();
doubletwo_L=pop_num();
chardian=pop_char();
push_num(operate_L(two_L,one_L,dian));
}
else
{
doublex=pop_num();
doubley=pop_num();
chardian=pop_char();
if(dian==''&&x==0)判断是否除了"零"
{
cout<<"由于您除了零,结果将是错误的"< } push_num(operate(x,dian,y));把进行一次计算的结果入栈 } } else { push_char(c); i++; } } } doubleresult=pop_num();得到结果 returnresult; } 4)检查表达式的书写错误: intcheck_kuohao()检查表达式括号是否匹配 { inti,f=0; intkuo[SIZE],key=1; memset(kuo,0,sizeof(kuo)); for(i=0;line[i]! ='\0';i++) { if(line[i]=='(') kuo[++f]=1; elseif(line[i]==')') { if(kuo[f]==1) { kuo[f]=0; f--; } else { key=0; break; } } } if(key&&f==0) return1; else return0; } intcheck_char()检查运算符号是否合法(如: 1+*4) { inti,ge; for(i=0;line[i]! ='\0';) { ge=0; while(line[i]=='+'||line[i]=='-'||line[i]=='*' ||line[i]==''||line[i]=='%'||line[i]=='^' ||line[i]=='Q'||line[i]=='L'||line[i]=='S' ||line[i]=='C'||line[i]=='T'||line[i]=='s' ||line[i]=='c'||line[i]=='t') { ge++; i++; } i++; } if(ge>=3) return0; else return1; } voidoutput(doubleresult)打出结果 { printf("所得结果是: "); cout< } voidcheck()检查表达式是否合法 { voidintroduce(); charcc;决定计算器按哪种功能进行计算 doubleresult;结果 voidinput();定义 if(check_kuohao()&&check_char())看是否合法,合法则计算 { result=compute(); output(result); cout<<"输入一个字符'M'或'D'或'F',决定是否继续: "< while(cin>>cc) { if(cc=='M') { system("cls"); introduce(); printf("您上次所得结果为: "); cout< cout<<"在上次计算结果的基础上,请继续输入想计算的表达式"< dai_result=result; biao=1; input();输入表达式 break; } elseif(cc=='D') { system("cls"); introduce(); cout<<"计算器已清零,请输入您所要计算的表达式"< input();输入表达式 break; } elseif(cc=='F') { system("cls"); cout<<"计算器关闭,谢谢使用! "< break; } else { cout<<"所输入字符无效,请输入一个字符'M'或'D'或'F'! "< continue; } } } else不合法,分两种不合法 { if(check_kuohao()==0&&check_char()==1) { cout<<"您所输入的表达式括号不匹配,请重新输入: "< input();输入表达式 } else { cout<<"您所输入的表达式不合法,请重新输入: "< input();输入表达式 } } } 5)负号的处理方式: voidtackle_fuhao()处理负号 { node*root,*>>line; if(biao==0) tackle_fuhao();处理负号 check();检查表达式是否合法 } 6)程序主界面的设计: voidintroduce()对计算器的符号功能的简要介绍 { cout<<"***的计算器简要介绍"< cout<<"|C(cos)|S(sin)|T(tan)|a(arccos)|c(arcsin)|t(arctan)|"< cout<<"|------||||||"< cout<<"|7|8|9||on|L(log)|"< cout<<"|------||||||"< cout<<"|4|5|6|*|%|Q(sqrt)|"< cout<<"|------||||||"< cout<<"|1|2|3|-|M(M+)|Enter(=)|"< cout<<"|------||||||"< cout<<"|0|.|+|^(乘方)|F(off)||"< cout<<"------"< cout<<"对于对数输入L2_5表示以2为底5的对数"< cout<<"M(在前面结果的基础上继续计算,如: 上次结果为10,现输入+10.5*2)"< cout<<"D(清零并继续输入)"< cout<<"F(计算机关闭)"< cout<<"输入P就代表输入圆周率,输入E代表输入自然对数"< } 2.2.3程序运行界面: 三、设计难点与解决方法 设计难点1: 遇到一些复杂的函数计算时,设计的代码不能很好的反映出该有的功能。 解决策略: 通过看书、上网查资料和与同学讨论,自己再反复修改代码,运行程序,直到实际效果满意为止。 设计难点2: 在编译程序时,出现类型不匹配的错误,查找是Cstring和double类型之间没有转换。 解决策略: 查找到Format()和atof()函数可以进行他们之间的转换 四、设计效果与不足之处 4.1程序运行结果图 (1)计算机主界面: (2)输入表达式计算结果: (3)按M继续输入表达式进行简单计算: 关闭计算器: 4.2程序的不足之处: 计算器的计算功能还不是很多,设计效果也不是很理想,只能进行简单的运算。 五、参考文献 严华峰.VisualC++课程设计案例精编. 六、课程设计总结 经过对VC++课程设计的编写设计,加深了我对《VC++程序设计》课程所学知识的进一步理解,掌握了各种函数的应用和调用。 这次的课程设计,让我更加了解VC++程序的内部结构和资源使用。 总之,完成这次课程设计之后,使我更加掌握了编程的基本要素,学会了用编程思想解决生活中的常见问题,用所学知识解决实际问题。 对于C++,我们还有许多需要学习
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 完整版 C+ 毕业 课程设计 简单 计算器 设计
![提示](https://static.bdocx.com/images/bang_tan.gif)