简易计算器设计.docx

上传人:b****3 文档编号:4627811 上传时间:2023-05-07 格式:DOCX 页数:49 大小:190.42KB
下载 相关 举报
简易计算器设计.docx_第1页
第1页 / 共49页
简易计算器设计.docx_第2页
第2页 / 共49页
简易计算器设计.docx_第3页
第3页 / 共49页
简易计算器设计.docx_第4页
第4页 / 共49页
简易计算器设计.docx_第5页
第5页 / 共49页
简易计算器设计.docx_第6页
第6页 / 共49页
简易计算器设计.docx_第7页
第7页 / 共49页
简易计算器设计.docx_第8页
第8页 / 共49页
简易计算器设计.docx_第9页
第9页 / 共49页
简易计算器设计.docx_第10页
第10页 / 共49页
简易计算器设计.docx_第11页
第11页 / 共49页
简易计算器设计.docx_第12页
第12页 / 共49页
简易计算器设计.docx_第13页
第13页 / 共49页
简易计算器设计.docx_第14页
第14页 / 共49页
简易计算器设计.docx_第15页
第15页 / 共49页
简易计算器设计.docx_第16页
第16页 / 共49页
简易计算器设计.docx_第17页
第17页 / 共49页
简易计算器设计.docx_第18页
第18页 / 共49页
简易计算器设计.docx_第19页
第19页 / 共49页
简易计算器设计.docx_第20页
第20页 / 共49页
亲,该文档总共49页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

简易计算器设计.docx

《简易计算器设计.docx》由会员分享,可在线阅读,更多相关《简易计算器设计.docx(49页珍藏版)》请在冰点文库上搜索。

简易计算器设计.docx

简易计算器设计

 

简易计算器设计实习报告

 

题目:

简易计算器设计

学号

姓名

专业班级

指导教师

实践日期

一、综合训练目的与要求

《面向对象程序设计》课程设计是实践性教学环节之一,是《面向对象程序设计》课程的辅助教学课程。

该课程设计要求学生综合运用在《面向对象程序设计》课程中学到的面向对象技术与实际编程相结合,独立完成一项较为完整、并具有一定实际功能的课程设计任务,同时加深学生对面向对象和C++编程技术的理解和掌握,培养实际的应用程序开发能力。

在课程设计过程中,使学生养成良好的程序设计风格,并掌握C++应用程序的设计开发过程和编程方法、测试方法。

二、综合训练任务

(1)综合任务

设计计算器类,实现带括号的复杂表达式的计算。

(2)个人任务

我的主要是在qt中学习和使用信号和槽的机制,此外,就是设计数字键。

三、总体设计

(1)功能模块图

图1功能模块图

 

(2)最终的UML图

图2stack类

图3CalculatorWindow类

 

(3)个人设计stack的示图

图4StackL类

四、详细设计说明

(1)工程文件视图

 

图5工程文件试图

(2)类的介绍

constintmax_len=20;//栈的最大容量

栈类stack()

constintmax_len=20:

栈的最大容量

函数:

stack():

构造函数,实现栈的初始化

~stack():

析构函数

intgetTop():

得到栈顶指针的值

voidclear():

清空栈

voidpush(charc):

符号入栈

voidpush(floatf):

数字入栈

charpop(charc):

返回符号栈栈顶的符号。

floatpop(intf):

返回数字栈栈顶的数字。

charremove(charc):

栈顶元素出栈。

floatremove(intf):

栈顶元素出栈。

boolempty():

判断栈是否为空。

boolfull():

判断栈是否满了

分析:

开始的时候只有chars[max_len],没有floatn[max_len]这个属性,后来由于字符和float型转换存在精度的问题,所以在stack类中加入了floatn[max_len]这个属性。

使用的时候如果建立符号栈,那么只使用chars[max_len],如果建立数字栈那么只使用floatn[max_len]。

栈顶指针inttop,和其他函数是chars[max_len]和floatn[max_len]公用。

