




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第一章绪论基于JAVA的财务管理系统设计与实现目录TOC\o"1-2"\h\u4906第一章绪论 1139681.1研究工作的背景与意义 1319811.2国内外研究现状 2151921.3本文主要研究的问题 287041.4本论文的结构安排 317666第二章相关理论与技术介绍 4248292.1Java语言 482462.2Spring及其后端技术 56432.3Vue框架与前端技术 6121292.4数据库相关技术 7210972.5本章小结 715768第三章系统需求分析 8193623.1需求分析概述 834413.2需求可行性分析 8133603.3系统功能需求分析 9111603.4非功能需求分析 11127693.5本章小结 122869第四章系统详细设计 13260164.1系统总体设计 13251794.2数据库设计 14191064.3本章小结 1612057第五章系统具体实现 17163175.1系统开发环境 17209655.2账户管理模块 1752835.3财务类别模块 20205935.4收入支出项目模块 224825.5资产管理模块 25113145.6报表统计管理模块 27270815.7后台管理模块 29210265.8本章小结 3429099第六章系统测试 3555066.1测试方法 35159006.2测试目标 35301116.3具体测试情况 35128176.4测试结论 37120206.5本章小结 3720498第七章全文总结与展望 38230647.1全文总结 3855917.2后续工作展望 38第一章绪论1.1研究工作的背景与意义随着社会的不断进步和发展,家庭财务的管理面临了巨大的挑战,收入与支出的账单越来越复杂,而且账单的种类也变得越来越多,所以合理的规划和进行适当的理财会变得比之前困难了许多。而且随着这种现象的不断发展,以后人们依靠传统的管理方法的难度越来越大。在这种背景之下,急需一个好的家庭财务管理系统,来解决上述问题和对家庭内部的财务状况进行管理。另一方面虽然当前很多人的收入水平有了显著的提升,却出现了不知如何理财的情况。错误的投资与消费行为可能会导致无法维持生计,这是因为人们对于他们的消费记录完全没有了解。为了解决这个重要的问题,财务管理系统就出现了。因此,开发一个可以快捷便利管理家庭各种财务数据的家庭财务管理系统是有必要且必不可少的。家庭财务管理的实质是指一个家庭如何精心规划,优化资源配置,使有限的资金发挥最大的作用,使家庭财务的情况保持在一个健康的状态,以满足家庭对金钱控制的经济行为。1.2国内外研究现状家庭财务管理系统以计算机技术为支撑,让当前的管理系统可以小巧易用的形式出现的人们的视线内,而且这就为每个家庭成员通过终端来随时访问系统提供了基础。家庭财务管理系统在国内外很多地方都得到了广泛的应用。另一方面国外在很早以前就意识到了开发和使用财务管理系统,并推动相关技术的发展,这些系统管理方便、智能化程度高,它们已经实现了家庭财务的合理分配和管理,同时在一定程度上减少了金钱的浪费。由于国外起步较早,所以家庭理财系统已经发展得比较成熟。随着计算机在我国的日益普及,当前国内也出现了很多流行的财务管理平台,如金碟、用友软件。但是对于家庭管理这方面来说,并不能完全满足家庭财务管理的需要。现在家庭的记账方式已经由传统的手工记账变成了信息化记账方式,为普通的家庭成员提供了极大的便利。但是随着现在收入与生活水平的提高,出现了很多新的消费与支出的种类,账单内容也越来越多样化。当前的家庭财务管理系统,许多实用且便捷的功能并没有得到实现,现在还只是停留在管理家庭财务收支的基础层面。没有达到财务优化、提出理财建议的水平。1.3本文主要研究的问题本文主要研究的是如何开发出一个易用的家庭财务管理系统,使用后可以有效地解决手工账务管理效率低、不准确、保密性差等问题,使家庭成员可以随时随地利用信息化手段方便地记账、理财,了解家庭财务状况,更好地合理规划财务,节省开支。首先在设计程序时就要先做好详细的界面设计和概要设计,然后根据界面设计来使用相关的UI库来进行构建前端,然后要约定相应的接口来使得前后端进行交互。后端可以根据用户的权限和前端的传入的数据来进行操作,编写相应的业务逻辑,比如查询、添加、删除各类财务信息,然后进行对应的数据库操作,实现出一个完整的系统,并且最后做好测试工作。1.4本论文的结构安排本论文的结构安排如下:1. 绪论:这部分介绍了当前财务管理系统的研究背景和意义。2. 相关理论与技术介绍:这部分主要说明的是本系统所采用的技术以及相关介绍。3. 系统需求分析:这部分根据实际情况具体的分析本系统需要实现的功能,以及详细的说明需求分析。4. 系统详细设计:这部分就是进行详细的系统设计,包括数据库表和功能的设计。5. 系统编码与实现:这部分就是系统具体的编码细节以及实现原理。6. 全文总结与展望:最后进行了总结,总结了研究工作的内容以及还存在的问题与不足。第二章相关理论与技术介绍第二章相关理论与技术介绍2.1Java语言当前市场已经出现了许多后端语言,如Java、Go、PHP等技术,但是本项目选择了Java作为后端语言。因为Java具有良好的跨平台能力,这说明编译后的Java代码可以在所有支持JVM的平台上进行运行,而且无需重新编译。Java代码是运行在虚拟机上的,虚拟机与平台架构无关,所以它可以在一般的服务器平台上使用。而且Java作为一门在后端出现的最多的语言,本质上是由于Java经过了多年的发展,已经制定出了一套非常成熟的解决方案,从处理请求到处理数据、访问数据库都已经有组织或者公司来制定了一套标准化的规则或者是已经有了相应的工具来处理这个问题。这就可以让我们在编写后端时,当遇到什么问题,现有的方案一般都可以解决,所以本项目使用的开发语言首选是Java语言。本项目采用的开发版本是JDK11,这是最流行JDK1.8的第一个后续LTS版本,它相较于之前增加了非常多的新功能,如全新的Lambda表达式、StreamAPI等,而且对于JVM也提供了更多的优化,提升了Java的运行速度。JVM采用了很多技术来提升运行效率,比如虚拟机使用了垃圾收集算法,这可以让Java和其他编程语言不同,自动进行对象内存的回收可以不用让开发者来手动释放内存,他可以极大的避免内存泄漏,当一个线程结束之后相应的对象内存就会被释放,所以Java的内存管理十分适用于后端开发。而且Java最近的版本还支持了JIT即时编译,把Java指令直接转成了处理器指令,直接提升了运行效率,避免了因为虚拟机导致的效率问题。JVM作为Java代码运行的环境,分为了程序计数器、虚拟机栈、本地方法栈、堆、方法区等区域。下图是JVM运行时的数据结构:图2-1JVM运行时的数据结构2.2Spring及其后端技术在之前,JavaEE是一个标准,包含了许多在后端开发时遇到的问题的解决方案,但是随着技术的发展,为了解决JavaEE困难的使用方式,Spring这个框架便出现了,Spring框架是Java平台上一个非常常用的企业级框架,因为Spring是开源的、免费的,所以Spring框架所以在网站后端开发中非常受欢迎,本项目也认同并采用了这项技术。Spring的核心为IOC(控制反转)和AOP(面向切面编程),IOC可以使传统的手动new一个对象变成由IOC容器来提供这个对象,因为依赖的实例化交给了容器,所以减少了实例化模版代码。而且由容器来实例化也大大的降低了代码之间的耦合性。AOP的出现是为了解决在很多接口中都出现的重复代码,如:权限验证、log日志记录,简化这些代码。利用AOP可以分离业务逻辑,让不相关的逻辑代码尽量不要放在一起,这样就可以有效地解耦相关业务逻辑,提高代码的可重用性。SpringMVC的目的是构建出一个完整的Web后端的架构。MVC的意思是模型-视图-控制器。这种架构将后端程序分为三大部分:模型、视图和控制器。模型部分就是代表在系统中所有存在的数据的抽象,它可以作为视图和控制器组件之间的连接。视图组件用于显示应用程序的UI,控制器处理所有的传入请求,然后使用模型操作和处理数据,并反馈到视图,这时视图就会有最后的显示内容。MVC是最常用的Web开发框架之一,用于创建方便扩展的程序。Spring在不断地发展过程中又出现了SpringBoot,这是为了解决Spring复杂的配置以及部署而出现的。SpringBoot提倡习惯大于约定,一般是为代码和注释配置提供默认值,这可以直接快速的新建一个Spring项目,省去复杂的配置环节,提高开发的整体效率。SpringBoot的使用可以让本项目的搭建更加简单,其中大量的工具包也为开发提供了许多帮助,而且SpringBoot还解决依赖包之间的版本冲突问题,它引入了大量的包的时候会附加说明当前包的兼容版本说明,这样直接解决了包与包之间的兼容问题。而且Spring家族中还提供了很多非常实用的框架,比如SpringDataJPA这个ORM框架,可以更加方便的操作数据库,通过对象关系映射可以把数据转为对象进行操作,操作实体对象来执行CRUD操作,而且它不是直接使用SQL语句,而是建立对象与对象之间的联系避免了程序的SQL语句紧密耦合。还提供了一个很实用的权限管理框架——SpringSecurity,它可以和SpringBoot非常紧密的结合起来提供服务,SpringSecurity的本质上是基于拦截器来实现的,所有访问的用户都必须经过授权过滤器,由框架来判定是否拥有权限访问。SpringSecurity可以选择基于身份进行认证还可基于权限认证,而且他支持使用注解来控制方法权限,只需要在需要认证的方法上加上注解就可以直接对访问者进行权限检查。2.3Vue框架与前端技术Vue.js是一个开源的前端JavaScript框架,用于快速构建用户界面和单页应用。它作为本项目的前端框架,可以通过Axios等插件来使用Json与后端进行交互,然后动态的生成页面和传输输入数据。而且本项目的前端使用SPA这种设计方法来编写的,带来了了更好的使用体验。现在SPA(单页应用)正变得越来越流行。其中每个新页面的内容不是通过加载一个新的HTML页面来提供,而是通过JavaScript对现有页面本身的DOM元素进行处理,然后动态生成新的页面。在传统的网络架构中,一个页面可能会转到另一个HTML页面,浏览器会从头下载并显示它。而现在SPA允许用户在更新或获取新元素的同时继续浏览页面,然后可以直接生成新的页面,带来更快的内容重载。使用SPA应用程序可以通过AJAX请求动态地从服务器获取内容。这不仅允许浏览器保持当前页面的显示,而且还可以在后台向服务器发送请求,以获得额外的内容或直接生成一个新的页面。此外,HTML5允许我们在不重新加载页面的情况下改变页面的URL,并允许我们在不同的页面使用不同的URL。其中,Vue优点还有官方提供了VueCLI这个可以快速构建一个完整的Vue项目的构建工具。这个工具可以很容易地使用webpack打包,并且带有合理的默认配置。它还提供了一个非常通用和丰富的插件系统,可以很容易地扩展当前的项目。最重要的是,它为创建和管理Vue.js项目提供了一个完全图形化的用户界面,使用户能够快速开始编写项目,而不必关注复杂的配置。2.4数据库相关技术当前的市场上使用的比较多的就是SQLServer、OracleDatabase和MySQL,在评估之下项目采用了MySQL这个数据库,因为它是开源免费的且功能强大,本项目使用的Spring也支持直接对该数据库进行此操作。MySQL是一个的关系型数据库。MySQL中数据的组织方式是相同类型的数据放到同一个表之中,表中的每一列包含相同类型的数据,每一行代表每一条数据。每块数据都有自己的主键。主键是唯一的,一个表中的键值不能出现两次。那么存储相应的数据时,比如需要存入财务记录,只需要建立一个相应的表专门存储财务数据。而且数据之间使用外键来建立关系,表与表之间可能存在联系。MySQL还具有事务的功能,每个事务都是原子性的,所以如果一个操作在任何阶段失败,在事务中发生的整个修改都会回滚,比如在存入财务数据时出现了问题,那么数据会回滚,并不会存入数据库。MySQL通过这一点来保证数据的完整性。MySQL是为满足高性能应用的要求而设计的,满足了本项目对于性能的需求。2.5本章小结本章对家庭财务管理系统编写所需要使用到的技术进行一些简单的介绍,主要是介绍Java技术,前后端技术,数据库等,为之后系统的设计与详细编写提供了坚实的基础与准备。第三章系统需求分析第三章系统需求分析3.1需求分析概述需求分析,是为正在构建或修改的新软件定义用户期望的过程。需求分析包括确定一个新的项目需要完成所要满足的需求或者功能,再考虑到可行性以及有可能会出现的冲突的情况下,分析和确定软件需求的任务。任何一个项目的开始,都是从需求分析开始的,因为它影响到项目开发工作的所有阶段。如果没有做好详细的需求分析,很可能会在后面的阶段出现不可预料的问题。当然可能会时常遇到模糊、不确定的需求,在这种情况下,最重要的就是要准确的分析和定义需求。在本项目,我们必须首先要确定这个系统中每一个模块的具体工作,总结出相应负责的功能,并规划出各个子功能,将总的功能划分为互不影响的子功能。并根据模块的难度和工作量划分工作时间和进度,从而提高工作效率,减少不必要的成本。由于现在许多家庭财务管理制度的不完善,所以一些做的比较出色的管理系统也值得被借鉴。3.2需求可行性分析本课题是在现在网络技术已经相当成熟的基础上提出的,但是市面上的家庭财务管理系统可能还有一些地方做的并不是这么好,需要进一步的改进,本系统通过了理论与实践的研究提出了一个实用的系统。在技术上因为当前我国互联网技术经过了飞速的发展,现在使用宽带与移动上网的人数已经非常庞大,接入网络的基础设施建设已经非常完善,所以云端技术已经得到了广泛的运用,未来的应用趋向于上手即用,给用户带来更便利的操作作为核心。而具体的技术上使用Java作为开发语言使整个系统的开发变得更加的简便,因为现在的Java已经经过了很久的发展,成熟的技术以及活跃的开发者可以让项目的开发得到强大的技术支持。在现在JavaEE平台出现的Spring大大提升了后端开发的效率,已经成为了Java企业开发中不可缺少的框架技术,而且还有很多具有强大功能的开发工具来帮助开发人员。前端技术本就是一门日新月异的技术,不断推出的新框架和新工具就是为了让构建页面更加容易,种类繁多的前端框架让简单设计出一个美观大方的前端界面成为了现实。在经济上,人们的生活质量有了明显的提高,购买和使用手机或电脑变得越来越普遍,这时就完全可以实现每人一台终端设备。同时,我国正在不断加大通信行业的发展力度,因此,基础设施的保证和网络传输质量的逐步优化和提升,是云端程序发展的基础。因为本系统设计时的目标是面向家庭内部,所以只需要家庭内的成员简单的注册便可以使用,所以这个过程不仅方便,而且管理系统中的功能非常全面。这种系统可以更快、更好地处理当前家庭的家庭财务信息。用户需要的随时掌握和了解当前家庭财务状况是本程序一个重要的需求点。而且设计程序时另一个要考虑的目标就是易用,易用对于普通人来说是非常重要的,这让每一个家庭成员都可以简单的操作系统。因为本系统部署在云端上,所以每个家庭成员只需要一台可以上网的终端就能够直接简单、便捷地进行财务数据管理。3.3系统功能需求分析3.3.1总体需求分析本系统作为家庭财务管理系统,其中最为主要的目的就是进行财务管理,而管理系统的核心功能就是对日常消费和收入的记录与统计。系统分为了多个模块,模块之间相互依赖来进行工作。首先是用户管理模块,它提供了使用这个系统的普通用户,一般使用者开始时都是先注册用户,然后使用这个身份来使用系统。然后接下来就是可以往系统内录入财务数据了,一般这个财务数据就是用户的某笔收入,如工资,或者是某笔支出,类似购买东西等消费。然后在系统内部有数据后可以方便的查看之前的数据,调用报表统计管理模块来直观的了解当前的经济状况。而且还可以使用资产管理记录当前的存款或负债情况。在系统中还有一个特殊的用户,就是管理员,设置管理员的目的就是查看管理普通用户的数据和了解整个家庭的财务状况。3.3.2用户管理在本系统中,定义了两种用户的角色,分别为普通用户以及管理员。当一个新的家庭成员第一次使用本系统的时候,他首先必须注册一个新的用户,之后他就可以使用系统了。每一个用户都提供了查看自身信息、修改自身信息、修改密码的功能。查看信息可以知道自己的名称、身份、电话号等信息,修改信息可以对这些相关信息进行修改,然后用户可以进行密码修改。管理也可以像普通用户一样的使用系统,但是两种用户的身份在系统之中所起到的作用不同,管理员还有查看用户信息的功能和权限。3.3.3财务管理财务管理提供的功能有数据管理、财务类别这两块内容,财务类别是对于用户收入或支出信息的分类,比如说这条支出信息属于伙食或娱乐等类别,用户可以根据自己的情况新增自己需要的类别,这样就可以给每一条信息进行分类,方便管理。然后财务数据管理就是具体进行录入和查看某条信息的功能,录入时需要输入这笔收入或支出的金额、日期,还可以补充详细的描述信息,然后可以把这条记录归类到某个类别上。这样就相当于可以把用户在生活中各方面的收入支出都记录到了系统之中,之后还提供了查看和删除这些信息的功能。这些数据为下一步的归纳统计起到了铺垫。3.3.4报表统计管理为了解决统计数据时需要花费大量时间的问题,报表统计管理提供了报表生成和导出数据的功能。报表生成根据每周、每月、每年不同的时间段的统计,然后根据这个时间段的数据生成了相应的报表,这些报表的内容包括这个时间段的总收入和总支出,然后还生成条形统计图显示每周、每月、每年的数据与一个数据排行榜,排行榜显示金额最大的几条数据。而且还根据了不同的类别统计了这些消费的各自占比,形象的展示了整个家庭收入与支出的趋势,是了解财务情况的重要工具。还有一个实用的功能,就是直接把这个用户的数据导出到Excel,让用户可以自行下载保存。3.3.5资产管理资产管理的功能是记录当前用户的存款以及负债的情况,使用这个功能时,需要先设置相关的存款负债记录,当用户有新的存款或负债数据就可以直接修改,这时相当于在原有的基础上进行增加。当然也提供资产查询功能,显示当前资产数据以及净资产净资产。这就达到了资产,包括存款和负债的管理。3.3.6后台管理因为管理员必须要管理整个家庭系统的数据,所以在使用管理员登陆了系统之后,会出现普通用户没有的操作界面,这个界面下提供了管理功能。管理员的管理功能分为操作用户数据和查看家庭统计报表两个大类。在操作用户数据下可以查看到本系统下的所有用户,可以直接删除某个用户和查看这个用户财务信息,选择查看用户财务信息时可以查看该用户具体的身份信息和他录入的财务信息,当然也可以对这些财务信息修改与删除。管理员还拥有查看本系统统计报表的功能,所有用户的财务数据构成了系统统计报表,在这个报表下需要显示所有用户的总收入与总支出,还有对每个用户数据在总数据中的占比进行统计,显示出谁的收入最多或支出最多。这样就对家庭内部的财务一目了然,方便制定以后的消费计划。最后提供了一个通知家庭成员的公告功能,管理员可以利用这个功能把需要给家庭成员的信息发布在公告系统上,如可以发布一些接来下花费的建议。当普通成员登录系统时就可以查看到相应的公告,这就起到了通知的作用。3.4非功能需求分析为了使整个系统更加的稳定和用户有更好的体验,非功能需求的分析是必不可少的,一般的非功能需求有以下几点。3.4.1安全需求每个用户的数据存在数据库上,而且用户的密码不能使用明文存储,必须经过加密才可以存在数据库上。当新一个新的用户注册了本系统之后,后端会采用Bcrypt加密密码,然后把它存到数据库中。这个加密完的数据并无法解密,而下次登录是通过处理传入的密码,使用相同的加密方法来进行加密,然后比对这两串密钥,如果相同那就代表输入的密码正确。前端在访问后端数据的时候必须要有相应的用户身份与权限验证模块,来保证数据访问的安全。在用户没有登录或者登录用户的权限错误时拒绝访问,在对数据库进行读取和写入信息的时候必须保持数据的隔离性和独立性,以防出现数据错误。3.4.2性能需求性能需求是最能影响用户体验的需求,越好的性能可以带给用户越好的体验。如果系统响应过慢,就带来了较大的使用问题。一般系统的响应时间不能超过3秒,在系统运行的过程中必须一直保持及时的响应,在处理较多数据时尽量不卡顿。3.4.3易用性与健壮性需求系统的易用性主要包括了系统在与用户进行交互的过程中,用户可以快速上手和了解系统使用方法。最常用的交互方法是使用视窗交互,可以进行的数据操作,采用比较简洁的界面,不但富有人性化,而且操作不会很复杂。在使用时只需要进行点击和确认,把数据输入在输入栏中就可以录入信息。系统设计规范、清晰,尽可能满足一般人的使用习惯,符合实际应用。系统内容需要清晰明了,相关信息方便管理者查看。同时一些限定字段应该直接让用户选择,节省用户的时间,减少一些不必要的输入来提升效率。还应该一些限制机制来处理非法数据,当系统接受到了非法数据之后,可以有相应的处理机制来处理这个非法错误,来提高系统的健壮性,系统不会轻易的产生崩溃。3.4.4可扩展性需求系统还有可能在后期进行不断地开发和维护,所以可扩展性也十分重要,系统的架构如果直接独立为多个模块,各个模块之间相对独立,模块实现隐蔽、高内聚、低耦合等的特点,那么维护和扩展就比较简单了。在需要新功能时可以直接增加新的模块,其中如果有哪个模块出现了问题也只需要修改那个模块,这时系统就具有了可扩展性。3.5本章小结本章对于家庭财务管理系统的需求分析做了详细的叙述,分析了家庭财务信息平台的基本要求,为系统的编写奠定了基础。第四章系统详细设计第四章系统详细设计4.1系统总体设计4.1.1系统架构设计本系统采用了前后端分离的架构,这个架构把前后端进行分离,前端完全负责渲染页面和提供用户操作,后端进行处理和存储数据,之间采用Json来传递数据,各个部分各不干扰,相互独立,然后通过工具将前端和后端的各自成果结合起来。最终实现开发效率的最大化。是现在非常流行的架构。1. 前端作为View层,提供了与用户进行交互的操作页面,可以显示需求的数据,获得当前用户输入的数据并转发给后端,完成了人与系统之间的交互。2. Controller层接收与转发用户请求,然后再把这个请求转到具体的业务处理函数去进行操作,当处理完数据之后就会把请求的数据重新返回给前端。3. Service层就是系统的业务逻辑部分,这部分一般是获取数据库中的数据并且进行相应的处理,然后把处理的结果返回给上层。它就是Controller层与Dao层之间的连接,属于整个系统非常重要的一部分。4. Dao层一般是与数据库进行交互的模块,包括对于数据库的增删查改。这部分一般会由ORM框架来实现,它会提供功能强大、使用简单的操作数据库的方式。总体架构如下图所示:图4-1系统的总体架构4.1.2系统流程设计本系统的流程是:用户进入系统后会跳转到登录页面,然后输入用户名和密码,用户在系统验证通过之后就会跳转到主界面。系统会根据用户的身份权限不同,显示不同身份权限的操作界面。用户可以使用相应的功能模块,包括账户管理、收支项目管理、分类管理、报表统计等。接下来使用流程图描述系统的流程设计,流程图是一个使用图形来表示步骤的方法。它使用图形和箭头显示每一步步骤,可以在展示算法、系统工作的流程中发挥巨大的作用。通常情况下,流程图将步骤显示为各种类型的框图,并通过箭头按顺序来连接它们。具体系统流程如下图所示:图4-2系统的流程图4.2数据库设计数据库的设计对于系统的详细设计是非常重要的。本系统数据库设计的目标是通过对数据表各个字段的设计和构建出合理的表结构,有效管理系统的数据流,方便用户对系统的管理。最终达到的设计目标就是可以让数据的存储和组织井井有条。在保证数据完整性和方便数据访问操作的同时,数据冗余度要尽可能小,管理要更简单、更清晰、更容易操作。数据库是有效组织系统数据的有力工具,所以要想设计好数据库,需要详细分析系统中的各个模块功能和这些模块需要的数据储存的要求,然后设计相应的数据表结构。接下来是数据库总体的设计与各个数据库之间的关联,在数据库之中涉及了五张表,分别为Data、Member、Asset、Type、News五张表,这五张表分别代表了财务信息表,用户表,资产表,财务类型表,公告信息表。图4-3数据库的设计图接下来进行各张表的详细介绍:Member表:这个表用于存储每一位用户的个人信息字段名数据类型约束描述Id(主键)BigintNotnull用户的唯一标识符UsernameVarcharNotnull用户名NameVarcharNotnull昵称PasswordVarcharNotnull密码AgeBigintNotnull年龄SexVarcharNotnull性别TelephoneVarcharNotnull电话RoleVarcharNotnull用户权限身份Data表:这个表用于存储每一条财务信息字段名数据类型约束描述Id(主键)BigintNotnull数据的唯一标识符DateDateNotnull日期DescriptionVarcharNotnull财务数据的信息描述FormIntNotnull收入类型或支出类型MoneyBigintNotnull金额TypeVarcharNotnull财务类别Asset表:这个表用于存储每一位用户的资产信息字段名数据类型约束描述Id(主键)BigintNotnull数据的唯一标识符FormIntNotnull收入类型或支出类型MoneyBigintNotnull资产金额Type表:这个表用于存储财务类型字段名数据类型约束描述Id(主键)BigintNotnull数据的唯一标识符DataVarcharNotnull财务类型信息FormIntNotnull收入类型或支出类型News表:这个表用于存储公告信息字段名数据类型约束描述Id(主键)BigintNotnull数据的唯一标识符DataIntNotnull公告信息FormBigintNotnull收入类型或支出类型DateDateNotnull日期4.3本章小结本章是系统的详细设计部分,所以着重介绍了系统的整体架构,主要从网站的架构、系统运行时的流程还有数据库总体的设计原则等方面进行介绍,为下一章具体的实现奠定了基础。第五章系统具体实现第五章系统具体实现5.1系统开发环境操作系统:Windows10软件开发平台:IDEA2021.1开发语言:JDK11后端服务器:SpringBoot2.4.1数据库:MySql8.05.2账户管理模块这个模块属于所有权限用户都可以使用的模块,账户管理模块包括以下的功能,分别是:注册用户,用户登录。然后在用户登录之后可以查看当前用户的信息,然后提供了修改这些信息的功能,还可以修改用户的密码。模块图如下所示:图5-1模块图子模块介绍:(1)注册用户一个新的用户在开始使用本系统的时候需要先注册,注册完毕之后就可以使用该用户的身份使用该系统,在注册的时候前端需要提供几个输入框,在输入框输入用户名密码等用户信息。而且有一些输入框必须设置为不为空,以防止存入无效数据。前端传入注册信息到后端之后,后端要新建一个对象,然后必须要进行适当的初始化,比如需要给每一个新用户分配默认的类别信息,之后就可以使用前端传入的新用户数据来初始化对象,最后存入数据库。(2)用户登录用户输入正确的账号密码,后端接收到之后会先去查找这个用户,因为安全性的缘故所以数据库存的密码都是经过加密算法计算后得到的。所以当系统得到一个密码之后要使用相同的加密算法来进行加密,然后对比和数据库之中密码是否相同,如果相同则代表用户输入了正确的密码,就算身份认证成功了。本系统的用户验证是采用Oauth2来实现的,Oauth2是一种开放的授权标准,它可以让用户获得认证服务器的认证,然后来获取放在资源服务器上的用户资源。如果用户在登录成功之后,后端会给前端发送JWT,前端会把JWT存入本地,JWT作为用户登录之后的凭证,用户之后访问数据必须带上JWT,这样服务器就可以知道用户的身份以及进行授权。系统把登录判断函数放置到Vuex中,在用户每次访问系统时,Vuex的函数就会来判断当前登录状态,如果个人信息状态为空的就是未登录状态,这个时候就会跳转到登录页面,否则登录的话就会去后端请求当前这个用户的个人信息与权限信息,然后根据用户权限加载路由和功能按钮,这样就完成了用户登录之后的系统初始化,让登录用户可以开始使用系统了。当进入主界面之后,会提供个人中心来查看当前用户的信息,还可以修改这些用户信息和修改密码,修改完密码以后会自动退出系统,需要用户使用新的用户信息来重新登录系统。用户注册登录流程图:图5-2流程图(3)查看用户信息在登陆完成之后,就可以获取当前用户的信息,后端首先验证当前用户是否登录,在登录之后会从对应的用户信息表中取出数据,然后通过后端接口返回,在前端显示。前端只需要设计几个对应的字段来显示个人信息就足够了。程序运行截图:图5-3运行截图(4)修改用户信息首先这个页面在载入的时候就调用Axios函数获取当前用户原来的个人信息,然后这个页面放置几个输入框,把原有的个人信息放置到这个输入框内,如果是不需要的字段就可以不去修改它,方便了用户。然后在要修改的输入框下输入新的信息,提交之后后端就会去数据库内写入新的数据。(5)修改密码在这个页面下有一个输入密码的输入框,这个输入框被有关的函数所控制,如果这个时候输入的密码强度不够,那么就会在旁边的密码强度提示显示密码强度不足,而且不可以提交修改。输入正确密码之后,后端也会像注册时一样把密码经过加密后再放入数据库,放置如果有人真的非法入侵数据库之后,会直接看到明文的密码。当后端返回密码修改成功之后前端会清空存入的JWT信息,然后直接调用注销函数,通过这样让用户以新的密码登录,保持系统的安全性。5.3财务类别模块这个模块主要是用来管理用户的财务类别的。财务类别分为收入类别与支出类别,两个类别公用相同的数据结构,使用其中的一个字段来进行区分,然后在用户需要获取的时候可以直接通过筛选返回相应数据。还可以通过特定的id来获取数据,添加、删除类别信息。下面是模块图:图5-4模块图子模块介绍:(1)查看类别查看类别信息主要是加载从后端获取来的类别信息,因为每一个用户他们的类别信息都是不同的,所以当用户直接从后端的某个端口请求数据时,后端找到当前登录用户,验证无误后得到对应用户持有的类别数据内,然后直接返回给前端。前端提供了表格的功能组件,只需要相应的数据就可以生成一个表格,所以在获取完数据之后就可以直接生成表格。图5-5运行截图(2)添加类别这个模块的目标就是添加相关的类别信息,前端放置一个输入框,通过提交按钮就可以把输入的名称提交,前后端交互是采用Axios这个插件来实现的,他可以把信息转换为JSON格式,后端同时也支持接收这种格式的信息。后端把信息存到数据库的Type表中,它作为财务信息录入时财务分类选择的来源,十分重要。(3)修改类别这个页面同样也需要先从后端获取原来的数据,一般是在查看类别页面下的表格选择查看相应的某条数据,然后前端点击修改时会跳到修改页面,而且在跳转到修改页面之前会把这条要修改的数据的ID暂存下来,然后在修改页面下从后端加载这条类别信息放置到输入框内,最后在修改完之后又发回后端同步到数据库。在Vue中暂存这些数据采用了Vuex,这个官方提供的插件可以记录页面状态,常用于记录页面状态和页面之间传递信息。5.4收入支出项目模块这个模块负责系统的收入与支出信息的管理。可以被所有用户使用。首先用户必须去数据录入的选项中录入每笔财务数据,只要填入相应的金额、选择财务类型和日期,还可以填入备注来记录这笔交易。接来下就可以去财务管理相应的类别去查看管理数据了。下面是模块图:图5-6模块图在查看收入支出的数据页面中,如果全部返回所有数据,那么当数据量很大的时候生成的表格会很长,影响页面的美观。现在前端和后端相互配合是可以实现分页的功能的。前端的表格在数据量小的情况下不会启动分页,但是在数据量过大的时候前端是会通过返回当前页和每页最大的显示数目给后端来分页的。前端会返回当前是第几页和每页大小,后端使用PagedListHolder这个分页类把查询结果的List分成几个小List,然后把这些数据返回给前端,它还提供上一页、下一页等功能可以方便的实现分页功能,本系统把它进行了简单的封装更便于使用。分页工具类相关代码:publicclassPageUtil<T>{
privatefinalList<T>list;
privatefinalPagedListHolder<T>data;
publicPageUtil(List<T>list){
this.list=list;
this.data=newPagedListHolder<>(this.list);
}
publicPage<T>getPage(intpageNo,intpageSize){
data.setPage(pageNo);
data.setPageSize(pageSize);
Pagepage=newPageImpl(data.getPageList(),PageRequest.of(data.getPage(),data.getPageSize()),list.size());
returnpage;
}
}子模块介绍:(1)查看数据查看数据信息主要是加载从后端获取来的类别信息,因为每一个用户他们的类别信息都是不同的,所以当用户直接从后端的某个端口请求数据时,后端找到当前登录用户,验证无误后得到对应用户持有的类别数据内,然后直接返回给前端。前端提供了表格的功能组件,只需要相应的数据就可以生成一个表格,所以在获取完数据之后就可以直接生成表格。运行截图:图5-7运行截图(2)录入数据录入数据在一定程度上依赖财务分类,因为财务数据的类别是根据用户自己新建的各种类别的来选择的,录入数据是系统中最重要的财务数据的唯一输入方式。界面当然就是设计输入框来要求用户提供相应的字段,而且比如日期选择字段只让输入当前及之前的时间,符合实际。各个输入框在前端设计了是否可以为空,避免输入空数据。把财务数据所需要的信息,如金额、详情等输入之后通过Json把数据传给后端,后端找到当前登录用户,验证数据合法后存到对应用户持有的财务数据内。前端跳到结果页,显示最终添加结果。录入财务数据流程图:图5-8流程图(3)修改数据这个页面需要先从后端获取原来的数据,包括当前的财务分类数据,这些分类信息会让用户来进行选择,而且在输入栏中也要相应的限制,比如不为空,在日期选择栏中只能选择当前和之前的日期等。之后通过Json把数据传给后端,后端找到当前登录用户,验证数据合法后存到对应用户持有的财务数据内,找到对应的某条数据然后修改。前端会直接回到所有数据表格中,表格数据更新到最新状态。5.5资产管理模块资产管理模块的提供了用户管理资产的功能,这个模块面向的是所有用户,资产分为存款以及负债,用户可以去资产管理下直接更改资产,可以在数据录入增加资产,增加资产就会在相应的存款或负债上增加数据。还提供了资产查看的功能,可以清楚地显示现在存款以及负债的功能。下面是资产模块的模块图:图5-9模块图子模块介绍:(1)增加资产在增加资产的页面上有一个选择框与输入框,选择框可以输入的数据是增加到存款还是负债上,然后输入相应的数据,最后通过按钮提交数据会返回到后台处理。后端找到当前登录用户,验证数据合法后会在原来资产的基础上加上新的金额,前端会根据后端返回的信息跳到结果页显示结果(2)录入资产本系统设定的是注册的新用户的资产会被先写入0,代表一个新的用户在这时候既没有存款也没有负债,但是如果需要直接更改自己现在的存款负债情况需要使用到这个模块,这个模块可以直接修改存款负债的值为用户输入的新的值,这样就可以方便之后的增加资产。然后界面同样由一个选择框与输入框构成,与增加资产模块类似,不同的就是可以直接覆盖旧的值,替换为新的资产数据。(3)查看资产前端先向后端请求,后端找到当前登录用户,验证无误后得到对应用户持有的资产数据,前端会显示当前的资产信息,包括存款和负债。然后系统会计算当前用户的净资产,存款和负债会直接从后端的数据进行获取,同时还会让后端计算现在所有数据的总收入和总支出,获得了这四项数据就可以开始计算了,净资产是系统根据现在的存款、负债、收入、花费四项数据来计算得到的。运行截图:图5-10运行截图5.6报表统计管理模块报表统计模块负责统计数据和导出数据,这个模块面向的是所有用户,这个模块可以让用户方便快速的了解到当前用户的财务信息。可以进行相关数据的统计,并且最后通过绘制图表显示出来。下面是这个模块的模块图:图5-11模块图子模块介绍:(1)查看表报首先要根据前端传来的参数确定统计的时间跨度,有一个星期、一个月、一年可以选择。然后根据这个时间跨度来筛选掉不在这个时间段之内的数据,然后再遍历这些数据统计。统计的时候必须要先根据不同的时间跨度来创建一个初始数据为0的数据暂存容器。统计一个星期时会分别统计七天各天的数据,统计一个月时会分为四个星期来统计,统计一年时会统计分为12个月统计,最后修改各项的名称,如:星期一、星期二……。然后完成的数据就可以返回前端了。统计还有显示当前金额最大的几笔交易的功能,首先也要先进行筛选数据,筛选出是收入还是支出信息,然后根据金额进行排序,最后截取最前面的几条数据返回。接下来前端就会绘制出基于时间的收入支出条形图还有基于类别的饼状图,还会显示当前金额最大的几笔交易,用户就可以一目了然的看到当前的数据与财务情况。如果需要不同时间段的结果,只需要重新按下按钮之后会重新请求数据,后端也会重新计算相关的数据给前端重新绘图。视图相关流程图:图5-12流程图运行截图:图5-13运行截图图5-14运行截图(2)导出数据普通用户选择了导出数据之后,后端会先收集这个用户的所有财务数据,其中是包括了收入支出与支出数据,然后直接返回给前端,不经过任何的筛选,然后前端获取到了所有数据之后,会使用js-xlsx这个插件把这一些Json数据全部转换为Excel文件,而且这个插件也有配置Excel各列的内容和顺序的功能,让系统可以直接定义生成Excel的格式。5.7后台管理模块后台管理模块可以对系统内的数据进行管理,这个模块只有管理员权限的用户用户可以使用。这个模块主要提供修改系统内用户数据的功能,可以把系统内部所有的数据进行统计并生成统计报表,还可以直接导出系统内所有的数据到Excel,便于保存数据。下面展示的是其中的模块图:图5-15模块图因为这个模块只让管理员使用,所以最好的实现方法就是在前端根据不同的权限生成不同的侧边栏,侧边栏会显示不同的功能模块,而且前端会根部权限不同加载不同的路由,前端已经预设了普通用户和管理员需要加载的路由,如果普通用户就不会加载管理模块的路由,这样就可以有效地实现了权限管理。子模块介绍:(1)查看用户数据这个模块就是用来查看与管理某个用户的数据的,所以应该展示一个表格,显示系统中除了管理员以外的任何用户,选择之后会展示出这个用户的数据,同样是生成一个表格来显示所有数据。选择了某一个用户之后是通过Vuex来临时保存用户的信息,达到传输参数的目的。在管理用户数据的时候,首先前端会先传要管理用户的用户名到后端,后端收到参数之后就可以得到对应的数据,然后就可以对这些数据进行操作,而且普通用户与管理员的权限不同,本系统使用的SpringSecurity可以保证权限控制,让一般用户不能修改数据。这个时候查看用户详细信息的功能就可以查看到该用户所有的财务信息和个人信息,删除功能必须注意在删除的过程中必须把这个用户关联的所有数据都删除,防止出现了用户已删除但这个用户的财务信息还存在的情况。其中比如添加数据、删除数据可以直接调用普通用户模块的添加删除相关代码,避免重复代码,降低代码冗余。后台管理数据流程图:图5-16流程图运行截图:图5-17运行截图图5-18运行截图(2)查看报表本模块和普通用户的统计模块有所不同,这个模块统计的对象是整个系统内所有的数据,而普通用户单纯只统计了自己存储的数据。管理员提供的报表统计功能是对于整个系统的所有用户来说,可以看到每个用户的支出和收入在系统中占的比重。处理这些数据时首先必须在后台汇总所有用户的全部数据,然后就可以类似普通用户处理统计代码的逻辑一样处理数据。后台在收到请求之后,会尝试汇总系统中所有用户的所有数据,然后在根据前端传入的过滤条件来过滤这些数据,过滤完之后的数据就可以直接用来统计了,统计时一般是根据不同的用户来统计出相应的比例,最后生成前端绘制图标需要的参数,前端就可以根据参数进行绘制了。运行截图:图5-19运行截图图5-20运行截图(2) 管理公告系统也给管理员提供了公告的功能,管理员可以在公告管理系统上发布公告,这个公告信息每一个普通用户在打开公告模块之后都可以查看到。公告系统模块基本就是提供增加、删除公告的功能,公告的增加删除和财务数据的逻辑相类似,但是公告数据是单独存到一张数据表,这样系统内的所有人都可以读取到当前的公告信息。图5-21运行截图普通用户查看公告页面的截图:图5-22运行截图5.8本章小结本章主要介绍了家庭财务管理系统的具体实现原理和编码,并在此基础上对家庭财务管理系统实现的各个模块,如账户管理模块、财务类别模块、收入支出项目模块等功能模块进行详细的介绍,并介绍了各个模块之间的关联,模块化的开发可以提升系统开发流程的规范性。第六章系统测试第六章系统测试6.1测试方法在现在,进行软件的测试方法变得越来越多样化,而一般的测试分为黑盒测试和白盒测试,本系统采用的测试方法是黑盒测试,黑盒测试是一种软件测试方法,在不了解内部代码结构和实现细节的情况下测试软件的功能。黑盒测试主要关注软件的输入和输出,它完全基于软件需求和规范,所以它也被称为“行为测试”。本系统使用黑盒测试来对这个系统中各个模块的功能进行测试,然后观察他的输出是否符合当前系统的需求。6.2测试目标(1)测试家庭财务管理系统的各个模块功能是否可以正常工作。(2)测试家庭财务管理系统的可用性,各个模块之间的协同工作是否正常。(3)测试家庭财务管理系统的界面有无错误,按钮是否可以点击,是否有错别字,显示是否正常。(4)测试家庭财务管理系统的稳定性和安全性。6.3具体测试情况6.3.1账户管理测试下面的表格详细的展示了账户管理模块的测试结果:功
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 校医聘用合同范本
- 工程合同抵押贷款合同范本
- 2025江苏苏州狮山商务创新发展集团有限公司及下属板块公司招聘10人笔试参考题库附带答案详解
- Maytansine-derivative-M24-生命科学试剂-MCE
- Enzyme-IN-3-disodium-生命科学试剂-MCE
- 科技短视频创新技术传播策略
- 电子俱乐部合同范本
- 东莞广东东莞市自然资源局黄江分局自主(公开)招聘聘用人员笔试历年参考题库附带答案详解
- 上海2025年上海市青浦区教育系统招聘教师488人笔试历年参考题库附带答案详解
- 修房建筑合同范本
- 绘本阅读《铁丝网上的小花》
- NancyDrew分析
- 离心式排风机安装施工方案及技术措施
- 中西纪年对照表
- 字号大小样式设计参照表
- 理想信念主题班会ppt课件
- 粤劳社[2002]246号关于职工在机关事业单位与企业之间流动时社会保险关系处理意见的通知
- 风险和机遇评估分析表
- 五年级下册劳动教案(最新完整版)
- 中英文Bimco标准船舶管理协议
- 通信防雷与接地系统PPT学习教案
评论
0/150
提交评论