/*
------------------------------------------------------------------------------
----------------- 银行ATM取款机系统 -------------------------------
------------------------------------------------------------------------------
*/
/*
//////////////////////////////////////////////////////////////////////////////
/////////// 创建库bank ////////////////////////////
//////////////////////////////////////////////////////////////////////////////
*/
/*------设置当前的数据库为 master,以便访问 sysdatabases 系统表------------- */
use master
go
/*---检查是否已存在bbsDB数据库:查询master数据库中的系统表 sysdatabases-----*/
if exists(select*from sysdatabases where name= 'bankDB')
drop database bankDB
go
/*-----------------创建文件夹d:\bank保存数据库------------------------------*/
EXEC sp_configure 'show advanced options', 1
GO
RECONFIGURE
GO
EXEC sp_configure 'xp_cmdshell', 1
RECONFIGURE
GO
ExEc xp_cmdshell 'mkdir D:\bank' --调用DOS命令创建bank文件夹
GO
/*--------------------------------建库--------------------------------------*/
create database bankDB
on
(
/*------------------------数据文件的具体描述--------------------------------*/
name='bankDB_data', --主数据文件的逻辑名
filename='D:\bank\bankDB_data.mdf', --主数据文件的物理名
size=10mb, --主数据文件初始大小
filegrowth=15% --主数据文件的增长率
)
log on
(
/*-------------------------*日志文件的具体描述-------------------------------*/
name='bankDB_log',
filename='D:\bank\bankDB_log.ldf',
size=1MB,
maxsize=20MB,
filegrowth=15%
)
go
/*
//////////////////////////////////////////////////////////////////////////////
/////////// 用户信息表 userInfo ////////////////////////////
//////////////////////////////////////////////////////////////////////////////
*/
use bankDB
go
/*-----检查是否已存在表userInfo:查询bankDB数据库中的系统表 sysobjects------*/
if exists(select*from sysobjects where name='userInfo')
drop table userInfo
go
use bankDB
create table userInfo
(
customerID int IDENTITY(1,1) not null,--顾客编号,标识列
customerName varchar(10) not null,--开户名
PID varchar(18) not null,--身份证号
Telephone varchar(13) not null,--联系电话
address varchar(100),--居住地址
)
go
select*from userInfo
go
/*---------------------------------添加约束----------------------------------*/
alter table userInfo add constraint PK_customerID primary key(customerID)--主键
alter table userInfo add constraint CK_PID check (len(PID)=18 OR Len(PID)=15)
--身份证号只能是15位或18位
alter table userInfo add constraint CK_Telephone check (
Telephone like '[0-9][0-9][0-9][-][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
or Telephone like '[0-9][0-9][0-9][0-9][-][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
or Telephone like'[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]')
--联系电话格式为xxxx-xxxxxxxx或手机号11位
go
/*-------------------------------插入测试数据--------------------------------*/
insert into userInfo(customerName,PID,Telephone,address)
values('张三',123456789012345,'010-67898978','北京海淀')
insert into userInfo(customerName,PID,Telephone)
values('李四',321245678912345678,'0478-44443333')
insert into userInfo(customerName,PID,Telephone,address)
values('张三',123456789012345,'010-67898978','北京海淀')
insert into userInfo(customerName,PID,Telephone)
values('李四',321245678912345678,'0478-44443333')
go
/*
///////////////////////////////////////////////////////////////////////////////
/////////// 银行卡信息表 cardInfo ////////////////////////////
///////////////////////////////////////////////////////////////////////////////
*/
use bankDB
go
/*------检查是否已存在表cardInfo:查询bankDB数据库中的系统表 sysobjects------*/
if exists(select*from sysobjects where name='cardInfo')
drop table cardInfo
go
use bankDB
create table cardInfo
(
cardID varchar(20) not null,--卡号,主键
curType varchar(20) not null,--货币种类
savingType varchar(8),--存款类型
openDate datetime not null,--存款日期
openMoney money not null,--开户金额
Balance money not null,--余额
Pass int not null,--密码
IsReportLoss varchar(2) not null,--是否挂失
customerID int not null,--顾客编号
)
go
select*from cardInfo
go
/*-----------------------------添加约束--------------------------------------*/
alter table cardInfo add constraint PK_cardID primary key(cardID)--主键
alter table cardInfo add constraint DF_curType default('RMB')for curType--货币种类默认为RMB
alter table cardInfo add constraint DF_openDate default(getDate()) for openDate --开户日期默认为当前日期
alter table cardInfo add constraint CK_openMoney check (openMoney >= 1)--开户金额默认为不小于1元
alter table cardInfo add constraint DF_Pass default(888888)for Pass--密码开户时默认为888888
alter table cardInfo add constraint CK_Pass check (len(Pass)=6)--密码开户时6位数字
alter table cardInfo add constraint DF_IsReportLoss default('否')for IsReportLoss--是否挂失默认为"否"
alter table cardInfo add constraint CK_savingType check(savingType in('活期','定期','定活两便'))--存款类型约束
alter table cardInfo add constraint CK_cardID check(cardID like'1010 3576 [0-9][0-9][0-9][0-9] [0-9][0-9][0-9][0-9]')
alter table cardInfo add constraint FK_customerID foreign key(customerID) references userInfo(customerID)
alter table cardInfo add constraint CK_IsReportLoss check(IsReportLoss in('是','否'))--是否挂失约束
go
/*-------------------------------插入测试数据--------------------------------*/
insert into cardInfo(cardID,savingType,openMoney,Balance,customerID)
values('1010 3576 1234 5678','活期',1000.00,1000.00,1)
insert into cardInfo(cardID,curType,openMoney,Balance,customerID)
values('1010 3576 1212 1134','活期',1.00,1.00,2)
go
/*
//////////////////////////////////////////////////////////////////////////////
/////////// 用户信息表 transInfo ////////////////////////////
//////////////////////////////////////////////////////////////////////////////
*/
use bankDB
go
/*-----检查是否已存在表transInfo:查询bankDB数据库中的系统表 sysobjects-----*/
if exists(select*from sysobjects where name='transInfo')
drop table transInfo
go
use bankDB
create table transInfo
(
cardID varchar(20) not null,--卡号
tranDate datetime not null,--交易日期
transType varchar(4) not null,--交易类型
transMoney money not null,--交易金额
remark varchar(300),--备注
)
go
select*from transInfo
go
/*----------------------------添加约束---------------------------------------*/
alter table transInfo add constraint DF_tranDate default(getdate())for tranDate--交易日期默认为当天日期
alter table transInfo add constraint CK_transType check(transType in('存入','支取'))--交易类型只能是存入或支出
alter table transInfo add constraint CK_transMoney check(transMoney>0)--交易金额大于0
alter table transInfo add constraint FK_cardID foreign key(cardID) references cardInfo(cardID)
go
/*-------------------------------插入测试数据--------------------------------*/
insert into transInfo(transType,cardID,transMoney)
values('支取','1010 3576 1234 5678',900.00)
update cardInfo set Balance=Balance-900 where cardID='1010 3576 1234 5678'
insert into transInfo(transType,cardID,transMoney)
values('存入','1010 3576 1212 1134',5000.00)
go
/*
///////////////////////////////////////////////////////////////////////////////////////
//////////////////// (常规业务模拟) ////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////
*/
/*-----------------------------------修改密码和银行卡挂失----------------------------*/
update cardInfo set pass=123456 where cardID='1010 3576 1234 5678'--修改卡号密码
update cardInfo set pass=123123 where cardID='1010 3576 1212 1134'--修改卡号密码
update cardInfo set IsReportLoss='是' where cardID='1010 3576 1212 1134'----银行卡挂失
go
/*----