其中有push()、pop()、remove(),函数的参数没有具体意义只是为了实现函数重载来实现不同栈的操作。

运算类classcalculator()

功能:

实现功能选择和实现进制转换与表达式计算

属性:

stacknumStack:

数字栈

stackoperatorStack:

符号栈

stringstr:

字符串(输入的表达式)

函数:

calculator():

构造函数

virtual~calculator():

析构函数

voidsetStr():

设置输入的数字或是表达式的字符串

stringgetStr():

得到输入的数字或表达式的字符串

booloperatorCompare(charstackOut,charstackIn):

运算符比较函数,

voidpartCalculate(charoper):

局部计算函数,

voidcalculate():

选择表达式运算

booloperatorCompare(charstackOut,charstackIn):

运算符比较函数

longintchangeHexadecimal(intnum):

进制转换函数实现进制的选择

floatn[max_len];//数字栈

chars[max_len];//符号栈

inttop;//栈顶指针

实现表达式的计算,计算中可以有加减乘除、括号。

利用栈的思想来实现,先取得表达式,然后按序入栈,符号栈和数字栈。

边入栈边进行运算最后的数字栈顶元素为结果。

这里面除了需要出入栈的操作,还需要进行符号优先级的设定和比较,用函数booloperatorCompare(charstackOut,charstackIn)实现。

实现局部计算(栈内符号优先级高于栈外符号优先级),用函数voidpartCalculate(charoper)实现。

五、调试与测试

1这是在调试运行后的截图

2这是我设计的栈代码

3这是calculatorwindow.h中的类

说明:

(1)可以进行常规四则运算,以及带括号的运算。

(2)在输入非法时会出现“####”,表示输入错误。

例1:

2*(3+1)-6/3的运算

按下等号后显示结果如下:

例2:

2+(3-(6+9/3)+5)

按下等号后显示结果如下:

3在非法输入时会自动报错(以除数是0为例)

按下等号后显示结果如下:

4我们的计算器刚开始时不能计算负数,只要有负数,计算结果就出错,这是改进后的

终于计算正确了

八、附录:

核心代码清单

头文件:

**********************************Calculatorwindow.h***********************

#ifndefJISUANQI_H

#defineJISUANQI_H

#endif//JISUANQI_H

#ifndefCALCULATOR_H

#defineCALCULATOR_H//对calculator.h头文件的声明

#include//包含主窗体类

#include//包含按键类

#include//包含垂直布局器类

#include//包含水平布局器类

#include//包含显示框类

#include"stack.h"

usingnamespacestd;

classcalculatorWindow:

publicQWidget//计算器继承自主窗体类

