首页 > 代码库 > 银行储蓄管理系统——数据库设计

银行储蓄管理系统——数据库设计

一、       项目设计目的

   (1)培养学生运用所学课程《数据库系统原理》的理论知识和技能,深入理解《数据库系统原理》课程相关的理论知识,学会分析实际问题的能力。
   (2)培养学生掌握用《数据库系统原理》的知识设计计算机应用课题的思想和方法。
   (3)培养学生调查研究、查阅技术文献、资料、手册以及编写技术文献的能力。

二、       项目背景

    当今计算机及网络技术飞速发展,计算机应用在全球范围内日益普及,而社会也正快速向信息化社会前进,信息系统的作用也越来越大。因此,纸质作为存储数据的介质已经不能适应时代大道发展。加上现如今,纯人工操作银行存取款业务已经不太现实,一是因为业务量大,人工操作会显得效率极低;二是因为银行存取款业务繁琐,精确度要求极高,人工操作易出错,甚至会造成不可挽回的损失。所以精确度高、出错率低的银行业务管理软件显得尤为重要。银行储蓄系统对于现代银行而言,是能否发挥其银行管理作用至关重要的技术平台。对于银行储户和银行管理人员来说,是能否方便快捷的获取信息的关键。因此银行储蓄系统应该能够为用户提供充足的信息和快捷方便的操作手段

三、       项目的功能需求

(1) 需求分析

系统中人物的信息:系统中有三种角色,管理员操作员客户。管理员要管理和监督整个系统,因此他要管理操作员的工作,分配操作员的权利,是此系统中的最高权限;操作员的工作就是进行业务的办理,如开户,存取款等操作,所以他就是整个系统的操作者;而客户就是与银行有关联的广大客户群体了。

系统中要求每个银行管理者都有一个系统帐号,并每个帐号都有密码,系统的一切操作(如:增加存储用户,提高利率等)都由管理者执行,而不是由存诸用户执行,也主是说存储用户并不直接与系统交互,而是通过管理员与系统交互。

例如该系统最主要的两部份业务功能,存款与取款。储户填写的存款单或取款单由业务员输入系统,如果是存款则系统记录存款人姓名,住址(电话号码),身份证号码,存款类型,存款日期,到期日期,利率及密码(可选)等信息,并打印存单给储户;如果是取款而且存款时留有密码,则系统首先核对储户密码,若密码正确或存款时未留密码,则系统计算得利息并打印出利息清单给储户。

系统为管理者提供主功能界面,系统在启动时要求管理者输入登录帐号与密码,系统要通过管理员执行一系操作(如:添加用户,修改,查询,删除等)储户的一切信息,存储在数据库表中

银行储蓄管理系统能实现的功能 :系统初置、系统初值录入(开户)、定期储蓄、外部消费与结算模拟、综合统计查询等功,注销,退出系统

(2) 系统设计方法

  1. 主界面设计。
  2. 数据库存储设计。
  3. 系统登录用户名密码验证。
  4. 用户在操作自己的账户时,只能通过操作员代替执行。

(3) 功能性分析

账户开户

对于客户我们应该知道他的客户号,客户名,身份证号家庭住址等个人信息。

账户销户

将该用户信息从数据库中删除。

储户信息登记

填写补充用户的各项信息

打印储户信息明细单

显示用户的各项信息

创建管理员

创建

判定管理员级别

办理定期存、取款

存款分定期存款和活期存款(利率不同),以对于一个账号,我们需要知道其所在银行类型,账号,密码,存款额,最近存款日期。对于客户取款,我们要需要验证身份信息(卡号,密码)要知道该卡上的存款额,及此次的取款额。先判断账户余额与取款金额,判断取款金额是否透支,若透支则取款失败。同时在取款的同时实现利息结算。

打印定期存、取款明细单

办理活期存、取款

存款分定期存款和活期存款(利率不同),以对于一个账号,我们需要知道其所在银行类型,账号,密码,存款额,最近存款日期。对于客户取款,我们要需要验证身份信息(卡号,密码)要知道该卡上的存款额,及此次的取款额。先判断账户余额与取款金额,判断取款金额是否透支,若透支则取款失败。同时在取款的同时实现利息结算。

