A168-django个人消费记账管理系统【完整项目源码报告】
导出时间:2025/11/26 14:26:37
【购买前必看】
1、关于我们
深度学习乐园是由python哥全职技术团队组建运营【团队成员为:复旦大学博士、华东理工爱丁堡博士、格拉斯哥博士、纽约大学硕士、浙江大学硕士】。
我们只做python业务,精通sklearn机器学习/torch深度学习/django/flask/vue全栈开发。
2、关于项目
我们从2018年开始,就专注于深度学习sci、ei、ccf、kaggle等,至今已有7年,共发表过10多篇顶刊顶会。
官网累积了数百个项目,已有3000多学员付费购买,圈子内有口皆碑:www.zzgcz.com (更多高级私密项目无法对外,联系微信定制:zzgcz_com)
3、售后承诺
包远程安装调试,所有项目均在本地运行通过,大部分都有截图和录屏。
支持二次修改,所有项目都是我们自己写的,改起来也非常容易。
加急定制1-2天可完成,这就是实力证明,远程验收满意后再付全款!
所有客户终身售后。兼职的人家都有主业,谁愿意持续服务你?
注:此html可能格式或图片显示不全,请购买后查看docx文档
目录
1 需求分析1
1.1 系统背景介绍1
1.2 功能需求分析1
2 总体设计1
2.1系统程序结构设计1
2.2 系统用例图3
2.3 开发及运行环境3
3 数据库设计4
4 详细设计5
4.1 用户注册5
4.2 用户登录5
4.3 个人中心5
4.4 首页(新增收入/支出记录)5
4.5 收入记账管理5
4.6 支出记账管理6
4.7 记账图表6
4.8 系统其他功能实现6
5 代码实现7
5.1代码截图7
5.2运行截图10
6 测试13
7 总结15
1 需求分析
系统背景介绍
个人理财的主要对象不像企业那样,是企业的资产和资本这些大量的资金,个人的理财对大多数的人来说就是对个人收入的支配与规划。当代社会个人的收入往往就是工资,这些工资有的是以存入卡形式出现的,有的是现金形式出现的,这两种形式其实本身就为个人理财提供了很大的方便。在存卡形式出现之前,工资往往是完全以现金形式出现的,这就使得人们对收入的规划无序,大多数人遵循着“有多少,花多少”的原则,当然也有不少人利用“记账”的方式进行规划,这其实就是个人财务管理的初级表现之一。
功能需求分析
本系统的最终目的是设计一个名为“TIME 时时记”的个人记账理财系统。对不会自主理财,同时有渴望有一个合理的消费和收入标准的广大用户来说,TIME 时时记系统就非常合适,该系统功能齐全但操作简单。
主要包括用户登录、用户管理、系统记账和图表统计四大功能,能实现用户的注册、登录以及用户信息的修改;实现用户对收入/支出记录的增加、删除、修改和查询。并对最近15天收入/支出的当天总和以柱状图对比显示,对最近15天收入/支出总和的饼状图对比显示。
2 总体设计
2.1系统程序结构设计
OAProject—项目名
├─OAProject # 项目同名文件目录
│ asgi.py# 支持异步网络服务器和应用
│ settings.py # 配置文件
│ urls.py # 根路由,用来控制页面url访问
│ wsgi.py # 帮助Django应用和网络服务器间的通讯
├─OAUser # App目录
│———migrations文件目录 # 修改数据模型时,会自动升级数据库
│ __init__.py # 空文件,允许在项目的其他部分使用它
│——— static文件目录 # 网站渲染所需文件
│—————— login文件目录
│ css文件目录 # 渲染html所需的css文件
│ font文件目录
│ images文件目录 # 渲染html所需的图片
│ js文件目录 # 渲染html所需的js文件
│ __init__.py # 空文件,允许在项目的其他部分使用它
│ admin.py
│ apps.py # app的相关配置
│ froms.py # 该系统登录、注册、收入、支出的表单设计
│ models.py # 该系统创建用户、收入、支出的三张表
│ tests.py
│ urls.py # 网页路由
│ views.py # 视图函数,业务层逻辑代码
├─templates文件目录 # 模板文件(一个一个的html)
│———login文件目录
│ __init__.py # 空文件,允许在项目的其他部分使用它
│ chart.html # 记账图表分析页面
│ income.html # 收入记账管理页面
│ index.html # “TIME 时时记”首页
│ login.html # 用户登录页面
│ pay.html # 支出记账管理页面
│ personal-info.html # 用户个人信息管理页面
│ register.html # 用户注册页面
│ update_income.html # 更新收入记账管理页面
│ update_pay.html # 更新支出记账管理页面
├─manage.py # django启动项目文件
└─temp.html # 图表管理页面
2.2 系统用例图
2.3 开发及运行环境
本系统是基于64位 windows10家庭中文版,处理器Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz 1.80GHz,机带RAM 12.0GB。
开发工具:PyCharm,Navicat 15 for MySQL
3 数据库设计
表1 用户信息表
表序号
| 1
| 表名
| Users
| |||
含义
| 存储用户的基本信息
| |||||
序号
| 属性名称
| 含义
| 数据类型
| 长度
| 说明
| 约束
|
1
| uid
| 用户id
| Int
| Not nulll
| 主键
| |
2
| uname
| 用户名
| varchar
| 30
| Not nulll
| |
3
| upwd
| 密码
| varchar
| 30
| Not null
| |
4
| usex
| 性别
| varchar
| 30
| Not nulll
| |
5
| uemail
| 邮箱
| varchar
| 254
| Not null
| |
6
| utel
| 电话号码
| bigint
| Not null
|
表2 收入表
表序号
| 2
| 表名
| Income
| |||
含义
| 存储收入记录
| |||||
序号
| 属性名称
| 含义
| 数据类型
| 长度
| 说明
| 约束
|
1
| iId
| 收入id
| Int
| Not nulll
| 主键
| |
2
| iType
| 类型
| varchar
| 30
| Not nulll
| |
3
| iMoney
| 金额
| decimal
| 10
| Not null
| |
4
| iRemark
| 备注
| varchar
| 55
| Not nulll
| |
5
| iTime
| 时间
| date
| Not null
|
表3 支出表
表序号
| 3
| 表名
| Pay
| |||
含义
| 存储支出记录
| |||||
序号
| 属性名称
| 含义
| 数据类型
| 长度
| 说明
| 约束
|
1
| pId
| 支出id
| Int
| Not nulll
| 主键
| |
2
| pType
| 类型
| varchar
| 30
| Not nulll
| |
3
| pMoney
| 金额
| decimal
| 10
| Not null
| |
4
| pRemark
| 备注
| varchar
| 55
| Not nulll
| |
5
| pTime
| 时间
| date
| Not null
|
4 详细设计
4.1 用户注册
新用户可以通过输入用户名、密码、确认密码、邮箱地址、电话号码、性别和验证码进行注册。
在/login/forms.py中添加一个新的表单类,upwd1和upwd2用于输入两遍密码,并进行比较,防止误输密码;uemail是一个邮箱输入框;usex是一个select下拉框。然后在register.html中编写forms相关条目。在/viwes.py/文件中完善register()视图,首先两次输入的密码必须相同,其次不能存在相同用户名和邮箱,最后如果条件都满足,则创建一个用户实例,然后保存到数据库内。
4.2 用户登录
用户注册成功后会跳转至登录页面,输入用户名、密码和验证码,点击登录按钮进入系统首页。
用户通过login.html中的表单填写用户名和密码,并以POST的方式发送到服务器的/1ogin/地址。服务器通过1ogin/views.py 中的1ogin() 视图函数,接收并处理这一请求。
4.3 个人中心
可在顶部导航栏进入个人信息界面,对个人信息进行修改操作。点击保完信息完成信息修改。
4.4 首页(新增收入/支出记录)
选择记账类型(收入/支出),金额,备注和时间,点击保存跳出弹窗,点击确定,这条收入/支出记录就会保存至数据库中并显示在相对应的页面上。
后台通过判断iType是否等于“收入”,是的话就将该条记账信息保存至收入记录页面,不是的话就保存至支出记录页面,首先收入、支出页面分开显示。
4.5 收入记账管理
该页面显示收入的序号、类型、金额、备注和时间。
搜索框:输入要搜索的“备注”中的内容,查找到相关记录;
编辑按钮:点击编辑按钮,进入修改页面,修改内容后点击保存即可;
删除按钮:点击删除按钮,在弹窗上点击确认,删除该条信息。
在views.py中实现了收入记录的查询、修改和删除的功能,将其通过income.html页面显示出来。
4.6 支出记账管理
该页面显示支出的序号、类型、金额、备注和时间。
搜索框:输入要搜索的“备注”中的内容,查找到相关记录;
编辑按钮:点击编辑按钮,进入修改页面,修改内容后点击保存即可;
删除按钮:点击删除按钮,在弹窗上点击确认,删除该条信息。
在views.py中实现了支出记录的查询、修改和删除的功能,将其通过pay.html页面显示出来。
4.7 记账图表
通过Echarts,一款基于JavaScript的数据可视化图表库,根据前面的收入和支出记录,生成最近15天每一天的总收入和总支出的对比柱状图。
根据前面的收入和支出记录,生成最近15天的总收入和总支出的对比饼图,以百分比的形式呈现。
得到当前的年月日信息,判断收入日期和支出日期是否在最近15天内,若在,则计算当天收入和支出金额总和,得到“最近15天的收入与支出”信息对比柱状图,生成一个temp.html文件,显示在chart.html页面上。
将最近15天每一天的收入/支出总金额相加,以饼图的形式对比呈现在chart.html页面上。
4.8 系统其他功能实现
计算收入/支出的记录总条数,将其分为一页十条呈现出来。
5 代码实现
5.1代码截图
![]() | ![]() | ![]() | ![]() |
![]() | ![]() |
![]() | ![]() |
5.2运行截图
图5.1 用户注册界面
图5.2 用户登录界面
图5.3 个人中心界面
图5.4 首页
图5.5 搜索显示
图5.6 编辑界面
图5.7删除界面
图5.8 柱状图
图5.9 饼图
图5.10 分页样式
6 测试
Django 提供了住专门的命令用来执行测试,命令如下所示:我们可以在项目的 manage.py 文件目录下直接执行此命令,但是该命令会将所有的测试结果都输出,如果你的每个应用下都做了单元测试,这显然会给你造成很错乱的感觉,所以我们可以使用下面的命令进行相关的测试输出:
- 执行 index 应用下的所有测试用例: python manage.py test index。
- 执行 index应用下 tests 模块下定义的测试用例:python manage.py test.index.tests。
- 直接执行 tests.py 文件下测试类:python manage.py test index.tests.ExampleTest。
- 直接执行测试类下某个测试方法:python manage.py test index.tests.ExampleTest.test_view。
用户注册时,upwd1和upwd2用于输入两遍密码,并进行比较,防止误输密码;uemail是一个邮箱输入框;usex是一个select下拉框。然后在register.html中编写forms相关条目。在/viwes.py/文件中完善register()视图,首先两次输入的密码必须相同,验证码也需要输入正确,其次不能存在相同用户名和邮箱,最后如果条件都满足,则创建一个用户实例,然后保存到数据库内。
![]() | ![]() | ![]() |
用户登录时,用户通过login.html中的表单填写用户名和密码,并以POST的方式发送到服务器的/1ogin/地址。服务器通过1ogin/views.py 中的1ogin() 视图函数,接收并处理这一请求。除了需要填写正确的验证码之外,用户名和用户密码也必须要正确,否则都无法登录。
7 总结
本次项目开发带给我最大的感受就是要细心。在编写过程中总是出现一些小bug和因为自己粗心写错的地方,每次都弄得自己莫名其妙,找到并解决之后就会恍然大悟,其实很多是原本认真一点就能避免的。做项目的过程中,遇到问题是很正常的事情,通过查找网页、书籍等方式都有可能解决,在这个过程中最重要的就是要学会找到问题,并解决问题,从中学到之前不懂的知识,加深印象,以防止下次再碰到时束手无策。
在网络如此发达的环境下,学习新知识和新技术的方式有许多。除了通过课堂上老师的讲解,书本上的理解等,这次的项目我还通过b站、百度、询问他人的方法,获取到了自己想要的技术,同时也学到了许多新的知识。
通过使用Django进行开发,我更理解了它为何是高水准的Python编程语言驱动的一个开源模型、视图,控制器风格的Web应用程序框架。在Dj ango框架中,包含了许多功能强大的第三方插件,使得Django具有较强的可扩展性。Django使用自己的Templates模板进行HTML渲染控制,然后我们再通过Django的render()函数给用户返回可视化的图表页面。
在个人收入与支出的对比中,我运用了echarts的条形图和饼图,清晰直观的展现了二者之间的对比。用户的登录验证是通过唯一的用户名,使用Django的ORM去数据库中查询用户数据,如果有匹配项,则进行密码对比,如果没有匹配项,说明用户名不存在。如果密码对比错误,说明密码不正确。增加了message变量,用于保存提示信息。当有错误信息的时候,将错误信息打包成一个字典,然后作为第三个参数提供给render方法。这个数据字典在渲染模板的时候会传递到模板里供你调用。
无论是做什么事情,一定要懂得坚持、遇到困难要懂得自己去寻找答案或者寻求帮助,不害怕不退缩,才能完成自己想要的东西。










