ATM取款机系统

模拟银行实现ATM机取款系统

该系统使用( ( (SQLServer) ) )数据库

功能介绍:

  1. 开户(到银行填写开户申请单)
  2. 取钱
  3. 存钱
  4. 查询余额
  5. 转账

根据需求设计相对应的数据库概念模型
在这里插入图片描述
流程分步详解
@1 创建数据库Bank_db

--创建数据库
CREATE DATABASE Bank_db
ON PRIMARY
(
NAME = 'Bank_db_data',
FILENAME = 'D:\DATA\Bank_db_data.mdf',
SIZE = 5MB,
MAXSIZE = 50MB,
FILEGROWTH = 10%
)
LOG ON
(
NAME = 'Bank_db_log',
FILENAME = 'D:\DATA\Bank_db_log.ldf',
SIZE = 1MB,
FILEGROWTH = 1MB
)

@@ 2 根据E-R图建表
注意:身份证号不能重复,联系电话11位,所有涉及到的金额不能低于1元,默认密码6个8

--创建用户信息表
USE Bank_db
CREATE TABLE userInfo
(
userName varchar(32),
userCard varchar(32) UNIQUE,
userPhone varchar(11),
userAddress varchar(128)
)
--创建交易信息表
USE Bank_db
CREATE TABLE tradeInfo
(
tradeData varchar(16),
tradeMark varchar(32),
tradeType varchar(16),
tradeMoney float CHECK(tradeMoney>1)
)
--创建银行卡信息表
USE Bank_db
CREATE TABLE bankInfo
(
bankType varchar(32),
bankData varchar(32),
bankMoney float CHECK(bankMoney>1),
bankBalance float CHECK(bankBalance>1),
bankPassword varchar(16) DEFAULT '888888',
bankLose varchar(16)
)

@@@3 插入测试数据:三张表都要添加数据,并且张三账户的余额不能低于2000
客户信息表:
‘张三’,‘123456789012345’,‘01067898978’,‘北京海淀’
‘李四’,‘321245678912345678’,‘04784444333’
‘王五’,‘321245678912345679’,‘13566669999’,‘河南信阳’
‘李七’,‘321245678912345677’,‘13577778888’,‘河南洛阳’

--插入用户信息表
INSERT INTO userInfo VALUES('张三','123456789012345','01067898978','北京海淀')
INSERT INTO userInfo VALUES('李四','321245678912345678','04784444333','')
INSERT INTO userInfo VALUES('王五','321245678912345679','13566669999','河南信阳')
INSERT INTO userInfo VALUES('李七','321245678912345677','13577778888','河南洛阳')--插入交易信息表
INSERT INTO tradeInfo VALUES('2019/7/3/7','1010111112121134','转账',1000)
INSERT INTO tradeInfo VALUES('2019/7/4/9','1010 3576 1212 1134','存款',2000)
INSERT INTO tradeInfo VALUES('2019/7/5/8','987653321','存款',5000)
INSERT INTO tradeInfo VALUES('2019/7/7/3','987655321','取款',3000)--插入银行卡信息表
INSERT INTO bankInfo VALUES('转账','2019/7/3/7',1000,30000,'','否')
INSERT INTO bankInfo VALUES('存款','2019/7/4/9',2000,32000,'','否')
INSERT INTO bankInfo VALUES('存款','2019/7/5/8',5000,37000,'','否')
INSERT INTO bankInfo VALUES('取款','2019/7/7/3',3000,34000,'','否')

@@@@ 4 常规业务模拟
1**. 修改密码**
张三(卡号为1010111112121134)修改银行卡密码为123456
2. 银行卡挂失
李四(卡号为1010 3576 1212 1134)因银行卡丢失,申请挂失
3. 查询余额3000~6000之间的定期卡号,显示该卡相关信息
4. 查询本月交易金额最高的卡号
5. 查询挂失帐户信息

