zoukankan      html  css  js  c++  java
  • 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'888888';
    ##否为0,是为1
    ALTER TABLE cardinfo ALTER COLUMN IsReportLoss SET DEFAULT '0';
    
    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('张四龙','123456789012345','01067898978','北京海淀'),
    ('张艺龙','321245678912345678','0478-44443333','山东一条街'),
    ('张三龙','123456789032145','2222-63598978','河南'),
    ('张二龙','56789123453212461','010-44442222','河北')
    
    
    
    INSERT INTO `deposit`(`savingName`,`descrip`)
    VALUES('活期','钱生钱!!'),
    ('死期','钱死钱!!'),
    ('活期','钱生钱!!'),
    ('死期','钱生死钱!!')
    
    
    INSERT INTO `cardinfo`(`cardID`,`savingID`,`openMoney`,`balance`,`customerID`)
    VALUES('7418529631012345',1,5,200,2),
    ('8529631234785623',2,4,100,1),
    ('7415987563214756',3,3,50,3),
    ('2599774315533222',4,2,30,4)
    
    
    
    INSERT INTO`tradeinfo`(`transDate`,`cardID`,`transType`,`transMoney`,`remark`)
    VALUES('2008-6-15 11:14:52','7418529631012345','支取',1000,''),
    ('2017-6-15 11:14:52','8529631234785623','支取',1000,'很好'),
    ('2012-6-15 11:14:52','7415987563214756','存入',450,'非常好'),
    ('2010-6-15 11:14:52','2599774315533222','存入',780,'vary好')
    
    #模拟常规业务
    #1.修改
    UPDATE `cardinfo` SET `password` = '123456' WHERE `cardID` = '2599774315533222';
    UPDATE `cardinfo` SET `password` = '123123' WHERE `cardID` = '7415987563214756';
    ##2.办理银行卡挂失
    UPDATE `cardinfo` SET `IsReportLoss` = 1 WHERE `cardID` = '7415987563214756';
    ##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='7418529631012345';
        ##1.取款
        UPDATE cardInfo SET balance=balance-50 WHERE cardID='8529631234785623';
        IF t_error!=0 THEN
        ##中途发生错误,则回滚事物
        ROLLBACK;
        ELSE 
        ##提交事物
        COMMIT;
        ##开启提交事物
        END IF; 
        SET autocommit=1;
    END $$
    DELIMITER ;
    ## 查看事务
    CALL usp_add_and_getMoney();
    SELECT * FROM cardInfo
  • 相关阅读:
    2019-1-7 水晶报表
    2018-12-25工作记录 空白行===水晶报表
    2018-7-26-随笔-泛型
    2018-7-20-随笔-转换
    2018-7-18-随笔-接口
    2018-7-17-随笔-params和ref、out用法、事件访问器
    VPS安装metasploit-framework
    Mimiktaz抓取本机密码
    msfvenom生成各类Payload命令
    docker容器开启ssh远程登录
  • 原文地址:https://www.cnblogs.com/www-yang-com/p/9188646.html
Copyright © 2011-2022 走看看