移动应用开发实验

上传人:ba****u6 文档编号:167768947 上传时间:2022-11-05 格式:DOCX 页数:34 大小:119.62KB
收藏 版权申诉 举报 下载
移动应用开发实验_第1页
第1页 / 共34页
移动应用开发实验_第2页
第2页 / 共34页
移动应用开发实验_第3页
第3页 / 共34页
资源描述:

《移动应用开发实验》由会员分享,可在线阅读,更多相关《移动应用开发实验(34页珍藏版)》请在装配图网上搜索。

1、“移动应用开发”实验报告报告书姓名指导教师学号日 期实验名称设计简单计算器实验内容即题目内容一个计算器的基本功能应有输入数据、加减乘除、浮点数运算、清空结果、删除 一位数据,实验内容包括:(1)数字以字符形式输入,在需要读出数据的时候直接调用getText()函数即可。(2)对于双目运算符,在检测到点击时,得到输入框里的数据numl, 输入框置空,并设置标志op标明是哪种运算。对于除法运算需要判断,除 数是否为零并提醒。(3)对于单目运算符,在检测到点击时,设置标志 or标明是哪种运算。(4)在清空时,需要将输入框置空。清除一位数据时,判断输入框中是否只有一个数据,如是,直接清空,如不是输入框

2、中置前n-1位。(5)在点击等于符号时,得到输入框里的数据 num2,根据前面设置的标志 位,判断点击的是单目运算符还是双目运算符,若是单目运算符就将num2进 彳丁单目运算。若是双目运算,num2不变。再进彳丁 Result运算。1.系统需求分析Android是以Linux为核心的手机操作台,作为一款开放式的操作系统,随着 Android的快速发展,如今已允许开发者使用多和编程语言来开发 Android应 用程序,而不再是以前只能使用lava开发Android应用程序的单一局面,因而受至到众多开发者的欢迎,成为真正意义上的开放式操作系统。计算器通 过算法实行简单的或学计算从而提高了数学计算的

3、效率,实现计算器的界面 优化,使界面更加友好,操作更加方便。基于android的计算器的设计系统具 有良好的界面;必要的英互信息:简约美观的效票,使用人员能快捷简单地 进行操作,即可单机按钮进行操作,即时准确地获得需要的计算的结果,充 分系低了数概计算的难计和节约了时间。2.1计算器功能概要设计根据需求,符合用户的实际需求,系统应实现以下功能:计算器界面友好, 方便使用,具有基本的加,减,乘,除功能。能够判断用户输入运算数是否 正确,支持小数运算,具有清除功能。整个程序基于Android技术开发,除总体模块外主要分为输入模块、显 示模块以及计算模块这三大部分。在整个系统中总体模块控制系统的生命

4、周 期,输入模块部分负责读取用户输入的数据,显示模块部分负责显示用户之 前输入的数据以及显示最终的计算结果,计算模块部分负责进行数据的运算 以及一些其他的功能。具体的说,总体模块的作用主要是生成应用程序的主 类,控制应用程序的生命周期。输入模块主要描述了计算器键盘以及键盘的监听即主要负责读取用户的 键盘输入以及响应触屏的按键,需要监听手机动作以及用指针事件处理方法 处理触屏的单击动作。同时提供了较为直观的键盘图形用户界面。显示模块描述了计算器的显示区,即该区域用于显示用户输入的数据以 及最终的计算结果,同时负责显示一些其他的信息。计算器模块主要描述了计算器的整体,实现了计算器的界面,负责用户输

5、入数据,计算,显示,清零等功能2.2输入模块设计系统如果想完成计算器中各种功能,首先用户要能进行数据输入,由于 是在触屏手机上开发计算器程序,所以要求输入可以直接使用触屏进行,所 以在设计的时候就要充分的考虑这一点。正是由于考虑到这个特殊的地方, 所以在进行模块设计中,选择编写输入模块类的时候会特意选取使用可以支 持触屏输入的特殊增强型图形用户界面类。输入模块主要的任务是描述计算器键盘以及实现键盘的监听,即当用户 点击按键或者屏幕的时候监听会去调用相应的处理办法,本模块还需要为系 统提供一个较为直观的键盘图形用户界面。输入模块的功能图如图2.3显示模块设计作为手机计算器系统,显示部分也是必不可