--把张三的密码修改为123456
SELECT tradeType FROM tradeInfo WHERE tradeMark = '1010111112121134'
UPDATE  bankInfo SET bankPassword = '123456' WHERE bankType IN(SELECT tradeType FROM tradeInfo WHERE tradeMark = '1010111112121134')
--查询修改后张三的密码
SELECT bankPassword FROM bankInfo WHERE bankType IN(SELECT tradeType FROM tradeInfo WHERE tradeMark = '1010111112121134')--李四的银行卡修改为挂失
SELECT tradeType FROM tradeInfo WHERE tradeMark = '1010 3576 1212 1134'
UPDATE  bankInfo SET bankLose = '挂失' WHERE bankType IN(SELECT tradeType FROM tradeInfo WHERE tradeMark = '1010 3576 1212 1134')
--查询李四的挂失
SELECT bankLose FROM bankInfo WHERE bankType IN(SELECT tradeType FROM tradeInfo WHERE tradeMark = '1010 3576 1212 1134')--查询余额3000~6000之间的定期卡号,显示该卡相关信息
SELECT * FROM bankInfo WHERE bankBalance BETWEEN 3000 AND 6000--查询本月交易金额最高的卡号
SELECT TOP 1 tradeMark FROM tradeInfo ORDER BY tradeMoney DESC--查询挂失帐户信息
SELECT * FROM bankInfo WHERE bankLose = '挂失'

@@@@@ 5 索引和视图
**1. 创建视图:**为向客户显示信息友好,查询各表,要求字段全为中文字段名, 3个表对应的视图名称分别为: view_userInfo,view_cardInfo,view_transInfo

--索引和视图
--列的别名(中文字段)
SELECT userName AS '开户名',userCard AS '身份证号', userPhone AS '联系电话', userAddress AS '居住地址'FROM  userInfo
SELECT tradeData AS '交易日期',tradeMark AS '卡号', tradeType AS '交易类型', tradeMoney AS '交易金额'FROM  tradeInfo
SELECT bankType AS '存款类型',bankData AS '开户日期', bankMoney AS '开户金额', bankBalance AS '余额',bankPassword AS '密码', bankLose AS '是否挂失' FROM  bankInfoCREATE VIEW  view_userInfo ON FROM  userInfo
CREATE VIEW  view_cardInfo ON FROM tradeInfo
CREATE VIEW  view_transInfo ON FROM bankInfo

@@@@@@6 T-SQL编程:存取款业务
张三的卡号(1010357612345678)取款900元,李四的卡号(1010357612121134)存款5000元,要求保存交易记录,以便客户查询和银行业务统计。
说明:当存钱或取钱(如300元)时候,会往交易信息表中添加一条交易记录,同时应更新银行卡信息表中的现有余额(如增加或减少300元);

--存取款业务
DECLARE @zmoney float
DECLARE @lmoney floatSELECT @zmoney = tradeMoney FROM tradeInfo WHERE tradeMark = '1010111112121134'
UPDATE tradeInfo SET @zmoney = @zmoney - 900 WHERE tradeMark = '1010111112121134'
PRINT @zmoneySELECT @lmoney = tradeMoney FROM tradeInfo WHERE tradeMark = '1010 3576 1212 1134'
UPDATE tradeInfo SET @lmoney = @lmoney + 5000 WHERE tradeMark = '1010 3576 1212 1134'
PRINT @lmoney

所有的步骤都已经展示给大家了@@@

如果有想看整个完整体系的话请看下面展示:

整体流程展示

