简单计算器实训报告.docx

上传人:b****5 文档编号:11549887 上传时间:2023-03-19 格式:DOCX 页数:19 大小:49.09KB
下载 相关 举报
简单计算器实训报告.docx_第1页
第1页 / 共19页
简单计算器实训报告.docx_第2页
第2页 / 共19页
简单计算器实训报告.docx_第3页
第3页 / 共19页
简单计算器实训报告.docx_第4页
第4页 / 共19页
简单计算器实训报告.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

简单计算器实训报告.docx

《简单计算器实训报告.docx》由会员分享,可在线阅读,更多相关《简单计算器实训报告.docx(19页珍藏版)》请在冰豆网上搜索。

简单计算器实训报告.docx

简单计算器实训报告

 

Linux应用与编程

实习报告

学院名称

专业班级

学生姓名

学号

指导教师

 

山东科技大学

一、实习题目:

 B2-简单计算器        

二、实习时间:

 19周~20周实习地点:

 J13-128                 三、实习任务:

 实现一个简单计算器,计算器包括加、减、乘、除四种运算。

用户通过鼠标进行数据输入,输入的数据以及计算结果显示在文本框中

  

                                      

                                      

四、小组分工说明:

         独立完成            

                                          

    

五、实习成绩    

六、指导教师对实习的评语:

    

                                          

     

      

    

                                          

     

指导教师(签章):

2015年月日

 

1.概述

1.1实训项目简介

本次实训项目是应用Linux系统中的QT编译器编写一个界面简洁,操作简单的简易计算器。

该简易计算器运用的技术主要是Linux系统中QT编译器的一些函数以及指针等。

1.2基本功能

(1)通过鼠标点击接收数字键入以及运算符。

(2)能够进行简单的加减乘除四则运算。

(3)一键清空功能。

1.3附加功能

(1)键入数字超过6位,输出窗口输出“error”提示。

(2)能够进行连续加法和减法混合运算,能够进行连续乘法和除法混合运算。

(3)键入的被除数为0时,输出窗口输出“被除数不能为0哦”提示。

(4)连续键入两个运算符时,输出窗口输出“只能输入一个运算符哦”提示。

(5)进行加减法与乘除法混合运算时,输出窗口输出“error”提示。

2.相关技术

2.1QT中信号和槽

信号槽机制与Windows下消息机制类似,消息机制是基于回调函数,Qt中用信号与槽来代替函数指针,使程序更安全简洁。

当对象改变其状态时,信号就由该对象发射(emit)出去,而且对象只负责发送信号,它不知道另一端是谁在接收这个信号。

这样就做到了真正的信息封装,能确保对象被当作一个真正的软件组件来使用。

槽用于接收信号,而且槽只是普通的对象成员函数。

一个槽并不知道是否有任何信号与自己相连接。

而且对象并不了解具体的通信机制。

2.2字符串输出数据组

为实现计算整式的显示,并且避免键入下一个数之前frist和second清除不净,在calculor.h中定义字符串,把显示窗口中的数据捕捉到字符串中,并随第二个数一起显示,从而实现计算整式的显示。

 

str=ui->textEdit->toPlainText()+QString:

:

number(int(key));

ui->textEdit->setText(str);

3.需求分析(用面向对象方法给出系统的主要需求模型,略写)

●3.1功能需求分析

基本功能:

鼠标键入数字及运算符,进行简单的加减乘除四则运算。

拓展功能:

进行连续加减或乘除运算,当出现输入被除数为0,输入位数过多,连续输入多个运算符等错误时,输出窗口提示相应错误。

●3.2数据需求分析

连续输入时的总式实时显示,结果的显示,错误类型的显示。

●3.3行为需求分析

鼠标键入数字及运算符。

●3.4其他需求

界面简单,操作简单。

4.总体设计与详细设计

4.1系统模块划分

简易计算器系统模块

模块名称

功能简介

数字按键模块

将键入的数字传到数据转换模块中

运算符按键模块

进行判断是否连续运算,从数据计算模块中读取结果并显示

数据转换模块

键入多位数字的转化

数据计算模块

判断运算符并进行计算

输入位数限制模块

限制输入位数并进行错误提示

4.2主要功能模块

4.1.1系统主要类图

 

4.1.2简易计算器程序执行流程图

是否

5.编码实现

calculor.cpp

#include"calculor.h"

#include"ui_calculor.h"

calculor:

:

calculor(QWidget*parent):

QWidget(parent),

ui(newUi:

:

calculor)

