当前位置:文档之家› android简单计算器课程设计.

android简单计算器课程设计.

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

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

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

而简单计算器又是手机上必备的小程序,所以此次创新实践很有意义。

并且具有很强的使用性。

关键字:Android Java基础计算器目录第1章开发工具与环境 (1)1.1 Android平台 (1)1.2 Java开发环境 (1)1.3 Eclipse (1)1.4 Android程序基础—Android应用程序的构成 (2)第2章系统分析与设计 (4)2.1系统的可行性分析 (4)2.2 系统的需求分析 (4)2.3 系统的优势 (4)2.4 系统的流程图 (5)第3章系统详细设计 (6)3.1 动作Activity (6)3.2 布局文件XML (6)3.3 Activity的详细设计 (7)3.2 布局文件XML的详细设计 (21)3.2 系统的运行结果 (24)结论 (25)参考文献 (26)第1章开发工具与环境1.1 Android平台1.谷歌与开放手机联盟合作开发了Android, 这个联盟由包括中国移动、摩托罗拉、高通、宏达和T-Mobile在内的30多家技术和无线应用的领军企业组成。

2.Android是一个真正意义上的开放性移动设备综合平台。

通过与运营商、设备制造商、开发商和其他有关各方结成深层次的合作伙伴关系,来建立标准化、开放式的移动电话软件平台,在移动产业内形成一个开放式的生态系统,这样应用之间的通用性和互联性将在最大程度上得到保持。

3.所有的Android应用之间是完全平等的。

4.所有的应用都运行在一个核心的引擎上面,这个核心引擎其实就是一个虚拟机,它提供了一系列用于应用和硬件资源间进行通讯的API。

撇开这个核心引擎,Android的所有其他的东西都是“应用”。

5.Android打破了应用之间的界限,比如开发人员可以把Web上的数据与本地的联系人,日历,位置信息结合起来,为用户创造全新的用户体验。

1.2 Java开发环境Java技术包含了一个编程语言及一个平台。

Java编程语言具有很多特性,如面向对象、跨平台、分布式、多线程、解释性等等。

Java编程语言起源于Sun公司的一个叫“Green”的项目,目的是开发嵌入式家用电器的分布式系统,使电气更加智能化。

1996年1月发布了JDK1.1版本,一门新语言自此走向世界。

之后,1998年12月发布了1.2版本,2002年2月发布1.4版本,2004年10月发布1.5版本(5.0),2006年12月发布1.6(6.0)版本,这是目前的最新版本。

Java1.2版本是一个重要的版本,基于该版本,Sun将Java技术分为J2SE、J2ME、J2EE,其中J2SE为创建和运行Java程序提供了最基本的环境,J2ME与J2EE 建立在J2SE的基础上,J2ME为嵌入式应用(如运行在手机里的Java程序)提供开发与运行环境,J2EE为分布式的企业应用提供开发与运行环境。

1.3 EclipseEclipse的基础是富客户机平台(Rich Client Platform,即RCP)。

