ATM机数据库设计.docx

上传人:b****6 文档编号:4586604 上传时间:2022-12-07 格式:DOCX 页数:14 大小:61.01KB
下载 相关 举报
ATM机数据库设计.docx_第1页
第1页 / 共14页
ATM机数据库设计.docx_第2页
第2页 / 共14页
ATM机数据库设计.docx_第3页
第3页 / 共14页
ATM机数据库设计.docx_第4页
第4页 / 共14页
ATM机数据库设计.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

ATM机数据库设计.docx

《ATM机数据库设计.docx》由会员分享,可在线阅读,更多相关《ATM机数据库设计.docx(14页珍藏版)》请在冰豆网上搜索。

ATM机数据库设计.docx

ATM机数据库设计

Documentserialnumber【NL89WT-NY98YT-NC8CB-NNUUT-NUT108】

 

ATM机数据库设计

武汉理工大学华夏学院

课程设计报告书

课程名称:

数据库系统原理

题目:

ATM机数据库设计

系名:

信息工程系

专业班级:

姓名

学号:

指导教师:

2011年7月1日

课程设计任务书

学生姓名:

专业班级:

指导教师:

工作单位:

信息工程系

设计题目:

银行ATM机后台数据库设计开发

要求完成的主要任务:

(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)

1.创建数据库Bank,数据表,并建立主外键、约束、建立表测试数据;

2.实现以下功能:

(1)简单查询

(2)嵌套查询

(3)连接查询

(4)统计银行的资金流通余额和盈利结算

(5)创建触发器

(6)创建存储过程

设计报告撰写格式要求:

1、明确课程设计的目的和重要性,认真领会课程设计的题目,读懂课程设计指导书的要求,学会设计的基本方法与步骤,学会如何运用前修知识与收集、归纳相关资料解决具体问题的方法。

严格要求自己,要独立思考,按时、独立完成课程设计任务。

2、设计报告:

要求层次清楚、整洁规范、不得相互抄袭,凡正文内容有整段完全相同者一律以抄袭论处。

设计报告正文字数不少于万字(不包括附录)

时间安排:

消化资料、系统调查?

1天

系统分析、总体设计,实施计划、撰写报告?

3天

演示、验收            1天

指导教师签字:

2011年6月25日

系主任签字:

2011年6月26日

1.问题描述4

背景4

数据需求4

2.方案图表设计4

E-R图4

数据字典7

关系图:

8

3.数据库源代码9

数据库建立9

数据初始化11

4.结果数据处理12

简单查询12

连接查询13

嵌套查询13

统计银行的资金流通余额和盈利结算14

创建触发器14

创建存储过程15

5.结束语17

1.问题描述

背景

通过数据库课程设计,进一步掌握数据库系统的理论和方法。

培养和锻炼开发管理信息系统的能力。

为今后信息系统开发打下良好的基础。

本课程环节主要针对《关系数据库基础与应用》这么课程进行设计,数据库是一门应用性很强的专业课,在学习时必须注意理论与实践相结合。

本次课程环节旨在培养学生在本课程范围内,初步掌握解决实际应用问题时所应具备的查阅资料、综合运用所学知识的能力,为毕业设计及今后从事专业工作打下基础。

本课程环节要求学生了解企业管理信息系统后台数据库的设计、配置过程,掌握管理信息系统的开发方法。

主要包括:

需求分析、数据分析、系统逻辑模型设计方法;功能设计、物理模型设计方法;系统的实现等方法。

完成一个小型系统后台数据库的设计与配置。

数据需求

随着社会的日益发展,银行在人们的日常生活扮演者重要的角色。

ATM机给人们的日常生活带来了方便,它出现在各个街道角落里。

ATM数据库系统使自动取款机机高速快捷的工作,不易发生数据丢失,统计错误,使ATM机更加安全方便。

开发及运行环境

操作系统:

MicrosoftWindowsXP

软件平台:

MicrosoftSQLServer2000

硬件环境:

服务器端P4/256MB/80GB以上,客户端PC586/128MB/40MB以上

2.方案图表设计

E-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-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

是否挂失

必填,是/否值,默认为”否”

customerID

顾客编号

外键,必填,表示该卡对应的顾客编号,一位顾客允许办理多张卡号

表2-3 交易信息表transInfo:

字段名称

