设计目的
使用Android 5.0技术开发一个个人理财通系统,通过该系统,可以随时随地的记录用户的收入及支出等信息。
开发环境
操作系统: Windows 7。
JDK环境: Java SE Development KET(JDK) version 7。
开发工具: Eclipse 4.4.2+Android 5.0。
开发语言: Java、XML。
数据库管理软件: SQLite 3。
运行平台: Windows、Linux各版本。
分辨率: 最佳效果1440像素 * 900像素
需求分析
为了更好地记录每月的收入及支出,这里开发了一款基于Android 系统的个人理财通软件。通过该软件,用户可以随时随地地记录自己的收入、支出等信息;另外,为了保护自己的隐私,还可以为个人理财通设置密码。
概要设计
4.1设计思想:
①操作简单方便、界面简洁美观。
②方便的对收入及支出进行增、删、改、查等操作。
③通过便签方便的记录用户的计划。
④能够通过设置密码保证程序的安全性。
⑤系统运行稳定、安全可靠。
4.2系统功能结构图
4.3系统操作流程图
数据库设计
5.1创建数据库
个人理财通系统在创建数据库时,使用通过使用SQLiteOpenHelper类的构造函数来实现的,实现代码如下。
private static final int VERSION = 1;
private static final String DBNAME = "account.db";
public DBOpenHelper(Context context){
super(context, DBNAME, null, VERSION);
}
5.2数据库操作
5.2.1打开关闭数据库
在SQLite数据库中,每个数据库保存在一个单独的文件中,使用“sqlite3+数据库文件名”的方式可以打开数据库文件,如果指定文件不存在,则自动创建新文件。使用的命令如下:
cd /data/data/com.mingrisoft/databases
sqlite3 mr
要退出sqlite则使用“.exit”命令
5.2.2数据库表设计
5.2.3添加数据
public void add(Tb_inaccount tb_inaccount) {
db.execSQL(
"insert into tb_inaccount (_id,money,time,type,handler,mark) "
+ "values (?,?,?,?,?,?)",
new Object[] { tb_inaccount.getid(), tb_inaccount.getMoney(),
tb_inaccount.getTime(), tb_inaccount.getType(),
tb_inaccount.getHandler(), tb_inaccount.getMark() });
}
5.2.4修改数据
public void update(Tb_inaccount tb_inaccount) {
// db = helper.getWritableDatabase();// 初始化SQLiteDatabase对象
// 执行修改收入信息操作
db.execSQL(
"update tb_inaccount set money = ?,time = ?,type = ?,handler = ?,"
+ "mark = ? where _id = ?",
new Object[] { tb_inaccount.getMoney(), tb_inaccount.getTime(),
tb_inaccount.getType(), tb_inaccount.getHandler(),
tb_inaccount.getMark(), tb_inaccount.getid() });
}
5.2.5删除数据
public void detele(Integer... ids) {
if (ids.length > 0){// 判断是否存在要删除的id
StringBuffer sb = new StringBuffer();// 创建StringBuffer对象
for (int i = 0; i < ids.length; i++){// 遍历要删除的id集合
sb.append('?').append(',');// 将删除条件添加到StringBuffer对象中
}
sb.deleteCharAt(sb.length() - 1);// 去掉最后一个“,“字符
// db = helper.getWritableDatabase();// 初始化SQLiteDatabase对象
// 执行删除收入信息操作
db.execSQL("delete from tb_inaccount where _id in (" + sb + ")",
(Object[]) ids);
}
}
5.2.6查询数据
public List getScrollData(int start, int count) {
List tb_inaccount = new ArrayList();// 创建集合对象
// db = helper.getWritableDatabase();// 初始化SQLiteDatabase对象
// 获取所有收入信息
Cursor cursor = db.rawQuery("select * from tb_inaccount limit ?,?",
new String[] { String.valueOf(start), String.valueOf(count) });
while (cursor.moveToNext()){// 遍历所有的收入信息
// 将遍历到的收入信息添加到集合中
tb_inaccount.add(new Tb_inaccount(cursor.getInt(cursor
.getColumnIndex("_id")), cursor.getDouble(cursor
.getColumnIndex("money")), cursor.getString(cursor
.getColumnIndex("time")), cursor.getString(cursor
.getColumnIndex("type")), cursor.getString(cursor
.getColumnIndex("handler")), cursor.getString(cursor
.getColumnIndex("mark"))));
}
cursor.close();// 关闭游标
return tb_inaccount;// 返回集合
}
详细设计与实现
6.1收入/支出管理模块主要包括4部分,分别是“新增收入/支出”、“收入/支出信息浏览”、“修改/删除支出信息”和“收入/支出信息汇总图表”,其中,“新增收入/支出”用来添加收入/支出信息,“收入/支出信息浏览”用来显示所有的收入/支出信息,“修改/删除收入/支出出信息”用来根据编号修改或者删除收入/支出信息,“收入/支出信息汇总图表”用来统计收入/支出信息并以图表形式显示。收入/支出流程图如图所示
6.2便签管理模块主要包括3部分,分别是“新增便签”、“便签信息浏览”和“修改/删除便签信息”,其中,“新增便签”用来添加便签信息,“便签信息浏览”用来显示所有的便签信息,“修改/删除便签信息”用来根据编号修改或者删除便签信息。
6.3系统设置模块主要对个人理财通中的登录密码进行设置
6.4登录模块设计:登录模块主要是通过输入正确的密码进入个人理财通的主窗体,它可以提高程序的安全性,保护数据资料不外泄。
6.5个人理财通各界面如图所示:
总结
从十二月开始,经过快半个月的学习奋斗,大作业到现在终于基本上已经完成了。在这段日子里从系统的需求分析开始,然后到对系统功能进行详细设计,最后到系统的编码实现,最后到大作业的完成,我通过查阅大量的图书与文献自学相关知识,同时也诚心请教同学和老师,通过与他们的交流,我学到了很多专业知识和经验,让我受益匪浅,对相关专业知识有了一个新的认识,当遇到有不认识或未曾遇到过的错误,上网寻找资料, 解决难题,让我懂得网上的资源是十分之多,令我获益良多,这些锻炼了我坚强的意志,同时也使我的专业知识更加扎实,让我在以后的人生职业道路上可以更加的自信和顽强。虽然有些功能没有完全实现,但希望经过后期的维护肯定能达到使用要求,更好完善自己系统的功能。
参考文献
[1] 徐娜子.Android江湖[M].电子工业出版社.2011.11
[2] 郭志宏. Android应用开发详解[M].电子工业出版社.2010.
[3] 明日科技Android从入门到精通[M].清华大学出版社.2012.9
[4] 杨丰盛.Android应用开发揭秘[M].机械I业出版社. 2010.
[5] 张仕成.基于Google Android平台的应用程序开发与研究[j].电脑知识与技术2009. (5)
[6] 靳岩,姚尚朗. Google Android开发入门与sss实践[M].人民邮电出版社.2009
附录部分源代码
package com.mingrisoft.activity;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.TextView;
public class MainActivity extends Activity {
GridView gvInfo;// 创建GridView对象
// 定义字符串数组,存储系统功能
String[] titles = new String[] { "新增支出", "新增收入", "我的支出", "我的收入",
"数据管理","系统设置", "收支便签", "帮助","退出" };
// 定义int数组,存储功能对应的图标
int[] images = new int[] { R.drawable.addoutaccount,
R.drawable.addinaccount, R.drawable.outaccountinfo,
R.drawable.inaccountinfo, R.drawable.showinfo, R.drawable.sysset,
R.drawable.accountflag, R.drawable.help,R.drawable.exit };
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
gvInfo = (GridView) findViewById(R.id.gvInfo);// 获取布局文件中的gvInfo组件
pictureAdapter adapter = new pictureAdapter(titles, images, this);// 创建pictureAdapter对象
gvInfo.setAdapter(adapter);// 为GridView设置数据源
gvInfo.setOnItemClickListener(new OnItemClickListener() {// 为GridView设置项单击事件
@Override
public void onItemClick(AdapterView> arg0, View arg1, int arg2,
long arg3) {
Intent intent = null;// 创建Intent对象
switch (arg2) {
case 0:
intent = new Intent(MainActivity.this, AddOutaccount.class);// 使用AddOutaccount窗口初始化Intent
startActivity(intent);// 打开AddOutaccount
break;
case 1:
intent = new Intent(MainActivity.this, AddInaccount.class);// 使用AddInaccount窗口初始化Intent
startActivity(intent);// 打开AddInaccount
break;
case 2:
intent = new Intent(MainActivity.this, Outaccountinfo.class);// 使用Outaccountinfo窗口初始化Intent
startActivity(intent);// 打开Outaccountinfo
break;
case 3:
intent = new Intent(MainActivity.this, Inaccountinfo.class);// 使用Inaccountinfo窗口初始化Intent
startActivity(intent);// 打开Inaccountinfo
break;
case 4:
intent = new Intent(MainActivity.this, Showinfo.class);// 使用Showinfo窗口初始化Intent
startActivity(intent);// 打开Showinfo
break;
case 5:
intent = new Intent(MainActivity.this, Sysset.class);// 使用Sysset窗口初始化Intent
startActivity(intent);// 打开Sysset
break;
case 6:
intent = new Intent(MainActivity.this, Accountflag.class);// 使用Accountflag窗口初始化Intent
startActivity(intent);// 打开Accountflag
break;
case 7:
intent = new Intent(MainActivity.this, Help.class);// 使用Help窗口初始化Intent
startActivity(intent);// 打开Help
break;
case 8:
finish();// 关闭当前Activity
}
}
});
}
}
class pictureAdapter extends BaseAdapter{// 创建基于BaseAdapter的子类
private LayoutInflater inflater;// 创建LayoutInflater对象
private List