基于安卓的计算器的设计及其实现.docx
《基于安卓的计算器的设计及其实现.docx》由会员分享,可在线阅读,更多相关《基于安卓的计算器的设计及其实现.docx(28页珍藏版)》请在咨信网上搜索。
安卓应用程序设计 ——简易计算器实现 院(系)名称 专 业 名 称 学 生 姓 名 学 生 学 号 课 程 名 称 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、Content Provider、Intent、Intent Receiver、Notification六个组件组成。但并非每一个Android应用程序全部包含这六个组件。 (1)Activity(活动):应用程序表示层。Activity是Android基础组件。每一个activity代表一个单独屏幕。每一个activity全部是继承于Activity独立类。这个activity类将会显示出多个Views控件组成用户接口,并对事件作出响应。Android使用了Intent,实现在屏幕和屏幕之间跳转。Activity跳转时只需要调用startActivity(Intent myIntent)方法。然后,系统会在全部安装应用程序中定义IntentFilter中查找,找到最匹配myIntentIntent对应activity。新activity接收到myIntent通知后,开始开启运行。当startActivity方法被调用将触发解析myIntent动作,这个机制提供了两个关键好处:能够反复利用从其它组件中以Intent形式产生一个请求和能够在任何时候被一个含有相同IntentFilter新startActivity替换。 (2)Service(服务):Android应用程序后台运行组件。Service没有用户界面程序。服务组件在后台运行,它们能够更新数据源和可见Activity,并触发Notification。它们被用来实施部分需要在后台连续常规处理。比如媒体播放器这个activity会使用Context. startService()方法,连接到一个service上(假如这个service还没有运行将开启它)。当连接到一个service以后,我们还能够经过service提供接口和它进行通讯。 (3)Content Provider(内容提供器):用来管理和分享应用程序数据库。Content Provider是在应用程序之间共享数据首选方法。经过配置Content Provider许可其它应用程序访问存放数据,也能够使用其它应用程序提供Content Provider来访问它们存放数据。Android平台也提供了系统自带Content Provider,如联络人信息等。 (4)Intent(意向):Activity之间粘合剂。使用Intent,能够在系统范围内向目标活动或服务广播消息,说明期望实施某个动作意图。以后系统就会确定那些最适合实施动作目标。 (5)Notification(通知):一个用户通知框架。经过许可向用户发送信号,而不会过分吸引她们注意力或打断她们目前活动。它们是服务或广播接收器吸引用户注意首选方法。比如,当设备接收到一个文本消息或来电时候,它能够经过闪灯、发出声音、显示图标或则会显示对话框信息方法提醒用户。 (6)Intent Receiver(意向接收器):经过Intent Receiver实现应用能够对一个外部事件作出响应,Intent Receiver在AndroidManifest.xml中注册,但也能够在代码中使用Context.registerReceiver()进行注册。当一个intent receive被触发时,应用无须对请求调用intent receive,系统会在需要时候开启你应用。多种应用还能够经过使用Context.broadcastIntent()将它们自己intent receive广播给其它应用程序。 3.2功效具体实现 (1)计算器布局设计: 分别实用Button按钮操作17个按钮,分别是+、—、*、/、=、0-9、清除按钮,和EditTest文本域,并经过代码布局调整布局,使布局愈加清楚,简练。布局方法图所表示: 代码实现以下: <RelativeLayout xmlns:android="" xmlns:tools="" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <EditText android:id="@+id/editText1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:layout_marginTop="17dp" android:ems="10" /> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/editText1" android:layout_below="@+id/editText1" android:layout_marginTop="30dp" android:text="1" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/button1" android:layout_alignBottom="@+id/button1" android:layout_toRightOf="@+id/button1" android:text="2" /> <Button android:id="@+id/button3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/button2" android:layout_alignBottom="@+id/button2" android:layout_toRightOf="@+id/button2" android:text="3" /> <Button android:id="@+id/button4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_below="@+id/button1" android:text="4" /> <Button android:id="@+id/button5" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/button4" android:layout_alignBottom="@+id/button4" android:layout_alignLeft="@+id/button2" android:text="5" /> <Button android:id="@+id/button6" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/button3" android:layout_toRightOf="@+id/button5" android:text="6" /> <Button android:id="@+id/button7" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/button4" android:layout_toLeftOf="@+id/button5" android:text="7" /> <Button android:id="@+id/button8" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/button7" android:layout_alignBottom="@+id/button7" android:layout_alignLeft="@+id/button5" android:text="8" /> <Button android:id="@+id/button9" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/button8" android:layout_alignBottom="@+id/button8" android:layout_toRightOf="@+id/button5" android:text="9" /> <Button android:id="@+id/button10" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/button7" android:layout_below="@+id/button7" android:text="0" /> <Button android:id="@+id/button11" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/button7" android:layout_toRightOf="@+id/button7" android:text="." /> <Button android:id="@+id/button12" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/button11" android:layout_alignBottom="@+id/button11" android:layout_alignLeft="@+id/button9" android:text="=" /> <Button android:id="@+id/button13" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@+id/button3" android:layout_toRightOf="@+id/button3" android:text="+" /> <Button android:id="@+id/button14" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/button6" android:layout_alignBottom="@+id/button6" android:layout_toRightOf="@+id/button6" android:text="-" /> <Button android:id="@+id/button15" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_above="@+id/button12" android:layout_alignLeft="@+id/button14" android:text="*" /> <Button android:id="@+id/button16" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/button9" android:layout_toRightOf="@+id/button9" android:text="/" /> <Button android:id="@+id/button17" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignRight="@+id/button16" android:layout_below="@+id/button11" android:text="清除" /> </RelativeLayout> (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; @Override protected 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); } @Override public 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; } @Override public void onClick(View v) { // TODO Auto-generated method stub switch(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; }- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 计算器 设计 及其 实现
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【a199****6536】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【a199****6536】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【a199****6536】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【a199****6536】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文