基于Android和SQLite实现的家庭理财APP

Mute

发布日期: 2021-04-02 14:19:27 浏览量: 198
评分:
star star star star star star star star star star_border
*转载请注明来自write-bug.com

摘 要

随着Android手机操作系统的普及,基于Android的的软件也越来越受到广大用户的欢迎。本文将为大家介绍基于Android的家庭理财系统,通过该系统,可以随时记录用户的收入及支出等信息。系统主要包括数据库的搭建和维护以及前端开发两个方面,前端主要包括登录注册模块,收入模块,支出模块,收支便签、信息统计等方面。数据库搭建要求数据一致性、完整性和安全性,而前端要求功能完备,易使用等特点。本系统仅应用于个人理财,提供财务数据统一管理,以便做出合理的财务决策。其界面友好,操作简单,除具备基本的财务信息管理外,还提供了信息统计等,为方便操作,设置有部分常用功能快捷工具栏。

通过设计该系统,可以掌握Android布局文件的设计,掌握SQLite数据库的使用,掌握公共类的设计及使用等,提高自己的软件开发水平,提高工作设计能力。通过与指导老师交流,从中学习知识吸取经验,在技术和软件思想上同时得到锻炼和提高,从而使总体水平升到一个新的高度。

关键词:家庭理财;数据库;信息管理

Abstract

With the popularity of Android mobile operating system, Android 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 user’s income and expenditure information at any time. The system mainly includes two aspects of the construction 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 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 information 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 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 height.

Key Words: Family financial management, database, information management

1.引言

理财通是基于Android的家庭理财系统,可以有效地记录和管理家庭的收支,合理规划和支配家庭资金,是家庭理财的好帮手。它利用计算机技术,使家庭理财逐步信息化,从而形成由家庭成员与计算机共同构成服务于家庭的人机信息财务管理系统。后台主要包括数据库的建立,前端主要包括登录模块,收入模块,支出模块,收支便签、信息统计等方面。开发出家庭理财系统,将我们的生活管理的更加方便和高效。

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 登录模块

用户登录系统之前,需要进行的登录,若用户没用注册,则需要进行注册。

  • 用textview与edittext设置用户名与密码框

  • 设计三个button,分别用于登录,注册,退出三个事件的响应

  • 验证用户名与密码,匹配成功进入主界面

3.1.2 收入模块

用户进入主界面,可以对自己的收入进行管理,如新增收入,查看收入。

  • 设计新增收入布局文件

  • 设置收入时间

  • 添加收入信息

  • 设计收入信息浏览布局文件

  • 显示所有的收入信息

  • 单击指定项时打开详细的信息

3.1.3 支出模块

用户进入主界面,可以对自己的收入进行管理,如新增收入,查看收入。

  • 设计新增收入布局文件

  • 设置收入时间

  • 添加收入信息

  • 设计收入信息浏览布局文件

  • 显示所有的收入信息

  • 单击指定项时打开详细的信息

3.1.4 数据管理

用户能够对收支数据进行管理以及对便签进行管理。

  • 收入管理:用户通过点击收入管理进入到收入管理界面,可以修改自己的收入金额,时间类别以及添加备注等

  • 支出管理:用户通过点击支出管理进入到支出管理界面,可以修改自己的支出金额,时间类别以及添加备注等

  • 便签管理:用户通过点击便签管理进入到便签管理界面,可以修改自己的便签,加入自己想添加的话

3.1.5 信息统计

通过饼状图的形式为用户提供清晰的数据,让用户能够清晰的看清自己的钱花在了哪,用在了哪里。

3.1.6 系统设置

当用户忘记密码或需要更换密码时,系统设置可以为用户提供这个功能。

3.1.7 版本更新

由于应用的的功能会逐步完善,因此每一个应用都需要更新,所以如果有新的版本出现,系统将会给于用户是否选择更新的权力,点击确认,将下载最新版本的app。

3.2 功能结构图分析

3.2.1 模块分析图

3.2.2 用例图

3.2.3 系统流程图

3.3 数据库分析建模

3.3.1 数据库分析

家庭理财通是一款运行在Android系统上的程序,在Android系统中,继承了一种轻量型的数据库,即SQLite,使用该数据库可以像使用SQL Server 数据库或者Orancle数据库一样来存储数据。

3.3.2 数据表分析

