目录

1. 项目简介
1.1项目设计目标
1.2项目功能分析
2. 需求分析
2.1特性需求分析
2.2功能需求分析
3. 项目设计
3.1总体设计
3.2数据库ER图
3.3功能模块设计
4. 项目实现
4.1各功能模块的实现

原码转载至:https://download.csdn.net/download/XMJJCY/20382112
有偿的哦
或者加QQ:2372683984
我的android studio版本2021版

1. 项目简介

1.1项目简介
本组设计的记账本app是基于android系统开发的一款手机应用程序,其主要为了满足用户在快节奏的生活中可以较为便捷快速地记录个人收支情况,实现个人财务管理。App可以清晰显示收支情况,并以图表的形式根据个人理财实际需求,对于衣食住行进行分类,记录消费用途,项目能够精确到每一个款项的收入支出时间、结余并且可以设置年度和每月的预算。超出预算提醒,并且有每个月账单统计图表,较为清晰明确帮助用户分析自己当前的支出和收入。
本小组组长为陈钖境,四名成员分别是陈钖境、黄彪益、马昊、成力,由黄彪益同学主要完成登录注册以及主页面的设计,由马昊同学主要完成理财记账模块设计,由陈钖境同学主要负责明细页面以及适配器的设计,由成力同学主要完成个人中心和图表模块设计。

1.2项目功能分析
本项目主要包括以下功能。
1、登陆注册功能。
2、查看收入明细,时间收入支出结余明细一目了然。
3、检索收入及支出记录。
4、记录收入及支出。
4、图表展示收入及支出。
5、设置年度预算,每月预算,查看结余。
6、设置超出预算功能,超出预算给出提醒。
7、设置底部导航栏,将多个页面组合在一起,可以让用户快速的访问希望访问的页面。

2. 需求分析

2.1特性需求分析
(1)易操作、功能简单明确便捷。本记账本初心即为在当今快节奏生活中便捷记录支出收入,帮助用户更好规划理财。此应用应该做到让用户可以很明了的通过界面明白各项功能,操作简单,界面友好易懂。用户可以根据手机界面很清楚的进行记账,删除,查账,更改等功能。
(2)应用的整个页面需要做到外观美观,操作流畅。
(3)软件易维护,系统各个模块设计应该明确易懂。
2.2功能需求分析
用户在登陆后应该便捷的完成查看账本、添加删除账单、搜索账单、图表显示收支、个人中心各项功能。
(1)用户查看账本功能:用户进入app后在主界面可以通过明细便捷查看收支和结余情况,并可明了最近账目的类型例如吃饭、购物、话费、工资、津贴、红包等等。
(2)添加删除账单:可便捷添加和删除账单,并在添加时可以备注账单并选择收支分类例如例如吃饭、购物、话费、工资、津贴、红包等等
(3)搜索账单:可根据备注来便捷搜索相关所有账单。
(4)图表显示:可在图表页面清晰明白看到支出和输入在总支出和总输入里的占比,更好的让用户了解个人收支习惯和基本情况。
(5)个人中心:用户可在个人中心查看个人使用该app的情况,并可设计年预算和月预算,并显示预算余额,刚好地帮助用户完成个人财务管理。

3. 项目设计

3.1.1总体设计
本项目采用MVC三层架构。
包含三个主页面:明细、图表、我的。
3.1.2文件结构与用途
(1)给出工程源代码的结构图,示例如下:

(2)源代码文件。
表4-1 工程的文件用途说明
包 名 称 文 件 名 说 明

