当前位置:文档之家› android开发——简易计算器的设计报告

android开发——简易计算器的设计报告

简易计算机的设计摘要:Android是当今最重要的手机开发平台之一,它是建立在Java基础之上的,能够迅速建立手机软件的解决方案。

Android的功能十分强大,成为当今软件行业的一股新兴力量。

Android基于Linux平台,由操作系统、中间件、用户界面和应用软件组成,具有以下5个特点:开放性、应用程序无界限、应用程序是在平等条件下创建的、应用程序可以轻松的嵌入网络、应用程序可以并行运行。

一、实训目的1、了解Android系统,学会Android开发环境的搭建。

2、了解E clipse,学会用E clipse和Java 开发一个Android程序。

3、进一步巩固课堂上所学到的知识,深刻把握Java语言的重要概念及其面向对象的特性,能够熟练的应用面向对象的思想和设计方法解决实际问题的能力。

4、巩固所学Java语言基本知识,增进Java语言编辑基本功,掌握JDK、Editplus、Eclipse、JCreator等开发工具的运用,拓宽常用类库的应用。

二、实训任务1、Activity的相关知识简单理解Activity 代表一个用户所能看到的屏幕,Activity 主要是处理一个应用的整体性工作。

Activity是最基本的Android 应用程序组件,应用程序中,一个活动通常就是一个单独的屏幕。

每一个活动都被实现为一个独立的类,并且从活动基类中继承而来,活动类将会显示由视图控件组成的用户接口,并对事件做出响应。

大多数的应用是由多个屏幕显示组成,因而要用到多个Activity。

(1)Activity的相关方法及相关函数:void onCreate(Bundle)首次启动时调用,接受参数:Null or savedInstanceState(保存的以前某些状态信息);void onStart() 说明了将要显示给用户的活动;void onRestart()将处于停止状态的活动重新显示给用户;void onResume()用户可以开始与活动进行交互时调用。

如动画播放和音乐播放;void onPause()活动将要进入后台运行时调用。

(此时前台启动了另一个活动);void onStop()不需要某个活动了,就调用;void onDestroy()销毁活动。

(2)多个Activity之间的跳转:通过Intent类实现屏幕之间的跳转(包括没有参数关系和需要传递参数两种情况)。

(3)两个Activity之间进行数据交换:startActivity() 只有Intent一个参数;public void startSubActivity(Intent intent, int requestCode) (requestCode:用来标识某一个调用,一般定义一个常量)。

传过去:函数原型为: public Intent setData(ContentURI data) 然后,参数带到新的Activity 后,同样用Activity.getIntent()函数可得到当前过来的Intent对象,然后用getData()就取到参数了。

传回来:函数原型为:public final void setResult(int resultCode, String data)。

2、Intent的相关知识Intent 是描述应用想要做什么。

Android 使用了Intent 这个特殊类,实现在屏幕与屏幕之间移动。

Intent 数据结构两个最重要的部分是动作和动作对应的数据。

Intent类绑定一次操作,它负责携带这次操作所需要的数据以及操作的类型等。

3、Layout用于用户界面设计。

包含AbsoluteLayout, FrameLayout,GridView,LinearLayout, ListLayout, RadioGroup, TableLayout等等。

(1)线性布局LinearLayout:垂直:android:orientation="vertical“;水平:android:orientation="horizontal"(2)相对布局RelativeLayout:让子元素指定它们相对于其他元素的位置(通过ID 来指定)或相对于父布局对象。

在RelativeLayout布局里的控件包含丰富的排列属性:Layout above:控件在指定控件的上方;Layout below:控件在指定控件的下方;Layout to left of……根据要求,系统实现以下功能:计算器界面友好,具有基本的加、减、乘、除功能,支持触屏手机,整个程序基于android技术开发。

三、设计流程1、系统的软件结构图2、功能的操作流程得出程序结果后,输入数据,选择运算符号,再输入数据,选择等号,即可得到结果。

3、计算器模块整个项目工程的目录文件Src 文件存放的是文本中开发的所有java 文件,java 文件时整个项目的代码,gen 下面的R.java 为Eclipse 自动生成的系统文件。

Res 是存放整个系统所有到的所有资源。

Layout 文件下main.xml 文件的配置生成内容。

