收藏 分享(赏)

数据库ATM自动取款机系统.doc

上传人:精品资料 文档编号:10947801 上传时间:2020-01-26 格式:DOC 页数:26 大小:547KB
下载 相关 举报
数据库ATM自动取款机系统.doc_第1页
第1页 / 共26页
数据库ATM自动取款机系统.doc_第2页
第2页 / 共26页
数据库ATM自动取款机系统.doc_第3页
第3页 / 共26页
数据库ATM自动取款机系统.doc_第4页
第4页 / 共26页
数据库ATM自动取款机系统.doc_第5页
第5页 / 共26页
点击查看更多>>
资源描述

1、长 沙 学 院课 程 设 计 说 明 书题目 ATM 系统系(部) 计算机科学与技术系专业(班级) 软件五班姓名学号指导教师起止日期 2013.6.132013.06.221实训任务书课程名称:服务外包软件综合实训设计题目:ATM 系统已知技术参数和设计要求:1实训目的要求通过本实训,应能够对 SQLServer20005 工具的了解,与数据库语法的能力。1) 了解 SQL 的简史和功能特性。2) 掌握 E-R 图的绘制和数据库的设计。3) 掌握 T-SQL 的语法知识,并能够熟练运用它。4) 掌握事务与存储过程的使用。2问题描述(功能要求):本次案例将完成一个 ATM 银行取款机系统的数据库

2、。(1) 创建 BankDB 数据库。并保存在 D:ATM 文件夹下。(2) 创建用户信息表( userinfo)(3) 创建银行卡信息表(cardinfo )(4) 创建交易信息表( transinfo)(5) 添加各种约束关系: 为 userinfo 表中客户 ID(customerID)添加主键约束。 为 userinfo 表中客户的身份证( PID)添加唯一约束 为 useinfo 表中的身份证号码添加检查约束,长度为 15 或者 18 为 userinfo 表中的客户电话号码添加检查约束。 为 cardinfo 表中的卡号 ID(cardID )添加主键约束 为 cardinfo 表

3、中的卡号 ID(cardID )添加约束,必须是以 1010 3576开头,长度为 12 为 cardinfo 表中的货币类型(curType )添加默认约束,默认为 RMB。 为 cardinfo 表中的存款类型添加约束,只能是活期、定活两便和定期 。2 cardinfo 表中开卡日期默认为当天日期。 cardinfo 表中的开户金额不能低于 1 元。 cardinfo 表中的余额不能低于 1 元。 cardinfo 表中的密码长度为 6 位数。默认为 88888。 cardinfo 表中是否挂失只能是是和否 。默认为否 添加 userinfo 表与 cardinfo 表的外键约束。 tra

4、nsinfo 表中的交易日期默认为当天。 交易类型只能是存入和支取 。 添加 cardinfo 表与 transinfo 表的外键约束。(6)开户(7)取钱(8)存钱(9)查询余额(10)转账(11)交易统计3. 运行环境要求:(1)客户端:windows 操作系统,SQL Server 2005 数据库客户端(2)服务器:SQL Server 2005 数据库服务器、4. 技术要求:1)掌握 E-R 图的绘制和数据库的设计。2) 掌握 T-SQL 的语法知识,并能够熟练运用它。3) 掌握事务与存储过程的使用。4) 触发器(选做)设计工作量:40 课时工作计划:(1) 2011 级软件工程所有

5、班级20 课时: 设计,计算机系机房/普通教室。316 课时:上机、调试。计算机系机房4 课时:答辩。计算机系机房。班级 日期 节次 地点 内容 指导老师15 周周四 9-12节 致远楼 1201 布置任务、上机 调试15 周周五 9-12节 致远楼 1201 上机调试15 周周六 9-12节 致远楼 1201 上机调试16 周周一 9-12节 致远楼 1401 上机调试16 周周二 9-12节 致远楼 1401 上机调试16 周周三 9-12节 致远楼 1401 上机调试16 周周四 9-12节 致远楼 1201 上机调试16 周周五 9-12节 致远楼 1201 上机调试16 周周六 5-