打印活期存、取款明细单

实现账户间转账

需要知道转账的卡型,卡号,密码。需要判断对方的卡型(确定转账费率问题),卡号。如果转账金额大于该卡现有金额则转账失败。

打印转账单

查看管理员信息

数据备份和数据恢复

利率修改

办理挂失与取消挂失

储户遗失了银行卡可以进行挂失,挂失后的账户会冻结,无法进行存款,转账,取款的功能。储户在找到卡之后可以进行电话或柜台进行取消挂失,账户恢复原来的功能。

打印挂失明细单

利息计算

通过本金和利率计算出所得利息

查看账户信息

查看账户状态

查看账户是正常还是挂失状态

手续费计算

根据交易金额计算手续费

查看储户信息

信用卡业务

为给客户提供更为便捷的贷款支付工具,客户可将信用卡指定为个人信用贷款或个人抵质押贷款的贷款额度使用工具,在享受贷款额度的同时,还可以享受存款有息、消费享有免息期、本地取现不收手续费等优惠。

贷款业务

本账户融资便利贷款期限暂定为最短不得短于1个月(含1个月),最长不超过1年(含1年),贷款利率按中国人民银行公布的同档次贷款利率执行,利率不可下浮,如果利率上浮,上浮比例应按中国人民银行有关规定执行,理财产品融资便利贷款可以采用按月还息一次性还本或到期一次性偿还贷款本息的还款方式,贷款到期后,借款人可用现金或账户内资产变现后偿还贷款本息。理财产品融资便利贷款可以一次性提前还款或部分提前还款。

理财业务

期货投资者进行期货交易,需将其银行结算账户的资金划拨至其在期货公司开立的期货保证金账户。客户可以从银行、期货渠道发起转账、查询等各类交易。

(1)银期转账:为用户提供本人借记卡/单位银行结算账户与期货保证金账户之间资金的实时划转。

(2)余额查询:您可以在银行的各类渠道查询期货保证金账户的“可取”余额。

保险投保业务

代缴费、代扣费业务

捐款业务

 

四、       开发环境、硬件及软件的需求

开发工具:SQL Server 2016

编程语言:SQL

操作系统:Windows 7/8/10

硬件需求:CPU 1.6GHz及以上、内存2GB及以上、硬盘空间10GB以上

软件需求:SQL Server 2008及以上

五、       数据字典描述

(1) 顶层数据字典

 技术分享

 

(2) 1层数据字典

 技术分享

 

(3) 2层数据字典

i.              账户管理子系统分解图数据字典

 技术分享

 

ii.              管理员管理子系统分解图数据字典

 技术分享

 

iii.              利率修改子系统分解图数据字典

 技术分享

 

iv.              存款子系统分解图数据字典

 技术分享

 

v.              取款子系统分解图数据字典

 技术分享

 

vi.              转账子系统分解图数据字典(其中转账处理继续分解)

 技术分享

 

六、       状态图

(1) 存款

 技术分享

 

(2) 取款

 技术分享

 

 

(3) 转账

 技术分享

 

 

(4)    开户

 技术分享

 

      

(5) 销户

 技术分享

 

(6) 挂失

 技术分享

 

 

(7) 查询

 技术分享

 

七、       关系模式表示、E-R模型图、数据建模

(1) E-R图

           i.                        储户

 技术分享

 

         ii.                        账户

 技术分享

 

        iii.                        管理员

 技术分享

 

        iv.                        存款单

 技术分享

 

         v.                        取款单

 技术分享

 

        vi.                        转账单

 技术分享

 

      vii.                        挂失单

 技术分享

 

     viii.                        销户单

 技术分享

 

        ix.                        利率单

 技术分享

 

 

(2) 总体E-R图

 

 技术分享

 

 

(3) 关系模式表示

                                     i.              关系模式

管理员(工号,姓名,身份证号,住址,密码,级别,联系方式,照片,备注)

主码:工号 唯一

外码:工号

 

储户(户号,身份证号,姓名,联系方式,照片,备注)

主码:身份证号 唯一

外码:户号

 

账户(户号,密码,余额,开户日期,开户地,信用记录,挂失状态,备注)

