《ATM取款机系统》PPT课件.ppt_第1页
《ATM取款机系统》PPT课件.ppt_第2页
《ATM取款机系统》PPT课件.ppt_第3页
《ATM取款机系统》PPT课件.ppt_第4页
《ATM取款机系统》PPT课件.ppt_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

ACCP V4.0 ATM取款机系统 数据库设计 ACCP V4.0 问题描述 某银行拟开发一套ATM取款机系统,实现如下功能: 1、开户(到银行填写开户申请单,卡号自动生成) 2、取钱 3、存钱 4、查询余额 5、转账(如使用一卡通代缴手机话费、个人股票交易 等) 现要求对“ATM柜员机系统”进行数据库的设计并实现, 数据库保存在D:bank目录下,文件增长率为15% 。 2 ACCP V4.0 问题分析-1 字段名称字段名称说说说说 明明 customerID顾客编 号 自动编号(标识列), 从1开始,主键 customerName 开户名必填 PID 身份证 号 必填,只能是18位或15位 ,身份证号唯一约束 telephone联系电 话 必填,格式为xxxx- xxxxxxxx或手机号13位 address 居住地 址 可选输入 用户信息表:userInfo : 3 ACCP V4.0 问题分析-2 银行卡信息表:cardInfo 字段名称字段名称说说说说 明明 cardID卡号 必填,主健,银行的卡号规则和电话号码一样,一 般前8位代表特殊含义,如某总行某支行等。假定该 行要求其营业厅 的卡号格式为:1010 3576 xxxx xxx 开始,每4位号码后有空格,卡号一般是随机产生. curType货币种 类 必填,默认为RMB savingType存款类型活期/定活两便/定期 openDate开户日期必填,默认为系统当前日期 openMoney开户金额必填,不低于1元 balance余额必填,不低于1元,否则将销户 pass密码必填,6位数字,开户时默认为6个“8” IsReportLoss是否挂失必填,是/否值,默认为”否” customerID顾客编号 外键,必填,表示该卡对应的顾客编号,一位顾客 允许办理多张卡号 4 ACCP V4.0 问题分析-3 字段名称字段名称说说说说 明明 transDate 交易日 期 必填,默认为系统当前 日期 cardID卡号必填,外健,可重复索引 transType 交易类 型 必填,只能是存入/支取 transMoney交易金 额 必填,大于0 remark备注可选输入,其他说明 交易信息表:transInfo 5 ACCP V4.0 难点分析-1 q 设计ER图、建库、建表、加约束、建关系部分 建库语句: CREATE DATABASE bankDB ON ( NAME=, FILENAME=, SIZE=, FILEGROWTH= ) LOG ON ( . ) 建表语句: CREATE TABLE 表名 ( customerID INT IDENTITY(1,1), customerName CHAR(8) NOT NULL, ) 文件增长率 数据文件 日志文件 自动编号,从1开始 非空/必填 6 ACCP V4.0 难点分析-2 q 设计ER图、建库、建表、加约束、建关系部分 建约束语句: ALTER TABLE cardInfo ADD CONSTRAINT PK_cardID PRIMARY KEY(cardID), CONSTRAINT CK_cardID CHECK(cardID LIKE 1010 3576 0-9), CONSTRAINT DF_curType DEFAULT(RMB) FOR curType CONSTRAINT FK_customerID FOREIGN KEY(customerID) REFERENCES userInfo(customerID), CONSTRAINT UQ_PID UNIQUE(PID), 主键约束 检查约束 外键约束 (建关系) 唯一约束 默认约束 7 ACCP V4.0 难点分析-3 字段名称字段名称说说说说 明明 customerID顾客编 号 自动编号(标识列), 从1开始,主键 customerName 开户名必填 PID 身份证 号 必填,只能是18位或15位 ,身份证号唯一约束 telephone联系电 话 必填,格式为xxxx- xxxxxxxx或手机号13位 address 居住地 址 可选输入 建表时:IDENTITY(1,1) check约束: len( )函数 建表时:NOT NULL check约束: like 0-90-9 设计ER图、建库、建表、加约束、建关系部分 8 ACCP V4.0 子查询: SELECT FROM WHERE transMoney=(SELECT FROM ) 内部连接: SELECT FROM userInfo INNER JOIN cardInfo ON SQL编程: DECLARE inMoney money SELECT inMoney=sum(transMoney) from where (transType=存入) 视图: CREATE VIEW view_userInfo AS -SQL语句 GO 难点分析-4 声明变量 插入测试数据、常规业务模拟、创建索引视图部 分 给变量赋值的两种方法:SELECT或SET 测试视图: SELECT FROM view_userInfo 9 ACCP V4.0 CREATE TRIGGER trig_trans ON transInfo FOR INSERT AS select myTransType=transType,outMoney=transMoney , myCardID=cardID from inserted if () begin raiserror (交易失败!余额不足!,16,1) rollback tran -取消交易 end GO 难点分析-5 插入的数据临时表:inserted 创建触发器部分 错误提示: raiserror( )函数 取消交易,撤销事务: rollback trans 插入触发器 10 ACCP V4.0 创建存储过程: CREATE PROCEDURE proc_takeMoney card char(19), type char(4) , inputPass char(6)= AS SQL语句 GO 调用存储过程: EXEC proc_openAccount 李四,321245678912345678,1,定期 难点分析-6 存储过程部分1: 存储过程的参数 有默认值的参数,放在最后 11 ACCP V4.0 创建存储过程: CREATE PROCEDURE proc_randCardID randCardID char(19) OUTPUT SELECT r=RAND (随机种子 ) 例如:0. 08233262 3215 set randCardID =.SUBSTRING(tempStr,3,4) GO 调用存储过程: DECLARE mycardID char(19) EXECUTE proc_randCardID mycardID OUTPUT 难点分析-7 存储过程部分2: OUTPUT表示传出的参数 产生0-1的随机数 字符串截取函数 截取小数点后8位作为卡号的后八为数 卡号(4位一组,用空格隔开):1010 3576 0823 3262 调用带output输出参数的存储过程 12 ACCP V4.0 阶段划分 q 第一阶段(30分钟) 利用PowerDesigner设计E-R图 q 第二阶段( 50分钟) 利用SQL语句实现建库、建表、加约束、建关系 q 第三阶段(30分钟) 利用SQL语句插入测试数据、模拟常规业务操作 q 第四阶段(40分钟) 利用SQL语句创建索引和视图、创建触发器 q 第五阶段(60分钟) 利用SQL语句创建3个存储过程并测试 q 第六阶段(20分钟) 利用SQL语句创建转帐事务并测试 q 第七阶段(20分钟) 利用SQL语句创建系统维护帐号并授权 13 ACCP V4.0 第一阶段 q第一阶段(50分钟) 利用PowerDesigner设计E-R图 q要求学员自己动手操作,教员巡视,解答学员提 出的问题 14 ACCP V4.0 阶段检查 q针对第一阶段抽查学员的操作结果 q教员给出点评或集中演示难点部分 15 ACCP V4.0 第一阶段结果演示1 q第一阶段操作的结果: q?加吗? 16 ACCP V4.0 第二阶段 q第二阶段(50分钟) 利用SQL语句实现建库、建表、加约束、建关系 q要求学员自己动手编写SQL语句,教员巡视,解 答学员提出的问题 17 ACCP V4.0 阶段检查 q针对第二阶段抽查学员的编码结果 q教员给出点评或集中演示难点部分 18 ACCP V4.0 第二阶段标准代码演示-1 q建库 IF exists(SELECT * FROM sysdatabases WHERE name=bankDB) DROP DATABASE bankDB GO CREATE DATABASE bankDB ON ( NAME=bankDB_data, FILENAME=d:bankbankDB_data.mdf, SIZE=1mb, FILEGROWTH=15% ) LOG ON ( 检验数据库是否存在,如果为 真,删除此数据库 创建建库bankDB 19 ACCP V4.0 第二阶段标准代码演示-2 q建表: USE bankDB GO CREATE TABLE userInfo 用户信息表 ( customerID INT IDENTITY(1,1), customerName CHAR(8) NOT NULL, PID CHAR(18) NOT NULL, telephone CHAR(13) NOT NULL, address VARCHAR(50) ) GO CREATE TABLE cardInfo -银行卡信息表 ( cardID CHAR(19) NOT NULL, curType CHAR(5) NOT NULL, savingType CHAR(8) NOT NULL, openDate DATETIME NOT NULL, openMoney MONEY NOT NULL, balance MONEY NOT NULL, pass CHAR(6) NOT NULL, IsReportLoss BIT NOT NULL, customerID INT NOT NULL ) CREATE TABLE transInfo -交易信息表 ( transDate DATETIME NOT NULL, transType CHAR(4) NOT NULL, cardID CHAR(19) NOT NULL, transMoney MONEY NOT NULL, remark TEXT ) GO 20 ACCP V4.0 第三阶段 q第三阶段(60分钟): 利用SQL语句实现插入测试数据、常规业务操作 q要求学员自己动手操作,教员巡视,解答学员提 出的问题 21 ACCP V4.0 阶段检查 q针对第三阶段抽查学员的编码结果 q抽查学员编写的完整代码,要求学员上台讲解, 并演示运行结果 q教员给出点评 22 ACCP V4.0 第三阶段标准代码演示-1 q 张三和李四开户: SET NOCOUNT ON -不显示受影响的条数信息 INSERT INTO userInfo(customerName,PID,telephone,address ) VALUES(张三,123456789012345北京海淀) INSERT INTO cardInfo(cardID,savingType,openMoney ,balance,customerID) VALUES(1010 3576 1234 5678, 活期 ,1000,1000,1) INSERT INTO userInfo(customerName,PID,telephone) VALUES(李四,321245678912345678 INSERT INTO cardInfo(cardID,savingType,openMoney,balance, customerID) VALUES(1010 3576 1212 1134,定期,1,1,2) SELECT * FROM userInfo SELECT * FROM cardInfo GO 23 ACCP V4.0 第三阶段标准代码演示-2 q 张三的卡号取款900元,李四的卡号存款5000元 /*-交易信息表插入交易记录-*/ INSERT INTO transInfo(transType,cardID,transMoney) VALUES(支取,1010 3576 1234 5678,900) /*-更新银行卡信息表中的现有余额-*/ UPDATE cardInfo SET balance=balance-900 WHERE cardID=1010 3576 1234 5678 /*-交易信息表插入交易记录-*/ INSERT INTO transInfo(transType,cardID,transMoney) VALUES(存入,1010 3576 1212 1134,5000) /*-更新银行卡信息表中的现有余额-*/ UPDATE cardInfo SET balance=balance+5000 WHERE cardID=1010 3576 1212 1134 GO 24 ACCP V4.0 第三阶段标准代码演示-3 q 修改密码和挂失帐号 /*-修改密码-*/ -1.张三(卡号为1010 3576 1234 5678)修改银行卡密码为123456 -2.李四(卡号为1010 3576 1212 1134)修改银行卡密码为123123 update cardInfo set pass=123456 WHERE cardID=1010 3576 1234 5678 update cardInfo set pass=123123 WHERE cardID=1010 3576 1212 1134 SELECT * FROM cardInfo /*- 李四的卡号挂失 -*/ update cardInfo set IsReportLoss=1 WHERE cardID=1010 3576 1212 1134 SELECT * FROM cardInfo GO25 ACCP V4.0 第三阶段标准代码演示-4 q 统计银行的资金流通余额和盈利结算 DECLARE inMoney money DECLARE outMoney money DECLARE profit money SELECT inMoney=sum(transMoney) FROM transInfo WHERE (transType=存入) SELECT outMoney=sum(transMoney) FROM transInfo WHERE (transType=支取) print 银行流通余额总计为:+ convert(varchar(20), inMoney-outMoney)+RMB set profit=outMoney*0.008-inMoney*0.003 print 盈利结算为:+ convert(varchar(20),profit)+RMB GO26 ACCP V4.0 第三阶段标准代码演示-5 q 其他操作 /*-查询本周开户的卡号,显示该卡相关信息-*/ SELECT * FROM cardInfo WHERE (DATEDIFF(Day,getDate(),openDate)=outMoney+1) update cardInfo set balance=balance-outMoney WHERE cardID=myCardID else (未完待续) .(提示余额不足,交易失败!代码略) else update cardInfo set balance=balance+outMoney WHERE cardID=myCardID print 交易成功!交易金额:+convert(varchar(20),outMoney) SELECT mybalance=balance FROM cardInfo WHERE cardID=myCardID print 卡号+myCardID+ 余额:+convert(varchar(20),mybalance) GO ) -测试触发器:张三的卡号支取1000,李四的卡号存入200 -现实中的取款机依靠读卡器读出卡号,这里根据张三的名字查出考号来模拟 declare card char(19) select card=cardID from cardInfo Inner Join userInfo ON cardInfo.customerID=userInfo.customerID where customerName=张三 INSERT INTO transInfo(transType,cardID,transMoney) VALUES(支取 ,card,1000) GO declare card char(19) select card=cardID from cardInfo Inner Join userInfo ON cardInfo.customerID=userInfo.customerID where customerName=李四 INSERT INTO transInfo(transType,cardID,transMoney) VALUES(存入 ,card,200) GO 31 ACCP V4.0 第五阶段 q第五阶段(60分钟): 利用SQL语句创建3个存储过程并测试 q要求学员自己动手操作,教员巡视,解答学员提 出的问题 32 ACCP V4.0 阶段检查 q针对第三阶段抽查学员的编码结果 q抽查学员编写的完整代码,要求学员上台讲解, 并演示运行结果 q教员给出点评 33 ACCP V4.0 第五阶段标准代码演示-1 q 取钱或存钱的存储过程 CREATE PROCEDURE proc_takeMoney card char(19),m money,type char(4),inputPass char(6)= AS print 交易正进行,请稍后 if (type=支取) if (SELECT pass FROM cardInfo WHERE cardID=card)0) begin print 转帐失败! rollback tran end else begin print 转帐成功! commit tran end GO -调用上述事务过程转帐 declare card1 char(19),card2 char(19) select card1=cardID from cardInfo Inner Join userInfo ON cardInfo.customerID=userInfo.customerID where customerName=李四 select card2=cardID from cardInfo Inner Join userInfo ON cardInfo.customerID=userInfo.customerID where customerName=张三 EXEC proc_transfer card1,ca

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论