计算器 基本加减乘除运算 加法 减法 除法 乘法 其他运算开方 *2运算 正负运算 清除运算四、程序源代码1、主文件JisuanqiActivity.javaSrc/jisuqi.a/JisuanqiActivity.java文件时此项目的主要文件,它调用各个公用文件来实现具体的功能。

文件JisuanqiActivity.java的具体代码如下:package jisuanqi.a;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;public class JisuanqiActivity extends Activity {/** Called when the activity is first created. */private EditText output=null;private EditText input=null;private Button btn0=null;private Button btn1=null;private Button btn2=null;private Button btn3=null;private Button btn4=null;private Button btn5=null;private Button btn6=null;private Button btn7=null;private Button btn8=null;private Button btn9=null;private Button btnadd=null;private Button btnsubtract=null;private Button btnmultiply=null;private Button btndivide=null;private Button btnclear=null;private Button btnresult=null;private Button btndot=null;private Button btnzhengshu=null;private Button btnkaifang=null;private Button btnpingfang=null;private String str="";//保存数字private String strold="";//原数字private char act=' ';//记录“加减乘除等于”符号private int count=0;//判断要计算的次数,如果超过一个符号,先算出来一部分private Double result=0.0;//计算的输出结果private Boolean errBoolean=false;//有错误的时候为true,无错为false private Boolean flagBoolean=false;//一个标志,如果为true,可以响应运算消息,如果为false,不响应运算消息,只有前面是数字才可以响应运算消息private Boolean flagDot=false; //小数点标志位@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.main);output=(EditText)findViewById(R.id.output);input=(EditText)findViewById(R.id.input);btn0=(Button)findViewById(R.id.zero);btn1=(Button)findViewById(R.id.one);btn2=(Button)findViewById(R.id.two);btn3=(Button)findViewById(R.id.three);btn4=(Button)findViewById(R.id.four);btn5=(Button)findViewById(R.id.five);btn6=(Button)findViewById(R.id.six);btn7=(Button)findViewById(R.id.seven);btn8=(Button)findViewById(R.id.eight);btn9=(Button)findViewById(R.id.nine);btnadd=(Button)findViewById(R.id.add);btnsubtract=(Button)findViewById(R.id.subtract);btnmultiply=(Button)findViewById(R.id.multiply);btndivide=(Button)findViewById(R.id.divide);btnclear=(Button)findViewById(R.id.clear);btnresult=(Button)findViewById(R.id.result);btndot=(Button)findViewById(R.id.dot);btnzhengshu=(Button)findViewById(R.id.zhengfu);btnkaifang=(Button)findViewById(R.id.kaifang);btnpingfang=(Button)findViewById(R.id.pingfang);//设置按钮侦听事件btn0.setOnClickListener(listener);btn1.setOnClickListener(listener);btn2.setOnClickListener(listener);btn3.setOnClickListener(listener);btn4.setOnClickListener(listener);btn5.setOnClickListener(listener);btn6.setOnClickListener(listener);btn7.setOnClickListener(listener);btn8.setOnClickListener(listener);btn9.setOnClickListener(listener);//执行运算btnadd.setOnClickListener(listener);btnsubtract.setOnClickListener(listener);btnmultiply.setOnClickListener(listener);btndivide.setOnClickListener(listener);btnclear.setOnClickListener(listener);btnresult.setOnClickListener(listener);btndot.setOnClickListener(listener);btnzhengshu.setOnClickListener(listener);btnkaifang.setOnClickListener(listener);btnpingfang.setOnClickListener(listener);}private OnClickListener listener=new OnClickListener() {public void onClick(View v){// TODO Auto-generated method stubswitch (v.getId()){//输入数字case R.id.zero:num(0) ;break;case R.id.one:num(1) ;break;case R.id.two:num(2) ;break;case R.id.three:num(3) ;break;case R.id.four:num(4) ;break;case R.id.five:num(5) ;break;case R.id.six:num(6) ;break;case R.id.seven:num(7) ;break;case R.id.eight:num(8) ;break;case R.id.nine:num(9) ;break;case R.id.dot:dot();break;//执行运算case R.id.zhengfu:zhengfu();break;case R.id.kaifang:kaifang();break;case R.id.add:add();break;case R.id.subtract: sub() ;break;case R.id.multiply: multiply() ; break;case R.id.divide: divide() ; break;case R.id.clear: clear();break;//计算结果case R.id.result:result();if(!errBoolean&&flagBoolean){output.setText(String.valueOf(result));}default:break;}if(act=='k'){input.setText(strold);}else {input.setText(strold+act+str);}output.setText(String.valueOf(result));}private void kaifang(){// TODO Auto-generated method stubif(flagBoolean) {act='k';strold=str;result();}}private void zhengfu(){// TODO Auto-generated method stubif(strold==""){result=Double.valueOf(str);}else{result=Double.valueOf(strold);}result=result*(-1);strold=String.valueOf(result);output.setText(String.valueOf(result));}private void dot(){// TODO Auto-generated method stubif(!flagDot){str=str+".";flagBoolean=false;flagDot=true;}}private void clear() {// TODO Auto-generated method stubstr=strold="";count=0;act=' ';result=0.0;flagBoolean=false;flagDot=false;input.setText(strold+act+str);output.setText("");}private void divide() {// TODO Auto-generated method stubif(flagBoolean){check();act='/';flagBoolean=false;}}private void multiply() {// TODO Auto-generated method stubif(flagBoolean){check();act='*';flagBoolean=false;}}private void sub() {// TODO Auto-generated method stubif(flagBoolean){check();act='-';flagBoolean=false;}}private void add() {// TODO Auto-generated method stubif(flagBoolean){check();act='+';flagBoolean=false;}}private void check() {// TODO Auto-generated method stubif(count>=1){result();str=String.valueOf(result);}strold=str;str="";count++;flagDot=false;}//计算输出结果private void result() {// TODO Auto-generated method stubif(flagBoolean){Double a,b;a=Double.parseDouble(strold);b=Double.parseDouble(str);if(b==0&&act=='/') {clear();output.setText("除数不能为零!");errBoolean=true;}if(!errBoolean){switch(act){case'+':result=a+b;break;case'-':result=a-b;break;case'*':result=a*b;break;case'/':result=a/b;break;case'k':result=Math.sqrt(a);break;default:break;}}}}private void num(int i) {// TODO Auto-generated method stubstr=str+String.valueOf(i);flagBoolean=true;}};}2、布局文件main.xml布局文件main.xml的具体代码如下所示:<?xml version="1.0"encoding="utf-8"?><ScrollView xmlns:android="/apk/res/android"android:layout_width="fill_parent"android:layout_height="wrap_content"><LinearLayout xmlns:android="/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical"><EditTextandroid:id="@+id/input"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_gravity="center"android:editable="false"android:hint="@string/shuru"/><EditTextandroid:id="@+id/output"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_gravity="center"android:editable="false"android:gravity="right"android:hint="@string/shuchu"/><RelativeLayoutandroid:layout_width="fill_parent"android:layout_height="wrap_content"><Buttonandroid:id="@+id/seven"android:layout_width="80dp"android:layout_height="70dp"android:layout_alignParentLeft="true"android:text="@string/seven"android:textSize="40sp"/><Buttonandroid:id="@+id/eight"android:layout_height="70dp"android:layout_toRightOf="@id/seven"android:text="@string/eight"android:textSize="40sp"/><Buttonandroid:id="@+id/nine"android:layout_width="80dp"android:layout_height="70dp"android:layout_toRightOf="@id/eight"android:text="@string/nine"android:textSize="40sp"/><Buttonandroid:id="@+id/add"android:layout_width="80dp"android:layout_height="70dp"android:layout_alignParentRight="true"android:layout_toRightOf="@id/nine"android:text="@string/add"android:textSize="40sp"/><Buttonandroid:id="@+id/four"android:layout_width="80dp"android:layout_height="70dp"android:layout_alignParentLeft="true"android:layout_below="@id/seven"android:text="@string/four"android:textSize="40sp"/><Buttonandroid:id="@+id/five"android:layout_width="80dp"android:layout_height="70dp"android:layout_below="@id/eight"android:layout_toRightOf="@id/four"android:text="@string/five"android:textSize="40sp"/><Buttonandroid:id="@+id/six"android:layout_width="80dp"android:layout_below="@id/nine"android:layout_toRightOf="@id/five"android:text="@string/six"android:textSize="40sp"/><Buttonandroid:id="@+id/subtract"android:layout_width="80dp"android:layout_height="70dp"android:layout_alignParentRight="true"android:layout_below="@id/add"android:layout_toRightOf="@id/six"android:text="@string/subtract"android:textSize="40sp"/><Buttonandroid:id="@+id/one"android:layout_width="80dp"android:layout_height="70dp"android:layout_alignParentLeft="true"android:layout_below="@id/four"android:text="@string/one"android:textSize="40sp"/><Buttonandroid:id="@+id/two"android:layout_width="80dp"android:layout_height="70dp"android:layout_below="@id/five"android:layout_toRightOf="@id/one"android:text="@string/two"android:textSize="40sp"/><Buttonandroid:id="@+id/three"android:layout_width="80dp"android:layout_height="70dp"android:layout_below="@id/six"android:layout_toRightOf="@id/two"android:text="@string/three"android:textSize="40sp"/><Buttonandroid:id="@+id/multiply"android:layout_width="80dp"android:layout_height="70dp"android:layout_alignParentRight="true"android:layout_below="@id/subtract"android:layout_toRightOf="@id/three"android:text="@string/multiply"android:textSize="40sp"/><Buttonandroid:id="@+id/zero"android:layout_width="80dp"android:layout_height="70dp"android:layout_alignParentLeft="true"android:layout_below="@id/one"android:text="@string/zero"android:textSize="40sp"/><Buttonandroid:id="@+id/clear"android:layout_width="80dp"android:layout_height="70dp"android:layout_below="@id/two"android:layout_toRightOf="@id/zero"android:text="@string/clear"android:textSize="40sp"/><Buttonandroid:id="@+id/result"android:layout_width="80dp"android:layout_height="70dp"android:layout_below="@id/three"android:layout_toRightOf="@id/clear"android:text="@string/result"android:textSize="40sp"/><Buttonandroid:id="@+id/divide"android:layout_width="80dp"android:layout_height="70dp"android:layout_alignParentRight="true"android:layout_below="@id/multiply"android:layout_toRightOf="@id/result"android:text="@string/divide"android:textSize="40sp"/><Buttonandroid:id="@+id/dot"android:layout_width="80dp"android:layout_height="70dp"android:layout_alignParentLeft="true"android:layout_below="@id/zero"android:text="@string/dot"android:textSize="40sp"/><Buttonandroid:id="@+id/zhengfu"android:layout_width="80dp"android:layout_height="70dp"android:layout_below="@id/clear"android:layout_toRightOf="@id/dot"android:text="@string/zhengfu"android:textSize="40sp"/><Buttonandroid:id="@+id/kaifang"android:layout_width="80dp"android:layout_height="70dp"android:layout_below="@id/result"android:layout_toRightOf="@id/zhengfu"android:text="@string/kaifang"android:textSize="40sp"/><Buttonandroid:id="@+id/pingfang"android:layout_width="80dp"android:layout_height="70dp"android:layout_alignParentRight="true"android:layout_below="@id/divide"android:layout_toRightOf="@id/kaifang"android:text="@string/pingfang"android:textSize="40sp"/></RelativeLayout></LinearLayout></ScrollView>3、Strings.xml文件Valuas文件下Strings.xml文件的具体实现代码如下:<?xml version="1.0"encoding="utf-8"?><resources><string name="app_name">wzt的计算器</string><string name="zero">0</string><string name="one">1</string><string name="two">2</string><string name="three">3</string><string name="four">4</string><string name="five">5</string><string name="six">6</string><string name="seven">7</string><string name="eight">8</string><string name="nine">9</string><string name="add">+</string><string name="subtract">-</string><string name="multiply">*</string><string name="divide">/</string><string name="clear">CE</string><string name="result">=</string><string name="shuru">请按数字键盘输入数字</string> <string name="shuchu">计算器输出结果</string><string name="dot">.</string><string name="zhengfu">+/-</string><string name="kaifang">√</string><string name="pingfang">X2</string></resources>五、设计结果1、加法运算结果2、减法运算结果3、乘法运算结果4、除法运算结果5、开方运算结果6、正负运算结果六、总结通过一周的实训课程设计,使我学习到了许多新的认识。

相关主题