admin 管理员组

文章数量: 887021


2023年12月25日发(作者:微软 xhtml)

课 程 实 训 报 告

课程名称 计算机系统综合实训

课题名称 电子计算器

专 业 计算机科学与技术

班 级

学 号

姓 名

指导教师 陈华光 黄鲲

2013年 12 月 24 日

湖南工程学院

课 程 实 训 任 务 书

课程名称 计算机系统综合实训

课 题

基于Android的电子计算器

专业班级

学生姓名

学 号

指导老师 陈华光 黄鲲

审 批

任务书下达日期 2013 年 12 月 4 日

任务完成日期 2013 年 12 月 24 日

目录

一、设计内容和设计要求 1

1.设计内容 1

2.设计内容 1

二、需求分析 2

1. 状态定义 2

2. 计算器功能 3

三、总体设计 6

1.软件设计结构图 6

2.程序设计流程图 7

四、模板设计 8

1.计算模块详细设计 8

2.用户模型设计 8

3.计算模板设计的实现 9

4. 计算器模板设计 10

五、程序调试与运行截图 11

六、总结 12

七、附录 13

一、设计内容与设计要求

1.设计内容:

通过计算器实现简单的加减乘除的运算计算器。在手机屏幕上设计一个计算器,有10个数字1,2,3,4,5,6,7,8,9,0和4个运算+,-,*,/等基本按钮,还包括和清除按钮和显示结果的文本框,实现加、减、乘、除四个简单的运算。并有清除功能。

2.设计要求:

(1)论述课题的性质、内容以及本次课程实训的目的和要求。

(2)系统对计算机软、硬件环境的基本要求,对JAVA或Android应用程序作简要的说明。

(3)界面设计和游戏操作设计:界面要求美观和友好(可使用图片资源文件),使用手机键盘上的4个方向键控制方向,按照手机上的操作习惯进行设计。

(4)核心数据结构设计:主要是界面控制信息和逻辑控制信息。

(5)编写代码、上机输入、调试、修改并运行通过。

(6) 编写实训说明书。说明书是总结性的技术文件,应全面叙述整个设计的内容及过程(可参考上述5条),发现的问题及解决方法等。

(7)源代码和参考书目应作为说明书的附录。

(8)说明书应采用A4纸张,文字说明不少于4000字。说明书中应包括系统结构示意图。

1

二、需求分析

目前手机可以说是普及率非常高的电子设备了,由于其便于携带,使用方便,资费适中等等原因,现在手机已经在一定程度开始代替固定电话的通话功能,以及一些原来电脑软件上的功能了。手机上的软件也随着手机的发展变得丰富起来了,时至今日已经出现了很多专门制作手机软件的公司,虽然制作的多是游戏软件,但是一些辅助性的工具软件也有了很多。如电子计算器,此类计算器以软件存在, 能在PC电脑或者智能手机, 平板电脑上使用。它功能多, 功能可以通过软件升级进行扩展。随着平板与智能手机有普及, 软件形式的计算器的应用会越来越多, 最终有望取代传统的手持式计算器。

1.状态定义

能满足基本的数学运算,具体要求如下:

(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

2.计算器功能列表

状操作

键入数字键,如1

清零

键入除减号键和数字键以忽略键入的键,仍保留清零状态

外的键

显示新操作数,新操作数=当前操作数*10+键入数字键

键入的数字

显示新操作数,新操作数=当前操作数除以键入回退键

10取整

一个操作数

清屏键

键入清零(任何状态下,键入清零键都会到清零状清零

态下,以下的状态不再重复)

一个操作数

仍显示操作数,跳转到状态“一个操作数和键入加减乘除中任意键

一个两元符号”

符号

键入开方键

键入=键

和操作数,如“-32”

一个操作用新操作符替换原操作符,如当前是“30+”,数和键入加减乘除之一

接着键入“÷”则变为“30÷”

符号

和一个两元键入% 忽略,不做任何处理

一个操作数和一个两元符号

一个操作数对操作数执行开方运算,显示运算结果

显示操作数,如果操作数为负数,显示负号运算结果

运算结果

和一个两元清零

显示0,但操作数不变 一个操作数

一个操作数

一个操作数

清零

键入减号键

显示键入的数字,操作数=键入的数字

相当于键入了-0,但负号不显示,只显示0。

一个操作数

一个操作数

计算器响应 结果状态

3

一个两元符号

键入回退键

键入=

如果操作符为加法,则加0,显示结果;如果操作符为减法,显示为负数;如果操作符为乘法,显示为第一个操作数相乘,如键入12*=,结果为144;如果键入为除法,结果为1。

第一个操作数回退一位,操作符保持不变,一个操作数如:123+,键入回退键后显示12,操作符仍然为+

执行开方操作,操作符保持不变;例如:当键入开方键

前是“9+”,键入开方键则显示3。

操作数2元键入的为第二个操作数,例如:当前是“9键入数字键、小数点

+”,键入8,显示为8

结果作为一个操作数,例如:当前是“45”,一个操作数键入加减乘除中任意键 键入*,显示仍然是45,操作符是*,将执行乘法。

清除结果,键入的数值作为新的操作数;例和一个两元符号

操作符操作运算结果

和一个两元符号

运算结果

运算结果

键入数字和小数点 如当前是“16开方”后的运算结果,显示是“4”;键入56,显示“56”。

显示结果。如:当前是“16+开方”后的运算结果,键入=,显示的结果为20。执行16+16一个操作数

键入%、=键

开方的运算;当前显示的结果9,或者任意其它值,输入%,运算结果显示“0”。

键入开方键

键入回退键

退键,显示“12”。

操作数2键入加减乘除中任意键

先执行前面的计算,显示结果并记下下一个操作符;例如:起始状态键入的是12*6,然后键入+,则显示72

运算结果再执行开方运算

结果回退一位,如当前显示“123”,键入回运算结果

运算结果

运算结果

一个操作数和一个两元符号

4

元操作符键入=

操作数

键入数字键、回退键、小键入%

例如输入:12+3%,结果0.36; 12-3%,结果0.36; 12*3%,结果0.36;

12÷3%,结果0.36;一律按照乘法计算。

执行运算,得出结果。例如当前是键入了运算结果

“1+2”,再键入“=”,显示“3”。

操作数2元等待键入第二个操作数完毕

数点键

操作符操作运算结果

操作数2元开方键 第二个操作数开方 操作符运算结果

操作符为除号,第二个操不正确的运算

作数为0;负数开方

忽略开方步骤,直接进行操作数与键入数字操作数2元操作符运算结果

键入加减乘除中任意键

方,键入+得到15+。

符号

操作数2元

键入开方、回退键 运算结果再次执行开方或者回退 操作符运算结果

键入%

再键入%结果0.36;12÷9开方,再键入%结果0.36;一律按照乘法计算。

一个操作数得到运算结果,并记忆操作符;例如12+9开和一个两元键入=

=3,再12+3=15; 12*64开方=,结果96。

例如输入:12+9开方,再键入%结果0.36;12-9开方,再键入%结果0.36;12*9开方,运算结果

键入数字键、小数点键 进行操作符的运算。例如:4+9开方32结果为36;5-9开方65结果为-60。

计算结果。例如:12+9开方=,先计算9开方运算结果

操作数2元操作符操作数

错误

5

三、总体设计

1. 软件设计结构图

计算器

基本加减乘除运算

其他运算

加法 减法 乘法 除法 开方运算

*2运算 正负运算

清除运算

本计算器主要可以实现基本的加减乘运算和其他的一些运算。包括:加法运算,减法运算,乘法运算,除法运算。其他运算包括开方运算,*2运算,正负运算,清除运算等。

6

2.程序流程设计图

开始

系统重置

监听用户按键输入

判断是否是清零操作

判断是否需要结算结果

按用户要求进行计算

在显示区显示结果

运行程序后系统开始监听用户的按键输入,每次输入系统都会判断一次用户输入的类型,是数字还是运算符号或者是清除,判断完后分成不同类型如数字,符号,基本运算等等进行进一步的处理,根据用户的要求继续进行下一步的操作,最后计算出最终结果并显示在显示区。

7

四、模板设计

1.计算模块详细设计

系统要完成整个的计算器的计算功能,那么计算模块就是整个系统的重点模块。没有计算模块系统就不能顺利的完成计算,就无法达到用户的要求。所以计算模块的设计也是本次系统设计中的重点。

系统想要能在屏幕上显示出计算器的样子要有整体的布局,在本模块中要完成布局的具体设计,使用户能够看到整个计算器的画面。同时系统想完成计算功能必须要处理用户的输入,当输入模块的监听传到计算模块中时,计算模块就要根据相应的方法进行进一步的处理。这部分主要是对输入进行的逻辑判断,基本会通过if else来实现逻辑判断。

计算模块

整体布局 逻辑判断

运算输入判断 数值输入判断

普通运算 其他运算

开方运算 *2运算 正负运算 清零运算

2.用户界面设计

电子计算器界面设计应该尽量简洁而美观,应该具有良好的交互性。当然,我们每个人可以根据自己的喜好来进行设计,根据我个人的喜好,我最终设计出来的计算器界面如图4-7所示:

8

从上图中,我们可以很直观的看到,从上到下分别是:显示模块、输入模块、计算模块。

(1)输入模块,主要描述了计算器键盘以及键盘的监听即主要负责读取用户的键盘输入以及响应触屏的按键,当用户点击按键或者屏幕的时候监听器会去调用相应的处理办法,具体的处理办法会在相关的地方进行说明。在本项目中,在触屏上提供了各种功能的按键,分别是C,0,1,2,3,4,5,6,7,8,9,+,-,×,÷,=,delete, clear,+/-,√x,x²。

(2)显示模块,主要描述了计算器的显示区,即该区域用于显示用户输入的数据以及最终的计算结果和一些其她信息。

3.计算模块设计的实现

计算模块则主要描述了计算器的整体,实现了计算器的界面,定义了用户单击的处理办法,通过定义的处理办法来完成用户的操作命令,实现用户的计算要求,这些计算要求包括了数值的输入,小数点的输入,正负号的输入,记忆相关功能的完成,加、减、乘、除等各种计算功能的完成,运算符的替换,初始化系统等等。

9

计算器的特殊功能键列表5-1

按键名称

clear

delete

按键功能

计算清零键,重新开始计算

本次输入清零键,按下后可以重输入本次数据

按键监听同时监听了触屏上的按键和键盘上的按键,其中按键的监听使用了的松开为判断的标准,即用户松开按键的时候程序才会读取数据。计算模块是整个系统的主体部分。

4.计算器模板设计

布局效果图:

10

五、程序调试与运行截图

(1)6+3=?(进行运算时自动把结果转换成double型)截图如下:

(2)6-2=?

(3)6*2=?

(4)6/2=?

11

六、总结

这次项目android计算器项目设计是在eclipse平台下设计,到现在为止,该系统的功能基本符合了普通计算器的要求,整个系统界面简单明了,使用起来十分方便,具有普通计算器的基本功能,同时拓展了一些普通计算器上没有的部分科学计算功能。在整个开发过程中,从需求分析到总体架构的构思,到最后代码的编写我投入了大量的时间和精力,对系统中的每个功能都进行了反复的调试,修改。因为这是我是第一次系统性的进行软件的开发,不论是在知识层面、开发平台的使用层面还是经验方面都有着很大的欠缺和不足,因此本软件难免会有一些功能不完善、界面不美观等一些不尽如人意的地方,但是再短短一个星期的时间内,我已经进行了很大的努力。

通过这个android计算器项目设计,我不经巩固了我们在书本上学到和平时老师传授的知识,而且还学到了许多书本上学不到的知识,并运用了网络这个平台查询一些不明白的知识点。指导老师在我软件代码编写和后期软件调试期间,给我很大的帮助。要谢谢各位帮过我的老师和同学。这次的实验让我对我的学过的知识有了深一步的了解。

12

七、附录

1:srcymqdemo03目录

package 03;

import ty;

import ;

import .*;

import .*;

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) {

te(savedInstanceState);

setContentView();

//获得按键

final Button number[]=new Button[10];

final Button fuhao[]=new Button[11];

fuhao[0]=(Button)findViewById(01);

fuhao[1]=(Button)findViewById(02);

fuhao[2]=(Button)findViewById(03);

fuhao[3]=(Button)findViewById(04);

fuhao[4]=(Button)findViewById(05);

fuhao[5]=(Button)findViewById(06);

fuhao[6]=(Button)findViewById(ce);

fuhao[7]=(Button)findViewById(c);

fuhao[8]=(Button)findViewById();

fuhao[9]=(Button)findViewById(g);

13

fuhao[10]=(Button)findViewById(ng);

number[0]=(Button)findViewById(0);

number[1]=(Button)findViewById(1);

number[2]=(Button)findViewById(2);

number[3]=(Button)findViewById(3);

number[4]=(Button)findViewById(4);

number[5]=(Button)findViewById(5);

number[6]=(Button)findViewById(6);

number[7]=(Button)findViewById(7);

number[8]=(Button)findViewById(8);

number[9]=(Button)findViewById(9);

et=(EditText) findViewById(ew1);

t(str);

fuhao[6].setOnClickListener(new kListener() {

public void onClick(View v) {

// TODO Auto-generated method stub

str="";

t(str);

vi=v;

}

});

fuhao[7].setOnClickListener(new kListener() {

public void onClick(View v) {

// TODO Auto-generated method stub

b=0.0;c=0;g=0.0;

str="";

t(str);

}

});

fuhao[8].setOnClickListener(new kListener() {

public void onClick(View v) {

// TODO Auto-generated method stub

if(vi!=fuhao[5]&&str!=""){

char ch=(0);

if(ch=='-')

14

str=e("-","");

else

str="-"+str;

t(str);

}

}

});

fuhao[9].setOnClickListener(new kListener() {

public void onClick(View v) {

// TODO Auto-generated method stub

if(str!=""){

double a=ouble(str);

str=(a)+"";

t(str);

}}

});

fuhao[10].setOnClickListener(new kListener() {

public void onClick(View v) {

// TODO Auto-generated method stub

if(str!=""){

double a=ouble(str);

str=""+a*a;

t(str);

}}

});

//设定数字按键

number[0].setOnClickListener(new kListener() {

public void onClick(View v) {

// TODO Auto-generated method stub

if(flag==1){

str="";

str+=0;

t(str);

flag=0;

}

else{

char ch1[];

ch1=Array();

15

if(!(==1&&ch1[0]=='0'))

{str+=0;

t(str);}

}

vi=v;

}

});

number[1].setOnClickListener(new kListener() {

public void onClick(View v) {

// TODO Auto-generated method stub

if(flag==1){

str="";

str+=1;

t(str);

flag=0;

}

else{

str+=1;

t(str);

}

vi=v;

}

});

number[2].setOnClickListener(new kListener() {

public void onClick(View v) {

// TODO Auto-generated method stub

if(flag==1){

str="";

str+=2;

t(str);

flag=0;

}

else{

str+=2;

t(str);

}

vi=v;

}

});

16

number[3].setOnClickListener(new kListener() {

public void onClick(View v) {

// TODO Auto-generated method stub

if(flag==1){

str="";

str+=3;

t(str);

flag=0;

}

else{

str+=3;

t(str);

}

vi=v;

}

});

number[4].setOnClickListener(new kListener() {

public void onClick(View v) {

// TODO Auto-generated method stub

if(flag==1){

str="";

str+=4;

t(str);

flag=0;

}

else{

str+=4;

t(str);

}

vi=v;

}

});

number[5].setOnClickListener(new kListener() {

public void onClick(View v) {

// TODO Auto-generated method stub

if(flag==1){

str="";

str+=5;

t(str);

flag=0;

}

17

else{

str+=5;

t(str);

}

vi=v;

}

});

number[6].setOnClickListener(new kListener() {

public void onClick(View v) {

// TODO Auto-generated method stub

if(flag==1){

str="";

str+=6;

t(str);

flag=0;

}

else{

str+=6;

t(str);

}

vi=v;

}

});

number[7].setOnClickListener(new kListener() {

public void onClick(View v) {

// TODO Auto-generated method stub

if(flag==1){

str="";

str+=7;

t(str);

flag=0;

}

else{

str+=7;

t(str);

}

vi=v;

}

});

number[8].setOnClickListener(new kListener() {

public void onClick(View v) {

18

// TODO Auto-generated method stub

if(flag==1){

str="";

str+=8;

t(str);

flag=0;

}

else{

str+=8;

t(str);

}

vi=v;

}

});

number[9].setOnClickListener(new kListener() {

public void onClick(View v) {

// TODO Auto-generated method stub

if(flag==1){

str="";

str+=9;

t(str);

flag=0;

}

else{

str+=9;

t(str);

}

vi=v;

}

});

//设定符号键

//加

fuhao[0].setOnClickListener(new kListener() {

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;

}

19

else{

g=ouble(str);

calculater();

str=""+f;

t(str);

c=1;

flag=1;

vi=v;

}}

}

});

