Xx大学计算机与电子信息学院 《移动编程技术》 安卓程序开发设计报告---简单计算器
《安卓开发》程序设计报告
题目 简单计算器开发 网工111班 张波波 *********(qq) 赵(老师) 2014.5.7
专业(班级) 姓学指日
名 号
导
教
师 期
目录
一、设计说明: ............................................................................................................................... 3
1.设计内容: Android简单应用程序开发,简单计算器。 ............................................... 3 2程序说明: ............................................................................................................................ 3 二、开发环境: ............................................................................................................................... 3 三、概要设计: ............................................................................................................................... 3
3.1 系统的总体 ........................................................................................................................ 3 四、程序流程和系统功能设计 ....................................................................................................... 4
4.1程序流程设计 .................................................................................................................... 4 4.2.系统功能设计 .................................................................................................................... 5 4.3基于Android平台系统具体设计 .................................................................................... 6
4.3.1 总体模块详细设计 ................................................................................................. 6 4.3.2 输入模块详细设计 .................................................................................................. 6 4.3.3 显示模块详细设计 ................................................................................................. 7 4.3.4 计算模块详细设计 .................................................................................................. 7
五、计算器系统实现 ...................................................................................................................... 8
5.1 Android应用程序构成 ...................................................................................................... 8 六、截图说明 ................................................................................................................................... 9
1、图标 ..................................................................................................................................... 9 2界面...................................................................................................................................... 10 3运算界面 .............................................................................................................................. 11 4错误输入 .............................................................................................................................. 11 5设计平台界面 ...................................................................................................................... 12 6签名导出apk ....................................................................................................................... 12 七、总结......................................................................................................................................... 13
课程设计任务书 一、设计说明:
1.设计内容: Android简单应用程序开发,简单计算器。 2程序说明:
1、计算器界面友好,方便使用。
2、具有基本的加、减、乘、除功能,还有+—、开方、平方功能。 3、能够判断用户输入运算数是否正确。4、 4、支持小数运算。
5、具有退格功能,能够删除最后一个输入,ce。 6、具有清除功能,删除所有,c。
7、具有结果存储功能,能够显示存储器状态,支持触屏手机。 8、支持最低版本2.0,最高版本4.4。开发时为4.2
二、开发环境:
开发环境:本系统是采用Eclipse+EclipseMe+JDK+ADT作为开发平台。事实上为了节约时间就直接用Google公司安给的直接绑定好的adt-bundle-windows-x86_64开发,只需要配置下环境变量,无需要关联等操作。
三、概要设计:
3.1 系统的总体
整个程序基于android技术开发,出总体模块外主要分为输入模块、显示模块以及计算模块(包括一些其她功能)这三大部分。在整个系统中总体模块控制系统的生命周期,输入模块部分负责读取用户输入的数据,显示模块部分负责显示用户之前输入的数据以及显示最终的计算结果,计算模块部分负责进行数据的运算以及一些其她的功能。
总体模块的作用主要是生成应用程序的主类,控制应用程序的生命周期。 输入模块主
要描述了计算器键盘以及键盘的监听即主要负责读取用户的键盘输入以及响应触屏的按键,需要监听手机按键动作以及用指针事件处理方法处理触屏的单击动作(以松开按键为准)。同时提供了较为直观的键盘图形用户界面。
显示模块描述了计算器的显示区,即该区域用于显示用户输入的数据以及最终的计算结果,同时还负责显示一些其她的信息。
计算模块则主要描述了计算器的整体,实现了计算器的界面,负责计算用户输入数据,包括加、减、乘、除、等各种计算功能,记忆数据的相关功能,退格以及清零的功能。
四、程序流程和系统功能设计
4.1程序流程设计
知道了系统的功能以后,我们通过main.xml来建立显示界面,完成后系统开始监听用户的按键输入,每次输入系统都会判断一次用户输入的类型,是数字还是运算符号或者是清除,判断完后分成不同类型如数字,符号,基本运算等等进行进一步的处理,根据用户的要求继续进行下一步的操作,最后计算出最终结果并显示在显示区。 系统流程图如图4-1所示:
4.2.系统功能设计
整个系统的功能比较多,比较复杂,如上所说,可以分为十多个功能模块,但是逻辑上理解其实不算困难,系统包括普通计算功能,包括加减乘除,退格以及清零功能。下面就让我们用图4-2来表示:
4.3基于Android平台系统具体设计
系统除了总体模块以外主要由三大模块来组成,即输入模块,显示模块和计算模块。用系统框图来表示即如图4-3。
4.3.1 总体模块详细设计
总体模块需要完成的任务主要就是系统的程序启动类,需要负责整个系统的生命周期。同时在还要在模块中完成菜单栏的所有功能,即退出程序,记忆数据,显示数据,清除记忆数据这四个功能。
总体模块的功能图如图4-4:
4.3.2 输入模块详细设计
系统如果想完成计算器中的各种功能,首先用户要能进行数据输入,由于是在触屏手机上开发计算器程序,所以要求输入可以直接使用触屏进行,所以在设计的时候就要充分的考虑要这一点。正是由于考虑到这个特殊的地方,所以在进行模块设计中,选择编写输入模块
类的时候会特意选取使用了可以支持触屏输入的特殊增强型图形用户界面类。
输入模块主要的任务是描述计算器键盘以及实现键盘的监听,即当用户点击按键或者屏幕的时候监听器会去调用相应的处理办法,本模块还需要为系统提供了一个较为直观的键盘图形用户界面。
输入模块的功能图如图4-5:
4.3.3 显示模块详细设计
显示模块主要要完成的任务是描述计算器的显示区,该区域用于显示用户输入的数据以及最终的计算结果和一些其她信息。同时本模块还将提供调用和设置显示的具体方法。
显示模块的功能图如图3-6:
4.3.4 计算模块详细设计
系统想要能在屏幕上显示出计算器的样子要有整体的布局,在本模块中要完成布局的具
体设计,使用户能够看到整个计算器的画面。同时系统想完成计算功能必须要处理用户的输入,当输入模块的监听传到计算模块中时,计算模块就要根据相应的方法进行进一步的处理。这部分主要是对输入进行的逻辑判断,基本会通过if else来实现逻辑判断。计算模块的功能图如图3-7:
五、计算器系统实现
5.1 Android应用程序构成
Android应用程序一般是由Activity、Serviece、Content Provider、Intent、Intent Receiver、Notification六个组件构成。但并非每一个Android应用程序都包含这六个组件。 (1)Activity(活动):应用程序的表示层。Activity是Android的基本组件。 (2)(2)Service(服务):Android应用程序的后台运行组件。 (3)Content Provider(内容提供器):用来管理和分享应用程序数据库。 (4)(4)Intent(意向):Activity之间的粘合剂。使用Intent,可以在系统范围内向目标活动或者服务广播消息,说明希望执行某个动作的意图。 (5)Intent Receiver(意向接收器):通过Intent Receiver实现应用能够对一个外部的事件作出响应,Intent Receiver在AndroidManifest.xml中注册,但也可以在代码中使用Context.registerReceiver()进行注册。
六、截图说明
1、图标
2界面
3运算界面
4错误输入
5设计平台界面
6签名导出apk
七、总结
课程设计终于在我的努力下做完了。这个时候我更加深入的了解了Java的特点以及一些相关知识。 与其临渊羡鱼,不如退而结网。这次Android课程设计给我的最大的印象就是如果自己有了兴趣,就动手去做,困难在你的勇气和毅力下是抬不了头的。如果你连失败都不怕了,那你还怕什么,拾起懒惰的心,勤奋着就会走向成功斩。这次的课程设计在我未来的时日里,是一个标杆,因为它告诉了我,只要我努力没有什么事我做不好的。安卓开发是个很有意思的事情,以后可以在自己手机上安装自己开发的一些小程序,也是个非常不错的事情,目前还没有个安卓机子,而在其他同学手机测试过后,还是比较不错的。
注:因为有源文件了,并且程序代码也还是比较长,就不在报告里面放代码了。
package ymq.demo03;
import android.app.Activity; import android.os.Bundle; import android.view.*; import android.widget.*;
public class demo03 extends Activity {
/** Called when the activity is first created. */
String str=\"\"; EditText et; int c=0,flag=0;
double b=0.0,g=0.0,f=0.0; View vi;
public boolean onCreateOptionsMenu(Menu menu) { // TODO Auto-generated method stub menu.add(0, 1, 1, \"退出\");
return super.onCreateOptionsMenu(menu); }
@Override
public boolean onOptionsItemSelected(MenuItem item) { // TODO Auto-generated method stub if(item.getItemId()==1){finish();}
return super.onOptionsItemSelected(item); }
//计算方法
public double calculater(){ switch(c){
case 0:f=g;break; case 1:f=b+g;break; case 2:f=b-g;break; case 3:f=b*g;break; case 4:f=b/g;break; } b=f; c=0;
return f; }
@Override
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main);
//获得按键
final Button number[]=new Button[10]; final Button fuhao[]=new Button[11];
fuhao[0]=(Button)findViewById(R.id.button01); fuhao[1]=(Button)findViewById(R.id.button02); fuhao[2]=(Button)findViewById(R.id.button03); fuhao[3]=(Button)findViewById(R.id.button04); fuhao[4]=(Button)findViewById(R.id.button05); fuhao[5]=(Button)findViewById(R.id.button06); fuhao[6]=(Button)findViewById(R.id.buttonce); fuhao[7]=(Button)findViewById(R.id.buttonc); fuhao[8]=(Button)findViewById(R.id.zheng); fuhao[9]=(Button)findViewById(R.id.kaifang); fuhao[10]=(Button)findViewById(R.id.pingfang);
number[0]=(Button)findViewById(R.id.button0); number[1]=(Button)findViewById(R.id.button1); number[2]=(Button)findViewById(R.id.button2); number[3]=(Button)findViewById(R.id.button3); number[4]=(Button)findViewById(R.id.button4); number[5]=(Button)findViewById(R.id.button5); number[6]=(Button)findViewById(R.id.button6); number[7]=(Button)findViewById(R.id.button7); number[8]=(Button)findViewById(R.id.button8); number[9]=(Button)findViewById(R.id.button9);
et=(EditText) findViewById(R.id.textView1);
et.setText(str);
fuhao[6].setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub str=\"\";
et.setText(str); vi=v;
} });
fuhao[7].setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub b=0.0;c=0;g=0.0; str=\"\";
et.setText(str);
} });
fuhao[8].setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub if(vi!=fuhao[5]&&str!=\"\"){ char ch=str.charAt(0); if(ch=='-')
str=str.replace(\"-\ else
str=\"-\"+str; et.setText(str); } } });
fuhao[9].setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub if(str!=\"\"){
double a=Double.parseDouble(str); str=Math.sqrt(a)+\"\"; et.setText(str); }} });
fuhao[10].setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub if(str!=\"\"){
double a=Double.parseDouble(str); str=\"\"+a*a;
et.setText(str); }} });
//设定数字按键
number[0].setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub if(flag==1){ str=\"\"; str+=0;
et.setText(str); flag=0; } else{
char ch1[];
ch1=str.toCharArray();
if(!(ch1.length==1&&ch1[0]=='0')) {str+=0;
et.setText(str);} } vi=v; } });
number[1].setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub if(flag==1){ str=\"\"; str+=1;
et.setText(str); flag=0; } else{
str+=1;
et.setText(str); } vi=v; } });
number[2].setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
if(flag==1){ str=\"\"; str+=2;
et.setText(str); flag=0; } else{
str+=2;
et.setText(str); } vi=v; } });
number[3].setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub if(flag==1){ str=\"\"; str+=3;
et.setText(str); flag=0; } else{
str+=3;
et.setText(str); } vi=v; } });
number[4].setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub if(flag==1){ str=\"\"; str+=4;
et.setText(str); flag=0; } else{
str+=4;
et.setText(str); } vi=v; } });
number[5].setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub if(flag==1){ str=\"\"; str+=5;
et.setText(str); flag=0; } else{
str+=5;
et.setText(str); } vi=v; } });
number[6].setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub if(flag==1){ str=\"\"; str+=6;
et.setText(str); flag=0; } else{
str+=6;
et.setText(str); } vi=v; } });
number[7].setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub if(flag==1){ str=\"\"; str+=7;
et.setText(str); flag=0; } else{
str+=7;
et.setText(str); } vi=v; } });
number[8].setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub if(flag==1){ str=\"\"; str+=8;
et.setText(str); flag=0; } else{
str+=8;
et.setText(str); } vi=v; } });
number[9].setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub if(flag==1){ str=\"\"; str+=9;
et.setText(str); flag=0; }
else{
str+=9;
et.setText(str); } vi=v; } });
//设定符号键
//加
fuhao[0].setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub if(str!=\"\"){
if(vi==fuhao[0]||vi==fuhao[1]||vi==fuhao[2]||vi==fuhao[3]){ c=1; }
else{
g=Double.parseDouble(str); calculater(); str=\"\"+f;
et.setText(str); c=1; flag=1; vi=v; }} } });
//减
fuhao[1].setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub if(str!=\"\"){
if(vi==fuhao[0]||vi==fuhao[1]||vi==fuhao[2]||vi==fuhao[3]){ c=2; }
else{
g=Double.parseDouble(str);
calculater(); str=\"\"+f;
et.setText(str); c=2; flag=1; vi=v; }} } });
//乘
fuhao[2].setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub if(str!=\"\"){
if(vi==fuhao[0]||vi==fuhao[1]||vi==fuhao[2]||vi==fuhao[3]){ c=3; }
else{
g=Double.parseDouble(str); calculater(); str=\"\"+f;
et.setText(str); c=3; flag=1; vi=v; }} } });
//除
fuhao[3].setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub if(str!=\"\"){
if(vi==fuhao[0]||vi==fuhao[1]||vi==fuhao[2]||vi==fuhao[3]){ c=4; }
else{
g=Double.parseDouble(str);
calculater(); str=\"\"+f;
et.setText(str); c=4; flag=1; vi=v; }} } });
//等号
fuhao[4].setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
if(str!=\"\"&&vi!=fuhao[0]&&vi!=fuhao[1]&&vi!=fuhao[2]&&vi!=fuhao[3]){ g=Double.parseDouble(str); calculater(); str=\"\"+f;
et.setText(str); flag=1; vi=v;
} } });
//小数点
fuhao[5].setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub if(str==\"\"){ str+=\".\";
et.setText(str); } else{
char ch1[];int x=0; ch1=str.toCharArray();
for(int i=0;i } x++; if(x==0){ str+=\".\"; et.setText(str); } } }); 因篇幅问题不能全部显示,请点此查看更多更全内容