{

Q_OBJECT//必须加上这句,如果要调用信号,槽函数的操作的话

public:

calculatorWindow();//计算器类的构造函数

~calculatorWindow();//计算器类的析构函数

publicslots:

//定义各个按键按下后对应操作处理的槽函数

longintchangeHexadecimal(intnum,intpower);

voidnumButtonPress(charnum);//按数字响应事件

voidopreateButtonPress(charop);//二元运算符响应事件

voiddanButtonPress(charop);//一元运算符的响应函数

voidzeroButtonPress();//调用numButtonPress()函数

voidoneButtonPress();

voidtwoButtonPress();

voidthreeButtonPress();

voidfourButtonPress();

voidfiveButtonPress();

voidsixButtonPress();

voidsevenButtonPress();

voideightButtonPress();

voidnineButtonPress();

voiddecimalButtonPress();

voidaddButtonPress();

voidsubButtonPress();

voidmulButtonPress();

voiddivButtonPress();

voidsinButtonPress();

voidcosButtonPress();

voidtanButtonPress();

voidsqrtButtonPress();

voidpowButtonPress();

voidbinaryButtonPress();

voidoctButtonPress();

voidhexButtonPress();

voidrightPerButtonPress();

voidleftPerButtonPress();

voidclearButtonPress();

voidbackspaceButtonPress();

voidequButtonPress();

voidcalculate();//普通计算

voidhexChange(intnum);//进制转换函数

booloperatorCompare(charstackOut,charstackIn);

voidpartCalculate(charoper);

voidabortOperation();//异常处理函数

stringchangeToABC(intnum);

stringdecToHex(intnumber);

private:

QLineEdit*operateEdit;//声明显示框

QPushButton*zeroButton;//声明数字按键¹

QPushButton*oneButton;

QPushButton*twoButton;

QPushButton*threeButton;

QPushButton*fourButton;

QPushButton*fiveButton;

QPushButton*sixButton;

QPushButton*sevenButton;

QPushButton*eightButton;

QPushButton*nineButton;

QPushButton*decimalButton;//小数点按钮

QPushButton*clearButton;

QPushButton*backspaceButton;

//声明运算符按键

QPushButton*addButton;

QPushButton*subButton;

QPushButton*divButton;

QPushButton*mulButton;

QPushButton*sinButton;

QPushButton*cosButton;

QPushButton*tanButton;

QPushButton*sqrtButton;

QPushButton*powButton;

QPushButton*equButton;

QPushButton*binaryButton;

QPushButton*octButton;

QPushButton*hexButton;

QPushButton*rightPerButton;

QPushButton*leftPerButton;

//声明水平布局器,该布局器主要对24个按键进行布局

QHBoxLayout*firstLayout;

QHBoxLayout*secondLayout;

QHBoxLayout*thirdLayout;

QHBoxLayout*fourthLayout;

QVBoxLayout*mainLayout;//声明垂直布局器,该布局器主要对主窗体上面的空间进行排布

QStringinput;//计算器中要输入的代数表达式

stacknumStack;

stackoperatorStack;

boolopreate=0;//判断是否输入了等号

boolopreated=0;//如果输入了运算符,则置为1

};

#endif//CALCULATOR_H

**********************************Stack.h**********************************

#ifndefSTACK_H

#defineSTACK_H

constintmax_len=20;//栈的最大容量

classstack

{

private:

chars[max_len];//栈的内容保存在数组中

inttop;//栈顶指示器,栈空时为-1

floatn[max_len];

public:

stack();

~stack();

intgetTop();

voidclear();

voidpush(charc);

voidpush(floatf);

charpop(charc);

floatpop(intf);

boolempty();

boolfull();

charremove(charc);

floatremove(intf);

};

#endif//STACK_H

源文件

************************Buttonpress.cpp****************************

#include"calculatorWindow.h"

//数字键和最基本的运算符建的实现

voidcalculatorWindow:

:

numButtonPress(charnum)

{

if(opreate){

//判断是否开始第二次计算,如果opreate为真,单击数字键就表示开始新的计算

operateEdit->setText("");

opreate=0;//将文本置为零,将opreate置为0,一边下一次输入表达式

}

if(input=="")//如果当前显示框为0

{

input=num;//变0为num

}

else

{

input=operateEdit->text();

input.append(num);

}

operateEdit->setText(input);//更新显示框中的显示信息

opreated=0;

//输入数字后将opreate改为1,等待运算符输入

}

//一元运算符的响应函数

voidcalculatorWindow:

:

danButtonPress(charop)

{

if(input=="")//如果当前显示框为0

{

input=op;//变0为num

}

else

{

input=operateEdit->text();

input.append(op);

}

operateEdit->setText(input);//更新显示框中的显示信息

}

//二元运算符响应事件

voidcalculatorWindow:

:

opreateButtonPress(charop)

{

//实现不能连续输入运算符

//如果前面的字符为运算符,则opreated=1,不能再次输入运算符。

//只有opreated=0时才可以输入运算符

if(!

opreated)

{

opreate=0;//只有opreate为假时才可以输入运算符

if(!

opreate){

if(input=="")//如果当前显示框为0

{

input=op;//变0为num

}

else

{

input=operateEdit->text();

input.append(op);

}

operateEdit->setText(input);//更新显示框中的显示信息

}

opreated=1;

}

}

//数字键的实现

