实训报告
姓 名: 赵炳琪 学 号:
专 业: 软件技术 项目名称: Android手机记账本 指导教师: 陈雪莲
实训日期:2016年10月30日至 2016年12月30日
2016年 12月 25日
Android项目开发实训记录单
学号 指导教师 项目名称 姓名 赵炳琪 陈雪莲 Android手机记账本 性别 男 收支管理模块是程序的主体功能,实现了处理用户的收入和支出的信息,进行处理后用表单的形式进行显项目描述 示,同时提供时间段的收支情况查询功能。 系统除了总体模块以外主要由三大模块来组成,即统计功能和备份功能。 项目评语 平时成绩 分项成绩 实践能力 实训报告 总成绩 等级 目 录
第一章 概述 ............................................. 1 第二章 需求分析 ........................................... 2
项目背景 .............................................. 2 项目需求 .............................................. 2 第三章 相关技术 ........................................... 4
Adnroid平台介绍 ....................................... 4 关键技术研究 .......................................... 4 第四章 概要设计 ........................................... 8
系统体系结构 ......................................... 8 用户界面设计 ........................................ 12
....................................... 错误!未定义书签。 ....................................... 错误!未定义书签。 ....................................... 错误!未定义书签。
....................................... 错误!未定义书签。
第五章 详细设计 .......................................... 12
数据输入模块 .......................................... 12 数据显示模块 .......................................... 12 数据计算功能模块 ..................................... 12 第六章 结论 .............................................. 16
第一章 概述
随着社会的发展,经济水平的提高,手机越来越普及。同时伴随着已送慧联网技术的发展,手机的功能也变得越来越丰富。从原来只具有简单通信功能的非智能手机到现在具有手机操作系统,除通话功能以外,还集上网、聊天、炒股、收发邮件等功能于一身的智能手机系统。
由Google公式牵头众多实力雄厚的软硬件厂商加盟商成立了OMS联盟,病退出的Android平台手机系统,作为时代的新生儿,Android手机操作平台有着得天独厚的优势广阔的发展前景。
而计算器作为现在人们日常生活中常用的一种工具也已经可以说是人们日常生活中必不可少的工具了。计算器的发展同样经历了漫长的过程,凝聚无数仙人的智慧,甚至连计算机的发展都可以说是源于计算器的发展。本程序正式基于Android平台开发的计算器。
本课题要求:设计一个基于Android的计算器的软件。实现的功能有: 具有基本的加、减、乘、除功能,能够判断用户输入运算数是否正确,支持小数运算,具有退格功能,能够删除最后一个输入,具有清除功能,即“C”。因为打开(ON)、关闭(OFF)屏幕按键的功能
需重点研究的关键问题:计算器的运算和显示问题。
第二章 需求分析
项目背景
随着社会的发展,经济水平的提高,手机越来越普及。同时伴随着移动互联网技术的发展,手机的功能也变得越来越丰富。从原来只具有简单通信功能的非智能手机到现在具有手机操作系统,除通话功能以外,还集上网、聊天、炒股、收发邮件等功能于一身的智能手机系统。
Java语言是当今流行的网络编程语言,它具有面向对象、跨平台、分布应用等特点。面向对象的开发方法是当今世界最流行的开发方法,它不仅具有更贴近自然的语义,而且有利于软件的维护和继承。
为了进一步巩固课堂上所学到的知识,深刻把握嵌入式系统以及Java语言的重要概念及其面向对象的特性,使我们能够熟练的应用面向对象的思想和设计方法解决实际问题的能力。
通过此次课程设计,巩固所学Java语言基本知识,增进Java语言编辑基本功,掌握JDK、Editplus、Eclipse、JCreator等开发工具的运用,拓宽常用类库的应用。使学生通过该教学环节与手段,把所学课程及相关知识加以融会贯通,全面掌握Java语言的编程思想及面向对象程序设计的方法,为今后从事实际工作打下坚实的基础。 项目需求
根据需求,符合用户的实际要求,系统应实现以下功能:计算器界面友好,方便使 用,显示到少6位结果,具有基本的加、减、乘、除功能,能够判断用户输入运算数是否正确,支持小数运算,具有退格功能,能够删除最后一个输入,具有清除功能,即“C”。因为打开(ON)、关闭(OFF)屏幕按键的功能等。如图2-1所示。
整个程序基于Android技术开发,除总体模块外主要分为输入模块、显示模块以及 计算模块这三大部分。在整个系统中总体模块控制系统的生命周期,输入模块部分负责读取用户输入的数据,显示模块部分负责显示用户之前输入的数据以及显示最终的计算结果,计算机模块部分负责进行数据的运算以及一些其他的功能。下面较为详细的做了说明。 具体的
说,总体模块的作用主要是生成应用程序的主类,控制应用程序的生命周期。 输入模块主要描述了计算器键盘以及键盘的监听即主要负责读取用户的键盘输入以及响应触屏的按键,需要监听手机动作以及用指针事件处理方法处理触屏的单击动作。同时提供了较为直观的键盘图形用户界面。 显示模块描述了计算器的显示区,即该区域用于显示用户输入的数据以及最终的计算结果,同时负责显示一些其他的信息。
计算模块则主要描述了计算器的整体,实现了计算器的界面,负责计算用户输入数 据,包括加、减、乘、除等各种功能,记忆数据的相关功能,退格以及清零的功能。 系统除了总体模块以外主要由三大模块来组成,即输入模块、显示模块和计算模块, 如图2-2所示:
输入模块主要描述了计算器键盘以及键盘的监听即主要负责读取用户的键盘输入以 及响应触屏的按键,需要监听手机按键动作以及用指针事件处理方法处理触屏的单击动作(以松开按键为准)。同时提供了较为直观的键盘图形用户界面。 显示模块描述了计算器的显示区,即该区域用于显示用户输入的数据以及最终的计 算结果,同时还负责显示一些其他的信息。 计算模块则主要描述了计算器的整体,实现了计算器的界面,负责计算用户输入数 据,包括加、减、乘、除、等各种计算功能,记忆数据的相关功能,退格以及清零的功能。
第三章 相关技术
Adnroid平台介绍
Android是Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的移动软件。可以把它简单理解成 Linux上套了一个 JAVA 的壳。 Android 的平台基本上是免费的,虽然有部份原生链接库会要求费用,但大部份是免权利金。 Android 的程序可以采用 JAVA 开发, 因为它的虚拟机(Virtual Machine) Dalvik,只是它将 JAVA 的 bytecode 转成自己的格式,回避掉需要付给 SUN 有关 JAVA 的授权费用。因此,Android 开发环境是需要 JDK 的。 1. 新建项目:打开 Eclipse,选择 File > New > Project > Android Project,具体输入如图3-1所示:
在Project name:中输入工程的名字,build target中选择所用的平台,Application name为应用程序的名称,create activity为活动类的名称,配制运行方式:
点击Run Configurations会出现图3-2的界面,然后点击androidandroid application新建一个动行方式,在右边project中输入要运行的工程名称。至此运行方式配制完成。
运击会行,便会出下如图3-3界面: 关键技术研究
每一个应用程序,我们都要设计一个图标,可以说图标是应用程序的名片,好的图标能够很快地吸引用户。在此不对图标问题做过多的介绍。
由于不同的android手机有着不同的分辨率,将不同分辨率的图标图片放置在相应位置,如图3-4所示。
drawable-hdpi中放置分辨率最高的图标,drawable-mdpi中放置分辨率中等的图标,drawable-ldpi中放置分辨率最低的图标。 图标图片大小的要求如图3-5所示:
在文件中进行修改,修改情况如下: 界面设计应该尽量简洁而美观,应该具有良好的交互性。当然,我们每个人可以根据自己的喜好来进行设计,根据我个人的喜好,我最终设计出来的计算器界面如图3-6所示: 从上图中,我们可以很直观的看到,从上到下分别是:显示模块、输入模块、计算模块。 输入模块,主要描述了计算器键盘以及键盘的监听即主要负责读取用户的键盘输入以及响应触屏的按键,当用户点击按键或者屏幕的时候监听器会去调用相应的处理办法,具体的处理办法会在相关的地方进行说明。在本项目中,在触屏上提供了各种功能的按键,分别是C,0,1,2,3,4,5,6,7,8,9,+,-,×,÷,=,ON, OFF。 在整体界面的设置中,我还为各个按键的设置中我还设置了字体的大小,字体的颜色,分别用下列语句实现: 字体大小:android:textSize=\"25dip\" 字体颜色:android:textColor = \"#7f0000\" 界面背景:android:background=\"#888FFF\" 显示模块,主要描述了计算器的显示区,即该区域用于显示用户输入的数据以及最终的计算结果和一些其他信息。显示模块还设置了显示的字体,大小,颜色,同时还设置了显示字体的颜色。具体设置如下代码: android:textSize=\"37px\" android:layout_marginBottom=\"20px\" android:layout_marginLeft=\"10px\" android:layout_marginRight=\"10px\" android:editable=\"false\" android:cursorVisible=\"false\" android:layout_weight=\"1\" /> 显示区中使用的是基于增强型的图形用户界面EditText,利用此类的功能,在显示模块中完成了以上设置。显示模块声明了这些设置,在用户使用系统的时候,会在协同布局设置一同完成以上设置,使用户在使用的时候可以直观的看到显示区的样子。 一般情况下都会选择差不多的字体,所以此处选择的字体和键盘上显示的字体其实是一样的,但是事实上系统中进行了两次声明,即逻辑上这是两种不同的字体,以及设置字符串text为空。显示区和输入模块中的表格一样,同样分别设置了最小显示以及完美显示这两种状态。然后声明了显示区的画法,画法中包括了显示区的两个矩形组成的显示框,显示框的颜色和大小以及显示框中显示的文字所使用的字体,还有文字在显示框中的位置。最后设置了计算模块中的变 量得到以及改变显示中所显示的内容的方法,当显示中的内容发生变化时,系统会运行repaint命令来重画显示区,由于使用的是比较低级的方法,所以只能通过整个显示区来实现显示更新这个命令。这样虽然和使用高级的方法相比速度上可能有点慢,但是由于时间相差的不是很多,在用户的正常使用中是不会有所感觉的。 以上就是显示模块的具体实现流程。 第四章 概要设计 系统体系结构 计算模块则主要描述了计算器的整体,实现了计算器的界面,定义了用户单击的处理办法,通过定义的处理办法来完成用户的操作命令,实现用户的计算要求,这些计算要求包括了数值的输入,小数点的输入,正负号的输入,记忆相关功能的完成,加、减、乘、除等各种计算功能的完成,运算符的替换,初始化系统等等。 按键监听同时监听了触屏上的按键和键盘上的按键,其中按键的监听使用了的松开为判断的标准,即用户松开按键的时候程序才会读取数据。计算模块是整个系统的主体部分,整个计算器功能是通过来实现的。 首先,我使用一个数组btn来分别监控十个数字键,用et_led来监控输入内容,用btn_div、btn_mul、btn_sub、btn_plus、btn_equal、btn_dot,分别来表示除法、乘法、减法、加法、等号、点号,具体实现如下代码: private Button[] btn = new Button[10]; private EditText et_led; private Button btn_div, btn_mul, btn_sub, btn_plus, btn_equal, btn_dot; 其次,对内容的操作。当有内容输入时,首先接收内容,接受的内容分为两部分:当输入为数据时,则是通过传递给数组str,根据数据的传递判断数据内容的长度,如果没有内容输入则,则通过()为0,如果有数据输入的时候,则通过()显示数据,并且将第一次输入的数据保存 predata;当输入为符号时,像“+、-、*、/、C、ON、OFF”时,然后对符号进行判断,具体实现代码如下: private OnClickListener actionPerformed = new OnClickListener() { public void onClick(View v) { String command = ((Button)v).getText().toString(); str=().toString(); if(\"Bksp\") == 0) { if() > 1) (0, () - 1)); else if() == 1) { (\"0\"); vbegin=true; } if().toString()pareTo(\"-\")==0){ (\"0\"); vbegin = true; } } else if ; } } 最后,当第二次输入数据的时候,将会数据存到temp,再根据上次输入的符号进行运算,然后将结果保存在temp,如果按键“=”,则会将将结果输出,如果是其他的符号,则会进行相应的运算。 程序结构图如下: 参照程序的流程图,设计十个Activity。分别为进入页面的Activity,选择运算的Activity,剩下八个分别为输入数据的Activity和显示运算结果的Activity,如图2。在这里应该注意的是每当创建一个新的class,就要继承Activity。需要用到public class jisuanqi extends Activity这句代码因此整理好程序的流程是关键,设计好Activity之间的Intent链接是关键。 程序所需的Activity 相应的,需要在res/layout文件夹中建立3个XML文件来对上述的十个Activity进行布局,如图4-4: 总体上所需要的Activity和XML布局文件已经建立完毕,下面开始对进入计算器的Activity进行编写,首先在布局文件中创建两个Button按钮,并且对两个按钮声明ID和布局。两个Button按钮显示为“开始计算”和“退出”如图4-5: 然后在中,首先要声明Button按钮用到如下代码: private Button button1 private Button button2 在安卓里面,用ID找控件是个非常方便的方法,使用findViewById方法来找到在XML文件中创建的对象。因此在中,同样需要使用findViewById方法来找到两个Button控件,代码如下: 接下来开始编辑第二个Activity,也就是选择运算法则的界面,本界面需要创建4个Button按钮,分别为加、减、乘、除。Id分别为button3、button4、button5、button6。 再下来以加法页面为例,在本页面当中需要创件两个EditText,一个TextView,还有一个Button按钮,TextView显示为“加上”,Button按钮显示为“计算” 三个Activity创建完成后,我们需要实现以下动作:在用户打开软件之后,点击“开始计算”,然后跳转到选择运算法则的界面,当用户点击“加”则程序进入加法界面。 由此可见,在整个动作中,需要使用侦听代码来识别用户的操作,然后使用Intent来实现Activity的切换。我们以开始界面跳转到选择运算法则界面为例:首先在“开始计算”按钮上设置侦听代码如下: (new button1Listener()); 然后开始侦听,当用户点击“开始计算”时,启动Intent来将本界面切换到选择运算法则的界面,在这里需要JAVA中侦听的方法和Intent方法,代码如下: class button1Listener implements OnClickListener{ @Override public void onClick(View v) { oString(); String FactorTwostr=().toString(); oString(); String FactorTwostr=().toString(); */ if(mass [j])||mass [j]==46) n=n+mass[j]; else { if()!=0) { (n); n=new String(\"\"); } (mass[j]); } if(j==&&()!=0) { (n); n=new String(\"\"); } } etNum()); while()>0) ().getSymbol(); BigDecimal result=calculator(numStack1,symbolStack1); String resultString=(); String s=outprocess(resultString); (s); flag5=1; } } if((Button)v==button[18]) { str=\"0\"; (str); flag0=1; flag1=0; flag2=0; flag3=0; FlagStack flagstack1=new FlagStack(); flagstack=flagstack1; (\"\"); } if((Button)v==button[19]) { String str1=\"\"; if()>1) { (); Flag flagnow=(); flag0=(); flag1=(); flag2=(); flag3=(); char[] b=(); for(int i=0;i<()-1;i++){ str1=str1+b[i]; } str=str1; (str); (flag0,flag1,flag2,flag3); } if()<=1) { flag0=0; flag1=0; flag2=0; flag3=0; FlagStack flagstack1=new FlagStack(); flagstack=flagstack1; } str=str1; (str); } if().length()>=2) { //这两句的意思是设置光标位置为字符串最后一位 Editable ea= (); (ea, ()-1); } } } } 第六章 结论 在这次实训中我不仅学习了相关的专业知识,而且让我对Android系统有了一个更加深入的了解,它也是我们计算机专业的一个新的方向并且发展很迅速,为了今后的发展我们还需不断努力学习!我国的信息产业还很落后,随着社会的发展及国家的支持,手机上网必然是社会发展的趋势,到时候手机上网将会无处不在!赚钱我对Android系统的了解只停留在应用的层次上,对于更深层次的了解是很少的,通过这次实习让我对Android系统有了一个鞥神层次的了解,同时它也使我意识到无论朝哪个方向发展,主要还是得扎实、深刻的学习,同时也得不断努力探索。 IT业的发展速度一直都是相当惊人的,不想被社会淘汰,我们就必须得不断的学习,现在的社会不再是一劳永逸,其它行业也是如此,我们必须不断的拿知识来武装自己,不然被淘汰那是肯定的!现在就业难的原因其实在于竞争的加剧,为了在竞争中取得成功,我们必须时时刻刻学习! 在Android编程过程中巩固熟悉了Java的编程。由于Android应用程序的开发离不开Java的支持,所以基础的Java知识是必须的。Android系统是基于Linux的手机操作系统平台,要深入系统的学习Android,不仅仅是有Java和Android应用开发,必须要具备Linux,C/C++高级编程才能深入的涉及Android Framework和Android内核开发。成为Android开发的高素质人才。所以,在后续对Android的学习中可能会看一些较底层的书籍。 由于这次实习时间较短,对于Android应用程序的高级编程讲的很少,是这次实习中的不足。要想开发一些好的应用程序,还需要更多的知 识支持。在做实习最后的项目时,遇到了很多平时没有遇到或者没有特别关注的问题,如常见的Activity忘记注册,对SD卡存取需要权限,在写SQL语句时细微的错误就可能导致程序运行错误。这些问题只有自己在实际开发中才能体会到并且解决,并且在解决后可以长时间的记住。 通过对java以及Android的学习,让我又学会了一门编程语言,这对于我以后的学习工作都会有很大的帮助。 回顾以前所走的路,太多的是无奈和迷茫,这次实训就像是我人生道路上的航标,为我指明了前进的方向,使我对自己的前途充满了信心,同时也知道了自己的前进方向。 因篇幅问题不能全部显示,请点此查看更多更全内容