--创建数据库
CREATE DATABASE Bank_db
ON PRIMARY
(
NAME = 'Bank_db_data',
FILENAME = 'D:\DATA\Bank_db_data.mdf',
SIZE = 5MB,
MAXSIZE = 50MB,
FILEGROWTH = 10%
)
LOG ON
(
NAME = 'Bank_db_log',
FILENAME = 'D:\DATA\Bank_db_log.ldf',
SIZE = 1MB,
FILEGROWTH = 1MB
)
--创建用户信息表
USE Bank_db
CREATE TABLE userInfo
(
userName varchar(32),
userCard varchar(32) UNIQUE,
userPhone varchar(11),
userAddress varchar(128)
)
--创建交易信息表
USE Bank_db
CREATE TABLE tradeInfo
(
tradeData varchar(16),
tradeMark varchar(32),
tradeType varchar(16),
tradeMoney float CHECK(tradeMoney>1)
)
--创建银行卡信息表
USE Bank_db
CREATE TABLE bankInfo
(
bankType varchar(32),
bankData varchar(32),
bankMoney float CHECK(bankMoney>1),
bankBalance float CHECK(bankBalance>1),
bankPassword varchar(16) DEFAULT '888888',
bankLose varchar(16)
)
--插入用户信息表
INSERT INTO userInfo VALUES('张三','123456789012345','01067898978','北京海淀')
INSERT INTO userInfo VALUES('李四','321245678912345678','04784444333','')
INSERT INTO userInfo VALUES('王五','321245678912345679','13566669999','河南信阳')
INSERT INTO userInfo VALUES('李七','321245678912345677','13577778888','河南洛阳')--插入交易信息表
INSERT INTO tradeInfo VALUES('2019/7/3/7','1010111112121134','转账',1000)
INSERT INTO tradeInfo VALUES('2019/7/4/9','1010 3576 1212 1134','存款',2000)
INSERT INTO tradeInfo VALUES('2019/7/5/8','987653321','存款',5000)
INSERT INTO tradeInfo VALUES('2019/7/7/3','987655321','取款',3000)--插入银行卡信息表
INSERT INTO bankInfo VALUES('转账','2019/7/3/7',1000,30000,'','否')
INSERT INTO bankInfo VALUES('存款','2019/7/4/9',2000,32000,'','否')
INSERT INTO bankInfo VALUES('存款','2019/7/5/8',5000,37000,'','否')
INSERT INTO bankInfo VALUES('取款','2019/7/7/3',3000,34000,'','否')--把张三的密码修改为123456
SELECT tradeType FROM tradeInfo WHERE tradeMark = '1010111112121134'
UPDATE  bankInfo SET bankPassword = '123456' WHERE bankType IN(SELECT tradeType FROM tradeInfo WHERE tradeMark = '1010111112121134')
--查询修改后张三的密码
SELECT bankPassword FROM bankInfo WHERE bankType IN(SELECT tradeType FROM tradeInfo WHERE tradeMark = '1010111112121134')--李四的银行卡修改为挂失
SELECT tradeType FROM tradeInfo WHERE tradeMark = '1010 3576 1212 1134'
UPDATE  bankInfo SET bankLose = '挂失' WHERE bankType IN(SELECT tradeType FROM tradeInfo WHERE tradeMark = '1010 3576 1212 1134')
--查询李四的挂失
SELECT bankLose FROM bankInfo WHERE bankType IN(SELECT tradeType FROM tradeInfo WHERE tradeMark = '1010 3576 1212 1134')--查询余额3000~6000之间的定期卡号,显示该卡相关信息
SELECT * FROM bankInfo WHERE bankBalance BETWEEN 3000 AND 6000--查询本月交易金额最高的卡号
SELECT TOP 1 tradeMark FROM tradeInfo ORDER BY tradeMoney DESC--查询挂失帐户信息
SELECT * FROM bankInfo WHERE bankLose = '挂失'--索引和视图
--列的别名(中文字段)
SELECT userName AS '开户名',userCard AS '身份证号', userPhone AS '联系电话', userAddress AS '居住地址'FROM  userInfo
SELECT tradeData AS '交易日期',tradeMark AS '卡号', tradeType AS '交易类型', tradeMoney AS '交易金额'FROM  tradeInfo
SELECT bankType AS '存款类型',bankData AS '开户日期', bankMoney AS '开户金额', bankBalance AS '余额',bankPassword AS '密码', bankLose AS '是否挂失' FROM  bankInfoCREATE VIEW  view_userInfo ON FROM  userInfo
CREATE VIEW  view_cardInfo ON FROM tradeInfo
CREATE VIEW  view_transInfo ON FROM bankInfo--存取款业务
DECLARE @zmoney float
DECLARE @lmoney floatSELECT @zmoney = tradeMoney FROM tradeInfo WHERE tradeMark = '1010111112121134'
UPDATE tradeInfo SET @zmoney = @zmoney - 900 WHERE tradeMark = '1010111112121134'
PRINT @zmoneySELECT @lmoney = tradeMoney FROM tradeInfo WHERE tradeMark = '1010 3576 1212 1134'
UPDATE tradeInfo SET @lmoney = @lmoney + 5000 WHERE tradeMark = '1010 3576 1212 1134'
PRINT @lmoney