说明

transDate

交易日期

必填,默认为系统当前日期

cardID

卡号

必填,外健,可重复索引

transType

交易类型

必填,只能是’存入/支取’

transMoney

交易金额

必填,大于0

remark

备注

可选输入,其他说明

关系图:

数据库存表关系图

3.数据库源代码

数据库建立

3.1.1创建数据库

usemaster

go

ifexists(select*fromsysdatabaseswherename='ATM')

dropdatabaseATM

go

--创建数据库

createdatabaseATM

onprimary

name=ATM_data,

filename='d:

\bank\',

size=10mb,

filegrowth=10%,

maxsize=100mb

logon

name=ATM_log,

filename='d:

\bank\',

size=10mb,

filegrowth=10%,

maxsize=100mb

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'定期'orsavingTypelike'订活两便'),

openDatedatetimedefault(getdate())notnull,

openMoneymoneycheck(openMoney>=1)notnull,

balancemoneycheck(balance>=1)notnull,

passchar(6)check(passlike'[0-9][0-9][0-9][0-9][0-9][0-9]')default'888888'notnull,

IsReportLosschar(8)check(IsReportLosslike'是'orIsReportLosslike'否')default'否'notnull,

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.1向表userinfo中输入数据

INSERTINTOuserInfo(customerName,PID,telephone,address)

VALUES('Lily','25','','湖北武汉')

INSERTINTOuserInfo(customerName,PID,telephone,address)

VALUES('黄安','26','','湖北安陆')

INSERTINTOuserInfo(customerName,PID,telephone,address)

VALUES('刘浩','25','','湖北孝感')

INSERTINTOuserInfo(customerName,PID,telephone,address)

VALUES('王娜','45966','','湖北应城')

INSERTINTOuserInfo(customerName,PID,telephone,address)

VALUES('张珂','25559','','湖北武汉')

INSERTINTOuserInfo(customerName,PID,telephone,address)

VALUES('张静初','25221','','湖北宜昌')

INSERTINTOuserInfo(customerName,PID,telephone,address)

VALUES('李明博','25256','','韩国')

3.2.2向cardInfo表中插入数据

INSERTINTOcardInfo(cardID,savingType,openMoney,balance,customerID)

VALUES('1010357655895986','活期',1000,1000,1)

INSERTINTOcardInfo(cardID,savingType,openMoney,balance,customerID)

VALUES('1010357655244986','定期',1000,1000,3)

INSERTINTOcardInfo(cardID,savingType,openMoney,balance,customerID)

VALUES('1010357656985987','活期',1000,1000,2)

INSERTINTOcardInfo(cardID,savingType,openMoney,balance,customerID)

VALUES('1010357621565789','定期',1000,1000,5)

INSERTINTOcardInfo(cardID,savingType,openMoney,balance,customerID)

VALUES('1010357655895966','定期',1000,1000,6)

INSERTINTOcardInfo(cardID,savingType,openMoney,balance,customerID)

VALUES('1010357615691856','活期',1800,1800,4)

INSERTINTOcardInfo(cardID,savingType,openMoney,balance,customerID)

VALUES('1010357655895386','定期',1000,1000,7)

3.2.3向transInfo表中插入数据

INSERTINTOtransInfo(transType,cardID,transMoney)

VALUES('支取','1010357655895986',900)

INSERTINTOtransInfo(transType,cardID,transMoney)

VALUES('支取','1010357655244986',600)

INSERTINTOtransInfo(transType,cardID,transMoney)

VALUES('存入','1010357655895966',5000)

INSERTINTOtransInfo(transType,cardID,transMoney)

VALUES('支取','1010357615691856',300)

INSERTINTOtransInfo(transType,cardID,transMoney)

VALUES('支取','1010357656985987',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)+'RMB'

print'盈利:

'+convert(varchar(20),(@out*-(@in*)+'RMB'

创建触发器

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

创建存储过程

--取款

createproctakeMoney

@cardIDvarchar(20),

@passvarchar(6),

@qkMoney

as

begin

print'正在交易,请稍候……'

print''

if((selectpassfromcardInfowherecardID=@cardID)!

=@pass)

print'密码不正确。

'

elseif(@qk>balance)

print'交易失败,余额不足。

'

elseif(convert(int,@qk)%100!

=0)

