基于Android个人用户记账本系统课程设计报告


      记账本的设计与实现

一、需求分析

1.1特性需求分析

(1):易操作和功能简单明确不令人误解。一个良好的个人记账本应该功能明确,用户可以很明了的通过界面介绍明白各项功能的实现方法大,而不是看到界面不知道按钮的具体用途,及操作简单,界面友好易懂。用户可以根据手机界面很清楚的进行记账,删除,查账,更改等功能。

(2):软件功能流畅,软件在运行不能发生崩溃,卡顿等问题,整个页面操作起来很流畅。

(3)软件以维护,系统各个模块设计应该很明确,核心代码处应有必要的注释,使得今后的软件维护能够顺利地进行。

1.2功能需求分析

用户应该能实现添加账单,查询账户信息,显示消费记录,显示余额四大功能。

(1)用户添加账单功能:利用计算器输入价钱并选择消费用途,例如(餐饮,娱乐,水果,日常),并选择消费方式(现金,支付宝,银行卡)。

(2)查询账户信息:用户可以在我的账户页面查询消费记录,详细地记录了消费用途,消费金额以及支付方式,同时也记录了消费金额及账户余额。并且可以进行修改账户和添加收入等操作。

(3)显示消费记录:系统制定出一份分类帐单,详细地记录了消费用途及消费金额。

 

 

 

 

 

 

 

 

 

 

 

 

 

二、总体设计

2.1系统总功能结构图

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2.2 E-R模型

2.2.1 总的E-R模型

 

 

 

                                                 

 

 

 

 

 

2.2.2 记录的E-R模型

 

 

 

 

 

 

 

 

 

 

 

 

2.2.3 账户的E-R模型

 

 

 

 

 

 

 

 

 

 

2.3数据库设计

 

 

 

 

 

 

 

 

三、系统测试

3.1查询账单

进入首页便是账单、余额、消费金额

3.2 添加记录

经操作,可以手动输入,也可以通过计算器计算输入

3.3 查看个人账户

可以查看,可以修改个人账户,也可以添加收入

3.4 查看分类消费

点击余额,可以查看个人消费的分类信息

3.5总结

经过测试,程序可以使用。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

四、系统实现

4.1主页

 

 

 