主码:户号 唯一

外码:户号

 

存款单(存款单号,户号,存款金额,存款日期,存款类型,操作员工号)

主码:存款单号 唯一

外码:户号 操作员工号 存款类型

 

取款单(取款单号,户号,取款金额,利息,应得金额,余额,取款日期,取款方式,操作员工号)

主码:取款单号 唯一

外码:户号 操作员工号

 

销户单(销户单号,户号,销户前余额,销户日期,操作员工号)

主码:销户单号 唯一

外码:户号 操作员工号

 

转账单(转账单号,转出户号,转入户号,转账金额,转账日期,操作员工号)

主码:转账单号 唯一

外码:转出户号 转入户号 操作员工号

 

挂失单(户号,余额,挂失日期,操作员工号)

主码:户号

外码:操作员工号

 

利息单(编号,类型,期限,利率)

主码:编号

 

代理单(编号,名称,代理业务,备注)

主码:编号

外码:名称

 

缴扣投保记录(编号,名称,姓名,身份证号,时间,金额,备注)

主码:编号

外码:名称

 

信用卡(卡号,持卡人姓名,所属账户号,余额,信用额度,信用状态,备注)

主码:卡号

 

贷款表(贷款编号,账户号,姓名,身份证号,联系方式,贷款金额,贷款期限,还款利率,放款日期,到期日期,每月应还,备注)

主码:贷款编号

外码:账户号

 

还款记录(还款编号,贷款编号,还款日期,还款金额,是否违约)

主码:还款编号

外码:贷款编号

 

                                  ii.              数据库表

管理员表

 技术分享

 

储户表

 技术分享

 

账户表

 技术分享

 

存款单表

 技术分享

 

取款单表

 技术分享

 

销户单表

 技术分享

 

转账单表

 技术分享

 

挂失单表

 技术分享

 

利息单表

 技术分享

 

代理单表

技术分享

 

 

缴扣投保记录表

 技术分享

 

信用卡表

 技术分享

 

贷款表

技术分享

 

还款记录表

技术分享

 

 

八、       表的建立

use 银行

 

go

create table 管理员

(

    工号 int primary key not null,

    密码 Varchar(6) not null,

    级别 Int not null,

    姓名 Nvarchar(10) not null,

    身份证号 Varchar(18) not null,

    联系方式 Varchar(20),

    住址 Nvarchar(80),

    照片 Image,

    备注 Nvarchar(50)

)

 

go

create table 储户

(

    户号 int primary key not null,

    身份证号 Varchar(18) not null,

    姓名 Nvarchar(10) not null,

    联系方式 Varchar(20),

    照片 Image,

    备注 Nvarchar(50)

)

 

go

create table 账户

(

    户号 int primary key not null,

    密码 Varchar(6) not null,

    余额 Money not null,

    开户日期 Datetime not null,

    开户地 Nvarchar(20) not null,

    是否贵宾 Int not null,

    挂失状态 Int not null default 0,

    备注 Nvarchar(50)

)

 

go

create table 存款单

(

    存款单号 int Primary key not null,

    户号 Varchar(20) not null,

    存款金额 Money not null,

    存款日期 Datetime not null,

    存款类型 Nvarchar(4) not null,

    操作员工号 Varchar(10) not null

)

 

go

create table 取款单

(

    取款单号 int Primary key not null,

    户号 Varchar(20) not null,

    取款金额 Money not null,

    利息 Money not null,

    应得金额 Money not null,

    余额 Money not null,

    取款日期 Datetime not null,

    取款类型 Nvarchar(4) not null,

    操作员工号 Varchar(10) not null

)

 

go

create table 销户单

(

    销户单号 int Primary key not null,

    户号 Varchar(20) not null,

    销户前余额 Money not null,

    销户日期 Datetime not null,

    操作员工号 Varchar(10) not null

)

 

go

create table 转账单

(

    转账单号 int Primary key not null,

    转出户号 Varchar(20) not null,

    转入户号 Varchar(20) not null,

    转账金额 Money not null,

    转账日期 Datetime not null,

    手续费 Money not null,

    操作员工号 Varchar(10) not null

)

 

go

create table 挂失单

