软件工程课程设计bada计算器.docx
- 文档编号:3334706
- 上传时间:2022-11-21
- 格式:DOCX
- 页数:30
- 大小:297.68KB
软件工程课程设计bada计算器.docx
《软件工程课程设计bada计算器.docx》由会员分享,可在线阅读,更多相关《软件工程课程设计bada计算器.docx(30页珍藏版)》请在冰豆网上搜索。
软件工程课程设计bada计算器
BADA计算器
系统概述
1.1系统背景
在经济高速发展的今天,手机已经成为人们日常生活当中不可或缺的一部分,针对手机做出相应的优质应用也是当今社会IT行业不变的主旋律。
并且在我们的日常生活当中,计算器是随处可见的,从小商店到会计师的办公桌,到处都离不开它,计算器的作用不可小觑,即使功能简单的计算器也有它的用武之地。
计算器大大提高了我们的工作效率,降低了我们的出错率。
最重要的是,通过软件的设计把计算器嵌入到手机,应用起来具有功能强,灵活轻便的特点。
1.2系统目标
通过简单的软件设计把简单的计算器功能嵌入到手机上,使人们在日程生活当中能普遍应用,提高人们的生活效率。
其次是通过对计算器的编写,旨在锻炼我们自身的编程能力,熟悉软件开发的一般流程,了解分数计算器的实现过程,以C++为基本编程语言,Bada手机开发平台,进一步掌握面向对象过程当中的基本设计和方法以及编程技巧,巩固所学的理论知识,做到把理论和实际动手相结合。
1.3系统开发方法
本系统是以C++语言为基础,以bada手机平台上实现计算器的应用.
系统分析
2.1需求分析
日常生活中经常要用到的计算器,比如科学计算器,数值计算,会计业务等,在Applet中实现一个精巧的实用计算器,可以让用户在使用手机的同时也能很方便的进行数据运算,不但增加了手机的用途,同时也让用户的操作也更方便和快捷。
本项目需要实现的是一个具有加、减、乘、除的四则运算,并且具有清零,退格的功能。
2.2基本功能
(1)基本的四则运算
(2)退格和清零功能
(3)类设计。
Calculator和Calulate,Calulate是内部类,功能是进行进制的转换,Calcucate是初始界面,以及相应用户的操作。
(4)输入要求:
(1).用户进入界面后,根据具体需求选择要操作的类型;
(2).可以正确的输入整数并与分数进行运算。
(5)输出要求:
(1).以分数的最简格式输出数据,如1/2;
.若操作出现错误时,能提示相应的信息供用户更改
下面用表说明该计算机的功能:
状态
操作
计算器响应
结果状态
清零
键入数字键,如1
显示键入的数字,操作数=键入的数字
一个操作数
键入减号键
相当于键入了-0,但负号不显示,只显示0
一个操作数
键入除减号键和数字键以外的键
忽略键入的键,仍保留清零状态
清零
一个操作数
键入数字键
显示新操作数,新操作数=当前操作数*10+键入的数字
一个操作数
键入回退键
显示新操作数,新操作数=当前操作出除以10取整
一个操作数
清屏键
显示0,但操作数不变
清零
键入清零(任何状态下,键入清零键都会到清零状态下,以下的状态不在重复)
清零
一个操作数和一个两元符号
键入=键
显示操作数,如果操作数为负数,显示操作数,如-56
一个操作数和一个两元符号
错误
清零以外的任何键
忽略,计算器不做任何相应
错误
清零键
清零
清零
系统设计
1.1主控函数流程图
1.2数据流程图:
1.3UML静态结构图
系统实现
1.1具体函数
caseID_BTN_PLUS:
strResult.Format(MAX_BUFF_SIZE,L"%f",dOp1+dOp2);
break;
caseID_BTN_MINUS:
strResult.Format(MAX_BUFF_SIZE,L"%f",dOp1-dOp2);
break;
caseID_BTN_MULTIPLY:
if(dOp1==0||dOp2==0)
{
strResult=L"0";
}
else
{
strResult.Format(MAX_BUFF_SIZE,L"%f",dOp1*dOp2);
}
break;
caseID_BTN_DIVIDE:
strResult.Format(MAX_BUFF_SIZE,L"%f",dOp1/dOp2);
break;
加减乘除四则运算由以上函数实现,并调用Result函数输出显示。
1.2初始界面
1.3实现运算123*123
输入690852,并实现back、clear功能
设计小结与体会
通过本周的课程设计,虽然最后完成了任务。
但是只起来很费力,实现的功能也很单一,有些地方还没怎么弄懂,时间也不允许总在一个问题上纠结。
所以只是很表面上学习了一些东西,通过这次课程设计使我们明白,要踏实学习,快餐式的学习不可取。
在编写代码的时候出现了很多错误,这些都是我们平时不怎么关注的,所以在平时的学习当中,要多实践,不过最重要的是,要形成独立思考的习惯。
总之,通过此次课程设计,我们学到了许多我们在书本上学不到的知识,受益匪浅。
通过实践,我们能更好地掌握C++语言,并运用它编写应用程序,在不同的开发平台上进行运行。
我们对它的功能和实用性、严密性,和对程序的编写都有了比较深刻的体会。
毫无疑问,编程过程中我们遇到了许多问题,但通过我们不懈的努力,团结奋斗的精神,我们终究将问题一一解除,最终实现了程序的各项功能。
虽然我们的程序还不够完善,加以改进以实现更多的功能。
但通过这次的课程设计我们不仅学到了许多知识,学会如何设计一个应用程序,包括程序设计方法,调试程序,还学会如何解决问题,学会将所学知识运用到实际情况中。
源代码
Calculator.cpp
#include"CalculatorForm.h"
#include"FUiLayout.h"
usingnamespaceOsp:
:
Base;
usingnamespaceOsp:
:
Graphics;
usingnamespaceOsp:
:
Ui;
usingnamespaceOsp:
:
Ui:
:
Controls;
usingnamespaceOsp:
:
Base:
:
Collection;
//////////////////////////////////////////////////////////////////////////
//CalculatorForm
CalculatorForm:
:
CalculatorForm(void):
__pGridPanel(null),__pLabelPrint(null)
{
}
CalculatorForm:
:
~CalculatorForm(void)
{
}
result
CalculatorForm:
:
Construct(void)
{
RelativeLayoutrelLayout;
relLayout.Construct();
Form:
:
Construct(relLayout,FORM_STYLE_INDICATOR|FORM_STYLE_HEADER);
Header*pHeader=GetHeader();
if(pHeader)
{
pHeader->SetStyle(HEADER_STYLE_TITLE);
pHeader->SetTitleText("Calculator");
}
returnE_SUCCESS;
}
result
CalculatorForm:
:
OnInitializing(void)
{
GridLayoutgridLayout;
gridLayout.Construct(7,3);
Panel*pGridPanel=newPanel;
pGridPanel->Construct(gridLayout,Rectangle(0,0,350,630));
this->AddControl(*pGridPanel);
__pRelLayout=dynamic_cast
__pRelLayout->SetCenterAligned(*pGridPanel,CENTER_ALIGN_HORIZONTAL);
__pRelLayout->SetCenterAligned(*pGridPanel,CENTER_ALIGN_VERTICAL);
__pGridPanel=pGridPanel;
/*CreateButtons*/
CreateButtons();
this->Draw();
returnE_SUCCESS;
}
result
CalculatorForm:
:
OnTerminating(void)
{
delete__pRelLayout;
delete__pGridLayout;
returnE_SUCCESS;
}
result
CalculatorForm:
:
OnDraw(void)
{
returnE_SUCCESS;
}
void
CalculatorForm:
:
OnActionPerformed(constOsp:
:
Ui:
:
Control&source,intactionId)
{
switch(actionId)
{
//numbers
case0:
case1:
case2:
case3:
case4:
case5:
case6:
case7:
case8:
case9:
__Calculator.isOpJustOn=false;
if(__Calculator.IsFinished()==true||__Calculator.IsOperator()==true)
{
__strBufferForPrint.Clear();
}
if(__strBufferForPrint.GetLength()>=MAX_PRINTABLE_CHARS)//IfthelengthexceedsMAX_PRINTABLE_CHARS,dotdotdotwillbeshown.
{
return;
}
__strBufferForPrint.Append(actionId);
RefineNumber(__strBufferForPrint);
SetOperandByContext(__strBufferForPrint);
__pLabelPrint->SetText(__strBufferForPrint);
__pLabelPrint->SetTextHorizontalAlignment(ALIGNMENT_RIGHT);
__pLabelPrint->Draw();
break;
caseID_BTN_PLUS:
caseID_BTN_MINUS:
caseID_BTN_MULTIPLY:
caseID_BTN_DIVIDE:
//operators
{
__Calculator.isOpJustOn=true;
if(__Calculator.IsReady()==true)
{
//donothing
return;
}
elseif(__Calculator.IsOperand1()==true||__Calculator.IsOperator()==true||__Calculator.IsFinished()==true)
{
__Calculator.SetOperator(actionId);
}
elseif(__Calculator.IsOperand2()==true)
{
RefineNumber(__strBufferForPrint);
__Calculator.SetOperand2(__strBufferForPrint);
StringstrResult;
__Calculator.Calc(strResult);
__strBufferForPrint=strResult;
RefineNumber(__strBufferForPrint);
__Calculator.SetOperand1(strResult);
__Calculator.SetOperator(actionId);
__pLabelPrint->SetText(__strBufferForPrint);
__pLabelPrint->SetTextHorizontalAlignment(ALIGNMENT_RIGHT);
__pLabelPrint->Draw();
}
else
{
AppAssert(false);
}
}
break;
caseID_BTN_EQUAL:
{
__Calculator.isOpJustOn=false;
StringstrResult;
__Calculator.Calc(strResult);
__strBufferForPrint=strResult;
RefineNumber(__strBufferForPrint);
__pLabelPrint->SetText(__strBufferForPrint);
__pLabelPrint->SetTextHorizontalAlignment(ALIGNMENT_RIGHT);
__pLabelPrint->Draw();
}
break;
caseID_BTN_BACK:
__Calculator.isOpJustOn=false;
if(__Calculator.IsOperand1()==true||__Calculator.IsOperand2()==true)
{
if(__strBufferForPrint.GetLength()>0)
__strBufferForPrint.Remove(__strBufferForPrint.GetLength()-1,1);
RefineNumber(__strBufferForPrint);
SetOperandByContext(__strBufferForPrint);
__pLabelPrint->SetText(__strBufferForPrint);
__pLabelPrint->SetTextHorizontalAlignment(ALIGNMENT_RIGHT);
__pLabelPrint->Draw();
}
break;
caseID_BTN_CLEAR:
__Calculator.isOpJustOn=false;
__strBufferForPrint.Clear();
__Calculator.Reset();
__pLabelPrint->SetText(L"0");
__pLabelPrint->SetTextHorizontalAlignment(ALIGNMENT_RIGHT);
__pLabelPrint->Draw();
break;
caseID_BTN_DOT:
{
if(__Calculator.IsFinished()==true||__Calculator.IsOperator()==true)
{
__strBufferForPrint.Clear();
}
intnIndexOfDot;
if(__strBufferForPrint==L"")
{
__strBufferForPrint=L"0.";
}
elseif(__Calculator.isOpJustOn)
__strBufferForPrint=L"0.";
elseif(IsFailed(__strBufferForPrint.IndexOf(L".",0,nIndexOfDot))&&__strBufferForPrint.GetLength()!
=0)
{
__strBufferForPrint+=L".";
}
SetOperandByContext(__strBufferForPrint);
__pLabelPrint->SetText(__strBufferForPrint);
__pLabelPrint->SetTextHorizontalAlignment(ALIGNMENT_RIGHT);
__pLabelPrint->Draw();
}
break;
}
Show();
}
void
CalculatorForm:
:
RefineNumber(String&strNumber,boolisSwapSign/*=false*/)
{
mcharmch;
StringstrSign;
//forswappingasign
if(isSwapSign==true&&strNumber!
=L"0"&&strNumber.GetLength()>0)
{
strNumber.GetCharAt(0,mch);
if(mch==L'-')
{
strNumber.Remove(0,1);
}
else
{
strSign=L"-";//willbeadded
}
}
//Checkempty
if(strNumber.IsEmpty())
{
strNumber=L"0";
return;
}
//removefirstzero
if(strNumber.GetLength()>1)
{
strNumber.GetCharAt(0,mch);
if(mch==L'0')
{
intnIndex=0;
if(IsFailed(strNumber.IndexOf(L".",0,nIndex)))
{
strNumber.Remove(0,1);
}
}
}
//assignitssign
strNumber=strSign+strNumber;
if(strNumber==L"-"||strNumber==L"+"||strNumber==L"-0")
{
strNumber=L"0";
}
}
void
CalculatorForm:
:
CreateButtons(void)
{
__pGridLayout=dynamic_cast
GridLayout&layout=*__pGridLayout;
Panel&panel=*__pGridPanel;
Button*pButton=null;
pButton=newButton();
pButton->Construct(Rectangle(0,0,90,62),L"0");
pButton->SetName(L"ID_BTN_0");
pButton->SetActionId(0);
pButton->AddActionEventListener(*this);
panel.AddControl(*pButton);
layout.SetPosition(*pButton,5,1,1,1);
pButton=newButton();
pButton->Construct(Rectangle(0,0,90,62),L"1");
pButton->SetName(L"ID_BTN_1");
pButton->SetActionId
(1);
pButton->AddActionEventListener(*this);
panel.AddControl(*pButton);
layout.SetPosition(*pButton,2,0,1,1);
pButton=newButton();
pButton->Construct(Rectangle(0,0,90,62),L"2");
pButton->SetName(L"ID_BTN_2");
pButton->SetActionId
(2);
pButton->AddActionEventListener(*this);
panel.AddControl(*pButton);
layout.SetPosition(*pButton,2,1,1,1);
pButton=newButton();
pButton->Construct(Rectangle(0,0,90,62),L"3");
pButton->SetName(L"ID_BTN_3");
pButton->SetActionId(3);
pButton->AddActionEventListener(*this);
panel.AddControl(*pButton);
layout.SetPosition(*pButton,2,2,1,1);
pButton=newButton();
pButton->Construct(Rectangle(0,0,90,62),L"4");
pButton->SetName(L"ID_BTN_4");
pButton->SetActionId(4);
pButton->AddActionEventListener(*this);
panel.AddControl(*pButton);
layout.SetPosition(*pButton,3,0,1,1);
pButton=new
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件工程 课程设计 bada 计算器
![提示](https://static.bdocx.com/images/bang_tan.gif)