6、少的一部分。没有显示部分 就没有办法显示用户输入的数字是否正确,甚至不能显示计算出的结果,由 此可见显示模块即包括输入的部分(因个人技术原因不能显示表达式的形式) 也包括输出的部分。显示模块主要完成的任务是描述计算器的显示区,该区域用于显示用户 输入的数据以及最终的计算结果和一些其他信息。同时本模块还将提供调用 和设置显示的具体方法。2.4计算模块设计系统要完成整个的计算器的功能,那么计算模块就是整个系统的重要模块。没有计 算模块系统就不能顺利的完成计算,就无法达到用户的要求。所以计算模块的设计也是 本次系统设计的重点。系统想要能在屏幕上显示出计算器的样子要有整体的布局。在本梗块中要完成布局

7、的具体设计,使用户能够看到整个计算器的界面。同时系统想完成计算功能必须要处理 用户的输入,当输入模块的监听传到计算模块中时,计算模块就要根据相应的方法进行 进一步的处理。数据代码即运行结果截图一、数据代码本实验数据源代码包括四部分,分别是CalculateActivity.java ; InfixToDuffix.java ; activity_calculate.xml ; AndroidManifest.xml。第一部分 CalculateActivity.javapackage com.example.chen.calculator;import android.support.v7.a

8、pp.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.TextView;import java.util.Arrays;public class CalculateActivity extends AppCompatActivity implementsView.OnClickListener Button btn_0;Button btn_1;Button btn_2;Button btn_3;Butto

9、n btn_4;Button btn_5;Button btn_6;Button btn_7;Button btn_8;Button btn_9;Button btn_point; / 小数点Button btn_clear; /清除Button btn_del; /删除Button btn_plus;Button btn_minus;Button btn_multiply;Button btn_divide;Button btn_equal;Button btn_left;Button btn_right;private TextView et_input;private StringBui

10、lder pending = new StringBuilder();private void initView() btn_0 = (Button) findViewById(R.id.btn_0);btn_1 = (Button) findViewById(R.id.btn_1);btn_2 = (Button) findViewById(R.id.btn_2);btn_3 = (Button) findViewById(R.id.btn_3);btn_4 = (Button) findViewById(R.id.btn_4);btn_5 = (Button) findViewById(R

11、.id.btn_5);btn_6 = (Button) findViewById(R.id.btn_6);btn_7 = (Button) findViewById(R.id.btn_7);btn_8 = (Button) findViewById(R.id.btn_8);btn_9 = (Button) findViewById(R.id.btn_9);btn_point = (Button) findViewById(R.id.btn_point);btn_clear = (Button) findViewById(R.id.btn_clear);btn_del = (Button) fi

12、ndViewById(R.id.btn_del);btn_plus = (Button) findViewById(R.id.btn_plus);btn_minus = (Button) findViewById(R.id.btn_minus);btn_multiply = (Button) findViewById(R.id.btn_multiply);btn_divide = (Button) findViewById(R.id.btn_divide);btn_equal = (Button) findViewById(R.id.btn_equal);et_input = (TextVie

13、w) findViewById(R.id.et_input);btn_left = (Button) findViewById(R.id.btn_left);btn_right = (Button) findViewById(R.id.btn_right);btn_0.setOnClickListener(this);btn_1.setOnClickListener(this);btn_2.setOnClickListener(this);btn_3.setOnClickListener(this);btn_4.setOnClickListener(this);btn_5.setOnClick

14、Listener(this);btn_6.setOnClickListener(this);btn_7.setOnClickListener(this);btn_8.setOnClickListener(this);btn_9.setOnClickListener(this);btn_point.setOnClickListener(this);btn_plus.setOnClickListener(this);btn_equal.setOnClickListener(this);btn_minus.setOnClickListener(this);btn_multiply.setOnClic

