Shvoong首页 > 报纸 > 中国 > 手机版《英国家庭帐目统计系统》

.

手机版《英国家庭帐目统计系统》

Summary rating: 1 stars 1 评论
Review by : beta41
浏览次数 : 166  词语: 900   出版日期: 二月 03, 2007
接续去年用Excel+VBA做的《家庭帐务系统》, 今年换了一个思路,想把这个程序移植到手机上,这样有助于随手记录账目,在实现原有功能的同时,避免成天对着电脑。其实这样的程序应用于一个小小的临时家 庭帐目平衡,意义并没有多大,关键是想实现这么一种思想。事实上,懂得基本面向对象编程的人,都可以立刻给手机编写程序。和上一篇一样,本日志是站在一个 经验总结和介绍的角度写的,程序也只是编着玩的,抛砖引玉,高手见笑。一、技术解释嵌入手机的 程序设计,大体上可以分成两种思路,两种截然相反的思路。一种是直接法,就是对手机芯片进行 嵌入式编程。手机的芯片是由一个或几个单片机组成的,只要用汇编语言或者C语言,针对这个单片机的结构、内存寄存器、各种采集设备(计数器、ADC转换器等)、指令集进行编程,然后再把汇编后的程序下载到芯片的可写存储器上,就可以了。这样做的好处是,由于设计的程序是直接汇编的,没有中间转译,所以 速度极快,不浪费芯片时钟周期,而且可以应用到手机的全部功能,总结来说就是“因地制宜”。然而,这种方法要查到相关的手册和指令集,下载到相关的仿真软 件库,更重要的是需要有手机的写卡器(一般是购买针对某种芯片的开发套件,比如三星某款手机使 用的是ARM某系列的单片机作为芯片,就购买相应芯片的开发套件),然后拆开手机取出芯片写 卡。一则成本昂贵,二则有一定危险性,一般为手机厂商内部的专业开发人员使用,不适合于用户级别的开发。另一种经典的方法是间接法,就是运用高级语言进行系统无关的上层平台编程,然后把程序下载到手机里。然后通过手机里原有的这种语言的解释器来解释程序和执行 程序。这样做的缺点是速度比较慢,但它实现了跨平台编程,也就是说我为三星手机编的程序,爱立 信也能用,而且一定能用,甚至连DVD机也能用(只要同样有该语言的运行机)。这里的“该语言”,目前比较通用的是JAVAME。平常我们说的手机里运行的JAVA程序就是运用这种JAVA ME技术写成的。实际上,很多初涉JAVA的人,容易对JAVA产生误解。这个编程语言,在某 种意义上技术的成分要远高于语言本身。JAVA在技术上具有跨平台特性,所以广义上说不是P C或者Windows这样单设备或单操作系统上用的语言。JAVA目前比较普遍的有三个版本JAVAEE(企业版)、SE(标准版,包括网络端使用的Applet小程序)、ME(小型版),但其实严格上很难这样划分,只是一种语言套上了不同的库支持,运行在不同环境下而已。JAVAME所对应的是简版的JAVA运行机KVM(Kilo-bytes Virtual Machine),相比于电脑上用的JRE和JVM,KVM简化了很多的库,从面向对象角度就 是继承了几个基本类,重载了一些类以引入较少的特性。简单的举例说,电脑上可以进行复杂的浮 点运算,可是手机上就不可以(或者可能不可以),KVM出于安全考虑,统一取消了浮点数,也 就是说这个程序中所有小数运算,都要用整数运算绕着弯子来解决。再比如KVM增加了对触摸设 备的事件响应支持,来为那些PDA之类有手写笔的设备提供方便;但KVM对屏幕像素支持比P C小得多,屏幕的框架和布局也不可能像PC上那样复杂(JAVA用相对的布局管理器定位,取 代了传统的绝对定位,达到对不同屏幕设备都能支持的跨平台编程,比如以前Map0模式下的的 X=0,Y=0,也就是左上角,在JAVA中变成了屏幕的NorthWest,即西北方)。 当然,根据设备不同,KVM也有不同的版本,这个程序用的是最底层、最通用的,可以用在最破最烂的支持JAVA的手机上的那种KVM,向上兼容。JAVAME的一个经典的实现方法是编写一个继承于MIDLet的类,就像所有学过JAVA标准版的人 学的Applet类一样的继承。这个MIDLet类要实现的也无非是那么几个方法,启动St artApp(),暂停Pause(),销毁destroy()。套上ActionListener就可以支持各种动作了。JAVAME有两种典型的界面访问模式,分别是只能访问控件的高级屏幕访问模式,和可以访问具体位置的 低级屏幕访问模式。其中,高级访问模式适合于标准的屏幕、对话框等的制作,很方便;低级访问 模式麻烦一些,可以用来开发手机游戏。这个程序中,两种模式都涉及了一些。总结来说,用JAVAME编程,就是写一个继承特殊的MIDLet的JAVA程序,然后下载到有JAVA ME运行环境支持的手机(现在的手机几乎全都有),然后一劳永逸地使用。一般说来,除了界面的安排和解释会有所不同外,基本上这些程序都是所有手机通用的。二、设计思路JAVA ME的设计,我认为可以用一种“以屏幕分类”的方式。怎么说呢?我们知道,手机每个程序都是由 一个一个的窗口(屏幕)组成的。比如开始向你询问密码的密码屏幕,主菜单屏幕,次级菜单屏幕 ,功能屏幕甲乙丙丁等等等等。而JAVA语言又是典型的面向对象,由一个一个类组成。那么, 对简单的程序,可以每一个屏幕单独列为一个类。屏幕可以继承一些控件的类,这样比较容易实现 。比如主菜单屏幕就可以继承列表类,因为它实际上就是一个列表。以这个家庭帐目程序为例,我 把第一个屏幕(也就是入口屏幕,由这个屏幕继承MIDLet,作为主实现)设置为密码屏幕, 主要负责介绍一些程序的标题什么的,然后就是输入和验证密码。此后进入主菜单屏幕,继承列表 。菜单有三项,分别是输入、统计和图表,分别进入相应的屏幕,也就是调用相应类的类。在这里,屏幕之间的切换,实际上类似于汇编语言中的BranchCode(分支程序跳转),只不过跳转的不是内存地址,而是屏幕。方法是这样的:在每一个屏幕类的构造函数中,都设置一个参数变量,记录Parent Screen。这样上一级屏幕调用它时,就把上级屏幕的指针传递给了这个对象变量。(其实是一 种对象复制,并不是指针,因为JAVA不允许操作指针)。当调用这级屏幕时,上级屏幕就构造 这个屏幕对象,然后把屏幕显示权交给这个屏幕,自己退居后台;这个程序操作结束,或者遇到用户结束的指令(如点击OK或Cancel按钮后),就把屏幕的显示权重新交还给ParentScreen记录的父屏幕。以下一句代码为例:display.setCurrent(new editScr(recID,display,parent)程序在第一个屏幕,也就是本例的 密码屏幕类中,继承MIDLet,实现其中的三大核心方法StartApp(),Pause App(),和Destroy(),这样程序就可以运行了。然后再StartApp()中放 置文本框、按钮等等控件,实现ActionListener,设定Command监听。当O K按钮按下时,进入相应的下一个屏幕——菜单屏幕。菜单屏幕继承列表类,同样实现Actio nListener监听命令。选择了相应的选项,就进入相应的下一个屏幕。此处有三个分支。 输入屏幕,主要实现的是输入帐目记录(这个程序的功能请参看《家庭帐务程序》一文),包括选 择成员姓名、输入日期、成员消费类型,以及金额。当然还有编辑和删除记录的功能在这个屏幕中 实现,其中删除记录也分成删除一个或所有记录。所以当“增加”和“编辑”命令被选中时,就要 进入下一级屏幕——编辑屏幕。本程序使用的技巧是,把所选择的编辑条目的序号作为参数传递给 编辑屏幕,屏幕则选择相应条目的现有内容显示在屏幕相应控件里,以便修改,修改后相应记录条 被重新写入。如果点选的是“增加”,则传递“-1”,屏幕所有控件刷新,该屏幕OK返回之后,记录在最后追加一条。JAVAME的数据库,实际上是一个数据集,本质上也是一个类,只是它会被永久存在手机的ROM内存里 。和普通JAVA里的Vector向量集合几乎有着完全一样的方法和操作,应该说摆布这个简 单的数据库来记录和修改数据是不困难的。唯一麻烦的是删除,因为删除操作实际上并不是真的删 除,而是在记录上标记一个以删除的标记,然后让这个ID变得不可用。可是绝对访问的时候,I D还存在,所以之好用“遍历器”——enumerator来绕过它解决,也算是一种经典技巧 吧。不明白为什么SUN的这帮人为了一点点安全,把JAVA弄得那么麻烦。这种技巧这里是说 不完的,有兴趣看看J2ME的相关介绍,或者参考这个程序的源代码吧。统计屏幕,调用数据集 ,统计每个人的消费情况,把总消费、平均消费和平衡办法显示在屏幕上。继承的是普通的表单类 。这里要把英镑和便士的整数分别加总,然后用便士总数除以一百取余数和取整,再和英镑相加的技巧来调整二者的数值。原因还是因为JAVAME不支持浮点数,也就是小数。图表屏幕向对复杂,用到了“低级屏幕定位”方法。先调用。然后 根据屏幕宽度和高度,在屏幕上画一个饼图。不同人的部分,就用相应百分比的圆弧角度填充不同颜色表示。显示不同消费类别的图表也是同一个道理。JAVAME的低级屏幕定位比较繁琐。三、实现步骤1、如果还没有JAVA,从JAVA官方网站,下载JAVA运行集JDE,包含了开发环境;2、从JAVA官方网站,下载JAVA ME小型版的开发套件KToolbar,包含了运行机和类库。3、用Ktoolbar创建一个 应用程序工程project,比如叫Account。4、调试每个类(本例中就是每个屏幕) 的JAVA代码,存在Ktoolbar目录下的App->Account->s rc文件夹中。5、运行和仿真这个工程,成功的话你可以在屏幕上看到手机样子的仿真器,基本 上所见即所得,下载到手机上也是一样。6、用Ktoolbar中的压缩功能,把工程打包到J AR文件中。Ktoolbar可以自动按照J2ME的要求生成相应的描述文件和包。不要用别 的工具对项目进行打包,否则因为缺少合法的描述文件,劳而无功。这是我的经验,也是所有步骤 中最简单而最重要的一步。7、用手机的发送功能,把Account.JAR发送到手机里。然 后在手机里选择“应用程序”(每台手机位置不同),就可以看到并运行这个程序了。本文并没有去阐述编程的细节,因为那些过于繁琐。有兴趣可以在本站WAP空间 中下载相应源程序。这只是非常简单的一个实现,当然也是实用的。关于J2ME编程的教程类资料 ,可以在JAVA爱好者网站(在本控件左侧列表中)找到。下一次有精力时,想试试看对手机进 行芯片嵌入式编程,结合通信功能玩一玩。(“下一次”的定义:把现在这台手机用到卖都卖不了几个钱时)^_^

More reviews about the 手机版《英国家庭帐目统计系统》
请给本文打分 : 1 2 3 4 5


评论

Read Free Summaries - Write and Get Paid

Summarize Human Knowledge on Shvoong. Join us!

------