资源描述
目 录
第一部分 设计任务 3
1.1 设计背景及目的 3
1.2设计和解决方法 3
1.3设计流程图 4
第二部分 设计说明 5
2.1系统需求分析 5
2.1.1 运行环境 5
2.2 用户的特点 5
2.3 测试案例 5
第三部分 设计成果 7
第四部分 结束语 18
第五部分 致谢 18
第六部分 参考文献 19
第一部分 设计任务
1.1 设计背景及目的
随着经济社会的高速发展,人们的生活水平也在飞速的提高,同时人们的收入和消费水平也得到了很大的提升,也从过去的单一输入和消费变成了今天的多元化收入和消费模式。尤其是我们青年人,对现在新型消费有非常高的热情,但是这样给在高速发展的消费经济情况下的我们带来了一些意想不到的负面影响,比较突出的一点就是当前80、90后的一代年轻人只懂得消费和挣钱,不能很好的理财,这给我们的物质生活带来了不少的麻烦。所以不同功能的个人理财系统便由此产生了,不论是PC版还是手持设备版都有。
在这几年中,飞速的发展,现在已经超过了过去看似很完美的塞班系统,成为全球最大的手机及手持设备系统之一。Android操作系统凭借着自己开放的平台允许任何移动终端厂商加入到Android联盟中,从而使得越来越多的用户倾向于选择操作系统为Android的终端设备。
1.2设计和解决方法
在android系统应用如此火热的情况下,开发一款基于android系统的个人记账系统,不仅能很好的应用android系统的优势,可以在不同的小型手持设备上安装该软件。同时,手持设备的便于携带性也大大提高了软件的使用价值,不仅可以随时随地记账,还能从另一方面解决人们不善于管理个人财务的习惯,帮助大家实现自主理财。基于Android系统手机的个人记账系统,设计清新,使用简单,管理功能强,在当前的高速发展的社会经济条件下,为帮助我们这一代不会理财的年轻人轻松实现自主理财,设计这样一款个人记账系统是非常有意义和利用价值的。
根据个人理财实现的实际需求,本系统的设计解决方法如下:
1. 设计语言与结构: 本系统选用当前主流的开语言Java语言作为开发语言,结合当前最为流行的移动开发技术,基于android系统下的软件开发技术,开发本系统,设计选在在android平台上实现可以很好的发挥该软件系统的用处。
2. 功能解决:本系统设计主要为帮助不会自主理财的人们能很容易的学会自主理财,通过软件中的各个功能,实现在电子系统上记录个人理财信息,提醒以及帮助用户实现自主理财。
3. 性能解决:对于一个系统不仅要考虑功能的实用性,还要考虑系统的性能可靠。本系统通过使用oracle作为数据库存储数据。oracle数据库是一款轻量级数据库,便于移植。同时,配合android系统,可以设计一款清凉级的基于android系统应用软件。
1.3设计流程图
第二部分 设计说明
2.1系统需求分析
本系统具有如下功能模块
1. 系统管理模块:收入信息和支出信息查询。支出信息以表格的形式展现,输入要查询的时间段,就会显示该时间段的支出信息,收入信息查询跟支出信息查询类似。
2. 基本信息管理模块:对支出、收入信息进行管理。
3. 收支统计模块:对收支信息进行管理,可记录这时间段的收入和支出,同时可以计算出余额。
2.1.1 运行环境
1) 设备
具备Android系统的手机或者其他手持设备
2) 支持软件
(1)用户基础软件配置
Android1.6及其以上版本
相关软件工具:
(2)开发工具
IDE:Eclipse + Android ADT + android SDK
平台:Windows XP
(3)测试环境
不同厂商以及不同android系统版本的智能手机
2.2 用户的特点
本系统针对的用户为所有使用操作系统为Android的智能手机用户。客户应具备基础的手机操作以及手机键盘打字基础。
2.3 测试案例
用例名:系统记账
行为者:用户
目的:用户根据每天的收入和消费情况进行详细的记录,以便日后查看。
级别:一级
过程描述:
a. 进入andorid系统菜单界面,点击爱记账图表进入系统;
b. 进入系统主界面后选择“记一笔”进入系统记账页面;
c. 选择记账类型,输入金额,选择好收入或者支出类型,同时选择好指定账户进行记录;d. 设置完毕,用户数据保存成功。
与其它用例的关联:无
异常处理:无
第三部分 设计成果
设计成果:
主菜单 主界面
点击记一笔进入该页面,该页面功能有 类型选择
记录支出,收入、类型选择和时间!
记录支出数据 记录收入数据
保存数据 选择日期年月
本人在整个软件开发设计过程中主要是做记录的类型和日期这模块一块的功能,在这块模块的开发过程中,我查阅了大量有关这方面的资料。这模块主要是记录人们在哪方面支出和收入的情况,还有某年某月某日支出和收入的情况!方便人们记录和查询某天的支出情况。具体如下图:
类型选择 日期选择
产品特点:爱记账的特点在于灵活,简洁,方便,易于操作。爱记账能够清清楚楚的记录你每一天的消费情况,爱记账主要突出爱和记账二字。爱:是指网站的用户体验,在用户体验上要让网友用起来舒服,喜欢,只有这样他们才会爱;记账:是帮助大家理财,让大家能够方便清晰地管理自己的财富。
程序代码:
R.drawable.baojianpin };
ListView lv_result;
AccountAdapter adapter;
TextView tv_all_date;
TextView tv_income_result;
TextView tv_pay_result;
TextView tv_balance_result;
// 菜单按键处理
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
switch (item.getItemId()) {
case R.id.action_record:
record(null);
break;public class MainActivity extends Activity {
AccountDateBaseHelper mDbHelper;
AccountDao account;
public static String[] indexLists = { "吃饭", "购物", "学习用品", "工资", "其他" };
public static int[] indexPicLists = { R.drawable.lingshi, R.drawable.fushi,
R.drawable.xuezafei, R.drawable.gongzi,
case R.id.action_search:
search(null);
break;
}
return super.onOptionsItemSelected(item);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//getActionBar().hide();
//
// getActionBar().setDisplayShowTitleEnabled(false);
// getActionBar().setDisplayUseLogoEnabled(false);
// getActionBar().setDisplayShowHomeEnabled(false);
//
mDbHelper = new AccountDateBaseHelper(this);
account = new AccountDao(mDbHelper.getDatabase());
lv_result = (ListView) findViewById(R.id.lv_result);
tv_all_date = (TextView) findViewById(R.id.tv_all_date);
tv_income_result = (TextView) findViewById(R.id.tv_income_result);
tv_pay_result = (TextView) findViewById(R.id.tv_pay_result);
tv_balance_result = (TextView) findViewById(R.id.tv_balance_result);
setTime();
refrashList(null);
// 设置触摸事件
lv_result.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View arg0, MotionEvent ev) {
// TODO Auto-generated method stub
// 判断是否点击在空的位置
switch (ev.getAction()) {
case MotionEvent.ACTION_MOVE:// 手指一定解除在屏幕上
case MotionEvent.ACTION_DOWN:// 按下的时候
case MotionEvent.ACTION_UP:
break;
}
int motionPosition = lv_result.pointToPosition((int) ev.getX(),
(int) ev.getY());
if (motionPosition == lv_result.INVALID_POSITION) {
Toast.makeText(MainActivity.this, "11", 0).show();
}
return false;
}
});
}
@SuppressLint("NewApi")
public void search(View v) {
DatePickerDialog dpd = new DatePickerDialog(MainActivity.this,
new OnDateSetListener() {
@Override
public void onDateSet(DatePicker arg0, int arg1, int arg2,
int arg3) {
// TODO Auto-generated method stub
year = arg1;
month = arg2 + 1;
day = arg3;
// 刷新界面
refrashList(null);
}
}, year, month - 1, 1);
DatePicker dp = dpd.getDatePicker();
((LinearLayout) ((ViewGroup) dp.getChildAt(0)).getChildAt(0))
.getChildAt(2).setVisibility(View.GONE);
dpd.show();
}
public void refrashList(String orderBy) {
tv_all_date.setText(year + "年" + month + "月");
adapter = new AccountAdapter(account.getBeanList(AccountTable.COL_YEAR
+ " = ? and " + AccountTable.COL_MONTH + " = ?", new String[] {
year + "", month + "" }, orderBy), this);
lv_result.setAdapter(adapter);
double income = account.getIncomeAll();
tv_income_result.setText(income + "");
double pay = account.getPayAll();
tv_pay_result.setText(pay + "");
double balance = income - pay;
tv_balance_result.setText(balance + "");
}
double money;
int year;
int day;
int month;
public void setTime() {
Calendar c = Calendar.getInstance();
c.setTimeInMillis(System.currentTimeMillis());
year = c.get(Calendar.YEAR);
day = c.get(Calendar.DAY_OF_MONTH);
month = c.get(Calendar.MONTH) + 1;
}
Button btn_setTime;
Button btn_setIndex;
EditText et_input_money;
EditText et_input_detail;
RadioGroup rg_type;
int index;// 消费类比
Builder builder;
public void record(View v) {
builder = new Builder(this);
View view = LayoutInflater.from(this).inflate(R.layout.record_layout,
null);
et_input_money = (EditText) view.findViewById(R.id.et_input_money);
et_input_money.setTextColor(Color.RED);
btn_setTime = (Button) view.findViewById(R.id.btn_gettime);
// setTime();
btn_setTime.setText(year + "-" + month + "-" + day);
et_input_detail = (EditText) view.findViewById(R.id.et_input_detail);
rg_type = (RadioGroup) view.findViewById(R.id.rg_type);
rg_type.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup arg0, int arg1) {
// TODO Auto-generated method stub
if (arg1 == R.id.rd_pay) {
et_input_money.setTextColor(Color.RED);
} else {
et_input_money.setTextColor(Color.GREEN);
}
}
});
builder.setOnKeyListener(new OnKeyListener() {
@Override
public boolean onKey(DialogInterface arg0,
int arg1,//keycode
KeyEvent arg2) {
// TODO Auto-generated method stub
switch (arg1) {
case KeyEvent.KEYCODE_BACK:
arg0.dismiss();
break;
}
return false;
}
});
btn_setIndex = (Button) view.findViewById(R.id.btn_setindex);
btn_setIndex.setText(indexLists[index]);
btn_setIndex.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Builder builder = new Builder(MainActivity.this);
builder.setItems(indexLists, new OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
// TODO Auto-generated method stub
index = arg1;
btn_setIndex.setText(indexLists[index]);
}
});
builder.show();
}
});
btn_setTime.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
DatePickerDialog dpd = new DatePickerDialog(MainActivity.this,
new OnDateSetListener() {
@Override
public void onDateSet(DatePicker arg0, int arg1,
int arg2, int arg3) {
// TODO Auto-generated method stub
year = arg1;
month = arg2 + 1;
day = arg3;
btn_setTime.setText(year + "-" + month + "-"
+ day);
}
}, year, month - 1, day);
dpd.show();
}
});
builder.setTitle("记一笔");
builder.setView(view);
builder.setCancelable(false);
builder.setPositiveButton("保存", new OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
// TODO Auto-generated method stub
String str_money = et_input_money.getText().toString();
if (str_money.equals("")) {
money = 0;
} else {
money = Double.parseDouble(str_money);
}
AccountBean bean = new AccountBean();
bean.setYear(year);
bean.setDay(day);
bean.setMonth(month);
bean.setDetail(et_input_detail.getText().toString());
bean.setMoney(money);
bean.setIndex(index);
int id = rg_type.getCheckedRadioButtonId();
if (id == R.id.rd_pay)// 支出
{
bean.setType(0);
} else {
bean.setType(1);
}
bean.setIndex(index);// 设置类别
account.insert(bean);
Toast.makeText(MainActivity.this, "保存成功", 0).show();
// 刷新界面
refrashList(null);
}
});
builder.setNegativeButton("放弃", null);
builder.show();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
mDbHelper.close();
super.onDestroy();
}
第四部分 结束语
毕业设计的实现过程中,由于在知识,经验方面存在不足,因此,该软件仍然存在一些缺陷和不足。另外在需求分析时未能完全满足用户的需求。在系统功能上,统计查询功能和清除用户数据方面还不能实现,当然还有一些问题没有考虑周到。
该软件目前只是小型的,比较适合家庭用户进行个人收支的管理。该软件还能进一步的完善,还可以添加转账,数据的传送时进行加密管理,依据实际情况添加专业的的功能模块,如消费分析,图表等等。
第五部分 致谢
经过一个多月的毕业设计,我掌握了java的基本应用,基本达到了毕业设计的要求。最重要的是,毕业设计的经历增强了我自我学习的能力,做到了在不用老师手把手教的情况下,完成了一个记账软件。同时毕业设计设计过程中,查询了大量资料,也增强了我进行资料的收集,查找和对资料的筛选能力。
在整个毕业设计的实现过程中,我要忠心的感谢我的指导老师,他一直在为我的毕业设计提供耐心的指导,比帮我解决了很多难题,这样才有了我的这份毕业设计。我还要感谢我的同学们,他们也给我了我很多的支持。同样,也是最重要的,感谢所有者三年来传授我知识,给予我关怀和帮助的老师们。
18
第六部分 参考文献
[1]袁海燕,王文涛等.Java实用程序设计100例[M].北京:人民邮电出版社,2005:5-6.
[2]谭浩强.java软件开发技术详解.北京.清华大学出版社,2007.5
[3]黄明.基于app的安卓软件开发方法分析与实现[J].北京.电子工业出版社,2008.7
[4]张亦辉,冯华,胡洁.Java面向对象程序设计[M].北京:人民邮电出版社,2008:8-32.
展开阅读全文