




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数学与信息技术学院 嵌入式系统课程设计报告设计题目:数字计算器的设计与实验 班 级: 11级计科本2班 学 号: 2011081211 姓 名: 秦铭浩 指导教师: 李海颖 完成日期: 2014/4/27 成绩: 1. 目录目录是将报告书内的章节标题依次排列。2. 绪论Android是以Linux为核心的手机操作平台,作为一款开放式的操作系统,随着Android的快速发展,如今已允许开发者使用多种编程语言来开发Android应用程序,而不再是以前只能使用Java开发Android应用程序的单一局面,因而受到众多开发者的欢迎,成为真正意义上的开放式操作系统。本次课程设计一个简易的计算器。主要了解Activity的创建和Intent的使用。Intent不仅可以连接两个Activity。而且可以传递数据。下面是整个程序的设计流程。据Gartner最新数据显示,2010年第二、三季度全球智能手机销售继续大幅增长,其中第三季度安卓占全球智能手机市场的25.5%,仅次于塞班,成为第二大智能手机系统。2010第二、三季度与去年同期相比,增度分别是15.4%及22%,增势迅猛。而塞班系统较09年的市场份额,尽管终端销量有大幅度提升,但增势下滑10%,形势非常严峻。其他操作系统的表现则要平稳很多自Android在美国推出后, Android凭借自身的良好用户体验,相对低廉的成本和较高的开放性使得越来越多的终端厂商采用。在Android出现之前,智能手机基本都采用WM平台,成本较高、系统封闭、用户的体验差。而Android 系统成本低、用户体验较好、平台开源,使得终端厂商和开发者有了更大的灵活性。总之,Android在发展中虽遇到了一些问题,但是在多种积极因素的推动下,总体趋势仍旧很好。基于Android操作系统的智能设备在国内市场必将有大的发展空间。3. 需求分析计算器作为现在人们日常生活中常用的一种工具已经可以说是人们日常生活中必不可少的工具了。但是计算器的发展经历了漫长的过程,凝聚无数先人的智慧,甚至连计算机的发展都可以说是源于计算器的发展。计算器和计算机一样都能够实现数据的输入、处理、存储和输出这些基本的功能,但计算器区别于计算机的地方就是,它不能自动的进行计算,必须要求由人来操作完成计算;而计算机通过提前编写好的程序就能够自动的按照程序进行处理。所以计算器和计算机的一个显著的区别就在于是否需要人为地操作来完成运行。这二者还有另一个本质性的区别。计算器的处理数据的方法是生产时就已经固化在系统中了,所以计算器只能按照系统中规定的处理方法来处理用户要求的计算任务;而计算机由于可以自行安装操作系统和各种的相关软件和硬件,理论上计算机拥有的可扩展性是无穷的。所以简单的说,计算器和计算机的本质性区别就在于该系统是否存在可扩展性。本计算器程序主要解决日常生活中常见的基本数据计算问题,程序要实现的目标如下:(1) 实现基本的加、减、乘、除四则运算。(2) 有清空功能,即清除所以数据,重新开始计算。4. 总体设计根据需求,符合用户的实际要求,系统应实现以下功能:计算器界面友好,方便使用,显示到少6位结果,具有基本的加、减、乘、除功能,能够判断用户输入运算数是否正确,支持小数运算,具有退格功能,能够删除最后一个输入,具有清除功能,即“C”。整个程序基于Android技术开发,除总体模块外主要分为输入模块、显示模块以及计算模块这三大部分。在整个系统中总体模块控制系统的生命周期,输入模块部分负责读取用户输入的数据,显示模块部分负责显示用户之前输入的数据以及显示最终的计算结果,计算机模块部分负责进行数据的运算以及一些其他的功能。下面较为详细的做了说明。具体的说,总体模块的作用主要是生成应用程序的主类,控制应用程序的生命周期。输入模块主要描述了计算器键盘以及键盘的监听即主要负责读取用户的键盘输入以及响应触屏的按键,需要监听手机动作以及用指针事件处理方法处理触屏的单击动作。同时提供了较为直观的键盘图形用户界面。显示模块描述了计算器的显示区,即该区域用于显示用户输入的数据以及最终的计算结果,同时负责显示一些其他的信息。计算模块则主要描述了计算器的整体,实现了计算器的界面,负责计算用户输入数据,包括加、减、乘、除等各种功能,记忆数据的相关功能,退格以及清零的功能。系统除了总体模块以外主要由三大模块来组成,即输入模块、显示模块和计算模块,如下图所示:总体系统输入模块显示模块计算模块输入模块主要描述了计算器键盘以及键盘的监听即主要负责读取用户的键盘输入以及响应触屏的按键,需要监听手机按键动作以及用指针事件处理方法处理触屏的单击动作(以松开按键为准)。同时提供了较为直观的键盘图形用户界面。显示模块描述了计算器的显示区,即该区域用于显示用户输入的数据以及最终的计算结果,同时还负责显示一些其他的信息。计算模块则主要描述了计算器的整体,实现了计算器的界面,负责计算用户输入数据,包括加、减、乘、除、等各种计算功能,记忆数据的相关功能,退格以及清零的功能5. 详细设计5.1输入模块详细设计系统如果想完成计算器中各种功能,首先用户要能进行数据输入,由于是在触屏手机上开发计算器程序,所以要求输入可以直接使用触屏进行,所以在设计的时候就要充分的考虑这一点。正是由于考虑到这个特殊的地方,所以在进行模块设计中,选择编写输入模块类的时候会特意选取使用可以支持触屏输入的特殊增强型图形用户界面类。输入模块主要的任务是描述计算器键盘以及实现键盘的监听,即当用户点击按键或者屏幕的时候监听会去调用相应的处理办法,本模块还需要为系统提供一个较为直观的键盘图形用户界面。输入模块的功能图如图所示:输入模块支持触屏描述计算器键盘实现按键监听定义键盘按键和画法设置按键监听设置监听调用方法5.2显示模块详细设计作为手机计算器系统,显示部分也是必不可少的一部分。没有显示部分就没有办法显示用户输入的数字是否正确,甚至不能显示计算出的结果,由此可见显示模块即包括输入的部分也包括输出的部分。显示模块主要完成的任务是描述计算器的显示区,该区域用于显示用户输入的数据以及最终的计算结果和一些其他信息。同时本模块还将提供调用和设置显示的具体方法。如图所示:显示模块显示区的相关设置调用显示区数据方法设置显示区数据方法5.3计算模块详细设计系统要完成整个的计算器的功能,那么计算模块就是整个系统的重要模块。没有计算模块系统就不能顺利的完成计算,就无法达到用户的要求。所以计算模块的设计也是本次系统设计的重点。系统想要能在屏幕上显示出计算器的样子要有整体的布局。在本模块中要完成布局的具体设计,使用户能够看到整个计算器的界面。同时系统想完成 计算功能必须要处理用户的输入,当输入模块的监听传到计算模块中时,计算模块就要根据相应的方法进行进一步的处理。计算模块功能图如图3-6所示:计算模块整体布局逻辑判断运算输入判断数值输入判断普通运算功能高级功能记忆相关功能清零复位功能6.编码6.1 构建Android应用程序用户界面Android应用程序的基础功能单元是Activity。它是android.app.Activity类中的一个对象。一个Activity可以实现很多功能,但是它自己并不会显示到屏幕上。Android应用程序界面需要使用view和viewgroup一起构造。Android.view.View:基础类的对象。它是一个用来存储屏幕上特定的一个矩形内布局和内容属性的数据结构。一个View对象处理测距和布局、绘图、焦点交换、滚动条,还有屏幕区域自己表现的按键和手势。View类作为一个基类,为widget(窗体部件)服务,widget是一组用于绘制交互屏幕元素的完全实现子类。Widget处理它们自己的测距和绘图,可以快速的使用它们去构建Android应用程序界面。可用到的widget包括TextView,EditText,InputMethod,Botton,RadioButton,Checkbox和ScrollView等。Android.view.ViewGroup:一个ViewGroup是一个Android.view.ViewGroup类对象。ViewGroup是一个特殊的view对象,它可以装载和管理一组下层的view其他viewgroup。ViewGroup类作为一个基类,为layout(布局)服务,layout是一组提供屏幕界面通用类型的完全实现子类。Layout可以为一组view构建一个结构。在Android平台上,用view树和viewgroup节点来定义一个Activity的用户界面,如下图所示。这个树形结构可以构建各种Android程序界面,并且可以使用Android的预定义widget和layout或者自定义的view类型来构建。Android树形用户界面如图4-2所示。图4-2 Android树形界面所有的viewgroup都包括宽和高。很多还包括边界的定义(margin和border)。可以非常精确地描述宽和高,同时view可以自行调整到适应内容大小,或者适应容器大小。6.2 Android应用系统界面组件基于Android的手机计算器,是以用户为中心的。因此构建良好的用户界面是很重要的。Android构建用户界面有以下三种方式:(1)用户界面通过XML配置文件生成。(2)直接用代码生成用户界面。(3)通过实现用户界面接口形成自定义的用户界面组件。每种方式各有自己的优缺点及使用环境,下面将结合本文界面实现逐一介绍。(1)XML文件生成根据MVC原则,UI应该与程序逻辑相分离,因此,在XML中定义UI结构是强烈推荐的。常用的方式是用图形化的方式来编写布局Layout,这些布局保存在XML文件中,然后编译成资源,在程序中Activity通过setContentView()方法来加载,然后通过findViewByld()方式来获得每一个界面组件的引用。实现过程及步骤。在layout文件夹下定义自己的XML页面,如计算器属性界面的实现如下所示。 LinearLayout android:orientation=horizontal TextView android:id=+id/tv_men EditText android:id=+id/ed_led android:layout_height=wrap_content android:layout_width=fill_parent 用XML实现用户界面具有以下优点:a)XML文件结构清晰,易于扩展,系统可扩展性好。b) 用户界面与业务逻辑完全分离,降低了系统界面与业务逻辑的耦合性。c)XML文件简单易懂,可维护性好。缺点是:XML文件构建的界面已在配置文件中实现,无法在系统运行时动态更新页面。(2)用户界面在程序代码实现对于一些开发者而言,喜欢最直观的方式,既代码中动态生成的方式。这种方式和XML定义是完全等价的。在程序中代码构建的方式还可以在系统运行时动态更改页面布局及效果。页面的各种组件的创建及布局在代码中手动构建过程如下:AbsoluteLayout= new AbsoluteLayot(this);layout.setBackgroundColor(Color.GRAY);canvasview = new CanvasView(this);layout.addView(canvasview, param);titleView = new TextView(this); titleLayout.addView(titleView,titleViewLayoutParams);(3)用户自定义页面组件由于Android应用程序中的用户界面都是View及View的各个子类如Button,TextView等子View及各种容器ViewGroup如LinearLayout、RealtiveLayout等ViewGroup构成。因此要实现自己定制化的界面及页组件只需要继承View类。自定义组件的步骤是:a)创建类,并继承Android.view.View。b) 重写构造函数,wtNumber()、wtOperater()等方法。c) 注册构件到页面布局文件中。6.3 Android用户界面的实现每一个应用程序,我们都要设计一个图标,可以说图标是应用程序的名片,好的图标能够很快地吸引用户。本人在网上寻找了一个图标作为计算器应用的图标,图标如图所示:由于不同的android手机有着不同的分辨率,将不同分辨率的图标图片放置在相应位置,如图所示:不同分辨率图标的放置drawable-hdpi中放置分辨率最高的图标,drawable-mdpi中放置分辨率中等的图标,drawable-ldpi中放置分辨率最低的图标。图标图片大小的要求如图4-5所示:图4-5 图标图片大小在AndroidManifest.xml文件中进行修改,修改情况如下:其他设置保持不变。在value中的String.xml中加入app_name,代码为:计算器/string。界面设计应该尽量简洁而美观,应该具有良好的交互性。当然,我们每个人可以根据自己的喜好来进行设计,根据我个人的喜好,我最终设计出来的计算器界面如图所示:从上图中,我们可以很直观的看到,从上到下分别是:显示模块、输入模块、计算模块。(1)输入模块,主要描述了计算器键盘以及键盘的监听即主要负责读取用户的键盘输入以及响应触屏的按键,当用户点击按键或者屏幕的时候监听器会去调用相应的处理办法,具体的处理办法会在相关的地方进行说明。在本项目中,在触屏上提供了各种功能的按键,分别是C,0,1,2,3,4,5,6,7,8,9,+,-,=,Delete, CE。在整体界面的设置中,我还为各个按键的设置中我还设置了字体的大小,字体的颜色,分别用下列语句实现:字体大小:android:textSize=25dip字体颜色:android:textColor = #7f0000界面背景:android:background=#888FFF(2)显示模块,主要描述了计算器的显示区,即该区域用于显示用户输入的数据以及最终的计算结果和一些其他信息。显示模块还设置了显示的字体,大小,颜色,同时还设置了显示字体的颜色。具体设置如下代码:显示区中使用的是基于增强型的图形用户界面EditText,利用此类的功能,在显示模块中完成了以上设置。显示模块声明了这些设置,在用户使用系统的时候,会在协同布局设置一同完成以上设置,使用户在使用的时候可以直观的看到显示区的样子。一般情况下都会选择差不多的字体,所以此处选择的字体和键盘上显示的字体其实是一样的,但是事实上系统中进行了两次声明,即逻辑上这是两种不同的字体,以及设置字符串text为空。显示区和输入模块中的表格一样,同样分别设置了最小显示以及完美显示这两种状态。然后声明了显示区的画法,画法中包括了显示区的两个矩形组成的显示框,显示框的颜色和大小以及显示框中显示的文字所使用的字体,还有文字在显示框中的位置。最后设置了计算模块中的变量得到以及改变显示中所显示的内容的方法,当显示中的内容发生变化时,系统会运行repaint命令来重画显示区,由于使用的是比较低级的方法,所以只能通过整个显示区来实现显示更新这个命令。这样虽然和使用高级的方法相比速度上可能有点慢,但是由于时间相差的不是很多,在用户的正常使用中是不会有所感觉的。以上就是显示模块的具体实现流程,具体的实现方法请参照附件1中的代码。在我的设计中,将综合使用LinearLayout、TableLayout、EditText和TextView等UI布局和控件来实现计算器的界面。其中,整个界面的布局为LinearLayout,按钮的布局需要对EditText和Button的一些属性进行相关设置,以使得它们满足我们的需要。具体设计如图所示:6.4 计算模块的实现计算模块则主要描述了计算器的整体,实现了计算器的界面,定义了用户单击的处理办法,通过定义的处理办法来完成用户的操作命令,实现用户的计算要求,这些计算要求包括了数值的输入,小数点的输入,正负号的输入,记忆相关功能的完成,加、减、乘、除等各种计算功能的完成,运算符的替换,初始化系统等等。按键名称按键功能C计算清零键,重新开始计算CE本次输入清零键,按下后可以重输入本次数据Delete回退建,删除最后输入的一个字符按键监听同时监听了触屏上的按键和键盘上的按键,其中按键的监听使用了的松开为判断的标准,即用户松开按键的时候程序才会读取数据。计算模块是整个系统的主体部分,整个计算器功能是通过Jisuanq2Activity.java来实现的。首先,我使用一个数组btn来分别监控十个数字键,用et_led来监控输入内容,用btn_div、btn_mul、btn_sub、btn_plus、btn_equal、btn_dot,分别来表示除法、乘法、减法、加法、等号、点号,具体实现如下代码:private Button btn = new Button10;private EditText et_led;private Button btn_div, btn_mul, btn_sub, btn_plus, btn_equal, btn_dot;其次,对内容的操作。当有内容输入时,首先接收内容,接受的内容分为两部分:当输入为数据时,则是通过传递给数组str,根据数据的传递判断数据内容的长度,如果没有内容输入则,则通过et_led.setText()为0,如果有数据输入的时候,则通过et_led.setText()显示数据,并且将第一次输入的数据保存predata;当输入为符号时,像“+、-、*、/、CE、C、Delete”时,然后对符号进行判断,具体实现代码如下:private OnClickListener actionPerformed = new OnClickListener() public void onClick(View v) String command = (Button)v).getText().toString(),str = et_led.getText().toString();if(pareTo(Bksp) = 0) if(str.length() 1)et_led.setText(str.substring(0, str.length() - 1);else if(str.length() = 1) et_led.setText(0);vbegin = true;if(et_led.getText().toString().compareTo(-) = 0) et_led.setText(0);vbegin = true; else if;最后,当第二次输入数据的时候,将会数据存到temp,再根据上次输入的符号进行运算,然后将结果保存在temp,如果按键“=”,则会将将结果输出,如果是其他的符号,则会进行相应的运算,代码中的实现如下:private void wtNumber(String str) if(vbegin)et_led.setText(str);elseet_led.append(str);vbegin = false;private void wtOperater(String opt) try double temp = Double.parseDouble(et_led.getText().toString();if(vbegin)preopt = opt;else if(preopt.equals(=) predata = temp; else if(preopt.equals(+) else throw new ArithmeticException();et_led.setText(String.valueOf(predata);preopt = opt; catch(NumberFormatException e) et_led.setText(Number Format ERROR!); catch(ArithmeticException e) et_led.setText(Div Number CA
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年公路工程试验检测师考试复习要点:(道路工程)全真模拟试题及答案二
- 阿里地区2025-2026学年七年级上学期语文月考测试试卷
- 阿图什市2025-2026学年七年级下学期语文期中模拟试卷
- 安徽省2025年普通高中学业水平合格性考试英语考题及答案
- 2025 年小升初天津市初一新生分班考试英语试卷(带答案解析)-(外研版)
- 云南师大附中2026届高考适应性月考卷(四)理综-答案
- 医学检验科2025年度生物安全培训考核试卷
- 2025年山东卷政治参考答案及评分细则
- 社区消防安全知识培训课件
- 官方商铺合同范本
- 应急疏散培训试题
- 开学安保工作方案(6篇)
- QC080000-2017 HSF有害物质管理程序文件全套
- 计量操作人员(通用类)考试题库(含答案)
- 碳九加氢标准工艺标准流程
- 大海(张雨生)原版五线谱钢琴谱正谱乐谱
- 公开课第一课素描基础入门课件
- 数据结构ppt课件完整版
- GB∕T 36527-2018 洁净室及相关受控环境 节能指南
- 铝模板施工工艺标准
- 采购与供应管理(二)教案
评论
0/150
提交评论