失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 安卓课程设计之记账本_基于Android个人用户记账本系统课程设计报告

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

时间:2024-04-01 15:35:50

相关推荐

安卓课程设计之记账本_基于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)

publicvoidListViewRecord() {

// 获取所有账单信息

ridlist= rid.findAll();

ArrayList> list = newArrayList>();

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

for(RecordInfo record : ridlist) {

Map map = newHashMap();

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

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

sum= sum+ record.getMoney();

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

list.add(map);

}

SimpleAdapter listAdapter = newSimpleAdapter(MainActivity.this, list,

R.layout.details_style, newString[] { "type", "money",

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

R.id.tv_payway});

lv_details.setAdapter(listAdapter);

}

4.2记账页面

4.2.1显示记账页面(RecordActivity)

privatevoidexecuteExpression() {

try{

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

total= Calculator.execute(content);

} catch(Exception e) {

total= "0";

return;

}

et_money.setText(total);

}

classButtonClickListener implementsOnClickListener {

@Override

publicvoidonClick(View v) {

Button button = (Button) v;

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

switch(button.getId()) {

caseR.id.bt_one:

content= content+ "1";

et_money.setText(content);

break;

caseR.id.bt_two:

content= content+ "2";

et_money.setText(content);

break;

caseR.id.bt_three:

content= content+ "3";

et_money.setText(content);

break;

caseR.id.bt_four:

content= content+ "4";

et_money.setText(content);

break;

caseR.id.bt_five:

content= content+ "5";

et_money.setText(content);

break;

caseR.id.bt_six:

content= content+ "6";

et_money.setText(content);

break;

caseR.id.bt_seven:

content= content+ "7";

et_money.setText(content);

break;

caseR.id.bt_eight:

content= content+ "8";

et_money.setText(content);

break;

caseR.id.bt_nine:

content= content+ "9";

et_money.setText(content);

break;

caseR.id.bt_zero:

content= content+ "0";

et_money.setText(content);

break;

caseR.id.bt_plus:

content= content+ "+";

et_money.setText(content);

break;

caseR.id.bt_min:

content= content+ "-";

et_money.setText(content);

break;

caseR.id.bt_mud:

content= content+ "*";

et_money.setText(content);

break;

caseR.id.bt_div:

content= content+ "/";

et_money.setText(content);

break;

caseR.id.bt_backspace:

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

et_money.setText(content);

break;

caseR.id.bt_point:

content= content+ ".";

et_money.setText(content);

break;

caseR.id.bt_left:

content= content+ "(";

et_money.setText(content);

break;

caseR.id.bt_right:

content= content+ ")";

et_money.setText(content);

break;

caseR.id.bt_equal:

executeExpression();

content= "";

break;

}

}}

4.3 分类帐单

4.3.1显示分类账单内容(TypeActivity)

publicvoidshow() {

for(RecordInfo record : recordlist) {

String type = record.getType();

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

sum_food= record.getMoney() + sum_food;

}elseif(type.equals("水果")){

sum_fruit= record.getMoney() + sum_fruit;

}elseif(type.equals("娱乐")){

sum_fun= record.getMoney() + sum_fun;

}elseif(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)

classonclickListener implementsOnClickListener {

@Override

publicvoidonClick(View v) {

switch(v.getId()) {

caseR.id.tv_cash:

tv_cash.setBackgroundColor(color.darker_gray);

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

.show();

type= "现金";

break;

caseR.id.tv_card:

tv_card.setBackgroundColor(color.darker_gray);

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

.show();

type= "银行卡";

break;

caseR.id.tv_alipay:

tv_alipay.setBackgroundColor(color.darker_gray);

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

.show();

type= "支付宝";

break;

caseR.id.bt_ok:

booleanb = 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 = newIntent(IncomeActivity.this,

MainActivity.class);

startActivity(intent);

IncomeActivity.this.finish();

}

}

break;

caseR.id.bt_quit:

Intent intent1 = newIntent(IncomeActivity.this,

MainActivity.class);

startActivity(intent1);

IncomeActivity.this.finish();

break;

}

}

}

4.5更新用户信息页面

4.5.1修改账户资金(UpdateCountActivity)

publicvoidtoAdd(View v){

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

booleanb = false;

b = cid.updateCount(type,money);

if(b){

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

startActivity(intent);

UpdateCountActivity.this.finish();

}

}

4.6我的账户页面

4.6.1显示账户信息

classonclickListener implementsOnClickListener{

@Override

publicvoidonClick(View v) {

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

switch(v.getId()){

caseR.id.rl_cash:

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

startActivity(intent);

CountActivity.this.finish();

break;

caseR.id.rl_card:

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

startActivity(intent);

CountActivity.this.finish();

break;

caseR.id.rl_alipay:

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

startActivity(intent);

CountActivity.this.finish();

break;

}

}

}

publicvoidListViewCount() {

// 获取所有账户信息

cinfo= cid.find();

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

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

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

}

publicvoidtoBack(View view){

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

startActivity(intent);

CountActivity.this.finish();

}

publicvoidtoIncome(View view){

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

startActivity(intent);

CountActivity.this.finish();

}

4.7对账户进行操作

4.7.1查找账户信息

publicCountInfo find() {

SQLiteDatabase db = dbHelper.getReadableDatabase();

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

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

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

CountInfo list = newCountInfo();

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 = newCountInfo(1001, cash, card, alipay);

}

db.close();

cursor.close();

returnlist;

}

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

@Override

publicbooleanupdateCount(RecordInfo record) {

if(null!= record) {

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

CountInfo count = find();

SQLiteDatabase db = dbHelper.getWritableDatabase();

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

String sql = null;

doublemoney = 0.0;

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

money = count.getCash();

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

} elseif(payway.equals("银行卡")) {

money = count.getCard();

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

} elseif(payway.equals("支付宝")) {

money = count.getAlipay();

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

}

money = money - record.getMoney();

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

db.close();

returntrue;

} else{

returnfalse;

}

}

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

publicbooleanupdateCount(String type ,doublemoney) {

if(null!= type) {

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

SQLiteDatabase db = dbHelper.getWritableDatabase();

String sql = null;

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

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

} elseif(type.equals("银行卡")) {

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

} elseif(type.equals("支付宝")) {

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

}

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

db.close();

returntrue;

} else{

returnfalse;

}

}

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

@Override

publicbooleanIncomeCount(String type, doublemoney) {

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;

} elseif(type.equals("银行卡")) {

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

money = count.getCard() + money;

} elseif(type.equals("支付宝")) {

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

money = count.getAlipay() + money;

}

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

db.close();

returntrue;

} else{

returnfalse;

}

}

}

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)");

}

五、总结

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

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

如果觉得《安卓课程设计之记账本_基于Android个人用户记账本系统课程设计报告》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。