4.1.2显示主页的内容(MainActivity

public void ListViewRecord() {

// 获取所有账单信息

ridlist = rid.findAll();

ArrayList<Map<String, Object>> list = new ArrayList<Map<String, Object>>();

// 要将goodslist中的内容格式改变,让适配器可识别

for (RecordInfo record : ridlist) {

 

Map<String, Object> map = new HashMap<String, Object>();

map.put("type", record.getType());

map.put("money", "¥" +record.getMoney());

sum = sum + record.getMoney();

map.put("payway", record.getPayway());

list.add(map);

 

}

 

SimpleAdapter listAdapter = new SimpleAdapter(MainActivity.this, list,

R.layout.details_style, new String[] { "type", "money",

"payway" }, new int[] { R.id.tv_type, R.id.tv_money,

R.id.tv_payway });

lv_details.setAdapter(listAdapter);

}

4.2记账页面

 

 

 

4.2.1显示记账页面(RecordActivity

private void executeExpression() {  

        try {  

            // 调用第三方jar包来执行运算  

            total = Calculator.execute(content);  

        } catch (Exception e) {   

            total = "0";

            return;  

        }  

        et_money.setText(total);  

    }  

class ButtonClickListener implements OnClickListener {

 

@Override

public void onClick(View v) {

Button button = (Button) v;

content = et_money.getText().toString();

switch (button.getId()) {

case R.id.bt_one:

content = content + "1";

et_money.setText(content);  

break;

case R.id.bt_two:

content = content + "2";

et_money.setText(content);  

break;

case R.id.bt_three:

content = content + "3";

et_money.setText(content);  

break;

case R.id.bt_four:

content = content + "4";

et_money.setText(content);  

break;

case R.id.bt_five:

content = content + "5";

et_money.setText(content);  

break;

case R.id.bt_six:

content = content + "6";

et_money.setText(content);  

break;

case R.id.bt_seven:

content = content + "7";

et_money.setText(content);  

break;

case R.id.bt_eight:

content = content + "8";

et_money.setText(content);  

break;

case R.id.bt_nine:

content = content + "9";

et_money.setText(content);  

break;

case R.id.bt_zero:

content = content + "0";

et_money.setText(content);  

break;

case R.id.bt_plus:

content = content + "+";

et_money.setText(content);  

break;

case R.id.bt_min:

content = content + "-";

et_money.setText(content);  

break;

case R.id.bt_mud:

content = content + "*";

et_money.setText(content);  

break;

case R.id.bt_div:

content = content + "/";

et_money.setText(content);  

break;

case R.id.bt_backspace:

content = content.substring(0, content.length()-1);

et_money.setText(content);  

break;

case R.id.bt_point:

content = content + ".";

et_money.setText(content);  

break;

case R.id.bt_left:

content = content + "(";

et_money.setText(content);  

break;

case R.id.bt_right:

content = content + ")";

et_money.setText(content);  

break;

case R.id.bt_equal:

executeExpression();

content = "";

break;

}

}}

4.3 分类帐单

 

 

 

4.3.1显示分类账单内容(TypeActivity

public void show() {

 

for (RecordInfo record : recordlist) {

String type = record.getType();

if (type.equals("餐饮")) {

sum_food = record.getMoney() + sum_food;

}else if(type.equals("水果")){

sum_fruit = record.getMoney() + sum_fruit;

}else if(type.equals("娱乐")){

sum_fun = record.getMoney() + sum_fun;

}else if(type.equals("日常")){

sum_daily = record.getMoney() + sum_daily;

}

}

tv_food.setText("¥" + sum_food);

tv_fruit.setText("¥" + sum_fruit);

tv_fun.setText("¥" + sum_fun);

tv_daily.setText("¥" + sum_daily);

}

 

4.4收入页面

 

 

 

4.4.1添加收入(IncomeActivity

class onclickListener implements OnClickListener {

 

@Override

public void onClick(View v) {

switch (v.getId()) {

case R.id.tv_cash:

tv_cash.setBackgroundColor(color.darker_gray);

Toast.makeText(IncomeActivity.this, "现金", Toast.LENGTH_SHORT)

.show();

type = "现金";

break;

case R.id.tv_card:

tv_card.setBackgroundColor(color.darker_gray);

Toast.makeText(IncomeActivity.this, "银行卡", Toast.LENGTH_SHORT)

.show();

type = "银行卡";

break;

case R.id.tv_alipay:

tv_alipay.setBackgroundColor(color.darker_gray);

Toast.makeText(IncomeActivity.this, "支付宝", Toast.LENGTH_SHORT)

.show();

type = "支付宝";

break;

case R.id.bt_ok:

boolean b = false;

if (null == et_money.getText().toString().trim()

|| et_money.getText().toString().trim().equals("")) {

Toast.makeText(IncomeActivity.this, "收入为0",

Toast.LENGTH_SHORT).show();

} else {

money = Double.parseDouble(et_money.getText().toString());

b = cid.IncomeCount(type, money);

if (b) {

Intent intent = new Intent(IncomeActivity.this,

MainActivity.class);

startActivity(intent);

IncomeActivity.this.finish();

}

 

}

break;

case R.id.bt_quit:

Intent intent1 = new Intent(IncomeActivity.this,

MainActivity.class);

startActivity(intent1);

IncomeActivity.this.finish();

break;

 

}

 

}

 

}

4.5更新用户信息页面

 

 

 

4.5.1修改账户资金(UpdateCountActivity

public void toAdd(View v){

money = Double.parseDouble(et_money.getText().toString());

boolean b = false ;

b = cid.updateCount(type,money);

if(b){

Intent intent = new Intent(UpdateCountActivity.this,CountActivity.class);

startActivity(intent);

UpdateCountActivity.this.finish();

}

 

}

 

4.6我的账户页面

 

 

 

4.6.1显示账户信息

class onclickListener implements OnClickListener{

 

@Override

public void onClick(View v) {

Intent intent = new Intent(CountActivity.this,UpdateCountActivity.class);

switch(v.getId()){

case R.id.rl_cash:

 

intent.putExtra("type","现金");

startActivity(intent);

CountActivity.this.finish();

break;

case R.id.rl_card:

intent.putExtra("type","银行卡");

startActivity(intent);

CountActivity.this.finish();

break;

case R.id.rl_alipay:

intent.putExtra("type","支付宝");

startActivity(intent);

CountActivity.this.finish();

break;

}

 

}

 

}

public void ListViewCount() {

// 获取所有账户信息

cinfo = cid.find();

 

tv_cash.setText("¥"+cinfo.getCash());

tv_card.setText("¥"+cinfo.getCard()+"");

tv_alipay.setText("¥"+cinfo.getAlipay()+"");

 

}

 

public void toBack(View view){

Intent intent = new Intent(CountActivity.this,MainActivity.class);

startActivity(intent);

CountActivity.this.finish();

}

 

public void toIncome(View view){

Intent intent = new Intent(CountActivity.this,IncomeActivity.class);

startActivity(intent);

CountActivity.this.finish();

}

4.7对账户进行操作

4.7.1查找账户信息

public CountInfo find() {

SQLiteDatabase db = dbHelper.getReadableDatabase();

String sql = "select * from tbl_count where uid = 1001";

Cursor cursor = db.rawQuery(sql, null);

// 用一个list来存储每一个GoodsInfo 对象的值

CountInfo list = new CountInfo();

 

while (cursor.moveToNext()) {

Double cash = cursor.getDouble(cursor.getColumnIndex("cash"));

Double card = cursor.getDouble(cursor.getColumnIndex("card"));

Double alipay = cursor.getDouble(cursor.getColumnIndex("alipay"));

 

list = new CountInfo(1001, cash, card, alipay);

}

 

db.close();

cursor.close();

return list;

}

 

4.7.2更新账户信息(购买后修改)

@Override

public boolean updateCount(RecordInfo record) {

if (null != record) {

// 获取一个可写入的数据库

CountInfo count = find();

SQLiteDatabase db = dbHelper.getWritableDatabase();

String payway = record.getPayway().trim();

String sql = null;

double money = 0.0;

if (payway.equals("现金")) {

money = count.getCash();

sql = "update tbl_count set cash=? where uid=1001";

} else if (payway.equals("银行卡")) {

money = count.getCard();

sql = "update tbl_count set card=? where uid=1001";

} else if (payway.equals("支付宝")) {

money = count.getAlipay();

sql = "update tbl_count set alipay=? where uid=1001";

}

money = money - record.getMoney();

db.execSQL(sql, new Object[] {money});

db.close();

return true;

} else {

return false;

}

 

}

4.7.3更新账户信息(直接修改账户信息)

public boolean updateCount(String type ,double money) {

if (null != type) {

// 获取一个可写入的数据库

SQLiteDatabase db = dbHelper.getWritableDatabase();

String sql = null;

if (type.equals("现金")) {

sql = "update tbl_count set cash=? where uid=1001";

} else if (type.equals("银行卡")) {

sql = "update tbl_count set card=? where uid=1001";

} else if (type.equals("支付宝")) {

sql = "update tbl_count set alipay=? where uid=1001";

}

db.execSQL(sql, new Object[] {money});

db.close();

return true;

} else {

return false;

}

}

4.7.4更新账户信息(添加收入)

@Override

public boolean IncomeCount(String type, double money) {

CountInfo count = find();

if (null != type) {

// 获取一个可写入的数据库

SQLiteDatabase db = dbHelper.getWritableDatabase();

String sql = null;

if (type.equals("现金")) {

sql = "update tbl_count set cash=? where uid=1001";

money = count.getCash() + money;

} else if (type.equals("银行卡")) {

sql = "update tbl_count set card=? where uid=1001";

money = count.getCard() + money;

} else if (type.equals("支付宝")) {

sql = "update tbl_count set alipay=? where uid=1001";

money = count.getAlipay() + money;

}

 

db.execSQL(sql, new Object[] {money});

db.close();

return true;

} else {

return false;

}

}

}

4.9初始化数据库

public void onCreate(SQLiteDatabase db) {

db.execSQL("create table if not exists tbl_users"

+ "(uid INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL , uname String ,"

+ "upwd String )");

db.execSQL("insert into tbl_users values (1001,'admin','admin')");

db.execSQL("create table if not exists tbl_admin"

+ "(rid INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL , type String ,"

+ "money Double ,payway String)");

db.execSQL("create table if not exists tbl_count"

+ "(cid INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL , uid Integer, cash Double ,"

+ "card Double ,alipay Double)");

db.execSQL("insert into tbl_count values (1,1001,0,0,0)");

 

}

五、总结

这次的课程设计时间比较短,所以完成的项目也不算完美,不过还是自己本身的问题,在这个学期学习的并不好,基础比较差。真正来做项目的时候就显示出了自己的不足,很多都不懂,好多都是现学的。项目并不是很难,不过确实能学到很多东西。

在系统测试过程中,系统可以在模拟器和真机上正常运行这些功能,能够满足系统的基本要求。但是也能发现系统中存在的小缺陷,对于这些小缺陷,也尽力作了修改。另外,在界面美化和流程控制方面还有待优化,以提高用户的体

 

 

 

 

 

 

 

 

 

 

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM