《移动应用开发》课程设计.docx

上传人:b****3 文档编号:6651357 上传时间:2023-05-10 格式:DOCX 页数:49 大小:216.21KB
下载 相关 举报
《移动应用开发》课程设计.docx_第1页
第1页 / 共49页
《移动应用开发》课程设计.docx_第2页
第2页 / 共49页
《移动应用开发》课程设计.docx_第3页
第3页 / 共49页
《移动应用开发》课程设计.docx_第4页
第4页 / 共49页
《移动应用开发》课程设计.docx_第5页
第5页 / 共49页
《移动应用开发》课程设计.docx_第6页
第6页 / 共49页
《移动应用开发》课程设计.docx_第7页
第7页 / 共49页
《移动应用开发》课程设计.docx_第8页
第8页 / 共49页
《移动应用开发》课程设计.docx_第9页
第9页 / 共49页
《移动应用开发》课程设计.docx_第10页
第10页 / 共49页
《移动应用开发》课程设计.docx_第11页
第11页 / 共49页
《移动应用开发》课程设计.docx_第12页
第12页 / 共49页
《移动应用开发》课程设计.docx_第13页
第13页 / 共49页
《移动应用开发》课程设计.docx_第14页
第14页 / 共49页
《移动应用开发》课程设计.docx_第15页
第15页 / 共49页
《移动应用开发》课程设计.docx_第16页
第16页 / 共49页
《移动应用开发》课程设计.docx_第17页
第17页 / 共49页
《移动应用开发》课程设计.docx_第18页
第18页 / 共49页
《移动应用开发》课程设计.docx_第19页
第19页 / 共49页
《移动应用开发》课程设计.docx_第20页
第20页 / 共49页
亲,该文档总共49页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

《移动应用开发》课程设计.docx

《《移动应用开发》课程设计.docx》由会员分享,可在线阅读,更多相关《《移动应用开发》课程设计.docx(49页珍藏版)》请在冰点文库上搜索。

《移动应用开发》课程设计.docx

《移动应用开发》课程设计

《移动应用开发》课程设计报告

 

学院名称:

  计算机与信息工程学院

班级名称:

  计科对口14 

学生姓名:

     胡闻璐       

学  号:

  2015215219  

题 目:

基于《个人理财通》的计算器

任课教师

姓 名:

     刘东良   

起止日期:

2017年04月18日至04月30日

 

《移动应用开发》课程设计报告1

摘要3

1项目需求分析ﻩ3

1.1需求分析ﻩ3

1.2功能需求3

2系统总体设计ﻩ5

2.1系统架构设计5

2.2系统功能体系5

3系统详细设计6

3.1数据库设计6

3.2系统界面设计ﻩ7

3.3数据存储设计ﻩ13

3.4信息统计设计14

3.5地图轨迹设计ﻩ14

3.6服务应用设计24

4系统编码实现ﻩ25

4.1框架引用ﻩ25

4.2交互实现25

4.3单元测试28

5系统测试发布ﻩ29

5.1手机环境的实测ﻩ29

5.2APP的发布实测ﻩ29

参考文献ﻩ30

成绩评定31

摘要

随着移动终端的迅速普及,Android系统平台引用软件的需求随之增大。

伴随着Android智能手机与平板电脑已经出现在我们生活的大量的使用,越来越多的基于Android开发平台也随之而出,为丰富人们使用Android智能产品的用途,使其可以帮人们记录一些事情。

本设计开发通过研究Android体系结构和个人理财管理方面的知识,设计并实现了个人理财通系统。

能够对理财信息进行获取、汇总、整理、计算等功能,从而实现随身随时随地地进行日常的理财活动。

1 项目需求分析

1.1需求分析

物质和科技的飞速发展,人们的生活水平也不断的在提高,往往有很多人在快节奏的生活中迷失和迷茫,很多人觉得自己没钱,但每个月的工资也不是很低,却往往不知道钱花在哪,为什么每到月底自己的钱包会空空如也,正因为这样,人们才需要一款个人理财软件,简单的界面,易懂的操作,十分便携直观的理财方式,可以让人们更好的进行个人理财。

