android计算器设计文档.
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告
课程名称Android或JA V A综合实训实验名称电子计算器
专业计算机科学与技术
班级1002班
学号201003010234
姓名吴超
指导教师陈华光
2013年12 月18 日
目录
一.引言 1
二.需求分析 1
1.状态定义 1
2.计算器功能 2
三.总体设计 5
1.软件设计结构图 5
2.程序设计流程图 6
四.模板设计 7
1.计算模块详细设计 7
2.用户模型设计 7
3.计算模板设计的实现 8
4.计算器模板设计 9
五.计算器演示 10
六.小结 13 七.附录 14
一:引言
目前手机可以说是普及率非常高的电子设备了,由于其便于携带,使用方便,资费适中等等原因,现在手机已经在一定程度开始代替固定电话的通话功能,以及一些原来电脑软件上的功能了。
手机上的软件也随着手机的发展变得丰富起来了,时至今日已经出现了很多专门制作手机软件的公司,虽然制作的多是游戏软件,但是一些辅助性的工具软件也有了很多.我们在此次系统中所做的工作主要是设计整个系统以及利用编程语言实现整个系统,使系统能够正确的运行计算功能。
二:需求分析
(一)状态定义:能满足基本的数学运算。
具体要求如下:
1,刚启动计算器时的状态:开始计算按键开始键"ON"
2.清零:计算刚启动时,或者任何时候键入了清零键,计算器所处的状态。
2.一个操作数:输入了一个操作数时计算器所处的状态,如键入“2”后的状态,此时操作数为“2”,或者依次键入“3”、“8”后的状态,此时操作数为“38”。
3.运算结果:键入了“=”键后计算器所处的状态,如依次键入“3+5=”之后计算器的状态。
在此状态如果输入数字,输入的数字将作为第一个操作数,开始一次新的计算。
4.一个操作数和一个两元符号:输入了一个操作数和加减乘除中的一个键后计算器的状态,如依次输入“2+”或“31×5=÷”之后计算器的状态。
5.操作数两元符操作数:输入了一个操作数、一个加减乘除符号和另一个操作数后计算器所处的状态,如依次键入“30÷4”或“3+5=÷5”后计算器的状态。
6.操作数两元符运算结果:输入了一个操作数、一个加减乘除符号和另一个操作数后紧接着键入开方键计算器所处的状态。
7.错误:执行非法计算后所处的状态,如执行÷0计算或者对负数的开方计算后的状态。
比如6/0后计算的结果是“0不能做除数”。
(二)本计算器具有以下功能:用表说明
三:总体设计
(一)软件设计结构图
本计算器主要可以实现基本的加减乘运算和其他的一些运算。
包括:加法运算,减法运算,乘法运算,除法运算。
其他运算包括开方运算,*2运算,正负运算,清除运算等。
(二)程序流程设计图
运行程序后系统开始监听用户的按键输入,每次输入系统都会判断一次用户输入的类型,是数字还是运算符号或者是清除,判断完后分成不同类型如数字,符号,基本运算等等进行进一步的处理,根据用户的要求继续进行下一步的操作,最后计算出最终结果并显示在显示区。
四.模板设计
1.计算模块详细设计
系统要完成整个的计算器的计算功能,那么计算模块就是整个系统的重点模块。
没有计算模块系统就不能顺利的完成计算,就无法达到用户的要求。
所以计算模块的设计也是本次系统设计中的重点。
系统想要能在屏幕上显示出计算器的样子要有整体的布局,在本模块中要完成布局的具体设计,使用户能够看到整个计算器的画面。
同时系统想完成计算功能必须要处理用户的输入,当输入模块的监听传到计算模块中时,计算模块就要根据相应的方法进行进一步的处理。
这部分主要是对输入进行的逻辑判断,基本会通过if else来实现逻辑判断。
2.用户界面设计
界面设计应该尽量简洁而美观,应该具有良好的交互性。
当然,我们每个人可以根据自己的喜好来进行设计,根据我个人的喜好,我最终设计出来的计算器界面如图4-7所示:
从上图中,我们可以很直观的看到,从上到下分别是:显示模块、输入模块、计算模块。
(1)输入模块,主要描述了计算器键盘以及键盘的监听即主要负责读取用户的键盘输入以及响应触屏的按键,当用户点击按键或者屏幕的时候监听器会去调用相应的处理办法,具体的处理办法会在相关的地方进行说明。
在本项目中,在触屏上提供了各种功能的按键,分别是C,0,1,2,3,4,5,6,7,8,9,+,-,×,÷,=,delete, clear,+/-,√x,x²。
(2)显示模块,主要描述了计算器的显示区,即该区域用于显示用户输入的数据以及最
终的计算结果和一些其她信息。
3.计算模块设计的实现
计算模块则主要描述了计算器的整体,实现了计算器的界面,定义了用户单击的处理办法,通过定义的处理办法来完成用户的操作命令,实现用户的计算要求,这些计算要求包括了数值的输入,小数点的输入,正负号的输入,记忆相关功能的完成,加、减、乘、除等各种计算功能的完成,运算符的替换,初始化系统等等。
计算器的特殊功能键列表5-1
按键监听同时监听了触屏上的按键和键盘上的按键,其中按键的监听使用了的松开为判断的标准,即用户松开按键的时候程序才会读取数据。
计算模块是整个系统的主体部分。
4.计算器模板设计
布局效果图:
五.计算器演示
6+3=?(进行运算时自动把结果转换成double 型)
6-2=?
6*2=?
6/2=?
9的平方?
16开方?
这次项目android计算器项目设计是在eclipse平台下设计,到现在为止,该系统的功能基本符合了普通计算器的要求,整个系统界面简单明了,使用起来十分方便,具有普通计算器的基本功能,同时拓展了一些普通计算器上没有的部分科学计算功能。
在整个开发过程中,从需求分析到总体架构的构思,到最后代码的编写我投入了大量的时间和精力,对系统中的每个功能都进行了反复的调试,修改。
因为这是我是第一次系统性的进行软件的开发,不论是在知识层面、开发平台的使用层面还是经验方面都有着很大的欠缺和不足,因此本软件难免会有一些功能不完善、界面不美观等一些不尽如人意的地方,但是再短短一个星期的时间内,我已经进行了很大的努力。
通过这个android计算器项目设计,我不经巩固了我们在书本上学到和平时老师传授的知识,而且还学到了许多书本上学不到的知识,并运用了网络这个平台查询一些不明白的知识点。
指导老师在我软件代码编写和后期软件调试期间,给我很大的帮助。
要谢谢各位帮过我的老师和同学。
这次的实验让我对我的学过的知识有了深一步的了解。
1:src\ymq\demo03目录
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 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;
}
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(yout.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<ch1.length;i++)
if(ch1[i]=='.')
x++;
if(x==0){
str+=".";
et.setText(str);
}
}
}
});
}
}
2:res\layout\main.xml 文件,代码如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:background="#ff808080"
xmlns:android="/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:layout_gravity="center_vertical"
android:id="@+id/zhengfu">
<EditText
android:text="皖西计算器"
android:id="@+id/textView1"
android:textSize="25sp"
android:textColor="#000000"
android:layout_gravity="center"
android:gravity="left"
android:cursorVisible="false"
android:editable = "false"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:layout_marginLeft="4dip"
android:layout_marginRight="4dip"
android:layout_marginTop="4dip"
android:layout_weight="1.5">
</EditText>
<TableLayout
android:id="@+id/tablelayout" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_margin="4dip" android:layout_weight="10">
<LinearLayout
android:id="@+id/linearlayout02" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1">
<Button
android:layout_width="50dip"
android:layout_height="fill_parent"
android:layout_weight="1"
android:textSize="25sp"
android:id="@+id/buttonc"
android:text="@string/shan">
</Button>
<Button
android:layout_width="50dip"
android:layout_height="fill_parent"
android:layout_weight="1"
android:textSize="25sp"
android:id="@+id/buttonce"
android:text="@string/shanchu">
</Button>
</LinearLayout>
<TableRow
android:id="@+id/row0"
android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1">
<Button
android:id="@+id/button1"
android:layout_width="40dip"
android:layout_height="fill_parent"
android:layout_weight="1"
android:text="@string/one"
android:textSize="25sp" />
<Button
android:id="@+id/button2"
android:layout_width="40dip"
android:layout_height="fill_parent"
android:layout_weight="1"
android:text="@string/two"
android:textSize="25sp" />
<Button
android:id="@+id/button3"
android:layout_width="40dip"
android:layout_height="fill_parent"
android:layout_weight="1"
android:text="@string/three"
android:textSize="25sp" />
<Button
android:layout_width="40dip"
android:layout_height="fill_parent"
android:layout_weight="1"
android:textSize="25sp"
android:text="@string/jia"
android:id="@+id/button01">
</Button>
</TableRow>
<TableRow
android:id="@+id/row1"
android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1">
<Button
android:id="@+id/button4"
android:layout_width="40dip"
android:layout_height="fill_parent"
android:layout_weight="1"
android:text="@string/fore"
android:textSize="25sp" />
<Button
android:id="@+id/button5"
android:layout_width="40dip"
android:layout_height="fill_parent"
android:layout_weight="1"
android:text="@string/five"
android:textSize="25sp" />
<Button
android:id="@+id/button6"
android:layout_width="40dip"
android:layout_height="fill_parent"
android:layout_weight="1"
android:text="@string/six"
android:textSize="25sp" />
<Button
android:layout_width="40dip"
android:layout_height="fill_parent"
android:layout_weight="1"
android:textSize="25sp"
android:text="@string/jian"
android:id="@+id/button02">
</Button>
</TableRow>
<TableRow
android:id="@+id/row2"
android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1">
<Button
android:id="@+id/button7"
android:layout_width="40dip"
android:layout_height="fill_parent"
android:layout_weight="1"
android:text="@string/seven"
android:textSize="25sp" />
<Button
android:id="@+id/button8"
android:layout_width="40dip"
android:layout_height="fill_parent"
android:layout_weight="1"
android:text="@string/eight"
android:textSize="25sp" />
<Button
android:id="@+id/button9"
android:layout_width="40dip"
android:layout_height="fill_parent"
android:layout_weight="1"
android:text="@string/nine"
android:textSize="25sp" />
<Button
android:id="@+id/button03"
android:layout_width="40dip"
android:layout_height="fill_parent"
android:layout_weight="1"
android:text="@string/cheng"
android:textSize="25sp" />
</TableRow>
<TableRow
android:id="@+id/row3"
android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1">
<Button
android:layout_width="40dip"
android:layout_height="fill_parent"
android:layout_weight="1"
android:textSize="25sp"
android:text="@string/zero"
android:id="@+id/button0">
</Button>
<Button
android:layout_width="40dip"
android:layout_height="fill_parent"
android:layout_weight="1"
android:textSize="25sp"
android:id="@+id/button06"
android:text="@string/dihao">
</Button>
<Button
android:layout_width="40dip"
android:layout_height="fill_parent"
android:layout_weight="1"
android:textSize="25sp"
android:text="@string/dengyu"
android:id="@+id/button05">
</Button>
<Button
android:layout_width="40dip"
android:layout_height="fill_parent"
android:layout_weight="1"
android:textSize="25sp"
android:text="@string/chu"
android:id="@+id/button04">
</Button>
</TableRow>
<LinearLayout
android:id="@+id/tableRow1"
android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal"
android:layout_weight="1">
<Button
android:textSize="25sp"
android:layout_height="fill_parent"
android:layout_width="50dp"
android:layout_weight="1"
android:text="@string/zhengfu"
android:id="@+id/zheng">
</Button>
<Button
android:id="@+id/pingfang"
android:textSize="25sp"
android:layout_height="fill_parent"
android:layout_width="50dp"
android:layout_weight="1"
android:text="@string/ping">
</Button>
<Button
android:id="@+id/kaifang"
android:textSize="25sp"
android:layout_height="fill_parent"
android:layout_width="50dp"
android:layout_weight="1"
android:text="@string/kai">
</Button>
</LinearLayout>
</TableLayout>
</LinearLayout>
3:res\values\strings.xml 文件,代码如下:<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello World, deom03!</string> <string name="app_name">简单计算器</string>
<string name="one">1</string>
<string name="two">2</string>
<string name="three">3</string>
<string name="fore">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="zero">0</string>
<string name="jia">+</string>
<string name="jian">-</string>
<string name="cheng">*</string>
<string name="chu">/</string>
<string name="dengyu">=</string>
<string name="zhengfu">+/-</string>
<string name="dihao">.</string>
<string name="ping">x²</string>
<string name="kai">√x</string>
<string name="shanchu">delete</string>
<string name="shan">clear</string>
</resources>。