基于django的个人财务管理系统

  《Python程序设计》  结课作业

设计题目:     个人消费记账统计与分析系统                  

系    别:                        

        专    业:                        

        班    级:                       

        学    号:                       

        学生姓名:                       

        指导教师:                           

  

2022年11月18日

1 需求分析

    1. 系统背景介绍

个人理财的主要对象不像企业那样,是企业的资产和资本这些大量的资金,个人的理财对大多数的人来说就是对个人收入的支配与规划。当代社会个人的收入往往就是工资,这些工资有的是以存入卡形式出现的,有的是现金形式出现的,这两种形式其实本身就为个人理财提供了很大的方便。在存卡形式出现之前,工资往往是完全以现金形式出现的,这就使得人们对收入的规划无序,大多数人遵循着“有多少,花多少”的原则,当然也有不少人利用“记账”的方式进行规划,这其实就是个人财务管理的初级表现之一

    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 文件目录下直接执行此命令,但是该命令会将所有的测试结果都输出,如果你的每个应用下都做了单元测试,这显然会给你造成很错乱的感觉,所以我们可以使用下面的命令进行相关的测试输出:

  1. 执行 index 应用下的所有测试用例: python manage.py test index。
  2. 执行 index应用下 tests 模块下定义的测试用例python manage.py test.index.tests。
  3. 直接执行 tests.py 文件下测试类:python manage.py test index.tests.ExampleTest。
  4. 直接执行测试类下某个测试方法: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方法。这个数据字典在渲染模板的时候会传递到模板里供你调用。

无论是做什么事情,一定要懂得坚持、遇到困难要懂得自己去寻找答案或者寻求帮助,不害怕不退缩,才能完成自己想要的东西。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值