




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上精选优质文档-倾情为你奉上专心-专注-专业专心-专注-专业精选优质文档-倾情为你奉上专心-专注-专业移动应用开发课程设计报告学院名称: 计算机与信息工程学院 班级名称: 计科对口14 学生: 胡闻璐 学 号: 题 目: 基于个人理财通的计算器 任课教师姓 名: 东良 起止日期: 2017年04月18日至04月30日 目 录 TOC o 1-3 h z u 摘要随着移动终端的迅速普及,Android系统平台引用软件的需求随之增大。伴随着Android智能手机与平板电脑已经出现在我们生活的大量的使用,越来越多的基于Android开发平台也随之而出,为丰富人们使用Andro
2、id智能产品的用途,使其可以帮人们记录一些事情。本设计开发通过研究Android体系结构和个人理财管理方面的知识,设计并实现了个人理财通系统。能够对理财信息进行获取、汇总、整理、计算等功能,从而实现随身随时随地地进行日常的理财活动。1 项目需求分析1.1 需求分析物质和科技的飞速发展,人们的生活水平也不断的在提高,往往有很多人在快节奏的生活中迷失和迷茫,很多人觉得自己没钱,但每个月的工资也不是很低,却往往不知道钱花在哪,为什么每到月底自己的钱包会空空如也,正因为这样,人们才需要一款个人理财软件,简单的界面,易懂的操作,十分便携直观的理财方式,可以让人们更好的进行个人理财。以下是本软件的一些功能
3、: 登录界面:初始登陆时没有密码,为了方便用户保护隐私,可以自行设置密码 新增支出:添加支出金额、时间、类别和地点等信息 新增收入:添加收入金额、时间、类别和付款方等信息 数据管理:支出汇总,收入汇总,便签信息 便签功能:添加便签,设置提醒或事项 计 算 器:对数据进行计算,方便记录,长按结果可直接复制 移动课堂:泛雅平台中的安卓课程访问 帮 助:对个人理财通各个功能部件的使用介绍 退 出:退出该系统1.2 功能需求目前国外理财软件已有上百种之多,如美国的直觉公司QUICKEN软件为美国13个州及加拿大的客户提供金融管理和预算等财务问题。国在财务管理方面做的比较突出的当属金蝶公司。然而,在手机
4、理财软件方面做的很突出的还没有,本软件是针对个人用户的一款Android软件,主要对个人理财收入、支出做一个记录和统计,可以对用户的收入、支出记录做添加、删除、查询和修改的管理,本软件该具备以下功能: 功能操作要方便、易懂、,不要有多余或复杂的操作。 对用户收入支出信息做添加、删除、查询和修改。 系统的功能复合本人的实际情况。 界面直观简洁,方便用户更好的使用。 保证软件的安全性。2系统总体设计个人理财通启动界面登陆界面界面新增支出新增收入我的支出我的收入数据管理系统设置收支便签计算器移动课堂帮助退出2.1系统架构设计图2-1 系统架构图2.2系统功能体系系统总体功能主要包括系统各功能模块的详
5、细划分和定义,以及各子功能模块具体实现细节,通过详细划分和定义细节可以将系统各功能进行有效区分,防止功能重叠,功能冗余等现象,系统总体功能分析如表2-2所示.用户功能具体描述新增支出用户对新增支出财产进行详细的记录新增收入在此处添加了计算器方便用户对收入/支出财产进行详细记录我的支出用户对我的支出财产记录进行详细的查询我的收入用户对我的收入财产进行详细的查询数据管理用户管理个人账户以及虚拟账户等系统设置对手机系统进行规化设置收支便签对财产的收支进行记录计算器对数据进行计算,可以长按结果进行复制移动课堂学习泛亚平台中的安卓课程3系统详细设计3.1 数据库设计数据类型简要规则 程序中需要定义常量,
6、变量,这些需要指定的类型。下面介绍常见的数据库类型,如表3-1 所示。数据类型简写整形int 字符型str布尔型bl单精度浮点型flt双精度浮点型dbl表3-1 数据类型简要规则组件命名规则所有的组件对象名称的拼音简写,如果发现冲突可采用不同的简写规则。组件命名如表3-2所示。控件缩写形式EditTexttxt ButtonbtnSpinnerspListViewlv表3-2 组件命名规则 个人理财通是一款运行在Android系统上的程序,在Android系统中,集成了一种轻量型的数据库,即SQLite,该数据库是使用C语言编写的开源嵌入式数据库,支持的数据库大小为2TB,使用该数据库,用户可
7、以像使用SQL Server数据库或者Oracle数据库那样来存储、管理和维护数据,本系统采用了SQLite数据库,并且命名为account.db,该数据库中用到了4个数据表,分别是tb_flag、tb_inaccount、tb_outaccount和tb_pwd。3.2系统界面设计1启动界面:清新简洁的启动界面,标识着个人理财通和开发者微博,提升整体软件美观程度,如图3-1所示。图3-1用户登录:首次登录不需要密码,进去后可在系统设置里设置密码。由于本软件属于个人客户端,通常情况下只有本人使用,所以没有用户名,直接进入密码输入环节,便于保护用户隐私,如图3-2所示。图3-2用户登入后进入软件
8、的主界面,主界面包括软件的所有功能图标,用户可根据需要使用,如图3-3所示。图3-3计算器:基本的加减乘除,可以方便用户对金额进行计算,从而方便记录,在本计算机中计算的结果,可以长按结果进行复制,从而到收入支出页面进行快捷的粘贴,如图3-4、3-5所示。 图3-4 图3-55.新增支出:此模块的功能是添加用户的新增支出。同样新增支出可以选择金额、时间、类别、地点和备注。类别可以选择餐费、应酬、礼金、车费以及其他,长按金额后面的填写框可以快捷复制计算器的计算结果,如图3-6、3-7所示。 图3-6 图3-7新增收入:此模块的功能是添加用户新增的收入。在平时理财的过程中,添加收入记录是很频繁操作,
9、所以此模块为用户提供了一个非常实用而且便捷的操作过程。在这个模块中,用户可以添加收入信息记录的容包括:金额、时间、类别、付款方以及备注。为了用户能够方便的查看收入记录,故将收入类别进行了分类,具体分为五类,分别为工资、兼职、分红、奖金、其他,长按金额后面的填写框可以快捷复制计算器的计算结果,如图3-8、3-9所示。 图3-8 图3-9我的支出、我的收入:当在新增收入模块进行了添加操作后,添加的收入记录就会显示在模块中。在这两个界面中可以清楚的看到所有的记录,如图3-10、3-11所示。 图3-10 图3-11数据管理:对于家庭理财系统来说,数据管理功能是非常重要的一个功能,它主要是管理支出、收
10、入以及便签的记录信息,如图3-12所示。图3-129.系统设置:让用户来设置密码。密码设置成功后,用户再次登录时就需要所设置的密码,如图3-13所示。图3-1310.新增便签,主要实现添加便签记录。便签模块可以记录将要进行的收入或支出信息,也就是相当于备忘录的功能,如图3-14所示。图3-14移动课堂:泛雅平台的移动应用开发学习界面,用户可以在这里学习安卓有关知识,如图3-15所示。图3-15帮助:个人理财通使用帮助,用于解决在系统中遇到的问题,如图3-16所示。图3-1613.退出:用户点击退出图标后回到登录界面。3.3数据存储设计.chzu.xxy.sp15.dao;
11、import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;public class DBOpenHelper extends SQLiteOpenHelper private static final int VERSION = 1;/ 定义数据库版本号private static final String DBNAME = account.db;/ 定义数据库名public DBOpenHelper(C
12、ontext context)/ 定义构造函数super(context, DBNAME, null, VERSION);/ 重写基类的构造函数Overridepublic 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(cr
13、eate 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);/ 创建密码表db.execSQL(create table tb_flag (_id integer primary key,flag varchar(200);/ 创建便签信息表Overridep
14、ublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)/ 覆写基类的onUpgrade方法,以便数据库版本更新3.4信息统计设计当点击支出汇总、收入汇总或便签信息时,下方就会出现所有的支出、收入或便签信息。如图3-17、3-18所示。 图3-17 图3-183.5地图轨迹设计.chzu.xxy.sp15.hwl;/* * 计算器项目 */import android.app.Activity;import android.os.Bundle;import android.util.Lo
15、g;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewTreeObserver;import android.view.ViewTreeObserver.OnGlobalLayoutListener;import android.widget.Button;import android.widget.GridLayout;import android.widget.GridLayout.LayoutParams;import android.widget.TextV
16、iew;import android.widget.Toast;public class Calculator extends Activity private static 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 =
17、 ;/ String 用来进行显示用private static final String SJia = +;private static final String SJian = -;private static final String SCheng = *;private static final String SChu = ;private TextView textView;private Button mCopy;/ 複製按鈕private boolean isTextViewInputted = false;/ 判断textView是否有输入,用来判断0按钮的功能/ privat
18、e 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/ private Button btn_5, btn_6, btn_7, btn_8, btn_9;/ 5,6,7,8,9 protected void onCreate(Bundle savedI
19、nstanceState) super.onCreate(savedInstanceState);setContentView(R.layout.activity_calculator);/ 布局/ 动态的设置Gridlayout中控件的宽度,使其全屏匹配屏幕GridLayout gridlayout = (GridLayout) findViewById(R.id.gridlayout_c);ViewTreeObserver vto = gridlayout.getViewTreeObserver();vto.addOnGlobalLayoutListener(new OnGlobalLay
20、outListener() public void onGlobalLayout() GridLayout gl = (GridLayout) findViewById(R.id.gridlayout_c);fillview(gl);ViewTreeObserver obs = gl.getViewTreeObserver();obs.removeGlobalOnLayoutListener(this););/ 获得每个按钮的点击事件initViews();/ 为每个Button设置了onClick属性public void onClick(View view) switch (view.ge
21、tId() / 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();break;case R.id.btn_5:button5Function();break;case R.id.btn_6:button6Function();break;case R.id
22、.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;/ DELcase R.id.btn_del:buttonDel();break;/ +case R.id.btn_jia:buttonJiaYunSuanFunction();break;/ -case R
23、.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();break;default:Button b = (Button) view;Toast.makeText(this, b.getText(), Toast.LENGTH_SHORT).sh
24、ow();break;/* = */* private 私有方法 */* = */private void fillview(GridLayout gl) Button 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.subSe
25、quence(0, length - 1);/ 截取前面部分的容,上网搜索CharSequence和subSequence()方法textView.setText(text);printDebugInfo(textView.getText().toString(); else buttonClear();/ 调用清除功能 else if (!textView.getText().toString().equals(0) textView.setText(0);/ 功能四的代码end=/ 运算符号添加原则:/ 1、如果textview的最后一个字符不是运算符,则直接在末尾添加,并且修改输入状态为
26、true,激活0和DEL按钮的功能/ 2、如果最后一个字符是运算符时,替换最后一个字符为当前点击的运行符/ 运算符号 start=/ +按钮功能private 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 = CJia
27、n | c = CCheng | c = CChu) text = text.subSequence(0, length - 1) + SJia;textView.setText(text); else appendTextView(SJia); else isTextViewInputted = true;appendTextView(SJia);/ -按钮功能private void buttonJianYunSuanFunction() if (isTextViewInputted) CharSequence text = textView.getText();int length =
28、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按钮功能pr
29、ivate void buttonChengYunSuanFunction() if (isTextViewInputted) CharSequence text = textView.getText();int length = text.length();char c = text.charAt(length - 1);if (c = CCheng) printDebugInfo(已经是X号运算符了);return; else if (c = CJia | c = CJian | c = CChu) text = text.subSequence(0, length - 1) + SChe
30、ng;textView.setText(text); else appendTextView(SCheng); else isTextViewInputted = true;appendTextView(SCheng);/ 按钮功能private void buttonChuYunSuanFunction() if (isTextViewInputted) CharSequence text = textView.getText();int length = text.length();char c = text.charAt(length - 1);if (c = CChu) printDe
31、bugInfo(已经是号运算符了);return; else if (c = CJia | c = CJian | c = CCheng) text = text.subSequence(0, length - 1) + SChu;textView.setText(text); else appendTextView(SChu); else isTextViewInputted = true;appendTextView(SChu);/ 点.按钮的功能/ 出现的条件是只有在isTextViewInputted为true或者只是0时才有用private void buttonDianFuncti
32、on() if (isTextViewInputted) appendTextView(.); else if (textView.getText().toString().equals(0) appendTextView(.);isTextViewInputted = true;/ 运算符号 end=/ =按钮的功能start=/ =按钮的功能比较复杂,重新规划了一下进度说明和进度任务/ 本按钮的实现需要运用java中String类和/ 使用String类split的方法,可以根据四则运算符去吧字符串分成几段,最终是把数字和运算符分离,/ 把数字字符串转化为基本数据类型根据运算符进行计算/
33、实现步骤:/ 目前先做两个数的运行,并且只考虑输入正确的情况,其他条件的判断以后进行/ 1、先创建4个方法,对应四则运算中的加,减,乘,除;(在写完加法算法进行测试时,我们发现当运算完第一次后,我点击其他数字按钮时,textView显示正常,此时显示我们刚才点击的按钮的数字,但是我们/ 点击0时发现数据显示的还是之前运算的结果,所以这时需要在button0Function方法中加一个条件判断,使得这个时候点击0时可以他textView显示为0)(同样的C和DEL也需要处理这个情况)/ 2、分析textview的字符串容,获取数字和运算符,进行运算得出结果,更改textview的显示/ 3、当进
34、行一次等于操作的时候,将textview的输入状态改为false。结束了一次运算。private void buttonDengYuFunction() String text = textView.getText().toString();/ 包含加减乘除四则运算中的任一一个,就进行计算if (text.contains(SJia) | text.contains(SJian)| text.contains(SCheng) | text.contains(SChu) isTextViewInputted = false;onlyOneOperator(text);/ 只有一种运算符的情况pr
35、ivate void onlyOneOperator(String text) boolean isFisrtWeiFu = false;/ 判断第一个是否为负数/ 左起第一个数为负数时if (text.startsWith(-) text = text.substring(1);/ 把第一个-去掉isFisrtWeiFu = true;/ 只有一个运算符的情况,并且如果只有一个数字加上任一一个运算符,结果还是数字本身。不进行操作boolean isInteger = true;/ 用来判断是否全部是int数据,/ +if (text.contains(SJia) String arr = t
36、ext.split(+);/ 四则运行中一些特殊符号需要处理一下,需要理解split()方法int length = arr.length;float arrFlaotNumber = new floatlength;for (int i = 0; i length; i+) if (arri.contains(.) isInteger = false;arrFlaotNumberi = Float.parseFloat(arri);if (0 = i & isFisrtWeiFu) arrFlaotNumberi = -arrFlaotNumberi;if (isInteger) / 全部是
37、int类型则使用整数的方法,将float数据强转intint arrIntNumber = new intlength;for (int i = 0; i length; i+) arrIntNumberi = (int) arrFlaotNumberi;textView.setText(jiaFa(arrIntNumber) + ); else textView.setText(jiaFa(arrFlaotNumber) + );/ -else if (text.contains(SJian) String arr = text.split(-);int length = arr.lengt
38、h;float arrFlaotNumber = new floatlength;for (int i = 0; i length; i+) if (arri.contains(.) isInteger = false;arrFlaotNumberi = Float.parseFloat(arri);if (0 = i & isFisrtWeiFu) arrFlaotNumberi = -arrFlaotNumberi;if (isInteger) / 如果全部是int类型则使用整数的方法int arrIntNumber = new intlength;for (int i = 0; i le
39、ngth; i+) arrIntNumberi = (int) arrFlaotNumberi;textView.setText(jianFa(arrIntNumber) + ); else textView.setText(jianFa(arrFlaotNumber) + );else if (text.contains(SCheng) String arr = text.split(*);int length = arr.length;float arrFlaotNumber = new floatlength;for (int i = 0; i length; i+) if (arri.
40、contains(.) isInteger = false;arrFlaotNumberi = Float.parseFloat(arri);if (0 = i & isFisrtWeiFu) arrFlaotNumberi = -arrFlaotNumberi;if (isInteger) / 如果全部是int类型则使用整数的方法int arrIntNumber = new intlength;for (int i = 0; i length; i+) arrIntNumberi = (int) arrFlaotNumberi;textView.setText(chengFa(arrIntN
41、umber) + ); else textView.setText(chengFa(arrFlaotNumber) + );/ else if (text.contains(SChu) String arr = text.split();int length = arr.length;float arrFlaotNumber = new floatlength;for (int i = 0; i length; i+) if (arri.contains(.) isInteger = false;arrFlaotNumberi = Float.parseFloat(arri);if (0 =
42、i & isFisrtWeiFu) arrFlaotNumberi = -arrFlaotNumberi;if (isInteger) / 如果全部是int类型则使用整数的方法int arrIntNumber = new intlength;for (int i = 0; i length; i+) arrIntNumberi = (int) arrFlaotNumberi;textView.setText(chuFa(arrIntNumber) + ); else textView.setText(chuFa(arrFlaotNumber) + );/ 两个数的加法private int j
43、iaFa(int a) int result = 0;for (int i = 0, length = a.length; i length; i+) result += ai;return result;/ 两个数的减法private int jianFa(int a) int result = a0;for (int i = 1, length = a.length; i length; i+) result -= ai;return result;/ 两个数的乘法private int chengFa(int a) int result = a0;for (int i = 1, leng
44、th = a.length; i length; i+) result *= ai;return result;/ 两个数的除法private int chuFa(int a) int result = a0;for (int i = 1, length = a.length; i length; i+) if (ai = 0) return result;result /= ai;return result;/ 进度10小数的计算,当数字中出现小数时,不想使用float类型来进行计算,提供了方法的重载/ 两个数的加法private float jiaFa(float a) float res
45、ult = 0;for (int i = 0, length = a.length; i length; i+) result += ai;return result;/ 两个数的减法private float jianFa(float a) float result = a0;for (int i = 1, length = a.length; i length; i+) result -= ai;return result;/ 两个数的乘法private float chengFa(float a) float result = a0;for (int i = 1, length = a.
46、length; i length; i+) result *= ai;return result;/ 两个数的除法private float chuFa(float a) float result = a0;for (int i = 1, length = a.length; i length; i+) if (ai = 0) return result;result /= ai;return result;/ =按钮的功能end=3.6 服务应用设计移动课堂:.chzu.xxy.sp15.hwl;import android.app.Activity;import android.content.Intent;import android.os.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 幼儿工作计划 个人
- 2025股权转让专项法律服务合同
- 2025版办公室装修合同范本
- 2025二手商品交易合同书模板
- 混凝土强度验收
- 2025设备租赁合同示范文本
- 宝马三系改色施工方案
- 冻品采购合同样本
- 行业发展计划推动技术创新
- 低价沙发转让合同样本
- 古代汉语-形考任务1-3-国开-参考资料
- 《预防未成年人犯罪》课件(图文)
- Q∕GDW 12152-2021 输变电工程建设施工安全风险管理规程
- 冶金等工贸企业安全生产标准化达标信息管理系统[冶金等工贸企业安全生产标准化达标信息管理系统](-33)
- 《阅读与写作》课程教学大纲
- 英语话剧剧本<美女与野兽>
- 纯滞后控制技术
- 课件使用详细说明书写法
- 单位消防安全三自主两公开一承诺登记表
- 模拟飞行Xsdk的安装方法
- PCB加工工艺要求说明书经典模板
评论
0/150
提交评论