qt实现智能计算器_第1页
qt实现智能计算器_第2页
qt实现智能计算器_第3页
qt实现智能计算器_第4页
qt实现智能计算器_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1#理工大学题目:科学计算器组长#学号:11270228 专业:软件工程(2)班组员:#学号:11270136 专业: 软件工程(1)班组员:#学号:11270333 专业: 软件工程(3)班2013 年 11 月 13 日1 引言21.1 设计背景 计算器(calculator;counter)一般是指“电子计算器” ,计算器是能进行数学运算的手持机器,拥有集成电路芯片,其结构简单,比现代电脑结构简单得多,可以说是第一代的电子计算机(电脑) 。计算器这一小小的程序机器实际上是从计算机中割裂出来的衍生品,虽然功能较单一,但因其操作模式的方便快捷和价格的低廉,携带方便等特点,已经被广泛应用于工程、学习、商业贸易等日常生活中,极大的方便了人们对于数字的整合运算,成为人们生活和办公中的必备品之一,深得使用者的青睐。计算器在我们的日常生活扮演着很重要的角色,因此不断设计开发出功能更强大,携带更轻便,使用更加快捷迅速的计算器便成为相应工作者奋斗的目标和任务。1.2 设计目的 进一步了解 C+语言和高级程序设计语言的结构,了解其好处和可用性,掌握基本的程序设计过程和技巧,掌握基本的分析问题、利用计算机求解问题的能力,具备初步的高级语言程序设计能力。为后续计算机课程和毕业设计打下坚实基础。 通过该计算器程序软件的设计,培养独立思考、综合运用所学有关相应知识的能力,更好地巩固C+程序语言设计和Qt4 实践开发课程学习的内容,掌握工程软件设计的基本方法,强化上机动手编程能力,体验理论与实践相结合的过程,同时培养同学之间的团队合作精神,体会在工作中团队合作的重要性和必要性。2.功能需求分析32.1 功能划分 本次我们设计的计算器在某些细节处加入了我们设计同学的独特创新和技巧,具体体现见详细设计部分。对于我们所设计的科学计算器,其功能大致可以如下划分:科学型计算器功能可以进行加、减、乘、除、乘方、开方、指数、对数、三角函数、等方面的运算。2.2 功能描述 对于算术型计算器的功能大家已经非常熟悉,就不再赘述。这里只对科学型计算器功能中的特殊符号、必要函数功能部分作简单描述。特殊符号和函数ln 自然对数,ln(x)是以 e为底的 x的对数Lg 以 10为底的对数,10 是可以省略的sin 正弦函数arcsin 反正弦函数cos 余弦函数arcos反余弦函数tan 正切函数arctan反正切函数n! 阶乘 Clear 清空x平方x立方等等这些符号有利于我们计算,方便快捷的得出结果。2.详细设计2.1 科学计算器功能(1)界面设计界面设计我们是使用代码实现。共 35个 QpushButton为 0到 9按键和加减乘除按键、括号按键、开根号按键、小数点按键、阶乘按键、取倒按键、等于按键、按键等。具体界面设计效果如下:4(2)程序具体实现现在.h 文件中对各个按键在私有槽中进行声明,例如:public slots:void clickbtn1();就对 1键(槽函数)进行声明,然后就可以在.cpp 进行编写程序。声明first,second 两个整形表示第一个输入和第二个输入,然后用 Qt(Qstring)封装好的 append()函数进行添加,当然,这里牵涉到本程序对 Btn按键的函数声明,并且使用 setText 函数,使其按键符号点击后可以在 lineEdit上显示,在这里用的是信号和槽的机制,具体的信号于槽的链接在后面会详细说明。这里仍使用信函和槽连接机制,我们没有使用信号和槽编辑器,而是直接在.cpp 文件中添编写其代码来实现,首先在.h 文件中对各个按键进行声明,如:void clicksin() ;就是对 sin按键进行声明,再到.cpp 文件中编写相应的代码实现其功能,当 Jing_zhan_unary变量为 ture时,执行clickTrigJIng_zhan_TS(“sin”),或当 Jing_zhan_Expression变量为 ture时,执行 sinBian_lian=true;clickJing_zhan_Pro(“sin“,“,mu_qianSin);实现 sin的运算功能。2.2删除功能(Backspace)此功能为删除窗口中的最后一个字符,具体编写过程为:提取窗口中的内容,并把窗口中的内容存放到一个 QString型变量中,然后用 Qt现有的已经封装好的函数,把这个变量从左边开始将其最后一个字符去掉,使其长度减少一,将改变后的字符串在存放到这个变量中,再把这个变量重新返回到窗口中,这样就达到删除的功能了。2.3 清空功能(C)此功能为清空显示窗口,这里用 Qt封装好的函数 clear() ,直接把窗口给清空,这样就达到效果。52.4关于功能(关于)对作者进行了简单介绍2.5退出功能(Exit)实现了软件的退出3.系统的实现:对于下面具体步骤中出现的函数,我们有必要在此说明,这其中也包括整个程序的核心算法。考虑到程序中出现了众多信号与槽的链接,故采用手工链接的方式进行。首先在 chendahao.h中声明如下槽函数:public slots:void clickSifirla();void click_chenhaoQQ();void clickbtn(QString);void clickbtn1();void clickbtn2();void clickbtn3();void clickbtn4();void clickbtn5();void clickbtn6();void clickbtn7();void clickbtn8();void clickbtn9();void clickbtn0();void clickPoint();void clickPointControl();void clickClear();void clickPlus();void clickDecrease();void clickMultiply();void clickEliminate();void clickEql();void clickJing_zhan_();void clickJing_zhan_2(QStringList void clickBackspace();void clickChangesign();void clickSqrt();void click_G();void clickCi();void click_1_x();void clickJie_cheng();6void clickSwitch();void clickSimple();void clickSin();void clickCos();void clickTan();void clickCot();void clickPi();void clickE();void clickArcsin();void clickArccos();void clickArctan();void clickArccot();void clickSinh();void clickCosh();void clickTanh();void clickCoth();void clickLog();void clickHistory();void clickHistoryDelete();void clickHistorySaveas();void clickQt();void clickExpression();void clickunary();void clickReplaceTur(QLabel*,QLabel*,bool);void clickJing_zhan_caozuoleixing();void clickJing_zhan_Pro(QString,QString,bool);void clickTrigJing_zhan_IO(QStringList void clickTrigJing_zhan_IS(QString);void clickYerReplace(QStringList void clickMod();void clickZkuohao();void clickYkuohao();double clickDonusum(int,double);void clickQ_zhishu();在 chendahao.cpp中 chendahao:chendahao(QWidget *parent) : QMainWindow(parent),ui(new Ui:chendahao)构造函数中进行信号于槽的链接,也就是各按键及工具条等组件的动作响应关系(函数)如下:connect(ui-btnSwitch,SIGNAL(clicked(),this,SLOT(clickSwitch(); /科学 和 简单 快速切换键connect(ui-btnHistory,SIGNAL(clicked(),this,SLOT(clickHistory(); / 历史键connect(ui-btn1,SIGNAL(clicked(),this,SLOT(clickbtn1(); 7/ 1connect(ui-btn2,SIGNAL(clicked(),this,SLOT(clickbtn2(); / 2connect(ui-btn3,SIGNAL(clicked(),this,SLOT(clickbtn3(); / 3connect(ui-btn4,SIGNAL(clicked(),this,SLOT(clickbtn4(); / 4connect(ui-btn5,SIGNAL(clicked(),this,SLOT(clickbtn5(); / 5connect(ui-btn6,SIGNAL(clicked(),this,SLOT(clickbtn6(); / 6connect(ui-btn7,SIGNAL(clicked(),this,SLOT(clickbtn7(); / 7connect(ui-btn8,SIGNAL(clicked(),this,SLOT(clickbtn8(); / 8connect(ui-btn9,SIGNAL(clicked(),this,SLOT(clickbtn9(); / 9connect(ui-btn0,SIGNAL(clicked(),this,SLOT(clickbtn0(); / 0connect(ui-btnPoint,SIGNAL(clicked(),this,SLOT(clickPoint(); /小数点的实现connect(ui-btnClear,SIGNAL(clicked(),this,SLOT(clickClear(); / Clear按键的实现connect(ui-btnPlus,SIGNAL(clicked(),this,SLOT(clickPlus(); / 加法connect(ui-btnDecrease,SIGNAL(clicked(),this,SLOT(clickDecrease(); /减号connect(ui-btnMultiply,SIGNAL(clicked(),this,SLOT(clickMultiply(); /乘号connect(ui-btnEliminate,SIGNAL(clicked(),this,SLOT(clickEliminate(); /除号connect(ui-btnEql,SIGNAL(clicked(),this,SLOT(clickEql(); /等号connect(ui-btnBackspace,SIGNAL(clicked(),this,SLOT(clickBackspace(); /退格connect(ui-btnChangesign,SIGNAL(clicked(),this,SLOT(clickChangesign(); /改变符号connect(ui-btnSqrt,SIGNAL(clicked(),this,SLOT(clickSqrt(); / 开根号8connect(ui-btn_G,SIGNAL(clicked(),this,SLOT(click_G(); /按百分比的形式显示乘积结果connect(ui-btnCi,SIGNAL(clicked(),this,SLOT(clickCi(); / 实现connect(ui-btn_1_x,SIGNAL(clicked(),this,SLOT(click_1_x(); / 1/x 功能键实现connect(ui-btnJie_cheng,SIGNAL(clicked(),this,SLOT(clickJie_cheng(); / 阶乘connect(ui-btnSin,SIGNAL(clicked(),this,SLOT(clickSin(); / Sinconnect(ui-btnCos,SIGNAL(clicked(),this,SLOT(clickCos(); / Cosconnect(ui-btnTan,SIGNAL(clicked(),this,SLOT(clickTan(); / Tanconnect(ui-btnCot,SIGNAL(clicked(),this,SLOT(clickCot(); / Cotconnect(ui-btnPi,SIGNAL(clicked(),this,SLOT(clickPi(); / Piconnect(ui-btnE,SIGNAL(clicked(),this,SLOT(clickE(); / expconnect(ui-btnArcsin,SIGNAL(clicked(),this,SLOT(clickArcsin(); / Asinconnect(ui-btnArccos,SIGNAL(clicked(),this,SLOT(clickArccos(); / Acosconnect(ui-btnArctan,SIGNAL(clicked(),this,SLOT(clickArctan(); / Atanconnect(ui-btnArccot,SIGNAL(clicked(),this,SLOT(clickArccot(); / Acotconnect(ui-btnLog,SIGNAL(clicked(),this,SLOT(clickLog(); / Logconnect(ui-btnMod,SIGNAL(clicked(),this,SLOT(clickMod(); / Modconnect(ui-btnDelete,SIGNAL(clicked(),this,SLOT(clickHistoryDelete(); / 历史框中 删除键connect(ui-btnSaveas,SIGNAL(clicked(),this,SLOT(clickHistorySaveas(); / 历史框中 另存为键connect(ui-btnZkuohao,SIGNAL(clicked(),this,SLOT(clickZkuohao(); / (connect(ui-btnYkuohao,SIGNAL(clicked(),this,SLOT(clickYkuohao(); 9/ )connect(ui-actionQt,SIGNAL(triggered(),this,SLOT(clickQt(); / about Qtconnect(ui-action_chenhaoQQ,SIGNAL(triggered(),this,SLOT(click_chenhaoQQ();/ about usconnect(ui-action_Ke_xue,SIGNAL(triggered(),this,SLOT(clickSwitch(); /动作 科学型connect(ui-action_History,SIGNAL(triggered(),this,SLOT(clickHistory(); /动作 历史connect(ui-action_Simple,SIGNAL(triggered(),this,SLOT(clickSimple(); /动作 简单connect(ui-action_Expression,SIGNAL(triggered(),this,SLOT(clickExpression(); /多元表达式connect(ui-action_unary,SIGNAL(triggered(),this,SLOT(clickunary(); /一元顺序运算connect(ui-btnSinh,SIGNAL(clicked(),this,SLOT(clickSinh(); / Sinhconnect(ui-btnCosh,SIGNAL(clicked(),this,SLOT(clickCosh(); / Coshconnect(ui-btnTanh,SIGNAL(clicked(),this,SLOT(clickTanh(); / Tanhconnect(ui-btnCoth,SIGNAL(clicked(),this,SLOT(clickCoth(); / Cothconnect(ui-btnQ_zhishu,SIGNAL(clicked(),this,SLOT(clickQ_zhishu(); / a*b 功能键的实现接下来,对部分重要的槽函数进行说明。首先,由于本课题的方向行,所以,在实现科学型计算器前,我们必须弄得一般计算器 Btn键的工作原理,而这部分,在 Qt事例中用详细的说明,这里我们就不必指出。考虑到表达式和简单的区别,我们分两种情况进行编写。当然,在后续的函数中,这种分别讨论的情况是经常出现的,这也从侧面说明了 bool Jing_zhan_unary,Jing_zhan_Expression 的重要性。具体代码如下:void chendahao:clickbtn(QString btn)if(Jing_zhan_unary=true)clickSifirla();if(Jing_zhan_Bian_lian=true)10ui-LineEdit1-setText(“);Jing_zhan_Bian_lian=false;if(zeroBian_lian=true)ui-LineEdit1-setText(btn);elseqian_= ui-LineEdit1-text();qian_.append(btn);ui-LineEdit1-setText(qian_);zeroBian_lian=false;safetyJing_zhan_=false;else if(Jing_zhan_Expression=true)if(mu_qianEql=true)ui-LineEdit1-setText(“);clickSifirla();qian_= ui-LineEdit1-text();qian_.append(btn);ui-LineEdit1-setText(qian_);而一般的数字键,只需调用此槽函数即可,如下所示:void chendahao:clickbtn1()clickbtn(“1“);当然,由于0变量的特殊性,所以,需要对其添加额外的约束才能实现,代码如下:void chendahao:clickbtn0()clickSifirla();if(Jing_zhan_unary=true)if(Jing_zhan_Bian_lian=true)ui-LineEdit1-setText(“);11Jing_zhan_Bian_lian=false;if(ui-LineEdit1-text()=“)ui-LineEdit1-setText(“0“);zeroBian_lian=true;else if(zeroBian_lian=false)qian_=ui-LineEdit1-text();qian_.append(“0“);ui-LineEdit1-setText(qian_);safetyJing_zhan_=false;else if(Jing_zhan_Expression=true)clickbtn(“0“);以上程序具体只是为我们开辟了表达式计算器实现的可能,具体的计算实现过程封装在 void clickJing_zhan_2()中,这里就不指出,详细过程见附录。最后,出于对本设计科学方面计算实现说明的目的,我们举出了程序中,在这部分中最为核心的代码,也就是在进行表达式计算时,调用的函数 void clickTrigJing_zhan_IO()如下:通过以上说明,我想大家不难发现,本课题的核心最要是在于实现表达式和基于其的按键功能特点开发上面。最后,基于以上说明,我们便可以进行如下的详细设计过程。3.1各功能键的具体实现:/加法运算void chendahao:clickPlus()clickJing_zhan_Pro(“Plus“,“+“,mu_qianPlus);pointBian_lian=false;/减法运算void chendahao:clickDecrease()clickJing_zhan_Pro(“Decrease“,“-“,mu_qianDecrease);pointBian_lian=false;12/乘法运算void chendahao:clickMultiply()clickJing_zhan_Pro(“Multiply“,“x“,mu_qianMultiply);pointBian_lian=false;/除法运算void chendahao:clickEliminate()clickJing_zhan_Pro(“Eliminate“,“/“,mu_qianEliminate);pointBian_lian=false;/ 幂的运算void chendahao:clickCi()clickJing_zhan_Pro(“Ci“,“,mu_qianCi);/ n! 阶乘的实现void chendahao:clickJie_cheng()if(Jing_zhan_unary=true)if(safetyJing_zhan_=true)qDebug(“错误“);elseint Jie_cheng=1;clickEql();qian_Double=ui-LineEdit1-text().toDouble();double Jie_chengCounter=qian_Double;while(Jie_chengCounter0)Jie_cheng=Jie_cheng*Jie_chengCounter;Jie_chengCounter=Jie_chengCounter-1;ui-LineEdit1-setText(QString:number(Jie_cheng);ui-texthistory-insertPlainText(QString:number(history_Counter)+“ - “+QString:number(qian_Double)+“ ! =“+QString:number(Jie_cheng)+“n“);history_Counter=history_Counter+1;13else if(Jing_zhan_Expression=true)clickJing_zhan_Pro(“Jie_cheng“,“!“,mu_qianJie_cheng);Jie_chengBian_lian=true;3.2清空功能:清空功能的具体实现代码如下:3.关于 功能这里,我们主要说明 618功能和窗体的实现。由于需要在窗体中填加组员照片,故先将所需资源添加到 image文件夹中,并在 chenhao.cpp 中实现下面代码:/ 在窗体内加入照片 -但是,貌似有点失误/-导致 主界面都出现照片 但不影响嘛void QWidget:paintEvent(QPaintEvent *)QPainter painter(this);QPixmap pix;pix.load(“image/110531_202552.jpg“);painter.drawPixmap(0,0,100,100,pix);对于个人信息的添加,具体实现在 chenhao.cpp中的构造函数中,代码如下:/构造函数 主要目的 -添加名字 学号chenhao:chenhao(QWidget *parent) :QWidget(parent),ui(new Ui:chenhao)ui-setupUi(this);connect(ui-btn_you_guess,SIGNAL(clicked(),this,SLOT(clickbtn_you_guess();ui-lbl618-setText(“tt陈 皓 201005010508ntt蒲小鹏 201005010507ntt饶和丰 201005010506ntt 张晨曦 201005010504ntt张良军 201005010503n“);14当然,由于需要设置链接,我们可以采用以下方式设置。在 Qt 设计师中,选中需要设置链接的 Label 组件,在其属性栏中实现以下操作。选中 点击 然后在出现的窗体中编辑 (当然,本设计的超链接也在其中设置)最后,我们只需要完成,618 中的按键(槽函数)的功能就行了,具有代码如下:void chenhao:clickbtn_you_guess()close();然后,只需要点击 中的 618,就会出现如下所示的界面:4.运行和测试4.1个别按键功能及使用方法介绍:(1):退格键,可以删除窗口中从左边起最后一个字符。运行测试:在窗口中输入:15使用一次退格键以后显示结果:(2) :开方,如需要对常数 x 进行开方,则可在窗口中先点击开方键,再输入 x。运行测试:对 9 进行开方运算,在窗口中输入点击等于号之后窗口中所显示结果之后窗口中所显示结果:(3) :幂运算,如在窗口中输入 xy,则是求 x 的 y 次幂。运行测试:在窗口中输入点击等于号之后窗口中所显示结果16(4) :阶乘,此运算符只能对正整数进行运算,当输入正整数x 时,系统所执行的算法为: 。1*2)(*x运行测试:在窗口中输入点击等于号之后窗口中所显示结果(5) 、 、 、:三角函数运算。由于以上四个运算的槽函数实现机制一样,所以在这里只对其中一个进行测试。的测试在窗口中输入点击等于号之后窗口中所显示结果(6) :可实现以 10 为底的对数,下面对此进行测试:缺图17点击等 lg 按钮之后窗口中所显示结果5.心得体会1、徐红军:通过大家的努力,终于将 Qt期末作业完成了,虽然在科学计算器的设计过程中

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论