《移动应用开发优秀课程设计.doc》由会员分享,可在线阅读,更多相关《移动应用开发优秀课程设计.doc(54页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、移动应用开发课程设计汇报学院名称: 计算机和信息工程学院 班级名称: 计科对口14 学生姓名: 胡闻璐 学 号: 215219 题 目: 基于个人理财通计算器 任课老师姓 名: 刘东良 起止日期: 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单元测试285 系统
2、测试公布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) 组件命名规则全部组件对象名称拼音简写,假如发觉冲突可采取不一样简写规则。组件命名如表3-2所表示。控件缩写形式EditTexttxt ButtonbtnSpinnerspListViewlv表3-2
7、 组件命名规则 个人理财通是一款运行在Android系统上程序,在Android系统中,集成了一个轻量型数据库,即SQLite,该数据库是使用C语言编写开源嵌入式数据库,支持数据库大小为2TB,使用该数据库,用户能够像使用SQL Server数据库或Oracle数据库那样来存放、管理和维护数据,本系统采取了SQLite数据库,而且命名为account.db,该数据库中用到了4个数据表,分别是tb_flag、tb_inaccount、tb_outaccount和tb_pwd。3.2系统界面设计1开启界面:清新简练开启界面,标识着个人理财通和开发者微博,提升整体软件美观程度,图3-1所表示。图3-
8、12. 用户登录:首次登录不需要密码,进去后可在系统设置里设置密码。因为本软件属于个人用户端,通常情况下只有本人使用,所以没有用户名,直接进入密码输入步骤,便于保护用户隐私,图3-2所表示。图3-23. 用户登入后进入软件主界面,主界面包含软件全部功效图标,用户可依据需要使用,图3-3所表示。图3-34. 计算器:基础加减乘除,能够方便用户对金额进行计算,从而方便统计,在本计算机中计算结果,能够长按结果进行复制,从而到收入支出页面进行快捷粘贴,图3-4、3-5所表示。 图3-4 图3-55.新增支出:此模块功效是添加用户新增支出。一样新增支出能够选择金额、时间、类别、地点和备注。类别能够选择餐
9、费、应酬、礼金、车费和其它,长按金额后面填写框能够快捷复制计算器计算结果,图3-6、3-7所表示。 图3-6 图3-76. 新增收入:此模块功效是添加用户新增收入。在平时理财过程中,添加收入统计是很频繁操作,所以此模块为用户提供了一个很实用而且便捷操作过程。在这个模块中,用户能够添加收入信息统计内容包含:金额、时间、类别、付款方和备注。为了用户能够方便查看收入统计,故将收入类别进行了分类,具体分为五类,分别为工资、兼职、分红、奖金、其它,长按金额后面填写框能够快捷复制计算器计算结果,图3-8、3-9所表示。 图3-8 图3-97. 我支出、我收入:当在新增收入模块进行了添加操作后,添加收入统计
10、就会显示在模块中。在这两个界面中能够清楚看到全部统计,图3-10、3-11所表示。 图3-10 图3-118. 数据管理:对于家庭理财系统来说,数据管理功效是很关键一个功效,它关键是管理支出、收入和便签统计信息,图3-12所表示。图3-129.系统设置:让用户来设置密码。密码设置成功后,用户再次登录时就需要所设置密码,图3-13所表示。图3-1310.新增便签,关键实现添加便签统计。便签模块能够统计将要进行收入或支出信息,也就是相当于备忘录功效,图3-14所表示。图3-1411. 移动课堂:泛雅平台移动应用开发学习界面,用户能够在这里学习安卓相关知识,图3-15所表示。图3-1512. 帮助:
11、个人理财通使用帮助,用于处理在系统中碰到问题,图3-16所表示。图3-1613.退出:用户点击退出图标后回到登录界面。3.3数据存放设计package cn.edu.chzu.xxy.sp15.dao;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;public class DBOpenHelper extends SQLiteOpenHelper private static final in
12、t VERSION = 1;/ 定义数据库版本号private static final String DBNAME = account.db;/ 定义数据库名public DBOpenHelper(Context context)/ 定义结构函数super(context, DBNAME, null, VERSION);/ 重写基类结构函数Overridepublic void onCreate(SQLiteDatabase db)/ 创建数据库db.execSQL(create table tb_outaccount (_id integer primary key,money decim
13、al,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),+ type varchar(10),handler varchar(100),mark varchar(200);/ 创建收入信息表db.execSQL(create table tb_pwd (password varchar(20);
14、/ 创建密码表db.execSQL(create table tb_flag (_id integer primary key,flag varchar(200);/ 创建便签信息表Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)/ 覆写基类onUpgrade方法,方便数据库版本更新3.4信息统计设计当点击支出汇总、收入汇总或便签信息时,下方就会出现全部支出、收入或便签信息。图3-17、3-18所表示。 图3-17 图3-183.5地图轨迹设计package cn.edu.chzu.
15、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.view.ViewTreeObserver;import android.view.ViewTreeObserver.OnGlobalLayoutListener;import android.widget.Button;impor
16、t android.widget.GridLayout;import android.widget.GridLayout.LayoutParams;import android.widget.TextView;import android.widget.Toast;public class Calculator extends Activity private static final boolean isDebug = true;/ 判定项目是否处于debug调试模式,控制是否打印log/ char 用来进行判定用private static final char CJia = +;priv
17、ate static final char CJian = -;private static final char CCheng = *;private static final char CChu = ;/ String 用来进行显示用private static final String SJia = +;private static final String SJian = -;private static final String SCheng = *;private static final String SChu = ;private TextView textView;priva
18、te 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_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
19、/ 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.activity_calculator);/ 布局/ 动态设置Gridlayout中控件宽度,使其全屏匹配屏幕GridLayout gridlayout = (GridLayout) findViewById(R.id.gridlayout_c);Vie
20、wTreeObserver vto = gridlayout.getViewTreeObserver();vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() public void onGlobalLayout() GridLayout gl = (GridLayout) findViewById(R.id.gridlayout_c);fillview(gl);ViewTreeObserver obs = gl.getViewTreeObserver();obs.removeGlobalOnLayoutListener(this
21、););/ 取得每个按钮点击事件initViews();/ 为每个Button设置了onClick属性public void onClick(View view) switch (view.getId() / 0-9case R.id.btn_0:button0Function();break;case R.id.btn_1:button1Function();break;case R.id.btn_2:button2Function();break;case R.id.btn_3:button3Function();break;case R.id.btn_4:button4Function(
22、);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.id.btn_9:button9Function();break;case R.id.btn_dian:buttonDianFunction();break;/ Ccase R.id.btn_c:buttonClear();break;/ DELca
23、se 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:buttonChengYunSuanFunction();break;/ case R.id.btn_chu:buttonChuYunSuanFunction();break;/ =case R.id.btn_dengyu:buttonDengYuFunction(
24、);break;default:Button b = (Button) view;Toast.makeText(this, b.getText(), Toast.LENGTH_SHORT).show();break;/* = */* private 私有方法 */* = */private void fillview(GridLayout gl) Button buttontemp;GridLayout.LayoutParams params;for (int i = 0; i 1) if (length = 2) / 假如在只有2个字符而且第一个还为0情况,这时候假如再删除最终一位时只剩下一
25、个0,所以输入状态要改为falsechar c = text.charAt(0);if (c = 0) isTextViewInputted = false;text = text.subSequence(0, length - 1);/ 截取前面部分内容,上网搜索CharSequence和subSequence()方法textView.setText(text);printDebugInfo(textView.getText().toString(); else buttonClear();/ 调用清除功效 else if (!textView.getText().toString().eq
26、uals(0) textView.setText(0);/ 功效四代码end=/ 运算符号添加标准:/ 1、假如textview最终一个字符不是运算符,则直接在末尾添加,而且修改输入状态为true,激活0和DEL按钮功效/ 2、假如最终一个字符是运算符时,替换最终一个字符为目前点击运行符/ 运算符号 start=/ +按钮功效private void buttonJiaYunSuanFunction() if (isTextViewInputted) CharSequence text = textView.getText();int length = text.length();char c
27、 = text.charAt(length - 1);if (c = CJia) printDebugInfo(已经是+号运算符了);return; else if (c = CJian | c = CCheng | c = CChu) text = text.subSequence(0, length - 1) + SJia;textView.setText(text); else appendTextView(SJia); else isTextViewInputted = true;appendTextView(SJia);/ -按钮功效private void buttonJianYu
28、nSuanFunction() if (isTextViewInputted) CharSequence text = textView.getText();int length = text.length();char c = text.charAt(length - 1);if (c = CJian) printDebugInfo(已经是-号运算符了);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);