以下是本软件的一些功能:

 ①登录界面:

初始登陆时没有密码,为了方便用户保护隐私,可以自行设置密码

  ②新增支出:

添加支出金额、时间、类别和地点等信息

  ③新增收入:

添加收入金额、时间、类别和付款方等信息

 ④数据管理:

支出汇总,收入汇总,便签信息

  ⑤便签功能:

添加便签,设置提醒或事项

  ⑥计算器:

对数据进行计算,方便记录,长按结果可直接复制 

⑦移动课堂:

泛雅平台中的安卓课程访问

  ⑧帮 助:

对个人理财通各个功能部件的使用介绍

 ⑨退 出:

退出该系统

1.2 功能需求

目前国内外理财软件已有上百种之多,如美国的直觉公司QUICKEN软件为美国13个州及加拿大的客户提供金融管理和预算等财务问题。

国内在财务管理方面做的比较突出的当属金蝶公司。

然而,在手机理财软件方面做的很突出的还没有,本软件是针对个人用户的一款Android软件,主要对个人理财收入、支出做一个记录和统计,可以对用户的收入、支出记录做添加、删除、查询和修改的管理,本软件该具备以下功能:

  ①功能操作要方便、易懂、,不要有多余或复杂的操作。

    ②对用户收入支出信息做添加、删除、查询和修改。

 ③系统的功能复合本人的实际情况。

 ④界面直观简洁,方便用户更好的使用。

 ⑤保证软件的安全性。

 

2系统总体设计

2.1系统架构设计

 

图2-1 系统架构图

2.2系统功能体系

系统总体功能主要包括系统各功能模块的详细划分和定义,以及各子功能模

块具体实现细节,通过详细划分和定义细节可以将系统各功能进行有效区分,防

止功能重叠,功能冗余等现象,系统总体功能分析如表2-2所示.

用户功能

具体描述

新增支出

用户对新增支出财产进行详细的记录

新增收入

在此处添加了计算器方便用户对收入/支出财产进行详细记录

我的支出

用户对我的支出财产记录进行详细的查询

我的收入

用户对我的收入财产进行详细的查询

数据管理

用户管理个人账户以及虚拟账户等

系统设置

对手机系统进行规范化设置

收支便签

对财产的收支进行记录

计算器

对数据进行计算,可以长按结果进行复制

移动课堂

学习泛亚平台中的安卓课程

3系统详细设计

3.1数据库设计

(1)数据类型简要规则

程序中需要定义常量,变量,这些需要指定的类型。

下面介绍常见的数据库类型,如表3-1所示。

数据类型

简写

整形

int

   字符型

str

布尔型

bl

单精度浮点型

flt

双精度浮点型

dbl

表3-1数据类型简要规则

(2)组件命名规则

所有的组件对象名称的拼音简写,如果发现冲突可采用不同的简写规则。

组件命名如表3-2所示。

控件

缩写形式

EditText

txt

   Button

btn

Spinner

sp

ListView

lv

表3-2 组件命名规则

个人理财通是一款运行在Android系统上的程序,在Android系统中,集成了一种轻量型的数据库,即SQLite,该数据库是使用C语言编写的开源嵌入式数据库,支持的数据库大小为2TB,使用该数据库,用户可以像使用SQLServer数据库或者Oracle数据库那样来存储、管理和维护数据,本系统采用了SQLite数据库,并且命名为account.db,,该数据库中用到了4个数据表,分别是tb_flag、tb_inaccount、tb_outaccount和tb_pwd。

3.2系统界面设计

1启动界面:

清新简洁的启动界面,标识着个人理财通和开发者微博,提升整体软件美观程度,如图3-1所示。

图3-1

2.用户登录:

首次登录不需要密码,进去后可在系统设置里设置密码。

由于本软件属于个人客户端,通常情况下只有本人使用,所以没有用户名,直接进入密码输入环节,便于保护用户隐私,如图3-2所示。

图3-2