main AndroidManifest.xml #Android应用的入口文件,描述项目信息
com.lyc.cashbook App.java #应用的配置文件
com.lyc.cashbook.ui LoginActivity.java #登陆页面
com.lyc.cashbook.ui MainActivity.java #登陆之后的首页
com.lyc.cashbook.ui RegsterActivity.java #注册页面
com.lyc.cashbook.ui FbActivity.java #添加收入或支出页面
com.lyc.cashbook.ui SearchActivity.java #查询信息页面
com.lyc.cashbook.adapter MxAdapter.java #适配器文件
com.lyc.cashbook.adapter MyAdapter.java #适配器文件
com.lyc.cashbook.bean Info.java #收入和支出类
com.lyc.cashbook.bean User.java #用户类
com.lyc.cashbook.base BaseActivity.java #自定义的Activity类
com.lyc.cashbook.base BaseFragment.java #自定义的Fragment类
com.lyc.cashbook.base BaseMainActivity.java #自定义的Activity类
com.lyc.cashbook.fragment MxFragment.java #收入和支出明细页面
com.lyc.cashbook.fragment SRFragment.java #添加收入页面
com.lyc.cashbook.fragment TbFragment.java #图表页面
com.lyc.cashbook.fragment WdFragment.java #我的信息页面
com.lyc.cashbook.fragment ZCFragment.java #添加支出页面

表4-2 资源文件名称与用途
资源目录 文 件 说 明

drawable ic_delete.png #存放布局文件所需要的图片或样式
layout activity_fb.xml #收入和支出明细的布局
activity_login.xml #登陆页面的布局
activity_main.xml #主页面的布局
activity_register.xml #注册页面的布局
fragment_tb.xml #表格的碎片布局
activity_search.xml #查询页面的布局
fragment_mx.xml #收入和支出明细的碎片布局
fragment_sr.xml #添加收入的碎片布局
fragment_wd.xml #我的信息的碎片布局
fragment_zc.xml #添加支出的碎片布局
item_mx.xml #支出和收入列表的布局
view_title.xml #菜单栏布局
menu menu.xml #菜单栏
values colors.xml #颜色样式
strings.xml #字符串
styles.xml#样式布局

3.2数据库ER图

3.3功能模块设计
3.3.1 登录模块
3.3.2 注册模块
3.3.3 理财记账模块
3.3.4 个人中心模块

3.3.1 登录模块
(1)该功能模块首先制作界面,然后对账号和密码进行操作,密码验证后才可以进到软件,具有安保性。通过查询数据库来查询是否存在该用户,并且判断用户名或密码是否正确。

关键技术:如果没有账号,点击“注册”跳转到注册界面;如果已经有了账号,点击“已有账号?去登录”跳转到登录界面,账号或者密码错误都会提醒,输入账号密码正确,提示“登录成功”会跳转到账单界面,跳转时传递数据(用户的id) ;数据库的查询;

(2)给出该功能模块的关健代码

  //登录private void login() {String account = mEt_account.getText().toString();String psw = mEt_psw.getText().toString();if (TextUtils.isEmpty(account)) {toast("账号不能为空");} else if (TextUtils.isEmpty(psw)) {toast("密码不能为空");} else {//本地所有用户final List<User> all = LitePal.findAll(User.class);//查询本地所有用户for (int i = 0; i < all.size(); i++) {//如果有输入的账号的if (all.get(i).getUsername().equals(account)) {//如果账号存在去匹配这条数据的密码if (all.get(i).getPassword().equals(psw)) {toast("登录成功");//保存用户id和登录状态到本地,不用重复登录getSharedPreferences("user", MODE_PRIVATE).edit().putString("userId", all.get(i).getId() + "").putBoolean("isLogin",true).commit();startActivity(MainActivity.class);finish();}else {toast("密码错误");}}else {toast("账号不存在");}}}}

3.3.2 注册模块
(1)该模块先制作界面,对新用户的账户、密码进行注册,并且需要重复确认密码,输入两次密码不同时会提醒“两次密码输入不一致”。管理密码验证功能,注册成功后数据会存入数据库中。
关键技术:如果已经注册过账号,可以点击“已有账号?去登录”跳转到登录界面数据库的插入:
(2)给该各功能模块的关键代码