RCP包括下列组件:●核心平台(Eclipse,运行插件)●标准集束框架(OSGi :Open Service Gateway initiative)●可移植构件工具包(SWT : Eclipse's Standard Widget Toolkit)●JFace(文件缓冲,文本处理,文本编辑器)Eclipse采用的技术是IBM公司开发的SWT,这是一种基于Java的窗口组件,类似Java 本身提供的AWT和Swing窗口组件:不过IBM声称SWT比其他Java窗口组件更有效率。

Eclipse的用户界面还使用了GUI中间层JFace,从而简化了基于SWT的应用程序的构建。

Eclipse的设计思想是:一切皆插件。

Eclipse核心很小,其他所有功能都以插件的形式附加于Eclipse核心之上。

Eclipse基于内核包括:图形API(SWT/JFace),Java开发环境插件(JDT),插件开发环境(PDE)等。

Eclipse的插件机制是轻型软件组件化架构。

在富客户机平台上,Eclipse使用插件来提供所有的附加功能,例如支持Java以外的其他语言。

已有的分离的插件已经能够支持C/C++(CDT)、Perl、Ruby、Python、telnet和数据库开发。

插件架构能够支持将任意的扩展加入到现有环境中,例如配置管理,而决不仅仅限于支持各种编程语言。

1.4 Android程序基础—Android应用程序的构成1.Activity 顾名思义,Activity就是活动。

应用程序必须至少包含一个Activity。

Activity提供了一个虚拟的用户接口,每一个Activity都有一个默认的窗口可以用来显示用户界面,一般情况下,它是全屏的窗口。

例如,影音播放软件的每个用户界面就是Activity。

2.Service Service与Activity的主要区别在于,Service是在后台活动的,它没有用户界面。

典型的应用场景是,用户选择了一个播放列表开始播放后,离开了该用户界面(Activity),如果仍然希望歌曲不会暂停,就可以用Service去调用播放器,而不是在Activity中调用播放器。

3.Intent 在Android中,每一个行为都可以抽象为一个Intent。

可以简单地把Intent理解为一个包含了数据的消息。

Intent可以用于启动一个Act-ivity或者Service,可以用于进程间的通信。

事实上,应用程序的启动也是通过Intent实现的。

4.Content providers Android平台内置了一套SQLite数据储存机制,并包含一系列管理SQLite Database的相关方法。

在应用程序中,可以通过Content prov-iders访问数据库。

每个Content provider都定义了一系列的方法用于访问它对应的数据库。

应用程序在新建数据库时也可以定义相应的Con-tent provider用于向其他应用程序共享数据。

一般情况下,应用程序不直接调用Content provider定义的函数,而是通过ContentResolver间接调用。

第2章系统分析与设计2.1系统的可行性分析可行性研究是为了弄清楚系统开发的项目是不是可以实现和值得进行研究的过程,实际上是一次大大简化系统分析和系统设计的过程,所以,进行可执行性的分析是非常必要的,也是很重要的,经过最初的设计目标和进行的实时调查得出以下四点的可行性分析:(1)技术可行性:Eclipse + Android ADT的技术已经较为成熟,通过SUN公司(现被ORCEL公司收购)推出的跨平台、动态的JA V A语言进行开发。

(2)运行可行性:该系统需要Android虚拟机环境,Eclipse中安装ADT,DDMS等Google Android相关插件。

其运行环境已经相当稳定,它功能丰富,包括了完备的Android 程序的编码、调试、测试和发布功能,其中支持所有Android应用开发相关技术,包括SQLite,Skia,3D制作,Android XML,能够很好的发布Android的应用程序APK包。

(3)法律可行性:因为是自主开发设计,所以不会构成侵权,在法律上是可行的。

通过以上的可行性分析,将采用Eclipse+Android ADT + DDMS技术,运用JA V A语言进行系统的开发。

2.2 系统的需求分析根据分析需求,这个系统必须实现以下的功能:(1) 实现简单的数字计算功能。

作为计算器,其核心就是加减乘除。

(2) 能够在手机里面以良好的界面。

简单计算器能够给予用户良好的人机互动界面。

2.3 系统的优势Android是以Linux为核心的手机操作平台,作为一款开放式的操作系统,随着Android的快速发展,如今已允许开发者使用多种编程语言来开发Android应用程序,而不再是以前只能使用Java开发Android应用程序的单一局面,因而受到众多开发者的欢迎,成为真正意义上的开放式操作系统。

本次课程设计一个简易的计算器。

主要了解Activity的创建和Intent的使用。

Intent不仅可以连接两个Activity。

而且可以传递数据。

下面是整个程序的设计流程。

2.4 系统的流程图本程序的流程是一个开机画面,开机画面之后就是计算机的主页面了所有这个简单程序的流程图如图2.1所示。

图2.1 程序流程图第3章系统详细设计3.1 动作Activity参照程序的流程图,设计五个Activity。

分别为进入页面的Activity,和选择运算方式的Activity。

在这里应该注意的是每当创建一个新的class,就要继承Activity 如图3.1所示。

图3.1 程序所需的Activity3.2 布局文件XML相应的,需要在res/layout文件夹中建立3个XML文件来对上述的十个Activity进行布局,如图3.2所示。

图3.2 3个XML布局文件总体上所需要的Activity和XML布局文件已经建立完毕,下面开始对进入计算器的Activity进行编写,3.3 Activity的详细设计动作模块中CalculatorActivity.java的详细代码如下:package com.calculator.apk;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;public class CalculatorActivity extends Activity {/*** 对layout中各组件进行定义*/Button btn1,btn2,btn3,btn4,btn5,btn6,btn7,btn8,btn9,btn0,btnPoint; Button btnJia,btnJian,btnCheng,btnChu;Button btnC,btnE,btnA,btnB;Button btnJieGuo;TextView textView01;EditText et;//定义一个float类型,用于数字的运算float num1;//定义一个float类型,用于数字的运算float num2;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.calculator);//定义一个方法,完成对个组件的初始化init();//设置btn1的监听事件btn1.setOnClickListener(new OnClickListener(){ @Overridepublic void onClick(View v) {//获取EditText中的值String num1 = et.getText().toString();//将num1后面连接1,然后再将值赋给EditTextet.setText(num1+1);}});//设置btn2的监听事件btn2.setOnClickListener(new OnClickListener(){ @Overridepublic void onClick(View v) {//获取EditText中的值String num1 = et.getText().toString();//将num1后面连接2,然后再将值赋给EditTextet.setText(num1+2);}});//设置btn3的监听事件btn3.setOnClickListener(new OnClickListener(){ @Overridepublic void onClick(View v) {//获取EditText中的值String num1 = et.getText().toString();//将num1后面连接3,然后再将值赋给EditTextet.setText(num1+3);}});//设置btn4的监听事件btn4.setOnClickListener(new OnClickListener(){ @Overridepublic void onClick(View v) {//获取EditText中的值String num1 = et.getText().toString();//将num1后面连接4,然后再将值赋给EditTextet.setText(num1+4);}});//设置btn5的监听事件btn5.setOnClickListener(new OnClickListener(){ @Overridepublic void onClick(View v) {//获取EditText中的值String num1 = et.getText().toString();//将num1后面连接5,然后再将值赋给EditTextet.setText(num1+5);}});//设置btn6的监听事件btn6.setOnClickListener(new OnClickListener(){ @Overridepublic void onClick(View v) {//获取EditText中的值String num1 = et.getText().toString();//将num1后面连接6,然后再将值赋给EditTextet.setText(num1+6);}});//设置btn7的监听事件btn7.setOnClickListener(new OnClickListener(){ @Overridepublic void onClick(View v) {//获取EditText中的值String num1 = et.getText().toString();//将num1后面连接7,然后再将值赋给EditTextet.setText(num1+7);}});//设置btn8的监听事件btn8.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v) {//获取EditText中的值String num1 = et.getText().toString();//将num1后面连接8,然后再将值赋给EditTextet.setText(num1+8);}});//设置btn9的监听事件btn9.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v) {//获取EditText中的值String num1 = et.getText().toString();//将num1后面连接9,然后再将值赋给EditTextet.setText(num1+9);}});//设置btn0的监听事件btn0.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v) {//获取EditText中的值String num1 = et.getText().toString();//判断,如果0为首次输入,并且0为首位数字,则将下列按钮设为不可用if(num1.length()<=0){btn1.setEnabled(false);btn2.setEnabled(false);btn3.setEnabled(false);btn4.setEnabled(false);btn5.setEnabled(false);btn6.setEnabled(false);btn7.setEnabled(false);btn8.setEnabled(false);btn9.setEnabled(false);btn0.setEnabled(false);btnJieGuo.setEnabled(false);btnJia.setEnabled(false);btnJian.setEnabled(false);btnCheng.setEnabled(false);btnChu.setEnabled(false);et.setText("0");}else{//如果0不为第一个数字,则将num1后面连接0,然后再将值赋给EditText et.setText(num1+0);}}});//设置btnPoint的监听事件btnPoint.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v) {//不论下列按钮可不可用,都将设为可用btn1.setEnabled(true);btn2.setEnabled(true);btn3.setEnabled(true);btn4.setEnabled(true);btn5.setEnabled(true);btn6.setEnabled(true);btn7.setEnabled(true);btn8.setEnabled(true);btn9.setEnabled(true);btn0.setEnabled(true);btnJieGuo.setEnabled(true);btnJia.setEnabled(true);btnJian.setEnabled(true);btnCheng.setEnabled(true);btnChu.setEnabled(true);//获取EditText中的值String num1 = et.getText().toString();//此处方法是判断小数点是否存在if(num1.indexOf(".")<0){//检索“.”的index值,如果不存在,返回的是-1//此处判断小数点是否在字符串的开头if(num1.length()>0){//如果不是在字符串的开头,则将num1后面连接“.”,然后再将值赋给EditText et.setText(num1+".");}else{//如果小数点在字符串的开头,则将EditText的值设为空et.setText("");}}else{//如果小数点在前面的数字中已经出现,则EditText的值不变et.setText(num1);}}});//设置btnC的监听事件btnC.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v) {btn1.setEnabled(true);btn2.setEnabled(true);btn3.setEnabled(true);btn4.setEnabled(true);btn5.setEnabled(true);btn6.setEnabled(true);btn7.setEnabled(true);btn8.setEnabled(true);btn9.setEnabled(true);btn0.setEnabled(true);btnJieGuo.setEnabled(true);btnJia.setEnabled(true);btnJian.setEnabled(true);btnCheng.setEnabled(true);btnChu.setEnabled(true);//清空EditTextet.setText("");//清空TextViewtextView01.setText("");//num1和num2的值归零num1=0;num2=0;}});//设置btnE的监听事件btnE.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v) {//设置一个显式意图,用于CalculatorActivity和AboutActivity之间的跳转Intent intent = new Intent(CalculatorActivity.this,MainActivity.class);startActivity(intent);}});//设置btnJia的监听事件btnJia.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v) {//获取EditText的值String num = et.getText().toString().trim();//判断,如果EditText为空,则将EditText设置为空,如果不为空,则将EditText的值转化为float类型if(num.length()==0){et.setText("");}else{num1 = Float.parseFloat(num);}//将符号"+"赋给TextViewtextView01.setText("+");//清空EidtTextet.setText("");}});//设置btnJian的监听事件btnJian.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v) {//获取EditText的值String num = et.getText().toString().trim();//判断,如果EditText为空,则将EditText设置为空,如果不为空,则将EditText的值转化为float类型if(num.length()==0){et.setText("");}else{num1 = Float.parseFloat(num);}//将符号"-"赋给TextViewtextView01.setText("-");//清空EidtTextet.setText("");}});//设置btnCheng的监听事件btnCheng.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v) {//获取EditText的值String num = et.getText().toString().trim();//判断,如果EditText为空,则将EditText设置为空,如果不为空,则将EditText的值转化为float类型if(num.length()==0){et.setText("");}else{num1 = Float.parseFloat(num);}//将符号"*"赋给TextViewtextView01.setText("*");//清空EidtTextet.setText("");}});//设置btnChu的监听事件btnChu.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v) {//获取EditText的值String num = et.getText().toString().trim();//判断,如果EditText为空,则将EditText设置为空,如果不为空,则将EditText的值转化为float类型if(num.length()==0){et.setText("");}else{num1 = Float.parseFloat(num);}//将符号"/"赋给TextViewtextView01.setText("/");//清空EidtTextet.setText("");}});//设置btnJieGuo的监听事件btnJieGuo.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v) {//获取EditText的值String num22 = et.getText().toString().trim();//判断,如果EditText的值为空,则将EditText的值设为空,如果不为空,则将EditText 的值转化为float类型if(num22.length()<=0){et.setText("");}else{num2 = Float.parseFloat(num22);}//获取TextView的值String fuhao = textView01.getText().toString().trim();//如果TextView的符号为“+”,将num1和num2相加,并把值赋给EditTextif("+"==fuhao){float numjiguo1 = num1 + num2;et.setText(""+numjiguo1);}else//如果TextView的符号为“-”,将num1和num2相减,并把值赋给EditTextif("-"==fuhao){float numjiguo1 = num1 - num2;et.setText(""+numjiguo1);}else//如果TextView的符号为“*”,将num1和num2相乘,并把值赋给EditTextif("*"==fuhao){float numjiguo1 = num1 * num2;et.setText(""+numjiguo1);}else//如果TextView的符号为“/”,将num1和num2相除,并把值赋给EditText if("/"==fuhao){float numjiguo1 = num1 / num2;et.setText(""+numjiguo1);}}});//设置btnB的监听事件,此处为这只退格键btnB.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v) {//不论下列按钮是否为可用,都将设置为可用btn1.setEnabled(true);btn2.setEnabled(true);btn3.setEnabled(true);btn4.setEnabled(true);btn5.setEnabled(true);btn6.setEnabled(true);btn7.setEnabled(true);btn8.setEnabled(true);btn9.setEnabled(true);btn0.setEnabled(true);btnJieGuo.setEnabled(true);btnJia.setEnabled(true);btnJian.setEnabled(true);btnCheng.setEnabled(true);btnChu.setEnabled(true);//获取EditText的值String num = et.getText().toString().trim();//获得EditText的长度int length = et.length();//判断,如果EditText的长度大于0,则获取length-1的字符串赋给EditText,否则设置EditText为空if(length>0){String numRe = num.substring(0, length-1);et.setText(numRe);}else{et.setText("");}}});//设置btnA的监听事件btnA.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v) {//设置一个显式意图,用于CalculatorActivity和AboutActivity之间的跳转Intent intent = newIntent(CalculatorActivity.this,AboutActivity.class);startActivity(intent);}});}/*** 定义一个方法,完成对个组件的初始化*/void init(){btn1 = (Button)findViewById(R.id.btn1);btn2 = (Button)findViewById(R.id.btn2);btn3 = (Button)findViewById(R.id.btn3);btn4 = (Button)findViewById(R.id.btn4);btn5 = (Button)findViewById(R.id.btn5);btn6 = (Button)findViewById(R.id.btn6);btn7 = (Button)findViewById(R.id.btn7);btn8 = (Button)findViewById(R.id.btn8);btn9 = (Button)findViewById(R.id.btn9);btn0 = (Button)findViewById(R.id.btn0);btnPoint = (Button)findViewById(R.id.btnPiont);btnJia = (Button)findViewById(R.id.btnJia);btnJian = (Button)findViewById(R.id.btnJian);btnCheng = (Button)findViewById(R.id.btnCheng);btnChu = (Button)findViewById(R.id.btnChu);btnC = (Button)findViewById(R.id.btnC);btnE = (Button)findViewById(R.id.btnE);btnA = (Button)findViewById(R.id.btnA);btnB = (Button)findViewById(R.id.btnB);btnJieGuo = (Button)findViewById(R.id.btnJieguo);et = (EditText)findViewById(R.id.ed);textView01 = (TextView)findViewById(R.id.textView01);}}3.2 布局文件XML的详细设计布局文件main.xml编写布局代码如下:<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"android:background="@drawable/bg_android01"android:gravity="center"><Buttonandroid:layout_width="80px"android:layout_height="80px"android:layout_marginBottom="35px"android:id="@+id/btnshow"android:text="开始计算"></Button></LinearLayout>三个Activity创建完成后,我们需要实现以下动作:在用户打开软件之后,点击“开始计算”,然后跳转到选择运算法则的界面,当用户输入数字点击加减乘除后运算得到结果。

相关主题