voidcalculatorWindow:

:

oneButtonPress()

{

numButtonPress('1');

}

voidcalculatorWindow:

:

twoButtonPress()

{

numButtonPress('2');

}

voidcalculatorWindow:

:

threeButtonPress()

{

numButtonPress('3');

}

voidcalculatorWindow:

:

fourButtonPress()

{

numButtonPress('4');

}

voidcalculatorWindow:

:

fiveButtonPress()

{

numButtonPress('5');

}

voidcalculatorWindow:

:

sixButtonPress()

{

numButtonPress('6');

}

voidcalculatorWindow:

:

sevenButtonPress()

{

numButtonPress('7');

}

voidcalculatorWindow:

:

eightButtonPress()

{

numButtonPress('8');

}

voidcalculatorWindow:

:

nineButtonPress()

{

numButtonPress('9');

}

voidcalculatorWindow:

:

zeroButtonPress()

{

numButtonPress('0');

}

//运算符的按键响应

voidcalculatorWindow:

:

addButtonPress()

{

opreateButtonPress('+');

}

voidcalculatorWindow:

:

subButtonPress()

{

opreateButtonPress('-');

}

voidcalculatorWindow:

:

mulButtonPress()

{

opreateButtonPress('*');

}

voidcalculatorWindow:

:

divButtonPress()

{

opreateButtonPress('/');

}

//小数点按键处理

voidcalculatorWindow:

:

decimalButtonPress()

{

numButtonPress('.');

}

//三角函数的实现,考虑到运算的一致性,便于封装函数,故运算规则只能是先输入数字,后输入运算符

//在这里三角函数只是计算了弧度制的

voidcalculatorWindow:

:

sinButtonPress()

{

danButtonPress('S');

}

voidcalculatorWindow:

:

cosButtonPress()

{

danButtonPress('C');

}

voidcalculatorWindow:

:

tanButtonPress()

{

danButtonPress('T');

}

//开方和平方的运算响应事件

voidcalculatorWindow:

:

sqrtButtonPress()

{

danButtonPress('Q');

}

voidcalculatorWindow:

:

powButtonPress()

{

danButtonPress('W');

}

//括号按键响应事件

voidcalculatorWindow:

:

rightPerButtonPress()

{

numButtonPress('(');

}

voidcalculatorWindow:

:

leftPerButtonPress()

{

numButtonPress(')');

}

//二进制的转换

voidcalculatorWindow:

:

binaryButtonPress()

{

hexChange

(2);

opreate=1;

}

//八进制的转换

voidcalculatorWindow:

:

octButtonPress()

{

hexChange(8);

opreate=1;

}

//十六进制的转换,由于牵扯到非数字字符,暂时并未实现

voidcalculatorWindow:

:

hexButtonPress()

{

if(opreate){//判断是否开始第二次计算,如果opreate为真,单击数字键就表示开始新的计算

operateEdit->setText(0);

opreate=0;//将文本置为零,将opreate置为0,一边下一次输入表达式

}

QStringa=operateEdit->text();

inttemp=a.toInt();

stringresult=decToHex(temp);

operateEdit->setText(QString:

:

fromStdString(result));

opreate=1;

}

//功能键

//等号按键的实现

voidcalculatorWindow:

:

equButtonPress()

{

opreateButtonPress('=');

calculate();

opreate=1;

}

//Clear键的实现

voidcalculatorWindow:

:

clearButtonPress()

{

input="";//把运算操作数2清零

operateEdit->setText(input);//更新显示框中的显示内容

}

//退格键的实现

voidcalculatorWindow:

:

backspaceButtonPress()

{

if(!

opreate)

{

input=operateEdit->text();

input.chop

(1);

if(input.isEmpty()){

input="";

}

operateEdit->setText(input);

}

}

**************************************Calculator.cpp***********************

#include

#include

#include

#include

#include//用atof()时需要用到该头文件

#include

#include"calculatorwindow.h"

#include

usingnamespacestd;

#d

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

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2