3.用户登入后进入软件的主界面,主界面包括软件的所有功能图标,用户可根据需要使用,如图3-3所示。

图3-3

4.计算器:

基本的加减乘除,可以方便用户对金额进行计算,从而方便记录,在本计算机中计算的结果,可以长按结果进行复制,从而到收入支出页面进行快捷的粘贴,如图3-4、3-5所示。

    

 

       图3-4             图3-5

5.新增支出:

此模块的功能是添加用户的新增支出。

同样新增支出可以选择金额、时间、类别、地点和备注。

类别可以选择餐费、应酬、礼金、车费以及其他,长按金额后面的填写框可以快捷复制计算器的计算结果,如图3-6、3-7所示。

 

   

  图3-6           图3-7

6.新增收入:

此模块的功能是添加用户新增的收入。

在平时理财的过程中,添加收入记录是很频繁操作,所以此模块为用户提供了一个非常实用而且便捷的操作过程。

在这个模块中,用户可以添加收入信息记录的内容包括:

金额、时间、类别、付款方以及备注。

为了用户能够方便的查看收入记录,故将收入类别进行了分类,具体分为五类,分别为工资、兼职、分红、奖金、其他,长按金额后面的填写框可以快捷复制计算器的计算结果,如图3-8、3-9所示。

   

    

   图3-8         图3-9

7.我的支出、我的收入:

当在新增收入模块进行了添加操作后,添加的收入记录就会显示在模块中。

在这两个界面中可以清楚的看到所有的记录,如图3-10、3-11所示。

    

   

       图3-10      图3-11

8.数据管理:

对于家庭理财系统来说,数据管理功能是非常重要的一个功能,它主要是管理支出、收入以及便签的记录信息,如图3-12所示。

图3-12

9.系统设置:

让用户来设置密码。

密码设置成功后,用户再次登录时就需要所设置的密码,如图3-13所示。

图3-13

10.新增便签,主要实现添加便签记录。

便签模块可以记录将要进行的收入或支出信息,也就是相当于备忘录的功能,如图3-14所示。

图3-14

11.移动课堂:

泛雅平台的移动应用开发学习界面,用户可以在这里学习安卓有关知识,如图3-15所示。

图3-15

12.帮助:

《个人理财通》使用帮助,用于解决在系统中遇到的问题,如图3-16所示。

图3-16

13.退出:

用户点击退出图标后回到登录界面。

3.3数据存储设计

packagecn.edu.chzu.xxy.sp15.dao;

importandroid.content.Context;

importandroid.database.sqlite.SQLiteDatabase;

importandroid.database.sqlite.SQLiteOpenHelper;

