中国计量学院
..
《嵌入式系统原理》课程作品验收报告书
(计算机科学与技术专业用)
班 级 学 号 姓 名 指导教师 日 期
一、课程作品设计目的和功能
我们做的作品是简单的计算器,实现简单的四则运算以及幂运算、根运算、倒数运算。我们的作品主要是用Qt进行界面设计,以及后台进行运算控制。 作品设计目的:开发简单的计算器,来帮助我们进行日常运算,这样,能够很好的服务我们。同时,我们在开发过程中,能够熟悉Qt开发,并且增进对嵌入式开发的了解。 功能,实现简单的加减乘除、求根、求幂、求倒的运算。
二、作品方案设计及开发过程、
1.作品设计背景
本学期,我们学习了《嵌入式系统原理》这门课,使我对嵌入式开发产生了浓厚的兴趣,为了检验本学期的学习成果,所以决定做一个简单的作品,一方面,能够使自己对嵌入式开发的整体流程有一个更深的了解,另一方面,通过这个作品,我能够学习更多的知识。所以,有了本作品的诞生。 2.功能描述
本计算器主要有加减乘除等运算。可以进行浮点数的各种简单运算。并保留小数点后5位来保证计算的准确性。 3.主要数据结构
主要数据结构有类结构。 4.主要函数说明
void Button0Clicked();
对按钮0进行事件处理的函数
《嵌入式相关资料》
void Button1Clicked(); void Button2Clicked(); void Button3Clicked(); void Button4Clicked(); void Button5Clicked(); void Button6Clicked(); void Button7Clicked(); void Button8Clicked(); void Button9Clicked();
对按钮1进行事件处理的函数 对按钮2进行事件处理的函数 对按钮3进行事件处理的函数 对按钮4进行事件处理的函数 对按钮5进行事件处理的函数 对按钮6进行事件处理的函数 对按钮7进行事件处理的函数 对按钮8进行事件处理的函数 对按钮9进行事件处理的函数 对按钮 + 进行事件处理的函数 对按钮 / 进行事件处理的函数 对按钮 . 进行事件处理的函数
void addButtonClicked(); void divideButtonClicked(); void dotButtonClicked();
void multiplyButtonClicked(); 对按钮 * 进行事件处理的函数 void subButtonClicked(); void sumButtonClicked();
对按钮 - 进行事件处理的函数 对按钮 = 进行事件处理的函数 对按钮 1/x进行事件处理的函数
void daoshuButtonClicked();
void involutionButtonClicked(); 对按钮 ^ 进行事件处理的函数 void sqrtButtonClicked(); 对按钮 sqrt进行事件处理的函数
对按钮c进行事件处理的函数
void clearButtonClicked();
TMainForm(QWidget * parent = 0, const char * name = 0, WFlags f = WType_TopLevel) : TMainFormBase(parent,name,f) {}
对该程序类中的个成员变量进行初始化
《嵌入式相关资料》
5.算法流程图
三、调试记录与分析
我们通过构造几组数据来对我们的程序进行调试,在已经在arm上运行的计算器
2^3=
4sqrt
程序上通过按钮输入以下数据:111+22.33 = 11+22-3*2/3= =
2 ‘1/x’ =
2.2^2=
5.2 sqrt = 3.4 ‘1/x’ =
经过测试,我们的计算器都能够计算出正确的结果。说明我们的计算器没有明显的漏洞。
四、运行结果及说明
《嵌入式相关资料》
我们进行了大量的测试,包括简单的整数个各种运算,浮点数的各种运算,各种运算的连续计算,都没有发现问题。说明我们设计的计算器没有严重的逻辑错误。
五、课程作品设计总结
本次作品设计,我们严格按照软件设计流程进行了严密的设计,从确定作品,再经过逻辑结构设计,界面设计,各函数消息响应,各个函数内部功能的实现,以及各个按钮消息条件控制,到最后的调试和完善。我们都尽自己最大的努力做到毫无遗漏。但尽管这样,我们在后期数据测试时还是碰上了几个问题,像我们对各个按钮在什么情况下能进行消息响应,以及我们对后台逻辑控制与前台界面按钮关联都曾碰到问题。但是在我们经过查阅资料和互相讨论后都顺利解决。另外,由于我们在进行作品设计之初对嵌入式开发还不是很了解,以及我们对linux系统的不熟悉,导致了很多小问题,比如各种命令的使用,和arm板进行交叉编译以及数据传输。但是,我们都一一克服了。
总之,经过本次作品设计,我们对嵌入式系统原理这门实用的课程有了更深的了解,
并能进行初步灵活的运用了,这才是最最关键的。
参考资料
[1]参考文献[1]陈 琦.QT的编程技术及应用[J].科技信息,2008(33):5032504. [2]李 凡.Qt
Embedded在嵌入式Linux系统下的移植与应用[J].科技信息,2006,16(7):79280.
Embedded在嵌入式Linux上的移植[J].计算机技术与发展,2006,16(7):266.
Embedded图形界面开发[J].电子工程师,2007(33):46248.
[3]X芳辉,王建群.Qt
[4]何剑锋,邬文彪,李宏穆等.嵌入式Linux系统的Qt[6]X 波,周克贵.基于Qt编程[M].:科学,2001
[5]王自强,X海燕,李媛洲.Linux下图形用户界面程序的开发与实现[J].计算机应用与软件,2005,22(6):81283.
Embedded和Linux的嵌入式GUI的研究与实现[J].仪器仪表用户,2007,14(6):19220.
[7]孙天泽,袁文菊,X海峰.嵌入式设计及Linux驱动开发指南[M].:电子工业,2005.[8]李宋琛主编.Linux面向对象窗口高级
附录
I.作品界面
《嵌入式相关资料》
II.源程序
1.main_form.h头文件
#if !defined (__MAIN_FORM_H__) # define __MAIN_FORM_H__
#include \"main_form_base.h\" #include class TMainForm: public TMainFormBase { Q_OBJECT private: QString A,B; char c; bool only; public: TMainForm(QWidget * parent = 0, const char * name = 0, WFlags f = WType_TopLevel) : TMainFormBase(parent,name,f) { A=\"0\"; B=\"0\"; c=' '; only = true; } 《嵌入式相关资料》 virtual ~TMainForm() {} public slots: void clearButtonClicked(); void Button0Clicked(); void Button1Clicked(); void Button2Clicked(); void Button3Clicked(); void Button4Clicked(); void Button5Clicked(); void Button6Clicked(); void Button7Clicked(); void Button8Clicked(); void Button9Clicked(); void addButtonClicked(); void divideButtonClicked(); void dotButtonClicked(); void multiplyButtonClicked(); void subButtonClicked(); void sumButtonClicked(); void daoshuButtonClicked(); void involutionButtonClicked(); void sqrtButtonClicked(); }; #endif 2.main_form.cpp 文件 #include \"main_form.h\" #include void TMainForm::Button1Clicked() //数字按键“1”的槽函数 { if(B==\"0\") B=\"1\"; //如果B为0直接进行替代,想象下计算器,按了“1”键总不能显示的是“01”吧.. else { B=edit_in->text(); //如果不是,先获取当前文本编辑框的内容,如B=23,再按一下那么在后面追加1.. B.append('1'); } edit_in->setText(B); //将B再次送到文本编辑框进行显示... } void TMainForm::Button2Clicked() //同上 { 《嵌入式相关资料》 if(B==\"0\") B=\"2\"; else { B=edit_in->text(); B.append('2'); } edit_in->setText(B); } void TMainForm::Button3Clicked() //同上.. { if(B==\"0\") B=\"3\"; else { B=edit_in->text(); B.append('3'); } edit_in->setText(B); } void TMainForm::Button4Clicked() { if(B==\"0\") B=\"4\"; else { B=edit_in->text(); B.append('4'); } edit_in->setText(B); } void TMainForm::Button5Clicked() { if(B==\"0\") B=\"5\"; else { B=edit_in->text(); B.append('5'); } edit_in->setText(B); } void TMainForm::Button6Clicked() { if(B==\"0\") B=\"6\"; 《嵌入式相关资料》 else { B=edit_in->text(); B.append('6'); } edit_in->setText(B); } void TMainForm::Button7Clicked() { if(B==\"0\") B=\"7\"; else { B=edit_in->text(); B.append('7'); } edit_in->setText(B); } void TMainForm::Button8Clicked() { if(B==\"0\") B=\"8\"; else { B=edit_in->text(); B.append('8'); } edit_in->setText(B); } void TMainForm::Button9Clicked() { if(B==\"0\") B=\"9\"; else { B=edit_in->text(); B.append('9'); } edit_in->setText(B); } void TMainForm::Button0Clicked() { if(B==\"0\") B=\"0\"; else 《嵌入式相关资料》 { B=edit_in->text(); B.append('0'); } edit_in->setText(B); } void TMainForm::dotButtonClicked() //这个是小数点键对应的slot函数,比较特殊,直接追加就可以了 { if(only == true) { if(B==\"0\") B.append('.'); else { B=edit_in->text(); B.append('.'); } edit_in->setText(B); } only = false; } void TMainForm::addButtonClicked() //加法键 { double n,m; B=edit_in->text(); if(c==' ') //如果c为空格键,说明现在是第一次运算,那么不进行任何操作,只是将B复制给A(注意A原来是“0”) //同时保存这一次的操作符,以便下一次计算. { A=B; B=\"0\"; c='+'; } else { n=A.toDouble(); //如果上一次已经有运算符,那么将A,B都转换成浮点数 m=B.toDouble(); if(c=='+') n=n+m; if(c=='-') n=n-m; if(c=='*') n=n*m; if(c=='/') n=n/m; if(c=='^') n=pow(n,m); A=QString::number(n,'f',10); //再转换回字符形式 《嵌入式相关资料》 B=\"0\"; //将B重新初始化 c='+'; edit_in->setText(A); //显示中间结果 } only = true; } void TMainForm::subButtonClicked() //减号 { double n,m; B=edit_in->text(); if(c==' ') { A=B; B=\"0\"; c='-'; } else { n=A.toDouble(); m=B.toDouble(); if(c=='+') n=n+m; if(c=='-') n=n-m; if(c=='*') n=n*m; if(c=='/') n=n/m; if(c=='^') n=pow(n,m); if(c=='$') n=sqrt(n); if(c=='') n=1.0/n; A=QString::number(n,'f',10); B=\"0\"; c='-'; edit_in->setText(A); } only = true; } void TMainForm::multiplyButtonClicked() //乘号 { double n,m; B=edit_in->text(); if(c==' ') { A=B; B=\"0\"; c='*'; 《嵌入式相关资料》 } else { n=A.toDouble(); m=B.toDouble(); if(c=='+') n=n+m; if(c=='-') n=n-m; if(c=='*') n=n*m; if(c=='/') n=n/m; if(c=='^') n=pow(n,m); A=QString::number(n,'f',10); B=\"0\"; c='*'; edit_in->setText(A); } only = true; } void TMainForm::divideButtonClicked() //除号 { double n,m; B=edit_in->text(); if(c==' ') { A=B; B=\"0\"; c='/'; } else { n=A.toDouble(); m=B.toDouble(); if(c=='+') n=n+m; if(c=='-') n=n-m; if(c=='*') n=n*m; if(c=='/') n=n/m; if(c=='^') n=pow(n,m); A=QString::number(n,'f',10); B=\"0\"; c='/'; edit_in->setText(A); } only = true; } 《嵌入式相关资料》 void TMainForm::sumButtonClicked() //等号键,同上类似 { double n,m; B=edit_in->text(); if(c==' ') { A=B; B=\"0\"; edit_in->setText(A); A=\"0\"; c=' '; } else { n=A.toDouble(); m=B.toDouble(); if(c=='+') n=n+m; if(c=='-') n=n-m; if(c=='*') n=n*m; if(c=='/') n=n/m; if(c=='^') n=pow(n,m); A=QString::number(n,'f',5); B=\"0\"; c=' '; edit_in->setText(A); A=\"0\"; } only = true; } void TMainForm::daoshuButtonClicked()//求倒数 { double n,m; B=edit_in->text(); if(c==' ') { n=B.toDouble(); n=1.0/n; B=QString::number(n,'f',10); edit_in->setText(B); A = B; B = \"0\"; } else 《嵌入式相关资料》 { n=A.toDouble(); m=B.toDouble(); if(c=='+') n=n+m; if(c=='-') n=n-m; if(c=='*') n=n*m; if(c=='/') n=n/m; if(c=='^') n=pow(n,m); n = 1.0/n; A=QString::number(n,'f',10); B=\"0\"; c = ' '; edit_in->setText(A); } only = true; } void TMainForm::involutionButtonClicked()//求n次方 { double n,m; B=edit_in->text(); if(c==' ') { A=B; B=\"0\"; c='^'; } else { n=A.toDouble(); m=B.toDouble(); if(c=='+') n=n+m; if(c=='-') n=n-m; if(c=='*') n=n*m; if(c=='/') n=n/m; if(c=='^') n=pow(n,m); A=QString::number(n,'f',10); B=\"0\"; c='^'; edit_in->setText(A); } only = true; } void TMainForm::sqrtButtonClicked() //开根号 《嵌入式相关资料》 { double n,m; B=edit_in->text(); if(c==' ') { n=B.toDouble(); n=sqrt(n); B=QString::number(n,'f',10); edit_in->setText(B); A = B; B = \"0\"; } else { n=A.toDouble(); m=B.toDouble(); if(c=='+') n=n+m; if(c=='-') n=n-m; if(c=='*') n=n*m; if(c=='/') n=n/m; if(c=='^') n=pow(n,m); n=sqrt(n); A=QString::number(n,'f',10); B=\"0\"; c = ' '; edit_in->setText(A); } only = true; } void TMainForm::clearButtonClicked() //按了C键,所有都初始化 { A=\"0\"; B=\"0\"; c=' '; edit_in->setText(B); only = true; } 3.main.cpp 文件 #include \"main_form.h\" #include QTOPIA_ADD_APPLICATION(\"mycalc\QTOPIA_MAIN 《嵌入式相关资料》
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuo7.cn 版权所有 湘ICP备2022005869号-9
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务