《数据库原理》 银行存取款信息系统.docx
《《数据库原理》 银行存取款信息系统.docx》由会员分享,可在线阅读,更多相关《《数据库原理》 银行存取款信息系统.docx(26页珍藏版)》请在冰豆网上搜索。
《数据库原理》银行存取款信息系统
《数据库原理》课程设计报告
设计题目:
银行存取款信息系统
专业:
信息管理与信息系统
计算机与数据科学学院
2019年1月10日
1概述
1.1选题的背景与意义
在传统的银行账户管理中,其过程往往是很复杂的,繁琐的,账户管理以入账和出账两项内容为核心,在此过程中又需要经过若干道手续,因为整个过程都需要手工操作,效率十分低下,且由于他们之间关联复杂,统计和查询的方式各不相同;且会出现信息的重复传递问题,因此该过程需要进行信息化,以利用计算机进行账目管理。
本系统是模拟银行账户及存取款的管理,开发一个银行存取款的管理系统。
充分运用计算机技术,方便操作人员的使用,提高客户存取款的效率,提高银行的服务质量。
系统开发的整体任务是实现银行账户管理的系统化、规范化、自动化和智能化,从而达到提高银行存取款管理效率的目的。
1.2相关技术分析
从需求分析,到概念设计和逻辑设计,E-R图的表示,数据字典的创建,需要对数据库知识进行一定的了解并掌握,在课题中建库建表,及其关系模式,关系代数的建立和理解,其中包括插入、删除、修改、查询,牵涉表与表之间的联系,主键与外键的定义约束项的设置,触发器和存储过程的应用。
需要自己对数据库SQL语言以及T-SQL语言的灵活运用。
SQL语言是结构化查询语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;SQL语句用于取回和更新数据库中的数据。
SQLServer用于操作数据库的编程语言,简称T-SQL。
2系统功能设计
2.1系统总体结构设计图
银行存取款信息系统包括三个模块:
1.用户登录模块2.存款模块3.取款模块4.转账模块
2.2系统功能模块
2.2.1用户登录模块
2.2.2存款模块
2.2.3取款模块
2.2.4转账模块
3数据库设计
3.1需求分析
对于用户部分,能够修改用户个人信息,在操作过程中可以查询个人信息;对于管理员部分,可以查询用户的信息,包括各种基本信息、活期余额、定期账单等;对于用户操作部分,有活期存取款、定期存取款操作,另外操作完成之后存储相应的操作记录并能够查询操作记录等功能。
数据字典
银行存取款信息系统数据流图中,数据信息和处理过程需要通过数据字典才能描述清楚。
在定义的银行存取款信息系统数据字典中,主要对数据流图中的账户信息、定期历史、操作记录、定期存款、定期取款、活期操作进行说明。
总体数据流图
数据项:
数据项编号
数据项名称
类型
逻辑关系
1
账号
数字型
不允许为空
2
开户人姓名
字符型
不允许为空
3
账户密码
数字型
不允许为空
4
身份证号
数字型
不允许为空
5
账户余额
数字型
不允许为空
6
开户日期
数字型
不允许为空
7
开户地址
字符型
不允许为空
8
利息
数字型
不允许为空
9
金额
数字型
不允许为空
10
存入日期
数字型
不允许为空
11
存款人姓名
字符型
不允许为空
12
存储年份
数字型
不允许为空
13
存储利率
数字型
不允许为空
14
取款人姓名
字符型
不允许为空
数据字典的数据项
数据结构:
数据姓名
数据来源
数据目的
数据组成
注册申请表
储户
储户信息
姓名+密码+身份证号码+住址
储户信息表
储户
身份验证
姓名+密码+身份证号码+住址
利息清单
系统
储户
利息+姓名+取款时间
存单
存款信息表
储户
姓名+到期时间+存入类型+存入时间+利率+存入金额
取款单
储户
取款信息表
姓名+到期时间+存入类型+存入时间+利率+取款金额+身份证号
存款单
储户
存款信息表
姓名+到期时间+存入类型+存入时间+利率+存入金额+身份证号
数据存储描述
(1)数据存储名称:
储户基本表
含义说明:
存放储户的有关信息
组成结构:
储户信息包括账号,姓名,密码,身份证号,性别,账户余额,开户日期,开户地址。
说明:
储户账户具有唯一性和非空性。
(2)数据存储名称:
活期存取款表
含义说明:
存放活期存取款的信息
组成结构:
活期存取款包括账号,金额,办理日期,利息,账户余额;
说明:
账号具有唯一性和非空性.
(3)数据存储名称:
定期存款表;
含义说明:
存放定期存款的信息
组成结构:
账号,存款人姓名,金额,存储年份,年利率,存储日期
说明:
账号,存储日期,存储年份,年利率具有唯一性和非空性
(4)数据存储名称:
定期取款表;
含义说明:
存放定期取款的信息
组成结构:
账号,取款人姓名,取款金额,取款日期.
说明:
账号,取款人姓名,取款日期具有唯一性和非空性.
(5)数据存储名称:
定期记录表
含义说明:
存放定期存取款的信息
组成结构:
账号,存取款人姓名,操作金额,年份,操作日期
说明:
账号,操作日期具有唯一性和非空性.
3.2概念结构设计
图1银行基本信息E-R图
图2储户基本信息E-R图
图3定期记录基本信息E-R图
以上便是局部E-R图,接着要做的就是将所有的分E-R图进行综合,合成一个系统的总E-R图.
由于本系统比较简单,分E-R图规模也比较小,所以E-R图合成过程采用一次将四个子系统分E-R图集成总E-R图的方式.
分两步进行:
第一步:
合并。
解决各分E-R图之间的冲突,将各分E-R图合并起来生成初步E-R图。
各分E-R图之间的冲突主要有三类:
1.属性冲突:
(1)属性域冲突,即属性值的类型、取值范围或取值集合不同。
由于本系统较简单,所以并不存在这种冲突;
(2)属性取值单位冲突。
由于本系统较简单,不存在这类冲突;
2.命名冲突:
(1)同名异义:
由于本系统较简单,所以不存在这类冲突;
(2)异名同义:
由于本系统较小,所以不存在这类冲突;
3.结构冲突:
(1)同一对象在不同应用中具有不同的抽象:
本系统在需求分析阶段原本存在这种冲突,考虑到后期的简化合并,我们在设计各个分E-R图就早先解决了这个问题,即将在任何一个分E-R图中作为实体出现的属性全部作为实体;
(2)同一实体在不同分E-R图中所包含的属性个数和属性排列次序不完全相同:
由于本系统较简单,所以并不存在这种冲突;
第二步:
修改和重构。
消除不必要的冗余,生成基本E-R图。
由于本系统涵盖的内容比较少,基本不存在冗余的现象,所以初步E-R图就是基本E-R图,不必再进行调整。
下面给出E-R图。
图4合并后的E-R图
3.3逻辑结构设计
E-R图向关系模型的转换
(1)一个1:
1联系可转换为一个独立的关系模式,可以与任意一端对应的关系模式合并;
(2)一个1:
n联系可以转换为独立的关系模式,也可以与n端对应的关系模式合并;
(3)一个m:
n联系转换为一个关系模式。
与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,各实体的码组成关系的码或关系码的一部分;将实体转化为关系模式。
由E-R图转换成关系模式
储户(账号,姓名,密码,身份证号,性别,帐户余额,开户日期,开户地址);
活期存取款(nID,账号,金额,办理日期,利息,账户余额);
定期存款(nID,账号,存款人姓名,金额,存储年份,年利率,存储日期);
定期取款(nID,账号,取款人姓名,取款金额,取款日期);
定期记录(nID,账号,存取款人姓名,操作金额,操作类型,操作日期)
判断每个表分别属于第几范式
(1)由储户表(姓名,账号,密码,身份证号,性别,账户余额,开户日期,开户地址)写出数据依赖:
储户姓名→身份证号,储户姓名→账号,储户姓名→地址
该表中的各个元组都不可再分、并且无部分函数依赖和传递函数依赖、主码都是候选码,所以该表满足第三范式3NF。
(2)由活期存取款表(序号,利息,账号,金额,办理日期,账户余额);
写出数据依赖:
利息→账号,利息→办理日期,利息→金额
该表中的每个元组都不可再分、并且无部分函数依赖和传递函数依赖、主码都是候选码,所以该表也满足第三范式3NF。
(3)由定期存款表(序号,年利率,账号,存款人姓名,金额,存储年份,存储日期)写出数据依赖:
年利率→存储年份,年利率→存储日期,
该表中每个元组都不可再分并且无部分函数依赖和传递函数依赖、主码都是候选码,所以该表同样满足第三范式3NF。
(4)由定期取款表(序号,取款人姓名,账号,取款金额,取款日期)写出数据依赖:
取款人姓名→账号
该表中各个元组都不可再分同样无部分函数依赖和传递函数依赖并且主码都是候选码,所以该表同样满足第三范式3NF。
3.4物理结构设计
储户表
序号
字段名称
字段描述
数据类型
长度
属性
1
CNo
账号
Varchar
20
PK
2
CName
开户人姓名
Varhcar
20
非空
3
CPassword
登录密码
Char
6
非空
4
CID
身份证号
Varchar
20
非空
5
CSex
性别
Char
2
非空
6
CBalance
账户余额
Float
8
非空
7
CDate
开户日期
Datetime
8
非空
8
CAddress
开户地址
Varchar
30
非空
主键:
账号
约束条件:
各属性均非空,密码长度为6位;
序号
字段名称
字段描述
数据类型
长度
属性
1
nID
序号
Int
4
PK
2
CNo
账号
Varchar
20
非空
3
CMoney
操作金额
Float
8
非空
4
CStyle
操作类型
Varchar
10
非空
5
CDate
操作日期
Datetime
8
非空
6
CInterest
利息
Float
8
非空
7
CBalance
账户余额
Float
8
非空
活期存取款表
主键:
nID;外键:
账号;被参照表:
储户表
约束条件:
各属性均非空;
定期存款表
序号
字段名称
字段描述
数据类型
长度
属性
1
nID
序号
Int
4
PK
2
CNo
账号
Varchar
20
非空
3
CName
存款人姓名
Varchar
10
非空
4
CMoney
存款金额
Float
8
非空
5
CDate
存款日期
Datetime
8
非空
6
CYear
存储年份
Int
4
非空
7
CRate
存储利率
Float
8
非空
主键:
nID;外键:
账号;被参照表:
储户表
约束条件:
各属性均非空;
定期取款表
序号
字段名称
字段描述
数据类型
长度
属性
1
nID
序号
Int
4
PK
2
CNo
账号
Varchar
20
非空
3
CName
取款人姓名
Varchar
10
非空
4
CMoney
取款金额
Float
8
非空
5
CDate
取款日期
Datetime
8
非空
主键:
nID;外键:
nID;被参照表:
定期存款表
约束条件:
各属性非空
定期操作记录表
序号
字段名称
字段描述
数据类型
长度
属性
1
nID
序号
Int
4
PK
2
CNo
账号
Varchar
20
非空
3
CName
存取款人姓名
Float
8
非空
4
CStyle
操作类型
Char
4
非空
5
CMoney
存取款金额
float
8
非空
6
CYear
存储年份
Int
4
非空
7
CDate
存取款日期
Datetime
8
非空
主键:
nID;外键:
nID;被参照表:
定期存款表,定期取款表
约束条件:
各属性非空
为了提高查询速度,分别为各表经常查询的列建立索引。
(1)为chuhu(储户表)中的cno属性建立唯一索引cno:
CREATEUNIQUEINDEXcno_indexonchuhutable(cno);
(2)为Hcq(活期存取款表)中nid属性建立唯一索引nid:
CREATEUNIQUEINDEXnid_indexONHcq(nid);
(3)为dqcun(定期存款表)中nid属性建立降序唯一索引niddesc:
CREATE UNIQUE INDEX niddesc ON dqcun(nid desc);
(4)为dqqu (定期取款表)中nid属性建立升序唯一索引nidasc:
CREATE UNIQUE INDEX nidasc ON dqqu(nid asc);
(5)为dqjilu (定期记录表)中nid属性建立降序唯一索引niddesc:
CREATE UNIQUE INDEX niddesc ON dqjilun (nid desc);
3.5数据库实施
(一)建立数据库
createdatabaseBank
onprimary
(
name='Bank',
filename='D:
\keshe\Bank.mdf',
size=5,
maxsize=100,
filegrowth=10%
)
logon
(
name='Bank_log',
filename='D:
\keshe\Bank_log.ldf',
size=2,
filegrowth=1
)
(二)建立各个数据表
1.创建储户表
Createtablechuhu
(CNointprimarykey,
CNamechar(20)notnull,
CPasswordintnotnull,
CIDintnotnull,
CAddresschar(20)notnull,
CBalanceintnotnull,
CDatedatetimenotnull,
CSexchar
(2)notnull,
)
2.创建活期存取款表
CreatetableHcq
(nIDintprimarykey,
CNointnotnull,
CMoneyintnotnull,
CBalanceintnotnull,
CDatedatetimenotnull,
CInterestintnotnull,
)
3.创建定期存款表
Createtabledqcun
(nIDintprimarykey,
CNointnotnull,
CNamechar(10)notnull,
CMoneyintnotnull,
Cratefloatnotnull,
CYearintnotnull,
CDatedatetimenotnull,
)
4.创建定期取款表
Createtabledqqu
(nIDintprimarykey,
CNointnotnull,
CDatedatetimenotnull,
CMoneyintnotnull,
CNamechar(20)notnull,
)
5.定期操作记录表
Createtabledqjilu
(nIDintprimarykey,
CNointnotnull,
CDatedatetimenotnull,
CStylechar(4)notnull,
CMoneyintnotnull,
CNamechar(8)notnull,
)
(三)建立视图
(1)用于查询储户信息的视图定义如下:
Createviewchuhu_view(CNo,CName,CPassword,CID,CAddress,CBalance,CDate,CSex)
As
SelectCNo,CName,CPassword,CID,CAddress,CBalance,CDate,CSex
Fromchuhu
(2)用于查询活期存取款表信息的视图定义如下:
CreateviewHcq_view(nID,CNo,CMoney,CBalance,CDate,CInterest)
As
SelectnID,CNo,CMoney,CBalance,CDate,CInterest
FromHcq
(3)用于查询定期存款表信息的视图定义如下:
Createviewdqcun_view(nID,CNo,CName,CMoney,Crate,CYear,CDate)
As
SelectnID,CNo,CName,CMoney,Crate,CYear,CDate
Fromdqcun
(4)用于查询定期取款表信息的视图定义如下:
Createviewdqqu_view(nID,CNo,CDate,CMoney,CName)
As
SelectnID,CNo,CDate,CMoney,CName
Fromdqqu
(5)用于查询定期操作记录表信息的视图定义如下:
Createviewdqjilu_view(nID,CNo,CDate,CStyle,CMoney,CName)
As
SelectnID,CNo,CDate,CStyle,CMoney,CName
Fromdqjilu
(四)建立存储过程
(1)用于查询储户信息的存储过程如下:
useBank
go
createprocedure查询储户信息
as
select*
fromchuhu
(2)用于插入储户信息的存储过程如下:
useBank
go
createprocedure插入储户信息
(@CNoint,
@CNamechar(20),
@CPasswordint,
@CIDint,
@CAddresschar(20),
@CBalanceint,
@CDatedatetime,
@CSexchar
(2)
)
as
insertintochuhu
values(@CNo,
@CName,
@CPassword,
@CID,
@CAddress,
@CBalance,
@CDate,
@CSex)
(五)设计触发器
禁止修改和删除当前数据库中的任何表的触发器如下:
useBank
go
createtriggersafety
ondatabase
fordrop_table,alter_table
asprint'不能删除或修改数据库表!
'
rollback
go
(6)设置权限
创建登录名:
execsp_addlogin'李一','123456',Bank,null
execsp_addlogin'黄二','123456',Bank,null
execsp_addlogin'张三','123456',Bank,null
execsp_addlogin'李四','123456',Bank,null
创建用户名:
execsp_adduser'张三','张三','public'
execsp_adduser'李一','李一','public'
execsp_adduser'李四','李四','public'
execsp_adduser'黄二','黄二','public'
权限设置:
grantselectonchuhuto张三
grantselectonHcqto张三
grantselectondqcunto张三
grantselectonchuhuto李一
grantselectonHcqto李一
grantselectondqcunto李一
grantselectonchuhuto李四
grantselectonHcqto李四
grantselectondqcunto李四
grantselectonchuhuto黄二
grantselectonHcqto黄二
grantselectondqcunto黄二
grantupdateonchuhuto李一
grantupdateondqcunto李一
grantupdateondqjiluto李一
grantupdateondqquto李一
grantupdateonHcqto李一
3.6数据库运行与维护
数据库完全备份
backupdatabaseBank
todisk='D:
/keshe/Bank.bak'
数据库的差异备份
BackupdatabaseBankto
Disk='D:
/keshe/Bank.bak'withdifferential
数据库的日志备份
BackuplogBankto
Disk='D:
/keshe/Bank.bak'withnoformat
数据库还原
restoredatabaseBank
fromdisk='D:
/keshe/Bank.bak'
withreplace
4总结
这次银行存取款信息系统课程设计,我运用的是MicrosoftSQLSevere2012数据库设计软件。
通过这次课程设计,加深了我对数据库原理的理解。
通过这次数据库课程设计,真正达到了学与用的结合,增强了对数据库方面应用的理解,对自己今后参与开发数据库系统积累了不少经验,在实验过程中,从建立数据开始,对数据库设计理念及思想上有了更高的认识,从需求分析,到概念设计和逻辑设计,E-R图的表示,数据字典的创建,我懂得了不少数据库开发过程中的知识,在实验中建表,及其关系模式,关系代数的建立和理解,增强了自己在数据库中应用SQL语言的灵活性,其中包括插入、删除、修改、查询,牵涉表与表之间的联系,主键与外键的定义约束项的设置,使逻辑更严密。
在整个学习与设计过程中,在课程设计过程中不免遇到各种各样的困难,通过请教同学,查阅资料解决困难,增强了自己的自学能力.这次课程设计让我知道了什么叫做付出才有回报.这次课程设计给了我一个锻炼自己,强化专业知识的机会,通过这次课程设计,我相信,只要认真学习,多思考,多实践,最后就能成功了。
在实验中我上网查阅了不少参考资料,并学以致用,自我创新,从学到用又从用到学,不断修改,同时加强了自己对理论知识的学习与理解,这对完善系统设计有很大帮助。
总之在这次设计过程中我受益匪浅,为以后工作打下了坚实的基础。
因为这次课程设计时间有限,所以完成的功能也就很有限,但感觉收获很大,很有成就感。
参考文献
[