ATM取款机系统已经做好了!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/565986.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【OpenCV 例程200篇】37. 图像的灰度化处理和二值化处理(cv2.threshold)

『youcans 的 OpenCV 例程200篇 - 总目录』 【OpenCV 例程200篇】37. 图像的灰度化处理和二值化处理 按照颜色对图像进行分类,可以分为二值图像、灰度图像和彩色图像。 二值图像:只有黑色和白色两种颜色的图像。每个像素点可以用 0/1 表示,0…

【OpenCV 例程200篇】38. 图像的反色变换(图像反转)

『youcans 的 OpenCV 例程200篇 - 总目录』 【OpenCV 例程200篇】38. 图像的反色变换(图像反转) 灰度变换是图像增强的重要方法,可以使图像动态范围扩大、图像对比度增强,图像更清晰,特征更明显,从而改善图…

【OpenCV 例程200篇】39. 图像灰度的线性变换

『youcans 的 OpenCV 例程200篇 - 总目录』 【OpenCV 例程200篇】39. 图像灰度的线性变换 线性灰度变换将原始图像灰度值的动态范围按线性关系扩展到指定范围或整个动态范围。 线性灰度变化对图像的每一个像素作线性拉伸,可以凸显图像的细节,提高图像的…

网络编程基础

网络协议 TCP/IP协议 IP地址与端口

获取焦点改变状态