publicclassDBOpenHelper extendsSQLiteOpenHelper{

ﻩprivatestaticfinal intVERSION =1;//定义数据库版本号

ﻩprivatestaticfinalStringDBNAME="account.db";// 定义数据库名

ﻩpublic DBOpenHelper(Context context){//定义构造函数

super(context, DBNAME,null,VERSION);// 重写基类的构造函数

}

@Override

ﻩpublicvoidonCreate(SQLiteDatabase db){//创建数据库

ﻩﻩdb.execSQL("createtable tb_outaccount(_idintegerprimary key,money decimal,timevarchar(10),"

ﻩ+ "typevarchar(10),addressvarchar(100),mark varchar(200))");// 创建支出信息表

ﻩﻩdb.execSQL("createtable tb_inaccount(_idintegerprimary key,money decimal,time varchar(10),"

ﻩﻩ+ "typevarchar(10),handlervarchar(100),mark varchar(200))");//创建收入信息表

ﻩdb.execSQL("createtabletb_pwd(passwordvarchar(20))");//创建密码表

ﻩdb.execSQL("createtabletb_flag(_idintegerprimarykey,flagvarchar(200))");//创建便签信息表

ﻩ@Override

ﻩpublic voidonUpgrade(SQLiteDatabasedb,intoldVersion,int newVersion){//覆写基类的onUpgrade方法,以便数据库版本更新

}

}

3.4信息统计设计

当点击支出汇总、收入汇总或便签信息时,下方就会出现所有的支出、收入或便签信息。

如图3-17、3-18所示。

   

 

    图3-17         图3-18

3.5地图轨迹设计

packagecn.edu.chzu.xxy.sp15.hwl;

/**

 *计算器项目

 */

importandroid.app.Activity;

importandroid.os.Bundle;

importandroid.util.Log;

import android.view.View;

importandroid.view.View.OnClickListener;

importandroid.view.ViewTreeObserver;

importandroid.view.ViewTreeObserver.OnGlobalLayoutListener;

importandroid.widget.Button;

importandroid.widget.GridLayout;

importandroid.widget.GridLayout.LayoutParams;

importandroid.widget.TextView;

import android.widget.Toast;

publicclassCalculatorextendsActivity {

ﻩprivate static finalbooleanisDebug= true;//判断项目是否处于debug调试模式,控制是否打印log

ﻩ//char用来进行判断用

ﻩprivatestaticfinalcharCJia='+';

privatestaticfinalcharCJian='-';

ﻩprivatestaticfinal charCCheng= '*';

privatestaticfinalcharCChu ='÷';

//String 用来进行显示用

ﻩprivatestaticfinal StringSJia="+";

ﻩprivate staticfinalStringSJian="-";

ﻩprivate staticfinalStringSCheng="*";

ﻩprivatestaticfinalStringSChu="÷";

ﻩprivateTextView textView;

ﻩprivateButton mCopy;//複製按鈕

ﻩprivatebooleanisTextViewInputted=false;//判断textView是否有输入,用来判断0按钮的功能

//privateButtonbtn_c, btn_del;// C、DEL

ﻩ// privateButton btn_jia,btn_jian,btn_chu,btn_cheng;//+、-、x、÷

// privateButtonbtn_dian, btn_dengyu;//.,=

//privateButton btn_0,btn_1,btn_2,btn_3,btn_4;//0,1,2,3,4

//private Buttonbtn_5,btn_6,btn_7,btn_8,btn_9;//5,6,7,8,9∞

ﻩprotectedvoidonCreate(Bundle savedInstanceState){

ﻩﻩsuper.onCreate(savedInstanceState);

setContentView(R.layout.activity_calculator);

ﻩﻩ//布局

ﻩ//动态的设置Gridlayout中控件的宽度,使其全屏匹配屏幕

GridLayoutgridlayout=(GridLayout)findViewById(R.id.gridlayout_c);

ﻩﻩViewTreeObservervto=gridlayout.getViewTreeObserver();

ﻩvto.addOnGlobalLayoutListener(newOnGlobalLayoutListener() {

ﻩpublicvoidonGlobalLayout(){

GridLayoutgl=(GridLayout)findViewById(R.id.gridlayout_c);

fillview(gl);

ﻩﻩﻩﻩViewTreeObserverobs= gl.getViewTreeObserver();

ﻩﻩobs.removeGlobalOnLayoutListener(this);

ﻩﻩ}

ﻩ});

ﻩ// 获得每个按钮的点击事件

ﻩﻩinitViews();

}

ﻩ// 为每个Button设置了onClick属性

ﻩpublicvoidonClick(Viewview) {

switch(view.getId()){

ﻩﻩ//0-9

ﻩﻩcaseR.id.btn_0:

button0Function();

ﻩﻩbreak;

ﻩcaseR.id.btn_1:

ﻩbutton1Function();

ﻩﻩbreak;

ﻩcaseR.id.btn_2:

button2Function();

ﻩﻩbreak;

ﻩcaseR.id.btn_3:

ﻩbutton3Function();

ﻩbreak;

ﻩﻩcaseR.id.btn_4:

ﻩbutton4Function();

ﻩﻩﻩbreak;

ﻩcaseR.id.btn_5:

ﻩﻩbutton5Function();

ﻩﻩbreak;

ﻩﻩcaseR.id.btn_6:

ﻩbutton6Function();

ﻩﻩbreak;

caseR.id.btn_7:

ﻩﻩbutton7Function();

ﻩbreak;

ﻩcaseR.id.btn_8:

ﻩﻩbutton8Function();

ﻩﻩﻩbreak;

ﻩcaseR.id.btn_9:

ﻩﻩﻩbutton9Function();

break;

ﻩﻩcaseR.id.btn_dian:

ﻩbuttonDianFunction();

ﻩﻩﻩbreak;

ﻩ// C

ﻩﻩcase R.id.btn_c:

ﻩﻩbuttonClear();

ﻩbreak;

//DEL

ﻩcaseR.id.btn_del:

ﻩbuttonDel();

ﻩbreak;

ﻩ//+

ﻩcaseR.id.btn_jia:

buttonJiaYunSuanFunction();

break;

//-

ﻩcaseR.id.btn_jian:

ﻩﻩbuttonJianYunSuanFunction();

ﻩﻩﻩbreak;

ﻩﻩ//X

case R.id.btn_cheng:

ﻩﻩbuttonChengYunSuanFunction();

break;

ﻩﻩ//÷

ﻩcaseR.id.btn_chu:

ﻩﻩbuttonChuYunSuanFunction();

ﻩﻩﻩbreak;

ﻩ//=

ﻩcaseR.id.btn_dengyu:

ﻩﻩbuttonDengYuFunction();

ﻩﻩbreak;

default:

ﻩButtonb =(Button)view;

ﻩToast.makeText(this,b.getText(), Toast.LENGTH_SHORT).show();

ﻩbreak;

}

}

ﻩ/* =============================*/

/* private私有方法*/

/*===========================*/

ﻩprivatevoidfillview(GridLayoutgl){

ﻩButtonbuttontemp;

ﻩGridLayout.LayoutParamsparams;

ﻩfor(inti= 0; i< gl.getChildCount(); i++){

ﻩﻩﻩbuttontemp=(Button) gl.getChildAt(i);

ﻩﻩparams =(LayoutParams) buttontemp.getLayoutParams();

ﻩparams.width=(gl.getWidth() /gl.getColumnCount())

ﻩ-params.rightMargin -params.leftMargin;

ﻩﻩbuttontemp.setLayoutParams(params);

ﻩﻩ}

ﻩ}

ﻩ// 初始化所有的控件

privatevoidinitViews(){

ﻩtextView= (TextView)findViewById(R.id.calculate_textview);

ﻩmCopy=(Button)findViewById(R.id.fz);

mCopy.setOnClickListener(new OnClickListener(){

ﻩﻩ@Override

ﻩﻩﻩpublicvoidonClick(Viewv){

ﻩﻩ//TODO自动生成的方法存根

ﻩﻩﻩif (textView.getText().toString().equals("")) {

ﻩﻩToast.makeText(Calculator.this,"結果為空",Toast.LENGTH_SHORT)

ﻩﻩﻩ.show();

ﻩﻩﻩreturn;

ﻩ}

ﻩﻩ}

ﻩ});

}

ﻩprivatevoid printDebugInfo(String str) {

if (isDebug){

ﻩLog.i("TAG","Debug:

 "+str);

ﻩﻩ}

}

ﻩ//往Textv的尾部追加内容

ﻩprivatevoidappendTextView(Stringstr){

CharSequencetext =textView.getText();

ﻩﻩtext=text + str;

ﻩprintDebugInfo(text.toString());

textView.setText(text);

ﻩ}

//添加数字按钮的功能start===========================

ﻩ//对于0的输入的注意点:

//1、当还没有输入时,就是textview显示为0时,什么都不用做,继续保持为0

//2、当textview的显示不为0时,在textview的尾部追加一个0

//问题:

判断条件怎样来确定。

有两个方案

ﻩ//1、获取textview的内容,然后调用比较的方法,是否和0相等

//2、设置一个Boolean标记,当textview第一次输入不为0时,将标记设为true,然后根据标记来进行0按钮的功能实现

//对比:

方案一有点简单,缺点相对来说耗性能。

每次都要读取textview的值然后进行比较;方案二有点性能上比第一

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2