6、8 节 致远楼 1404 上机调试11 软件 5班16 周周六 9-12节 致远楼 1201 答辩曾俊勇指导教师签名: 日期: 教研室主任签名: 日期: 系主任签名: 日期: 4长沙学院课程设计鉴定表姓名 学号 专业 软件工程 班级 软件五班设计题目 ATM 自动取款机系统 指导教师 曾俊勇指导教师意见:评定等级: 教师签名: 日期: 答辩小组意见:评定等级: 答辩小组长签名: 日期: 教研室意见:教研室主任签名: 日期: 系(部)意见:系主任签名: 日期: 说明 课程设计成绩分“优秀” 、 “良好” 、 “及格” 、 “不及格”四类;5目 录一、引言 61.1 编写目的 .61.2 参考资料

7、 6二、 需求规约 72.1 业务描述 72.2 需求分析 7三、 数据库环境说明 8四、 数据库的命名规则 84.1 数据库对象命名规则 84.2 数据项编码规则 8五、 逻辑设计 95.1 E-R 图 .95.2 关系模型 9六、 物理设计 106.1 表汇总 106.2 表1: USERINFO 表( 用户信息表 ) 106.3 表2: CARDINFO 表( 银行卡信息表) 116.4 表3: TRANSINFO 表( 供应表) 126.5 存储过程的设计 136.6 触发器的设计 18七、操作结果 207.1 存款测试结果 207.2 取款测试结果 207.3 转账测试结果 217.

8、4 注销结果测试 .21八、事物设计 238.1 事物的创建 23总结 256一、引言1.1 编写目的通过数据库 ATM 实训,进一步掌握数据库系统的理论和方法。培养和锻炼开发管理信息系统的能力。为今后信息系统开发打下良好的基础。本文档是 ATM 系统设计文档的组成部分,数据库是一门应用性很强的专业课,在学习时必须注意理论与实践相结合。本次课程环节旨在培养学生在本课程范围内,初步掌握解决实际应用问题时所应具备的查阅资料、综合运用所学知识的能力,为毕业设计及今后从事专业工作打下基础。本课程环节要求学生了解企业管理信息系统后台数据库的设计、配置过程,掌握管理信息系统的开发方法。主要包括:需求分析、

9、数据分析、系统逻辑模型设计方法;功能设计、物理模型设计方法;系统的实现等方法。完成一个小型系统后台数据库的设计与配置。目的是:明确数据库的表名、字段名等数据信息,用来指导后期的数据库脚本的开发,设计该数据库的目的是设计一个 ATM 系统,能够按照一定条件查询、统计交易信息,可以模拟完成开户、存款、取款、转账、注销、挂失、激活、修改密码、查询等业务。1.2 参考资料资料名称 作者 文件编号、版本数据库系统概论 王珊、萨师煊 2006 年 5 月第 4版数据库设计入门经典 鲍威尔 2007 年 3 月第 1版数据库原理 克罗恩科 2005 年 6 月第 1版7二、 需求规约2.1 业务描述ATM

10、系统业务是模拟了银行 ATM 提款机业务的管理功能。在计算机网络,数据库和先进的开发平台上,利用数据库 sql 语言模拟开发一个良好的 ATM 系统,实现顾客的开户、存款、取款、查询、转账、修改密码等一系列操作。并且在完成一定的操作后保存数据的更新和查询。在转账和取款时还要核对余额是否足够,在足够的条件下才能执行。存储内容则是存储用户的一些信息,如电话号码和身份证号码等,一些用户的详细资料,还有卡号表中的金额的信息,并对这些信息能够及时更新。2.2 需求分析开户功能:新客户需要开户之后才能拥有相应的卡,并对其进行各种交易。在存入一定金额后可以登录或跳转到交易的界面,进行各种交易。存款功能:客户

