资讯详情

个人财务管理系统毕业设计:从需求分析到功能结构设计的完整拆解

📅 2026/10/18 21:25:13 | 华诺云谱 👁 阅读
个人财务管理系统毕业设计:从需求分析到功能结构设计的完整拆解
毕业设计课题里个人财务管理系统几乎是年年上榜的经典选题。原因很简单它“看起来”容易无非是记账、统计、做报表但真把需求分析和功能结构设计写到能落地、能答辩很多人就卡住了。这个课题的本质不是上来就写代码而是先想明白用户怎么花钱、怎么记账、怎么理解自己的财务状况再把这些模糊想法翻译成一套清晰的系统结构。这篇文章咱们就围绕需求分析和功能结构设计这两个核心环节把拆解思路、实操步骤、坑位注意事项一次聊透。1. 课题到底在考什么需求分析和功能结构设计的内核1.1 从课题名称拆解评审老师真正想看什么很多同学拿到这个题目第一反应是“这不就是做个记账App吗”然后马上打开框架文档准备写页面。这个思路基本就偏了。毕业设计课题的标题里重点不在“个人财务管理系统”这八个字而在后面的“需求分析”和“功能结构设计”。这两块才是评审老师用来判断你有没有系统设计能力的关键材料。需求分析考察的是你怎么从零开始挖掘用户场景怎么把“用户想管钱”这种抽象诉求拆成具体的功能点再排优先级。功能结构设计考察的是你有没有模块化思维能不能把几十个功能点组织成层次分明、边界清晰的系统。说白了前者是“做什么”的问题后者是“怎么组织”的问题。代码写得再漂亮这两块如果是空的课题的完成度就打了对折。我带过的学生里有的人文档写了八十多页但其中功能结构图就是一张截图配一段话问他“预算模块和账户模块是什么关系”“报表数据从哪张表来”完全答不上来。这就说明他其实没想明白只能靠堆字数撑场面。反过来有的人代码一般但需求分析写得非常扎实用例、数据字典、边界情况全有答辩照样顺利。因为老师心里清楚毕业设计是训练设计能力的不是训练工程能力的。所以我特别建议做这个课题时先把需求分析和功能结构设计当成“主角”代码当成“验证设计的工具”。心态摆正了后面每一步都不会跑偏。1.2 这个系统究竟是给谁用的个人财务管理系统最常见的定位是给个人用户管日常收支但你得进一步追问这个“个人”到底是谁是记流水账的大学生还是有稳定收入、需要做预算的上班族还是想盯家庭整体开支的家庭用户这三类人对系统的需求差异非常大。大学生可能只需要简单的收支记录月底看一眼还剩多少生活费最好还能按周统计。上班族的诉求往往是有多张银行卡、信用卡、花呗需要按账户管理还要设置月度预算防止超支。家庭用户更复杂可能多个成员一起记账互相看到的账目要同步还要按类目分析孩子教育、日常消费、房贷水电各占多少。这个差异直接决定功能结构的复杂度。比如如果目标用户是大学生多账户管理、家庭成员共享这些功能就可以不做但预算提醒和月度曲线得做好。如果目标用户是上班族资产账户的转账、还款逻辑就必须设计清楚。我当时一般会建议学生按“跨平台系统”的思路来做用户画像也就是不要只盯着一个特定人群而是提炼出这类用户的共性需要记录收入支出、需要知道钱花在哪、需要控制预算、需要看趋势。把这四条作为核心需求功能结构就有了骨架。至于要不要做亲情账户、要不要做信用卡账单导入都属于扩展项放到二期再说。所以在需求分析的第一页别急着写“本系统面向个人用户”而是写清楚这个用户长什么样、在什么场景下打开你的系统、想解决什么问题。哪怕只用一百字描述一个典型的“目标用户画像”后面的所有设计都会变得有方向。1.3 需求分析方法论用例、数据流和优先级需求分析不是把想到的功能罗列一遍它有标准的方法和工具。课程里学过的用例图、数据流图、用例描述表在这个课题里全都用得上。不是说为了画图而画图而是这些工具能逼着你想清楚细节。先讲用例。用例图的核心是角色Actor和系统功能之间的交互。个人财务管理系统里角色通常只有一个普通用户但也可以拆成“访客未登录”“登录用户”“系统管理员”三个。管理员不是用来做用户管理的而是处理系统配置、数据备份提醒这类事。用例图画出来之后你会很直观地看到哪些是必做的哪些是锦上添花的。然后讲数据流。数据流图要回答一个问题数据从哪进来、经过什么处理、存到哪里、又流向哪里。比如用户记一笔账输入金额、分类、账户系统把这个流水写入交易表同时更新对应账户的余额如果这笔支出超出了当月预算还要生成一条提醒。这个过程画成数据流图其实就是在给后端的服务逻辑做预演。最后是优先级。这里可以用一个简单的方法把所有想做的功能分成三类第一类是缺了就跑不动的基础功能比如记账、账户余额、收支统计第二类是有它更好没有也能用的增强功能比如预算提醒、消费趋势图、Excel导出第三类是纯加分项比如语音记账、多币种换算、皮肤主题。毕业设计的时间有限第一类必须做扎实第二类做两到三个第三类看情况。优先级排序最大的好处是砍功能的时候有依据。很多同学答辩时被问“你这个系统为什么没有导入账单功能”如果你能说“这个属于扩展功能优先级是P3在核心的记账、预算、统计都完成之后再做”老师会觉得你有需求管理意识而不是没想过这个问题。2. 功能结构设计实操模块划分和数据结构怎么定2.1 先画一张功能结构总览图功能结构设计最忌讳一上来就堆功能列表。正确的做法是先把系统分成几个大的模块再在每个模块下面拆子功能。个人财务管理系统我推荐划分成五个模块用户管理、账户管理、记账管理、预算管理、报表统计。来看一下各自定位。用户管理负责注册、登录、个人信息维护、密码修改。账户管理负责资产账户的维护比如银行卡、现金、余额宝、信用卡每个账户有各自的余额。记账管理是核心负责收入支出记录、分类管理、标签管理。预算管理负责设置月度预算、查看预算执行进度、接收超支提醒。报表统计负责按日、周、月、年维度展示收支情况支持图表展示和数据导出。这样划分的逻辑边界很清晰用户管“谁在用”账户管“钱放在哪”记账管“钱怎么流”预算管“钱要花多少”报表管“钱花得怎么样”。每个模块之间不重叠数据流转也顺着来用户登录后先看到账户总资产点进去可以看账户明细记一笔账时选择账户和分类数据落到流水表月底报表模块从流水表和预算表汇总展示。很多同学在这里容易多一个“系统管理”模块放一些菜单权限配置之类的东西。个人财务系统是单用户场景做这类模块没有实际业务支撑反而显得设计冗余。如果非要做最多保留一个数据备份与恢复的设置页其他都可以砍掉。2.2 二级功能划分与流程串查模块分完之后还要确定每个模块的功能粒度。以记账管理为例二级功能至少要包括新增支出、新增收入、记录编辑、记录删除、记录查询、分类管理、标签管理、交易流水列表。注意一个问题收入支出和转账是三种不同类型转账是账户之间的资金移动不产生收入也不产生支出很多学生第一次做会漏掉结果多张银行卡之间倒钱时总收入翻了一倍逻辑就崩了。预算管理模块要拆得更细一层。首先是预算周期绝大多数用户习惯按月设置所以系统里要设计“月度预算”这个概念。其次是预算维度可以是总预算也可以按分类分别设置预算比如餐饮预算是1000购物预算是800。第三是预算进度计算进度分母是本月的总预算额度分子是本月该分类或全部分类下的支出总和这个计算逻辑必须在设计文档里提前定义清楚不然后端拿到数据会算得云里雾里。报表统计模块我建议至少实现三张报表收支趋势折线图展示最近六个月或本年度每月的收入支出对比分类占比饼图展示某个月内各支出分类所占比例账户余额列表展示所有账户当前余额和总资产。三张表各回答一个问题钱是多了还是少了钱花到哪了钱分布在哪里。模块之间还有一个容易漏的联动关系记账时选择的账户和分类数据会同时影响账户余额和预算进度预算超支提醒是由记账动作触发的不是报表模块的事。这个联动在设计里叫“服务间依赖”。画功能结构图只画到菜单级别还不够最好在每个模块下面标注“关联模块”和“数据输出”这样结构会更扎实。2.3 关键数据表设计字段怎么定才够用功能结构最终都要落到数据结构上。个人财务管理系统数据表不用太多但每张表的字段都要斟酌。核心表大概有六张用户表、账户表、分类表、交易流水表、预算表、月度汇总表。分别说明。用户表字段可以精简用户ID、用户名、密码哈希、昵称、头像、创建时间、最后登录时间。别把手机号邮箱同时放进来如果支持邮箱注册那就用邮箱作为登录唯一标识手机号放到个人资料里可填可不填。账户表字段账户ID、用户ID、账户名称、账户类型0现金、1银行卡、2信用卡、3电子钱包、当前余额、币种、备注。这里注意账户余额不要直接通过流水记录去SUM计算而应该在每次记账时同步更新账户余额这样首页展示总资产时查询非常快。要保证这个字段的准确性记账和账户更新必须在同一个事务里完成。交易流水表是最关键的一张表字段包括流水ID、用户ID、账户ID、交易类型0收入、1支出、2转账、分类ID、标签、金额、交易时间、商户名称、备注、创建时间。重点说几个细节。金额字段统一用decimal(10,2)不要用float否则可能出现0.999999这种精度问题。交易类型的0/1/2是硬编码整个系统里要有一处统一常量定义。分类ID关联分类表转账类型没有分类分类ID可为空。商户名称是可选字段比如“海底捞”“中石油”用字符串存就行。标签字段可以设计成逗号分隔虽然不满足严格的第三范式但对个人应用来说查询效率更高改动也小完全够用。预算表字段预算ID、用户ID、预算月份用2025-06这种字符串格式可比对好看好用、分类ID空表示总预算、预算金额、当前已支出金额、超支金额。其中当前已支出金额不用实时计算可以在每次记账后由后端累计更新也可以每天跑一次定时汇总看你怎么选。更新最省事的是前者准确度也足够。月度汇总表是可选的但建议保留。这张表可以在每月月底生成一条记录保存当月总收入、总支出、结余、分类支出快照。报表模块查趋势图的时候直接从汇总表读而不需要全量扫描流水表性能会好很多。字段不需要多够画图就行。3. 需求分析的落地过程从访谈提纲到需求规格说明书3.1 用户访谈和问卷该怎么设计需求分析不能凭空想要有输入。毕业设计时间紧张不一定非要发几百份问卷但你至少要做一个“假访谈”挑三到五个同学或朋友问他们记账的习惯、用什么工具、最不满意现在工具的哪些点。把这些答案记录整理成需求池整个系统的功能来源就有了依据。访谈提纲我列一份可以抄的版本。你目前记过账吗用什么方式记账时最常记录哪些内容大概多久记一次你觉得记账最麻烦的环节是什么除了记录你还想从记录里看到什么你设过预算吗怎么设的有没有超出过预算你会不会有多个账户你是如何处理账户之间的转账的这些问题看起来朴素但每一个都会暴露真实需求。比如第3题特别容易引出“分类太细”的抱怨。受访者会说“记个外卖还得先找分类太累”。这个反馈对应的解决方案就是记账时支持快速选择最近使用的分类或者支持自定义默认分类。这个需求如果不做访谈你自己坐在电脑前是想不出来的。问卷不适合用来收集太细节的反馈但适合确认优先级。你可以把候选功能列成清单让受访者打勾比如“如果需要以下功能你最希望先有哪三个预算提醒、图表分析、分类模板、云同步、语音记账、多币种”。统计出来之后排名靠前的功能直接进第一期开发范围排名靠后的先搁置。这就是用数据做需求决策。3.2 把需求变成用例和用户故事访谈和问卷拿到的是原始素材接下来要把它们转成标准的需求描述格式。这里我强烈推荐先用“用户故事”做过渡再写成“用例描述表”。用户故事的格式很简单作为某个角色我希望做某件事以便达到某个目的。举例作为一位上班族用户我希望设置每个月的餐饮预算以便控制外卖和聚餐的开销。再举一个作为一位用户我希望在记账时可以快速搜索历史商家以便不用重复输入餐馆名称。用户故事的好处是它强制你带上“角色”和“动机”不会写着写着变成一条干巴巴的功能列表。整理出二十条左右用户故事之后再抽象合并成正式的功能需求。用例描述表一般包含几个部分用例名称、参与者、触发条件、前置条件、基本流程、扩展流程、后置条件。拿“记一笔支出”来示范基本流程用户点击新增支出选账户、选分类、输入金额确认后提交系统校验金额正数和账户存在写交易流水表更新账户余额返回最新余额。扩展流程则要覆盖几种分支金额超出预算时弹出提醒账户余额不足时提示但允许保存网络异常时提示稍后重试。这些分支正是后来写代码时最容易遗漏的地方但用例表里提前写清楚开发时就有据可依。3.3 需求规格说明书至少包含哪些章节需求分析阶段要交付一份需求规格说明书这是毕业设计文档的底稿。它的结构我建议按下面这套来写。引言项目背景、术语定义。用户角色与场景描述目标用户画像、典型使用场景。功能需求列表用编号记录每一条功能需求比如FR-001代表用户注册FR-002代表用户登录FR-101代表新增支出记录。编号的好处是后面做设计和测试时可以直接引用效率高很多。用例模型用例图 详细用例描述表。数据需求关键数据实体、属性、关系。非功能需求性能要求、安全性要求、易用性要求。非功能需求这一块容易被忽略但它很能体现工程素养。性能方面可以写“日常记账操作的响应时间不超过1秒”“财务报表的加载时间不超过3秒万条数据以内”。安全方面写“用户密码不在数据库中以明文存储需加盐哈希财务数据接口需要登录鉴权”。易用性方面写“记账流程不超过三步完成”。这些都是可以量化验收的老师喜欢看到这种细节。写文档时有个极强的建议全文保持“编号一句话描述”的风格不要写“系统应该能够对用户输入的金额进行校验、如果校验不通过则给出错误提示”这种绕口的长句。直接写“FR-107 系统应当校验单笔金额大于0且小于10万元。若校验失败页面提示‘请输入有效金额’。”要具体、可测试、不啰嗦这样的需求才是好需求。4. 从设计到实现接口约定、页面原型和技术选型4.1 前后端接口设计先于编码需求完备后功能结构设计还要继续向“实现层”延伸一步接口设计。很多团队的开发流程是前端和后端各写各的写完了再拼结果每个页面都要联调半天。如果在设计阶段就把接口规划好后面的编码几乎就是填内容。接口风格建议用RESTful。个人财务系统接口不多我列几个必须定好的。用户模块POST /api/register 注册POST /api/login 登录GET /api/user/profile 获取个人信息。账户模块GET /api/accounts 获取账户列表POST /api/accounts 新增账户PUT /api/accounts/{id} 修改账户DELETE /api/accounts/{id} 删除账户。记账模块GET /api/transactions/{month} 按月获取流水POST /api/transactions 新增流水PUT /api/transactions/{id} 修改流水DELETE /api/transactions/{id} 删除流水。预算模块GET /api/budget/{month} 获取某月预算设置及执行进度POST /api/budget 设置或更新预算。报表模块GET /api/report/trend?months6 获取近6月收支趋势GET /api/report/category/{month} 获取分类汇总GET /api/report/export/{month} 导出月度账单报表。接口设计里最容易被忽略的是“统一响应结构”。你可以用 {“code”:0,“message”:“success”,“data”:{}} 这种风格data字段放具体数据。业务异常时code非0message给出中文提示。前端统一封装请求器只要后端按约定返回前端不用每个请求都会写一套错误处理。接口文档建议直接写在项目仓库里的一个接口说明文件不必额外用工具确保后端写完一个接口就同步更新一次文档。这样是为答辩时老师忽然问“你某个接口是怎么设计的”做准备的你随时能给老师打开文档讲解比现场回忆要稳得多。4.2 页面原型和记账流程状态设计功能结构设计阶段低保真原型是非常好用的沟通工具。不需要用复杂的设计软件甚至手画格子图都行。但要注意页面原型不只是画几个框要把“流程”画出来尤其是记账和预算设置这两个页面。记账页面要有账户选择器、分类选择器、金额输入框、日期选择、备注框。增加两个实用设计一是“常用分类快捷入口”把最近使用的三个分类置顶减少点击次数二是金额键盘默认打开数字模式。这些都是直接回应访谈阶段提炼出的用户痛点的可操作性强答辩时讲出来会很有说服力。预算设置页要有周期选择默认当前月、总预算输入框、按分类设置预算的列表。还要在图里加上预算进度条因为预算模块的“超支提醒”动作不是进页面设置时触发而是记账后触发的。所以你要在页面原型里标注“当记账保存后若月度支出超过预算的90%显示黄色提醒若超过100%显示红色提醒”。这里的状态设计特别关键。我在前面提到过交易流水的类型区分为收入、支出、转账三种类型在记账状态上完全不同。支出和收入的流程是创建流水、更新账户余额、更新预算执行进度转账流程是创建流水标记为转账类型固定为2、转出账户余额减少、转入账户余额增加。如果这两个流程在一开始没设计好后续业务逻辑就会出现余额对不上账的情况很多同学就在这里栽跟头。4.3 技术栈选择背后的考虑功能结构设计完了最后才是技术选型。很多同学在这里容易纠结该用Java还是Python、该用Spring Boot还是Flask。不要为了“炫技”硬上复杂框架毕业设计重点在业务逻辑和需求设计的呈现技术栈只要稳定、能把你自己的设计快速实现出来就行。前端如果熟悉JavaScript或有所了解界面不复杂可以用Vue或React写一个简单的管理后台配上现成的UI组件库比如基于Element Plus或Ant Design搭建。这套组合的好处是组件现成能少写很多样式代码更多精力聚焦在业务上。前端基础比较弱的同学可以直接用服务端渲染用模板引擎拼页面功能一样能实现还不容易出跨域问题。后端在Java方向首选Spring Boot。理由很直接它集成REST接口、参数校验、数据库事务都很省心。学生求职时Java需求大用这个机会练好Java生态是一种常见选择。如果对Python更熟用Flask或FastAPI同样没问题这些都是不同技术路线没有对错只要你写的业务逻辑清晰即可。数据库选MySQL绝大多数情况都够用。配置上注意设置utf8mb4字符集这样即使备注里存了表情符号也不至于出现入库错误。另外强烈建议在设计阶段就把建表SQL脚本写出来用数据字典统一管理而不是等写代码时再临时改表结构。计划外的字段修改很容易牵连前端页面设计阶段把所有基础字段一次性定准是对项目节奏最负责的做法。5. 常见问题与排查方案速查表5.1 需求层面的高频坑预算分类权限问题。这个听起来抽象放到场景里就明白了。用户设置了“购物”预算1000元但记账时没有选分类这笔钱算不算进购物预算在很多系统里默认是不算的导致预算形同虚设。想要规避就得在设计文档里明确规定未选分类的支出默认归入“其他”分类单独设置“其他”分类的预算才能统计到未分类支出。收入算不算预算。支出预算大家都没有疑问但有人会把“大额收入到账”和“发工资”当同日消费高导致预算执行率看起来异常。设计时要确定预算只统计支出流水并注明清楚这一点答辩时老师不一定会问但你自己心里必须有数。需求变更。毕业设计前期做需求分析的学生常常高估自己想法的稳定性。今天觉得这个功能重要明天又觉得那个功能更重要。我的建议是需求变更允许有但变更时一定要回到文档里更新需求和设计把旧版本记录影印或存档别只用一张草稿纸记录。答辩时如果老师问“你做过功能调整吗”你就可以把这个经历讲出来说明你会管理变更这比假装一切顺利强得多。5.2 功能结构层面的高频坑模块边界模糊的问题我见过不少。比如有人把“月度预算”功能放进“报表统计”模块里理由是预算也是一张表。这个想法最大的问题不在归属哪里而在于跨模块引用会导致依赖混乱。记账模块要更新预算如果预算被放进报表模块那记账模块就要依赖报表模块整体结构就会很绕。功能模块划分一定要按“职责”划分而不是按“数据类型”划分这条原则可以写进设计文档里。分类和标签的混乱也很常见。分类应当是有限集合收入几类、支出几类一般两级就够。标签是自由输入可按需增加。很多同学会把某个具体商家也建成分层级分类这样分类数据会越来越臃肿最终分类页越来越长。正确的做法是“分类管归类标签管细化”支出“餐饮”分类但加一个标签“公司附近”这比把“公司附近餐饮”独立成一个分类要干净得多。5.3 文档与答辩环节的注意事项文档里所有图表要有编号和文字说明。有的同学画完功能结构图就直接丢进论文图上没有任何说明老师根本看不懂你想表达什么。要求是图名写清楚比如“图2-3 个人财务管理系统功能结构图”图下方至少用两至三句话解释这张图的结构。答辩时被问到也可以直接说出来。测试记录也是很多同学交白卷的地方。不需要专业测试工具拿一个表格记录测试用例和结果就行。不用记录太多重点覆盖核心流程即可记账后余额是否正确、预算超支提醒是否触发、删除流水后报表是否更新、登录鉴权是否拦截未登录用户。每条记录至少包含步骤、预期结果、实际结果。这份表格在结题验收时比很多代码都能说明问题。答辩还有一个常见细节就是你准备演示时一定提前准备好测试数据。我见过太多人在现场临时输入数据手忙脚乱有的甚至数字都不对导致演示过程中报表全是空的。项目启动时先准备一份完整的、连续三个月的假数据包括收入支出、预算设置、账户余额演示时打开报表就是一幅丰满的折线图。这个小小的准备对答辩的加分远比自己想象的要多。6. 做这类课题的一点个人体会我自己经手过不少类似的模拟项目比如某跨平台记账系统和某实验室资产管理系统等。做下来最大的体会是个人财务管理系统的复杂点不在技术而在业务边界的清晰程度。你只要稍微把几条边界规则定义清楚比如“转账不算收支”“预算只算支出”“未分类支出计为其他”整个系统的代码量反而会少很多因为不需要为了补救逻辑漏洞写一堆特判。另外我非常建议在你完成需求分析和功能结构设计后自己先走一遍完整的用户场景假装自己是用户从注册开始到记一笔账、设置预算、收到提醒、查看报表把整个流程用笔在纸上过一遍。你会发现纸上走查能暴露很多看似小但影响体验的细节比如记账时要先选账户还是先选分类、预算超额时提醒按钮放在哪里、删除账户后历史流水怎么处理。这些问题现在发现了调整只是改一版设计图等到代码写完再发现就是东拼西凑的返工。如果你做完这套设计还有精力不妨给系统规划一个后续扩展方向比如多端数据同步、周期性账单自动记账、智能月度消费分析建议。不用真的做出来但在设计文档里预留好接口和数据表结构老师问“你这个系统未来怎么扩展”的时候你就能有答有据。毕业设计不是要比谁功能多而是比谁想得全、设计得清楚。把“需求分析”和“功能结构设计”这两件事做扎实你的课题就已经成功了大半。
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