(数据库课程设计)
设计说明书
起止日期: 2011 年 11 月 1 日 至 2011 年 11 月 22 日
系学班
别
生
姓
名 级
信息工程系
夏冬 10级专接本
2011年 11 月 22 日
目 录
一、目的与要求 ............................................................ 2 二、系统分析 .............................................................. 2
2.开发及运行环境 ..................................................... 2 三、数据库设计 ............................................................ 2
1.概念数据库设计 ..................................................... 2 2.逻辑数据库设计 ..................................................... 5 3.物理数据库设计 ..................................................... 7 四、课程设计中遇到的问题、解决方法、收获和总结 ........................... 15 五、参考文献 ............................................................. 16
1
银行储蓄管理
一、目的与要求
通过数据库课程设计,进一步掌握数据库系统的理论和方法。培养和锻炼开发管理信息系统的能力,为今后信息系统开发打下良好的基础。
本课程环节主要针对《关系数据库基础与应用》这门课程进行设计,数据库是一门应用性很强的专业课,在学习时必须注意理论与实践相结合。本次课程环节旨在培养学生在本课程范围内,初步掌握解决实际应用问题时所应具备的查阅资料、综合运用所学知识的能力,为毕业设计及今后从事专业工作打下基础。
本课程环节要求学生了解企业管理信息系统后台数据库的设计、配置过程,掌握管理信息系统的开发方法。主要包括:需求分析、数据分析、系统逻辑模型设计方法;功能设计、物理模型设计方法;系统的实现等方法。完成一个小型系统后台数据库的设计与配置。 二、系统分析 1. 需求分析
某储蓄所接受定期和活期储蓄业务,储户采用实名存款,需登记真实姓名,并出具身份证号码。储户可以办理多个存折。系统除了管理存取款业务外,还应管理储蓄所每天的业务交接与对帐、结账业务。储蓄所每天上班前可能接受运钞车送来的现金,下班时则将所内现金送回金库,零星款项也可能留在所内。每天下班前都要盘点每个营业员准备金、收取储户的存款、支付储户的取款以及缴回的余款,以验证帐目的正确。这些比较记录除了存储数据库外,都将打印凭证,交
由当事人签字后存档。储户存款依法支付扣税后利息,定期存款依照到期日计息,活期存款在每年的6 月30 日计息(以存款天数计算)。此外,某个单位可能为本单位职工在该银行办理了工资卡,应予以考虑本项业务。客户存折或卡丢失后,可以申请挂失,挂失后该帐户即被冻结,直到储户补办新折或卡后。
根据上述描述,设计并开发一个储蓄管理系统。
1)创建数据库,数据表(帐户表,业务员表,帐户管理表,活期存取款表,转账表,定期取款表,定期存款表) 2)创建视图(所有VIP客户(帐户大于800),储户定期存款记录,储户定期取款记录) 3)创建函数(区分VIP客户和普通客户的函数,根据帐号查询用户信息的函数) 4)创建存储过程(帐户管理表的存储过程,转帐的存储过程) 2.开发及运行环境
1. Windows XP 操作系统, Professional 版; 2. Microsoft SQL Server 2000开发版 三、数据库设计 1.概念数据库设计
2
开户(图3-1)
姓名 储户 身份证 开户 开户金额 卡号存折或卡 地址 开户时间 储户 账户金额
图3-1
销户(图3-2)
姓名 储户 身份证 销户 账户金额 存折或卡 卡号地址 销户时间 储户
图3-2
挂失(图3-3)
姓名 储户 身份证 挂失 账户金额 存折或卡 卡号地址 挂失时间 储户
图3-3
3
存款(图3-4)
存款金额 姓名 储户 身份证 存款 存款前金额 存款用户 存款单 存款金额 地址 存款时间 业务员 存款后金额 利率 存款类型 图3-4
取款(图3-5)
取款金额 姓名 储户 身份证 取款 取款前金额 取款用户 取款单 取款金额 取款后金额 地址 取款时间 业务员 图3-5
转账(图3-6)
转款金额 姓名 储户 身份证 转款 转账前金额 转账用户 转账单 转账金转去用户 转账后金额 额 地址 转款时间 业务员
图3-6
4
2.逻辑数据库设计 1)关系模型
帐户表(帐号,开户人姓名,登录密码,身份证号,性别,帐户余额,开户日期,
开户地址)
业务员表(业务员ID,业务员姓名,登录密码,性别)
帐户管理表(流水单号,业务员ID,帐号,操作时间,开户,消户,挂失) 活期存取款表(序号,帐号,业务员ID,操作金额,操作类型,操作日期,利息
,帐户余额)
定期存款表(存储利率,序号,帐号,业务员ID,存款人姓名,存款金额,存款日
期,存储年份)
定期取款表(序号,帐号,业务员ID,取款人姓名,取款金额,取款日期) 转账表(序号,帐号,业务员ID,转出金额,转帐时间,转出帐号) 2)表结构 (1)帐户表(Deposit)
字段名称 DNo DName DPassword DID DSex DBalance DDate DAddress 数据类型 char char char char char float datetime char 长度 20 10 8 20 2 8 8 30 约束 PK 非空 非空 非空 非空 非空 非空 非空 约束 PK 非空 非空 非空 约束 PK FK FK 字段描述 帐号 开户人姓名 登录密码 身份证号 性别 帐户余额 开户日期 开户地址 字段描述 业务员ID 业务员姓名 登录密码 性别 字段描述 流水单号 业务员ID 帐号 操作时间 开户 消户 (2)业务员表(Operation) 字段名称 数据类型 长度 ONo char 10 OName char 10 CPassword long 6 CSex char 2 (3)帐户管理表(DepositManage) 字段名称 数据类型 长度 DMNo char 10 ONo char 10 DNo char 20 Dtimdatet8 e ime Dopechar 2 n Ddelchar 2
5
ete Dloss char 2 挂失
(4)活期存取款表(CurrendAccount) 字段名数据类型 长度 称 NID int 4 CNo char 20 ONo char 10 CMoney Float 8 CStyle char 10 CDate Datetime 8 CInterFloat 8 est CBalanFloat 8 ce (5)定期存款表(FixedAccountC) 字段名称 数据类型 长度 nID Int 4 DNo char 20 ONo char 10 CName Varchar 10 CMoney Float 8 CDate Datetime 8 CYear Int 4 CRate Float 8 (6)定期取款表(FixedAccountQ) 字段名称 数据类型 长度 nID Int 4 DNo char 20 ONo char 10 DName char 10 CMoney Float 8 CDate Datetime 8 (7)转账表(transfer) 属性 PK FK FK 非空 非空 非空 非空 非空 字段描述 序号 帐号 业务员ID 操作金额 操作类型 操作日期 利息 帐户余额 属性 PK FK FK 非空 非空 非空 非空 非空 属性 PK FK FK 非空 非空 非空 约束 PK FK FK 非空 非空 非空 字段描述 序号 帐号 业务员ID 存款人姓名 存款金额 存款日期 存储年份 存储利率 字段描述 序号 帐号 业务员ID 取款人姓名 取款金额 取款日期 含义 序号 帐号 业务员ID 转出金额 转帐时间 转出帐号 数据类型 Int char char TransferMoney float TransferTime datetime DNo1 char
字段名称 GlideID DNo ONo 长度 4 20 10 8 8 20 6
3.物理数据库设计
--第一步:数据库创建
create DATABASE BankManager on (name=BankManager_data,
Filename ='C:\\BankManager_data.MDF', size=2MB,
FileGrowth=15%) Log on (
name=TecherManager_log,
Filename='C:\\BankManager_log.LDF', Size=2MB,
FileGrowth=15%)
--第二步:数据表创建 --(1)帐户表(Deposit) use BankManager go
create table Deposit (
DNo char(20) primary key, DName char(10) not null, DPassword char(8) not null, DID char(20) not null, DSex char(2) not null,
DBalance float(8) not null, DDate datetime not null, DAddress char(30) not null ) go
--(2)业务员表(Operation) use BankManager go
create table Operation (
ONo char(10) primary key, OName char(10) not null, CPassword char(6) not null, CSex char(2) not null ) go
--(3)帐户管理表(DepositManage) use BankManager go
7
create table DepositManage (
DMNo char(10) primary key, ONo char(10) not null, DNo char(20) not null, Dtime datetime not null, Dopen char(2), Ddelete char(2), Dloss char(2) ) go
--(4)活期存取款表(CurrendAccount) use BankManager go
create table CurrendAccount (
NID int primary key, CNo char(20) not null, ONo char(10) not null, CMoney Float(8) not null, CStyle char(10) not null, CDate Datetime not null, CInterest Float(8) not null, CBalance Float(8) not null, ) go
--(5)定期存款表(FixedAccountC) use BankManager go
create table FixedAccountC (
nID Int primary key, DNo char(20) not null, ONo char(20) not null, CName char(10) not null, CMoney Float(8) not null, CDate Datetime not null, CYear Int not null,
CRate Float(8) not null, ) go
--(6)定期取款表(FixedAccountQ) use BankManager go
8
create table FixedAccountQ (
nID Int primary key, DNo char(20) not null, ONo char(10) not null, DName char(10) not null, CMoney Float(8) not null, CDate Datetime not null, ) go
--(7)转账表(transfer) use BankManager go
create table transfer (
GlideID Int primary key, DNo char(20) not null, ONo char(10) not null,
TransferMoney float(8) not null, TransferTime datetime not null, DNo1 char(20) not null, ) go
--第三步:添加数据记录 --(1)帐户表(Deposit) use BankManager go
insert into Deposit
values('6228485879456245876','夏苏州吴中');
insert into Deposit
values('6228485879445748458','小苏州平江');
insert into Deposit
values(********************','小苏州金鸡');
insert into Deposit
values('6228485576415455876','小苏州相城');
insert into Deposit
values('6228485879456587545','王苏州吴中');
insert into Deposit
values('6228485879498746566','张
冬','587642','320482198913143618','红','512545','320482198913143628','明','584122','320482198913143638','王','584552','320482198913143648','一','587442','320482198913143658','三','587552','320482198913143668','9
男
男
男
女
女
女
','500','2001-3-4','','700','2001-3-4','','800','2001-3-4','','800','2001-3-4','','200','2001-3-4','
','500','2001-3-4','苏州吴中');
insert into Deposit
values('6228485879456245851','李四','587442','320482198913143678','','600','2001-3-4','苏州平江');
insert into Deposit
values('6228485879456245871','王五','587412','320482198913143688','','600','2001-3-4','苏州相城');
insert into Deposit
values('6228485879456245874','小夏','581142','320482198913143698','','500','2001-3-4','苏州金鸡');
insert into Deposit
values('6228485879456245877','胡户','587611','320482198913143610','','500','2001-3-4','苏州吴中');
go
--(2)业务员表(Operation) use BankManager go
insert into Operation
values('083411131','胡户','587611','男'); insert into Operation
values('083411132','王二','587610','男'); insert into Operation
values('083411133','张三','587610','女'); insert into Operation
values('083411134','李司','587620','男'); insert into Operation
values('083411135','王五','587112','女'); insert into Operation
values('083411136','王洁','587551','女'); insert into Operation
values('083411137','丁叶','587445','男'); insert into Operation
values('083411138','花蓉','587511','女'); insert into Operation
values('083411139','财进','587711','男'); insert into Operation
values('083411140','李鬼','585511','女'); go
--3)帐户管理表(DepositManage) use BankManager go
insert into DepositManage
values('0000000001','083411131','6228485879456245876','2001-3-4','k','',''); insert into DepositManage
10
男
女
女
男
values('0000000002','083411132','6228485879445748458','2001-3-4','k','',''); insert into DepositManage
values('0000000003','083411133',********************','2001-3-4','k','','');insert into DepositManage
values('0000000004','083411134','6228485576415455876','2001-3-4','k','',''); insert into DepositManage
values('0000000005','083411135','6228485879456587545','2001-3-4','k','',''); insert into DepositManage
values('0000000006','083411136','6228485879498746566','2001-3-4','k','',''); insert into DepositManage
values('0000000007','083411137','6228485879456245851','2001-3-4','k','',''); insert into DepositManage
values('0000000008','083411138','6228485879456245871','2001-3-4','k','',''); insert into DepositManage
values('0000000009','083411139','6228485879456245874','2001-3-4','k','',''); insert into DepositManage
values('0000000010','083411140','6228485879456245877','2001-3-4','k','',''); go
--(4)活期存取款表(CurrendAccount) use BankManager go
insert into CurrendAccount
values('0000000001','6228485879456245876','083411131','200','insert into CurrendAccount
values('0000000002','6228485879445748458','083411132','200','insert into CurrendAccount
values('0000000003',********************','083411133','200','insert into CurrendAccount
values('0000000004','6228485576415455876','083411134','200','insert into CurrendAccount
values('0000000005','6228485879456587545','083411135','200','insert into CurrendAccount
values('0000000006','6228485879498746566','083411136','200','insert into CurrendAccount
values('0000000007','6228485879456245851','083411137','200','insert into CurrendAccount
values('0000000008','6228485879456245871','083411138','200','
11
存
存
取
存
取
存
取
存
','2011-3-4','0.001','700');
','2011-3-4','0.001','900');
','2011-3-4','0.001','600');
','2011-3-4','0.001','1000');
','2011-3-4','0.001','0');
','2011-3-4','0.001','700');
','2011-3-4','0.001','400');
','2011-3-4','0.001','800');
insert into CurrendAccount
values('0000000009','6228485879456245874','083411139','200','','2011-3-4','0.001','300');
insert into CurrendAccount
values('0000000010','6228485879456245877','083411140','200','','2011-3-4','0.001','700');
go
--(5)定期存款表(FixedAccountC) use BankManager go
insert into FixedAccountC
values('0000000001','6228485879456245876','083411131','','200','2011-3-4','4','0.027');
insert into FixedAccountC
values('0000000002','6228485879445748458','083411132','','200','2011-3-4','4','0.027');
insert into FixedAccountC
values('0000000003',********************','083411133','','200','2011-3-4','4','0.027');
insert into FixedAccountC
values('0000000004','6228485576415455876','083411134','','200','2011-3-4','4','0.027');
insert into FixedAccountC
values('0000000005','6228485879456587545','083411135','','200','2011-3-4','2','0.027');
insert into FixedAccountC
values('0000000006','6228485879498746566','083411136','','200','2011-3-4','1','0.027');
insert into FixedAccountC
values('0000000007','6228485879456245851','083411137','','200','2011-3-4','1','0.027');
insert into FixedAccountC
values('0000000008','6228485879456245871','083411138','','200','2011-3-4','5','0.027');
insert into FixedAccountC
values('0000000009','6228485879456245874','083411139','','200','2011-3-4','3','0.027');
insert into FixedAccountC
values('0000000010','6228485879456245877','083411140','','200','2011-3-4','3','0.027');
go
--(6)定期取款表(FixedAccountQ) use BankManager
12
取
存
夏冬
小红
小明
小王
王一
张三
李四
王五
小夏
胡户
go
insert into FixedAccountQ
values('0000000001','6228485879456245876','083411131','夏冬','100','2011-3-4'); insert into FixedAccountQ
values('0000000002','6228485879445748458','083411132','小红','100','2011-3-4'); insert into FixedAccountQ
values('0000000003',********************','083411133','小明','100','2011-3-4'); insert into FixedAccountQ
values('0000000004','6228485576415455876','083411134','小王','100','2011-3-4'); insert into FixedAccountQ
values('0000000005','6228485879456587545','083411135','王一','100','2011-3-4'); insert into FixedAccountQ
values('0000000006','6228485879498746566','083411136','张三','100','2011-3-4'); insert into FixedAccountQ
values('0000000007','6228485879456245851','083411137','李四','100','2011-3-4'); insert into FixedAccountQ
values('0000000008','6228485879456245871','083411138','王五','100','2011-3-4'); insert into FixedAccountQ
values('0000000009','6228485879456245874','083411139','小夏','100','2011-3-4'); insert into FixedAccountQ
values('0000000010','6228485879456245877','083411140','胡户','100','2011-3-4'); go
-- (7)转账表(transfer) use BankManager go
insert into transfer
values('0000000001','6228485879456245876','083411131','100','2011-3-4','6228485879445748458');
insert into transfer
values('0000000002','6228485879445748458','083411132','100','2011-3-4','6228445821456245876');
insert into transfer
values('0000000003',********************','083411133','100','2011-3-4','6228485576415455876');
insert into transfer
values('0000000004','6228485576415455876','083411134','100','2011-3-4','6228485879456587545');
insert into transfer
values('0000000005','6228485879456587545','083411135','100','2011-3-4','6228485879498746566');
insert into transfer
values('0000000006','6228485879498746566','083411136','100','2011-3-4','6228485879456245851');
insert into transfer
13
values('0000000007','6228485879456245851','083411137','100','2011-3-4','6228485879456245871');
insert into transfer
values('0000000008','6228485879456245871','083411138','100','2011-3-4','6228485879456245874');
insert into transfer
values('0000000009','6228485879456245874','083411139','100','2011-3-4','6228485879456245877');
insert into transfer
values('0000000010','6228485879456245877','083411140','100','2011-3-4','6228485879456245876');
go
--第四步:创建视图
--(1)创建所有VIP客户(帐户大于800) use BankManager go
create view Deposit_view(DNo,DName,DBalance) as
select DNo,DName,DBalance from dbo.Deposit where DBalance>700.00 or DBalance=700.00 --(2)创建储户定期存款记录 use BankManager go
create view FixedAccountList_view as
select nID,DNo,CName,CMoney,CYear,CRate from dbo.FixedAccountC go
--(3)创建储户定期取款记录 use BankManager go
create view FixedAccountList2_view as
select nID,DNo,DName,CMoney from dbo.FixedAccountQ go
--第五步:函数、存储过程、触发器和游标的创建 --(1)区分VIP客户和普通客户的函数 use BankManager go
create function Deposit_fun(@DBalance1 float) returns varchar(20) as begin
declare @returnstr varchar(20) if @DBalance1>=700.00 set @returnstr='VIP客户'
14
else
set @DBalance1='普通客户' return @returnstr end --执行
select DNo,DName,DID,DBalance,dbo.Deposit_fun(DBalance) as 客户等级 from dbo.Deposit
--(2)根据帐号查询用户信息的函数
create function Deposit_f(@inputcno char(20)) returns table as
return (select DNo,DName,DID,DBalance from dbo.Deposit where DNo=@inputcno) --执行
select * from Deposit_f('6228485879456245876') --创建帐户管理表的存储过程 use BankManager go
create procedure dbo.DepositManage_pro @Tno char(10) as
select * from dbo.DepositManage where DMNo=@Tno go
--创建转帐的存储过程 use BankManager go
create procedure dbo.transfer_pro @Tno char(10) as
select * from dbo.transfer where GlideID=@Tno go
四、课程设计中遇到的问题、解决方法、收获和总结 1) 问题
这次的课程设计,抽签决定了课程设计的题目,我做的是银行储蓄管理系统,刚开始拿到项目时觉得这个比较简单,但实际做需求分析时还是有点困难,不知道从什么地方下手。画E-R图没有考虑到全局。做存储过程、函数时,不知道其格式和不知道用哪种方式做更好。 2) 解决方法
通过和同学的交流,对课程设计进行了仔细地需球分析,画出了E-R图,对于SQL语言设计数据库时,上网查询了大量的资料和翻阅以前的书籍和笔记,做出了符合需求的设计。 3) 收获和总结
15
课程设计是告一段落了,不过这次课程设计做下来,我发现,只要坚持,其实一样也可以完成的。在做课程设计的时候,又学了的新知识,并且复习了很多以前的功课。最开始时,面对这样课题,很长时间没有做数据库,我当时就懵了,所以临时抱佛脚,在网上查阅了大量的资料。说实话,以前上数据库课,虽然也接触了很多数据库的知识,但仅仅也只是冰山一角。不过后来慢慢的逐渐了解多了,做课程设计的过程就是对书本知识巩固、贯通和实践运用的过程。从这次课程设计中,我体会到了实际的工作与书本上的知识是有一定距离的,并且还需要进一步的再学习。要想做好一个数据库,没有一定的底子是完全不够的。如果以后还有这样的机会的话,我想我一定会把它做的更好,更精。数据库对于软件开发来说是重点,希望今后再接再厉。 五、参考文献
[1]刘桂林、谢尧主编.SQL Server 数据库应用技术.北京:中国计划出版社,2007 [2]萨师煊、王删. 编著数据库系统概论[M].北京:高等教育出版社,1999 [3]何主洁、黄婷儿译著.数据库设计教程[M].湖南: 机械工业出版社,2000 [4]孙越.VISUAL BASIC 数据库开发自学教程[M].北京:人民邮电出版社,2004
[5]苏中滨,杨涛,陈联成.数据库系统概念与应用[M].北京:中国水利水电出版社,2003.
16
因篇幅问题不能全部显示,请点此查看更多更全内容