1、本科毕业论文(20 届)基于 Android 系统的家庭理财通软件-支出模块的设计所在学院专业班级 计算机科学与技术学生姓名指导教师完成日期摘要全球经济的蓬勃发展带来了金融理财领域的巨大变革和创新,新的金融工具和理财观点不断产生,迅速地刷新着家庭与个人传统的理财观念。改革开放以来,我国社会经济的发展和居民收入水平得到了很大的提高,家庭理财活动已成为居民生活的重要内容。人们迫切需要一个能充分利用计算机优势,并可以管理家庭财务的软件平台,利用这个平台使得个人的财务有了明晰的收支情况的系统。家庭理财软件可以有效的记录和管理家庭的支出,合理规划和支配家庭资金,是家庭理财的好帮手。利用 android
2、技术,使家庭理财逐步信息化、便捷化,可以随时随地记录生活支出,有效的避免了遗漏。它更能随时随地查看,方便随时掌握家庭财务问题。使用家庭理财软件管理家庭财务,不经提高了工作效率,更能大大的提高了其安全性。家庭理财系统采用 android 作为开发环境,主要包括添加记账、我的账单、分析报表、支出科目四个模块。用户能够通过这些模块所提供的功能,完成相应的操作,满足家庭内部对家庭理财的需求。关键词:家庭理财 Android 支出 查询AbstractThe vigorous development of the global economy has brought great changes and
3、innovation in financial field, new financial instruments and financial point of view continuously, quickly refresh the traditional family and personal financial management concepts.Since the refrom and opening up ,Chinas social and economic development and peoples income level has been greatly impro
4、ved, family financial management has become an important part of life.There was an urgent need to make full use of advantages of the computer, which can manage the familys financial software platform, the platform enables the use of personal financial revenues and expenditures of the system.Family f
5、inancial management software can record and management of family expenses, reasonable planning and dominate the family money, family financial management is a good helper.The use of Android technology, the family financial management step by step information, convenient, can whenever and wherever po
6、ssible to record life expenditure, effectively avoid the omission. It can whenever and wherever possible to view, at any time convenient to master the family financial problems. The use of family financial management software, financial management of family, without improving work efficiency, can gr
7、eatly improve the safety.Family financial management system uses Android as the development environment, including adding bookkeeping, my bills, analysis report, expense account four modules.The user can use the functions provided by these modules, complete the corresponding operation, to meet the d
8、emand of family financial management within the family.Keywords: family financial Android expenses query目录1.绪论.11.1开发语言概述.11.1.1 JAVA 简介.11.1.2 JAVA 语言特点.11.1.3 JAVA 语言特性.11.2Android 概述.31.2.1 Android 简介.31.2.2 Android 系统优势.31.2.3 Android 编程环境介绍.42. 嵌入式关系型 SQLite 数据库存储数据.62.1 SQLite 简介.62.2 Andriod
9、操作 SQLlite 数据库.62.3 本程序中的 SQLlite.73.家庭理财通软件简介.84.家庭理财通软件支出模块.84.1登录模块.84.1.1登录界面.84.2主界面模块.94.2.1主界面.94.3添加记账模块.104.3.1添加记账界面.104.3.2添加记账实现代码.124.4我的账单模块.124.4.1我的账单界面.124.4.2账单列表实现代码.134.4.2.1账单列表数据库查找.134.4.2.2查看账单详情.154.4.2.3编辑账单.154.4.2.4删除账目.164.5分析报表模块.164.6 支出科目模块.174.6.1 支出科目界面.174.6.2 支出科目
10、实现代码.194.6.2.1 支出科目数据库查找.194.6.2.2 查看支出科目.194.6.2.3 删除支出科目.204.6.2.4 修改支出科目.204. 总结.215. 致谢.226. 参考文献.2211. 绪论本程序是在 Eclipse 开发环境中,运用软件工程的设计思想,进行 Android 桌面应用程序的开发。本程序的主要功能包括对个人收入及支出情况进行增、删、改、查等操作,并通过运用 Android 自带的 SQLLite 数据库进行数据的查询。1.1 开发语言概述 1.1.1 JAVA 简介Java 是由 Sun Microsystems 公司于 1995年5月推出的 Jav
11、a 面向对象程序设计语言(以下简称 Java 语言)和 Java 平台的总称。由 James Gosling 和同事们共同研发,并在1995年正式推出。用 Java 实现的 HotJava 浏览器(支持 Java applet)显示了 Java 的魅力:跨平台、动态的 Web、Internet 计算。从此,Java 被广泛接受并推动了 Web 的迅速发展,常用的浏览器均支持 Javaapplet。另一方面,Java 技术也不断更新。(2010年Oracle 公司收购了 SUN)Java 由四方面组成:Java 编程语言、Java 类文件格式、Java 虚拟机和 Java 应用程序接口(Java
12、 API)。平台Java 平台由 Java 虚拟机(Java Virtual Machine,简称 JVM)和 Java 应用编程接口(Application Programming Interface,简称 API)构成。Java 应用编程接口为 Java应用提供了一个独立于操作系统的标准接口,可分为基本部分和扩展部分。在硬件或操作系统平台上安装一个 Java 平台之后,Java 应用程序就可运行。Java 平台已经嵌入了几乎所有的操作系统。这样 Java 程序可以只编译一次,就可以在各种系统中运行。Java应用编程接口已经从1.1x 版发展到1.2版。常用的 Java 平台基于 Java1
13、.4,最近版本为Java1.7。Java 分为三个体系 J2SE(Java2 Platform Standard Edition,java 平台标准版),J2EE(Java 2 Platform,Enterprise Edition,java 平台企业版),J2ME(Java 2 Platform Micro Edition,java 平台微型版)。 1.1.2 JAVA 语言特点Java 编程语言的风格十分接近 C、C+语言。Java 是一个纯粹的面向对象的程序设计语言,它继承了 C+语言面向对象技术的核心。Java 舍弃了 C 语言中容易引起错误的指针(以引用取代) 、运算符重载(oper
14、ator overloading) 、多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming) 、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode) ,然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上
15、降低了 Java 程序的运行效率。编辑 Java 源代码可以使用任何无格式的文本编辑器,在 Windows 操作系统上可以使用记事本(Notepad) 、EditPlus 等程序,在 Linux 平台上可使用 VI 工具等。1.1.3 JAVA 语言特性21、Java 语言是简单的。Java 语言的语法与 C 语言和 C+语言很接近,使得大多数程序员很容易学习和使用 Java7。另一方面,Java 丢弃了 C+中很少使用的、很难理解的、令人迷惑的那些特性,如操作符重载、多继承、自动的强制类型转换。特别地,Java 语言不使用指针,并提供了自动的废料收集,使得程序员不必为内存管理而担忧。2、Ja
16、va 语言是面向对象的。Java 语言提供类、接口和继承等原语,为了简单起见,只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口之间的实现机制(关键字为 implements) 。Java 语言全面支持动态绑定,而 C+语言只对虚函数使用动态绑定。总之,Java 语言是一个纯的面向对象程序设计语言。3、Java 语言是分布式的。Java 语言支持 Internet 应用的开发,在基本的 Java 应用编程接口中有一个网络应用编程接口(java net) ,它提供了用于网络应用编程的类库,包括 URL、URLConnection、Socket、ServerSocket 等。Java 的
17、 RMI(远程方法激活)机制也是开发分布式应用的重要手段。4、Java 语言是健壮的。Java 的强类型机制、异常处理、垃圾的自动收集等是 Java程序健壮性的重要保证。对指针的丢弃是 Java 的明智选择。Java 的安全检查机制使得Java 更具健壮性。5、Java 语言是安全的。Java 通常被用在网络环境中,为此,Java 提供了一个安全机制以防恶意代码的攻击。除了 Java 语言具有的许多安全特性以外,Java 对通过网络下载的类具有一个安全防范机制(类 ClassLoader) ,如分配不同的名字空间以防替代本地的同名类、字节代码检查,并提供安全管理机制(类 SecurityMan
18、ager)让 Java 应用设置安全哨兵。6、Java 语言是体系结构中立的。Java 程序(后缀为 java 的文件)在 Java 平台上被编译为体系结构中立的字节码格式(后缀为 class 的文件) ,然后可以在实现这个 Java平台的任何系统中运行。这种途径适合于异构的网络环境和软件的分发。7、Java 语言是可移植的。这种可移植性来源于体系结构中立性,另外,Java 还严格规定了各个基本数据类型的长度。Java 系统本身也具有很强的可移植性,Java 编译器是用 Java 实现的,Java 的运行环境是用 ANSI C 实现的。8、Java 语言是解释型的。如前所述,Java 程序在
19、Java 平台上被编译为字节码格式,然后可以在实现这个 Java 平台的任何系统中运行。在运行时,Java 平台中的 Java 解释器对这些字节码进行解释执行,执行过程中需要的类在联接阶段被载入到运行环境中。9、Java 是高性能的。与那些解释型的高级脚本语言相比,Java 的确是高性能的。事实上,Java 的运行速度随着 JIT(Just-In-Time)编译器技术的发展越来越接近于C+。10、Java 语言是多线程的。在 Java 语言中,线程是一种特殊的对象,它必须由Thread 类或其子(孙)类来创建。通常有两种方法来创建线程:其一,使用型构为Thread(Runnable) 的构造子
20、将一个实现了 Runnable 接口的对象包装成一个线程,其二,从 Thread 类派生出子类并重写 run 方法,使用该子类创建的对象即为线程。值得注意的是 Thread 类已经实现了 Runnable 接口,因此,任何一个线程均有它的 run 方法,而 run方法中包含了线程所要运行的代码。线程的活动由一组方法来控制。Java 语言支持多个线程的同时执行,并提供多线程之间的同步机制(关键字为 synchronized) 。11、Java 语言是动态的。Java 语言的设计目标之一是适应于动态变化的环境。Java3程序需要的类能够动态地被载入到运行环境,也可以通过网络来载入所需要的类。这也有
21、利于软件的升级。另外,Java 中的类有一个运行时刻的表示,能进行运行时刻的类型检查。Java 语言的优良特性使得 Java 应用具有无比的健壮性和可靠性,这也减少了应用系统的维护费用。Java 对对象技术的全面支持和 Java 平台内嵌的 API 能缩短应用系统的开发时间并降低成本。Java 的编译一次,到处可运行的特性使得它能够提供一个随处可用的开放结构和在多平台之间传递信息的低成本方式。特别是 Java 企业应用编程接口(Java Enterprise APIs)为企业计算及电子商务应用系统提供了有关技术和丰富的类库。1.2 Android 概述1.2.1 Android 简介Andro
22、id 是一种基于 Linux 的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由 Google 公司和开放手机联盟领导及开发。Android 在正式发行之前,最开始拥有两个内部测试版本,并且以著名的机器人名称来对其进行命名,它们分别是:阿童木(AndroidBeta) ,发条机器人(Android 1.0) 。后来由于涉及到版权问题谷歌将其命名规则变更为用甜点作为它们系统版本的代号的命名方法。甜点命名法开始于 Android 1.5 发布的时候。作为每个版本代表的甜点的尺寸越变越大,然后按照 26 个字母数序:纸杯蛋糕(Android 1.5) ,甜甜圈(Android
23、 1.6) ,松饼(Android 2.0/2.1) ,冻酸奶(Android 2.2) ,姜饼(Android 2.3) ,蜂巢(Android 3.0) ,冰激凌三明治(Android 4.0) ,果冻豆(Jelly Bean,Android4.1 和Android 4.2) 。1.2.2 Android 系统优势(1)开放性 在优势方面,Android 平台首先就是其开放性,开发的平台允许任何移动终端厂商加入到 Android 联盟中来。显著的开放性可以使其拥有更多的开发者,随着用户和应用的日益丰富,一个崭新的平台也将很快走向成熟。开放性对于 Android 的发展而言,有利于积累人气,
24、这里的人气包括消费者和厂商,而对于消费者来讲,最大的受益正是丰富的软件资源。开放的平台也会带来更大竞争,如此一来,消费者将可以用更低的价位购得心仪的手机。 (2)挣脱束缚 在过去很长的一段时间,特别是在欧美地区,手机应用往往受到运营商制约,使用什么功能接入什么网络,几乎都受到运营商的控制。自从 iPhone 上市,用户可以更加方便地连接网络,运营商的制约减少。随着 EDGE、HSDPA 这些 2G 至 3G 移动网络的逐步过渡和提升,手机随意接入网络已不是运营商口中的笑谈。 (3)丰富的硬件 4这一点还是与 Android 平台的开放性相关,由于 Android 的开放性,众多的厂商会推出千奇
25、百怪,功能特色各具的多种产品。功能上的差异和特色,却不会影响到数据同步、甚至软件的兼容。好比你从诺基亚 Symbian 风格手机一下改用苹果 iPhone,同时还可将 Symbian 中优秀的软件带到 iPhone 上使用、联系人等资料更是可以方便地转移。 (4)开发商 Android 平台提供给第三方开发商一个十分宽泛、自由的环境。因此不会受到各种条条框框的阻挠,可想而知,会有多少新颖别致的软件会诞生。但也有其两面性,血腥、暴力方面的程序和游戏如何控制正是留给 Android 难题之一。 (5)无缝结合的 Google 应用如今叱诧互联网的 Google 已经走过 10 年度历史。从搜索巨人
26、到全面的互联网渗透,Google 服务如地图、邮件、搜索等已经成为连接用户和互联网的重要纽带,而 Android平台手机将无缝结合这些优秀的 Google 服务。1.2.3Android 编程环境介绍Android 编程是在 Eclipse 开发环境中进行的,其目录分类形式主要为下图:Src 程序的所有代码均放在该文件夹里,其中 view 包里是所有页面,即activity.util 里是所有工具类,model 包里是模型包,finical 里是模板包,buisness里是服务包,所有对数据库的操作都在这个包里,确定的说是 FinancialService。5Res:所有资源均放在该文件夹里,
27、例如图标、布局文件等。AndroidManifest.xml 这个独立的文件很重要,本程序所有的权限,页面文件() ,程序名称,都需要在该文件中进行声明,例如下面代码,通过使用activity 声明了程序最开始由 PreActivitiy 界面进入。Res/layout:该文件夹里放的是所有页面的 XML 布局文件。布局文件和 activity.java 文件之间的关系非常密切,一个页面肯定要有布局,一个布局里肯定有许多控件(文本框按钮等) ,java 虚拟机要想知道用户操纵了哪个控件就必须先将 activity 页面类和它对应的布局文件进行绑定,然后通过 findviewbyid 的方式绑定
28、页面上的其他控件,然后再在获取上的控件上,添加不同的监听器,来处理用户对控件的不同操作,比如单机监听器,长按监听器,滑动监听器。通过下列代码进行布局文件和 activity.java 的绑定操作,setContentView 为绑定布局文件函数。protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);setContentView(R.layout.home);通过findviewbyid的方法进行控件的绑定:BaddR = (Button)findViewById(R.id.bu
29、tton1);BList = (Button)findViewById(R.id.button2);通过setOnClickListener方法来添加监听器,实现代码如下:BaddR.setOnClickListener(new OnClickListener() public void onClick(View v) Intent intent = new Intent(home.this,AddRecordActivity.class);startActivity(intent);由于FinanicalBaseActivity将initview封装到了onCreate函数中,所以继承了该模
30、板类的类在initview()中也能控件及布局的绑定。如下代码:public abstract class FinanicalBaseActivity extends Activity private ProgressDialog progressDialog = null;private MyTask myTask;6private Activity activity;private FinancialBaseHandler baseHandler;private Task task;private boolean showProgress;private TaskService taskS
31、ervice;protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);/ 取消title栏requestWindowFeature(Window.FEATURE_NO_TITLE);initView();界面的跳转,就是从一个activity到另一个activity,通过使用startactivity(intent)函数来实现的,例如下列代码,通过intent函数,实现由home界面到ShowCategoryActivity界面的跳转:Intent intent = new In
32、tent(home.this,ShowCategoryActivity.class);startActivity(intent);除了使用startactivity(intent)函数来进行跳转外,若调用的方法中封装了startactivity(intent)函数也可以实现界面的跳转,例如下列代码:public void executeActivity(Class className) Intent intent = new Intent(getApplicationContext(), className);intent.setClass(getApplicationContext(), c
33、lassName);startActivity(intent, className);另外有的页面继承了FinanicalBaseActivity,所以调用executeActivity也可以实现页面的跳转。2.嵌入式关系型 SQLite 数据库存储数据2.1 SQLite 简介SQLite,是一款轻型的数据库,是遵守 ACID 的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百 K 的内存就够了。它能够支持 Windows/Linux/Unix 等等主流的操作系统,在 Android 平台上,集成了一个嵌
34、入式关系型数据库 SQLite,所以我们开发andriod 程序时可以选择使用 SQLite 数据库存储数据。SQLite 可以解析大部分标准 SQL 语句,如:查询语句:select * from 表名 where 条件子句 group by 分组字句 having . order by 排序子句如:select * from personselect * from person order by id descselect name from person group by name having count(*)1插入语句:insert into 表名(字段列表) values(值列表)。如: insert into person(name, age) values(于淼,3)