//减

fuhao[1].setOnClickListener(new kListener() {

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=ouble(str);

calculater();

str=""+f;

t(str);

c=2;

flag=1;

vi=v;

}}

}

});

//乘

fuhao[2].setOnClickListener(new kListener() {

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=ouble(str);

calculater();

str=""+f;

20

t(str);

c=3;

flag=1;

vi=v;

}}

}

});

//除

fuhao[3].setOnClickListener(new kListener() {

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=ouble(str);

calculater();

str=""+f;

t(str);

c=4;

flag=1;

vi=v;

}}

}

});

//等号

fuhao[4].setOnClickListener(new kListener() {

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=ouble(str);

calculater();

str=""+f;

t(str);

flag=1;

vi=v;

}

}

});

//小数点

21

fuhao[5].setOnClickListener(new kListener() {

public void onClick(View v) {

// TODO Auto-generated method stub

if(str==""){

str+=".";

t(str);

}

else{

char ch1[];int x=0;

ch1=Array();

for(int i=0;i<;i++)

if(ch1[i]=='.')

x++;

if(x==0){

str+=".";

t(str);

}

}

}

});

}

}

2: 文件,代码如下:

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">

android:text="工程计算器"

android:id="@+id/textView1"

android:textSize="25sp"

android:textColor="#000000"

android:layout_gravity="center"

android:gravity="left"

android:cursorVisible="false"

22

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">

android:id="@+id/tablelayout"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_margin="4dip"

android:layout_weight="10">

android:id="@+id/linearlayout02"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_weight="1">

android:id="@+id/row0"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:layout_weight="1">

android:id="@+id/row1"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:layout_weight="1">

android:id="@+id/row2"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:layout_weight="1">

android:id="@+id/tableRow1"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:orientation="horizontal"

android:layout_weight="1">

3: 文件,代码如下:

Hello World, deom03!

简单计算器

1

27

2

3

4

5

6

7

8

9

0

+

-

*

/

=

+/-

.

√x

delete

clear

28


本文标签: 运算 计算器 设计 计算