数据库ATM自动取款机系统.docx
- 文档编号:3398116
- 上传时间:2022-11-22
- 格式:DOCX
- 页数:32
- 大小:275.37KB
数据库ATM自动取款机系统.docx
《数据库ATM自动取款机系统.docx》由会员分享,可在线阅读,更多相关《数据库ATM自动取款机系统.docx(32页珍藏版)》请在冰豆网上搜索。
数据库ATM自动取款机系统
长沙学院
课程设计说明书
题目
ATM系统
系(部)
计算机科学与技术系
专业(班级)
软件五班
学号
指导教师
起止日期
2013.6.13—2013.06.22
实训任务书
课程名称:
服务外包软件综合实训Ⅰ
设计题目:
ATM系统
已知技术参数和设计要求:
1.实训目的要求
通过本实训,应能够对SQLServer20005工具的了解,与数据库语法的能力。
1)了解SQL的简史和功能特性。
2)掌握E-R图的绘制和数据库的设计。
3)掌握T-SQL的语法知识,并能够熟练运用它。
4)掌握事务与存储过程的使用。
2.问题描述(功能要求):
本次案例将完成一个ATM银行取款机系统的数据库。
(1)创建BankDB数据库。
并保存在D:
\ATM文件夹下。
(2)创建用户信息表(userinfo)
(3)创建银行卡信息表(cardinfo)
(4)创建交易信息表(transinfo)
(5)添加各种约束关系:
Ø为userinfo表中客户ID(customerID)添加主键约束。
Ø为userinfo表中客户的(PID)添加唯一约束
Ø为useinfo表中的添加检查约束,长度为15或者18
Ø为userinfo表中的客户添加检查约束。
Ø为cardinfo表中的卡号ID(cardID)添加主键约束
Ø为cardinfo表中的卡号ID(cardID)添加约束,必须是以
Ø‘10103576’开头,长度为12
Ø为cardinfo表中的货币类型(curType)添加默认约束,默认为RMB。
Ø为cardinfo表中的存款类型添加约束,只能是‘活期、定活两便和定期’。
Øcardinfo表中开卡日期默认为当天日期。
Øcardinfo表中的开户金额不能低于1元。
Øcardinfo表中的余额不能低于1元。
Øcardinfo表中的密码长度为6位数。
默认为88888。
Øcardinfo表中是否挂失只能是‘是’和‘否’。
默认为‘否’
Ø添加userinfo表与cardinfo表的外键约束。
Øtransinfo表中的交易日期默认为当天。
Ø交易类型只能是‘存入’和‘支取’。
Ø添加cardinfo表与transinfo表的外键约束。
(6)开户
(7)取钱
(8)存钱
(9)查询余额
(10)转账
(11)交易统计
3.运行环境要求:
(1)客户端:
windows操作系统,SQLServer2005数据库客户端
(2)服务器:
SQLServer2005数据库服务器、
4.技术要求:
1)掌握E-R图的绘制和数据库的设计。
2)掌握T-SQL的语法知识,并能够熟练运用它。
3)掌握事务与存储过程的使用。
4)触发器(选做)
设计工作量:
40课时
工作计划:
(1)2011级软件工程所有班级
20课时:
设计,计算机系机房/普通教室。
16课时:
上机、调试。
计算机系机房
4课时:
答辩。
计算机系机房。
班级
日期
节次
地点
容
指导老师
11软件5班
15周周四
9-12节
致远楼1201
布置任务、上机调试
曾俊勇
15周周五
9-12节
致远楼1201
上机调试
15周周六
9-12节
致远楼1201
上机调试
16周周一
9-12节
致远楼1401
上机调试
16周周二
9-12节
致远楼1401
上机调试
16周周三
9-12节
致远楼1401
上机调试
16周周四
9-12节
致远楼1201
上机调试
16周周五
9-12节
致远楼1201
上机调试
16周周六
5-8节
致远楼1404
上机调试
16周周六
9-12节
致远楼1201
答辩
指导教师签名:
日期:
教研室主任签名:
日期:
系主任签名:
日期:
学院课程设计鉴定表
学号
专业
软件工程
班级
软件五班
设计题目
ATM自动取款机系统
指导教师
曾俊勇
指导教师意见:
评定等级:
教师签名:
日期:
答辩小组意见:
评定等级:
答辩小组长签名:
日期:
教研室意见:
教研室主任签名:
日期:
系(部)意见:
系主任签名:
日期:
说明
课程设计成绩分“优秀”、“良好”、“及格”、“不及格”四类;
一、引言6
1.1编写目的6
1.2参考资料6
二、需求规约7
2.1业务描述7
2.2需求分析7
三、数据库环境说明8
四、数据库的命名规则8
4.1数据库对象命名规则8
4.2数据项编码规则8
五、逻辑设计9
5.1E-R图9
5.2关系模型9
六、物理设计10
6.1表汇总10
6.2表[1]:
[userinfo表](用户信息表)10
6.3表[2]:
[cardinfo表](银行卡信息表)11
6.4表[3]:
[transinfo表](供应表)12
6.5存储过程的设计13
6.6触发器的设计18
七、操作结果20
7.1存款测试结果20
7.2取款测试结果20
7.3转账测试结果21
7.4注销结果测试21
八、事物设计23
8.1事物的创建23
总结25
一、引言
1.1编写目的
通过数据库ATM实训,进一步掌握数据库系统的理论和方法。
培养和锻炼开发管理信息系统的能力。
为今后信息系统开发打下良好的基础。
本文档是ATM系统设计文档的组成部分,数据库是一门应用性很强的专业课,在学习时必须注意理论与实践相结合。
本次课程环节旨在培养学生在本课程围,初步掌握解决实际应用问题时所应具备的查阅资料、综合运用所学知识的能力,为毕业设计及今后从事专业工作打下基础。
本课程环节要求学生了解企业管理信息系统后台数据库的设计、配置过程,掌握管理信息系统的开发方法。
主要包括:
需求分析、数据分析、系统逻辑模型设计方法;功能设计、物理模型设计方法;系统的实现等方法。
完成一个小型系统后台数据库的设计与配置。
目的是:
明确数据库的表名、字段名等数据信息,用来指导后期的数据库脚本的开发,设计该数据库的目的是设计一个ATM系统,能够按照一定条件查询、统计交易信息,可以模拟完成开户、存款、取款、转账、注销、挂失、激活、修改密码、查询等业务。
1.2参考资料
资料名称
作者
文件编号、版本
《数据库系统概论》
王珊、萨师煊
2006年5月第4版
《数据库设计入门经典》
鲍威尔
2007年3月第1版
《数据库原理》
克罗恩科
2005年6月第1版
二、需求规约
2.1业务描述
ATM系统业务是模拟了银行ATM提款机业务的管理功能。
在计算机网络,数据库和先进的开发平台上,利用数据库sql语言模拟开发一个良好的ATM系统,实现顾客的开户、存款、取款、查询、转账、修改密码等一系列操作。
并且在完成一定的操作后保存数据的更新和查询。
在转账和取款时还要核对余额是否足够,在足够的条件下才能执行。
存储容则是存储用户的一些信息,如和等,一些用户的详细资料,还有卡号表中的金额的信息,并对这些信息能够及时更新。
2.2需求分析
开户功能:
新客户需要开户之后才能拥有相应的卡,并对其进行各种交易。
在存入一定金额后可以登录或跳转到交易的界面,进行各种交易。
存款功能:
客户要能够正确地存款,能够准确地更新客户账号中的余额,并且记录客户的操作。
取款功能:
判断客户的余额是否大于取款金额,避免出现溢出现象,操作结果记录在表中。
转账功能:
准确核对客户的账户信息,核对转入账号的信息,判断转出账号的余额是否大于转出金额,避免出现溢出现象,并记录转出账号和转入账号的操作。
注销功能:
老用户可在此注销自己原有的卡。
挂失功能:
当客户遗失自己卡后,需对卡进行挂失操作,否则该卡的余额取不出。
激活功能:
客户遗失自己卡并找到卡后,可对卡进行激活操作,以便继续使用该卡。
修改密码功能:
客户可在此功能下修改卡的原始密码。
查询功能:
查询客户余额 ;查询客户的账号信息 ;查询客户的操作记录;
三、数据库环境说明
数据库实例
数据库系统
数据库部署环境
数据库设计工具
数据库存放位置
说明
ATM自动取款机系统
SqlServer2008
Windows2007
SqlServer
存放位置,绝对路径/相对路径
用于ATM自动取款
四、数据库的命名规则
4.1数据库对象命名规则
数据库对象
命名规则
备注
表
字符串功能描述字符串
例如:
Client客户信息表
视图
_View功能描述字符串
例如:
all_view每个客户订单数视图
触发器
_trigger功能描述字符串
例如:
Decre_trigger减少库存触发器
存储过程
proce_功能描述字符串
例如:
proce_SearchClient查询客户
信息存储过程
4.2数据项编码规则
数据项
命名规则
数据类型
长度围
备注
编号类
整数序号
整型
0-65535
无
类
字符串
Varchar(20)
0-20位
无
地址类
字符串
Varchar(20)
0-20位
无
类
字符串
Char(11)
11位
无
价格类
浮点型
float
无
无
时间类
Datetime型
Datetime
无
‘2011-01-0110:
10:
10’
五、逻辑设计
5.1E-R图
5.2关系模型
注:
下划线为主码,下划波浪线为外码
用户(顾客编号,开户名,,联系,居住地址)
银行卡(卡号,顾客编号,密码,开户金额,开户日期,是否挂失,余额,存款类型,货币类型)
交易(交易号,卡号,交易金额,交易日期,交易类型,备注)
六、物理设计
6.1表汇总
表名
功能说明
表userinfo
用户信息表,存储用户信息等
表cardinfo
银行卡信息表,存储银行卡信息等
表transinfo
交易信息表,存储客户的交易信息信息等
6.2表[1]:
[userinfo表](用户信息表)
表名
用户信息表(userinfo)
数据库用户
sa
主键
customer_ID
其他排序字段
无
索引字段
无
序号
字段名称
数据类型(精度围)
允许为空Y/N
唯一Y/N
区别度
默认值
约束条件/说明
1
customer_ID
int
N
Y
无
无
identity(1,1)
主键/客户编号
2
customer_name
char(10)
N
N
无
无
客户
3
P_ID
varchar(18)
N
Y
无
无
check(len(P_ID)=15orlen(P_ID)=18)
4
customer_phone
varchar(11)
Y
N
无
无
check(customer_phonelike'[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]')联系
5
customer_address
varchar(50)
Y
N
无
无
居住地址
sql脚本
createtableuserinfo
(
customer_IDintidentity(1,1)primarykey,--顾客编号
customer_namechar(10)notnull,--开户名
P_IDvarchar(18)uniquecheck(len(P_ID)=15orlen(P_ID)=18)notnull,--
customer_phonevarchar(11)check(customer_phonelike'[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'),--联系
customer_addressvarchar(50)--居住地址
);
6.3表[2]:
[cardinfo表](银行卡信息表)
表名
银行卡信息表(cardinfo)
数据库用户
sa
主键
card_ID
其他排序字段
无
索引字段
无
序号
字段名称
数据类型(精度围)
允许为空Y/N
唯一Y/N
区别度
默认值
约束条件/说明
1
card_ID
char(19)
N
Y
无
无
check(card_IDlike'10103576[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]')
主键/卡号
2
customer_ID
int
N
Y
无
无
外键/顾客编号
3
card_password
char(6)
N
N
无
无
default'888888'check(len(card_password)=6)密码
4
open_money
money
N
N
无
无
check(open_money>=1)
开户金额
5
open_date
datetime
N
N
无
无
default'getdate()'
开户日期
6
isreportloss
char
(2)
Y
N
无
无
default'否'check(isreportloss='是'orisreportloss='否')
挂失状态
7
balance
money
N
N
无
无
check(balance>=1)余额
8
saving_type
varchar(10)
N
N
无
无
check(saving_typelike'活期'orsaving_typelike'定活两便'orsaving_typelike'定期')存款类型
9
cur_type
char(5)
N
N
无
无
default'RMB'/货币类型
sql脚本
createtablecardinfo
(
card_IDchar(19)check(card_IDlike'10103576[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]')primarykey,--卡号
customer_IDint,--顾客编号
card_passwordchar(6)notnulldefault'888888'check(len(card_password)=6),--卡密码
open_moneymoneynotnullcheck(open_money>=1),--开户金额
open_datedatetimedefault'getdate()'notnull,--开户日期
isreportlosschar
(2)default'否'check(isreportloss='是'orisreportloss='否'),--是否挂失
balancemoneynotnullcheck(balance>=1),--余额
saving_typevarchar(10)notnullcheck(saving_typelike'活期'orsaving_typelike'定活两便'orsaving_typelike'定期'),--存款类型
cur_typechar(5)notnulldefault'RMB',--货币类型
foreignkey(customer_ID)referencesuserinfo(customer_ID)
ondeletecascade
onupdatecascade
);
6.4表[3]:
[transinfo表](供应表)
表名
交易信息表(transinfo)
数据库用户
sa
主键
trans_ID
其他排序字段
无
索引字段
无
序号
字段名称
数据类型(精度围)
允许为空Y/N
唯一Y/N
区别度
默认值
约束条件/说明
1
trans_ID
int
N
Y
无
无
identity(1,1)主键/交易号
2
card_ID
char(19)
N
Y
无
无
check(card_IDlike'10103576[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]')外键/卡号
3
trans_money
money
N
N
无
无
check(trans_money>0)/交易金额
4
trans_date
detetime
N
N
无
无
default'getdate()'交易日期
5
trans_type
varchar(5)
N
N
无
无
check(trans_typelike'存入'ortrans_typelike'支取')交易类型
6
remark
varchar(50)
Y
N
无
无
备注
sql脚本
createtabletransinfo
(
trans_IDintidentity(1,1)primarykey,--交易号
card_IDchar(19)notnullcheck(card_IDlike'10103576[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'),--卡号
trans_moneymoneynotnullcheck(trans_money>0),--交易金额
trans_datedatetimenotnulldefault'getdate()',--交易日期
trans_typevarchar(5)check(trans_typelike'存入'ortrans_typelike'支取'),--交易类型
remarkvarchar(50),--备注
foreignkey(card_ID)referencescardinfo(card_ID)
ondeletecascade
onupdatecascade
)
6.5存储过程的设计
1、开户存储过程
--提示:
银行卡卡号共19位(4位数一组,中间用空格隔开),对于某个银行来说,前面8个数字是固定的,后面8个数字
--要求随机的,并且唯一。
我们只需要产生8位随机的数字,然后和前8位固定的数字“10103576”连接即可。
随机函数的用法下:
--RAND(随机种子):
将产生0~1的随机数,要求每次的随机种子不一样。
为了保证随机种子每次不相同,一般的算法如下:
--随机种子=当前的月份数×100000+当前秒数×1000+当前毫秒数
--产生了0~1的随机数后,我们取小数点后8位,即:
0.xxxxxxxx
--使用substring(字符串,开始位置,长度)
createprocedureproc_CardID2
randCardIDchar(19)output,--输出参数--银行卡号
card_passwordchar(6),--账号密码
open_moneymoney,--开户金额
isreportlosschar
(2),--是否挂失
saving_typevarchar(10),--存款类型
cur_typechar(5),--货币类型
customer_namechar(10),--用户
P_IDvarchar(18)--号
AS
declarernumeric(15,8)--15位数,保留8位小数
declaretempStrchar(10)
selectr=rand((datepart(mm,getdate())*100000)+
(datepart(ss,getdate())*1000)+datepart(ms,getdate()))
settempStr=r
setrandCardID='10103576'+substring(tempStr,3,4)+''+substring(tempStr,7,4)
--若存在该客户信息
declarecustomer_IDint
ifEXISTS(select*fromuserinfowhereP_ID=P_ID)
begin
--禁用CHECK约束
altertablecardinfo
nocheckconstraintALL;
selectcustomer_ID=customer_IDfromuserinfowhere(P_ID=P_ID)
insertintocardinfo(card_ID,customer_ID,card_password,open_money,
open_date,isreportloss,balance,saving_type,cur_type)
values(randCardID,customer_ID,card_password,open_money,
getdate(),isreportloss,open_money,saving_type,cur_type)
--启用CHECK约束
altertablecardinfo
checkconstraintALL;
end
else
begin
print'需注册用户信息!
请先登记您的详细信息....'
end
--执行存储过程:
declarerandCardIDchar(19)
execproc_CardID2randCardIDoutput,'123456',109,'否','活期','RMB','曲先生','4'
print'您的卡号为:
'+randCardID
2、存钱存储过程
在存储过程中定义三个变量,card_IDchar(19),inputmoneymoney和card_passwordchar(6),这三个变量是用来核对账号的。
card_IDchar(19)用来核对卡号是否正确,inputmoneymoney暂时存储需要存入的金额,card_pass
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 ATM 自动 取款 系统