Android项目开发实训项目总结报告(2020年九月整理).doc
d Android 项目开发
实训报告
姓
名:
赵炳琪
学
号:
140840131
专
业:
软件技术
项目名称:
Android 手机记账本
指导教师:
陈雪莲
实训日期:
2016 年 10 月 30 日至
2016 年 12 月 30日
2016 年
12 月
25 日
学
海
无
涯 . 1 Android 项目开发实训记录单 学号 140840131 姓名 赵炳琪 性别 男 指导教师
陈雪莲 项目名称
Android 手机记账本 项目描述 收支管理模块是程序的主体功能,实现了处理用户的收入和支出的信息,进行处理后用表单的形式进行显示,同时提供时间段的收支情况查询功能。
系统除了总体模块以外主要由三大模块来组成,即统计功能和备份功能。
项目评语
分项成绩 平时成绩 实践能力 实训报告
总成绩
等级
学
海
无
涯 . 2 目 录
第一章 概述 .............................................................................................. 1 第二章 需求分析 ....................................................................................... 2 2.1 项目背景 ..................................................................................... 2 2.2 项目需求 ..................................................................................... 2 第三章 相关技术 ....................................................................................... 5 3.1 Adnroid 平台介绍 ......................................................................... 5 3.2 关键技术研究 .............................................................................. 7 第四章 概要设计 ..................................................................................... 10 4.1
系统体系结构 .......................................................................... 10 4.2
用户界面设计 .......................................................................... 15 4.2.1 计算器界面 ....................................................................... 15 4.2.2 小数点运算界面 ............................................................... 15 4.2.3 负数运算界面 ................................................................... 16 4.2.4 开方运算界面 ................................................................... 16 第五章 详细设计 ..................................................................................... 17 5.1 数据输入模块 ............................................................................. 17 5.2 数据显示模块 ............................................................................. 17 5.3 数据计算功能模块 ..................................................................... 17 第六章 结论 ............................................................................................ 27
学
海
无
涯 . 3
学
海
无
涯 . 1 第一章
概述
随着社会的发展,经济水平的提高,手机越来越普及。同时伴随着已送慧联网技术的发展,手机的功能也变得越来越丰富。从原来只具有简单通信功能的非智能手机到现在具有手机操作系统,除通话功能以外,还集上网、聊天、炒股、收发邮件等功能于一身的智能手机系统。
由 Google 公式牵头众多实力雄厚的软硬件厂商加盟商成立了 OMS 联盟,病退出的Android 平台手机系统,作为时代的新生儿,Android 手机操作平台有着得天独厚的优势广阔的发展前景。
而计算器作为现在人们日常生活中常用的一种工具也已经可以说是人们日常生活中必不可少的工具了。计算器的发展同样经历了漫长的过程,凝聚无数仙人的智慧,甚至连计算机的发展都可以说是源于计算器的发展。本程序正式基于 Android 平台开发的计算器。
本课题要求:设计一个基于 Android 的计算器的软件。实现的功能有:
具有基本的加、减、乘、除功能,能够判断用户输入运算数是否正确,支持小数运算,具有退格功能,能够删除最后一个输入,具有清除功能,即“C”。因为打开(ON)、关闭(OFF)屏幕按键的功能 需重点研究的关键问题:计算器的运算和显示问题。
学
海
无
涯 . 2 第二章
需求分析
2.1 项目背景
随着社会的发展,经济水平的提高,手机越来越普及。同时伴随着移动互联网技术的发展,手机的功能也变得越来越丰富。从原来只具有简单通信功能的非智能手机到现在具有手机操作系统,除通话功能以外,还集上网、聊天、炒股、收发邮件等功能于一身的智能手机系统。
Java 语言是当今流行的网络编程语言,它具有面向对象、跨平台、分布应用等特点。面向对象的开发方法是当今世界最流行的开发方法,它不仅具有更贴近自然的语义,而且有利于软件的维护和继承。
为了进一步巩固课堂上所学到的知识,深刻把握嵌入式系统以及 Java 语言的重要概念及其面向对象的特性,使我们能够熟练的应用面向对象的思想和设计方法解决实际问题的能力。
通过此次课程设计,巩固所学 Java 语言基本知识,增进 Java 语言编辑基本功,掌握 JDK、Editplus、Eclipse、JCreator 等开发工具的运用,拓宽常用类库的应用。使学生通过该教学环节与手段,把所学课程及相关知识加以融会贯通,全面掌握 Java 语言的编程思想及面向对象程序设计的方法,为今后从事实际工作打下坚实的基础。
2.2 项目需求
根据需求,符合用户的实际要求,系统应实现以下功能:计算器界面友好,方便使 用,显示到少 6 位结果,具有基本的加、减、乘、除功能,能够判断用户输入运算数是否正确,支持小数运算,具有退格功能,能够删除最后一个输入,具有清除功能,即“C”。因为打开(ON)、关闭(OFF)屏幕按键的功能等。如图 2-1 所示。
学
海
无
涯 . 3
整个程序基于 Android 技术开发,除总体模块外主要分为输入模块、显示模块以及 计算模块这三大部分。在整个系统中总体模块控制系统的生命周期,输入模块部分负责读取用户输入的数据,显示模块部分负责显示用户之前输入的数据以及显示最终的计算结果,计算机模块部分负责进行数据的运算以及一些其他的功能。下面较为详细的做了说明。
具体的说,总体模块的作用主要是生成应用程序的主类,控制应用程序的生命周期。
输入模块主要描述了计算器键盘以及键盘的监听即主要负责读取用户的键盘输入以及响应触屏的按键,需要监听手机动作以及用指针事件处理方法处理触屏的单击动作。同时提供了较为直观的键盘图形用户界面。
显示模块描述了计算器的显示区,即该区域用于显示用户输入的数据以及最终的计算结果,同时负责显示一些其他的信息。
计算模块则主要描述了计算器的整体,实现了计算器的界面,负责计算用户输入数 据,包括加、减、乘、除等各种功能,记忆数据的相关功能,退格以及清零的功能。
系统除了总体模块以外主要由三大模块来组成,即输入模块、显示模块和计算模块, 如图 2-2 所示:
输入模块主要描述了计算器键盘以及键盘的监听即主要负责读取用户的键盘输入以 及响应触屏的按键,需要监听手机按键动作以及用指针事件处理方法处理触屏的单击动作(以松开按键为准)。同时提供了较为直观的键盘图形用户界面。
显示模块描述了计算器的显示区,即该区域用于显示用户输入的数据以及最终的计 算结果,同时还负责显示一些其他的信息。
计算模块则主要描述
学
海
无
涯 . 4 了计算器的整体,实现了计算器的界面,负责计算用户输入数 据,包括加、减、乘、除、等各种计算功能,记忆数据的相关功能,退格以及清零的功能。
学
海
无
涯 . 5 第三章
相关技术
d 3.1 Adnroid 平台介绍
Android 是 Google 于 2007 年 11 月 5 日宣布的基于 Linux 平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的移动软件。可以把它简单理解成 Linux 上套了一个 JAVA 的壳。
Android 的平台基本上是免费的,虽然有部份原生链接库会要求费用,但大部份是免权利金。
Android 的程序可以采用 JAVA 开发, 因为它的虚拟机(Virtual Machine)
Dalvik,只是它将 JAVA 的 bytecode 转成自己的格式,回避掉需要付给 SUN 有关 JAVA 的授权费用。因此,Android 开发环境是需要 JDK 的。
1.
新建项目:打开 Eclipse,选择
File > New > Project > Android Project,具体输入如图 3-1 所示:
在 Project name:中输入工程的名字,build target 中选择所用的平台,Application name 为应用程序的名称,create activity 为活动类的名称,配制运行方式:
学
海
无
涯 . 6
点击 Run Configurations 会出现图 3-2 的界面,然后点击 androidandroid application 新建一个动行方式,在右边 project 中输入要运行的工程名称。至此运行方式配制完成。
运击会行,便会出下如图 3-3 界面:
学
海
无
涯 . 7 3.2 关键技术研究
每一个应用程序,我们都要设计一个图标,可以说图标是应用程序的名片,好的图标能够很快地吸引用户。在此不对图标问题做过多的介绍。
由于不同的 android 手机有着不同的分辨率,将不同分辨率的图标图片放置在相应位置,如图 3-4 所示。
drawable-hdpi 中放置分辨率最高的图标,drawable-mdpi 中放置分辨率中等的图标,drawable-ldpi 中放置分辨率最低的图标。
图标图片大小的要求如图 3-5 所示:
在 AndroidManifest.xml 文件中进行修改,修改情况如下:<application android:icon="@drawable/jisuanqiqi"android:label="@string/app_name">
其他设置保持不变。
在 value 中的 String.xml 中加入 app_name,代码为:<string name="app_name">计算器</string>
学
海
无
涯 . 8 界面设计应该尽量简洁而美观,应该具有良好的交互性。当然,我们每个人可以根据自己的喜好来进行设计,根据我个人的喜好,我最终设计出来的计算器界面如图 3-6 所示:
从上图中,我们可以很直观的看到,从上到下分别是:显示模块、输入模块、计算模块。
输入模块,主要描述了计算器键盘以及键盘的监听即主要负责读取用户的键盘输入以及响应触屏的按键,当用户点击按键或者屏幕的时候监听器会去调用相应的处理办法,具体的处理办法会在相关的地方进行说明。在本项目中,在触屏上提供了各种功能的按键,分别是 C,0,1,2,3,4,5,6,7,8,9,+,-,×,÷,=,ON, OFF。
在整体界面的设置中,我还为各个按键的设置中我还设置了字体的大小,字体的颜色,分别用下列语句实现:
字体大小:
学
海
无
涯 . 9 android:textSize="25dip"
字体颜色:android:textColor = "#7f0000" 界面背景:android:background="#888FFF"
显示模块,主要描述了计算器的显示区,即该区域用于显示用户输入的数据以及最终的计算结果和一些其他信息。显示模块还设置了显示的字体,大小,颜色,同时还设置了显示字体的颜色。具体设置如下代码:
<EditText android:id="@+id/ed_led"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="left"
android:text=""
android:textSize="37px"
android:layout_marginBottom="20px"
android:layout_marginLeft="10px"
android:layout_marginRight="10px"
android:editable="false"
android:cursorVisible="false"
android:layout_weight="1" />
显示区中使用的是基于增强型的图形用户界面 EditText,利用此类的功能,在显示模块中完成了以上设置。显示模块声明了这些设置,在用户使用系统的时候,会在协同布局设置一同完成以上设置,使用户在使用的时候可以直观的看到显示区的样子。
一般情况下都会选择差不多的字体,所以此处选择的字体和键盘上显示的字体其实是一样的,但是事实上系统中进行了两次声明,即逻辑上这是两种不同的字体,以及设置字符串 text 为空。显示区和输入模块中的表格一
学
海
无
涯 . 10 样,同样分别设置了最小显示以及完美显示这两种状态。然后声明了显示区的画法,画法中包括了显示区的两个矩形组成的显示框,显示框的颜色和大小以及显示框中显示的文字所使用的字体,还有文字在显示框中的位置。最后设置了计算模块中的变量得到以及改变显示中所显示的内容的方法,当显示中的内容发生变化时,系统会运行 repaint 命令来重画显示区,由于使用的是比较低级的方法,所以只能通过整个显示区来实现显示更新这个命令。这样虽然和使用高级的方法相比速度上可能有点慢,但是由于时间相差的不是很多,在用户的正常使用中是不会有所感觉的。
以上就是显示模块的具体实现流程。
学
海
无
涯 . 11 第四章
概要设计
4.1
系统体系结构
计算模块则主要描述了计算器的整体,实现了计算器的界面,定义了用户单击的处理办法,通过定义的处理办法来完成用户的操作命令,实现用户的计算要求,这些计算要求包括了数值的输入,小数点的输入,正负号的输入,记忆相关功能的完成,加、减、乘、除等各种计算功能的完成,运算符的替换,初始化系统等等。
按键监听同时监听了触屏上的按键和键盘上的按键,其中按键的监听使用了的松开为判断的标准,即用户松开按键的时候程序才会读取数据。计算模块是整个系统的主体部分,整个计算器功能是通过 Jisuanq2Activity.java 来实现的。
首先,我使用一个数组 btn 来分别监控十个数字键,用 et_led 来监控输入内容,用 btn_div、btn_mul、btn_sub、btn_plus、btn_equal、btn_dot,分别来表示除法、乘法、减法、加法、等号、点号,具体实现如下代码:
private Button[] btn = new Button[10];
private EditText et_led;
private Button btn_div, btn_mul, btn_sub, btn_plus, btn_equal,
btn_dot;
其次,对内容的操作。当有内容输入时,首先接收内容,接受的内容分为两
学
海
无
涯 . 12 部分:当输入为数据时,则是通过传递给数组 str,根据数据的传递判断数据内容的长度,如果没有内容输入则,则通过 et_led.setText()为 0,如果有数据输入的时候,则通过 et_led.setText()显示数据,并且将第一次输入的数据保存predata;当输入为符号时,像“+、-、*、/、C、ON、OFF”时,然后对符号进行判断,具体实现代码如下:
private OnClickListener actionPerformed = new OnClickListener() {
public void onClick(View v) {
String
command = ((Button)v).getText().toString();
str=et_led.getText().toString(); if(command.compareTo("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
„„„„„„„„„„„„„ ;
学
海
无
涯 . 13 }
}
最后,当第二次输入数据的时候,将会数据存到 temp,再根据上次输入的符号进行运算,然后将结果保存在 temp,如果按键“=”,则会将将结果输出,如果是其他的符号,则会进行相应的运算。
程序结构图如下:
参照程序的流程图,设计十个 Activity。分别为进入页面的 Activity,选择运算的 Activity,剩下八个分别为输入数据的 Activity 和显示运算结果的 Activity,如图 2。在这里应该注意的是每当创建一个新的 class,就要继承 Activity。需要用到 public class jisuanqi extends Activity 这句代码因此整理好程序的流程是关键,设计好 Activity 之间的 Intent 链接是关键。
学
海
无
涯 . 14
程序所需的 Activity
相应的,需要在 res/layout 文件夹中建立 3 个 XML 文件来对上述的十个 Activity 进行布局,如图 4-4:
总体上所需要的 Activity 和 XML 布局文件已经建立完毕,下面开始对进入计算器的 Activity 进行编写,首先在布局文件 main.xml 中创建两个 Button 按钮,并且对两个按钮声明 ID 和布局。两个 Button 按钮显示为“开始计算”和“退出”如图 4-5:
然后在 jisuanqi.java 中,首先要声明 Button 按钮用到如下代码:
private Button button1
private Button button2
在安卓里面,用 ID 找控件是个非常
学
海
无
涯 . 15 方便的方法,使用 findViewById 方法来找到在 XML 文件中创建的对象。因此在jisuanqi.java 中,同样需要使用 findViewById 方法来找到两个 Button 控件,代码如下:
button1 = (Button)findViewById(R.id.button1);
button2 = (Button)findViewById(R.id.button2);
接下来开始编辑第二个 Activity,也就是选择运算法则的界面,本界面需要创建 4 个 Button 按钮,分别为加、减、乘、除。Id 分别为 button3、button4、button5、button6。
再下来以加法页面为例,在本页面当中需要创件两个 EditText,一个TextView,还有一个 Button 按钮,TextView 显示为“加上”,Button 按钮显示为“计算”
三个 Activity 创建完成后,我们需要实现以下动作:在用户打开软件之后,点击“开始计算”,然后跳转到选择运算法则的界面,当用户点击“加”则程序进入加法界面。
由此可见,在整个动作中,需要使用侦听代码来识别用户的操作,然后使用Intent 来实现 Activity 的切换。我们以开始界面跳转到选择运算法则界面为例:首先在“开始计算”按钮上设置侦听代码如下:
button1.setOnClickListener(new button1Listener());
然后开始侦听,当用户点击“开始计算”时,启动 Intent 来将本界面切换到选择运算法则的界面,在这里需要 JAVA 中侦听的方法和 Intent 方法,代码如下:
class button1Listener implements OnClickListener{
@Override
public void onClick(View v) {
学
海
无
涯 . 16 //生成一个 Intent 对象
Intent intent = new Intent();
intent.setClass(jisuanqi.this, Activityone.class); jisuanqi.this.startActivity(intent);
}
}
在这句代码当中 intent.setClass(jisuanqi.this, Activityone.class);是规定了本次跳转是从哪个 Activity 跳转到 Activity,在这里是从 jisuanqi.java 跳转到Activity.java。
完成了 Activity 之间的切换,下面我们开始进行运算的编辑,在加法界面,我们编写如下代码来实现将用户输入的两个数传送到 Intent 中:
//生成一个 Intent 对象
//取得两个值
String FactorOnestr=FactorOne.getText().toString();
String FactorTwostr=FactorTwo.getText().toString();
//取得两个值放在 Intent 中
Intent intent = new Intent();
intent.putExtra("one",jiashuoneStr); intent.putExtra("two",jiashutwoStr); //使用这个 Intent 来激活答案页
intent.setClass(plus.this, resultplus.class); plus.this.startActivity(intent);
学
海
无
涯 . 17 接下来要进行的是显示答案的 Activity 的编写,在这里我们要注意的是 Intent传过来的是两个字符串,字符串是不能相加的,因此我们要将两个字符串强制转换为整形,然后才可以相加,代码如下:
plusresult = (TextView)findViewById(R.id.plusresult);
//得到 Intent 对象当中的值
Intent intent = getIntent();
String FactorOnestr=FactorOne.getText().toString();
String FactorTwostr=FactorTwo.getText().toString();
//将字符串转为整形
Log.i("FactorOnestr",FactorOnestr); Log.i("FactorTwostr",FactorTwostr);
//计算两数之和
int result = jiashuone + jiashutwo;
plusresult.setText(result + "");
减法,乘法,除法的界面类似于加法的界面,这里不再过多介绍了。
最后需要注意的是要在 AndroidMainfest.xml 文件中将所有的 Activity 进行注册,然后才可以运行。
学
海
无
涯 . 18 4.2
用户界面设计
1 4.2.1 计算器界面
图 4.2.1
2 4.2.2 小数点运算界面
学
海
无
涯 . 19 图 4.2.2
3 4.2.3 负数运算界面
图 4.2.3
学
海
无
涯 . 20 4 4.2.4 开方运算界面
图 4
学
海
无
涯 . 21 第五章 详细设计
1 5.1 数据输入模块
系统如果想完成计算器中的各种功能,首先用户要能进行数据输入,由于是在触屏手机上开发计算器程序,所以要求输入可以直接使用触屏进行,所以在设计的时候就要充分的考虑要这一点。正是由于考虑到这个特殊的地方,所以在进行模块设计中,选择编写输入模块类的时候会特意选取使用了可以支持触屏输入的特殊增强型图形用户界面类。
输入模块主要的任务是描述计算器键盘以及实现键盘的监听,即当用户点击按键或者屏幕的时候监听器会去调用相应的处理办法,本模块还需要为系统提供了一个较为直观的键盘图形用户界面。
2 5.2 数据显示模块
作为手机计算器系统,显示部分也是必不可少的一部分。没有显示部分就没有办法显示用户输入的数字是否正确,甚至不能显示计算出的结果,由此可见显示模块即包括输入的部分也包括输出的部分。
显示模块主要要完成的任务是描述计算器的显示区,该区域用于显示用户输入的数据以及最终的计算结果和一些其他信息。同时本模块还将提供调用和设置显示的具体方法。
5.3 数据计算功 能模块
系统要完成整个的计算器的计算功能,那么计算模块就是整个系统的重点模块。没有计算模块系统就不能顺利的完成计算,就无法达到用户的要求。所以计
学
海
无
涯 . 22 算模块的设计也是本次系统设计中的重点。
系统想要能在屏幕上显示出计算器的样子要有整体的布局,在本模块中要完成布局的具体设计,使用户能够看到整个计算器的画面。同时系统想完成计算功能必须要处理用户的输入,当输入模块的监听传到计算模块中时,计算模块就要根据相应的方法进行进一步的处理。这部分主要是对输入进行的逻辑判断,基本会通 if else 来实现逻辑判断。
package com.android.calculator;
import java.math.BigDecimal;
import java.math.RoundingMode;
import android.app.Activity;
import android.os.Bundle;
import android.text.Editable;
import android.text.Selection;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
class Flag {
private int a0;
private int a1;
private int a2;
学
海
无
涯 . 23 private int a3;
public int a0()
{
return a0;
}
public int a1()
{
return a1;
}
public int a2()
{
return a2;
}
public int a3()
{
return a3;
}
public Flag(int a,int b,int c,int d)
{
a0=a;
a1=b;
a2=c;
a3=d;
}
public Flag next;
}
class FlagList {
private Flag first; public FlagList(int a,int b,int c,int d){
first=null;
学
海
无
涯 . 24 }
public boolean isEmpty()
{
return (first==null);
}
public void insertFirst(int a,int b,int c,int d){
Flag newFlag = new Flag(a,b,c,d);
newFlag.next = first;
first = newFlag;
}
public Flag deleteFirst()
{
Flag temp = first;
first = first.next;
return temp;
}
}
class FlagStack {
private FlagList theFlagList;
private int count;
public FlagStack()
{
theFlagList = new FlagList(0,0,0,0);
count=0;
}
学
海
无
涯 . 25 public void push(int a,int b,int c,int d){
theFlagList.insertFirst(a,b,c,d);
count++; }
public Flag pop()
{
count=count-1;
return theFlagList.deleteFirst();
}
public boolean isEmpty()
{
return ( theFlagList.isEmpty() );
}
public int count()
{
return count;
}
}
class Num {
private String s=new String();
public Num(String s1)
{
s=s1;
}
public String getNum()
{
return s;
学
海
无
涯 . 26 }
public Num next;
}
class NumList { private Num firstNum;
public NumList()
{
firstNum=null;
}
public boolean isEmpty()
{
return (firstNum==null);
}
public void insertFirst(String s1)
{
Num newNum = new Num(s1);
newNum.next = firstNum;
firstNum = newNum;
}
public Num deleteFirst()
{
Num temp = firstNum;
firstNum = firstNum.next;
return temp;
}
}
学
海
无
涯 . 27 class NumStack {
private NumList theNumList;
private int countNum;
public NumStack()
{
theNumList = new NumList();
countNum=0;
}
public void push(String s1)
{ theNumList.insertFirst(s1);
countNum++;
}
public Num pop()
{
countNum=countNum-1;
return theNumList.deleteFirst();
}
public boolean isEmpty()
{
return ( theNumList.isEmpty() );
}
public int countNum()
{
return countNum;
}
}
学
海
无
涯 . 28 class Symbol {
private char c;
private int degree1;
public Symbol(char c1)
{
c=c1;
if(c=="×"||c=="÷")
degree1=2;
else
degree1=1;
}
public int getDegree(){
return degree1;
}
public char getSymbol()
{
return c;
}
public Symbol next;
}
class SymbolList {
private Symbol firstSymbol;
public SymbolList()
{
firstSymbol=null;
学
海
无
涯 . 29 }
public boolean isEmpty()
{
return (firstSymbol==null);
}
public void insertFirst(char c1)
{
Symbol newSymbol = new Symbol(c1);
newSymbol.next = firstSymbol;
firstSymbol = newSymbol;
}
public Symbol deleteFirst()
{
Symbol temp = firstSymbol;
firstSymbol = firstSymbol.next;
return temp;
}
} class SymbolStack {
private SymbolList theSymbolList;
private int countSymbol;
public SymbolStack()
{
theSymbolList = new SymbolList();
countSymbol=0;
}
学
海
无
涯 . 30 public void push(char c1)
{
theSymbolList.insertFirst(c1);
countSymbol++;
}
public Symbol pop()
{
countSymbol=countSymbol-1;
return theSymbolList.deleteFirst();
}
public boolean isEmpty()
{
return ( theSymbolList.isEmpty() );
}
public int countSymbol()
{
return countSymbol;
}
}
public class CalculatorActivity extends Activity {
/** Called when the activity is first created. */
if(Character.isDigit(mass [j])||mass [j]==46)
n=n+mass[j];
else {
if(n.length()!=0)
{
numStack.push(n);
学
海
无
涯 . 31 n=new String("");
}
symbolStack.push(mass[j]);
}
if(j==mass.length-1&&n.length()!=0)
{
numStack.push(n);
n=new String("");
}
}
//在这使用了栈,需要使用这两个循环改变计算 顺序
while(numStack.countNum()>0)
numStack1.push(numStack.pop().getNum());
while(symbolStack.countSymbol()>0)
symbolStack1.push(symbolStack.pop().getSymbol();
BigDecimal result=calculator(numStack1,symbolStack1);
String resultString=result.toString();
String s=outprocess(resultString);
text1.setText(s);
flag5=1;
}
}
if((Button)v==button[18]) {
学
海
无
涯 . 32 str="0";
text.setText(str);
flag0=1;
flag1=0;
flag2=0;
flag3=0;
FlagStack flagstack1=new FlagStack();
flagstack=flagstack1;
text1.setText("");
}
if((Button)v==button[19])
{
String str1="";
if(flagstack.count()>1)
{
flagstack.pop();
Flag flagnow=flagstack.pop();
flag0=flagnow.a0();
flag1=flagnow.a1();
flag2=flagnow.a2();
flag3=flagnow.a3();
char[] b=str.toCharArray();
for(int i=0;i<str.length()-1;i++){
str1=str1+b[i];
}
str=str1;
text.setText(str);
学
海
无
涯 . 33 flagstack.push(flag0,flag1,flag2,flag3);
}
if(flagstack.count()<=1)
{
flag0=0;
flag1=0;
flag2=0;
flag3=0;
FlagStack flagstack1=new FlagStack();
flagstack=flagstack1;
}
str=str1;
text.setText(str);
}
if(text.getText().length()>=2)
{
//这两句的意思是设置光标位置为字符串最后一位
Editable ea= text.getText(); Selection.setSelection(ea, ea.length()-1);
}
}
}
}
学
海
无
涯 . 34 第六章
结论
在这次实训中我不仅学习了相关的专业知识,而且让我对 Android 系统有了一个更加深入的了解,它也是我们计算机专业的一个新的方向并且发展很迅速,为了今后的发展我们还需不断努力学习!我国的信息产业还很落后,随着社会的发展及国家的支持,手机上网必然是社会发展的趋势,到时候手机上网将会无处不在!赚钱我对 Android 系统的了解只停留在应用的层次上,对于更深层次的了解是很少的,通过这次实习让我对 Android 系统有了一个鞥神层次的了解,同时它也使我意识到无论朝哪个方向发展,主要还是得扎实、深刻的学习,同时也得不断努力探索。
IT 业的发展速度一直都是相当惊人的,不想被社会淘汰,我们就必须得不断的学习,现在的社会不再是一劳永逸,其它行业也是如此,我们必须不断的拿知识来武装自己,不然被淘汰那是肯定的!现在就业难的原因其实在于竞争的加剧,为了在竞争中取得成功,我们必须时时刻刻学习!
在Android 编程过程中巩固熟悉了 Java 的编程。由于 Android 应用程序的开发离不开 Java 的支持,所以基础的 Java 知识是必须的。Android 系统是基于 Linux的手机操作系统平台,要深入系统的学习 Android,不仅仅是有 Java 和 Android应用开发,必须要具备 Linux,C/C++高级编程才能深入的涉及 Android Framework 和 Android 内核开发。成为 Android 开发的高素质人才。所以,在后续对 Android 的学习中可能会看一些较底层的书籍。
由于这次实习时间较短,对于 Android 应用程序的高级编程讲的很少,是这次实习中的不足。要想开发一些好的应用程序,还需要更多的知识支持。在做实习最后的项目时,遇到了很多平时没有遇到或者没有特别关注的问题,如常见的 Activity 忘记注册,对 SD
学
海
无
涯 . 35 卡存取需要权限,在写 SQL 语句时细微的错误就可能导致程序运行错误。这些问题只有自己在实际开发中才能体会到并且解决,并且在解决后可以长时间的记住。
通过对 java 以及 Android 的学习,让我又学会了一门编程语言,这对于我以后的学习工作都会有很大的帮助。
回顾以前所走的路,太多的是无奈和迷茫,这次实训就像是我人生道路上的航标,为我指明了前进的方向,使我对自己的前途充满了信心,同时也知道了自己的前进方向。