1、目 录第一部分 设计任务31.1设计背景及目的31.2设计和解决方法31.3设计流程图4第二部分 设计说明52.1系统需求分析52.1.1运行环境52.2 用户的特点52.3测试案例5第三部分 设计成果7第四部分 结束语18第五部分 致谢18第六部分 参考文献19第一部分 设计任务1.1设计背景及目的随着经济社会的高速发展,人们的生活水平也在飞速的提高,同时人们的收入和消费水平也得到了很大的提升,也从过去的单一输入和消费变成了今天的多元化收入和消费模式。尤其是我们青年人,对现在新型消费有非常高的热情,但是这样给在高速发展的消费经济情况下的我们带来了一些意想不到的负面影响,比较突出的一点就是当前
2、80、90后的一代年轻人只懂得消费和挣钱,不能很好的理财,这给我们的物质生活带来了不少的麻烦。所以不同功能的个人理财系统便由此产生了,不论是PC版还是手持设备版都有。在这几年中,飞速的发展,现在已经超过了过去看似很完美的塞班系统,成为全球最大的手机及手持设备系统之一。Android操作系统凭借着自己开放的平台允许任何移动终端厂商加入到Android联盟中,从而使得越来越多的用户倾向于选择操作系统为Android的终端设备。1.2设计和解决方法在android系统应用如此火热的情况下,开发一款基于android系统的个人记账系统,不仅能很好的应用android系统的优势,可以在不同的小型手持设备
3、上安装该软件。同时,手持设备的便于携带性也大大提高了软件的使用价值,不仅可以随时随地记账,还能从另一方面解决人们不善于管理个人财务的习惯,帮助大家实现自主理财。基于Android系统手机的个人记账系统,设计清新,使用简单,管理功能强,在当前的高速发展的社会经济条件下,为帮助我们这一代不会理财的年轻人轻松实现自主理财,设计这样一款个人记账系统是非常有意义和利用价值的。根据个人理财实现的实际需求,本系统的设计解决方法如下:1. 设计语言与结构: 本系统选用当前主流的开语言Java语言作为开发语言,结合当前最为流行的移动开发技术,基于android系统下的软件开发技术,开发本系统,设计选在在andr
4、oid平台上实现可以很好的发挥该软件系统的用处。2. 功能解决:本系统设计主要为帮助不会自主理财的人们能很容易的学会自主理财,通过软件中的各个功能,实现在电子系统上记录个人理财信息,提醒以及帮助用户实现自主理财。3. 性能解决:对于一个系统不仅要考虑功能的实用性,还要考虑系统的性能可靠。本系统通过使用oracle作为数据库存储数据。oracle数据库是一款轻量级数据库,便于移植。同时,配合android系统,可以设计一款清凉级的基于android系统应用软件。1.3设计流程图第二部分 设计说明2.1系统需求分析本系统具有如下功能模块1. 系统管理模块:收入信息和支出信息查询。支出信息以表格的形
5、式展现,输入要查询的时间段,就会显示该时间段的支出信息,收入信息查询跟支出信息查询类似。2. 基本信息管理模块:对支出、收入信息进行管理。3. 收支统计模块:对收支信息进行管理,可记录这时间段的收入和支出,同时可以计算出余额。2.1.1运行环境1)设备具备Android系统的手机或者其他手持设备2)支持软件(1)用户基础软件配置Android1.6及其以上版本相关软件工具:(2)开发工具IDE:Eclipse + Android ADT + android SDK平台:Windows XP(3)测试环境不同厂商以及不同android系统版本的智能手机2.2 用户的特点本系统针对的用户为所有使用
6、操作系统为Android的智能手机用户。客户应具备基础的手机操作以及手机键盘打字基础。2.3测试案例用例名:系统记账行为者:用户目的:用户根据每天的收入和消费情况进行详细的记录,以便日后查看。级别:一级过程描述:a. 进入andorid系统菜单界面,点击爱记账图表进入系统;b.进入系统主界面后选择“记一笔”进入系统记账页面;c.选择记账类型,输入金额,选择好收入或者支出类型,同时选择好指定账户进行记录;d.设置完毕,用户数据保存成功。与其它用例的关联:无异常处理:无第三部分 设计成果设计成果: 主菜单 主界面 点击记一笔进入该页面,该页面功能有 类型选择记录支出,收入、类型选择和时间! 记录支
7、出数据 记录收入数据 保存数据 选择日期年月 本人在整个软件开发设计过程中主要是做记录的类型和日期这模块一块的功能,在这块模块的开发过程中,我查阅了大量有关这方面的资料。这模块主要是记录人们在哪方面支出和收入的情况,还有某年某月某日支出和收入的情况!方便人们记录和查询某天的支出情况。具体如下图: 类型选择 日期选择 产品特点:爱记账的特点在于灵活,简洁,方便,易于操作。爱记账能够清清楚楚的记录你每一天的消费情况,爱记账主要突出爱和记账二字。爱:是指网站的用户体验,在用户体验上要让网友用起来舒服,喜欢,只有这样他们才会爱;记账:是帮助大家理财,让大家能够方便清晰地管理自己的财富。程序代码:R.d
8、rawable.baojianpin ;ListView lv_result;AccountAdapter adapter;TextView tv_all_date;TextView tv_income_result;TextView tv_pay_result;TextView tv_balance_result;/ 菜单按键处理Overridepublic boolean onOptionsItemSelected(MenuItem item) / TODO Auto-generated method stubswitch (item.getItemId() case R.id.actio
9、n_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.a
10、ction_search:search(null);break;return super.onOptionsItemSelected(item);Overrideprotected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);/getActionBar().hide();/getActionBar().setDisplayShowTitleEnabled(false);/getActionBar().setDi
11、splayUseLogoEnabled(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 = (Te
12、xtView) 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() Overridepublic boolean onTouch(View arg0,
13、 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_re
14、sult.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() Overridepublic void onDateSet(DatePicker arg0, int arg1, int arg2,int arg3) / TOD
15、O Auto-generated method stubyear = 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
16、_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 +
17、 );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.Y
18、EAR);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(
19、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) vie
20、w.findViewById(R.id.et_input_detail);rg_type = (RadioGroup) view.findViewById(R.id.rg_type);rg_type.setOnCheckedChangeListener(new OnCheckedChangeListener() Overridepublic void onCheckedChanged(RadioGroup arg0, int arg1) / TODO Auto-generated method stubif (arg1 = R.id.rd_pay) et_input_money.setText
21、Color(Color.RED); else et_input_money.setTextColor(Color.GREEN););builder.setOnKeyListener(new OnKeyListener() Overridepublic boolean onKey(DialogInterface arg0, int arg1,/keycode KeyEvent arg2) / TODO Auto-generated method stubswitch (arg1) case KeyEvent.KEYCODE_BACK:arg0.dismiss();break;return fal
22、se;);btn_setIndex = (Button) view.findViewById(R.id.btn_setindex);btn_setIndex.setText(indexListsindex);btn_setIndex.setOnClickListener(new View.OnClickListener() Overridepublic void onClick(View arg0) / TODO Auto-generated method stubBuilder builder = new Builder(MainActivity.this);builder.setItems
23、(indexLists, new OnClickListener() Overridepublic void onClick(DialogInterface arg0, int arg1) / TODO Auto-generated method stubindex = arg1;btn_setIndex.setText(indexListsindex););builder.show(););btn_setTime.setOnClickListener(new View.OnClickListener() Overridepublic void onClick(View arg0) / TOD
24、O Auto-generated method stubDatePickerDialog dpd = new DatePickerDialog(MainActivity.this,new OnDateSetListener() Overridepublic void onDateSet(DatePicker arg0, int arg1,int arg2, int arg3) / TODO Auto-generated method stubyear = arg1;month = arg2 + 1;day = arg3;btn_setTime.setText(year + - + month
25、+ -+ day);, year, month - 1, day);dpd.show(););builder.setTitle(记一笔);builder.setView(view);builder.setCancelable(false);builder.setPositiveButton(保存, new OnClickListener() Overridepublic void onClick(DialogInterface arg0, int arg1) / TODO Auto-generated method stubString str_money = et_input_money.g
26、etText().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_typ
27、e.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();Overridepublic boolean onCreateOpt
28、ionsMenu(Menu menu) / Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;Overrideprotected void onDestroy() / TODO Auto-generated method stubmDbHelper.close();super.onDestroy();第四部分 结束语毕业设计的实现过程中,由于在知识,经验方面存在不足,因此,该软件仍然存在一些缺陷
29、和不足。另外在需求分析时未能完全满足用户的需求。在系统功能上,统计查询功能和清除用户数据方面还不能实现,当然还有一些问题没有考虑周到。该软件目前只是小型的,比较适合家庭用户进行个人收支的管理。该软件还能进一步的完善,还可以添加转账,数据的传送时进行加密管理,依据实际情况添加专业的的功能模块,如消费分析,图表等等。第五部分 致谢经过一个多月的毕业设计,我掌握了java的基本应用,基本达到了毕业设计的要求。最重要的是,毕业设计的经历增强了我自我学习的能力,做到了在不用老师手把手教的情况下,完成了一个记账软件。同时毕业设计设计过程中,查询了大量资料,也增强了我进行资料的收集,查找和对资料的筛选能力。
30、在整个毕业设计的实现过程中,我要忠心的感谢我的指导老师,他一直在为我的毕业设计提供耐心的指导,比帮我解决了很多难题,这样才有了我的这份毕业设计。我还要感谢我的同学们,他们也给我了我很多的支持。同样,也是最重要的,感谢所有者三年来传授我知识,给予我关怀和帮助的老师们。18第六部分 参考文献1袁海燕,王文涛等Java实用程序设计100例M北京:人民邮电出版社,2005:5-62谭浩强.java软件开发技术详解.北京.清华大学出版社,2007.53黄明.基于app的安卓软件开发方法分析与实现J.北京.电子工业出版社,2008.74张亦辉,冯华,胡洁Java面向对象程序设计M北京:人民邮电出版社,2008:8-32