tb_user 用户表

字段名 数据类型 是否主键 描述
username Vachar(20) 用户名
password Vachar(20) 用户密码

tb_outaccount 支出信息表

字段名 数据类型 是否主键 描述
id Integer 编号
money Decimal 支出金额
time Vachar(10) 支出时间
type Vachar(10) 支出类别
address Vachar(10) 支出地点
mark Vachar(10) 备注

tb_inaccount 收入信息表

字段名 数据类型 是否主键 描述
id Integer 编号
money Vachar(10) 支出金额
time Vachar(10) 支出时间
type Vachar(10) 支出类别
handler Vachar(10) 支出地点
mark Vachar(10) 备注

tb_flag 便签信息表

字段名 数据类型 是否主键 描述
id integer 编号
flag Vachar(20) 便签内容

4.实现效果

4.1 系统升级模块

系统升级需要用两个不同版本的apk,当版本低的时候,会自动下载升级,相关代码如下所示:

  1. try {
  2. HttpClient client = new DefaultHttpClient();
  3. /*连接超时*/
  4. HttpConnectionParams.setConnectionTimeout(client.getParams(), 5000);
  5. /*请求超时*/
  6. HttpConnectionParams.setSoTimeout(client.getParams(), 5000);
  7. HttpGet httpGet = new HttpGet("http://192.168.12.64:8080/lgl/updateinfo.html");
  8. HttpResponse execute = client.execute(httpGet);
  9. if (execute.getStatusLine().getStatusCode() == 200) {
  10. // 请求和响应都成功了
  11. HttpEntity entity = execute.getEntity();
  12. String result = EntityUtils.toString(entity, "gbk");
  13. // 创建jsonObject对象
  14. JSONObject jsonObject = new JSONObject(result);
  15. versionEntity = new VersionEntity();
  16. String code = jsonObject.getString("code");
  17. versionEntity.versioncode = code;
  18. String des = jsonObject.getString("des");
  19. versionEntity.description = des;
  20. String apkurl = jsonObject.getString("apkurl");
  21. versionEntity.apkurl = apkurl;
  22. if (!mVersion.equals(versionEntity.versioncode)) {
  23. // 版本号不一致
  24. handler.sendEmptyMessage(MESSAGE_SHOEW_DIALOG);
  25. }
  26. else{
  27. handler.sendEmptyMessageDelayed(MESSAGE_ENTERHOME,4000);
  28. }
  29. }
  30. } catch (ClientProtocolException e) {
  31. handler.sendEmptyMessage(MESSAGE_NET_EEOR);
  32. e.printStackTrace();
  33. } catch (IOException e) {
  34. handler.sendEmptyMessage(MESSAGE_IO_EEOR);
  35. e.printStackTrace();
  36. } catch (JSONException e) {
  37. handler.sendEmptyMessage(MESSAGE_JSON_EEOR);
  38. e.printStackTrace();
  39. }

确认更新的界面,如图所示:

更新过程中,如图所示:

安装过程如图所示

4.2 登录模块

为用户设置账号密码,当登录时检测,用户是否存在,错误则提示,正确就进入主界面,关键代码如下:

  1. Intent intent=new Intent(LoginActivity.this,MainActivity.class);
  2. UserDao udo=new UserDao(LoginActivity.this);
  3. if(udo.getCount()==0){
  4. Toast.makeText(LoginActivity.this, "没有用户,无法登陆!", Toast.LENGTH_SHORT).show();
  5. }
  6. else{
  7. if(udo.find().getUsername().equals(nameedit.getText().toString())) {
  8. if(udo.find().getPassword().equals(pwdedit.getText().toString())) {
  9. startActivity(intent);
  10. }
  11. else{
  12. Toast.makeText(LoginActivity.this, "请输入正确的密码!", Toast.LENGTH_SHORT).show();
  13. }
  14. }
  15. else{
  16. Toast.makeText(LoginActivity.this, "请输入正确的用户名!", Toast.LENGTH_SHORT).show();

登录界面,如图所示:

4.3 收入模块

4.3.1 新增收入

相关代码如下

  1. public void onClick(View arg0) {
  2. // TODO Auto-generated method stub
  3. String strInMoney = txtInMoney.getText().toString();// 获取金额文本框的值
  4. if (!strInMoney.isEmpty()) {// 判断金额不为空
  5. // 创建InaccountDAO对象
  6. InaccountDAO inaccountDAO = new InaccountDAO(
  7. AddInaccountActivity.this);
  8. // 创建Tb_inaccount对象
  9. Inaccount tb_inaccount = new Inaccount(
  10. inaccountDAO.getMaxId() + 1, Double.parseDouble(strInMoney), txtInTime.getText().toString(), spInType.getSelectedItem().toString(), txtInHandler.getText().toString(), txtInMark.getText().toString());
  11. inaccountDAO.add(tb_inaccount);// 添加收入信息
  12. // 弹出信息提示
  13. Toast.makeText(AddInaccountActivity.this, "添加成功!", Toast.LENGTH_SHORT).show();
  14. } else {
  15. Toast.makeText(AddInaccountActivity.this, "请输入收入金额!", Toast.LENGTH_SHORT).show();
  16. }
  17. }
  18. });