(

    户号 int Primary key not null,

    余额 Money not null,

    挂失日期 Datetime not null,

    操作员工号 Varchar(10) not null

)

 

go

create table 利率单

(

    编号 varchar(2) Primary key not null,

    类型 Nvarchar(4) not null,

    利率 Numeric not null,

    期限 int not null

)

 

go

create table 代理单

(

    编号 int identity(1,1) Primary key not null,

    名称 varchar(50) not null,

    代理业务 varchar(50) not null,

    备注 varchar(50),

)

 

use 银行

go

create table 缴扣投保记录

(

    编号 int identity Primary key not null,

    名称 varchar(50) not null,

    姓名 Nvarchar(10) not null,

    身份证号 Varchar(18) not null,

    时间 Datetime not null,

    金额 Money not null,

    备注 varchar(50)

)

 

use 银行

go

create table 信用卡

(

    卡号 int identity(1000,1) Primary key not null,

    持卡人姓名 Nvarchar(10) not null,

    所属账户号 int not null,

    余额 Money not null,

    信用额度 Money not null,

    信用状态 varchar(10) not null default ‘良好‘,

    备注 varchar(50)

)

 

go

create table 贷款表

(

    贷款编号 int identity(1000,1) Primary key not null,

    贷款人账户号 int not null,

    贷款人姓名 Nvarchar(10) not null,

    贷款人身份证号 Varchar(18) not null,

    贷款人联系方式 Varchar(20),

    贷款金额 Money not null,

    贷款期限 int not null,

    还款利率 Numeric not null,

    放款日期 Datetime not null,

    到期日期 Datetime not null,

    每月应还 Money not null,

    备注 varchar(50)

)

 

go

create table 还款记录

(

    编号 int identity(1,1) Primary key not null,

    贷款编号 int not null,

    还款日期 Datetime not null,

    还款金额 Money not null,

    是否违约 int not null

)

 

九、       存储过程、函数、触发器、视图等的实现

 

--存储过程、函数、触发器、视图等实现

use 银行

--开户

go

create procedure createaccount @number varchar(20),@key varchar(6),@balance money,@createdate datetime,@createpalace nvarchar(20),@remark nvarchar(50) as

insert into 账户(户号,密码,余额,开户日期,开户地,备注)

values(@number,@key,@balance,@createdate,@createpalace,@remark)

 

--销户

go

create procedure cancelaccount @id varchar(20),@key varchar(6) as

delete from 账户

where 户号=@id and 密码=@key

 

--挂失

go

create procedure reportloss @id varchar(20),@key varchar(6) as

update 账户

set 挂失状态=1

where 户号=@id and 密码=@key

 

--取消挂失

go

create procedure cancelreportloss @id varchar(20),@key varchar(6) as

update 账户

set 挂失状态=0

where 户号=@id and 密码=@key

 

--计算利息

go

create function calculateinterest(@id varchar(20),@number varchar(20))

returns money as

begin

declare @interest money,@starttime datetime,@type nvarchar(4),@deposit money,@durtime int,@save money

begin

    select @starttime=存款日期,@type=存款类型 from 存款单 where 存款单号=@number

    select @deposit=利率,@durtime=期限 from 利率单 where 类型=@type

    if(datediff(m,@starttime,GETDATE())>=@durtime)

        begin

            select @save=存款金额 from 存款单 where 存款单号=@number

            set @interest=power((1+@deposit),(@durtime/12))-@save

        end

    else

        begin

            return 0

        end

end

return @interest

end

 

--存钱

go

create procedure savemoney @odd varchar(20),@account varchar(20),@sum money,@date datetime,@type nvarchar(4),@operator varchar(10),@key varchar(6) as

insert into 存款单(存款单号,户号,存款金额,存款日期,存款类型,操作员工号)

values(@odd,@account,@sum,@date,@type,@operator)

update 账户

set 余额=余额+@sum

where 户号=@account and 密码=@key

 

--取钱

go

create procedure drawmoney @id varchar(20),@saveodd varchar(20),@odd varchar(20),@account varchar(20),@sum money,@date datetime,@type nvarchar(4),@operator varchar(10),@key varchar(6) as

declare @interest money,

        @total money,

        @balance money;