15、kListener(this);btn_del.setOnClickListener(this);btn_divide.setOnClickListener(this);btn_clear.setOnClickListener(this);btn_divide.setOnClickListener(this);btn_left.setOnClickListener(this);btn_right.setOnClickListener(this);Overrideprotected void onCreate(Bundle savedInstanceState) super.onCreate(s

16、avedlnstanceState);setContentView(R.layout.activity_calculate);initView();public void onClick(View v) int last = 0;if(pending.length()!=0)last = pending.codePointAt(pending.length()-1);switch (v.getId() case R.id.btn_0:pending = pending.append(0”);et_input.setText(pending);break;case R.id.btn_1:pend

17、ing = pending.append(T);et_input.setText(pending);break;case R.id.btn_2:pending = pending.append(2”);et_input.setText(pending);break;case R.id.btn_3:pending = pending.append(3”);et_input.setText(pending);break;case R.id.btn_4:pending = pending.append(4”);et_input.setText(pending);break;case R.id.btn

18、_5:pending = pending.append(5”);et_input.setText(pending);break;case R.id.btn_6:pending = pending.append(6”);et_input.setText(pending);break;case R.id.btn_7:pending = pending.append(7”);et_input.setText(pending);break; case R.id.btn_8:pending = pending.append(8”);et_input.setText(pending);break; cas

19、e R.id.btn_9:pending = pending.append(9”);et_input.setText(pending);break;case R.id.btn_plus:/if (last = 0 & last = 0 & last = 0 & last = 0 & last =0 &last=9|last=)&judje2()=1) pending = pending.append()”);et_input.setText(pending);break;case R.id.btn_left:/ (左括号 if(last!=()|(last=9)pending = pendin

20、g.append();et_input.setText(pending); break; case R.id.btn_del: /删除 if (pending.length() != 0) pending = pending.delete(pending.length() -1,pending.length();et_input.setText(pending); break; case R.id.btn_clear: /清空 pending = pending.delete(0, pending.length(); et_input.setText(pending);break; case

21、R.id.btn_equal: / =等于 if (pending.length() 1) InfixInToDuffix inf = new InfixInToDuffix(); String result; try String a = inf.toSuffix(pending); result = inf.dealEquation(a); catch (Exception ex) result =出错”; et_input.setText(pending + = + result); pending = pending.delete(0, pending.length(); if (Ch

22、aracter.isDigit(result.charAt(0) pending = pending.append(result); -二private boolean judje1() String a = +-*/.;|int b = new inta.length();int max;for (int i = 0; i a.length(); i+) String c = + a.charAt(i);bOf(c);Arrays.sort(b);if (ba.length() - 1 = -1) max = 0;else -1;if (pending.indexOf(.,max) = -1

23、) return true;else r;private int judje2()int a=0,b=0;for(int i = 0 ; i b)return 1;return 2;第二部分 InfixToDuffix.java由于人类在计算时使用中缀表达式较容易理解,而计算机习惯后缀表达式的运算方式,所 以这个类的功能是将用户输入的中缀表达式转化成后缀表达式。源代码如下:package com.example.chen.calculator;/* Created by Administrator on 2018/11/6.*/import java.util.HashMap;import j

24、ava.util.List;import java.util.Map;import java.lang.*;import java.util.ArrayList;import java.util.*;public class InfixInToDuffix 使用集合定义好符号的运算优先级别private static final Mapbasic =new HashMap();static basic.put(-,1);basic.put(+, 1);basic.put(*, 2);basic.put(/, 2);basic.put(, 0);在运算中 ()的优先级最高,但是此处因程序中需要

25、故设置为0将中缀表达式转换为后缀表达式public String toSuffix(StringBuilder infix)List queue = new ArrayList(); / 定义队列 用于存储 数 字以及最后的后缀表达式List stack = new ArrayList(); / 定义栈 用于存 储 运算符 最后stack中会被弹空charcharArr=infix.substring(0,infix.length().trim().toCharArray(); / 字符数组 用于拆分 数字或符号String standard = */+-(); /判定标准 将表达式中会出现的

26、运算符写出来char ch = &; /在循环中用来保存字符数组的当前循环变量的 这里仅仅是 初始化一个值没有意义int len = 0; /用于记录字符长度 【例如100*2,则记录的len为3到时候截 取字符串的前三位就是数字】for (int i = 0; i 0)/ 长 度 也 有queue.add(String.valueOf(Arrays.copyOfRange(charArr, i - len, i); /说明符号 之前的可以截取下来做数字len = 0; /长度置空if(ch = () /如果是左括号stack.add(ch); /将左括号 放入栈中continue; /跳出本

27、次循环 继续找下一个位置if (!stack.isEmpty() / 如果栈不为 emptyint size = stack.size() - 1; /获取栈的大小-1即代表栈最后一个元素的 下标boolean flag = false; / 设置标志位while (size = 0 & ch = ) & stack.get(size) !=() /若当前ch为右括号,则栈里元素从栈顶一直弹出,直 到弹出到 左括号queue.add(String.valueOf(stack.remove(size); / 注意此处条件:ch并未入栈,所以并未插入队列中;同样直到找到左括号的时候,循环结束宁波大

28、学信息科学与工程学院2018-2019学年第2学期了,所以左括号也不会放入队列中【也就是:后缀表达式中不会出现括号】size-; /size-保证下标永远在栈最后一个元素【栈中概念:指针永远指 在栈顶元素】flag = true; /设置标志位为true表明一直在取()中的元素if(ch=)&stack.get(size) = ()flag = true;while (size =0& !flag &basic.get(stack.get(size) = basic.get(ch) 若取得不是()内的元素,并且当前栈顶元素的优 先级=对比元素那就出栈插入队列queue.add(String.v

29、alueOf(stack.remove(size);同样此处也是remove()方法,既能得到要获取的 元素,也能将栈中元素移除掉size-;if(ch != ) 若当前元素不是右括号stack.add(ch); /就要保证这个符号入栈else /否则就要出栈栈内符号stack.remove(stack.size() - 1);if(i = charArr.length - 1) /如果已经走到了中缀表达式的最后一位if(len 0) 如果len0就截取数字queue.add(String.valueOf(Arrays.copyOfRange(charArr, i - len+1, i+1);

30、int size = stack.size() - 1; /size 表示栈内最后一个元素下标while (size = 0) /一直将栈内 符号全部出栈并且加入队列中【最终的后缀表达式是存放在队列中的,而栈内最后会被弹空】queue.add(String.valueOf(stack.remove(size);size;String a = queue.toString();return a.substring(1,a.length()-1);public String dealEquation(String equation)String arr = equation.split(, );

31、/ 根据,拆分字符串 List list = new ArrayList(); 用于计算时存储运算过程的集合【例如list中当前放置10020 5 /则取出20/5最终将结果4存入list 此时list中结果为100 4】 for (int i = 0; i arr.length; i+) 此处就是上面说的运算过程,因为list.remove的缘故,所以取出最后 一个数个最后两个数都是size-2 int size = list.size(); switch (arri) ,一 case +:double a = Double.parseDouble(list.remove(size-2)+D

32、ouble.parseDouble(list.remove(size-2);list.add(String.valueOf(a);break; case -:double b = Double.parseDouble(list.remove(size-2)-Double.parseDouble(list.remove(size-2);list.add(String.valueOf(b);break;一,一 一 case *:double c = Double.parseDouble(list.remove(size-2)*Double.parseDouble(list.remove(size-

33、2);list.add(String.valueOf(c);break;case /:double d = Double.parseDouble(list.remove(size-2)/Double.parseDouble(list.remove(size-2);list.add(String.valueOf(d);break;default:list.add(arri);break; /如果是数字 直接放进list中return list.size() = 1 ? list.get(0):运算失败”;/最终 list 中仅有一个结果,否则就是算错了第三部分 activity_calculat

34、e.xml这部分代码是布局文件(layout)。Buttonandroid:id=+id/btn_clear”android:layout_width=0dp”android:layout_height=match_parentandroid:layout_weight=1android:text=C”android:textSize=40sp”android:background=#ffffff”/Buttonandroid:layout_width=0dp”android:layout_height=match_parent”android:text=2”android:textSize=

35、30sp”android:id=+id/btn_2”android:layout_weight=1android:background=#FFFFCC”/第四部分 AndroidManifest.xml活动创建后,还要在AndroidManifest.xml里面注册。manifest xmlns:android=http:/schemas.a二、运行结果截图本实验的运行结果截图如下:?xmlapplicationandroid:allowBackup=true”android:icon=mipmap/ic_launcherandroid:label=string/app_nameandroid

36、:roundIcon=mipmap/ic_launcher_roundandroid:supportsRtl=trueandroid:theme=style/AppThemeapplication(applicationandroid:allowBackup=trueandroid:icon=mipmap/ic_launcherandroid:label=string/app_nameandroid:roundIcon=mipmap/ic_launcher_roundandroid:supportsRtl=trueandroid:theme=style/AppThemeversion=1.0

37、encoding=utf-8?applicationandroid:allowBackup=trueandroid:icon=mipmap/ic_launcherandroid:label=string/app_name(applicationandroid:allowBackup=trueandroid:icon=mipmap/ic_launcherandroid:label=string/app_nameandroid:roundIcon=mipmap/ic_launcher_roundandroid:supportsRtl=trueandroid:theme=style/AppTheme宁波大学信息科学与工程学院2018-2019学年第2学期运行结果截图如下所示:错误总结1、在主活动中部分findViewById(

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!