print'本柜员机只提供面值100元的纸币,取款金额为100的整数倍。

'

elseif((selectbalancefromcardInfowherecardID=@cardID)-@qk<1)

print'取款后余额不能低于1元'

else

begin

updatecardInfosetbalance=balance-@qkwherecardID=@cardID--更新剩余余额

inserttransInfo(transDate,cardID,transType,transMoney,remark)values(default,@cardID,'支取',@qk,'')--记录交易信息

--显示卡号,余额

declare@cardIDvarchar(18),@leftmoney

select@cardID=cardID,@left=balancefromcardInfowherepass=@pass

print'交易成功'

print'交易金额:

'+convert(varchar(10),@qk)

print'卡号:

'+convert(varchar(18),@cardID)+'余额:

'+convert(varchar(10),@left)

end

end

--存款

createprocsaveMoney

@cardIDvarchar(18),

@passvarchar(6),

@ckmoney

as

begin

print'正在交易,请稍候……'

print''

if((selectpassfromcardInfowherecardID=@cardID)!

=@pass)

print'密码不正确。

'

elseif((selectIsReportLossfromcardInfowhereIsReportLoss=@IsReportLoss)='是')

print'卡已挂失,交易不能进行。

'

elseif(convert(int,@ck)%100!

=0)

print'本柜员机只存入面值100元的纸币,存款金额为100的整数倍。

'

else

begin

updatecardInfosetbalance=balance+@ckwherecardID=@cardID

inserttransInfo(transDate,cardID,transType,transMoney,remark)values(default,@cardID,'存入',@ck,'')

declare@cardIDvarchar(25),@leftmoney

select@cardID=cardID,@left=balancefromcardInfowherepass=@pass

print'交易成功'

print'交易金额:

'+convert(varchar(10),@ck)

print'卡号:

'+convert(varchar(18),@cardID)+'余额:

'+convert(varchar(10),@left)

end

end

5.结束语

在这一个星期中,在做系统的过程中遇到了很多问题,有的是知识存储不足,有的是考虑不够周全,有些问题不但要深入地理解,而且要不断地更正以前的错误思维。

之所以能够顺利实现基本功功能,除了有自己的辛勤努力之外,遇到不能解决的问题,多亏了老师和周围同学的热心帮助。

做一个系统最重要的是整体思路,在做之前,必须要先理清自己的思路,否则在后来系统的开发过程中会感觉没有明确的方向感。

开发一套系统,最重要的是细心,并不是一定要做到面面俱到,但也要充分考虑到客户的需求和现实意义,不管什么系统,只用运用到实际应用中,才具有先现实意义,要保持清醒的头脑。

我刚开始的时候就是看着老师发的文档一题题往下做,后来我发现问题之后就把整个系统的思想理清了又重新开始的。

在整个系统中把我们这个学期学到的所有知识几乎都用到了,在运用知识的过程中如果不熟悉就会无法融会贯通,所以对知识的熟练程度要求比较高,在课外时间我就加强自己的理论知识的学习,在做系统的过程中在参照自己以前的程序代码,这样就可以比较顺利的完成了。

刚开始时创建表时,有一些字段的数据类型设计的不合理。

比如存款类型和账户余额在一开始时我设置的是char类型,但在后来的运算中总是需要把char类型转化,这样很麻烦,我就重新定义了表,把类型转化为money,这样运算时就简单一点了。

在做系统时经常会提示一些约束冲突,刚开始自己还以为做错了,后来才明白那正是自己做的约束在起作用了。

这还是理论与实际不能结合的原因啊。

在整个系统中有很多存储过程,自己对存储过程掌握的不是太熟练,所以在做的过程中很吃力,有时候写完存储过程执行的时候经常会出错,因为有时是输入的变量个数与存储类型不符,有时是类型不一致。

但是最后通过自己的努力还是成功的完成了。

通过这次实践我学到了很多东西,做系统细心很重要,作为一个编程人员,更是如此。

在整个系统中丢失了一个逗号,分号都是很严重的事情,所以保持清醒头脑,胆大心细是一个编程人员的良好心态。

也为以后自己踏上工作之路做好了实践经验准备。

这次实践不仅把学到的知识都进行了运用,巩固了知识之外还学习到了开发系统应该注意的问题的解决方法,这对以后的工作有很大的帮助。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1