{

ui->setupUi(this);

ui->textEdit->setAlignment(Qt:

:

AlignRight);

ui->textEdit->setReadOnly(true);

my_state=FRIST;

my_sign=NO;

frist=0;

second=0;

result=0;

error=0;

changdu=0;

}

calculor:

:

~calculor()

{

deleteui;

}

//按键处理函数

voidcalculor:

:

on_pushButton_1_clicked()

{

trans

(1);

error=0;

changdu++;

if(changdu>6)

ui->textEdit->setText("error");

}

voidcalculor:

:

on_pushButton_2_clicked()

{

trans

(2);

error=0;

changdu++;

if(changdu>6)

ui->textEdit->setText("error");

}

voidcalculor:

:

on_pushButton_3_clicked()

{

trans(3);

error=0;

changdu++;

if(changdu>6)

ui->textEdit->setText("error");

}

voidcalculor:

:

on_pushButton_4_clicked()

{

trans(4);

error=0;

changdu++;

if(changdu>6)

ui->textEdit->setText("error");

}

voidcalculor:

:

on_pushButton_5_clicked()

{

trans(5);

error=0;

changdu++;

if(changdu>6)

ui->textEdit->setText("error");

}

voidcalculor:

:

on_pushButton_6_clicked()

{

trans(6);

error=0;

changdu++;

if(changdu>6)

ui->textEdit->setText("error");

}

voidcalculor:

:

on_pushButton_7_clicked()

{

trans(7);

error=0;

changdu++;

if(changdu>6)

ui->textEdit->setText("error");

}

voidcalculor:

:

on_pushButton_8_clicked()

{

trans(8);

error=0;

changdu++;

if(changdu>6)

ui->textEdit->setText("error");

}

voidcalculor:

:

on_pushButton_9_clicked()

{

trans(9);

error=0;

changdu++;

if(changdu>6)

ui->textEdit->setText("error");

}

voidcalculor:

:

on_pushButton_10_clicked()

{

trans(0);

error=0;

changdu++;

if(changdu>6)

ui->textEdit->setText("error");

}

//加法按键运算函数

voidcalculor:

:

on_pushButton_jia_clicked()

{

if(changdu>7)

ui->textEdit->setText("error");

else{

if(error!

=0)

{

ui->textEdit->setText("荳€谺。蜿ェ閭ス霎灘・ヤ竴荳ェ隶。邂礼ャヲ蜩ヲ・・シ・シ・);

}

else

{

if(my_state==SECOND)

{

if(my_sign==CHU||my_sign==CHENG)

ui->textEdit->setText("error");

else

cal();

//ui->textEdit->setText(QString:

:

number(result));

str=ui->textEdit->toPlainText()+'+';

ui->textEdit->setText(str);

frist=result;

second=0;

my_sign=JIA;

}

else

{

my_sign=JIA;

my_state=SECOND;

str=ui->textEdit->toPlainText()+'+';

ui->textEdit->setText(str);

}

error++;

}

}

}

//减法运算函数

voidcalculor:

:

on_pushButton_jian_clicked()

{

if(changdu>6)//键入数据位数限制条件

ui->textEdit->setText("error");

else{

if(error!

=0)//连续键入两个运算符报错

{

ui->textEdit->setText(“不能连续输入两个运算符哦”);

}

else

{

error++;

if(my_state==SECOND)//连续减法运算

{

if(my_sign==CHU||my_sign==CHENG)

ui->textEdit->setText("error");//混合运算报错

else

cal();

//ui->textEdit->setText(QString:

:

number(result));

str=ui->textEdit->toPlainText()+'-';

ui->textEdit->setText(str);

frist=result;

second=0;

my_sign=JIAN;

}

else

{

my_sign=JIAN;

my_state=SECOND;

str=ui->textEdit->toPlainText()+'-';

ui->textEdit->setText(str);

}

}

}

}

//乘法运算运算符函数

voidcalculor:

:

on_pushButton_cheng_clicked()

{

if(changdu>6)

ui->textEdit->setText("error");

else{

if(error!

=0)

{

ui->textEdit->setText(“不能连续键入两个运算符哦”);

}

else

{

error++;

if(my_state==SECOND)

{

if(my_sign==JIA||my_sign==JIAN)

ui->textEdit->setText("error");

else

cal();

//ui->textEdit->setText(QString:

:

number(result));

str=ui->textEdit->toPlainText()+'*';

ui->textEdit->setText(str);

frist=result;

second=0;

my_sign=CHENG;

}

else

{

my_sign=CHENG;

my_state=SECOND;

str=ui->textEdit->toPlainText()+'*';

ui->textEdit->setText(str);

}

}

}

}