//注册private void register() {String account = mEt_account.getText().toString();String psw = mEt_psw.getText().toString();String psw_again = mEt_psw_again.getText().toString();if (TextUtils.isEmpty(account)) {toast("账号不能为空");} else if (TextUtils.isEmpty(psw) || TextUtils.isEmpty(psw_again)) {toast("密码不能为空");} else if (!psw.equals(psw_again)) {toast("两次密码输入不一致");} else {User user=new User();user.setId(System.currentTimeMillis());//设置iduser.setUsername(account);//设置账号user.setPassword(psw);//设置密码user.setMonthBudget("0");//设置默认月预算user.setYearBudget("0");//设置默认年预算boolean save = user.save();//保存数据if(save){toast("注册成功");finish();}else {toast("注册失败");}}}

3.3.3 理财记账模块
(1)该模块先制作界面,可以记录收入支出的金额,进行描述,具体发生时间,并且保存,点击右上角菜单按钮(关于、换背景、关闭/开启音乐)。点击界面右下方红色“+”跳转到记账界面,点击支出,添加类别相应支出金额数据点击确定按钮即可添加记录,支出界面操作也是如此。然后跳转到账单明细页面,
每一条收支记录详细到添加时间,右滑单独账单点击“垃圾桶”即可完成删除操作。
关键技术:数据库添加;页面的跳转(收支界面到记账界面之间来回传递数据)。

(2)给该各功能模块的关键代码

 // 设置创建者listView.setMenuCreator(creator);listView.setOnMenuItemClickListener(new SwipeMenuListView.OnMenuItemClickListener() {//设置菜单项目的监听事件@Overridepublic boolean onMenuItemClick(int position, SwipeMenu menu, int index) {//打开菜单项单击switch (index) {case 0:Info infoBean = new Info();infoBean = list_show.get(position);//获取列表位置LitePal.delete(Info.class, infoBean.getId());//在数据库中找到list_show.remove(position);//删除adapter.notifyDataSetChanged();//通知数据集已更改setData();Log.d("delete", "onMenuItemClick: "+"删除成功");break;}// false:关闭菜单;正确:不关闭菜单return false;}});
   case R.id.btn_reset:mTv_value.setText("0");//重置归0break;case R.id.btn_sure:if (mTv_value.getText().equals("0")) {toast("请输入金额");} else {SharedPreferences sharedPreferences = getActivity().getSharedPreferences("user", Context.MODE_PRIVATE);String userId = sharedPreferences.getString("userId","");Info info = new Info();info.setId(System.currentTimeMillis());//设置idinfo.setType(2);//设置类型info.setName(name);//设置类别info.setRemark(mEt_remark.getText().toString());//设置备注信息info.setTime(mTv_time.getText().toString());//设置时间info.setMoney(mTv_value.getText().toString());//设置金额info.setRes(res);//设置图片资源info.setUserId(userId);boolean save = info.save();//保存到数据库if(save){toast("记录成功");getActivity().sendBroadcast(new Intent("refresh"));getActivity().finish();}else {toast("记录失败");}}break;

3.3.4 个人中心模块
(1)该模块先制作界面,包括每个月预算就是用来进行提醒,与改进措施的;我的界面里有相关预算设置(2020年预算、2020年余额、6月预算、6月余额)及退出登录操作。点击设置即可设定预算和修改预算,点击”退出登录”跳转到登录页面。
关键技术:页面的跳转