select @balance=余额 from 账户 where 户号=@id and 密码=@key

set @interest=dbo.calculateinterest(@id,@saveodd)

set @total=@interest+@sum

if(@balance>=@sum)

    begin

        set @balance=@balance-@sum

    end

else

    begin

        rollback

    end

insert into 取款单(取款单号,户号,取款金额,利息,应得金额,余额,取款日期,取款类型,操作员工号)

values(@odd,@account,@sum,@interest,@total,@balance,@date,@type,@operator)

update 账户

set 余额=@balance

where 户号=@id and 密码=@key

 

--转账

go

create procedure transfermoney @odd varchar(20),@outaccount varchar(20),@inaccount varchar(20),@sum money,@date datetime,@poundage money,@operator varchar(10),@key varchar(8) as

insert into 转账单(转账单号,转出户号,转入户号,转账金额,转账日期,手续费,操作员工号)

values(@odd,@outaccount,@inaccount,@sum,@date,@poundage,@operator)

declare @balance money

select 余额=@balance from 账户

where 户号=@outaccount and 密码=@key

 

if(@balance>=@sum)

    begin

        update 账户

        set 余额=余额-@sum

        where 户号=@outaccount and 密码=@key

        update 账户

        set 余额=余额+@sum

        where 户号=@inaccount

    end

else

    begin

        rollback

    end

 

--创建储户

go

create procedure createdepositor @id varchar(20),@idcard varchar(18),@name nvarchar(10),@contact varchar(20),@photo image,@remark nvarchar(50) as

insert into 储户(户号,身份证号,姓名,联系方式,照片,备注)

values(@id,@idcard,@name,@contact,@photo,@remark)

 

--创建管理员

go

create procedure createmanager @worknumber varchar(10),@key varchar(6),@level int,@name nvarchar(10),@idcard varchar(18),@contact varchar(20),@address nvarchar(80),@photo image,@remark nvarchar(50) as

insert into 管理员(工号,密码,级别,姓名,身份证号,联系方式,住址,照片,备注)

values(@worknumber,@key,@level,@name,@idcard,@contact,@address,@photo,@remark)

 

--修改管理员密码

go

create procedure alterkey @id int,@key varchar(6) as

update 管理员

set 密码=@key

where 工号=@id

 

--验证管理员密码

go

create function judgekey(@id int,@key varchar(6))

returns int as

begin

declare @mima int

begin

    select @mima=密码 from 管理员

    where 工号=@id

    if(@mima=@key)

        return 1

    else

        return 0

end

return 0

end

 

--判断管理员级别(进入高级管理功能的必须)

go

create function judgemanagerlevel(@id varchar(20))

returns int as

begin

declare @level int

begin

    select @level=级别 from 管理员

    where 工号=@id

end

return @level

end

 

--判断账户是否可用,即挂失状态为0(0为正常使用,1为处于挂失状态),可用返回‘1‘,不可用返回‘0‘

go

create function judgeusable(@id varchar(20))

returns int as

begin

declare @state int

begin

    select @state=挂失状态 from 账户

    where 户号=@id

end

if(@state=0)

    begin

        return 1

    end

else if(@state=1)

    begin

        return 0

    end

return 0

end

 

--判断账户是否存在,用于存款、取款、转账、开户、销户等的核验

go

create function judgeexist(@id varchar(20))

returns int as

begin

declare @idn varchar(30)

set @idn=(select 户号 from 账户 where 户号=@id)

if(@idn is not null)

    begin

        return 1

    end

return 0

end

 

--判断账户余额是否可供取款、转账、扣费等操作

go

create function judgebalance(@id varchar(20),@sum money)

returns int as

begin

declare @balance money

select @balance=余额 from 账户 where 户号=@id

if(@balance>=@sum)

begin

    return 1

end

return 0

end

 

--修改利率

go

create procedure changerate @number varchar(2),@rate numeric(18, 4) as

update 利率单

set 利率=@rate

where 编号=@number

 

--打印某用户存款明细单

go

create procedure printdepositdetail @id varchar(20) as

select * from 存款单

where 户号=@id

 

--打印某用户取款明细单

go

create procedure printdrawdetail @id varchar(20) as