//除法运算符函数

voidcalculor:

:

on_pushButton_chu_clicked()

{

if(changdu>6)

ui->textEdit->setText("error");

else{

if(error!

=0)

{

ui->textEdit->setText(“不能连续输入两个运算符哦!

”);

}

else

{

error++;

if(my_state==SECOND)

{

if(my_sign==JIA||my_sign==JIAN)

ui->textEdit->setText("error");

else

cal();

//ui->textEdit->setText(QString:

:

number(result));

str=ui->textEdit->toPlainText()+'/';

ui->textEdit->setText(str);

frist=result;

second=0;

my_sign=CHU;

}

else

{

my_sign=CHU;

my_state=SECOND;

str=ui->textEdit->toPlainText()+'/';

ui->textEdit->setText(str);

}

}

}

}

//等于号运算函数

voidcalculor:

:

on_pushButton_enter_clicked()

{

if((my_sign==CHU)&&(second==0))

{

ui->textEdit->setText("”);

}

else

{

cal();

ui->textEdit->setText(QString:

:

number(result));

}

//shujuhuifu

frist=0;

second=0;

my_state=FRIST;

my_sign=NO;

}

//清楚键位函数

voidcalculor:

:

on_pushButton_clean_clicked()

{

ui->textEdit->clear();

my_state=FRIST;

my_sign=NO;

frist=0;

second=0;

result=0;

error=0;

changdu=0;

}

//数据转换函数

voidcalculor:

:

trans(charkey)

{

if(my_state==FRIST)

{

frist=frist*10+(int)key;

ui->textEdit->setText(QString:

:

number(frist));

}

else

{

second=second*10+(int)key;

//ui->textEdit->setText(QString:

:

number(second));

str=ui->textEdit->toPlainText()+QString:

:

number(int(key));

ui->textEdit->setText(str);

}

}

//数据运算函数

voidcalculor:

:

cal()

{

changdu=0;

error=0;

if(my_sign==JIA)

{

result=frist+second;

}

elseif(my_sign==JIAN)

{

result=frist-second;

}

elseif(my_sign==CHENG)

{

result=frist*second;

}

elseif(my_sign==CHU)

{

result=frist/second;

}

}

6.测试情况说明。

●6.1主要模块测试情况(白盒)

模块1、按键模块测试

用例

预期结果

实际结果

问题描述

修改方案

鼠标点击0—9十个键位

显示窗口显示0—9十个数

显示窗口显示0—9十个数

鼠标点击AC键

窗口中原来的数字消失归零

窗口中原来的数字消失归零

鼠标点击运算符

窗口显示运算符

窗口显示运算符

●6.2主要功能测试情况(黑盒)

功能1、键入数据位数限制测试

用例

预期结果

实际结果

问题描述

修改方案

键入6位以上的数字

键入第七位是窗口显示error

键入第七位是窗口显示error

功能2、被除数为零报错测试

用例

预期结果

实际结果

问题描述

修改方案

键入随意数除以0

窗口显示“被除数不能为零哦!

窗口显示“被除数不能为零哦!

功能3、连续键入两运算符报错测试

用例

预期结果

实际结果

问题描述

修改方案

连续键入两个运算符

窗口显示“不能连续输入两个运算符哦!

窗口显示“不能连续输入两个运算符哦!

7.实训中遇到的主要问题及解决方法

在数据转换函数中,键入second的时,输入数据出现上次数据无法清理的情况。

解决方法:

利用colculor.h中定义的key字符型数据,将key强制转换成int类型,然后加到前一个second中。

voidcalculor:

:

trans(charkey)

{

if(my_state==FRIST)

{

frist=frist*10+(int)key;

ui->textEdit->setText(QString:

:

number(frist));

}

else

{

second=second*10+(int)key;

str=ui->textEdit->toPlainText()+QString:

:

number(int(key));

ui->textEdit->setText(str);

}

}

8.实训收获与体会

在本次Linux实训中,熟悉了QT的基本界面,熟悉了QT基本编程过程,QT的简洁性易操作性是我对编程产生了浓厚的兴趣。

在这个过程中克服了许多困难,试验了许多种不同的防止数据溢出的方法,加入许多个判断控制输出error的开关,这个过程带给了我更优化的编程思想。

但是对QT的细节操作还是不熟悉,QT中的许多控件不熟悉,计算器界面不是很漂亮。

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

当前位置:首页 > 医药卫生 > 基础医学

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

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