ATM自动取款机系统课程设计说明书.doc
长 沙 学 院课程设计说明书题目 ATM自动取款机系统 系(部) 计算机科学与技术系 专业(班级) 软件B班 姓名 熊犇 学号 2010022B21 指导教师 徐长梅 起止日期 2011-12-5至2012-3-17 课程设计任务书课程名称:工程实训三设计题目:ATM自动取款机系统已知技术参数和设计要求:本次案列将完成一个银行取款机系统的数据库。(1) 创建数据库BankDB数据库。并保存在D:文件夹下。(2) 创建用户信息表(userinfo)。(3) 创建银行卡信息表(cardinfo)。(4) 创建交易信息表(transinfo)。(5) 为userinfo表中的客户ID(customer)添加主键约束。(6) 为userinfo表中的客户身份证(PID)添加唯一约束。(7) 为userinfo表中的身份证号码添加检查约束,长度为或(8) 为cardinfo表中的客户电话号码添加检查约束。(9) 为cardinfo表中的卡号ID(cardID)添加主键约束。(10) 为cardinfo表中的卡号ID(cardID)添加约束,必须是以10103576开头,长度为12。(11) 为cardinfo表中的货币类型(cur_type)添加默认约束,默认是(12) 为cardinfo表中的存款类型添加约束,只能是活期、定期、定活两便。(13) cardinfo表中的开卡日期默认是当天日期。(14) cardinfo表中的开户金额不能低于元。(15) cardinfo表中的余额不能低于元。(16) cardinfo表中的密码长度为位数。默认是888888。(17) cardinfo表中是否挂失只能是是和否。默认是否。(18) 添加userinfo表与cardinfo表的外间约束。(19) transinfo表中的交易日期默认是当天。(20) 交易类型只能是存入和支取。(21) 添加cardinfo表与transinfo表的外键约束。各阶段具体要求:1、需求分析阶段l 定义数据项的含义和取值l 定义目标系统的数据流2、概念结构设计阶段l 画出实体模型E-R图3、逻辑结构设计阶段l 将实体模型转化为关系模型l 给出每个关系的主关键字和函数依赖集l 分析你所设计的关系数据库模式是否属于3NF4、物理设计阶段l 确定所有字段的名称、类型、宽度、小数位数及完整性约束 l 确定数据库及表的名称及其组成 l 确定索引文件和索引关键字5、数据库安全及维护设计阶段l 设计一个适合的数据库安全策略(用户身份认证、访问权限、视图)l 为了实现复杂的数据完整性约束,设计适当的触发器l 设计一个适合的数据库备份策略6、实施阶段l 要求所有操作必须在查询分析器中用SQL语句或系统存储过程完成。设计工作量:(1)软件设计:完成问题陈述中所提到的所有需求功能。(2)论文:要求撰写不少于3000个文字的文档,详细说明各阶段具体要求。工作计划:安排两周时间进行课程设计,软件开发步骤如下,第一周完成14,第二周完成58,论文同步进行;1)选定题目2)需求分析3)概念结构设计4)逻辑结构设计5)物理设计6)数据库安全及维护设计7)数据库上机实现8)答辩长沙学院课程设计鉴定表姓名熊犇学号2010022B21专业软件工程班级软件B班设计题目ATM自动取款机系统指导教师徐长梅指导教师意见:评定等级: 教师签名: 日期: 答辩小组意见:评定等级:答辩小组长签名:日期:教研室意见:教研室主任签名: 日期: 系(部)意见:系主任签名:日期:说明课程设计成绩分“优秀”、“良好”、“及格”、“不及格”四类;项目实训(三)工作计划表周 次实训内容备 注第一周(2011.12.52011.12.10)1 实训启动召集项目组学生开会明确实训的内容和要求2 布置任务2011.12.7系会议室第二周(2011.12.122011.12.17)1 数据库设计答疑:致远楼1603第三周(2011.12.192011.12.24)1分组自学数据建模工具软件PowerDesigner2检查各组自学情况答疑:致远楼1603学习情况汇报:2011.12.2314:3016:30致远楼1603第四周(2011.12.262011.12.30)1讲解ATM自动存取款机系统数据库设计2讲解ATM自动存取款机系统存储过程设计方法2011.12.298:0011:40致远楼14012011.12.2913:3017:00涵虚楼A1103第五周(2012.2.272012.3.3)1创建数据库2创建数据表3定义完整性约束² 讲评4编写催款提醒 Proc_BusinessRemind5编写获得密码 Proc_GetPass6编写开户 Proc_ OpenAccount7编写修改密码 Proc_UpdatePass² 讲评8创建随机卡号Proc_ RandCardID9银行卡挂失处理 Proc_ ReportLoss10查看本周的办卡信息Proc_ SelCreateCardOneWeek 11查询某卡前一周的交易信息Proc_ SelACardTransInfoOneWeek12查看所有挂失的用户信息 Proc_ SelReporLossCardInfo² 讲评13查询单笔消费最高的卡号Proc_ Proc_SelVolumeHighestCard14统计银行的资金流通余额和盈利结算Proc_ Statistics15用户存款和取款Proc_ TakeMoney² 讲评² 讲解事务控制方法16银行转帐Proc_ Transfer17设计触发器(选作)² 讲评2012.2.2713:3017:00致远楼14022012.2.2813:3017:00致远楼14022012.2.2913:3017:00致远楼14022012.3.113:3017:00致远楼14022012.3.213:3017:00致远楼1402第六周(2012.3.52012.3.10)1分组答辩评审2提交各阶段设计文档时间地点待定第七周(2012.3.122012.3.17)结项1 实训总结2提交实训报告单致远楼1603注意事项n 提交文档Ø 长沙学院课程设计任务书(每学生1份)Ø 长沙学院课程设计论文(每学生1份)Ø 长沙学院课程设计鉴定表(每学生1份)指导教师签名: 日期: 教研室主任签名: 日期:系主任签名: 日期:摘要此设计是一个自动取款机系统,运用了SQL Server2008作为开发环境。以及运用了数据库设计中的建表、创建存储过程等知识 。实现对自动取款机系统的如转账、开户、存取钱、查看信息、盈利结算等功能的模拟。能够查看、修改用户信息、银行卡信息等。该程序设计全部实现其要求的功能,经检测,功能实现正确。目 录一、引言11.1编写目的11.2参考资料1二、需求规约12.1业务描述12.2需求分析2三、数据库环境说明3四、数据库的命名规则44.1数据库对象命名规则44.2数据项编码规则4五、逻辑设计55.1 E-R图:55.2关系模型:65.3规范化分析6六、数据库设计76.1概念模型设计76.2物理模型设计76.3导入SQLServer200086.4表汇总86.5表86.6视图的设计116.7创建约束116.8触发器的设计136.9存储过程的设计14七、总结20参考文献21一、引言1.1编写目的本文档是M自动取款机系统系统设计文档的组成部分,编写数据库设计文档的目的是:明确数据库的表名、字段名等数据信息,用来指导后期的数据库脚本的开发,本文档遵循自动取款机系统系统数据库设计和开发规范。本文档的读者对象是需求人员、系统设计人员、开发人员、测试人员。1.2参考资料资料名称作者文件编号、版本数据库系统概论王珊、萨师煊2006年5月第4版二、 需求规约2.1业务描述本次案列将完成一个银行取款机系统的数据库。(1) 创建数据库BankDB数据库。并保存在D:文件夹下。(2) 创建用户信息表(userinfo)。(3) 创建银行卡信息表(cardinfo)。(4) 创建交易信息表(transinfo)。(5) 为userinfo表中的客户(customerID)添加主键约束。(6) 为userinfo表中的客户身份证(PID)添加唯一约束。(7) 为userinfo表中的身份证号码添加检查约束,长度为或(8) 为cardinfo表中的客户电话号码添加检查约束。(9) 为cardinfo表中的卡号(cardID)添加主键约束。(10) 为cardinfo表中的卡号(cardID)添加约束,必须是以10103576开头,长度为(11) 为cardinfo表中的货币类型(cur_type)添加默认约束,默认是(12) 为cardinfo表中的存款类型添加约束,只能是活期、定期、定活两便。(13) cardinfo表中的开卡日期默认是当天日期。(14) cardinfo表中的开户金额不能低于元。(15) cardinfo表中的余额不能低于元。(16) cardinfo表中的密码长度为位数。默认是。(17) cardinfo表中是否挂失只能是是和否。默认是否。(18) 添加userinfo表与ccardinfo表的外间约束。(19) transinfo表中的交易日期默认是当天。(20) 交易类型只能是存入和支取。(21) 添加cardinfo表与transinfo表的外键约束。2.2需求分析2.2.1数据分析: 数据项分析:数据项含义类型长度小数位数customerID顾客编号intcustomer_name开户名varchar16PID身份证号varchar20telephone联系电话varchar14address居住地址varchar50isLogout是否注销char2cardID卡号varchar20cur_type货币类型varchar10saving_type存款类型varchar10open_date开户日期datetimeopen_money开户金额moneybalance余额moneypass密码varchar6is_report_loss是否挂失char2isTurnoff是否关闭char2trans_date交易日期datetimetrans_type交易类型varchar5trans_money交易金额moneyremark备注信息varchar50transID交易流水号int 数据结构分析:数据结构组成成员用户信息顾客编号+开户名+身份证号+联系电话+居住地址+是否注销银行卡信息卡号+货币类型+存款类型+开户日期+开户金额+余额+用户密码+挂失否+顾客编号+是否关闭交易信息交易日期+卡号+交易类型+交易金额+备注信息2.2.2功能分析: 1、催款提醒功能 2、获得密码功能 3、修改密码功能 4、创建随机卡号功能 5、开户功能 6、银行卡挂失处理功能 7、查看本周的办卡信息功能 8、查看某卡本周的交易信息功能 9、查看所有挂失卡号的用户信息功能 10、查询单笔消费最高的卡号功能 11、统计银行的资金流通余额和盈利结算功能 12、用户存款和取款功能 13、银行转帐功能三、 数据库环境说明数据库实例数据库系统数据库部署环境数据库设计工具数据库存放位置说明bankDB.mdfSQL Server 2008Windows XP系统、 PC、G:2010022B27ATM自动取款机系统四、 数据库的命名规则4.1数据库对象命名规则数据库对象命名规则userinfo表名以info字段结尾 cardinfo表名以info字段结尾transinfo表名以info字段结尾view_userinfoview_功能描述字符串view_cardinfoview_功能描述字符串view_transinfoview_功能描述字符串proc_randCardIDproc_ 功能描述字符串proc_openAccountproc_ 功能描述字符串pro_BusinessRemindproc_ 功能描述字符串proc_Getpassproc_ 功能描述字符串proc_updatePassproc_ 功能描述字符串proc_reportLossproc_ 功能描述字符串proc_SelCreateCardOneWeekproc_ 功能描述字符串proc_SelReporLossCardInfoproc_ 功能描述字符串proc_SelVolumeHighestCardproc_ 功能描述字符串proc_Statisticsproc_ 功能描述字符串proc_ TakeMoneyproc_ 功能描述字符串proc_Transferproc_ 功能描述字符串4.2数据项编码规则数据项含义类型长度小数位数customer_name开户名varchar16PID身份证号varchar20telephone联系电话varchar14address居住地址varchar50isLogout是否注销char2cardID卡号varchar20cur_type货币类型varchar10saving_type存款类型varchar10open_date开户日期datetimeopen_money开户金额moneybalance余额moneypass密码varchar6is_report_loss是否挂失char2isTurnoff是否关闭char2trans_date交易日期datetimetrans_type交易类型varchar5trans_money交易金额moneyremark备注信息varchar50transID交易流水号int五、 逻辑设计5.1 E-R图:用户信息表户名顾客编号顾客编号PID联系电话居住地址银行卡信息表表卡号密码货币类型是否挂失余额顾客编号开户金额开户日期开户金额属于交易信息表属于交易日期交易金额交易类型卡号备注1NMN5.2关系模型:用户信息(顾客编号(PK),开户人姓名,身份证号,联系电话,居住地址)银行卡信息(卡号(PK),货币类型,存款类型,开户日期,开户金额,余额,密码,挂失否,顾客编号(FK))交易信息(交易日期,卡号(FK),交易类型,交易金额,备注信息) 5.3规范化分析用户信息表函数依赖关系: 顾客编号开户人姓名 顾客编号 身份证号 顾客编号 联系电话顾客编号居住地址 身份证号 开户人姓名 身份证号 联系电话因为用户信息表的关系的非主属性中不存在部分依赖和传递依赖关系,所以说用户信息表表是3NF的。银行卡信息表函数依赖关系: 卡号 密码 卡号 开户日期 卡号 存款类型 卡号 开户金额 卡号 余额因为银行卡信息表的关系的非主属性中不存在部分依赖和传递依赖关系,所以说银行卡信息表是3NF的。交易信息表函数依赖关系: (卡号,交易日期) 交易金额 (卡号,交易日期) 交易类型 (卡号,交易日期) 备注信息因为交易信息表的关系的非主属性中不存在部分依赖和传递依赖关系,所以说机票表是3NF的。综上所述,可知本系统设计是符合3NF规范的。六、 数据库设计6.1概念模型设计概念模型设计图6.2物理模型设计物理模型设计图6.3导入SQLServer2000导入图6.4表汇总表名功能说明userinfo 用户信息包括:顾客编号、用户姓名、身份证号、联系电话、居住地址,是否注销cardinfo银行卡的基本信息,包括:卡号、密码、开户日期、存款类型、开户金额、余额、货币类型、挂失否、顾客编号,是否关闭transinfo交易信息包括:交易日期、卡号、交易金额、交易类型、备注信息6.5表 用户信息表:表名userinfo数据库用户DBA、Jiangbing主键customerID其他排序字段customerID、customer_name、索引字段customer_name序号字段名称数据类型(精度范围)允许为空Y/N唯一Y/N区别度默认值约束条件/说明1customerIDintNY高无顾客编号、主键2customer_nameVarchar(20)NN低无开户人姓名3PIDVarchar(20)NN高无身份证号4telephoneVarchar(14)NN低无联系电话5addressVarchar(50)YN低无居住地址6isLogoutchar(2)NN低否是否注销sql脚本 -创建用户信息表 create table userinfo ( customerID int identity(1,1) not null,-自动编号,标识列 customerName varchar(16) not null,-开户人姓名 PID varchar(18) not null,-身份证号码 telephone varchar(14) not null,-联系电话 address varchar(50),-居住地址 isLogout char(2) not null -是否注销 )备注 customerID 自增标识列,PID的长度为18或15银行卡信息表:表名cardinfo数据库用户DBA、Jiangbing主键cardID其他排序字段CardID、open_date、customerID索引字段customerID序号字段名称数据类型(精度范围)允许为空Y/N唯一Y/N区别度默认值约束条件/说明1cardIDVarchar(20)NY高无卡号、主键2cur_typeVarchar(10)NN低RMB存款类型3saving_typeVarchar(10)NN低无存款类型4open_datedatetimeNY低当天开户日期5Open_moneymoneyNN低无开户金额6balancemoneyYN低无余额7passVarchar(6)NY低888888密码8is_report_loss char(2)NN低否挂失否9customerIDintNY高无顾客编号10isTurnoffChar(2)NY高否是否关闭sql脚本-创建银行卡信息表 create table cardinfo ( cardID char(20) not null,-卡号 curType varchar(10) not null,-货币类型 savingType varchar(10) not null,-存款类型 openDate datetime not null,-开户日期 openMoney money not null,-开户金额 balance money not null,-余额 pass int not null,-用户密码 IsReportLoss char(2) not null,-是否挂失 customerID int not null, -顾客编号 isTurnoff char(2) not null -是否关闭 )备注cur_type只能是定期、活期、定活两便,open_money不能小于1元,balance不能小于1元,pass长度为6交易信息表:表名tansinfo数据库用户DBA、Jiangbing主键tans_date、cardID其他排序字段cardID|索引字段cardID序号字段名称数据类型(精度范围)允许为空Y/N唯一Y/N区别度默认值约束条件/说明1trans_datedatetimeNY高当天交易日期、主键2cardIDVarchar(20)NY高无 卡号、外键3trans_typevarchar(5)NN低无交易类型4tans_moneymoneyNN低无交易金额5remarkVarchar(50)YN低无备注信息sql脚本-创建交易信息表 create table transinfo ( transDate datetime not null,- 交易日期 cardID char(20) not null,-卡号 transType varchar(5) not null,-交易类型 transMoney money not null,-交易金额 remark varchar(50),-备注信息 transID int identity(1,1) not null, -交易流水号 ) CREATE INDEX index_cardID ON transinfo (cardID)备注trans_type只能是支取和存取,trans_money必须大于1元6.6视图的设计为userinfo表、cardinfo表、transinfo表1、view_flight的创建 -用户表创建视图 create view view_userinfo as select 客户编号=customerID,开户名=customer_name,身份证号=PID, 联系电话=telephone,居住地址=address from userinfo -银行卡表创建视图 create view view_cardinfo as select 卡号=cardID,货币类型=cur_type,存款类型=saving_type, 开户日期=open_date,开户金额=open_money,余额=balance, 密码=pass,是否挂失=is_report_loss,客户编号=customerID from cardinfo -交易表创建视图 create view view_transinfo as select 交易日期=trans_date,卡号=cardID,交易类型=trans_type, 交易金额=trans_money,备注=remark from transinfo6.7创建约束 alter table transinfo add constraint pk_transID primary key(transID) -为userinfo 表中客户ID添加主键约束 alter table userinfo add constraint pk_customerID primary key(customerID) -为userinfo 表中客户身份证号PID添加唯一约束 alter table userinfo add constraint uq_PID unique (PID) alter table userinfo -为userinfo 表中客户PID添加check约束 add constraint ck_PID check(len(PID)=15 or len(PID)=18) alter table userinfo -为userinfo 表中客户telephone添加check约束 add constraint ck_telephone check( telephone like'0-90-90-90-9-0-90-90-90-90-90-90-90-9' or telephone like '0-90-90-90-90-90-90-90-90-90-90-9' or telephone like'0-90-90-9-0-90-90-90-90-90-90-90-9') alter table cardinfo -为cardinfo 表中cardID添加主键约束 add constraint pk_cardID primary key(cardID) alter table cardinfo -为cardinfo 表中客户cardID添加check约束 add constraint ck_cardID check( cardID like '1010 3576 0-90-90-90-9 0-90-90-90-9') alter table cardinfo -为cardinfo 表中curType添加默认值 add constraint df_curType default('RMB') for curType alter table cardinfo -为cardinfo 表中客户savingType添加check约束 add constraint ck_savingType check( savingType like '活期' or savingType like '定活两便' or savingType like '定期' ) alter table cardinfo -为cardinfo 表中openDate添加默认值 add constraint df_openDate default(getdate() for openDate alter table cardinfo -为cardinfo 表中客户openMoney添加check约束 add constraint ck_openMoney check(openMoney>=1) alter table cardinfo -为cardinfo 表中客户balance添加check约束 add constraint ck_balance check(balance>=1) alter table cardinfo add -为cardinfo 表中客户pass添加check约束 constraint ck_pass check(len(pass)=6), constraint df_pass default(888888) for pass alter table cardinfo add -为cardinfo 表中客户IsReportLoss添加check约束 constraint ck_IsReportLoss check(IsReportLoss='是'or IsReportLoss='否'), constraint df_IsReportLoss default('否') for IsReportLoss alter table cardinfo -设置customerID为外键约束 add constraint fk_customerID foreign key(customerID) references userinfo(customerID) -为交易日期设置默认值 alter table transinfo add constraint df_transDate default(getdate() for transDate -约束交易类型 alter table transinfo add constraint ck_transType check(transType like '存入' or transType like '支取') -约束交易最低金额 alter table transinfo add constraint ck_transMoney check(transMoney>0) -设置cardid为外键约束 alter table transinfo add constraint fk_cardID foreign key(cardID) references cardinfo(cardID) -向userinfo插入信息 insert into userinfo (customerName,PID,telephone,address) values('张三','123456789912345','010-92348678','北京海定') insert into userinfo (customerName,PID,telephone,address) values('李四','789012345123456','010-98978678','null') -向cardinfo插入信息 insert into cardinfo (cardID,curType,savingType, openMoney, balance,pass,customerID) values( '1010 3576 1234 5678','RMB','活期',1000,1000,123456,1) insert into cardinfo (cardID,curType,savingType, openMoney, balance