安卓课程设计之记账本_基于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> list = new ArrayList>();
// 要将goodslist中的内容格式改变,让适配器可识别
for (RecordInfo record : ridlist) {
Map map = new HashMap();
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)");
}
五、总结
这次的课程设计时间比较短,所以完成的项目也不算完美,不过还是自己本身的问题,在这个学期学习的并不好,基础比较差。真正来做项目的时候就显示出了自己的不足,很多都不懂,好多都是现学的。项目并不是很难,不过确实能学到很多东西。
在系统测试过程中,系统可以在模拟器和真机上正常运行这些功能,能够满足系统的基本要求。但是也能发现系统中存在的小缺陷,对于这些小缺陷,也尽力作了修改。另外,在界面美化和流程控制方面还有待优化,以提高用户的体
安卓课程设计之记账本_基于Android个人用户记账本系统课程设计报告相关推荐
- 项目_基于Android的信息化医疗服务系统
文章目录 基于Android的信息化医疗服务系统 1.前言 2.项目背景 3.概要设计 3.1.系统概要 3.2.系统结构 3.2.功能设计 3.2.1.管理员 3.2.2.医生 3.2.3.用户 3 ...
- 基于Android的多功能日程表,基于android的多功能日程表系统的设计与实现.doc
最新精品文档,知识共享! 烟台大学毕业论文(设计)任务书 院(系):计算机与控制工程学院 姓名 于文英 学号 201158504444 毕业届别 2015 专业 软件工程 毕业论文(设计)题目 基于A ...
- 基于Android的app公交查询论文,基于Android平台的公交查询系统的设计与实现.doc
摘要:本系统是在Android开发平台上,基于百度地图API实现的.解决的问题是随着城市的不断扩增,所导致的盐城市公交信息不能有效分享的情况.现在人们出行时的选择越来越多,但是公交仍然是大部分市民的首 ...
- android日记 设计说明,基于Android的掌上校园系统的设计与实现毕业论文.doc
中文题目:基于Android的掌上校园系统的设计与实现 外文题目:THE DESIGN AND IMPLEMENTATION OF A HANDHELD CAMPUS SYSTEM BASED ON ...
- java ee 物联网 论文_基于物联网的智能社区互助系统的设计研究论文
基于物联网的智能社区互助系统的设计研究论文 1 绪论 目前行业内的智能社区解决方案分为两大阵营,无线阵营和总线阵营,无线阵营主张以互联网为平台,底层传感网使用短距离无线的传输网,并通过耦合两个异构网络 ...
- 基于单片机的自动追日系统设计_基于单片机的自动浇花系统的设计
龙源期刊网 http://www.qikan.com.cn 基于单片机的自动浇花系统的设计 作者:吴蓓 张阳 来源:<现代信息科技> 2018 年第 03 期 摘 要:为了解决人们生活中由 ...
- 基于Java的设计开题报告_基于Java的电子邮件的收发系统的设计与实现开题报告...
基于Java的电子邮件的收发系统的设计与实现开题报告 (8页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.90 积分 开题报告 基于 Java 的电子 ...
- java网页作业提交_基于JAVA网上作业提交批改系统的设计(SQL)(含录像)
基于JAVA网上作业提交批改系统的设计(SQL)(含录像)(毕业论文15000字,程序代码,SQLserver数据库) 摘 要 随着社会的进步,网络技术的发展为教育界提供了一片崭新的空间,传统的教学 ...
- MySQL长途售票系统_基于SSH的长途汽车票务售票系统的设计(Struts2,MySQL)(含录像)...
基于SSH的长途汽车票务售票系统的设计(Struts2,MySQL)(含录像)(毕业论文说明书14000字,程序代码,MySQL数据库)摘 要 随着科学技术的不断提高,计算机科学日渐成熟,其强大的功 ...
最新文章
- 2、MySQL使用(DISTINCT)过滤重复数据
- mysql数据库utf-8编码
- 从人工到机器智能,盗版监测在 AI 时代如何破局?
- C#实验室常用软件-Windows Live Writer
- TWiki 语法格式(TWiki语法教程及TWiki使用技巧)
- buildroot自带程序(库)编译并安装
- 有线网卡驱动_WDS如何为boot.wim或install.wim添加驱动
- JavaWeb书城项目(尚硅谷视频整理自用)
- Excel查询两列值的差异 -- VLOOPUP
- 强化学习10——迭代学习
- lay-verify的失效情况
- 为了讨好程序员,阿里云和 Costa 开了家码农咖啡馆
- 策划入门(三)创意的价值和如何写故事
- 微信小程序base64图片转换临时链接
- 《JAVASE系列》抽象类与接口
- vlookup java_Vlookup的VBA错误处理
- redisson中的看门狗机制总结
- idea全局替换yml 报错:you have entered malformed replacement
- 安卓手机阅读器_【BOOX彩屏】彩色墨水屏阅读器,BOOX Poke2 Color 使用体验
- Windows server2008 R2显卡驱动和Windows server2012 R2兼容吗