11、要能够正确地存款,能够准确地更新客户账号中的余额,并且记录客户的操作。 取款功能:判断客户的余额是否大于取款金额,避免出现溢出现象,操作结果记录在表中。转账功能: 准确核对客户的账户信息,核对转入账号的信息,判断转出账号的余额是否大于转出金额,避免出现溢出现象,并记录转出账号和转入账号的操作。注销功能:老用户可在此注销自己原有的卡。挂失功能:当客户遗失自己卡后,需对卡进行挂失操作,否则该卡的余额取不出。激活功能:客户遗失自己卡并找到卡后,可对卡进行激活操作,以便继续使用该卡。8修改密码功能:客户可在此功能下修改卡的原始密码。查询功能: 查询客户余额 ;查询客户的账号信息 ;查询客户的操作记录;

12、三、 数据库环境说明数据库实例数据库系统 数据库部署环境数据库设计工具数据库存放位置说明ATM 自动取款机系统Sql Server 2008Windows 2007Sql Server 存放位置,绝对路径/相对路径用于 ATM 自动取款四、 数据库的命名规则4.1 数据库对象命名规则4.2 数据项编码规则数据库对象 命名规则 备注表 字符串功能描述字符串 例如:Client 客户信息表视图 _View 功能描述字符串 例如:all_view 每个客户订单数视图触发器 _trigger 功能描述字符串 例如:Decre_trigger 减少库存触发器存储过程 proce_ 功能描述字符串 例如:

13、proce_SearchClient 查询客户信息存储过程 数据项 命名规则 数据类型 长度范围 备注编号类 整数序号 整型 0-65535 无姓名类 字符串 Varchar(20) 0-20 位 无地址类 字符串 Varchar(20) 0-20 位 无电话类 字符串 Char(11) 11 位 无9五、 逻辑设计5.1 E-R 图用户信息表户名 顾客编号 顾客编号PID联系电话 居住地址银行卡信息表表卡号密码 货币类型是否挂失余额顾客编号开户金额开户日期属于交易信息表属于交易日期 交易金额交易类型卡号备注1NMN交易号价格类 浮点型 float 无 无时间类 Datetime 型 Date

14、time 无 2011-01-01 10:10:10105.2 关系模型注:下划线为主码,下划波浪线为外码用户(顾客编号,开户名,身份证号码,联系电话,居住地址)银行卡(卡号,顾客编号,密码,开户金额,开户日期,是否挂失,余额,存款类型,货币类型)交易(交易号,卡号,交易金额,交易日期,交易类型,备注)六、 物理设计6.1 表汇总表名 功能说明表 userinfo 用户信息表,存储用户信息等表 cardinfo 银行卡信息表,存储银行卡信息等表 transinfo 交易信息表,存储客户的交易信息信息等6.2 表1: userinfo 表( 用户信息表)表名 用户信息表(userinfo)数据库

15、用户 sa主键 customer_ID其他排序字段 无索引字段 无序号 字段名称 数据类型(精度范围)允许为空Y/N唯一Y/N区别度默认值约束条件/说明1 customer_ID int N Y 无 无 identity(1,1)主键/客户编号2 customer_name char(10) N N 无 无 客户姓名3 P_ID varchar(18)N Y 无 无 check(len(P_ID)=15 or len(P_ID)=18)身份证号码4 customer_phone varchar(11)Y N 无 无 check(customer_phone like 0-90-90-90-90

16、-90-90-90-90-90-90-9 )11联系电话5 customer_addressvarchar(50) Y N 无 无 居住地址sql 脚本 create table userinfo(customer_ID int identity(1,1) primary key,-顾客编号customer_name char(10) not null,-开户名P_ID varchar(18) unique check(len(P_ID)=15 or len(P_ID)=18) not null,-身份证号码customer_phone varchar(11) check(customer_p

17、hone like 0-90-90-90-90-90-90-90-90-90-90-9 ),-联系电话customer_address varchar(50) -居住地址 );6.3 表2: cardinfo 表( 银行卡信息表)表名 银行卡信息表(cardinfo)数据库用户 sa主键 card_ID其他排序字段 无索引字段 无序号 字段名称 数据类型(精度范围)允许为空 Y/N唯一Y/N区别度默认值约束条件/说明1 card_ID char(19) N Y 无 无 check(card_ID like 1010 3576 0-90-90-90-9 0-90-90-90-9)主键/卡号2 c

