SQL 系统实例家庭理财2226666.docx
《SQL 系统实例家庭理财2226666.docx》由会员分享,可在线阅读,更多相关《SQL 系统实例家庭理财2226666.docx(20页珍藏版)》请在冰豆网上搜索。
SQL系统实例家庭理财2226666
家庭理财管理
目录
一.需求分析2
㈠、调查用户需求2
家庭收入的基本信息2
㈡,用户对系统的要求2
1.信息要求2
2.处理要求3
3.安全性与完整性要求3
㈢、系统功能的设计和划分3
㈣,数据流图4
㈤,数据字典6
二.概念结构设计8
三.数据库结构设计10
四.逻辑及物理设计11
关系模式11
数据库相关语句:
12
数据库的存储14
触发器的建立…….….…………….………………………………………………………13
五.总结17
六.参考资料18
一.需求分析:
㈠、调查用户需求
本系统的最终用户为以家庭为单位的个人。
根据我们日常生活中的经验,结合自己对父母或其他家庭成员的咨询与调查,得出用户的下列实际要求:
用户以家庭为单位注册一个家庭财务信息管理系统的账号,同为一个家庭的家庭成员只要知道本家庭的账号及账号密码,便可登录使用该系统。
家庭收入的基本信息
每个用户都有一个唯一的家庭财务信息管理系统账号,登录之后,每次收入记录都有唯一的收入编号,并且将同时记录下收入的日期,收款人等相关信息。
1.家庭支出的基本信息
每条支出记录都有唯一的编号,用户填入付款人,日期、金额等信息后,将记录到支出资产状况登记表中,并且显示出经过统计之后同一天内的支出合计总额。
㈡,用户对系统的要求
1.信息要求:
用户能查询到上面提到的家庭财务的所有相关信息,包括单独的家庭收入信息、支出信息,还可以多表联查,以得出总的财产状况。
家庭收入和家庭支出的登记和核算,并能够完成相应的统计处理。
在登记过程中要家庭成员如实进行填报,不能越级填报,不能越权填报,但所有家庭成员都能够查询一段时间内的家庭总收入、家庭总支出和家庭现有资金情况。
在统计过程中主要完成:
支出项目的分项汇总统计,同期对比分析等比较过程。
2.处理要求:
系统在用户进行登录时,能根据用户输入的账号和密码与用户信息登记表中的数据进行配对,配对成功即可登录到系统页面中,配对不成功则提示该账号不存在或密码错误,请重新输入。
当用户发现过去输入的收支记录有错误时,可以对其进行添加、修改以及删除,例如某账号中,李明今天发了3000元工资,则可在收入模块中添加记录,填写好日期、收款人为李明、项目为工资、金额3000元。
3.安全性与完整性要求
安全性要求:
(1)系统应设置访问用户的标识以鉴别是否是合法用户,并要求合法用户设置其密码,保证用户身份不被盗用。
完整性要求:
(1)各种信息记录的完整性;
(2)各种数据间相互的联系的正确性;
(3)相同的数据在不同记录中的一致性。
㈢、系统功能的设计和划分
根据如上得到的用户需求,我们将本系统按照所能完成的功能分成以下几个模块:
1.处理用户登录
2.用户可以记录家庭收入信息
3.用户可以记录家庭支出信息
4.用户可以对以上信息进行查询并查询总的财务状况
㈣,数据流图
收入分数据流图
用户在登录家庭财务管理系统之后,点击增加按钮,选择收入栏,便会弹出对话框,用户将收入信息(日期、收入金额、收款人、项目)填写好,点击确认,收入信息将自动存入收入资产登记表中。
用户可以点击收入按钮,即提出收入查询请求,系统则会将数据库中的收入资产信息显示给用户。
收入分数据流图:
用户在登录家庭财务管理系统之后,点击增加按钮,选择支出栏,便会弹出对话框,用户将支出信息(日期、支出金额、付款人、项目)填写好,点击确认,支出信息将自动存入支出资产登记表中。
用户可以点击左侧的支出按钮,即提出支出查询请求,系统则会将数据库中的支出资产信息显示给用户。
如图2-2
支出分数据流图:
支出查询请求
支出信息
总数据流图:
登录信息
登录情况
用户信息
㈤,数据字典
1.数据项
家庭收入数据字典
属性名
存储代码
类型
长度
备注
收入编号
收入编号
char
5
同一天以内的收入编号
项目
项目
char
10
收入来源
收入金额
收入金额
int
20
收入金额
日期
日期
char
15
收入的时间
家庭支出数据字典
属性名
存储代码
类型
长度
备注
支出编号
支出编号
char
5
同一天以内的支出编号
项目
项目
char
10
支出去向
支出金额
支出金额
int
20
支出金额
日期
日期
char
15
支出的时间
用户数据字典
属性名
存储代码
类型
长度
备注
编号
编号
char
8
登录者编号
姓名
姓名
char
20
登录者姓名
性别
性别
char
20
登录者性别
生日
生日
datetime
20
登录者的出生年月日
身份
身份
char
20
登录者再次家庭中的身份
账号
账号
char
20
登录账号
密码
密码
char
20
登录密码
2.数据结构
数据结构名
组成
家庭收入信息
收入编号,项目,金额,日期
家庭支出信息
支出编号,项目,金额,日期
用户信息
编号,姓名,性别,生日,身份,账号,密码
3.数据流
数据流名
数据流来源
数据流去向
组成
收入登记信息
用户
收入资产状况登记表
收入信息
收入查询信息
收入状况登记表
用户
收入信息
收入查询请求
用户
收入查询
收入查询请求
支出登记信息
用户
支出资产状况登记表
支出信息
支出查询信息
支出状况登记表
用户
支出信息
支出查询请求
用户
支出查询
支出查询请求
登录信息
用户
用户登录
登录信息
用户信息
用户信息登记表
用户登录
用户信息
登录情况
用户登录
用户
登录情况
4.数据存储
数据存储名
输入的数据流
输出的数据流
组成
收入资产状况登记表
收入信息
收入信息
收入信息
支出资产状况登记表
支出信息
支出信息
支出信息
用户信息登记表
用户信息登录信息
登录情况
用户信息登录信息登录情况
5.处理过程
处理过程名
输入数据流
输出数据流
收入登记
收入信息
收入信息
收入查询
收入信息查询请求
收入信息
支出登记
支出信息
支出信息
支出查询
支出信息查询请求
支出信息
用户登录
登录信息用户信息
登录情况
二.概念结构设计
收入ER图:
如下图所示,家庭收入这个实体共有两个属性,分别是收入金额以及收入的项目(来源),其与实体用户的联系:
收入,又有两个属性,分别是日期和编号。
支出ER图:
如图下所示,家庭支出这个实体共有两个属性,分别是支出金额以及支出的项目(去向),其与实体用户的联系:
支出,又有两个属性,分别是日期和编号
总的ER图:
三.数据库结构设计
家庭成员
属性名
数据类型
可否为空
含义
完整性约束
jno
char
否
编号
主码
jname
varchar(10)
否
姓名
jsex
char
(1)
否
性别
jbirth
datetime
否
生日
jshenfen
varchar(10)
否
身份
jnumber
char(20)
否
账户
jpassword
char(20)
否
密码
收入
属性名
数据类型
可否为空
含义
完整性约束
jno
char(6)
否
收入编号
主码
srdate
datetime
否
日期
srtype
char(18)
否
项目
srmoney
Money
可以
金额
属性名
数据类型
可否为空
含义
完整性约束
jno
char(6)
否
支出编号
主码
zcdate
datetime
否
日期
zctype
varchar(10)
否
项目
zcmoney
Money
可以
金额
支出
四.逻辑及物理设计
关系模式:
家庭成员(编号,姓名,生日,性别,身份,账号,密码)
家庭收入(收入编号,日期,收款人,项目,金额)
家庭支出(支出编号,日期,付款人,项目,金额)
(下划线标注的属性为主码)
数据库相关语句:
--创建数据库
createdatabasejtlicai
--创建家庭成员情况表
createtablejt_xx
(
jnochar(8)primarykey,
jnamevarchar(10)notnull,
jbirthdatetimecheck(jbirth>='1900'andjbirth<='2100'),
jsexchar
(2)check(jsex='男'orjsex='女'),
jshenfenchar(4)check(jshenfen='爸爸'orjshenfen='妈妈'orjshenfen='儿子'orjshenfen='女儿'),
jnumberchar(20),
jpasswordchar(20),
)
--在家庭信息表中插入数据成员
insertintojt_xxvalues('01','李**','1957-03-03','男','爸爸','000000','000000')
insertintojt_xxvalues('02','葛**','1957-3-3','女','妈妈','111111','111111')
insertintojt_xxvalues('03','李沫','1988-5-8','男','儿子','222222','222222')
insertintojt_xxvalues('04','李丽','1990-1-3','女','女儿','333333','333333')
--查看家庭成员情信息表
select*fromjt_xx运行结果实际操作哦。
--创建家庭收入情况表
createtablejt_sr
(
srtypechar(18),
srmoneymoneynull,
srdatedatetimecheck(srdate>='1900'andsrdate<='2100'),
jnochar(8)notnullreferencesjt_xx(jno),
--foreingekey(jno)referencesjt_xx(jno),
primarykey(srtype,jno)
)
--在jt_sr信息表中插入数据成员
select*fromjt_sr
insertintojt_srvalues('基本月工资',5000,'2011-12-3','01')
insertintojt_srvalues('基本月工资',5000,'2011-12-3','02')
insertintojt_srvalues('基本月工资',0000,'2011-12-3','03')
insertintojt_srvalues('基本月工资',0000,'2011-12-3','04')
--查看家庭收入情况表
select*fromjt_sr运行结果实际操作哦。
droptablejt_sr--删除家庭收入情况表
--创建家庭支出情况表
createtablejt_zc
(
zctypechar(18),
zcmoneymoneynull,
zcdatedatetimecheck(zcdate>='1900'andzcdate<='2100'),
jnochar(8)notnullreferencesjt_xx(jno),
--foreingekey(jno)referencesjt_xx(jno),
primarykey(zctype,jno)
)
--在jt_zc信息表中插入数据成员
insertintojt_zcvalues('烟酒',50,'2011-6-2','01')
insertintojt_zcvalues('基本消费',30,'2011-6-2','02')
insertintojt_zcvalues('生活费',150,'2011-6-1','03')
insertintojt_zcvalues('购物',150,'2011-6-1','04')
--查看家庭支出情况表
select*fromjt_zc运行结果实际操作哦。
droptablejt_zc
--创建一个全集视图
createviewjt_shitu
as
selecta.jno,a.jname,a.jbirth,a.sex,a.shenfen,srtype收入方式,srmoney收入多少,srdate收入日期,zctype支出方式,zcmoney支出多少,zcdate支出日期
fromjt_xxa,jt_srb,jt_zcc
wherea.jno=b.jnoandb.jno=c.jnoanda.jno=c.jno
select*fromjt_shitu--显示视图
dropviewjt_shitu--删除全局试图代码
--创建计算家庭成员中任意一个人的月收入金额的函数
createfunctiondbo.f1(@mint)
returnsmoney
as
begin
declare@resultmoney
set@result=(selectsum(srmoney)fromjt_sr
wheresrmoney=@m)
return@result
end
selectdbo.f1(5000)--显示月收入金额
--利用相同上面的方法,创建计算家庭成员中任意一个人的月支出金额的函数
Createfunctiondbo.f2(@mint)
Returnsmoney
As
Begin
Declare@resultmoney
Set@result=(selectsum(zcmoney)fromjt_zc
Wherezcmoney=@m)
return@result
end
selectdbo.f1(5000)
数据库的存储
--创建一个全部的存储过程
createprocproc1
@jnochar
(2)
as
selecta.*,srtype收入方式,srmoney收入多少,srdate收入日期,zctype支出方式,zcmoney支出多少,zcdate支出日期,
@jnofromjt_xxa,jt_srb,jt_zcc
wherea.jno=b.jnoanda.jno=c.jnoanda.jno=@jno
execproc1'05'
05是新增的成员,注意这里不能是家庭信息表里不存在的成员
--统计家庭中的总收入
createprocproc2
@aint
as
ifnotexists(select*fromjt_sr
wheresrmoney=null)
begin
selectsum(srmoney)fromjt_sr
wheresrmoney=@a
end
else
print'统计收入不成功'
execproc25000
--创建插入新数据成员的存储过程
在上述表中插入一个数据我们用的是简单的语句insertintojt_srvalues('基本月工资',5000,'2011-2-3','01'),但是我们要在插入的同时存储个记录,这样我们的工作就更难了,两种方式对比,我们更需要的是在插入的同时存储该数据或者数据库,所以我们要利用数据库变量的方法来实现。
下面我们在家庭收入表中插入新数据成员的存储过程:
createprocproc4
@srtypechar(18),@srmoneymoney,@srdatedatetime,@jnochar
(2)
as
ifnotexists(select*fromjt_srwheresrmoney=@srmoneyandsrdate=@srdateandjno=@jno)
insertintojt_sr(srtype,srmoney,srdate,jno)
values(@srtype,@srmoney,@srdate,@jno)
else
print'存在相同的记录,插入不成功'
execproc4'奖金',3000,'2011-4-6','01'
select*fromjt_sr
触发器的建立
触发器是一种特殊的存储过程,该存储过程响应特定的事件,触发器的执行是自动的,可以通过数据库中相关的表进行层叠更改,也可以强制限制可以使用check约束所定义的,与check约束不同的引用其他表中的列。
下面我们就利用这些属下做一个简单的例子:
如果用户删除了家庭信息表(jt_xx)的某个成员,在其他两个表(jt_sr,jt_zc)中应用了它中的jno列属性,而引发了触发器delete,家庭收入(jt_sr)和支出表(jt_zc)中该成员的所有记录也相映的跟着删除.
-创建delete触发器
createtriggerdeletecaonjt_xx
fordelete
as
declare@jnovarchar
(2)
select@jno=jnofromdeleted
deletefromjt_zcwherejt_zc.jno=@jno
go
select*fromjt_xx
deletefromjt_xxwherejt_xx.jno=01
select*fromjt_zc
五.总结
通过本次的课程设计,让我更熟练地掌握了数据库,让我了解了什么是SQL Sever 数据库,以及怎么去见SQL Sever数据库,在数据库中要注意的事项,像表的建立和视图的建立,它们可以用SQL Sever企业管手工操作,也可以用SQL语句在查询分析器里操作,但我们主要的实现后者并掌握;还有我们学到了多种数据的添加,通过语句两种不听方式的插入:
一种是在表中利用insertinto表明values(参数)简单的的插入数据信息,另一种是在存储的过程插入数据成员信息。
还有我们应当注意的是数据库用户之间的权限以及设置,有的用户只能看不能操作,有的用户可有操作却打不开数据,这些都是没有注册情况下设置用户的属性,即建立书库用户登入里设置。
还有数据的还原以及存储,都是非常重要的操作,让我增长了许多知识。
熟悉了一个管理系统的运用和操作,能够用SQL语言创建基本表和增加信息,删除信息,修改信息,查询信息。
我面对编程过程中出现错误的程序没有退缩和放弃,而是更加努力地寻找解决方法,虚心请教老师和同学,这也给了我很大的动力。
总之,这次课程设计为我们提供了一个相互学习的平台,为更好地学习这门课程提供了环境和基础,使我们更加全身心的投入了一次设计,能学以致用,对我们来说是意义非凡的。
我所选择的是设计一个家庭理财管理系统,对家庭各成员的财务收入、支出,进行增加、删除、修改、查询。
这对我来说是一次尝试与创新的过程,也可以说是一个挑战的过程,毕竟以前没有作过,缺少经验。
现在利用自己学到的知识设计并制作一个家庭理财管理系统,这本身就是一个知识转化为生产力的过程,所以大家都很兴奋。
在具体的设计与实施中,我看到并感受到了一个管理系统从无到有的过程,对具体的设计步骤、思路、方法、技巧都有了进一步的了解,并感受深刻。
在设计中我们基本能按照规范的方法和步骤进行,首先对现有的系统进行调查,并查阅有关资料,最后确定设计方案,然后设计并制作,实施过程中我们深刻的认识到认真执行管理系统软件标准的重要性,我们由于对管理系统软件相关的标准和规范不太了解,缺少行为操作准则,所以在设计中手法比较生硬,主与次也没能很好把握住,这些方面通过这次我们都要加强了解。
六.参考资料
[1]王珊,萨师煊.数据库系统概论(第四版).北京:
高等教育出版社,2006.05
[2]罗运模.完全掌握SQLServer2000.北京:
人民邮电出版社,2001
[3]白尚旺.PowerDesigner软件工程技术.北京:
电子工业出版社,2004