银行管理系统课程设计报告.docx
《银行管理系统课程设计报告.docx》由会员分享,可在线阅读,更多相关《银行管理系统课程设计报告.docx(19页珍藏版)》请在冰豆网上搜索。
银行管理系统课程设计报告
仲恺农业工程学院
课程设计
设计题目:
银行储蓄管理系统
姓名方墅东
院(系)计算机科学与工程学院
专业年级计算机科学与技术091班
学号200910214106
指导教师罗慧慧
职称讲师
起止时间2011年6月20日-2011年6月24日
仲恺农业工程学院教务处制
目录
1概述3
2需求与功能分析3
3概要设计3
4数据库设计5
5关键技术实现8
6数据库安全性控制18
7总结与展望18
参考文献19
1概述
现今的社会,资金流动十分频繁。
不单单是企业、产商,个人也不例外。
银行作为一个金融机构,在现代人们的生活中扮演着极其重要的角色。
为生活节奏飞快的现代人提供快速、便捷、高效的理财服务。
伴随着电脑技术的发展,各大银行的储蓄管理系统也随之出现在这一舞台之上。
这次的数据库课程设计我以这一应用环境为背景,应用数据库原理课程所学的数据库设计与关系数据理论,结合实际的操作和设计进行设计。
目标是制定一套合理、有效,规范和实用的银行管理系统,对银行信息进行集中统一的管理。
提高银行工作效率,做到信息的规范管理,科学统计和快速查询。
这次课程设计我所应用的开发环境是windows7,开发工具是SQL2008,所制作数据库在window2000以上操作系统都可以正常运行。
2需求与功能分析
银行储存管理系统要求每一个银行管理者都有一个系统帐号,并且每一个帐号都有密码,系统对用户的添加、管理、存款添加都有管理者执行,而不是由存储用户自己执行。
该系统主要有两部分业务内容:
存款与取款。
取款则可以由储户自己在取款窗口取款,也可以由管理员管理取款操作。
系统扩充的功能有管理员的添加、修改,用户修改密码。
3概要设计
下面为银行存储管理系统的的概要设计:
(1)、系统总体框图:
银行是一个与我们的生活息息相关的部门。
在我们的生活中银行主要办理以下业务:
1,储户开户登记;2,定期存款;3,定期取款;4,活期存款;5,活期取款;6,利息结算7,输出明细账单,8、销户9、管理员的添加与修改。
这些功能都是由管理员来操作的,管理员可以操作管理员信息表、用户个人信息表和用户存储信息表这三个表。
而对于用户,可以单独在端口操作账户查询、取款和修改个人密码。
不管是任何操作,都要先登录核对帐号密码。
(2)、数据流程图:
4数据库设计
我设计的银行管理系统只有两个实体:
管理员与存储用户。
而管理员只拥有管理员帐号、密码、姓名这三个信息,以方便查询管理员操作记录。
储户则拥有个人信息和存储信息,分为两个表。
个人信息的属性有银行卡号、姓名、身份证号、密码、电话、性别,存储信息有银行卡号、密码、存储数额、存储类型、利息利率、存储日期、已存储时间(年份)、已获得利息、总余额这些信息,其中这里的银行卡号和密码是个人信息表的外键。
由管理员操作用户的开户、存储操作等操作,而用户可以自己进行查询、取款、修改密码。
以下为E-R模型图:
各部分E-R图:
关系表(已规范化):
Adminstrator(管理员信息表)
字段名称
含义
类型
长度
是否为空
黙认值
主键
外键
约束
AdNumber
管理员帐号
varchar
10
N
P
主键
AdName
姓名
varchar
10
N
AdPassword
密码
varchar
12
N
Usersmessage(用户个人信息表)
字段名称
含义
类型
长度
是否为空
黙认值
主键
外键
约束
Bankcardnumber
银行卡号
varchar
20
N
P
主键
Name
姓名
varchar
10
N
Password
密码
varchar
20
N
IDcardnumber
身份证号
varchar
20
N
Telephone
电话
varchar
20
N
Sex
性别
nvarchar
1
N
Checkin(‘男’,’女’)
Savemessage(存储信息表)
字段名称
含义
类型
长度
是否为空
黙认值
主键
外键
约束
Bankcardnumber
银行卡号
varchar
20
N
P
主键
UserPassword
密码
varchar
20
N
Savemoney
存储数额
money
8
N
Savestyle
存储类型
varchar
10
N
Accrualrate
利息利率
double
10
N
Savedate
存储日期
datetime
8
N
自动填写当天日期
Savetime
已存储时间(年份)
datetime
Y
公式计算:
(datepart(year,getdate())-datepart(year,[Savedate]))
Interest
已获得利息
Money
Y
公式计算:
(([Savemoney]*[Accrualrate])*(datepart(year,getdate())-datepart(year,[Savedate])))
Allmoney
总余额
Money
Y
公式计算:
([Savemoney]+[Accrualrate]*(datepart(year,getdate())-datepart(year,[Savedate])))
由E-R图转化的关系表
其中,利息、余额、存储时间我采用了公式计算,并检验正确。
由以上关系表在SQL2008中建立了数据库。
5关键技术实现
设计了显示用户个人信息及存储信息的个人信息视图以及只查询用户存储信息的视图和显示管理员信息的管理员视图。
设计了四个触发器,包括两个管理员密码、用户密码设置修改不符合长度的触发器。
一个定期存款未到期不允许取款的触发器,一个余额不足不允许取款的触发器。
设计了添加、修改、删除管理员;用户开户、修改用户个人信息、用户销户(删除个人信息与存储信息)、增加存款存储、用户修改密码用户取款这几个存储过程。
并对关键事务:
用户取款、用户开户、用户修改密码、用户添加存款这几个关键业务做了事务处理,我的方法是将事务的隔离级别设置为为提交读(readuncommitted),防止丢失修改、读脏数据等错误。
具体就是在这些事务前加入settransactionisolationlevelreaduncommitted
具体代码如下:
视图:
由企业管理器直接创建。
触发器:
管理员密码长度触发器:
Createtrigger[dbo].[T1]on[dbo].[admins]forinsert,update
as
declare@AdPasswordvarchar(50)
select@AdPassword=AdPasswordfrominserted
if(len(@AdPassword)<6orlen(@AdPassword)>12)
begin
print'密码长度应在6到12'
ROLLBACKTRANSACTION
End
用户密码长度触发器:
Createtrigger[dbo].[T2]on[dbo].[Usermessage]forinsert,update
as
declare@UserPasswordvarchar(50)
select@UserPassword=UserPasswordfrominserted
if(len(@UserPassword)<6orlen(@UserPassword)>12)
begin
print'密码长度应在到6到12’
ROLLBACKTRANSACTION
End
定期存款取款限定:
Createtrigger[dbo].[T4]on[dbo].[UserSavemessage]forupdate
as
declare@Savetimemoney
declare@Savestylevarchar(50)
select@Savetime=Savetimefrominserted
select@Savestyle=Savestylefrominserted
if(@Savestyle='定期三年'and@Savetime<3)
begin
print'储蓄时间不足年,无法取款'
rollbacktransaction
end
else
if
(@Savestyle='定期五年'and@Savetime<5)
begin
print'储蓄时间不足年,无法取款'
rollbacktransaction
end
余额不足触发器:
Createtrigger[dbo].[T3]on[dbo].[UserSavemessage]forupdate
as
declare@allmoneymoney
select@allmoney=allmoneyfrominserted
if(@allmoney<1)
begin
print'余额不足!
'
rollbacktransaction
end
存储过程:
添加管理员存储过程:
createprocedure[dbo].[AdminAdd]
(@AdNumber[varchar](50),@AdName[varchar](50),@AdPassword[varchar](50)
)
asinsertinto[admins]
(AdNumber,AdName,AdPassword
)
values
(@AdNumber,@AdName,@AdPassword
)
删除管理员存储过程:
createprocedure[dbo].[Admindelete]
(@AdNumber[varchar](50)
)
asdelete[admins]
where([AdNumber]=@AdNumber)
修改管理员信息存储过程:
createprocedure[dbo].[AdminModify]
(@AdNumber[varchar](50),@AdName[varchar](50),@AdPassword[varchar](50)
)
asupdate[admins]
setAdName=@AdName,AdPassword=@AdPassword
where(AdNumber=@AdNumber)
用户开户(录入用户个人信息):
settransactionisolationlevelreaduncommitted
Createprocedure[dbo].[UserAdd]
(@Bankcardnumber[varchar](50),@Name[varbinary](50),@UserPassword[varchar](50),
@IDcardnumber[varchar](50),@Telephone[varchar](50),@Sex[varchar]
(1),
@Savemoney[money],@Savestyle[varchar](50),@Accrualrate[float],@Savedate[datetime]
)
as
insertinto[Usermessage]
(Bankcardnumber,Name,UserPassword,IDcardnumber,Telephone,Sex
)
values
(@Bankcardnumber,@Name,@UserPassword,@IDcardnumber,@Telephone,@Sex
)
insertinto[UserSavemessage]
(Savemoney,Savestyle,Accrualrate,Savedate
)
values
(@Savemoney,@Savestyle,@Accrualrate,@Savedate
)
用户销户(删除个人信息与存储信息):
createprocedure[dbo].[UserDetele]
(@Bankcardnumber[varchar](50)
)
as
delete[Usermessage]
where(Bankcardnumber=@Bankcardnumber)
delete[UserSavemessage]
where(Bankcardnumber=@Bankcardnumber)
修改用户个人信息存储过程:
createprocedure[dbo].[UserModify]
(@Bankcardnumber[varchar](50),@Name[varchar](50),@UserPassword[varchar](50),
@IDcardnumber[varbinary](50),@Telephone[varchar](50),@Sex[varchar]
(1)
)
asupdate[Usermessage]
setName=@Name,UserPassword=@UserPassword,IDcardnumber=@IDcardnumber,
Telephone=@Telephone,Sex=@Sex
where(Bankcardnumber=@Bankcardnumber)
用户取款:
settransactionisolationlevelreaduncommitted
Createprocedure[dbo].[getmoney]
(@Bankcardnumber[varchar](50),@getmoney[money])
asupdate[UserSavemessage]
setSavemoney=Savemoney-@getmoney
where(@Bankcardnumber=Bankcardnumber)
增加存款存储过程:
settransactionisolationlevelreaduncommitted
createprocedure[dbo].[addsavemoney]
(@Bankcardnumber[varchar](50),@Savemoney[money])
asupdate[UserSavemessage]
setSavemoney=Savemoney-@Savemoney
where(@Bankcardnumber=Bankcardnumber)
用户修改密码:
settransactionisolationlevelreaduncommitted
createprocedure[dbo].[Usermodifypassword]
(@Bankcardnumber[varchar](50),@UserPassword[varchar](50)
)
asupdate[Usermessage]
setUserPassword=@UserPassword
where(Bankcardnumber=@Bankcardnumber)
触发器SQL脚本测试结果如下:
余额不足的触发器SQL脚本测试结果:
密码长度限定触发器SQL脚本测试结果:
给出增添、修改、删除、取款等不同操作的存储过程的SQL脚本测试结果,存储过程其余结果类似:
添加管理员存储过程SQL脚本语言测试结果:
取款操作的存储过程测试结果:
取款前:
取款后:
修改用户信息存储过程脚本测试结果:
修改前:
修改后:
删除用户的存储过程:
执行前:
执行后:
6数据库安全性控制
设置了admin的用户,拥有所有架构和权限。
以管理数据库
设置了boss和yinhangwork两个角色,boss有对admins表的所有权限(修改、增加、查询),对usersavemessage表的查询操作权限,以方便查询统计业务。
Yinhangwork可以对usersavemessage和usermessage表的所有操作,管理业务。
7总结与展望
这次的数据库课程设计,我选择做银行储蓄系统,一开始觉得自己数据库原理学得不错,做起来很简单,但是真正开始入手做了才发现做起来确实困难重重,尤其是自己第一次独立设计一个数据库。
从需求分析阶段开始,我就花了不少时间在网上搜索查找资料,想尽量地把这个系统做得完善。
在充分了解了课程设计要求以及这个银行存储管理系统的需求之后,我花了一天多的时间画数据流图、结构框图已经E-R图,再从中得到了我所需要设计的关系表,经过思考和测试后,把关系表进行了一些优化。
接下来便是数据库的设计了,我通过关系表在SQL2008中创建了我的银行管理系统的数据库。
通过分析,做了视图、触发器、各个功能的存储过程,不断完善我的数据库。
途中也遇到了一些问题,一开始不太理解触发器的定义,以为利息计算可以利用触发器,可是是错的,它只能用在插入、修改和删除操作过程中,通过查找最后我变换了方案,利息计算用属性的公式计算就可以了,可能很简单地得出。
经过不断地测试和不断地改进,我把这次的课程设计的系统逐步完善了。
当然,这个系统还存在不少不足的地方,例如没有把权限分得更深化,毕竟银行是一个大系统。
例外有些操作可能实际用起来会比较繁琐。
总之,这次的课程设计我的收获非常的大,学到的不仅是知识还有认真不断认识问题解决问题的精神。
参考文献
石玉强、闫大顺、《数据库原理及应用》石玉强、闫大顺