18、ustomer_ID int N Y 无 无 外键/顾客编号3 card_password char(6) N N 无 无 default 888888 check(len(card_password)=6)密码4 open_money money N N 无 无 check(open_money=1)开户金额5 open_date datetime N N 无 无 default getdate() 开户日期6 isreportloss char(2) Y N 无 无 default 否 check(isreportloss=是 or isreportloss=否 )挂失状态7 balanc

19、e money N N 无 无 check(balance=1)余额8 saving_type varchar(10 N N 无 无 check(saving_type like 活期 12) or saving_type like 定活两便 or saving_type like定期)存款类型9 cur_type char(5) N N 无 无 default RMB /货币类型sql 脚本 create table cardinfo(card_ID char(19) check(card_ID like 1010 3576 0-90-90-90-9 0-90-90-90-9) primar

20、y key,-卡号customer_ID int,-顾客编号card_password char(6) not null default 888888 check(len(card_password)=6),-卡密码open_money money not null check(open_money=1),-开户金额open_date datetime default getdate() not null, -开户日期isreportloss char(2) default 否 check(isreportloss=是 or isreportloss=否), -是否挂失balance mone

21、y not null check(balance=1), -余额saving_type varchar(10) not null check(saving_type like 活期 or saving_type like 定活两便 or saving_type like 定期),- 存款类型cur_type char(5) not null default RMB ,-货币类型foreign key (customer_ID) references userinfo(customer_ID)on delete cascadeon update cascade);6.4 表3: transinf

22、o 表(供应表)表名 交易信息表(transinfo )数据库用户 sa主键 trans_ID其他排序字段 无索引字段 无序号 字段名称 数据类型(精度范围)允许为空Y/N唯一Y/N区别度默认值约束条件/说明1 trans_ID int N Y 无 无 identity(1,1)主键/交易号2 card_ID char(19) N Y 无 无 check(card_ID like 1010 3576 0-90-90-90-9 0-90-90-90-9)外键/ 卡号3 trans_money money N N 无 无 check(trans_money0)/交易金额4 trans_date d

23、etetime N N 无 无 defaultgetdate()交易日期5 trans_type varchar(5) N N 无 无 check(trans_type like 存入 13or trans_type like 支取)交易类型6 remark varchar(50) Y N 无 无 备注sql 脚本 create table transinfo(trans_ID int identity(1,1) primary key,-交易号card_ID char(19) not null check(card_ID like 1010 3576 0-90-90-90-9 0-90-90

24、-90-9) ,-卡号trans_money money not null check(trans_money0),-交易金额trans_date datetime not null defaultgetdate(),-交易日期trans_type varchar(5) check(trans_type like 存入 or trans_type like 支取),-交易类型remark varchar(50), -备注foreign key (card_ID) references cardinfo(card_ID)on delete cascadeon update cascade)6.5

25、 存储过程的设计1、开户存储过程- 提示:银行卡卡号共 19 位(4 位数一组,中间用空格隔开) ,对于某个银行来说,前面 8 个数字是固定的,后面 8 个数字-要求随机的,并且唯一。我们只需要产生 8 位随机的数字,然后和前 8 位固定的数字“10103576”连接即可。随机函数的用法下:-RAND(随机种子):将产生 01 的随机数,要求每次的随机种子不一样。为了保证随机种子每次不相同,一般的算法如下:- 随机种子=当前的月份数100000 + 当前秒数1000 + 当前毫秒数-产生了 01 的随机数后,我们取小数点后 8 位,即:0.xxxxxxxx-使用 substring(字符串,开

26、始位置,长度)create procedure proc_CardID2randCardID char(19) output, -输出参数-银行卡号card_password char(6), -账号密码open_money money, -开户金额isreportloss char(2), -是否挂失saving_type varchar(10), -存款类型cur_type char(5), -货币类型customer_name char(10), -用户姓名P_ID varchar(18) -身份证号AS14declare r numeric(15,8) -15 位数,保留 8 位小数d

