资源描述
摘 要
此次课程设计在 Windows 7平台上,以Macromedia Dreamweaver 8作为界面开发工具,使用ASP作为开发语言,SQL Server 作为数据库工具,分析设计了 “个人财务管理系统”。系统软件和对数据库操作和管理全部可在计算机上完成。
现在计算机已走进千家万户,传统在纸上统计收入支出方法已经过时,大家需要一个能够在计算机统计自己收入支出信息软件,可是市场上财务管理软件大多数十面向企业,或是有专门用途,面向一般用户个人财务管理系统极难找到,在者无偿软件更是少之又少,为了满足一般用户需求,特开发此软件。
本系统功效简单,只适合对个人财务管理要求不高用户,能够完成收入支出金钱及物品统计和查询操纵,但这些对一般用户还说应该够了,本系统操作简单,用户无需统计复杂命令,打开主机面就能够很轻易看出系统功效,在者,本软件为无偿产品,对于不愿花很多钱购置软件用户来说是个很好选择,本软件无需很高硬件配置,通常配置均可运行,占用系统资源少。
本汇报中首先说明了该系统特点和业务需求,以后具体说明了系统业务步骤和系统开发步骤,关键介绍了系统各模块功效及相关功效具体实现。该系统功效完善、用户界面友好、运行稳定,可完成日常个人财务信息管理和维护。
本汇报中首先说明了该系统业务需求,以后介绍了系统总体设计思绪和着重介绍了数据库表设计过程及说明可供研究此系统人员提供参考。
关键词 软件工程;数据库设计;个人财务管理系统;ASP;SQL Server
第一章 绪论
1.1课题背景
当今社会越来越着朝着信息化和数字化法发展,计算机应用领域使我们生活越来越方便和快捷,能够说我们每个人生活全部离不开计算机帮助了。越来越多个人应用软件成为了大家关键助手,也在潜移默化改变着我们生活。
伴随市场经济发展,中国居民对理财有着越来越高要求。理财,是每个家庭和个人所必需面正确问题。现在,相关企业会计制度逐步完善,而且针对企业财务软件和EPR(enterprise resource planning)系统也在飞速发展,但针对个人或家庭财务系统现在还是一段空白。
实际生活中常常要对个人各项财务收支进行管理,本课题目标就是利用计算机对各项财务进行电子化管理,使我们理财愈加方便和理性化,提升我们生活质量和品位。
课题意义
我们常常看到企业部分财务报表,这些报表关键是关注企业资产负债表和损益表。简单说,前者是反应这个企业有多少钱,是存量;后者,反应了企业在一定时间能赚到多少钱,是流量。
其实,对一个人或家庭财务情况,也是关注这两个方面。关注家里存多少钱,关注今年赚了多少钱,花了多少,借出什么等等。
要做到这些需要对大量数据做存放和计算,工作是相当复杂繁琐和枯燥,所以这些问题轻易被人忽略。我们纵然能够为生活中每一笔花销记账,不过对这么大量数据做分类处理确实是一个会令大多数人头疼问题,假如有一个个人理财软件理财软件对我们日常财务进行那样繁琐数据处理和计算工作,相信能够让我们理财效率大大提升。这么一个软件不仅能够方便我们生活,更能够使我们对自己财务情况有一个清楚了解。
和此同时,这么一个软件开发和制作也是对我们大学学到多种知识进行一次综合利用一个好机会,是对我大学学习一个检验和实践。
第2章 可行性分析
2.2.1 可行性分析
当接收一个软件开发任务,就进入软件生命第一个阶段,即进行可行性研究。并不是全部问题全部含有简单处理措施,很多问题不能在预定规模之内处理。可行性分析就是在系统调查基础上,针对新系统开发是否含有必需性和可能性,对新系统开发从技术、经济、社会方面进行分析和研究,以避免投资失误,确保新系统开发成功。可行性研究目标就是用最小代价在尽可能短时间内确定问题是否能够处理。
2.1.2 技术可行性
依据用户提出系统功效、性能及实现系统各项约束条件,依据新系统目标,来衡量所需技术是否含有。本系统关键采取数据库管理方法,服务器选择微软SQL Server 数据库,她是它是现在能处理全部中小型系统最方便流行数据库,它能够处理大量数据,同时保持数据完整性并提供很多高级管理功效。它灵活性、安全性和易用性为数据库编程提供了良好条件。硬件方面,该系统短小精悍对赢家没有太大要求,只要能够运行Windows 7就能够很好运行该软件。另外在划单操作中可用磁条来触发事件响应,这项技术也已经很成熟。
2.1.3 操作可行性
本系统采取用户界面交互方法,并有必需帮助信息,操作简单,用户只要含有简单应用计算机能力,不管学历,不管背景,均能够使用本系统,用户界面上按钮功效明确,用户一看就能够了解怎么使用本系统,和本系统能够完成功效,所以本系统在操作上是可行。
2.1.2 经济可行性
估算新系统成本效益分析,其中包含估量项目开发成本,开发费用和以后运行、维护费用,估量新系统将取得效益,估算开发成本是否回高于项目预期全部经费。而且,分析系统开发是否会对其它产品或利润带来一定影响。本系统作为一个课程设计,没有必需考虑维护费用,和本系统可取得效益等问题。
2.1.4 法律及社会效益方面可行性
因为本系统只是一个课程设计,在图书馆查询相关资料所以不存在侵权等法律和社会影响方面问题,不存在侵权级对应法律问题。
相关效益方面,本系统仅仅是一个课程设计,只是为了提升自己分析,设计能力,而非为了社会效益而编写设计,所以社会效益方面也是可行。
第3章 需求分析
3.1 用户需求
本系统是针对用户要求,使用计算机对自己日常资金和物品收入、支出和相关多种信息进行统计、修改、添加、删除等操作,并实现对信息进行统计和以文档形式输出操作而设计一个现代化个人财务管理软件。经过分析,本系统需要含有以下功效:
1、能够实现个人财务管理方面各项功效,能成功对用户多种信息进行管理。
2、实现查询、修改、删除、添加数据方便,数据稳定性和可靠性好。
3、能够实现按日期查询和对库存数据进行按月统计和以文本形式输出。
4、拥有良好人机交互界面。
3.2 功效需求
系统业务需求
本系统含有以下多个功效模块:用户登录模块、系统管理模块、收支管理模块、报表统计模块。用户登录模块为每个用户分配账号密码使得个人财务信息含有隐私性,收支管理模块能有效管理用户现金,能够进行添加,查询,删除操作,报表统计模块使得用户能够查询用户某月金钱和物品统计信息,能够让用户对自己每个月或一段时间收支情况,系统管理模块能够让用户修改密码。
登陆功效
对于个人财务管理系统,我们要求软件满足用户对个人财务隐私性管理,确保在用户以外其它人使用软件对其信息进行操作,所以要采取用户注册和登录制度,确保用户对自己财务信息隐私管理。
收支管理模块功效
现金管理模块是用户对现金进行添加、删除、修改操作模块,提供用户对现金收入支出进行操作功效,使适当用户统计需要修改时,能够方便添加和修改。
报表统计管理模块
提供用户对现金收支信息和物品收支信息进行统计输出功效。
系统管理模块
系统管理模块提供用户对用户个人信息管理和修改功效。
系统技术需求
稳定性:本系统为财务管理系统,多为查询、修改、删除、添加数据等操作,要求数据稳定性好。
可靠性:用户财务数据多比较关键,要求系统含有数据备份,数据恢复等性能。
安全性:系统设计个人银行账号和密码保留,要求系统提供加密保留等安全方法,即要求系统有较高安全性能。
数据流图
数据字典
名称:收支信息报表
别名:
描述:描述某日收支信息
定义:收入报表=【收入|支出】+金额+原因+日期
位置:显示给用户
名称:收支统计报表
别名:
描述:描述某月收支收支信息
定义:月收支信息=收入总额+支出总额+日期
位置:显示给用途
状态转换图
状态转换图模拟系统行为模型,把系统概括分为多个状态,并表示触发状态转换事件,因为该系统是医院内部使用小型系统故不用设置登录功效,打开系统自动初始化为等候状态,接收事件,并依据事件类型进入对应状
4.2.1 ER 图
数据库ER图以下所表示:
图4.2 ER 图
其中用户编号是用户主键,每个用户全部有唯一编号,其中收入编号是收入主键,收入类型包含买入、借入,收入,假如是金钱,金额就是金钱数量,备注就是对事件具体说明,支出联络同收入联络,支出类型包含:借出、卖出、支出,备注能够填写用途或原因说明。
第四章:总体设计
4.1:层次结构图
把整个系统分为收支管理,报表统计管理,系统管理四个模块,收支管理模块分为添加收入,添加支出,修改收入,修改支出,查询收支,删除收支6个模块,统计管理模块分为物品统计信息,收支统计信息两个模块,收支管理模块分为修改密码,数据备份,数据恢复,系统说明,退出系统5个部分,每个模块完成功效能够从名字上显著看出。
层次从结构图以下所表示:
个人财务管理
收支管理
统计管理
添 加 收 入
添加支出
管理类型
添加类型
系统管理
收支明细
年度统计
修改密码
添加用户
修改用户
退出系统
图4.1 层次结构图
4.2:数据库设计
4.2.2 数据库表
表4.1用户表
序号
字段汉字名
字段英文名
类型、宽度、精度
取值约束
空否
默认值
主键/外键
1
用户编号
UserID
bigint
否
主键
2
用户名
UserName
varchar(50)
少于50字符
否
3
密码
Password
varchar(50)
少于50字符
否
表4.2 支出信息表
序号
字段汉字名
字段英文名
类型、宽度、精度
取值约束
空否
默认值
主键/外键
1
支出物资编号
PayoutID
bigint
否
主键
2
用户编号
UserID
bigint
否
外键
3
支出类型
Paykind
varchar (50)
否
4
支出物资类型
payoutking
Varchar(50)
否
5
支出金额
PayAccount
float
否
6
支出时间
PayTime
date
否
7
备注
Remark
varchar(200)
少于200字符
表4.3 收入信息表
序号
字段汉字名
字段英文名
类型、宽度、精度
取值约束
空否
默认值
主键/外键
1
收入信息编号
IncomeID
bigint
否
主键
2
用户编号
UserID
bigint
否
外键
3
收入类型
Inkind
varchar (50)
否
4
收入物资类型
Payinkind
Varchar(50)
否
5
收入金额
InAccount
float
否
6
收入时间
InTime
date
否
7
备注
Remark
varchar(200)
少于200字符
第五章:具体设计
5.1界面设计:
一个好用户界面能够给用户一个好印象,甚至能够事半功倍,有时候,即使软件设计很好,但用户界面不符适用户操作习惯,也可能会让用户不满意,所以说,一个好用户界面是至关关键。
本系统界面设计以下:
主界面左侧有四个选项,分别对应层次图四个模块,分别为:用户收支管理,统计查询,系统管理,用户管理,每个选项下面还有对应多个子选项,完成对应添加、查询、修改、删除操作,右侧为正文部分,显示用户需要信息。用表单形式显示出来。
5.2数据库查询设计
输出显示关键是对数据库组合或单独查询得出结果,三个表用用户编号联络起来,在用户表中用户编号是主键,在收入表中和支出表中则是作为外键,三个表组合查询就能够查到想要全部信息。其中收入类型填写金钱收入,借入物品,买入物品:收入物资类型填写物品、金钱,支出类型填写金钱支出,物品借出,物品卖出;备注填写原因后用途。
5.3登录界面数据步骤图
图5.1 登录界面数据步骤图
登录模块代码:
<%
if request("admin")=" 登 陆 " then
UserName=request.form("UserName")
PassWd=md5(request.form("PassWd"))
set rs=server.CreateObject("ADODB.RecordSet")
sql="select * from [user] where username='"&UserName&"'"
rs.Open Sql,conn,1,1
if rs("password")<>PassWd then
response.write"<script>alert(‘用户或密码错误’);location.href='javascript:history.go(-1)';</script>"
response.end
else
Response.Cookies("key")="gu_ke"
Response.Cookies("key").expires=date+2
Response.Cookies("user")=rs("username")
Response.Cookies("user").expires=date+2
Response.Cookies("id")=rs("id")
Response.Cookies("id").expires=date+2
response.redirect "admin.asp"
end if
rs.close
end if
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<link href="css.css" rel="stylesheet" type="text/css" />
<title>登陆页面</title>
</head>
<body>
<script language=javascript>
function CheckForm() {
if (document.form1.UserName.value=="")
{
alert("用户不能为空");
document.form1.UserName.focus();
return false;
}
if (document.form1.Passwd.value=="")
{
alert("密码不能为空");
document.form1.Passwd.focus();
return false;
}
}
</script>
<table width="300" align="center" border="0" cellspacing="0" cellpadding="0">
<form name="form1" method="post" action="index.asp" onSubmit="return CheckForm()">
<tr><td height="95"></td></tr>
<tr>
<td height="35">用 户: <input type="text" name="UserName" maxlength="16" size="24" /></td>
</tr>
<tr>
<td height="35">密 码: <input type="password" name="Passwd" maxlength="22" size="24" /></td>
</tr>
<tr>
<td height="40" align="center"><input type="submit" name="admin" value=" 登 陆 " /></td>
</tr>
</form>
</table>
</body>
</html>
添加用户模块:
<!--#include file="conn.asp"-->
<!--#include file="heck.asp"-->
<!--#include file ="md5.asp"-->
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<LINK href="css.css" type=text/css rel=stylesheet />
</head>
<%
set rs=server.createobject("adodb.recordset")
sql="select * from [user] where id="&Request.Cookies("id")
rs.open sql,conn,1,1
if rs("admin")<>1 then
Response.Write "<script>alert('系统超时');this.location.href='index.asp';</SCRIPT>"
rs.close
response.end
end If
If Request.form("add")=" 添 加 " Then
Set rs=Conn.Execute("Select * From [user] Where username='"&Request.form("user")&"'")
If Not (rs.Eof or rs.Bof) Then
Response.Write "<script>alert('该用户已存在');this.location.href='add_user.asp';</SCRIPT>"
Response.End
rs.clsoe
end if
If request.form("pwd2") <> request.form("pwd3") then
Response.Write "<script>alert('两次密码不相同');location='javascript:history.back(-1)'</SCRIPT>"
Response.End
end if
Set rs = Server.CreateObject("ADODB.RecordSet")
Sql = "Select * From [user] Where (ID is null)"
rs.Open Sql,Conn,1,3
rs.addNew
rs("username") = Request.form("user")
rs("admin") = Request.form("admin")
md5pwd=md5(request("name2"))
rs("password")=md5(request.form("pwd2"))
rs.Update
rs.Close
Response.Write "<script>alert('操作成功');this.location.href='t_user.asp';</SCRIPT>"
end if
%>
<body>
<script language="JavaScript">
<!--
function chk(theForm){
if (theForm.user.value == ""){
alert("请输入用户");
theForm.user.focus();
return (false);
}
if (theForm.pwd2.value == ""){
alert("请输入密码!");
theForm.pwd2.focus();
return (false);
}
if (theForm.pwd3.value == ""){
alert("请反复密码!");
theForm.pwd3.focus();
return (false);
}
}
//-->
</script>
<table width="100%"><tr><td height="25"></td></tr></table>
<table width="100%" border="0" align=center cellpadding="5" cellspacing="1" bgcolor="#eeeeee">
<form action="" method=post name=form1 onSubmit="return chk(this)">
<tr bgcolor=ffffff>
<td width="40%" align="right">用户:</td>
<td><input name="user" type="text" size="20" maxlength="30" />
</td>
</tr>
<tr bgcolor=ffffff>
<td width="40%" align="right">权限:</div></td>
<td><select name="admin">
<option value="0">一般用户</option>
<option value="1">管理员</option>
</select> <font color=red><-- 请选择</font></td>
</tr>
<tr bgcolor=ffffff>
<td width="40%" align="right">密码:</td>
<td width="60%"><input name="pwd2" size="28" type="password" maxlength="26" /></td>
</tr>
<tr bgcolor=ffffff>
<td width="40%" align="right">反复密码:</td>
<td width="60%"><input name="pwd3" size="28" type="password" maxlength="26" /></td>
</tr>
<tr bgcolor=ffffff>
<td width="40%" align="right"> </td>
<td><input type="submit" name="add" value=" 添 加 " /></td>
</tr>
</form>
</table>
</body>
</html>
管理用户:
<!--#include file="conn.asp"-->
<!--#include file="heck.asp"-->
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<LINK href="css.css" type=text/css rel=stylesheet />
</head>
<%
set rs=server.createobject("adodb.recordset")
sql="select * from [user] where id="&Request.Cookies("id")
rs.open sql,conn,1,1
if rs("admin")<>1 then
Response.Write "<script>alert('系统超时');this.location.href='index.asp';</SCRIPT>"
rs.close
end if
If Request.form("user")=" 修 改 " Then
Set rs = Server.CreateObject("ADODB.RecordSet")
Sql = "Select * From [user] Where id="&Request("id")&""
rs.Open Sql,Conn,1,3
rs("admin") = Request.form("admin")
rs.Update
rs.Close
Response.Write "<script>alert('操作成功');this.location.href='t_user.asp';</SCRIPT>"
end if
%>
<body>
<table width="100%"><tr><td height="25"></td></tr></table>
<table width="100%" border="0" align=center cellpadding="5" cellspacing="1" bgcolor="#eeeeee">
<%
Set rs = Server.CreateObject("ADODB.RecordSet")
Sql = "Select * From [user] Where id="&Request("id")&""
rs.Open Sql,Conn,1,1
%>
<form action="" method=post name=form1 onSubmit="return chk(this)">
<tr bgcolor=ffffff>
<td width="40%" align="right">用户:</td>
<td><%=rs("username")%></td>
</tr>
<tr bgcolor=ffffff>
<td width="40%" align="right">权限:</td>
<td>
管理员<input name="admin" type="radio" value="1" <%If rs("admin")=1 Then Response.Write "checked" End if%> /> 一般用户<input name="admin" type="radio" value="0" <%If rs("admin")=0 Then Response.Write "checked" End if%> />
</td>
</tr>
<tr bgcolor=ffffff>
<td width="40%" align="right"> </td>
<td><input type="submit" name="user" value=" 修 改 " /></td>
</tr>
</form>
<%
rs.Close
%>
</table>
</body>
</html>
显示目前用户及退出模块:
<table width="100%" height="26" border="0" cellpadding="0" cellspacing="0" bgcolor="#335Ea8">
<tr>
<td><table width="90%" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td><font color="ffffff">目前用户:<b><%=Request.Cookies("user")%></b> </font> <a href="quit.asp" target="_top"><font color="#ffffff">退出</font></a></td>
</tr>
</table></td>
</tr>
</table>
管理收入类型模块:
<!--#include file="conn.asp"-->
<!--#include file="heck.asp"-->
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<LINK href="css.css" type=text/css rel=stylesheet />
</head>
<%
idd=Request.Cookies("id")
If Request.form("add")=" 添 加 " Then
paytype = Trim(Request.Form("paytype"))
io = Trim(Request.Form("io"))
Set rs=Conn.Execute("Select PayType From [type] Where user="&idd&" and PayType='"&paytype&"'")
If Not (rs.Eof or rs.Bof) Then
Response.Write "<script>alert('该类型已存在');this.location.href='add_type.asp';</SCRIPT>"
Response.End
rs.clsoe
else
Set rs = Server.CreateObject("ADODB.RecordSet")
Sql = "Select * From [type] Where (ID is null)"
rs.Open Sql,Conn,1,3
rs.addNew
rs("PayType") = paytype
rs("date") = now()
rs("InOut") = io
rs("user") = idd
rs.Update
rs.Close
End if
Response.Write "<script>alert('操作成功');this.location.href='type.asp';</SCRIPT>"
end if
%>
<body>
<script language="JavaScript">
<!--
function chk(theForm){
if (theForm.paytype.value == ""){
alert("请输入费用类型!");
theForm.paytype.focus();
return (false);
}
}
//-->
</script>
<table width="100%"><tr><td height="25"></td></tr></table>
<table width="100%" border="0" align=center cellpadding="5" cellspacing="1" bgcolor="#eeeeee">
<form action="" method=post name=form1 onSubmit="return chk(this)">
<tr bgcolor=ffffff>
<td width="40%" align="right">费用类型:</td>
<td><input name="paytype" type="text" size="30" maxlength="30" />
</td>
</tr>
<tr bgcolor=ffffff>
<td width="40%" align="right">所属类型:</div></td>
<td><select name="io">
<option value="1">收入</option>
<option value="0">支出</option>
</select> <font color=red><-- 请选择</font></td>
</tr>
<tr bgcolor=ffffff>
<td width="40%" align="right"> </td>
<td><input type="submit" name="add" value=" 添 加 " /></td>
</tr>
</form>
</table>
</body>
</html>
管理类型模块:
<!--#include file="conn.asp"-->
<!--#include file="heck.asp"-->
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<LINK href="css.css" type=text/css rel=stylesheet />
</head>
<%
idd=Request.Cookies("id")
If Request.form("type")=" 修 改 " Then
paytype = Trim(Request.Form("paytype"))
Set rs=Conn.Execute("Select PayType From [type] Where user="&idd&" and
展开阅读全文