(2)给该各功能模块的关键代码

    //得到登录存在本地的用户idmUserId = getActivity().getSharedPreferences("user", Context.MODE_PRIVATE).getString("userId", "");List<User> userList = LitePal.findAll(User.class);for (int i = 0; i < userList.size(); i++) {if(String.valueOf(userList.get(i).getId()).equals(mUserId)){//匹配到id 获取该用户的月和年预算String monthBudget = userList.get(i).getMonthBudget();String yearBudget = userList.get(i).getYearBudget();if(monthBudget.equals("0")){//如果没有设置月预算mTv_month_ys.setText("点击设置");mTv_month_ye.setText("暂未设置预算");}else{mTv_month_ys.setText(monthBudget);mTv_month_ye.setText(String.valueOf(Double.parseDouble(monthBudget)-totalMonty));double yue = Double.parseDouble(monthBudget)-totalMonty;if (yue<0){mTv_remind.setText("超出预算"+Math.abs(yue));}}if(yearBudget.equals("0")){//没有设置年预算mTv_year_ys.setText("点击设置");mTv_year_ye.setText("暂未设置预算");}else {mTv_year_ys.setText(yearBudget);mTv_year_ye.setText(String.valueOf(Double.parseDouble(yearBudget)-totalMonty));}}}

3.3.5 查询统计模块
(1)该模块先制作界面,可以查询用户在某天某月的收支记录;