27、eclare tempStr char(10)select r=rand(datepart(mm,getdate()*100000)+(datepart(ss,getdate()*1000)+datepart(ms,getdate()set tempStr=rset randCardID=1010 3576 +substring(tempStr,3,4)+ +substring(tempStr,7,4)-若存在该客户信息declare customer_ID intif EXISTS(select * from userinfo where P_ID=P_ID) begin - 禁用 CHEC

28、K 约束alter table cardinfonocheck constraint ALL; select customer_ID=customer_ID from userinfo where(P_ID=P_ID )insert into cardinfo(card_ID,customer_ID,card_password,open_money,open_date,isreportloss,balance,saving_type,cur_type) values(randCardID,customer_ID,card_password,open_money,getdate(),isrepo

29、rtloss,open_money,saving_type,cur_type)- 启用 CHECK 约束alter table cardinfocheck constraint ALL;endelsebeginprint需注册用户信息!请先登记您的详细信息 end-执行存储过程:declare randCardID char(19)exec proc_CardID2 randCardID output,123456,109,否, 活期,RMB,曲先生,421411188001230314print 您的卡号为:+randCardID2、存钱存储过程在存储过程中定义三个变量,card_ID ch

30、ar(19), inputmoney money 和card_password char(6),这三个变量是用来核对账号的。 card_ID char(19)用来核对卡号是否正确,inputmoney money 暂时存储需要存入的金额,card_password char(6)则是用来核对密码的。存储过程中对所有需要核对的信息都进行了准确的核对,例如核对账号是否处于挂失状态,核对账号密码是否正确。在核对完所有的信息之后才准确地完成操作。存钱存储过程如下:create procedure proc_inputMoneycard_ID char(19),inputmoney money ,car

31、d_password char(6)as15declare errorsum intset errorsum=0declare isreportloss char(2)select isreportloss=isreportloss from cardinfo where card_ID=card_ID and card_password=card_passwordif(isreportloss=是)beginprint 交易正在进行中 print 帐户处于挂失状态则不可以存款 endelse if (cast(inputmoney as int)%10010000)begin print 交

32、易正在进行中 print 存款金额不能大于 10000endelsebeginbegin transactionupdate cardinfo set balance=balance+inputmoney where card_ID=card_ID and card_password=card_passwordinsert transinfo(card_ID,trans_money,trans_date,trans_type,remark) values (card_ID,inputmoney ,getdate(),存入 ,无)declare money moneyselect money=b

33、alance from cardinfo where card_ID=card_ID and card_password=card_passwordprint 交易正在进行中 print 卡号:+card_ID+ 余额+convert(char(19),money)print 交易成功if(error0)-判断取款金额是否为 100 的整数倍beginprint 交易正在进行中 print 取款金额应为 100 的整数倍endelsebegindeclare money moneyselect money=balance from cardinfo where card_ID=card_ID

34、and card_password=card_passwordif(takemoneymoney) -取款金额不能超过卡上余额begin print 交易正在进行中 print 余额不足 17end elsebeginupdate cardinfo set balance=balance-takemoney where card_ID=card_ID and card_password=card_passwordinsert transinfo(card_ID,trans_money,trans_date,trans_type,remark) values (card_ID,takemoney

35、 ,getdate(),支取, 无)declare balance money -余额select balance=balance from cardinfo where card_ID=card_ID and card_password=card_passwordif(error 1) -验证余额begininsert transinfo(card_ID,trans_money,trans_date,trans_type,remark) values (card_ID,transmoney,getdate(),支取,无)update cardinfoset balance=balance-t

36、ransmoneywhere card_ID=card_ID and balance-transmoney0update cardinfo -转账进钱,加上转出的金额set balance=balance+transmoneywhere card_ID2=card_ID insert transinfo(card_ID,trans_money,trans_date,trans_type,remark) values (card_ID2,transmoney,getdate(),存入,无)print 恭喜您,转账成功!commit tranif (error0)-判断取款金额是否为 100 的整

37、数倍beginprint 交易正在进行中 24print 取款金额应为 100 的整数倍endelsebegindeclare money moneyselect money=balance from cardinfo where card_ID=card_ID and card_password=card_passwordif(takemoneymoney) -取款金额不能超过卡上余额begin print 交易正在进行中 print 余额不足 end elsebeginupdate cardinfo set balance=balance-takemoney where card_ID=c

38、ard_ID and card_password=card_passwordinsert transinfo(card_ID,trans_money,trans_date,trans_type,remark) values (card_ID,takemoney ,getdate(),支取, 无)declare balance money -余额select balance=balance from cardinfo where card_ID=card_ID and card_password=card_passwordif(error0) -判断是否发生错误begin rollback tr

39、ansaction-出现错误则事物回滚endelse begincommit transaction-正确运行着提交事物print 交易正在进行中print 卡号:+card_ID + 余额+convert(char(19),balance) print 交易成功 endend endendend25总结实训整个过程,非常感谢老师和组员给予的帮助和指导,谢谢你们的帮助。这次实训是分小组进行的,除了我们小组共同写的表和一些表的自定义和约束条件,其他则是根据组长分好任务,每个小组成员写一部分,有问题或者不知道的地方一起讨论解决。很感谢我们的小组成员,我是我们组最差的一个,也就是遇到问题最多的一个,

40、我们组的成员都帮了我很多,让我受益匪浅。我做的是实训比较简单的部分,是注销部分,在用户注销卡号时触发注销用户信息。虽然我的内容简单,但是我在实训中也学到了良多。在实训整个过程中,学会最深的不仅仅是掌握了 SQL 语句和在自己出错的那部分事务的学习上,最重要的是对实训的整个过程有所了解。相信通过次的实训,对以后的数据库以及涉及到这方面的内容的学习已经打下了良好的基础。实训是一次自我的最好测试,是检验和完善自己的一次最好机会。这次实训经过自己和同组成员的努力,实现要求。先做简单的设计,一步步的再做其它要求,在实际操作过程中犯的一些错误还会有意外的收获,感觉实训很有意思。在具体操作中对这学期所学的数

41、据库的理论知识得到巩固,达到实训的基本目的,也发现自己的不足之出,在以后的上机中应更加注意,同时体会到数据库具有的语句简洁,使用灵活,执行效率高等特点。发现上机实训的重要作用特别是经过小组成员讨论的出的结果很有成就感。通过实际操作,学会数据库 sql 语言的基本步骤、基本方法,开发了自己的逻辑思维能力,培养了分析问题、解决问题的能力。深刻体会到“没有做不到的,只有想不到的” , “团结就是力量” , “实践是检验真理的标准”的寓意。 在此希望以后应多进行这样的实训,加长设间,培养我们独立思考问题的能力,提高实际操作水平。更深刻的意识到清晰的思路能够使程序简单明了并且经过多次的调试与编译,最终程序的运行结果达到自己的要求。在设计和创建表的时候,对表添加约束,身份证和电话的约束的创建,与组员一起讨论后,总体的思路还是有了的。通过实训的练习,强化自己对所学知识的掌握及对问题分析和任务定义的理解,对每到题目作出了相应的逻辑分析和数据库语言的选择,通过对任务的分析,加强对sql 语言的了解。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报