mysql的ATM存取款机系统
##建库
CREATE DATABASE bankDB;
##客户信息表
CREATE TABLE userInfo
(
customerID INT PRIMARY KEY AUTO_INCREMENT NOT NULL,
customerName CHAR NOT NULL,
PID CHAR(18) NOT NULL,
telephone CHAR(11) NOT NULL,
address VARCHAR(128)
) ##创建银行信息表
CREATE TABLE cardInfo
(
cardID CHAR PRIMARY KEY NOT NULL,
curID VARCHAR(19) NOT NULL,
savingID INT NOT NULL,
openDate TIMESTAMP NOT NULL,
openMoney DECIMAL NOT NULL,
balance DECIMAL NOT NULL,
`password` VARCHAR(6) NOT NULL,
IsReportLoss BIT NOT NULL,
customerID INT NOT NULL
)
##交易信息表结构 (tradeInfo) CREATE TABLE tradeInfo
(
transDate TIMESTAMP,
cardID CHAR NOT NULL,
transType CHAR NOT NULL,
transMoney DECIMAL NOT NULL,
remark TEXT
)
##存款类型表结构(deposit) CREATE TABLE deposit
(
savingID INT PRIMARY KEY AUTO_INCREMENT NOT NULL,
savingName VARCHAR(32) NOT NULL,
descrip VARCHAR(32)
) ##建立userInfo的约束
##身份证,唯一约束
ALTER TABLE userInfo
ADD CONSTRAINT id_PID CHECK (len(PID)=18 OR len(PID)=15),
ADD CONSTRAINT UQ_PID UNIQUE(PID); ##`cardinfo`的约束
##,必填,默认为RMB,
##savingID,外键.openDate,默认为系统当前日期 这个不用建 因为 TIMESTAMP已经是当前日期 ##openMoney,不低于1元
##balance,不低于1元
##password,6位数字,开户时默认为6个“8”
##IsReportLoss,是/否值,默认为“否”
##customerID,外键
ALTER TABLE cardinfo ALTER COLUMN curID SET DEFAULT'RMB'; ALTER TABLE cardinfo
ADD CONSTRAINT ck_openMoney CHECK(openMoney>=1) ALTER TABLE cardinfo
ADD CONSTRAINT ck_balance CHECK(balance>=1) ALTER TABLE cardinfo ALTER COLUMN `password` SET DEFAULT'';
##否为0,是为1
ALTER TABLE cardinfo ALTER COLUMN IsReportLoss SET DEFAULT ''; ALTER TABLE cardinfo
ADD CONSTRAINT fk_deposit_cardinfo_savingID FOREIGN KEY(savingID) REFERENCES `deposit`(`savingID`) ALTER TABLE cardinfo
ADD CONSTRAINT FK_customerID FOREIGN KEY(customerID) REFERENCES userInfo(customerID) ##交易信息表结构 (tradeInfo)的约束
##默认为系统当前日期 不用建 因为类型已经是系统当前的日期了
##cardID外键,必填
ALTER TABLE tradeInfo ADD CONSTRAINT fk_cardinfo_tradeInfo_cardID FOREIGN KEY (cardID) REFERENCES cardinfo(cardID); ##添加数据
INSERT INTO userinfo(customerName,PID,telephone,address)
VALUES('张四龙','','','北京海淀'),
('张艺龙','','0478-44443333','山东一条街'),
('张三龙','','2222-63598978','河南'),
('张二龙','','010-44442222','河北') INSERT INTO `deposit`(`savingName`,`descrip`)
VALUES('活期','钱生钱!!'),
('死期','钱死钱!!'),
('活期','钱生钱!!'),
('死期','钱生死钱!!') INSERT INTO `cardinfo`(`cardID`,`savingID`,`openMoney`,`balance`,`customerID`)
VALUES('',1,5,200,2),
('',2,4,100,1),
('',3,3,50,3),
('',4,2,30,4) INSERT INTO`tradeinfo`(`transDate`,`cardID`,`transType`,`transMoney`,`remark`)
VALUES('2008-6-15 11:14:52','','支取',1000,'好'),
('2017-6-15 11:14:52','','支取',1000,'很好'),
('2012-6-15 11:14:52','','存入',450,'非常好'),
('2010-6-15 11:14:52','','存入',780,'vary好') #模拟常规业务
#1.修改
UPDATE `cardinfo` SET `password` = '' WHERE `cardID` = '';
UPDATE `cardinfo` SET `password` = '' WHERE `cardID` = '';
##2.办理银行卡挂失
UPDATE `cardinfo` SET `IsReportLoss` = 1 WHERE `cardID` = '';
##3.统计银行总存入的金额和总支取金额
SELECT `tradeinfo`.`transType`AS 资金流向, SUM(`transMoney`) FROM tradeInfo
GROUP BY `tradeinfo`.`transType` ##4.查看本周开户信息
SELECT `cardID`AS 卡号,userInfo.`customerName`AS 姓名,curID AS 货币,`savingName` AS 存款类型,openDate AS 开户日期,openMoney AS 开户金额,balance AS 存款余额,IsReportLoss AS 账户状态
FROM cardinfo,userInfo,`deposit`
WHERE WEEK(NOW())
AND IsReportLoss = 1
GROUP BY cardID
##5.查询本月交易金额最高的卡号
SELECT DISTINCT cardid FROM `tradeinfo`
WHERE `transMoney` =(
SELECT MAX(transMoney) FROM tradeinfo
WHERE MONTH(NOW())
)
##6.查询挂失的客户
SELECT `customerName` AS 客户姓名, telephone AS 联系电话
FROM userinfo
WHERE `customerID` = (
SELECT `customerID` FROM `cardinfo`
WHERE `IsReportLoss` = 1
) ## 7.催款提醒
SELECT `customerName` AS 客户姓名, `telephone` AS 联系电话,balance AS 存款余额
FROM userinfo
INNER JOIN cardinfo ON `userinfo`.`customerID` = cardinfo.`customerID`
WHERE `balance`<200
##月末也就是30天后
AND DAY(`openDate`)>=30 ######创建、使用客户友好信息视图
CREATE VIEW view_userInfo
AS
SELECT * FROM userInfo
SELECT * FROM view_userInfo CREATE VIEW view_cardinfo
AS
SELECT `cardID`AS 卡号,`curID` AS 货币种类,`savingID`AS 存款类型,`openDate`AS 开户日期,`openMoney`AS 开户金额,`balance`AS 余额,`password`AS 密码,`IsReportLoss`AS 是否挂失,`customerID`AS 客户编号
FROM `cardinfo`
SELECT * FROM view_cardinfo CREATE VIEW view_tradeinfo
AS
SELECT `transDate`AS 交易日期,`cardID`AS 卡号,`transType`AS 交易类型,`transMoney`AS 交易金额,`remark`AS 备注
FROM `tradeinfo`
SELECT * FROM view_tradeinfo ######使用事务模拟完成存款或取款业务 DELIMITER $$
CREATE PROCEDURE usp_add_and_getMoney()
BEGIN
##设置全局错误总数默认为0
DECLARE t_error INTEGER DEFAULT 0;
##设置如果有sqlexception就将全局错误总数为1
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error=1;
##关闭事务默认提交
SET autocommit=0;
##开始事务
START TRANSACTION;
##存款
UPDATE cardInfo SET balance=balance+5000 WHERE cardID='';
##1.取款
UPDATE cardInfo SET balance=balance-50 WHERE cardID='';
IF t_error!=0 THEN
##中途发生错误,则回滚事物
ROLLBACK;
ELSE
##提交事物
COMMIT;
##开启提交事物
END IF;
SET autocommit=1;
END $$
DELIMITER ;
## 查看事务
CALL usp_add_and_getMoney();
SELECT * FROM cardInfo
mysql的ATM存取款机系统的更多相关文章
- MySQL银行ATM存取款机系统(需求分析)
银行ATM需求文档 一.E-R图形文 二.开发步骤 1.明确需求--数据库设计--编码实现功能--测试 2.绘制e-r图--绘制数据库模型图--使用三大方式规范数据库结构 三.开发思路 1. 模型图综 ...
- 数据库期末作业之银行ATM存取款机系统
--一.建库.建表.建约束 --1.使用SQL创建表 --客户信息表userinfo --字段名称 说明 备注 --customerID 顾客编号 自动编号(标识列),从1开始,主键 --用序列seq ...
- 语言模拟ATM自动取款机系统
C语言实验报告 题目名称:C语言模拟ATM自动取款机系统 C语言模拟实现ATM自动取款机功能:输入密码,余额查询,取款,存款,转账,修改密码,退出功能: 代码实现的功能: 账号及密码输入: ...
- 银行ATM存取款系统(C语言实现)
这里使用的运行工具是DEV C++.老铁们一定要看仔细了.是DEV C++ 仅供借鉴:这个是大一时期写的.大四的时候整理了一下(本人C语言学的也不太好).肯定很多不足和存在漏洞的地方.仅供借鉴.仅供借 ...
- C#实现ATM自动取款机
本篇用C#实现ATM自动取款机的一些功能.面临的第一个问题是:如何把与自动取款机相关的有形的.无形的方面抽象出来.大致如下: (1)关于用户帐号的类:Account(2)关于银行数据库的类:BankD ...
- mysql绿色版在windows系统中的启动
mysql绿色版在windows系统中的启动 1.下载mysql免安装版 例如:mysql-5.7.11-winx64 2.修改配置文件,my-default.ini名称改为:my.ini,文件里面的 ...
- Factom(公证通)--基于区块链的存证系统
Factom这个Solution在2014年的时候就已经推出了,现在已经2018年了,我才来写这一篇分析文章可能有些迟了,但是它是十分具有参考价值的.因为现阶段来开区块链虽然炒得火热--养猫.养狗.草 ...
- python 操作mysql数据库之模拟购物系统登录及购物
python 操作mysql数据库之模拟购物系统登录及购物,功能包含普通用户.管理员登录,查看商品.购买商品.添加商品,用户充值等. mysql 数据库shop 表结构创建如下: create TAB ...
- MySQL 服务正在启动 .MySQL 服务无法启动。系统出错。发生系统错误 1067。进程意外终止。
MySQL 服务正在启动 .MySQL 服务无法启动.系统出错.发生系统错误 1067.进程意外终止. 检查了一个晚上才发现是---配置问题 #Path to installation directo ...
随机推荐
- 设计模式:fly weight模式
目的:通过共享实例的方式来避免重复的对象被new出来,节约系统资源 别名:享元模式 例子: class Char //共享的类,轻量级 { char c; public: Char(char c) { ...
- MySQL数据库---数据库备份、视图、触发器、事物、存储过程、函数和索引
备份 方法: 使用mysqldump实现逻辑备份 语法: mysqldump -h 服务器 -u用户名 -p密码 数据库名 > 备份文件.sql 单库备份: mysqldump -uroot - ...
- CppUnit使用和源码解析
前言 CppUnit是一个开源的单元测试框架,支持Linux和Windows操作系统,在linux上可以直接进行源码编译,得到动态库和静态库,直接链接就可以正常使用,在Windows上可以使用VC直接 ...
- 浅谈Python中的深浅拷贝的区别
深.浅拷贝总结 深拷贝 拷贝可变数据类型,如列表容器: a = [1, 2, [3, 4]] b = copy.deepcopy(a) a 与 b 所指的列表容器的空间地址不一致,即 id(a) != ...
- odoo12数据库自动化备份
数据库自动备份模块地址 https://github.com/Yenthe666/auto_backup#8.0 目前支持8以上的版本 odoo12的配置步骤 1.下载模块到自己的模块目录 2.登录o ...
- 题解 洛谷 P3340 【[ZJOI2014]星系调查】
根据题意,发现题目中的图,其实就是一颗树或者是一颗基环树,每个节点上有一个点对\((x,y)\),每次询问为给定端点,找一条直线到端点间的所有点的距离之和最小. 设这条直线为\(y=kx+b\),根据 ...
- xilinx fpga 生成3*3窗口
在写滤波程序的时候在网上看了好几篇大佬的笔记,都有提到使用3*3窗口,由于小白一个,看到复杂的理论就惧怕的不行.但是现在不得不上,自己调用移位寄存器ip核然后做了个3*3窗口出来,自己动手作出来忽然感 ...
- Alink漫谈(十四) :多层感知机 之 总体架构
Alink漫谈(十四) :多层感知机 之 总体架构 目录 Alink漫谈(十四) :多层感知机 之 总体架构 0x00 摘要 0x01 背景概念 1.1 前馈神经网络 1.2 反向传播 1.3 代价函 ...
- 还不懂mysql的undo log和mvcc?算我输!
最近一直没啥时间写点东西,坚持分享真的好难,也不知道该分享点啥,正好有人要问我这些东西,所以腾出点时间,写一下这个主题.同样本篇可以给读者承诺,听不懂或者没收获算我输,哈哈! 众所周知,mysql中读 ...
- Java Web(5)-Servlet详解(下)
一.HttpServletRequest 类 1. HttpServletRequest 类作用? 每次只要有请求进入 Tomcat 服务器,Tomcat 服务器就会把请求过来的 HTTP 协议信息解 ...