版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、计算机与信息工程学院集中实践教学环节基于Android的家庭理财通软件的设计与实现评阅人签名:_复核人签名:_得分:_姓名 学号 专业名称软件工程班级编号指导教师 2017年 6 月 16 日摘要随着Android手机操作系统的普及,基于Android的的软件也越来越受到广大用户的欢迎。本文将为大家介绍基于Android的家庭理财系统,通过该系统,可以随时记录用户的收入及支出等信息。该系统主要包括数据库的搭建和维护以及前端开发两个方面,前端主要包括登录注册模块,收入模块,支出模块,收支便签、信息统计等方面。数据库搭建要求数据一致性、完整性和安全性,而前端要求功能完备,易使用等特点。本系统仅应用
2、于个人理财,提供财务数据统一管理,以便做出合理的财务决策。其界面友好,操作简单,除具备基本的财务信息管理外,还提供了信息统计等,为方便操作,设置有部分常用功能快捷工具栏。通过设计该系统,可以掌握Android布局文件的设计,掌握SQLite数据库的使用,掌握公共类的设计及使用等,提高自己的软件开发水平,提高工作设计能力。通过与指导老师交流,从中学习知识吸取经验,在技术和软件思想上同时得到锻炼和提高,从而使总体水平升到一个新的高度。关键词:家庭理财;数据库;信息管理AbstractWith the popularity of Android mobile operating system, An
3、droid based software has also become more and more popular among users. This article will introduce the family financial management system based on Android. Through this system, we can record the users income and expenditure information at any time. The system mainly includes two aspects of the cons
4、truction and maintenance of database and front-end development. The front end mainly includes login registration module, revenue module, expenditure module, revenue and expenditure memo, information statistics and so on. Database construction requires data consistency, integrity and security, while
5、front-end requirements, full-featured, easy to use and so on. The system is only applied to personal financial management, providing financial data management in order to make reasonable financial decisions. The interface is friendly and the operation is simple. Besides the basic financial informati
6、on management, it also provides the information statistics and so on. In order to facilitate the operation, there are some commonly used function shortcut toolbar. Through the design of the system, can master the design of Android layout file, master the use of SQLite database, to master the design
7、and use of public class, improve their level of software development, improve the working ability of design. By communicating with the instructor, learning knowledge, learning from experience, and exercising both technical and software thinking at the same time, raises the overall level to a new hei
8、ght.Key Words: Family financial management, database, information management目录1引 言52相关技术与环境53需求分析63.1模块功能分析63.1.1登录注册模块63.1.2收入模块63.1.3支出模块63.1.4数据管理73.1.5信息统计73.1.6系统设置73.1.7版本更新83.2功能结构图分析83.2.1模块分析图83.2.2用例图93.2.3系统流程图103.3数据库分析建模113.3.1数据库分析113.3.2数据表分析114实现效果134.1系统升级模块134.2登录注册模块164.2.1登录164.2
9、.2注册184.3收入模块194.3.1新增收入194.3.2我的收入214.4支出模块224.4.1新增支出224.4.2我的支出244.5便签模块254.6数据管理模块264.6.1支出管理264.6.2收入管理294.6.3便签管理304.7信息统计模块314.7.1支出统计314.7.2收入统计334.8账号设置模块355总结371 引 言基于Android的家庭理财系统可以有效地记录和管理家庭的收支,合理规划和支配家庭资金,是家庭理财的好帮手。它利用计算机技术技术,使家庭理财逐步信息化,从而形成由家庭成员与计算机共同构成服务于家庭的人机信息财务管理系统。后台主要包括数据库的建立,前端
10、主要包括登录注册模块,收入模块,支出模块,收支便签、信息统计等方面。开发出家庭理财系统,将我们的生活管理的更有效率,有条不紊。2 相关技术与环境该app运行在win7操作系统中,使用的JDK版本为Java SE Development KET(JDK) version6,开发工具为Eclipse3.7.1+Android4.0,开发的语言为Java,XML,其中用到的技术有SQLite,Sms,pieChart等。3 需求分析3.1 模块功能分析3.1.1 登录注册模块描述:用户登录系统之前,需要进行的登录,若用户没用注册,则需要进行注册登录设计:1) 用textview与edittext设置
11、用户名与密码框2) 设计三个button,分别用于登录,注册,退出三个事件的响应3) 验证用户名与密码,匹配成功进入主界面,失败则弹出提示信息:“用户名和密码错误”注册设计:1) 用textview与edittext设置用户名与密码框2) 设计一个button,用于提交事件的响应3) 若注册的用户名存在,则更新数据库,不存在就直接添加数据3.1.2 收入模块描述:用户进入主界面,可以对自己的收入进行管理,如新增收入,查看收入。设计如下:1) 设计新增收入布局文件2) 设置收入时间3) 添加收入信息4) 崇信窗口中的各个控件5) 设计收入信息浏览布局文件6) 显示所有的收入信息7) 单击指定项时
12、打开详细的信息 3.1.3 支出模块描述:用户进入主界面,可以对自己的收入进行管理,如新增收入,查看收入。设计如下:1) 设计新增收入布局文件2) 设置收入时间3) 添加收入信息4) 崇信窗口中的各个控件5) 设计收入信息浏览布局文件6) 显示所有的收入信息7) 单击指定项时打开详细的信息3.1.4 数据管理描述:用户能够对收支数据进行管理以及对便签进行管理。收入管理: 用户通过点击收入管理进入到收入管理界面,可以修改自己的收入金额,时间类别以及添加备注等。支出管理: 用户通过点击支出管理进入到支出管理界面,可以修改自己的支出金额,时间类别以及添加备注等。便签管理: 用户通过点击便签管理进入到
13、便签管理界面,可以修改自己的便签,加入自己想添加的话 3.1.5 信息统计描述:通过饼状图的形式为用户提供清晰的数据,让用户能够清晰的看清自己的钱花在了哪,用在了哪里。用户可以选择的方式有:1) 按年查询支出信息2) 按年查询收入信息3) 按月查询支出信息4) 按月查询收入信息 3.1.6 系统设置描述:当用户忘记密码或需要更换密码时,系统设置可以为用户提供这个功能。提供的功能包括:1) 修改用户名2) 修改密码3.1.7 版本更新描述:由于应用的的功能会逐步完善,因此每一个应用都需要更新,所以如果有新的版本出现,系统将会给于用户是否选择更新的权力,点击确认,将下载最新版本的app3.2 功能
14、结构图分析3.2.1 模块分析图图 31模块分析图3.2.2 用例图图 32用例图3.2.3 系统流程图图 33系统流程图3.3 数据库分析建模3.3.1 数据库分析家庭理财通是一款运行在Android系统上的程序,在Android系统中,继承了一种轻量型的数据库,即SQLite,使用该数据库可以像使用SQL Server 数据库或者Orancle数据库一样来存储数据。3.3.2 数据表分析表 31 tb_user 用户表字段名数据类型是否主键描述usernameVachar(20)否用户名passwordVachar(20)否用户密码表 32 tb_outaccount 支出信息表字段名数据
15、类型是否主键描述idInteger是编号moneyDecimal否支出金额timeVachar(10)否支出时间typeVachar(10)否支出类别addressVachar(10)否支出地点markVachar(10)否备注表 33 tb_inaccount 收入信息表字段名数据类型是否主键描述idInteger是编号moneyVachar(10)否支出金额timeVachar(10)否支出时间typeVachar(10)否支出类别handlerVachar(10)否支出地点markVachar(10)否备注表 34 tb_flag 便签信息表字段名数据类型是否主键描述idinteger是
16、编号flagVachar(20)否便签内容4 实现效果4.1 系统升级模块系统升级需要用两个不同版本的apk,当版本低的时候,会自动下载升级,相关代码如下所示:try HttpClient client = new DefaultHttpClient(); /*连接超时*/ HttpConnectionParams.setConnectionTimeout(client.getParams(), 5000); /*请求超时*/ HttpConnectionParams.setSoTimeout(client.getParams(), 5000);HttpGet httpGet = new Ht
17、tpGet(4:8080/lgl/updateinfo.html);HttpResponse execute = client.execute(httpGet);if (execute.getStatusLine().getStatusCode() = 200) / 请求和响应都成功了HttpEntity entity = execute.getEntity();String result = EntityUtils.toString(entity, gbk);/ 创建jsonObject对象JSONObject jsonObject = new JSONO
18、bject(result);versionEntity = new VersionEntity();String code = jsonObject.getString(code);versionEntity.versioncode = code;String des = jsonObject.getString(des);versionEntity.description = des;String apkurl = jsonObject.getString(apkurl);versionEntity.apkurl = apkurl;if (!mVersion.equals(versionEn
19、tity.versioncode) / 版本号不一致handler.sendEmptyMessage(MESSAGE_SHOEW_DIALOG);elsehandler.sendEmptyMessageDelayed(MESSAGE_ENTERHOME,4000); catch (ClientProtocolException e) handler.sendEmptyMessage(MESSAGE_NET_EEOR);e.printStackTrace(); catch (IOException e) handler.sendEmptyMessage(MESSAGE_IO_EEOR);e.pr
20、intStackTrace(); catch (JSONException e) handler.sendEmptyMessage(MESSAGE_JSON_EEOR);e.printStackTrace();确认更新的界面,如图所示:图 41 确认更新更新过程中,如图所示:图 42 准备下载安装过程如图所示图 43安装过程图4.2 登录注册模块4.2.1 登录为用户设置账号密码,当登录时检测,用户是否存在,错误则提示,正确就进入主界面,关键代码如下:Intent intent=new Intent(LoginActivity.this,MainActivity.class); UserDao
21、 udo=new UserDao(LoginActivity.this); if(udo.getCount()=0) Toast.makeText(LoginActivity.this, 没有用户,无法登陆!,Toast.LENGTH_SHORT).show(); else if(udo.find().getUsername().equals(nameedit.getText().toString() if(udo.find().getPassword().equals(pwdedit.getText().toString() startActivity(intent); else Toast
22、.makeText(LoginActivity.this, 请输入正确的密码!,Toast.LENGTH_SHORT).show(); else Toast.makeText(LoginActivity.this, 请输入正确的用户名!,Toast.LENGTH_SHORT).show();登录界面,如图所示:图 44 登录界面4.2.2 注册注册的相关代码如下:public void onClick(View arg0) / TODO Auto-generated method stubUserDao udo=new UserDao(RegisterActivity.this);User u
23、ser=new User();Intent intent=new Intent(RegisterActivity.this,LoginActivity.class);if(nameedit.getText().toString().equals()|pwdedit.getText().toString().equals()Toast.makeText(RegisterActivity.this, 用户名和密码不能为空!,Toast.LENGTH_SHORT).show();elseuser.setUsername(nameedit.getText().toString();user.setPa
24、ssword(pwdedit.getText().toString();if(udo.getCount()!=0)udo.update(user);elseudo.add(user);startActivity(intent);当点击注册按钮后,系统弹出注册界面,如图所示:图 45注册界面4.3 收入模块4.3.1 新增收入相关代码如下public void onClick(View arg0) / TODO Auto-generated method stubString strInMoney = txtInMoney.getText().toString();/ 获取金额文本框的值if (
25、!strInMoney.isEmpty() / 判断金额不为空/ 创建InaccountDAO对象InaccountDAO inaccountDAO = new InaccountDAO(AddInaccountActivity.this);/ 创建Tb_inaccount对象Inaccount tb_inaccount = new Inaccount(inaccountDAO.getMaxId() + 1, Double.parseDouble(strInMoney), txtInTime.getText().toString(), spInType.getSelectedItem().to
26、String(),txtInHandler.getText().toString(),txtInMark.getText().toString();inaccountDAO.add(tb_inaccount);/ 添加收入信息/ 弹出信息提示Toast.makeText(AddInaccountActivity.this, 添加成功!,Toast.LENGTH_SHORT).show(); else Toast.makeText(AddInaccountActivity.this, 请输入收入金额!,Toast.LENGTH_SHORT).show(););点击新增收入,弹出新增收入界面,如图
27、所示:图 46新增收入4.3.2 我的收入点击我的收入,弹出我的收入界面,如图所示:图 47我的收入4.4 支出模块4.4.1 新增支出相关代码如下:protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);setContentView(R.layout.activity_add_outaccount);txtMoney = (EditText) findViewById(R.id.txtMoney);/ 获取金额文本框txtTime = (EditText) findViewBy
28、Id(R.id.txtTime);/ 获取时间文本框txtAddress = (EditText) findViewById(R.id.txtAddress);/ 获取地点文本框txtMark = (EditText) findViewById(R.id.txtMark);/ 获取备注文本框spType = (Spinner) findViewById(R.id.spType);/ 获取类别下拉列表btnSaveButton = (Button) findViewById(R.id.btnSave);/ 获取保存按钮btnCancelButton = (Button) findViewById
29、(R.id.btnCancel);/ 获取取消按钮 txtTime.setOnClickListener(new OnClickListener() / 为时间文本框设置单击监听事件Overridepublic void onClick(View arg0) / TODO Auto-generated method stubshowDialog(DATE_DIALOG_ID);/ 显示日期选择对话框);btnSaveButton.setOnClickListener(new OnClickListener() / 为保存按钮设置监听事件Overridepublic void onClick(V
30、iew arg0) / TODO Auto-generated method stubString strMoney = txtMoney.getText().toString();/ 获取金额文本框的值if (!strMoney.isEmpty() / 判断金额不为空/ 创建OutaccountDAO对象OutaccountDAO outaccountDAO = new OutaccountDAO(AddOutaccountActivity.this);/ 创建Tb_outaccount对象Outaccount tb_outaccount = new Outaccount(outaccoun
31、tDAO.getMaxId() + 1, Double.parseDouble(strMoney), txtTime.getText().toString(), spType.getSelectedItem().toString(),txtAddress.getText().toString(), txtMark.getText().toString();outaccountDAO.add(tb_outaccount);/ 添加支出信息/ 弹出信息提示TotalMoney();Toast.makeText(AddOutaccountActivity.this, 数据添加成功!,Toast.LE
32、NGTH_SHORT).show(); else Toast.makeText(AddOutaccountActivity.this, 请输入支出金额!,Toast.LENGTH_SHORT).show(););点击新增支出,弹出新增支出界面,如图所示:图 48新增支出4.4.2 我的支出点击我的支出,弹出我的支出界面,如图所示:图 49我的支出4.5 便签模块点击收支便签,弹出新增便签界面,如图所示:图 410 新增便签4.6 数据管理模块4.6.1 支出管理向数据表tb_outacount中搜索支出的数据,用listView显示出来,相关代码如下:Intent intent = getIn
33、tent();/ 创建Intent对象Bundle bundle = intent.getExtras();/ 获取传入的数据,并使用Bundle记录strInfos = bundle.getStringArray(ShowinfoActivity.FLAG);/ 获取Bundle中记录的信息strid = strInfos0;/ 记录idstrType = strInfos1;/ 记录类型if (strType.equals(btnoutinfo)/ 如果类型是btnoutinfotvtitle.setText(支出管理);/ 设置标题为“支出管理”textView.setText(地 点:
34、);/ 设置“地点/付款方”标签文本为“地 点:”/ 根据编号查找支出信息,并存储到Tb_outaccount对象中Outaccount outaccount = outaccountDAO.find(Integer.parseInt(strid);txtMoney.setText(String.valueOf(outaccount.getMoney();/ 显示金额txtTime.setText(outaccount.getTime();/ 显示时间spType.setPrompt(outaccount.getType();/ 显示类别txtHA.setText(outaccount.get
35、Address();/ 显示地点txtMark.setText(outaccount.getMark();/ 显示备注 else if (strType.equals(btnininfo)/ 如果类型是btnininfotvtitle.setText(收入管理);/ 设置标题为“收入管理”textView.setText(付款方:);/ 设置“地点/付款方”标签文本为“付款方:”/ 根据编号查找收入信息,并存储到Tb_outaccount对象中Inaccount inaccount = inaccountDAO.find(Integer.parseInt(strid);txtMoney.set
36、Text(String.valueOf(inaccount.getMoney();/ 显示金额txtTime.setText(inaccount.getTime();/ 显示时间spType.setPrompt(inaccount.getType();/ 显示类别txtHA.setText(inaccount.getHandler();/ 显示付款方txtMark.setText(inaccount.getMark();/ 显示备注txtTime.setOnClickListener(new OnClickListener() / 为时间文本框设置单击监听事件Overridepublic vo
37、id onClick(View arg0) / TODO Auto-generated method stubshowDialog(DATE_DIALOG_ID);/ 显示日期选择对话框);btnEdit.setOnClickListener(new OnClickListener() / 为修改按钮设置监听事件Overridepublic void onClick(View arg0) / TODO Auto-generated method stubif (strType.equals(btnoutinfo)/ 判断类型如果是btnoutinfoOutaccount outaccount
38、= new Outaccount();/ 创建Tb_outaccount对象outaccount.setid(Integer.parseInt(strid);/ 设置编号outaccount.setMoney(Double.parseDouble(txtMoney.getText().toString();/ 设置金额outaccount.setTime(txtTime.getText().toString();/ 设置时间outaccount.setType(spType.getSelectedItem().toString();/ 设置类别outaccount.setAddress(txt
39、HA.getText().toString();/ 设置地点outaccount.setMark(txtMark.getText().toString();/ 设置备注outaccountDAO.update(outaccount);/ 更新支出信息 else if (strType.equals(btnininfo)/ 判断类型如果是btnininfoInaccount inaccount = new Inaccount();/ 创建Tb_inaccount对象inaccount.setid(Integer.parseInt(strid);/ 设置编号inaccount.setMoney(D
40、ouble.parseDouble(txtMoney.getText().toString();/ 设置金额inaccount.setTime(txtTime.getText().toString();/ 设置时间inaccount.setType(spType.getSelectedItem().toString();/ 设置类别inaccount.setHandler(txtHA.getText().toString();/ 设置付款方inaccount.setMark(txtMark.getText().toString();/ 设置备注inaccountDAO.update(inacc
41、ount);/ 更新收入信息/ 弹出信息提示Toast.makeText(InfoManagerActivity.this, 数据修改成功!, Toast.LENGTH_SHORT).show(););点击数据管理,进入数据管理界面,当点击支出信息时,界面如图所示:图 411支出管理4.6.2 收入管理点击数据管理,进入数据管理界面,当点击收入管理时,界面如图所示:图 412收入信息4.6.3 便签管理点击数据管理,进入数据管理界面,当点击便签管理时,界面如图所示:图 413便签管理4.7 信息统计模块4.7.1 支出统计向数据库中获得支出的信息,按照类型进行相加分类,并将数据的比例在饼状图中
42、显示出来,代码如下:ArrayList xValues = new ArrayList(); /xVals用来表示每个饼块上的内容 / 饼图数据 ArrayList yValues = new ArrayList(); SimpleDateFormat sDateFormat = new SimpleDateFormat(yyyy-MM-dd hh:mm:ss); String date = sDateFormat.format(new java.util.Date(); String dada=date.split(-); if(string0.equals(支出) xValues.add(
43、早餐); xValues.add(午餐); xValues.add(晚餐); xValues.add(夜宵); OutaccountDAO outaccountDAO = new OutaccountDAO(CountActivity.this); List oout; if(string1.equals(Year) oout=outaccountDAO.findByYear(dada0.trim(); else String str=dada1.split(0); oout=outaccountDAO.findByMonth(str1); for(Outaccount out:oout) S
44、tring type=out.getType(); if(type.equals(早餐) a+=out.getMoney(); else if(type.equals(午餐) b+=out.getMoney(); else if(type.equals(晚餐) c+=out.getMoney(); else if(type.equals(夜宵) d+=out.getMoney(); 当用户点击按年统计时,弹出的界面为:图 414按年统计支出图当用户点击按月统计时,弹出的界面为:图 415按月统计支出4.7.2 收入统计将收入的数据按照类型分别相加,计算出比例,相关代码如下所示:List iin
45、; if(string1.equals(Year) iin=inaccountDAO.findByYear(dada0.trim(); else String str=dada1.split(0); iin=inaccountDAO.findByMonth(str1); for(Inaccount in:iin) String type=in.getType(); if(type.equals(工资) a+=in.getMoney(); else if(type.equals(兼职) b+=in.getMoney(); else if(type.equals(股票) c+=in.getMone
46、y(); else if(type.equals(基金) d+=in.getMoney(); float quarterly1 = (float) (a/(a+b+c+d); float quarterly2 = (float) (b/(a+b+c+d); float quarterly3 = (float) (c/(a+b+c+d); float quarterly4 = (float) (d/(a+b+c+d); yValues.add(new Entry(quarterly1, 0); yValues.add(new Entry(quarterly2, 1); yValues.add(new Entry(quarterly3, 2); yValues.add(new Entry(quarterly4, 3); /y轴的集合 PieDataSet pieDataSet = new PieDataSet(yValues, 信息); pieDataSet.setSliceSpace(0f); /设置个饼状图之间的距离 ArrayList colors = new ArrayList(); / 饼图颜色 colors.add(Color.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 课件模板购买教学课件
- 3.3.1盐类的水解 课件 高二上学期化学人教版(2019)选择性必修1
- 踩高跷教案及反思
- 保护我们的皮肤教案反思
- 汉语拼音说课稿
- 公共服务外协产品管理办法
- 汽车学业规划教育
- 健身中心翰林府建设合同
- 社会福利院聘用合同种类及规范
- 矿业农民工工资保障金管理办法
- 瓶装水项目市场营销方案
- 2024届东北师大附中重庆一中等六校化学高一第一学期期中检测试题含解析
- 【幼儿园语言文字教学的规范化分析3000字(论文)】
- 瓶口分液器校准规范
- (完整版)医疗器械网络交易服务第三方平台质量管理文件
- 信息管理监理实施细则水利水电工程
- (医学课件)DIC患者的护理
- 跨境数据流动的全球治理进展、趋势与中国路径
- 硅pu塑胶施工方案
- 【多旋翼无人机的组装与调试5600字(论文)】
- 2023年辽阳市宏伟区事业单位考试真题
评论
0/150
提交评论