表格显示文本内容,当用鼠标点击时获取到焦点文本变为可输入的输入框,点击空白处时失去焦点变为文本显示的文本内容 先看效果图 失去焦点的时候(文本内容只能看不能编辑) 获取焦点的时候(文本内容变为可以编辑的输入框…

【OpenCV 例程300篇】40. 图像分段线性灰度变换

『youcans 的 OpenCV 例程300篇 - 总目录』 【youcans 的 OpenCV 例程300篇】40. 图像分段线性灰度变换 分段线性变换函数可以增强图像各部分的反差,增强感兴趣的灰度区间、抑制不感兴趣的灰度级。 分段线性函数的优点是可以根据需要拉伸特征物的灰度细节&#xff…

Ajax链接输出数据库

使用Ajax链接数据库并且获取数据库里的内容显示在页面 两大步骤: 设计并实现数据库进行数据库链接并获取数据库内容显示 先看效果图 没有查询并显示数据之前效果 点击查询按钮之后获取数据库内容显示在页面 下面进行程序的讲解 一 数据库的设计及实现 新建一…

【OpenCV 例程200篇】41. 图像的灰度变换(灰度级分层)

『youcans 的 OpenCV 例程200篇 - 总目录』 【OpenCV 例程200篇】41. 图像的灰度变换(灰度级分层) 线性灰度变换将原始图像灰度值的动态范围按线性关系扩展到指定范围或整个动态范围。 分段线性变换函数可以增强图像各部分的反差,增强感兴趣…

python学习服务器端socket建立

C/S模式简介 Tcp通信模型 Udp通信模型 python标准库中的socket模块 用socket建立TCP服务器端 用socket建立UDP服务器端 socket TCP服务器端测试代码 #coding:utf-8 import socket#Host表示为本机地址 HOST PORT3214#默认为IPV4,TCP协议 ssocket.socket() s.bind((HOST,PORT))s.…

【OpenCV 例程200篇】42. 图像的灰度变换(比特平面分层)

『youcans 的 OpenCV 例程200篇 - 总目录』 【OpenCV 例程200篇】42. 图像的灰度变换(比特平面分层) 线性灰度变换将原始图像灰度值的动态范围按线性关系扩展到指定范围或整个动态范围。 分段线性变换函数可以增强图像各部分的反差,增强感兴…

SQLServer奇偶数的输出

编写SQLServer程序分别输出1-100内的奇数和偶数 一 1-100内奇数的输出 执行语句 declare number intset number1while number<101beginif number%21begin print numberendset number1end奇数输出的效果图 二 1-100内偶数的输出 执行语句 declare number intset number1…

python学习socket的客户端实现

服务端见点击打开链接 socket的异常 socket的TCP和UDP客户端模型 TCP的客户端 import socket#ip:127.0.0.1,port 3214 HOST #warning:Ip addr can only be dropped in server! PORT3214#AF_INET IPV4 #SOCK_DGRAM UDP ssocket.socket()#try to receive data from server &…

【OpenCV 例程200篇】43. 图像的灰度变换(对数变换)

『youcans 的 OpenCV 例程200篇 - 总目录』 【OpenCV 例程200篇】43. 图像的灰度变换&#xff08;对数变换&#xff09; 线性灰度变换将原始图像灰度值的动态范围按线性关系扩展到指定范围或整个动态范围。 对数变换可以由以下公式描述&#xff1a; Dtc∗log(1D)Dt c * log(1…

【OpenCV 例程200篇】45. 图像的灰度直方图(cv2.calcHist)

『youcans 的 OpenCV 例程200篇 - 总目录』 【OpenCV 例程200篇】45. 图像的灰度直方图 图像直方图是反映图像像素分布的统计表&#xff0c;横坐标代表像素值的取值区间&#xff0c;纵坐标代表每一像素值在图像中的像素总数或者所占的百分比。 灰度直方图是图像灰度级的函数&am…

【OpenCV 例程200篇】44. 图像的灰度变换(伽马变换)

『youcans 的 OpenCV 例程200篇 - 总目录』 【OpenCV 例程200篇】44. 图像的灰度变换&#xff08;伽马变换&#xff09; 线性灰度变换将原始图像灰度值的动态范围按线性关系扩展到指定范围或整个动态范围。 幂律变换也称伽马变换&#xff0c;可以提升暗部细节&#xff0c;对发…

【OpenCV 例程300篇】46. 直方图处理之直方图均衡化(cv2.equalizeHist)

『youcans 的 OpenCV 例程300篇 - 总目录』 【youcans 的 OpenCV 例程300篇】46. 直方图处理之直方图均衡化&#xff08;cv2.equalizeHist&#xff09; 图像直方图是反映图像像素分布的统计表&#xff0c;横坐标代表像素值的取值区间&#xff0c;纵坐标代表每一像素值在图像中的…

【OpenCV 例程300篇】47. 直方图处理之直方图匹配

『youcans 的 OpenCV 例程300篇 - 总目录』 【youcans 的 OpenCV 例程300篇】47. 直方图处理之直方图匹配 图像直方图是反映图像像素分布的统计表。 灰度直方图是图像灰度级的函数&#xff0c;用来描述每个灰度级在图像矩阵中的像素个数。 直方图均衡直接对图像全局进行均衡化…

lingo入门(数据部分)

lingo入门(数据部分) 在数据部分也可以指定一些标量变量&#xff08;scalar variables&#xff09;。当一个标量变量在数据部 分确定时&#xff0c;称之为参数。 data: interest_rate .085; enddata还可以指定几个参数data: interest_rate,inflation_rate .085 .03; enddata如…

我的Go+语言初体验——(1)超详细安装教程

我的Go语言初体验——&#xff08;1&#xff09;超详细安装教程 “我的Go语言初体验” | 征文活动进行中… Go 是什么&#xff1f;为数据而生&#xff0c;实现教学、工程与数据的 “三位一体”。 Go 语言的安装和环境配置有些复杂&#xff0c;官方教程也没有写的很详细。 本文…