一、基本情况

(一)出发点

最新体能考核大纲已经出台,有评定手册,需要翻阅查找,很不方便,而且此手册一般人都见不到,如何让大家能够对自己的体能水平有所了解?如何让大家掌握自身体能素质水平?如何让大家查找自身体能短板?如何让大家提高成绩?这一系列的思考,催生出了我制作本软件的想法。

(二)构想

采用文件查询的方式,对于输入的体能结果进行查询,并返回分数,做出评判。

二、具体实现

主要是三个界面两个类的实现以及数据文件的存储。如图:

(一)主界面

其界面如下图所示:

主界面的设计没有什么技术含量,能提一提的就是SPINNER及其ADAPTER与LISTENER了,通过侦听来实现更换TEXTVIEW内容。然后是清除和确定按钮的LISTENER的实现了。因为TEXTVIEW会变,所以每一个EDITTEXT里的成绩在不同SPINNER状态下代表不同含义,具有多态性。在算分数时,我通过传递参数的改变实现了不同科目的计算。

(二)帮助界面

其界面如下:

帮助界面在用户首次使用时会弹出,点击以后不再提示后每次启动都不会再弹出,当然在菜单里面仍能把它找回来。 主要是WEBVIEW控件,提前用HTML写好文件放入assets/,WEBVIEW本地读取就能够很好的显示了。
需要重点提的是:如何实现首次开启提醒?我在MainActivity里面新建了一个Intent,通过在SharedPreferences查询标志位是否为TRUE来决定是否在MainActivity中启动HelpActivity。如果点击了以后不再显示,则把这个标志位变成false值写进SharedPreferences。最后是它的显示主题,我采用继承dialog的方式。

(三)关于界面

如图:

设计很简单,只提一提反馈按钮。它的功能是给我发邮件。只需要一个Intent类就可以,主要是请求Android的邮件服务,在网上可以查到方法,所以说java很强大。

(四)自定义Calculator类

它的功能就是传递一个经过原始数据给它,然后去/res/raw下查询对应项目的分数标准然后返回。也是一样把传递过来的参数转换一下就能够去提前定义好的文件ID数组取相应的文件地址然后读取相应的数据,这样用“地址数组”就解决了多态的问题。

(五)自定义UnoData类

它是把原始数据转换成对应文件中相同进制数据的类。比如我输入的原始数据是11:20,它既可以代表11分20秒,也可以代表11秒20,一个是60进制,一个是100进制。这在内插时对于成绩有影响,所以对于不同项目,我会选择让原始数据转换成不同进制的数。

三、好的方面

(一)定义常量数组,对文件地址的查询就转化为对数组的查询,实现了一个语句的多态性,压缩了代码量。
(二)统一了数据格式。同样是减少了代码量,不用根据不同项目去写相应的处理函数(但也正是这个原因,导致了不同项目耦合性增加,影响了编写速度,增加了复杂性)。

四、不足之处

(一)耦合性过大。正如上文所说,代码量和耦合性不可兼得,代码量小了势必会增加各种各样的标志位,导致代码难以读懂。我应该针对不同项目编写不同的类,每个类里面编写相应的处理函数,最后再抽象出一个接口来实现多态,代码量大点,但结构简单,容错性好。
(二)文件存储方式不好。具体体现在我是按照项目内容对文件作以命名的,这就导致了一个人考核多项课目就需要对多个文件进行读取,每次都是读取其中的一小段,而文件读取操作是个耗时操作。其实,如果一开始考虑到这种问题,我就会按年龄、性别对文件作以命名了,这样只用通过一个文件就能把所有课目成绩都算出来了。这样的时间效率是可观的。

五、体会

  • 每一次编程都是一次学习的过程,因为有了新想法,所以需要不停地去学习、实现,编程的迭代模型在我的一次次实践中,体会越来越深刻。所以我们编程需要耐心和毅力,因为一次次的修改都是对前期的批判,但只有批判才能更好,如果没有一颗追求更好的心,那会是一种煎熬。
  • 编程重点不是代码,而是其背后的思想,这包括顶层设计、数据结构、设计模式等等。

鸣谢:感谢每一个支持我的朋友!