实验六 综合设计实验计算器.docx
- 文档编号:15764060
- 上传时间:2023-07-07
- 格式:DOCX
- 页数:15
- 大小:58.40KB
实验六 综合设计实验计算器.docx
《实验六 综合设计实验计算器.docx》由会员分享,可在线阅读,更多相关《实验六 综合设计实验计算器.docx(15页珍藏版)》请在冰点文库上搜索。
实验六综合设计实验计算器
院系:
计算机学院
实验课程:
计算机基础实验
实验项目:
程序设计大专题(综合性实验)
指导老师:
开课时间:
专业:
计算机类
班级:
学生:
学号:
程序设计大专题(综合性实验)
中文摘要:
这是一个基于命令行窗口的计算器模拟程序,能够实现简单的加减乘除运算。
关键词:
计算器程序实验
前言:
为了实现基于命令行窗口的计算器模拟程序,同时又能以模拟LCD显示的方式来显示。
设计了这个程序。
软件开发过程
先对问题进行分析,决定采取递归的方法来处理表达式,并计算表达式的值。
输出部分采用面向对象编程,将输出屏幕对象写到screen.h中,通过成员函数实现对对象的操作。
而对表达式的处理计算的函数则放在cal.cpp中。
代码如下:
//calculator.cpp
#include
#include
#include
intmain()
{
stringexpression,temp;
charcon;
screenoutput;
for(;;){
cout<<"Pleaseinputanexpressionused'-','+','*','/'andnumbers:
";
//获得表达式
getline(cin,expression);
while(expression.length()==0)
getline(cin,expression);
temp="";
//处理掉空格
for(inti=0;i if(expression[i]! ='') temp.append(expression,i,1); } expression=temp; //初始化显示 output.initial(); output.input(cal(expression)); //显示 output.show(); cout< ('y'forcontinueand'n'forexit)"; cin>>con; //是否结束 if(con=='n') break; } return0; } //cal.cpp //是不是数字 boolisNaN(charc){ if(c>='0'&&c<='9') returnfalse; returntrue; } //处理计算表达式 intcal(stringexpression){ intnumber=0,mul=0,end; stringtemp; for(inti=0;i if(isNaN(expression[i])) switch(expression[i]){ case'+': temp.assign(expression,i+1,expression.length()-i-1); returnnumber+cal(temp); case'-': temp.assign(expression,i+1,expression.length()-i-1); for(intj=0;j if(temp[j]=='-') temp[j]='+'; elseif(temp[j]=='+') temp[j]='-'; returnnumber-cal(temp); case'*': end=i+1; while(expression[end]! ='-'&&expression[end]! ='+'&&end end++; temp.assign(expression,i+1,end-i-1); mul=number*cal(temp); if(end==expression.length()) returnmul; else{ if(expression[end]=='+'){ temp.assign(expression,end+1,expression.length()-i-1); returnmul+cal(temp); } if(expression[end]=='-'){ temp.assign(expression,end+1,expression.length()-i-1); for(intk=0;k if(temp[k]=='-') temp[k]='+'; elseif(temp[k]=='+') temp[k]='-'; returnmul-cal(temp); } } case'/': end=i+1; while(expression[end]! ='-'&&expression[end]! ='+'&&end end++; temp.assign(expression,i+1,end-i-1); for(intk=0;k if(temp[k]=='*') temp[k]='/'; elseif(temp[k]=='/') temp[k]='*'; mul=number/cal(temp); if(end==expression.length()) returnmul; else{ if(expression[end]=='+'){ temp.assign(expression,end+1,expression.length()-i-1); returnmul+cal(temp); } if(expression[end]=='-'){ temp.assign(expression,end+1,expression.length()-i-1); for(intk=0;k if(temp[k]=='-') temp[k]='+'; elseif(temp[k]=='+') temp[k]='-'; returnmul-cal(temp); } } } number=number*10+(int)expression[i]-48; } returnnumber; } //screen.h #ifndefSCREEN_H #defineSCREEN_H #include #include usingnamespacestd; //显示对象 classscreen{ public: boolisOn[5][1000],isNeg; intnumber,len; intdigits[500]; //初始化 voidinitial(){ for(inti=0;i<5;i++) for(intj=0;j<999;j++) isOn[i][j]=false; return; } //分割字符串 voidsplit(){ inttemp=this->number,size=0; while(temp! =0){ digits[size]=temp%10; temp/=10; size++; } this->len=size; return; } //处理显示光板 voidlights(intnum,intdigit){ switch(digit){ case0: isOn[0][num]=isOn[1][num]=isOn[3][num]=isOn[4][num]=isOn[1][num+1]=isOn[3][num+1]=true; break; case1: isOn[1][num+1]=isOn[3][num+1]=true; break; case2: isOn[0][num]=isOn[1][num+1]=isOn[2][num]=isOn[3][num]=isOn[4][num]=true; break; case3: isOn[0][num]=isOn[1][num+1]=isOn[2][num]=isOn[3][num+1]=isOn[4][num]=true; break; case4: isOn[1][num]=isOn[1][num+1]=isOn[2][num]=isOn[3][num+1]=true; break; case5: isOn[0][num]=isOn[1][num]=isOn[2][num]=isOn[3][num+1]=isOn[4][num]=true; break; case6: isOn[0][num]=isOn[1][num]=isOn[2][num]=isOn[3][num]=isOn[3][num+1]=isOn[4][num]=true; break; case7: isOn[0][num]=isOn[1][num+1]=isOn[3][num+1]=true; break; case8: isOn[0][num]=isOn[1][num]=isOn[1][num+1]=isOn[2][num]=isOn[3][num]=isOn[3][num+1]=isOn[4][num]=true; break; case9: isOn[0][num]=isOn[1][num]=isOn[1][num+1]=isOn[2][num]=isOn[3][num+1]=isOn[4][num]=true; break; } return; } //将数字输入光板 voidinput(intnum){ isNeg=false; this->number=abs(num); if(num<0) isNeg=true; ready(); return; } //做好输出准备 voidready(){ intnum=0,digit; split(); for(inti=this->len-1;i>=0;i--){ digit=digits[i]; lights(num,digit); num+=2; } return; } screen(){ for(inti=0;i<=4;i++) for(intj=0;j<=999;j++) isOn[i][j]=false; } //显示 voidshow(){ //是否为负数 if(isNeg) cout<<""; for(inti=1;i<=this->len;i++){ cout<<''; if(isOn[0][2*i-2]) cout<<"--"; else cout<<""; cout<<""; } cout< if(isNeg) cout<<""; for(inti=1;i<=this->len;i++){ if(isOn[1][2*i-2]) cout<<'|'; else cout<<''; cout<<""; if(isOn[1][2*i-1]) cout<<'|'; else cout<<''; cout<<''; } cout< if(isNeg) cout<<""; for(inti=1;i<=this->len;i++){ if(isOn[1][2*i-2]) cout<<'|'; else cout<<''; cout<<""; if(isOn[1][2*i-1]) cout<<'|'; else cout<<''; cout<<''; } cout< if(isNeg) cout<<"--"; for(inti=1;i<=this->len;i++){ cout<<''; if(isOn[2][2*i-2]) cout<<"--"; else cout<<""; cout<<""; } cout< if(isNeg) cout<<""; for(inti=1;i<=this->len;i++){ if(isOn[3][2*i-2]) cout<<'|'; else cout<<''; cout<<""; if(isOn[3][2*i-1]) cout<<'|'; else cout<<''; cout<<''; } cout< if(isNeg) cout<<""; for(inti=1;i<=this->len;i++){ if(isOn[3][2*i-2]) cout<<'|'; else cout<<''; cout<<""; if(isOn[3][2*i-1]) cout<<'|'; else cout<<''; cout<<''; } cout< if(isNeg) cout<<""; for(inti=1;i<=this->len;i++){ cout<<''; if(isOn[4][2*i-2]) cout<<"--"; else cout<<""; cout<<""; } return; } }; #endif 系统测试情况: 对几种情况的输入进行测试,没有问题: 系统的优点与不足 1.优点: (1)可以进行一定长度的加减乘除的表达式的值的计算; (2)具有输入提示和错误提示; (3)可以计算多条表达式的值; (4)具有类似液晶计算器显示屏的显示功能 2.不足: (1)界面较单一,美观度不高; (2)只能支持加减乘除,不支持其他运算功能; (3)不支持对超过10位的数字的运算; (4)不支持小数运算; (5)无法输出小数。 参考文献:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验六 综合设计实验计算器 实验 综合 设计 计算器