(2)给该各功能模块的关键代码

 //找到控件@Overrideprotected void initView() {setTitle("搜索");mList = findViewById(R.id.list);mEt_search = findViewById(R.id.et_search);findViewById(R.id.btn_search).setOnClickListener(this);//按键触发mList.setLayoutManager(new LinearLayoutManager(this));}
 if(TextUtils.isEmpty(keyword)){searchList=list;}else {//如果搜索收入,显示所有收入数据if("收入".equals(keyword)){for (int i = 0; i <list.size() ; i++) {if(list.get(i).getType()==1){searchList.add(list.get(i));}}//如果搜索支出,显示所有支出数据}else if("支出".equals(keyword)){for (int i = 0; i <list.size() ; i++) {if(list.get(i).getType()==2){searchList.add(list.get(i));}}}else {//如果明细信息匹配搜索结果,则添加到列表for (int i = 0; i < list.size(); i++) {if(!list.get(i).getName().contains(keyword)){if(!list.get(i).getMoney().contains(keyword)){if(!list.get(i).getRemark().contains(keyword)){if(!list.get(i).getTime().contains(keyword)){}else {searchList.add(list.get(i));}}else {searchList.add(list.get(i));}}else {searchList.add(list.get(i));}}else {searchList.add(list.get(i));}}}

4. 项目实现

4.1各功能模块的实现
登陆界面
用户可以直接输入账号密码进行登陆。如没有账户,可以通过点击下方注册按钮,跳转到注册页面,进行用户的注册。

注册界面
用户输入用户名和密码,点击注册。

主页面
登陆之后进入主页面,主页面分为三大区域。包括菜单栏、内容区域、底部导航栏。点开侧滑栏,显示效果如下图。

记账页面
点击加号,跳转到记账界面。包括支出、收入。

收支明细页面(主页面添加数据之后)
精确到用途、时间、收入支出结余。

搜索页面
点击搜索按钮,即可跳出输入框,输入想要搜索的内容即可完成检索功能。

图表页面
以饼图的形式把每个月的支出百分比清楚的体现出来。

我的页面
包含年度预算及月度预算功能及超出预算提醒功能。

原码转载至:https://download.csdn.net/download/XMJJCY/20382112
或者加QQ:2372683984
我的android studio版本2021版

基于 Android studio 开发的一个记账本相关推荐

  1. (超多图)基于Android studio开发的一个简单入门小应用(超级详细!!)(建议收藏)

    基于Android studio开发的一个简单入门小应用 一.前言 二.前期准备 三.开发一个小应用 五.运行应用 一.前言 在暑假期间,我学习JAVA基础,为了能早日实现自己用代码写出一个app的& ...

  2. 基于Android Studio开发的旅游记录与分享APP源码,Android旅游路线记录与分享APP源码

    GoTravelling 旅游路线记录与分享Android App--同享旅行 下载地址:基于Android Studio开发的旅游记录与分享APP源码 App介绍 目标用户 在寒暑假内希望结伴同游的 ...

  3. 基于android studio开发多人电话语音视频会议入门实例demo含app下载链接

    目录 说明 视频演示 图文演示 android版本支持 相关下载 说明 这是一个相对完整的客户端+服务器端的项目,适合入门学习研究.包含android摄像头.麦克风使用权限的动态申请,控件的事件绑定, ...

  4. java基于安卓的人脸识别_基于android studio开发的 opencv关于android人脸识别的DEMO

    (2018年11月23日 在 链接 补充了一个新的BUG) 一个新项目的导入 可能会遇到多个问题,就这些问题 做个 解决集合,以便日后回顾, 版本 : android studio3.1.4 ,ope ...

  5. 基于Android studio开发高德地图之连续定位、标点、画线

    目录 获取key值 创建地图 layout文件 Activity 源码:https://github.com/zzjdreams/gaode_map_track 截图:(这个是我叫我弟截图的,所以不是 ...

  6. Android移动应用设计与开发(第2版)——基于Android Studio开发环境 胡敏 黄宏程 李冲编著

    Android移动应用设计与开发_基于Android_Studio开发环境_第2版 电子资源不可上传,需要加q+1074476581 麻烦备注好书名哦

  7. 基于Android Studio开发的笔记APP

    1 程序的运行环境.安装步骤 运行环境 JDK 1.8 compileSdkVersion 27 程序的组成部份 Xml布局文件 Java程序文件 点击此处下载文档和源码

  8. 《ArcGIS Runtime SDK for Android开发笔记》——(5)、基于Android Studio构建ArcGIS Android开发环境(离线部署)...

    1.前言 在上一篇的内容里我们介绍了基于Android Studio构建ArcGIS Runtime SDK for Android开发环境的基本流程,流程中我们采用的是基于Gradle的构建方式,在 ...

  9. SuperMap iMobile+Android studio开发入门(二)——超图示例代码运行

    背景:这里运行的是"产品入门"的"基于Android studio开发移动GIS程序"的"开发三维移动GIS程序",本篇对超图帮助文档进行了 ...

最新文章

  1. 自动机器学习新进展!性能超过人类调参师6个点,AutoGluon 低调开源
  2. mysql兼容性高吗_MySQL与标准的兼容性
  3. 图解高性能服务器开发两种模式,第四章 NETTY高性能架构设计
  4. Linux下socket通信和epoll
  5. python中双向索引_对索引Include子句的深入分析
  6. jfinal 源码中文乱码解决
  7. 《软件测试》实验一:测试入门
  8. jQuery学习笔记02
  9. 植树问题python_《程序员的数学》思考题(一)
  10. linux安装软件命令总结
  11. 【网络仿真】ns-3基础(下)
  12. mysql联合主键的坑
  13. wps怎么减少行间距_wps怎么设置行距_wps的行间距在哪怎么调整单倍行距及1.5倍行距_wps文字_office之家...
  14. 用python画小狗,用turtle画个单身狗送给自己~
  15. 数据库SQL实战 --42.将id=5以及emp_no=10001的行数据替换成id=5以及emp_no=10005
  16. LocalSend - 文件传输工具
  17. html中的ol 和li,html中ol标签与li标签的高级应用
  18. what is Differential steering and skid steering ?
  19. kafka生产者的发送消息的流程以及代码案例
  20. 第七次ScrumMeeting博客

热门文章

  1. 网易患病员工被保安赶出公司,程序员该如何应对中年危机?
  2. 2月24日android学习笔记——ListView
  3. 通用AppKey签名验证软件
  4. 面试(八)简短英文自我介绍
  5. python3命令需要使用命令行开发者工具_3 个 Python 命令行工具
  6. 故事里,读着别人的故事
  7. 我国电信运营商经营即时通信业务前景分析
  8. 使用vmware vconverter从物理机迁移系统到虚拟机P2V
  9. 【Tools】SecureCRT8.7安装和注册教程
  10. ecology9.0常见开发Bug