select * from 取款单

where 户号=@id

 

----打印某用户转账明细单

go

create procedure printtransdetail @id varchar(20) as

select * from 转账单

where 转出户号=@id

 

--视图,查询客户相关信息

go

create view queryguestinfo

as

select 户号,身份证号,姓名,联系方式,照片,备注

from 储户

 

--视图,查询客户下属账户相关信息

go

create view queryaccountinfo

as

select 储户.户号,身份证号,姓名,联系方式,照片,开户日期,开户地,信用记录,挂失状态,储户.备注 备注1,账户.备注 备注2

from 账户,储户

where 账户.户号=储户.户号

 

--视图,查询管理员信息

go

create view manageraccount

as

select 工号,级别,姓名,身份证号,联系方式,住址,照片,备注

from 管理员

 

--修改联系方式

go

create procedure altercontact @id int,@contact varchar(20) as

update 管理员

set 联系方式=@contact

where 工号=@id

 

--修改住址

go

create procedure alteraddress @id int,@address varchar(MAX) as

update 管理员

set 住址=@address

where 工号=@id

 

--得到照片路径

go

create function getphoto(@id int)

returns varchar(MAX) as

begin

declare @photopath varchar(MAX)

    begin

        select @photopath=照片 from 管理员

        where 工号=@id

        return @photopath

    end

end

 

--修改上传照片

go

create procedure alterphoto @id int,@path varchar(MAX) as

update 管理员

set 照片=@path

where 工号=@id

 

--开户

go

create procedure createAccount @key varchar(6),@balance money,@createdate datetime,@createpalace nvarchar(20),@isguibin int,@isloss int,@remark nvarchar(50) as

insert into 账户(密码,余额,开户日期,开户地,是否贵宾,挂失状态,备注)

values(@key,@balance,@createdate,@createpalace,@isguibin,@isloss,@remark)

 

--建立储户信息

go

create procedure createDepositor @idcard varchar(18),@name nvarchar(10),@tel varchar(20),@photo varchar(MAX),@remark nvarchar(50) as

insert into 储户(身份证号,姓名,联系方式,照片,备注)

values(@idcard,@name,@tel,@photo,@remark)

 

--冻结账户

go

create procedure freezeAccount @id varchar(20) as

update 账户

set 挂失状态=3

where 户号=@id

 

--解除冻结

go

create procedure cancelfreezeAccount @id varchar(20) as

update 账户

set 挂失状态=0

where 户号=@id

 

--销户

go

create procedure cancelAccount @id int,@time datetime,@operate int as

declare @money money

select @money=余额 from 账户

where 户号=@id

insert into 销户单(户号,销户前余额,销户日期,操作员工号)

values(@id,@money,@time,@operate)

delete from 账户

where 户号=@id

 

--验证密码

go

create function judgeKey(@id int,@key varchar(6))

returns int as

begin

declare @mima int

begin

    select @mima=密码 from 账户

    where 户号=@id

    if(@mima=@key)

        return 1

    else

        return 0

end

return 0

end

 

--挂失

go

create procedure reportLoss @id int,@time datetime,@operate int as

declare @money money

select @money=余额 from 账户

where 户号=@id

insert into 挂失单(户号,余额,挂失日期,操作员工号)

values(@id,@money,@time,@operate)

update 账户

set 挂失状态=1

where 户号=@id

 

--取消挂失

go

create procedure cancelreportLoss @id int as

update 账户

set 挂失状态=0

where 户号=@id

delete from 挂失单

where 户号=@id

 

--活期存款

go

create procedure depositDemand @id int,@money money,@time datetime,@interest numeric(18, 4),@operate int as

insert into 存款单(户号,存款金额,存款日期,存款类型,利率,操作员工号)

values(@id,@money,@time,‘活期‘,@interest,@operate)

update 账户

set 余额=余额+@money

where 户号=@id

 

--定期存款

go

create procedure depositFixed @id int,@money money,@time datetime,@type nvarchar(20),@interest numeric(18, 4),@operate int as

insert into 存款单(户号,存款金额,存款日期,存款类型,利率,操作员工号)

values(@id,@money,@time,@type,@interest,@operate)

update 账户

