工学VC++计算器课程设计报告.docx
《工学VC++计算器课程设计报告.docx》由会员分享,可在线阅读,更多相关《工学VC++计算器课程设计报告.docx(20页珍藏版)》请在冰点文库上搜索。
![工学VC++计算器课程设计报告.docx](https://file1.bingdoc.com/fileroot1/2023-7/2/ce103a2a-5345-47d2-b115-436a3d43cb84/ce103a2a-5345-47d2-b115-436a3d43cb841.gif)
工学VC++计算器课程设计报告
VC++计算器课程设计报告
一、作品名称:
计算器
二、本次课程设计的目的
在程序设计中,通过设计、编制、调试一个模拟计算器的程序,加深对语法及语义分析原理的理解,并实现对命令语句的灵活应用。
三、主要功能
实现计算器的功能。
用户根据程序提示,输入数字或字符,选择要进行的运算,可以进行正弦、余弦、正切、开方、对数、加、减、乘、除、华氏温度与摄氏度之间的换算以及平方根的运算。
四、具体内容释解
1.初始运行界面如下:
2.进行正弦运算
3.进行混合运算
4.求平方根运算,根据用户输入与系统提示,运行过程依次如下:
5.进行华氏温度和摄氏度间的转化,运行如下:
6.进行测试
7.选择6键,回到菜单界面,运行如下:
五、备注:
1.#include为编译预处理命令,其作用是将源程序文件中的预处理命令进行处理,生成一个中间文件,编译系统再对此文件进行编译并生成目标代码,最后生成的代码中并不包含预处理命令。
2.#defineMAX100为宏定义,以后程序中再出现100,都用MAX代替。
3.exit()为库函数,其功能是终止程序运行,将流程控制返回给操作系统。
exit(表达式)通常把表达式的值作为终止程序的原因。
用0表示正常退出,其他整数值作为异常处理。
使用它时,要包含头文件stdlib.h。
4.voidtest();测试函数。
测试程序是由计算机出题、用户运算,计算机判断对错并给出分数,计算机用随机数发生器给出两个操作数。
六、附录(源程序)
计算器(calculator)--源代码及关键源代码注解如下:
#include
#include//用以产生随机数
#defineMAX100//宏定义
#include
#include
#include
#include
doublenumber1,number2,answer,number3,num[10000];//定义全局变量
intn,k=1;
charinput,val;//定义输入的运算符号
classoopcalc{
private:
doublex,y;//私有变量X和Y
doublefartocel(doublenumber1);//华氏温度转化为摄氏温度的函数声明
doubleceltofar(doublenumber1);//摄氏温度转化为华氏温度的函数声明
doublesqroot(doublenumber1);//
voidcalcsqr();
voidcalccos();
voidcalctan();
voidcalcsin();
voidcalclog();
public:
doublegetX(){returnx;}
doublegetY(){returny;}
doubleset(){x=number1;y=number2;}
doublecalcadd(doublenumber1,doublenumber2);//加法运算的函数声明
doublecalcsub(doublenumber1,doublenumber2);//减法运算的函数声明
doublecalcdiv(doublenumber1,doublenumber2);//除法运算的函数声明
doublecalcmult(doublenumber1,doublenumber2);//乘法运算的函数声明
voidcalcfartocel();
voidcalcceltofar();
voidcalcsroot();
voidexitprog();
voidmenu();//主菜单函数
voidcaculate();//混合运算函数的函数声明
voidtest();//测试函数的函数声明
voidbadinput();
};
voidoopcalc:
:
calcsin()//类体外函数,定义正弦函数
{
cout<<"TheSinFunction\n";
cout<<"Enteranumber:
";
cin>>number1;
answer=sin(number1);
cout<<"Thesinof"<cout<<"Pressanykeytocontinue\n";
getch();
menu();
}
voidoopcalc:
:
calccos()//类体外函数,定义余弦函数
{
cout<<"TheCosFunction\n";
cout<<"Enteranumber:
";
cin>>number1;
answer=cos(number1);
cout<<"Thecosof"<cout<<"Pressanykeytocontinue\n";
getch();
menu();
}
voidoopcalc:
:
calctan()//类体外函数,定义正切函数
{
cout<<"TheTanFunction\n";
cout<<"Enteranumber:
";
cin>>number1;
answer=tan(number1);
cout<<"Thetanof"<cout<<"Pressanykeytocontinue\n";
getch();
menu();
}
voidoopcalc:
:
calcsqr()//求平方的函数
{
cout<<"ThesqrFunction\n";
cout<<"Enteranumber:
";
cin>>number1;
answer=(number1*number1);
cout<<"Thesqrof"<cout<<"Pressanykeytocontinue\n";
getch();
menu();
}
voidoopcalc:
:
calclog()//对数函数
{
cout<<"TheLogFunction\n";
cout<<"Enteranumber:
";
cin>>number1;
if(number1<=0)
{
cout<<"Badinput!
\n";
cout<<"Pressanykeytocontinue\n";
getch();
menu();
}
else
answer=log(number1);
cout<<"Thelogof"<cout<<"Pressanykeytocontinue\n";
getch();
menu();
}
doubleoopcalc:
:
calcadd(doublenumber1,doublenumber2)//加法运算
{
answer=number1+number2;
return(answer);
}
doubleoopcalc:
:
calcsub(doublenumber1,doublenumber2)//减法运算
{
answer=number1-number2;
return(answer);
}
doubleoopcalc:
:
calcdiv(doublenumber1,doublenumber2)//除法运算
{
if(number2==0){getch();//排除除数为零的情况
menu();}
else
answer=number1/number2;
return(answer);
}
doubleoopcalc:
:
calcmult(doublenumber1,doublenumber2)//乘法运算
{
answer=number1*number2;
return(answer);
}
voidoopcalc:
:
calcfartocel()//华氏温度转化为摄氏温度
{
cout<<"TheFarenheittoCelsiusFunction\n";
cout<<"EnteratempatureinFarenheit:
";
cin>>number1;
answer=((number1-32)*5)/9;
cout<<"ThetempatureinCelsiusis"<cout<<"Pressanykeytocontinue\n";
getch();
menu();
}
voidoopcalc:
:
calcceltofar()//摄氏温度转化为华氏温度
{
cout<<"TheCelsiustoFarenheitFunction\n";
cout<<"EnteratempatureinCelsius:
";
cin>>number1;
answer=number1*9/5+32;
cout<<"ThetempatureinFarenheitis"<cout<<"Pressanykeytocontinue\n";
getch();
menu();
}
voidoopcalc:
:
calcsroot()//求平方根的函数
{
cout<<"TheSquareRootFunction\n";
cout<<"Firstnumber:
";
cin>>number1;
if(number1<0){//排除负数开平方根
cout<<"yourenterisincorrect,pleaseenteranewnumber\n";
getch();
menu();
}
else
answer=sqrt(number1);
cout<<"Thesquarerootof"<cout<<"Pressanykeytocontinue\n";
getch();
menu();
}
voidoopcalc:
:
exitprog()
{
exit(-1);
}
voidoopcalc:
:
menu()
{
oopcalca;
system("cls");//执行系统命令:
cls-清屏
cout<<"==================MENU===============\n";
cout<<"s:
选择s进行正弦运算\n";
cout<<"c:
选择c进行余弦运算\n";
cout<<"t:
选择t进行正切运算\n";
cout<<"g:
选择g进行对数运算\n";
cout<<"n:
选择n进行求平方运算\n";
cout<<"1:
选择1进行混合运算\n";
cout<<"2:
选择2进行华氏温度转化为摄氏温度的运算\n";
cout<<"3:
选择3进行摄氏温度转化为华氏温度的运算\n";
cout<<"4:
选择4进行求平方根运算\n";
cout<<"5:
选择5进行测试\n";
cout<<"6:
选择6退出运算\n";
cout<<"请选择:
";
cin>>input;
cout<<"=====================================\n";
switch(input)
{
case's':
case'S':
a.calcsin();
break;
case'c':
case'C':
a.calccos();
break;
case't':
case'T':
a.calctan();
break;
case'g':
case'G':
a.calclog();
break;
case'n':
case'N':
a.calcsqr();
break;
case'1':
a.caculate();
break;
case'2':
a.calcfartocel();
break;
case'3':
a.calcceltofar();
break;
case'4':
a.calcsroot();
break;
case'5':
a.test();
break;
case'6':
a.exitprog();
break;
default:
a.badinput();
}
}
voidoopcalc:
:
caculate()
{
oopcalca;
cout<<"TheMultifunction(混合四则运算)\n";
for(intn=1;;n++){
cout<<"Number"<";
cin>>num[n];//输入要运算的数
if(num[n]==0){//遇到0为止
cout<<"Pressanykeytocontinue\n";
getch();
menu();}
switch(k)
{
case1:
if(n==1){answer=num[1];break;}//如果第一个数则不进行运算
else{answer=a.calcadd(answer,num[n]);//如果不是第一个数进行运算
cout<<"Theansweris"<break;}
case2:
if(n==1){answer=num[1];break;}//如果第一个数则不进行运算
else{answer=a.calcsub(answer,num[n]);//如果不是第一个数进行运算
cout<<"Theansweris"<case3:
if(n==1){answer=num[1];break;}//如果第一个数则不进行运算
else{answer=a.calcmult(answer,num[n]);//如果不是第一个数进行运算
cout<<"Theansweris"<case4:
if(n==1){answer=num[1];break;}//如果第一个数则不进行运算
else{answer=a.calcdiv(answer,num[n]);//如果不是第一个数进行运算
cout<<"Theansweris"<}
label1:
cout<<"Pleasechoosethefunctionyouwant(+or-or*or/):
\n";
cin>>val;
switch(val)
{
case'+':
k=1;break;
case'-':
k=2;break;
case'*':
k=3;break;
case'/':
k=4;break;
default:
cout<<"Badinput!
\n";gotolabel1;
}
}
}
voidoopcalc:
:
test()//测试函数
{
cout<<"TheTestFunction\n";
ints;
floatp;
s=rand()%4+1;//随机给出题目的+或-或*或/
srand(time(NULL));
number1=rand()%MAX+1;//在1~100之间随机给出数字
number2=rand()%MAX+1;
switch(s)
{
case1:
cout<answer=calcadd(number1,number2);
break;
case2:
cout<answer=calcsub(number1,number2);
break;
case3:
cout<answer=calcdiv(number1,number2);
break;
case4:
cout<answer=calcmult(number1,number2);
break;
}
cin>>p;
if(answer==p){cout<<"Correct!
Youareveryclever!
\n";}
else{cout<<"NO!
Thecorrectansweris"<cout<<"Pressanykeytocontinue\n";
cout<getch();
menu();
}
voidoopcalc:
:
badinput()
{
cout<<"BADINPUT!
\n";
cout<<"Pressanykeytocontinue\n";
getch();
menu();
}
voidmain()
{
oopcalcs;
s.menu();
}
七、心得体会
这个程序其实并不是由我一人独立完成的,在程序的设计和编译过程当中,我得到了许多学长学姐以及同学们的帮助和辅导,整个完成过程既单调又精彩。
单调的是这项共作本身就需要耐下心来,仔细琢磨,反复调试,尤其在错误百出却又找不到解决方法时,仅仅用苦闷或者发愁怕是无法表达出那种心情的,失望却不能绝望。
我们重整旗鼓,一次又一次地修改着,尝试着……枯燥而乏味。
但当我们看到程序能顺利运行时,那种喜悦远远超出了当初失败的郁闷之情。
这次课程设计让我获益匪浅,我懂得了,做出一个优秀的程序,不是一蹴而就的事情,更不是马马虎虎随随便便就能成功的。
它需要绝对严谨的学习作风和一丝不够的认真态度。
说实话,我的VC++学的并不是很好,所以刚接到这个任务的时候,心里很是忐忑不安,很没信心。
但是通过真正的动手实践,不仅唤起了我对VC++程序设计的兴趣和热情,我的能力也有了一定的提高。
真的是好处多多呀。
所以非常感谢老师及学校给我们提供这样的学习环境和机会,让我们能更进一步的把书本上的知识和实践行动结合在一起,从而更好的掌握这一课程。
此外,此次课程设计也使我从实践中认识到了,VC++6.0真的是一个非常强大并且十分高效的开发系统,很值得我们进一步去学习它、研究它、应用它。
在此,我向在一直以来在课程设计过程中所有给予我们帮助的老师、同学表示衷心的感谢。
最后,感谢学院、老师给予我这样一个机会,亲身实践自己的所学,让我的大学生活更加丰富多彩,谢谢!