




已阅读5页,还剩15页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
安卓应用程序设计简易计算器的实现院(系)名称专 业名 称学 生姓 名学 生 学 号课 程 名 称2016年6月 日 1. 系统需求分析android是以linux为核心的手机操作平台,作为一款开放式的操作系统,随着android的快速发展,如今已允许开发者使用多种编程语言来开发android应用程序,而不再是以前只能使用java开发android应用程序的单一局面,因而受到众多开发者的欢迎,成为真正意义上的开放式操作系统。计算器通过算法实行简单的数学计算从而提高了数学计算的效率,实现计算器的界面优化,使界面更加友好,操作更加方便。基于android的计算器的设计,系统具有良好的界面;必要的交互信息;简约美观的效果。使用人员能快捷简单地进行操作,即可单机按钮进行操作,即时准确地获得需要的计算的结果,充分降低了数字计算的难度和节约了时间。2. 系统概要设计2.1计算器功能概要设计根据需求,符合用户的实际要求,系统应实现以下功能:计算器界面友好,方便使用,具有基本的加、减、乘、除功能,能够判断用户输入运算数是否正确,支持小数运算,具有清除功能。图2.1系统功能图整个程序基于android技术开发,除总体模块外主要分为输入模块、显示模块以及计算模块这三大部分。在整个系统中总体模块控制系统的生命周期,输入模块部分负责读取用户输入的数据,显示模块部分负责显示用户之前输入的数据以及显示最终的计算结果,计算模块部分负责进行数据的运算以及一些其他的功能。具体的说,总体模块的作用主要是生成应用程序的主类,控制应用程序的生命周期。输入模块主要描述了计算器键盘以及键盘的监听即主要负责读取用户的键盘输入以及响应触屏的按键,需要监听手机动作以及用指针事件处理方法处理触屏的单击动作。同时提供了较为直观的键盘图形用户界面。显示模块描述了计算器的显示区,即该区域用于显示用户输入的数据以及最终的计算结果,同时负责显示一些其他的信息。计算模块则主要描述了计算器的整体,实现了计算器的界面,负责计算用户输入数据,包括加、减、乘、除等各种功能,记忆数据的相关功能,清零的功能。总体系统显示模块计算模块输入模块图2.2三大模块2.2输入模块设计系统如果想完成计算器中各种功能,首先用户要能进行数据输入,由于是在触屏手机上开发计算器程序,所以要求输入可以直接使用触屏进行,所以在设计的时候就要充分的考虑这一点。正是由于考虑到这个特殊的地方,所以在进行模块设计中,选择编写输入模块类的时候会特意选取使用可以支持触屏输入的特殊增强型图形用户界面类。输入模块主要的任务是描述计算器键盘以及实现键盘的监听,即当用户点击按键或者屏幕的时候监听会去调用相应的处理办法,本模块还需要为系统提供一个较为直观的键盘图形用户界面。输入模块的功能图如图输入模块设置按钮按键监听设置按键监听设置监听调用图2.3输入模块2.3显示模块设计作为手机计算器系统,显示部分也是必不可少的一部分。没有显示部分就没有办法显示用户输入的数字是否正确,甚至不能显示计算出的结果,由此可见显示模块即包括输入的部分(因个人技术原因不能显示表达式的形式)也包括输出的部分。显示模块主要完成的任务是描述计算器的显示区,该区域用于显示用户输入的数据以及最终的计算结果和一些其他信息。同时本模块还将提供调用和设置显示的具体方法显示模块显示区设置显示数据设置显示图2.4显示模块2.4计算模块设计系统要完成整个的计算器的功能,那么计算模块就是整个系统的重要模块。没有计算模块系统就不能顺利的完成计算,就无法达到用户的要求。所以计算模块的设计也是本次系统设计的重点。系统想要能在屏幕上显示出计算器的样子要有整体的布局。在本模块中要完成布局的具体设计,使用户能够看到整个计算器的界面。同时系统想完成计算功能必须要处理用户的输入,当输入模块的监听传到计算模块中时,计算模块就要根据相应的方法进行进一步的处理。计算模块逻辑判断整体布局数值输入判断运算输入判断普通运算功能清零功能记忆相关功能图2.5计算模块3.设计与实现部分3.1应用程序构成android应用程序一般是由activity、serviece、contentprovider、intent、intentreceiver、notification六个组件构成。但并非每一个android应用程序都包含这六个组件。(1)activity(活动):应用程序的表示层。activity是android的基本组件。每一个activity代表一个单独的屏幕。每一个activity都是继承于activity的独立类。这个activity类将会显示出几个views控件组成的用户接口,并对事件作出响应。android使用了intent,实现在屏幕与屏幕之间跳转。activity跳转时只需要调用startactivity(intentmyintent)方法。然后,系统会在所有安装的应用程序中定义的intentfilter中查找,找到最匹配myintent的intent对应的activity。新的activity接收到myintent的通知后,开始启动运行。当startactivity方法被调用将触发解析myintent的动作,这个机制提供了两个关键的好处:能够重复利用从其他组件中以intent的形式产生的一个请求和可以在任何时候被一个具有相同intentfilter的新的startactivity取代。(2)service(服务):android应用程序的后台运行组件。service没有用户界面的程序。服务组件在后台运行,它们可以更新数据源和可见的activity,并触发notification。它们被用来执行一些需要在后台持续的常规处理。例如媒体播放器这个activity会使用context.startservice()方法,连接到一个service上(如果这个service还没有运行将启动它)。当连接到一个service之后,我们还可以通过service提供的接口与它进行通讯。(3)contentprovider(内容提供器):用来管理和分享应用程序数据库。contentprovider是在应用程序之间共享数据的首选方法。通过配置contentprovider允许其他应用程序访问存储的数据,也可以使用其他应用程序提供的contentprovider来访问它们存储的数据。android平台也提供了系统自带的contentprovider,如联系人信息等。(4)intent(意向):activity之间的粘合剂。使用intent,可以在系统范围内向目标活动或者服务广播消息,说明希望执行某个动作的意图。之后系统就会确定那些最适合执行动作的目标。(5)notification(通知):一种用户通知框架。通过允许向用户发送信号,而不会过分吸引他们的注意力或者打断他们当前的活动。它们是服务或者广播接收器吸引用户注意的首选方法。例如,当设备接收到一个文本消息或者来电的时候,它可以通过闪灯、发出声音、显示图标或则会显示对话框信息的方式提示用户。(6)intentreceiver(意向接收器):通过intentreceiver实现应用能够对一个外部的事件作出响应,intentreceiver在androidmanifest.xml中注册,但也可以在代码中使用context.registerreceiver()进行注册。当一个intentreceive被触发时,应用不必对请求调用intentreceive,系统会在需要的时候启动你的应用。各种应用还可以通过使用context.broadcastintent()将它们自己的intentreceive广播给其他应用程序。3.2功能的具体实现(1)计算器布局设计:分别实用button按钮操作17个按钮,分别是+、*、/、=、0-9、清除按钮,以及edittest的文本域,并通过代码布局调整布局,使布局更加清晰,简洁。布局方式如图所示:代码实现如下: (2)计算功能实现加法实现:从edittest中获取数字赋值于num1,等待数字num2的输入。代码如下:case r.id.button13: string mystringadd = edit.gettext().tostring(); if(mystringadd.equals(null) return; num1 = double.valueof(mystringadd); edit.settext(null); op = 1; isclickequ = false; break; 减法实现、乘法实现、除法实现和加法实现大体相同,但是op的赋值不同分别是2、3、4。然后进行等号的计算实现,在同时记录下文本中的num2的数值,然后设置switch方法,case中op的值分别为1、2、3、4代表的分别加、减、乘、除。然后根据case选项进行相应的加、减、乘、除运算,代码实现如下所示:case r.id.button12: /等号,算法实现 string mystringeq=edit.gettext().tostring(); if (mystringeq.equals(null) return; num2 = double.valueof(mystringeq); edit.settext(null); switch (op) case 0: result = num2; break; case 1: result = num1 + num2; break; case 2: result = num1 - num2; break; case 3: result = num1 * num2; break; case 4: result = num1 / num2; break; edit.settext(string.valueof(result); isclickequ = true; break; 4.运行界面截图运行结果界面:除法:20除以4的结果乘法3.89乘以1.2的结果减法3.6减去0.6除数为零:点击清除之后的效果5.核心代码import android.app.activity;import android.os.bundle;import android.view.menu;import android.view.view;import android.view.view.onclicklistener;import android.widget.button;import android.widget.edittext;import android.widget.toast;public class mainactivity extends activity implements onclicklistener button button1,button2,button3,button4,button5,button6,button7,button8;button button9,button10,button11,button12,button13,button14,button15,button16,button17;edittext edit=null;double num1 = 0, num2 = 0 ,result =0;boolean isclickequ = false;int op = 0; overrideprotected void oncreate(bundle savedinstancestate) super.oncreate(savedinstancestate);setcontentview(r.layout.activity_main);button1=(button)this.findviewbyid(r.id.button1);button2=(button)this. findviewbyid(r.id.button2);button3=(button)this. findviewbyid(r.id.button3);button4=(button)this. findviewbyid(r.id.button4);button5=(button)this. findviewbyid(r.id.button5);button6=(button)this. findviewbyid(r.id.button6);button7=(button)this. findviewbyid(r.id.button7);button8=(button)this. findviewbyid(r.id.button8);button9=(button)this. findviewbyid(r.id.button9);button10=(button)this. findviewbyid(r.id.button10);button11=(button)this. findviewbyid(r.id.button11);button12=(button)this. findviewbyid(r.id.button12);button13=(button)this. findviewbyid(r.id.button13);button14=(button)this. findviewbyid(r.id.button14);button15=(button)this. findviewbyid(r.id.button15);button16=(button)this. findviewbyid(r.id.button16);button17=(button)this. findviewbyid(r.id.button17);edit=(edittext) findviewbyid(r.id.edittext1);button1.setonclicklistener(this);button2.setonclicklistener(this);button3.setonclicklistener(this);button4.setonclicklistener(this);button5.setonclicklistener(this);button6.setonclicklistener(this);button7.setonclicklistener(this);button8.setonclicklistener(this);button9.setonclicklistener(this);button10.setonclicklistener(this);button11.setonclicklistener(this);button12.setonclicklistener(this);button13.setonclicklistener(this);button14.setonclicklistener(this);button15.setonclicklistener(this);button16.setonclicklistener(this);button17.setonclicklistener(this);overridepublic boolean oncreateoptionsmenu(menu menu) / inflate the menu; this adds items to the action bar if it is present.getmenuinflater().inflate(r.menu.main, menu);return true;overridepublic void onclick(view v) / todo auto-generated method stubswitch(v.getid()case r.id.button17: edit.settext(null); toast.maketext(mainactivity.this, 已经清除, toast.length_long).show(); break;case r.id.button1:if(isclickequ) edit.settext(null); isclickequ=false; string mystring1=edit.gettext().tostring(); mystring1+=1; edit.settext(mystring1); break; case r.id.button2:if(isclickequ) edit.settext(null); isclickequ=false; string mystring2=edit.gettext().tostring(); mystring2+=2; edit.settext(mystring2); break; case r.id.button3:if(isclickequ) edit.settext(null); isclickequ=false; string mystring3=edit.gettext().tostring(); mystring3+=3; edit.settext(mystring3); break; case r.id.button4:if(isclickequ) edit.settext(null); isclickequ=false; string mystring4=edit.gettext().tostring(); mystring4+=4; edit.settext(mystring4); break; case r.id.button5:if(isclickequ) edit.settext(null); isclickequ=false; string mystring5=edit.gettext().tostring(); mystring5+=5; edit.settext(mystring5); break; case r.id.button6:if(isclickequ) edit.settext(null); isclickequ=false; string mystring6=edit.gettext().tostring(); mystring6+=6; edit.settext(mystring6); break; case r.id.button7:if(isclickequ) edit.settext(null); isclickequ=false; string mystring7=edit.gettext().tostring(); mystring7+=7; edit.settext(mystring7); break; case r.id.button8:if(isclickequ) edit.settext(null); isclickequ=false; string mystring8=edit.gettext().tostring(); mystring8+=8; edit.settext(mystring8); break; case r.id.button9:if(isclickequ) edit.settext(null); isclickequ=false; string mystring9=edit.gettext().tostring(); mystring9+=9; edit.settext(mystring9); break; case r.id.button10:if(isclickequ) edit.settext(null); isclickequ=false; string mystring10=edit.gettext().tostring(); mystring10+=0; edit.settext(mystring10); break; /点case r.id.button11:if(isclickequ) edit.settext(null); isclickequ=false; string mystring11=edit.gettext().tostring(); mystring11+=.; edit.settext(mystring11); break; /加case r.id.button13: string mystringadd = edit.gettext().tostring(); if(mystringadd.equals(null) return; num1 = double.valueof(mystringadd); edit.settext(null); op = 1; isclickequ = false; break; /减 case r.id.button14: string mystringred = edit.gettext().tostring(); if(mystringred.equals(null)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年甲氨蝶呤项目申请报告
- 2025年脉冲反应堆及配套产品项目规划申请报告
- 2025年中国便携式催化加热器行业市场分析及投资价值评估前景预测报告
- 杨家坪老房渗水施工方案
- 产业投资规划中的设备与技术选型
- 漏电应急预案a
- 饭馆疫情应急预案
- 雨污分流改造工程实施方案
- 采购应急预案制度
- 地基沉降监测与动态调整方案
- 第三单元第2课时儿童乐园(教学设计)数学北师大版二年级上册2025
- 建设用地审查报批课件
- 2025年企业首席质量官培训考核试题(含答案)
- 2025-2030礼品包装品牌化运营策略及消费者偏好与市场营销渠道研究
- 弹簧测力计的原理
- 《家具与陈设设计》课件(共十章)
- 迪士尼电影讲解
- 2025至2030中国背光器件行业市场深度研究与战略咨询分析报告
- 跨境交易信用风险传导路径-洞察阐释
- 影响力与ABC法则
- 中国沈阳铁路局劳动合同8篇
评论
0/150
提交评论