set 余额=余额+@money

where 户号=@id

 

--计算利息

go

create function calculateInterest(@number int)

returns money as

begin

declare @interest money,@starttime datetime,@type nvarchar(4),@deposit money,@durtime int,@save money

begin

    select @starttime=存款日期,@type=存款类型 from 存款单 where 存款单号=@number

    select @deposit=利率,@durtime=期限 from 利率单 where 类型=@type

    if(datediff(m,@starttime,GETDATE())>=@durtime) -- 当前时间减去存款日期>=期限,可以取款

        begin

            select @save=存款金额 from 存款单 where 存款单号=@number

            set @interest=@save*power((1+@deposit),(@durtime/12))-@save

        end

    else

        begin

            return 0

        end

end

return @interest

end

 

--存款单取款

go

create procedure drawMoney @id int,@saveodd int,@sum money,@date datetime,@type nvarchar(20),@operator int as

declare @interest money,

        @total money,

        @balance money;

select @balance=余额 from 账户 where 户号=@id

set @interest=dbo.calculateInterest(@saveodd) --计算利息(存款单号)

set @total=@interest+@sum

if(@balance>=@sum)

    begin

        set @balance=@balance-@sum

    end

else

    begin

        rollback

    end

update 账户

set 余额=@balance

where 户号=@id

insert into 取款单(户号,取款金额,利息,应得金额,取款日期,取款类型,操作员工号)

values(@id,@sum,@interest,@total,@date,@type,@operator)

delete from 存款单

where 存款单号=@saveodd

 

--快捷取款

go

create procedure drawQuick @id int,@sum money,@date datetime,@type nvarchar(20),@operator int as

declare @balance money;

select @balance=余额 from 账户 where 户号=@id

if(@balance>=@sum)

    begin

        set @balance=@balance-@sum

    end

else

    begin

        return

    end

update 账户

set 余额=@balance

where 户号=@id

insert into 取款单(户号,取款金额,利息,应得金额,取款日期,取款类型,操作员工号)

values(@id,@sum,0,@sum,@date,@type,@operator)

 

--信用卡取款

go

create procedure drawCredit @id int,@sum money,@date datetime,@type nvarchar(20),@operator int as

declare @belongedID int,

        @balance money;

select @belongedID=所属账户号,@balance=余额 from 信用卡 where 卡号=@id

set @balance=@balance-@sum

update 信用卡

set 余额=@balance

where 卡号=@id

insert into 取款单(户号,取款金额,利息,应得金额,取款日期,取款类型,操作员工号)

values(@belongedID,@sum,0,@sum,@date,@type,@operator)

 

--开立信用卡

go

create procedure establishCredit @id int,@limitMoney money,@state varchar(10) as

declare @name nvarchar(10);

select @name=姓名 from 储户 where 户号=@id

insert into 信用卡(持卡人姓名,所属账户号,余额,信用额度,信用状态)

values(@name,@id,0,@limitMoney,@state)

 

select 姓名 from 储户 where 户号=1016000002

 

--调整信用卡信用额度

go

create procedure alterLimit @id int,@newLimit money as

update 信用卡

set 信用额度=@newLimit

where 卡号=@id

 

--贷款

go

create procedure loan @id int,@name nvarchar(10),@idcard varchar(18),@phone varchar(20),@money money,@time int,@rate numeric(18, 4),@loanDate datetime,@endDate datetime,@reMoneyMouth money,@remark varchar(50) as

insert into 贷款表(贷款人账户号,贷款人姓名,贷款人身份证号,贷款人联系方式,贷款金额,贷款期限,还款利率,放款日期,到期日期,每月应还,备注)

values(@id,@name,@idcard,@phone,@money,@time,@rate,@loanDate,@endDate,@reMoneyMouth,@remark)

 

--还贷款

go

create procedure returnLoan @id int,@time datetime,@money money,@breakRules int as

insert into 还款记录(贷款编号,还款日期,还款金额,是否违约)

values(@id,@time,@money,@breakRules)

 

--转账

go

create procedure transferMoney @id1 int,@id2 int,@money money,@time datetime,@charge money,@operator int as

declare @fund money

select @fund=余额 from 账户

