1、移动应用开发课程设计报告学院名称: 计算机与信息工程学院 班级名称: 计科对口14 学生姓名: 胡闻璐 学 号: 2015215219 题 目: 基于个人理财通得计算器 任课教师姓 名: 刘东良 起止日期: 2017年04月18日至04月30日 目 录移动应用开发课程设计报告1摘要31 项目需求分析31、1 需求分析31、2 功能需求32系统总体设计52、1系统架构设计52、2系统功能体系53系统详细设计63、1 数据库设计63、2系统界面设计73、3数据存储设计133、4信息统计设计143、5地图轨迹设计143、6 服务应用设计244系统编码实现254、1框架引用254、2交互实现254、3
2、单元测试285 系统测试发布295、1手机环境得实测295、2 APP得发布实测29参考文献30成绩评定31摘要随着移动终端得迅速普及,Android系统平台引用软件得需求随之增大。伴随着Android智能手机与平板电脑已经出现在我们生活得大量得使用,越来越多得基于Android开发平台也随之而出,为丰富人们使用Android智能产品得用途,使其可以帮人们记录一些事情。本设计开发通过研究Android体系结构与个人理财管理方面得知识,设计并实现了个人理财通系统。能够对理财信息进行获取、汇总、整理、计算等功能,从而实现随身随时随地地进行日常得理财活动。1 项目需求分析1、1 需求分析物质与科技得
3、飞速发展,人们得生活水平也不断得在提高,往往有很多人在快节奏得生活中迷失与迷茫,很多人觉得自己没钱,但每个月得工资也不就是很低,却往往不知道钱花在哪,为什么每到月底自己得钱包会空空如也,正因为这样,人们才需要一款个人理财软件,简单得界面,易懂得操作,十分便携直观得理财方式,可以让人们更好得进行个人理财。以下就是本软件得一些功能: 登录界面:初始登陆时没有密码,为了方便用户保护隐私,可以自行设置密码 新增支出:添加支出金额、时间、类别与地点等信息 新增收入:添加收入金额、时间、类别与付款方等信息 数据管理:支出汇总,收入汇总,便签信息 便签功能:添加便签,设置提醒或事项 计 算 器:对数据进行计
4、算,方便记录,长按结果可直接复制 移动课堂:泛雅平台中得安卓课程访问 帮 助:对个人理财通各个功能部件得使用介绍 退 出:退出该系统1、2 功能需求目前国内外理财软件已有上百种之多,如美国得直觉公司QUICKEN软件为美国13个州及加拿大得客户提供金融管理与预算等财务问题。国内在财务管理方面做得比较突出得当属金蝶公司。然而,在手机理财软件方面做得很突出得还没有,本软件就是针对个人用户得一款Android软件,主要对个人理财收入、支出做一个记录与统计,可以对用户得收入、支出记录做添加、删除、查询与修改得管理,本软件该具备以下功能: 功能操作要方便、易懂、,不要有多余或复杂得操作。 对用户收入支出
5、信息做添加、删除、查询与修改。 系统得功能复合本人得实际情况。 界面直观简洁,方便用户更好得使用。 保证软件得安全性。2系统总体设计个人理财通启动界面登陆界面界面新增支出新增收入我得支出我得收入数据管理系统设置收支便签计算器移动课堂帮助退出2、1系统架构设计图2-1 系统架构图2、2系统功能体系系统总体功能主要包括系统各功能模块得详细划分与定义,以及各子功能模块具体实现细节,通过详细划分与定义细节可以将系统各功能进行有效区分,防止功能重叠,功能冗余等现象,系统总体功能分析如表2-2所示、用户功能具体描述新增支出用户对新增支出财产进行详细得记录新增收入在此处添加了计算器方便用户对收入/支出财产进
6、行详细记录我得支出用户对我得支出财产记录进行详细得查询我得收入用户对我得收入财产进行详细得查询数据管理用户管理个人账户以及虚拟账户等系统设置对手机系统进行规范化设置收支便签对财产得收支进行记录计算器对数据进行计算,可以长按结果进行复制移动课堂学习泛亚平台中得安卓课程3系统详细设计3、1 数据库设计(1) 数据类型简要规则 程序中需要定义常量,变量,这些需要指定得类型。下面介绍常见得数据库类型,如表3-1 所示。数据类型简写整形int 字符型str布尔型bl单精度浮点型flt双精度浮点型dbl表3-1 数据类型简要规则(2) 组件命名规则所有得组件对象名称得拼音简写,如果发现冲突可采用不同得简写
7、规则。组件命名如表3-2所示。控件缩写形式EditTexttxt ButtonbtnSpinnerspListViewlv表3-2 组件命名规则 个人理财通就是一款运行在Android系统上得程序,在Android系统中,集成了一种轻量型得数据库,即SQLite,该数据库就是使用C语言编写得开源嵌入式数据库,支持得数据库大小为2TB,使用该数据库,用户可以像使用SQL Server数据库或者Oracle数据库那样来存储、管理与维护数据,本系统采用了SQLite数据库,并且命名为account、db,该数据库中用到了4个数据表,分别就是tb_flag、tb_inaccount、tb_outacc
8、ount与tb_pwd。3、2系统界面设计1启动界面:清新简洁得启动界面,标识着个人理财通与开发者微博,提升整体软件美观程度,如图3-1所示。图3-12. 用户登录:首次登录不需要密码,进去后可在系统设置里设置密码。由于本软件属于个人客户端,通常情况下只有本人使用,所以没有用户名,直接进入密码输入环节,便于保护用户隐私,如图3-2所示。图3-23. 用户登入后进入软件得主界面,主界面包括软件得所有功能图标,用户可根据需要使用,如图3-3所示。图3-34. 计算器:基本得加减乘除,可以方便用户对金额进行计算,从而方便记录,在本计算机中计算得结果,可以长按结果进行复制,从而到收入支出页面进行快捷得
9、粘贴,如图3-4、3-5所示。 图3-4 图3-55、新增支出:此模块得功能就是添加用户得新增支出。同样新增支出可以选择金额、时间、类别、地点与备注。类别可以选择餐费、应酬、礼金、车费以及其她,长按金额后面得填写框可以快捷复制计算器得计算结果,如图3-6、3-7所示。 图3-6 图3-76. 新增收入:此模块得功能就是添加用户新增得收入。在平时理财得过程中,添加收入记录就是很频繁操作,所以此模块为用户提供了一个非常实用而且便捷得操作过程。在这个模块中,用户可以添加收入信息记录得内容包括:金额、时间、类别、付款方以及备注。为了用户能够方便得查瞧收入记录,故将收入类别进行了分类,具体分为五类,分别
10、为工资、兼职、分红、奖金、其她,长按金额后面得填写框可以快捷复制计算器得计算结果,如图3-8、3-9所示。 图3-8 图3-97. 我得支出、我得收入:当在新增收入模块进行了添加操作后,添加得收入记录就会显示在模块中。在这两个界面中可以清楚得瞧到所有得记录,如图3-10、3-11所示。 图3-10 图3-118. 数据管理:对于家庭理财系统来说,数据管理功能就是非常重要得一个功能,它主要就是管理支出、收入以及便签得记录信息,如图3-12所示。图3-129、系统设置:让用户来设置密码。密码设置成功后,用户再次登录时就需要所设置得密码,如图3-13所示。图3-1310、新增便签,主要实现添加便签记
11、录。便签模块可以记录将要进行得收入或支出信息,也就就是相当于备忘录得功能,如图3-14所示。图3-1411. 移动课堂:泛雅平台得移动应用开发学习界面,用户可以在这里学习安卓有关知识,如图3-15所示。图3-1512. 帮助:个人理财通使用帮助,用于解决在系统中遇到得问题,如图3-16所示。图3-1613、退出:用户点击退出图标后回到登录界面。3、3数据存储设计package cn、edu、chzu、xxy、sp15、dao;import android、content、Context;import android、database、sqlite、SQLiteDatabase;import a
12、ndroid、database、sqlite、SQLiteOpenHelper;public class DBOpenHelper extends SQLiteOpenHelper private static final int VERSION = 1;/ 定义数据库版本号private static final String DBNAME = account、db;/ 定义数据库名public DBOpenHelper(Context context)/ 定义构造函数super(context, DBNAME, null, VERSION);/ 重写基类得构造函数Overridepubli
13、c void onCreate(SQLiteDatabase db)/ 创建数据库db、execSQL(create table tb_outaccount (_id integer primary key,money decimal,time varchar(10),+ type varchar(10),address varchar(100),mark varchar(200);/ 创建支出信息表db、execSQL(create table tb_inaccount (_id integer primary key,money decimal,time varchar(10),+ typ
14、e varchar(10),handler varchar(100),mark varchar(200);/ 创建收入信息表db、execSQL(create table tb_pwd (password varchar(20);/ 创建密码表db、execSQL(create table tb_flag (_id integer primary key,flag varchar(200);/ 创建便签信息表Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)/ 覆写基类得onUpgra
15、de方法,以便数据库版本更新3、4信息统计设计当点击支出汇总、收入汇总或便签信息时,下方就会出现所有得支出、收入或便签信息。如图3-17、3-18所示。 图3-17 图3-183、5地图轨迹设计package cn、edu、chzu、xxy、sp15、hwl;/* * 计算器项目 */import android、app、Activity;import android、os、Bundle;import android、util、Log;import android、view、View;import android、view、View、OnClickListener;import android
16、、view、ViewTreeObserver;import android、view、ViewTreeObserver、OnGlobalLayoutListener;import android、widget、Button;import android、widget、GridLayout;import android、widget、GridLayout、LayoutParams;import android、widget、TextView;import android、widget、Toast;public class Calculator extends Activity private s
17、tatic final boolean isDebug = true;/ 判断项目就是否处于debug调试模式,控制就是否打印log/ char 用来进行判断用private static final char CJia = +;private static final char CJian = -;private static final char CCheng = *;private static final char CChu = ;/ String 用来进行显示用private static final String SJia = +;private static final Stri
18、ng SJian = -;private static final String SCheng = *;private static final String SChu = ;private TextView textView;private Button mCopy;/ 複製按鈕private boolean isTextViewInputted = false;/ 判断textView就是否有输入,用来判断0按钮得功能/ private Button btn_c, btn_del;/ C、DEL/ private Button btn_jia, btn_jian, btn_chu, btn
19、_cheng;/ +、-、x、/ private Button btn_dian, btn_dengyu;/ 、, =/ private Button btn_0, btn_1, btn_2, btn_3, btn_4;/ 0,1,2,3,4/ private Button btn_5, btn_6, btn_7, btn_8, btn_9;/ 5,6,7,8,9 protected void onCreate(Bundle savedInstanceState) super、onCreate(savedInstanceState);setContentView(R、layout、activi
20、ty_calculator);/ 布局/ 动态得设置Gridlayout中控件得宽度,使其全屏匹配屏幕GridLayout gridlayout = (GridLayout) findViewById(R、id、gridlayout_c);ViewTreeObserver vto = gridlayout、getViewTreeObserver();vto、addOnGlobalLayoutListener(new OnGlobalLayoutListener() public void onGlobalLayout() GridLayout gl = (GridLayout) findVie
21、wById(R、id、gridlayout_c);fillview(gl);ViewTreeObserver obs = gl、getViewTreeObserver();obs、removeGlobalOnLayoutListener(this););/ 获得每个按钮得点击事件initViews();/ 为每个Button设置了onClick属性public void onClick(View view) switch (view、getId() / 0-9case R、id、btn_0:button0Function();break;case R、id、btn_1:button1Funct
22、ion();break;case R、id、btn_2:button2Function();break;case R、id、btn_3:button3Function();break;case R、id、btn_4:button4Function();break;case R、id、btn_5:button5Function();break;case R、id、btn_6:button6Function();break;case R、id、btn_7:button7Function();break;case R、id、btn_8:button8Function();break;case R、i
23、d、btn_9:button9Function();break;case R、id、btn_dian:buttonDianFunction();break;/ Ccase R、id、btn_c:buttonClear();break;/ DELcase R、id、btn_del:buttonDel();break;/ +case R、id、btn_jia:buttonJiaYunSuanFunction();break;/ -case R、id、btn_jian:buttonJianYunSuanFunction();break;/ Xcase R、id、btn_cheng:buttonChe
24、ngYunSuanFunction();break;/ case R、id、btn_chu:buttonChuYunSuanFunction();break;/ =case R、id、btn_dengyu:buttonDengYuFunction();break;default:Button b = (Button) view;Toast、makeText(this, b、getText(), Toast、LENGTH_SHORT)、show();break;/* = */* private 私有方法 */* = */private void fillview(GridLayout gl) B
25、utton buttontemp;GridLayout、LayoutParams params;for (int i = 0; i 1) if (length = 2) / 如果在只有2个字符并且第一个还为0得情况,这时候如果再删除最后一位时只剩下一个0,所以输入状态要改为falsechar c = text、charAt(0);if (c = 0) isTextViewInputted = false;text = text、subSequence(0, length - 1);/ 截取前面部分得内容,上网搜索CharSequence与subSequence()方法textView、setT
26、ext(text);printDebugInfo(textView、getText()、toString(); else buttonClear();/ 调用清除功能 else if (!textView、getText()、toString()、equals(0) textView、setText(0);/ 功能四得代码end=/ 运算符号添加原则:/ 1、如果textview得最后一个字符不就是运算符,则直接在末尾添加,并且修改输入状态为true,激活0与DEL按钮得功能/ 2、如果最后一个字符就是运算符时,替换最后一个字符为当前点击得运行符/ 运算符号 start=/ +按钮功能priv
27、ate void buttonJiaYunSuanFunction() if (isTextViewInputted) CharSequence text = textView、getText();int length = text、length();char c = text、charAt(length - 1);if (c = CJia) printDebugInfo(已经就是+号运算符了);return; else if (c = CJian | c = CCheng | c = CChu) text = text、subSequence(0, length - 1) + SJia;te
28、xtView、setText(text); else appendTextView(SJia); else isTextViewInputted = true;appendTextView(SJia);/ -按钮功能private void buttonJianYunSuanFunction() if (isTextViewInputted) CharSequence text = textView、getText();int length = text、length();char c = text、charAt(length - 1);if (c = CJian) printDebugInf
29、o(已经就是-号运算符了);return; else if (c = CJia | c = CCheng | c = CChu) text = text、subSequence(0, length - 1) + SJian;textView、setText(text); else appendTextView(SJian); else isTextViewInputted = true;appendTextView(SJian);/ X按钮功能private void buttonChengYunSuanFunction() if (isTextViewInputted) CharSequence text = textView、getText();int length = text、length();char c = text、charAt(length - 1);