点击新增收入,弹出新增收入界面,如图所示:

4.3.2 我的收入

点击我的收入,弹出我的收入界面,如图所示:

4.4 支出模块

4.4.1 新增支出

相关代码如下:

  1. protected void onCreate(Bundle savedInstanceState) {
  2. super.onCreate(savedInstanceState);
  3. setContentView(R.layout.activity_add_outaccount);
  4. txtMoney = (EditText) findViewById(R.id.txtMoney);// 获取金额文本框
  5. txtTime = (EditText) findViewById(R.id.txtTime);// 获取时间文本框
  6. txtAddress = (EditText) findViewById(R.id.txtAddress);// 获取地点文本框
  7. txtMark = (EditText) findViewById(R.id.txtMark);// 获取备注文本框
  8. spType = (Spinner) findViewById(R.id.spType);// 获取类别下拉列表
  9. btnSaveButton = (Button) findViewById(R.id.btnSave);// 获取保存按钮
  10. btnCancelButton = (Button) findViewById(R.id.btnCancel);// 获取取消按钮
  11. txtTime.setOnClickListener(new OnClickListener() {// 为时间文本框设置单击监听事件
  12. @Override
  13. public void onClick(View arg0) {
  14. // TODO Auto-generated method stub
  15. showDialog(DATE_DIALOG_ID);// 显示日期选择对话框
  16. }
  17. });
  18. btnSaveButton.setOnClickListener(new OnClickListener() {// 为保存按钮设置监听事件
  19. @Override
  20. public void onClick(View arg0) {
  21. // TODO Auto-generated method stub
  22. String strMoney = txtMoney.getText().toString();// 获取金额文本框的值
  23. if (!strMoney.isEmpty()) {// 判断金额不为空
  24. // 创建OutaccountDAO对象
  25. OutaccountDAO outaccountDAO = new OutaccountDAO(
  26. AddOutaccountActivity.this);
  27. // 创建Tb_outaccount对象
  28. Outaccount tb_outaccount = new Outaccount(outaccountDAO.getMaxId() + 1, Double.parseDouble(strMoney), txtTime.getText().toString(), spType.getSelectedItem().toString(), txtAddress.getText().toString(), txtMark.getText().toString());
  29. outaccountDAO.add(tb_outaccount);// 添加支出信息
  30. // 弹出信息提示
  31. TotalMoney();
  32. Toast.makeText(AddOutaccountActivity.this, "数据添加成功!", Toast.LENGTH_SHORT).show();
  33. } else {
  34. Toast.makeText(AddOutaccountActivity.this, "请输入支出金额!", Toast.LENGTH_SHORT).show();
  35. }
  36. }
  37. });

点击新增支出,弹出新增支出界面,如图所示:

4.4.2 我的支出

点击我的支出,弹出我的支出界面,如图所示:

4.5 便签模块

点击收支便签,弹出新增便签界面,如图所示:

4.6 数据管理模块

点击数据管理,进入数据管理界面,界面如图所示:

将收入的数据按照类型分别相加,计算出比例,相关代码如下所示:

  1. List<Inaccount> iin;
  2. if(string[1].equals("Year")){
  3. iin=inaccountDAO.findByYear(dada[0].trim());
  4. }
  5. else{
  6. String[] str=dada[1].split("0");
  7. iin=inaccountDAO.findByMonth(str[1]);
  8. }
  9. for(Inaccount in:iin){
  10. String type=in.getType();
  11. if(type.equals("工资")){
  12. a+=in.getMoney();
  13. }
  14. else if(type.equals("兼职")){
  15. b+=in.getMoney();
  16. }
  17. else if(type.equals("股票")){
  18. c+=in.getMoney();
  19. }
  20. else if(type.equals("基金")){
  21. d+=in.getMoney();
  22. }
  23. }
  24. }
  25. float quarterly1 = (float) (a/(a+b+c+d));
  26. float quarterly2 = (float) (b/(a+b+c+d));
  27. float quarterly3 = (float) (c/(a+b+c+d));
  28. float quarterly4 = (float) (d/(a+b+c+d));
  29. yValues.add(new Entry(quarterly1, 0));
  30. yValues.add(new Entry(quarterly2, 1));
  31. yValues.add(new Entry(quarterly3, 2));
  32. yValues.add(new Entry(quarterly4, 3));
  33. //y轴的集合
  34. PieDataSet pieDataSet = new PieDataSet(yValues, "信息");
  35. pieDataSet.setSliceSpace(0f); //设置个饼状图之间的距离
  36. ArrayList<Integer> colors = new ArrayList<Integer>();
  37. // 饼图颜色
  38. colors.add(Color.rgb(205, 205, 205));
  39. colors.add(Color.rgb(114, 188, 223));
  40. colors.add(Color.rgb(255, 123, 124));
  41. colors.add(Color.rgb(57, 135, 200));
  42. pieDataSet.setColors(colors);
  43. DisplayMetrics metrics = getResources().getDisplayMetrics();
  44. float px = 5 * (metrics.densityDpi / 160f);
  45. pieDataSet.setSelectionShift(px); // 选中态多出的长度
  46. PieData pieData = new PieData(xValues, pieDataSet);
  47. return pieData;