if(@fund>(@money+@charge))

    begin

        insert into 转账单(转出户号,转入户号,转账金额,转账日期,手续费,操作员工号)

        values(@id1,@id2,@money,@time,@charge,@operator)

        update 账户

        set 余额=余额-@money-@charge

        where 户号=@id1

        update 账户

        set 余额=余额+@money

        where 户号=@id2

    end

else

    begin

        rollback

    end

 

--投保社会保险

go

create procedure socialAssurance @accountID int,@name nvarchar(10),@idcard varchar(18),@time datetime,@money money,@remark varchar(50) as

declare @fund money

select @fund=余额 from 账户

if(@fund>@money)

    begin

        update 账户

        set 余额=余额-@money

        where 户号=@accountID

        insert into 缴扣投保记录(名称,姓名,身份证号,时间,金额,备注)

        values(‘社会保险‘,@name,@idcard,@time,@money,@remark)

    end

else

    begin

        rollback

    end

 

--投保商业保险

go

create procedure bussinessAssurance @accountID int,@assuranceName varchar(50),@name nvarchar(10),@idcard varchar(18),@time datetime,@money money,@remark varchar(50) as

declare @fund money

select @fund=余额 from 账户

if(@fund>@money)

    begin

        update 账户

        set 余额=余额-@money

        where 户号=@accountID

        insert into 缴扣投保记录(名称,姓名,身份证号,时间,金额,备注)

        values(@assuranceName,@name,@idcard,@time,@money,@remark)

    end

else

    begin

        rollback

    end

 

 

--缴费

go

create procedure expenseCollection @accountID int,@collectionName varchar(50),@idcard varchar(18),@time datetime,@money money,@remark varchar(50) as

declare @fund money

select @fund=余额 from 账户

if(@fund>@money)

    begin

        update 账户

        set 余额=余额-@money

        where 户号=@accountID

        insert into 缴扣投保记录(名称,身份证号,时间,金额,备注)

        values(@collectionName,@idcard,@time,@money,@remark)

    end

else

    begin

        rollback

    end

 

--修改密码

go

create procedure alterAccountPwd @accountID int,@pwd varchar(6) as

update 账户

set 密码=@pwd

where 户号=@accountID

十、             数据库的安全性和完整性的设计

(1)         安全性设计

数据库设计四个角色R1、R2、R3和R4,分别拥有的权限不同。

R1角色拥有基本的开销挂失户、存取款、转账等权限;

R2角色在R1的基础上还拥有对利率表和手续费的修改权限;

R3角色在R1的基础上还拥有进行现金结算的权限;

R4角色拥有R2和R3的权限集合。

另外,sa拥有对数据库的所有权限。

 

(2) 完整性设计

u 实体完整性

表的主码设定保证完整性约束。账户号、储户号、存款单号、取款单号、转账单号等是唯一标识的属性。

u 参照完整性

检查数据库中数据在逻辑上具有一致性、正确性、有效性和相容性。

u 用户定义完整性

检查建表字段的值域、字段的类型和字段的有效规则(如小数位数)等约束,由确定关系结构时所定义的字段的属性决定。账户号、储户号、存款单号、取款单号、转账单号等属性具有IDENTIFY。如,利率的设定取值范围在0~100%之间等。

备注:表中图片类型数据的存储以绝对路径形式存储。

十一、            总结、致谢

这次数据库课程设计,本打算做一个餐饮点菜系统,后来在进行数据库设计时发现功能太简单,因为实际需求的功能本就不复杂。根据老师要求的系统功能要丰富,有一定的复杂性,所以后来改了题目,这个题目是我曾经在软件工程课程中用到的题目,但是之前的建模极其简单,仅仅是转账、挂失、存款、查询等非常基本的功能,远远不如这个复杂,通过查阅相关资料,并且和同学交流,最终设计出一个功能比较完善,功能相对比较丰富的银行储蓄管理系统。由于时间原因,现在这个银行储蓄管理系统好多地方设计得还不够完善,不过之后会继续改进。

特别感谢在设计过程中衣老师给予的指导和帮助,感谢开发过程中各位不相识的博友、知友的帮助。

 

银行储蓄管理系统——数据库设计