Mysql Atm取款机系统模拟案例
#创建ATM数据库
CREATE DATABASE ATM;
#创建用户
CREATE USER `ATMMaster` IDENTIFIED BY '1234';
GRANT ALL ON ATM.* TO 'bankMaster';
CREATE DATABASE `ATM`;
USE ATM;
##删除数据库
DROP DATABASE ATM;
#用例3:创建客户信息表添加外键
CREATE TABLE `userInfo`(
`customerID` INT(4) NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '客户编号',
`customerName` CHAR(8) NOT NULL COMMENT '开户名',
`telephone` CHAR(12) NOT NULL COMMENT '手机号码',
`address` VARCHAR(50) NOT NULL COMMENT '居住地址',
`PID` CHAR(18) UNIQUE NOT NULL COMMENT '身份证号'
)ENGINE = INNODB,COMMENT='用户表';
#创建存款类型表
CREATE TABLE `Deposit`(
`savingID` INT(4) NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '存款编号',
`savingName` VARCHAR(20) NOT NULL COMMENT '存款名称',
`descrip` VARCHAR(50)
)ENGINE = INNODB,COMMENT='存款类型表';
#创建银行卡信息表
CREATE TABLE `cardInfo`(
`cardID` CHAR(20) NOT NULL PRIMARY KEY COMMENT '卡号',
`customerID` INT(4) NOT NULL COMMENT '客户编号',
`savingID` INT(4) NOT NULL COMMENT '存款类型',
`curID` VARCHAR(10) NOT NULL DEFAULT "RMB" COMMENT '币种',
`openDate` TIMESTAMP NOT NULL DEFAULT NOW() COMMENT '开户日期',
`openMoney` DECIMAL(20,2) NOT NULL COMMENT '开户金额',
`balance` DECIMAL(20,2) NOT NULL COMMENT '余额',
`password` CHAR(10) NOT NULL COMMENT '密码',
`IsReportLoss` INT(2) NOT NULL DEFAULT '0' COMMENT '是否挂失 '
)ENGINE = INNODB,COMMENT='银行卡信息表';
#创建交易信息表
CREATE TABLE `tradeInfo`(
`tradeNum` INT(4) NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '交易流水号',
`tradeDate` TIMESTAMP NOT NULL DEFAULT NOW() COMMENT '交易日期',
`tradeType` CHAR(4) NOT NULL COMMENT '交易类型',
`cardID` CHAR(20) NOT NULL COMMENT '银行卡号',
`tradeMoney` DECIMAL(20,2) NOT NULL COMMENT '交易金额',
`remark` VARCHAR(100) NOT NULL COMMENT '备注'
)ENGINE = INNODB,COMMENT='交易信息表';
##创建外键约束
#添加外键约束 主表在后面 从表在前面
#客户信息主表 与 银行卡信息从表 的外键关系
ALTER TABLE `cardInfo` ADD CONSTRAINT FOREIGN KEY (`customerID`)REFERENCES `userInfo`(`customerID`);
#存款类型主表 与 银行卡信息从表 的外键关系
ALTER TABLE `cardInfo` ADD CONSTRAINT FOREIGN KEY (`savingID`)REFERENCES `Deposit`(`savingID`);
#银行卡信息主表 与 交易信息表从表 的外键关系
ALTER TABLE `tradeInfo` ADD CONSTRAINT FOREIGN KEY (`cardID`)REFERENCES `cardInfo`(`cardID`);
#用例4:插入测试数据
#存款类型
INSERT INTO `deposit` (`savingName`,`descrip`) VALUES ('活期','按存款日结算利息');
INSERT INTO `deposit` (`savingName`,`descrip`) VALUES ('定期一年','存款期是1年');
INSERT INTO `deposit` (`savingName`,`descrip`) VALUES ('定期二年','存款期是2年');
INSERT INTO `deposit` (`savingName`,`descrip`) VALUES ('定期三年','存款期是3年');
INSERT INTO `deposit` (`savingName`) VALUES ('定活两便');
INSERT INTO `deposit` (`savingName`) VALUES ('通知');
INSERT INTO `deposit` (`savingName`,`descrip`) VALUES ('零存整取一年','存款期是1年');
INSERT INTO `deposit` (`savingName`,`descrip`) VALUES ('零存整取二年','存款期是2年');
INSERT INTO `deposit` (`savingName`,`descrip`) VALUES ('零存整取三年','存款期是3年');
INSERT INTO `deposit` (`savingName`,`descrip`) VALUES ('存本取息五年','按月支取利息');
SELECT * FROM `deposit`;
#客户信息
INSERT INTO `userinfo`(`customerName`,`PID`,`telephone`,`address`)VALUES('张三','123456789012345999','010-67898978','北京海淀');
INSERT INTO `userinfo`(`customerName`,`PID`,`telephone`,`address`)VALUES('李四','321245678912345678','765-44443333','云南贵州');
INSERT INTO `userinfo`(`customerName`,`PID`,`telephone`,`address`)VALUES('王五','567891234532124670','010-44443333','湖南长沙');
INSERT INTO `userinfo`(`customerName`,`PID`,`telephone`,`address`)VALUES('丁六','567891321242345618','052-43345543','广东东莞');
SELECT * FROM `userinfo`;
#银行卡信息
INSERT INTO `cardinfo`(`cardID`,`savingID`,`openMoney`,`balance`,`customerID`,`password`)VALUES('1010357612345678',1,1000,1000,1,'123321');
INSERT INTO `cardinfo`(`cardID`,`savingID`,`openMoney`,`balance`,`customerID`,`password`)VALUES('1010357612121134',2,2000,2000,2,'123456');
INSERT INTO `cardinfo`(`cardID`,`savingID`,`openMoney`,`balance`,`customerID`,`password`)VALUES('1010357612121130',2,3000,3000,3,'789789');
INSERT INTO `cardinfo`(`cardID`,`savingID`,`openMoney`,`balance`,`customerID`,`password`)VALUES('1010357612121004',2,4000,4000,4,'456456');
SELECT * FROM cardInfo;
#交易信息表插入交易记录
INSERT INTO `tradeinfo`(`tradeType`,`cardID`,`tradeMoney`) VALUES('支取','1010357612399998',600);
INSERT INTO `tradeinfo`(`tradeType`,`cardID`,`tradeMoney`) VALUES('存入','1010357612121134',4000);
INSERT INTO `tradeinfo`(`tradeType`,`cardID`,`tradeMoney`) VALUES('支取','1010357612345678',900);
INSERT INTO `tradeinfo`(`tradeType`,`cardID`,`tradeMoney`) VALUES('存入','1010357999911134',5000);
SELECT * FROM tradeInfo;
#更新银行卡信息表中的现有余额
UPDATE `cardinfo` SET `balance`=`balance`-900 WHERE `cardID`='1010357612345678';
UPDATE `cardinfo` SET `balance`=`balance`+5000 WHERE `cardID`='1010357612121134';
SELECT * FROM cardInfo;
##用例5:模拟常规业务
#1.修改客户密码
#张三(卡号为1010 3576 1234 5678)修改银行卡密码为123321
#李四(卡号为1010 3576 1212 1134)修改银行卡密码为123456
UPDATE `cardinfo` SET `password`='123321' WHERE `cardID`='1010357612345678';
UPDATE `cardinfo` SET `password`='123456' WHERE `cardID`='1010357612121134';
SELECT *FROM cardinfo
#2.办理银行卡挂失
#李四(卡号为1010 3576 1212 1134)因银行卡丢失,申请挂失
UPDATE `cardinfo` SET `IsReportLoss`=1 WHERE `cardID`='1010357612121134' ;
SELECT `cardID`AS '卡号',`curID`AS '货币',`savingName`AS '储蓄种类',`openDate`AS '开户日期',`openMoney`AS '开户金额',`balance`AS '余额',`password`AS '密码',
`IsReportLoss`AS '是否挂失', `customerName`AS '客户姓名'
FROM `cardinfo`, `deposit`, `userinfo`
WHERE `cardinfo`.`savingID`=`deposit`.`savingID` AND `cardinfo`.`customerID` = `userinfo`.`customerID`
#3 统计银行总存入金额和总支取金额
SELECT `tradeType` AS '交易类型',SUM(`tradeMoney`) AS '总金额'
FROM `tradeinfo`
GROUP BY `tradeType`;
#4查询本周开户信息
SELECT C.`cardID`AS '卡号',U.`customerName` AS '姓名',C.`curID`AS '货币',D.`savingName`AS '存款类型',C.`openDate`AS '开户日期',C.`openMoney`AS '开户金额',C.`balance`AS '余额',C.`IsReportLoss`AS '账户状态'
FROM `cardinfo` C
INNER JOIN `userinfo` U ON (C.`customerID` = U.`customerID`)
INNER JOIN `deposit` D ON (C.`savingID` = D.`savingID` )
WHERE WEEK(NOW()) = WEEK(`openDate`);
#5查询本月交易金额最高的卡号
SELECT DISTINCT `cardID`
FROM `tradeinfo`
WHERE `tradeMoney`=(
SELECT MAX(`tradeMoney`)
FROM `tradeinfo`
WHERE MONTH(`tradeDate`)=MONTH(NOW())AND YEAR(`tradeDate`)=YEAR(NOW())
);
#6查询挂失客户信息
SELECT `customerName` AS '客户姓名',`telephone` AS '联系电话'
FROM `userinfo`
WHERE `customerID` IN(SELECT `customerID` FROM `cardinfo` WHERE `IsReportLoss`=1)
#7催款提醒业务
SELECT `customerName` AS '客户姓名',`telephone` AS '联系电话',`balance` AS '存款金额'
FROM `userinfo`
INNER JOIN `cardinfo` ON `cardinfo`.`customerID`=`userinfo`.`customerID`
WHERE `balance`<200;
##用例6:创建、使用客户有好信息视图
#view_userInfo:输出银行客户记录
DROP VIEW IF EXISTS view_userInfo;
#输出银行客户记录
CREATE VIEW view_userInfo
AS
SELECT `customerID` AS 客户编号,`customerName` AS 开户名, `PID` AS 身份证号,`telephone` AS 电话号码,`address` AS 居住地址
FROM userInfo;
#查看
SELECT * FROM view_userInfo;
#view_cardInfo:输出银行卡记录
DROP VIEW IF EXISTS view_cardInfo;
#银行卡信息表视图
CREATE VIEW view_cardInfo
AS
SELECT c.cardID AS '卡号',u.customerName AS '客户',c.curID AS '货币种类', d.savingName AS '存款类型',c.openDate AS '开户日期',c.balance AS '余额',c.password AS '密码',IsReportLoss AS '是否挂失'
FROM `cardinfo` c, `deposit` d,`userinfo` u
WHERE c.`savingID`=d.`savingID` AND c.`customerID`=u.`customerID`;
#查看
SELECT * FROM view_cardInfo;
#view_transInfo:输出银行卡的交易记录
DROP VIEW IF EXISTS view_transInfo;
CREATE VIEW view_transInfo
AS
SELECT `tradeDate` AS '交易日期',`tradeType` AS '交易类型', `cardID` AS '卡号',`tradeMoney` AS '交易金额',`remark` AS '备注'
FROM `tradeinfo`;
#查看
SELECT * FROM view_transInfo;
#用例7:使用事务完成转账
#从卡号为“1010357612121134”的账户中转出300元给卡号为“1010357612345678”的账户-
BEGIN;
INSERT INTO tradeInfo(tradeType,cardID,tradeMoney)
VALUES('支取','1010357612121134',300);
UPDATE cardInfo SET balance=balance-300 WHERE cardID='1010357612121134';
INSERT INTO tradeInfo(tradeType,cardID,tradeMoney)
VALUES('存入','1010357612345678',300);
UPDATE cardInfo SET balance=balance+300 WHERE cardID='1010357612345678';
COMMIT; #提交事务
ROLLBACK; #回滚事务
SELECT * FROM cardInfo;
SELECT * FROM tradeInfo;
Mysql Atm取款机系统模拟案例的更多相关文章
- 大话JS面向对象之开篇万物皆对象------(ATM取款机引发的深思)
一,总体概要 OO(面向对象)概念的提出是软件开发工程发展的一次革命,多年来我们借助它使得很多大型应用程序得以顺利实现.如果您还没有掌握并使用OO进行程序设计和开发,那么您无疑还停留在软件开发的石器时 ...
- Oracle实战训练——ATM取款机业务
ATM取款机的数据库模拟开发和实战总结 一.ATM实战开发的简介. 学习了几天的Oracle,开始着手用数据库PL/SQL语言做一个简单的ATM取款机业务,主要是为了巩固数据库的知识,并非真正的去实现 ...
- 第一周:设计一个简易ATM取款机简易程序(2)
1.了解用户对ATM取款机功能需求如下: 2.新建一个login函数使用for循环方法和if选择方法编写登陆界面用来及设置ATM内用户的金额和取款机内的金额: 3.使用新建函数方法及if选择方法编写登 ...
- MySQL 数据库增量数据恢复案例
MySQL 数据库增量数据恢复案例 一.场景概述 MySQL数据库每日零点自动全备 某天上午10点,小明莫名其妙地drop了一个数据库 我们需要通过全备的数据文件,以及增量的binlog文件进行数据恢 ...
- Mysql存储过程知识,案例--mysql存储过程基本函数
Mysql存储过程知识,案例: create procedure delete_setting(in p_settingid integer) begin delete from setting wh ...
- 170301、使用Spring AOP实现MySQL数据库读写分离案例分析
使用Spring AOP实现MySQL数据库读写分离案例分析 原创 2016-12-29 徐刘根 Java后端技术 一.前言 分布式环境下数据库的读写分离策略是解决数据库读写性能瓶颈的一个关键解决方案 ...
- ATM取款机的数据库模拟开发和实战总结
一.ATM实战开发的简介. 学习了几天的Oracle,开始着手用数据库PL/SQL语言做一个简单的ATM取款机业务,主要是为了巩固数据库的知识,并非真正的去实现高端的业务.有兴趣的可以看看,希望对同胞 ...
- ATM取款机模拟——数据结构课设
今天帮人写的第二篇课设 . ;-) 机智的窝 要求:大概说一下吧,就是要创建一个用户(初始化一账户),模拟ATM的业务(取款,100的整数倍,改密 码,查剩余金额.等等,各 ...
- LinuxC语言实现ATM取款机实验Socket
链接:https://pan.baidu.com/s/1sZt4qhYc6CDJVpoJHbtw-Q 提取码:53ot 复制这段内容后打开百度网盘手机App,操作更方便哦 本实验用的是Centos7t ...
随机推荐
- 基于 ZooKeeper 搭建 Spark 高可用集群
一.集群规划 二.前置条件 三.Spark集群搭建 3.1 下载解压 3.2 配置环境变量 3.3 集群配置 3.4 安装包分发 四.启 ...
- CentOS7 搭建gitlab服务器
本文介绍如何在CentOS7.2上搭建Gitlab服务器,并简单介绍如何使用. Preface 使用的是CentOS7.2的操作系统,安装当前最新版Gitlab服务器,下载地址:清华大学开源软件镜像站 ...
- Logback详细整理,基于springboot的日志配置
Logback的配置介绍: 1.Logger.appender及layout Logger作为日志的记录器,把它关联到应用的对应的context上后,主要用于存放日志对象,也可以定义日志类型.级别. ...
- centos7安装apache http server启动失败--Failed to start The Apache HTTP Server.
centos7安装apache http server启动失败 除了nginx可以开启http服务外,apche http server也可以开启http服务,安装过程如下:1. 首先,检测是 ...
- GIT \ SVN 版本管理 git + gitHub
场景1 想删除一个段落,又怕将来想恢复找不回来怎么办?有办法,先把当前文件"另存为--"一个新的Word文件,再接着改,改到一定程度,再"另存为--"一个新 ...
- Codeforces Gym101257F:Islands II(求割点+思维)
http://codeforces.com/gym/101257/problem/F 题意:给出一个n*m的地图,上面相同数字的代表一个国家,问对于每个国家有多少个国家在它内部(即被包围).例如第一个 ...
- Flags Over Objects
The Flags Over Objects anti-pattern occurs when behavior is written outside of an object by inspecti ...
- JS格式化JSON后的日期
序列化后日期变成了 /Date(1494524134000+0800)\ 这种格式 不能正常显示了 但也不能为了这个吧所有服务的DateTime字段都改成String类型 于是找了一个JS的扩展方法来 ...
- Windows下通过VNC远程访问Linux服务器,并实现可视化
前言 最近因部门需要,老大想让我在公司Linux服务器上弄个Oracle,以用作部门测试环境的数据库服务器,经过一番折腾后,成功完成了任务.因公司Linux服务器是无图形界面的,本人接触Linux不多 ...
- nodejs进阶(1)——npm使用技巧和最佳实践
nodejs进阶教程,小白绕道!!! npm使用技巧和最佳实践 前提:请确保安装了node.js npm的最佳实践 npm install是最常见的npm cli命令,但是它还有更多能力!接下来你会了 ...