当用户点击统计时,弹出的界面为:

4.7 账号设置模块

将文本框中的用户名与密码获取到数据库中,并使用更新方法,更新用户的账号密码,相关代码如下:

  1. username = (EditText) findViewById(R.id.uname);// 获取密码文本框
  2. password=(EditText)findViewById(R.id.password);
  3. btnSet = (Button) findViewById(R.id.btnSet);// 获取设置按钮
  4. btnsetCancel = (Button) findViewById(R.id.btnsetCancel);// 获取取消按钮
  5. btnSet.setOnClickListener(new OnClickListener() {// 为设置按钮添加监听事件
  6. @Override
  7. public void onClick(View arg0) {
  8. // TODO Auto-generated method stub
  9. UserDao userDAO = new UserDao(SyssetActivity.this);// 创建PwdDAO对象
  10. User user = new User(username.getText().toString(),password.getText().toString());// 根据输入的密码创建Tb_pwd对象
  11. if (userDAO.getCount() == 0) {// 判断数据库中是否已经设置了密码
  12. userDAO.add(user);// 添加用户密码
  13. } else {
  14. userDAO.update(user);// 修改用户密码
  15. }
  16. // 弹出信息提示
  17. Toast.makeText(SyssetActivity.this, "用户信息设置成功!", Toast.LENGTH_LONG).show();
  18. }
  19. });

当用户点击账号设置时,弹出的界面为:

总结

为期一周的安卓实践周即将结束了,这一周,我们小组学习到了很多的知识,从Android知识本身来说,我们通过前三天对家庭理财通的实现,让我们回忆并加强了Android的基本知识,再次熟悉了activity的跳转,提示信息的设置,数据库的建立与使用,集合与适配器的匹配等等,我们每天通过敲代码不断地加强自己的Android知识,熟悉安卓的基本命令,能够一点一点的进步,小组内的学习氛围浓厚,不懂的问题相互讨论都得到了解决,每个人都学到了不少的知识。同时,后两天的功能扩展更是提高了我们学习能力,主动的运用互联网的优势,去学习开源的一些技术,例如piechart,json格式,版本的升级等。与知识本身无关的,这五天小组的成员之间互帮互助,共同进步才是最大的收获。

上传的附件 cloud_download Android理财通.7z ( 35.49mb, 2次下载 )
error_outline 下载需要11点积分

发送私信

生命可以随心所欲,但不能随波逐流

13
文章数
9
评论数
最近文章
eject