ATM机数据库设计Word文档下载推荐.docx
《ATM机数据库设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《ATM机数据库设计Word文档下载推荐.docx(15页珍藏版)》请在冰豆网上搜索。
要求层次清楚、整洁规范、不得相互抄袭,凡正文内容有整段完全相同者一律以抄袭论处。
设计报告正文字数不少于0.2万字(不包括附录)
时间安排:
消化资料、系统调查?
1天
系统分析、总体设计,实施计划、撰写报告?
3天
演示、验收 1天
指导教师签字:
2011年6月25日
系主任签字:
2011年6月26日
1.问题描述4
1.1背景4
1.2数据需求4
2.方案图表设计4
2.1E-R图4
2.2数据字典7
2.4关系图:
8
3.数据库源代码9
3.1数据库建立9
3.2数据初始化11
4.结果数据处理12
4.1简单查询12
4.2连接查询13
4.3嵌套查询13
4.3统计银行的资金流通余额和盈利结算14
4.4创建触发器14
4.5创建存储过程15
5.结束语17
1.问题描述
1.1背景
通过数据库课程设计,进一步掌握数据库系统的理论和方法。
培养和锻炼开发管理信息系统的能力。
为今后信息系统开发打下良好的基础。
本课程环节主要针对《关系数据库基础与应用》这么课程进行设计,数据库是一门应用性很强的专业课,在学习时必须注意理论与实践相结合。
本次课程环节旨在培养学生在本课程范围内,初步掌握解决实际应用问题时所应具备的查阅资料、综合运用所学知识的能力,为毕业设计及今后从事专业工作打下基础。
本课程环节要求学生了解企业管理信息系统后台数据库的设计、配置过程,掌握管理信息系统的开发方法。
主要包括:
需求分析、数据分析、系统逻辑模型设计方法;
功能设计、物理模型设计方法;
系统的实现等方法。
完成一个小型系统后台数据库的设计与配置。
1.2数据需求
随着社会的日益发展,银行在人们的日常生活扮演者重要的角色。
ATM机给人们的日常生活带来了方便,它出现在各个街道角落里。
ATM数据库系统使自动取款机机高速快捷的工作,不易发生数据丢失,统计错误,使ATM机更加安全方便。
1.3开发及运行环境
操作系统:
MicrosoftWindowsXP
软件平台:
MicrosoftSQLServer2000
硬件环境:
服务器端P4/256MB/80GB以上,客户端PC586/128MB/40MB以上
2.方案图表设计
2.1E-R图
2.1.1用户信息实体E-R图:
图2-1用户信息实体E-R图
2.1.2银行卡信息实体E-R图:
图2-2银行卡信息实体E-R图
2.1.3交易信息实体E-R图:
图2-4交易信息实体E-R图
2.1.6总的信息实体E-R图:
图2-7总的信息实体E-R图
2.2数据字典
表2-1 用户信息表userInfo:
字段名称
说明
customerID
顾客编号
自动编号(标识列),从1开始,主键
customerName
开户名
必填
PID
身份证号
必填,只能是18位或15位,身份证号唯一约束
telephone
联系电话
必填,格式为xxxx-xxxxxxxx或手机号13位
address
居住地址
可选输入
表2-2 银行卡信息表cardInfo:
cardID
卡号
必填,主健,银行的卡号规则和电话号码一样,一般前8位代表特殊含义,如某总行某支行等。
假定该行要求其营业厅的卡号格式为:
10103576xxxxxxx开始,每4位号码后有空格,卡号一般是随机产生.
curType
货币种类
必填,默认为RMB
savingType
存款类型
活期/定活两便/定期
openDate
开户日期
必填,默认为系统当前日期
openMoney
开户金额
必填,不低于1元
balance
余额
必填,不低于1元,否则将销户
pass
密码
必填,6位数字,开户时默认为6个“8”
IsReportLoss
是否挂失
必填,是/否值,默认为”否”
外键,必填,表示该卡对应的顾客编号,一位顾客允许办理多张卡号
表2-3 交易信息表transInfo:
transDate
交易日期
必填,外健,可重复索引
transType
交易类型
必填,只能是’存入/支取’
transMoney
交易金额
必填,大于0
remark
备注
可选输入,其他说明
2.3关系图:
数据库存表关系图
3.数据库源代码
3.1数据库建立
3.1.1创建数据库
usemaster
go
ifexists(select*fromsysdatabaseswherename='
ATM'
)
dropdatabaseATM
go
--创建数据库
createdatabaseATM
onprimary
(
name=ATM_data,
filename='
d:
\bank\ATM_data.mdf'
size=10mb,
filegrowth=10%,
maxsize=100mb
logon
(
name=ATM_log,
\bank\ATM_data.ldf'
3.1.2创建用户信息表
createtableuserinfo
customerIDintidentity(1,1)primarykey,
customerNamevarchar(20)notnull,
PIDchar(18)char(18)notnulluniquecheck(PIDlike'
[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
or
PIDlike'
[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
),
telephonechar(15)check(telephonelike'
[0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
or
telephonelike'
[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
)notnull,
addressvarchar(50)
3.1.3创建银行卡信息表
createtablecardinfo
cardIDchar(30)check(cardIDlike'
10103576[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
)primarykey,
curTypechar(5)default('
RMB'
savingTypechar(15)check(savingTypelike'
活期'
orsavingTypelike'
定期'
订活两便'
),
openDatedatetimedefault(getdate())notnull,
openMoneymoneycheck(openMoney>
=1)notnull,
balancemoneycheck(balance>
passchar(6)check(passlike'
[0-9][0-9][0-9][0-9][0-9][0-9]'
)default'
888888'
notnull,
IsReportLosschar(8)check(IsReportLosslike'
是'
orIsReportLosslike'
否'
customerIDintuniquenotnull
3.1.4交换信息表
createtabletransinfo
transDatedatetimedefaultgetdate()notnull,
cardIDchar(30)uniquenotnull,
transTypechar(10)check(transTypelike'
存入'
ortransTypelike'
支取'
),
transMoneymoneycheck(transMoney>
0),
remarktext
3.1.5创建联系
altertabletransinfo
addforeignkey(cardID)referencescardinfo(cardID)
altertablecardinfo
addforeignkey(customerID)referencesuserinfo(customerID)
3.2数据初始化
3.2.1向表userinfo中输入数据
INSERTINTOuserInfo(customerName,PID,telephone,address)
3.2.2向cardInfo表中插入数据
INSERTINTOcardInfo(cardID,savingType,openMoney,balance,customerID)
VALUES('
1010357655895986'
'
1000,1000,1)
1010357655244986'
1000,1000,3)
1010357656985987'
1000,1000,2)
1010357621565789'
1000,1000,5)
1010357655895966'
1000,1000,6)
1010357615691856'
1800,1800,4)
1010357655895386'
1000,1000,7)
3.2.3向transInfo表中插入数据
INSERTINTOtransInfo(transType,cardID,transMoney)
900)
600)
5000)
300)
100)
4.结果数据处理
4.1.1查询本周开户的卡号,显示该卡相关信息
4.1.2查询本月交易金额最高的卡号
4.1.3在黄安的卡上取款900元,在张珂的卡上存入5000元
4.1.3统计银行的资金流通余额和盈利结算
declare@inmoney,@outmoney
select@in=sum(transMoney)fromtransInfowheretransType='
select@out=sum(transMoney)fromtransInfowheretransType='
print'
银行流通余额总计为:
'
+convert(varchar(20),@in-@out)+'
盈利:
+convert(varchar(20),(@out*0.008)-(@in*0.003))+'
4.2创建触发器
createtriggerinsert_transType
ontransinfoforinsert--指定了触发对象与触发事件
as
begin
declare@transTypechar(10),@cardIDchar(30)
select@transType=transType,@cardID=cardIDfrominserted
if(@transType='
)
begin
updatetransTypesetbalance=blance-transMoneywheretransMoney<
=balance
end
elseupdatetransTypesetbalance=balance+transMoney
end
4.3创建存储过程
--取款
createproctakeMoney
@cardIDvarchar(20),
@passvarchar(6),
@qkMoney
)
as
begin
print'
正在交易,请稍候……'
'
if((selectpassfromcardInfowherecardID=@cardID)!
=@pass)
密码不正确。
elseif(@qk>
balance)
交易失败,余额不足。
elseif(convert(int,@qk)%100!
=0)
本柜员机只提供面值100元的纸币,取款金额为100的整数倍。
elseif((selectbalancefromcardInfowherecardID=@cardID)-@qk<
1)
取款后余额不能低于1元'
else
updatecardInfosetbalance=balance-@qkwherecardID=@cardID--更新剩余余额
inserttransInfo(transDate,cardID,transType,transMoney,remark)values(default,@cardID,'
@qk,'
)--记录交易信息
--显示卡号,余额
declare@cardIDvarchar(18),@leftmoney
select@cardID=cardID,@left=balancefromcardInfowherepass=@pass
交易成功'
交易金额:
+convert(varchar(10),@qk)
卡号:
+convert(varchar(18),@cardID)+'
余额:
+convert(varchar(10),@left)
--存款
createprocsaveMoney
@cardIDvarchar(18),
@ckmoney
elseif((selectIsReportLossfromcardInfowhereIsReportLoss=@IsReportLoss)='
卡已挂失,交易不能进行。
elseif(convert(int,@ck)%100!
本柜员机只存入面值100元的纸币,存款金额为100的整数倍。
updatecardInfosetbalance=balance+@ckwherecardID=@cardID
inserttransInfo(transDate,cardID,transType,transMoney,remark)values(default,@cardID,'
@ck,'
declare@cardIDvarchar(25),@leftmoney
+convert(varchar(10),@ck)
余额:
5.结束语
在这一个星期中,在做系统的过程中遇到了很多问题,有的是知识存储不足,有的是考虑不够周全,有些问题不但要深入地理解,而且要不断地更正以前的错误思维。
之所以能够顺利实现基本功功能,除了有自己的辛勤努力之外,遇到不能解决的问题,多亏了老师和周围同学的热心帮助。
做一个系统最重要的是整体思路,在做之前,必须要先理清自己的思路,否则在后来系统的开发过程中会感觉没有明确的方向感。
开发一套系统,最重要的是细心,并不是一定要做到面面俱到,但也要充分考虑到客户的需求和现实意义,不管什么系统,只用运用到实际应用中,才具有先现实意义,要保持清醒的头脑。
我刚开始的时候就是看着老师发的文档一题题往下做,后来我发现问题之后就把整个系统的思想理清了又重新开始的。
在整个系统中把我们这个学期学到的所有知识几乎都用到了,在运用知识的过程中如果不熟悉就会无法融会贯通,所以对知识的熟练程度要求比较高,在课外时间我就加强自己的理论知识的学习,在做系统的过程中在参照自己以前的程序代码,这样就可以比较顺利的完成了。
刚开始时创建表时,有一些字段的数据类型设计的不合理。
比如存款类型和账户余额在一开始时我设置的是char类型,但在后来的运算中总是需要把char类型转化,这样很麻烦,我就重新定义了表,把类型转化为money,这样运算时就简单一点了。
在做系统时经常会提示一些约束冲突,刚开始自己还以为做错了,后来才明白那正是自己做的约束在起作用了。
这还是理论与实际不能结合的原因啊。
在整个系统中有很多存储过程,自己对存储过程掌握的不是太熟练,所以在做的过程中很吃力,有时候写完存储过程执行的时候经常会出错,因为有时是输入的变量个数与存储类型不符,有时是类型不一致。
但是最后通过自己的努力还是成功的完成了。
通过这次实践我学到了很多东西,做系统细心很重要,作为一个编程人员,更是如此。
在整个系统中丢失了一个逗号,分号都是很严重的事情,所以保持清醒头脑,胆大心细是一个编程人员的良好心态。
也为以后自己踏上工作之路做好了实践经验准备。
这次实践不仅把学到的知识都进行了运用,巩固了知识之外还学习到了开发系统应该注意的问题的解决方法,这对以后的工作有很大的帮助。
我从这次实践中受益匪浅,感谢老师和同学们。
设计过程中质疑(或答辩)记载:
1.创建触发器的思路?
答:
根据交易类型是“存入”或“支出”,进而更新银行卡信息表的余额
2.如何默认当前时间?
答:
datetimedefault(getdate())
指导教师评语:
签名:
11年6月25日