版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、数据库技术应用课 程 设 计题目 银行ATM自动取款机系统 姓 名 吴源源 贺繁荣 严芳蕾 学 号 1107100111 1107100110 1107100112 班 级 电子商务(理)1101班 在所在学院 通信与信息工程学院 专 业 电子商务 指导教师 二0一三年 7月4日 课程设计任务书 指导教师评语 评语: 成绩: 指导教师 年 月 日领导审核意见 签章 年 月 日备 注目 录1、开发背景2、功能描述3、业务流程分析4、数据流程分析4.1、数据流程图4.2、数据字典5、概念模型设计6. 逻辑模型设计和优化7. 物理设计和实施7.1、创建表(字段、主键、索引、外键)7.2、创建视图 7
2、.3、创建触发器 7.4、创建包含事务处理的存储过程 7.5、创建用户自定义函数 8、JDBC访问数据库 9、课程设计心得体会参考文献1、开发背景 1.1目的与要求 通过数据库课程设计,进一步掌握数据库系统的理论和方法。培养和锻炼开发管理信息系统的能力。为今后信息系统开发打下良好的基础。 本课程环节主要针对电子商务数据库技术这门课程进行设计,数据库是一门应用性很强的专业课,在学习时必须注意理论与实践相结合。本次课程环节旨在培养学生在本课程范围内,初步掌握解决实际应用问题时所应具备的查阅资料、综合运用所学知识的能力,为毕业设计及今后从事专业工作打下基础。 本课程环节要求学生了解企业管理信息系统后
3、台数据库的设计、配置过程,掌握管理信息系统的开发方法。主要包括:需求分析、数据分析、系统逻辑模型设计方法;功能设计、物理模型设计方法;系统的实现等方法。完成一个小型系统后台数据库的设计与配置。 1.2数据需求随着社会的日益发展,银行在人们的日常生活扮演者重要的角色。ATM机给人们的日常生活带来了方便,它出现在各个街道角落里。ATM数据库系统使自动取款机机高速快捷的工作,不易发生数据丢失,统计错误,使ATM机更加安全方便。 1.3开发及运行环境 操作系统:Microsoft Windows XP 软件平台:Microsoft SQL Server 2000 硬件环境:服务器端P4/256MB/8
4、0GB以上,客户端PC 586/128MB/40MB以上2、功能描述 银行ATM自动取款机系统 模拟银行ATM自动取款机的操作。当用户插入有效的银行卡时,可以对用户的银行卡种类做出判断(借记卡还是信用卡)。提示用户输入密码,如果用户连续密码输入错误次数达到3次,则吞卡,并给用户一个友好的提示信息。如果用户可以进入系统,则用户可以实现取款、查询、存款、转账等业务。待用户的每次交易结束时,系统提示是否打印详单。用户交易结束,系统提示退卡操作,让用户可以退出银行卡。如果用户忘记退出银行卡,则系统在交易结束后120秒以后,自动吞卡。用户交易过程中,每操作时间不能超过90秒,否则系统吞卡。操作时间,可以
5、显示在界面上。所有交易中,用户存款,或者取款,转账等交易数据需要存储在数据库中。以方便用户未来的查询和系统的管理与维护。 系统功能模块图 ATM系统 取 查 存 转 款 询 款 账 3、业务流程分析 待机界面 ( 插入卡 ) 借记卡 信用卡 登陆界面 ( 输入密码退 卡等操作 ) 密码错误 选择界面 重新输入 ! ( 取款,查询,存 款,转账,取消等 ) 密码错误 取款 查询 存款 转账 重新输入! 输 交易完成界面 入 3 次 打印详单提示 错 误 提示退卡 超过120s未取卡 吞卡操作 退卡操作 (24h后请取卡!) (谢谢使用,再见!)4、数据流程分析 4.1、数据流程图 顶层数据流图
6、用户ATM存取款机系统 用户 银行卡 交易凭条0层数据流图用户4.退出2.选择操作1.输入密码用户 交易凭条3.操作类型 操作完成4.1打印凭条一层数据流图2.选择操作用户1.输入密码用户4.退出 3.3转账3.2存款 3.1取款 操作 完成 二层数据流图取款/存款: 用户存储信息 用户3.1.3提现金3.1.2货币种类3.1.1取款 现金查询: 用户存储信息 3.2.4账户3.2.3查询信息3.2.2货币种类3.2.1查询 转账: 用户存储信息 3.3.2卡内转账3.3.5记录3.3.4转入账号 3.3.1转账3.3.3卡外转账3.3.5确认3.3.5转账 4.2、数据字典用户表信息:use
7、rinfo 字段名称 说明customerID顾客编号自动编号(标识列),从开始,主键customerNAME顾客姓名必填PID身份证号必填,15位或18位,身份证号唯一约束telephone联系电话必填,格式*-*或手机号13位address居住地址可选输入银行卡信息:cardinfo字段名称 说明cardID卡号如某总行某支行等。假定该行要求其营业厅的卡号格式为:1010 3576 * *开始,每四位号码后有空格,卡号一般是随机产生curType货币种类必填,默认为RMBsavingType存款类型活期/定活两便/定期balance余额必填,不低于1元,否则将销户pass密码必填,6位数字
8、customerID顾客编号外键,必填,表示该卡对应的顾客编号,一般顾客允许办理多张卡号交易信息表:transinfo字段名称说明transDate交易日期必填,默认为系统当前日期cardID卡号必填,外键,可重复索引transType交易类型必填,“存款,取款,转账等”transMoney交易金额必填,大于0remark备注可选填入,其他说明5、概念模型设计a. 用户信息实体E-R图顾客姓名居住地址顾客编号 用户信息表实体身份证号联系电话b.银行卡信息实体E-R图货币种类卡号余额 银行卡信息表实体顾客编号存款类型密码c.交易信息实体E-R图交易日期卡号 交易信息表实体交易金额交易类型备注d.
9、总的信息实体E-R图 交易发生 银行卡 1 n n拥有 1 用户6. 逻辑模型设计和优化 7. 物理设计和实施 7.1、创建表(字段、主键、索引、外键)-1用户信息表userInfo-if exists (select * from sysobjects where name='userInfo')drop table userInfogocreate table userInfo(customerID int identity(1,1) not null,-顾客编号,自动编号(标识列),从开始,主键customerName varchar (8) not null , -开户
10、名PID varchar(18) not null, -身份证号,必填,只能是位或位,身份证号唯一约束telephone varchar(18) not null, -联系电话,必填,格式为xxxx-xxxxxxxx或手机号位address varchar(20) -居住地址,可选输入go-2银行卡信息表cardInfo-if exists (select * from sysobjects where name='cardInfo')drop table cardInfogocreate table cardInfo(cardID char (19) not null,-卡号
11、,必填,主健,银行的卡号规则和电话号码一样,一般前位代表特殊含义假定该行要求其营业厅的卡号格式为:3576 xxxx xxx开始,每位号码后有空格,卡号一般是随机产生.curType char(4) not null, -货币种类savingType char(8), -存款类型活期/定活两便/定期openDate datetime not null, -开户日期openMoney money not null, -开户金额balance money not null, -余额 pass int not null , -密码 IsReportLoss bit not null, -是否挂失 c
12、ustomerID int not null) -顾客编号)go-3交易信息表transInfo -if exists (select * from sysobjects where name='transInfo')drop table transInfogocreate table transInfo(transDate datetime not null,-交易日期,必填,默认为系统当前日期cardID char (19) not null,-卡号,必填,外健,可重复索引transType char(8) not null,-交易类型,必填,只能是存入/支取transMo
13、ney money not null,-交易金额,必填,大于remark text) -备注,可选输入,其他说明go-1用户信息表userInfo 添加约束-主键约束customerID 顾客编号自动编号(标识列)if exists (select * from sysobjects where name='pr_customerID')alter table userInfodrop constraint pr_customerIDalter table userInfoadd constraint pr_customerID primary key (customerID)
14、go-检查约束customerID 身份证号只能是位或位if exists (select * from sysobjects where name='ck_PID')alter table userInfodrop constraint ck_PIDalter table userInfoadd constraint ck_PID check (PID like '0-90-90-90-90-90-90-90-90-90-90-90-90-90-90-9'or PID like '0-90-90-90-90-90-90-90-90-90-90-90-9
15、0-90-90-90-90-90-9,x')go-唯一约束customerID身份证号if exists (select * from sysobjects where name='uq_PID')alter table userInfodrop constraint uq_PIDalter table userInfoadd constraint uq_PID unique(customerID)go-检查约束telephone电话号码格式为xxxx-xxxxxxxx或手机号位if exists (select * from sysobjects where name
16、='ck_telephone')alter table userInfodrop constraint ck_telephonealter table userInfoadd constraint ck_telephone check (telephone like '13,50-90-90-90-90-90-90-90-90-90-90-9' ortelephone like '00-90-90-9-0-90-90-90-90-90-90-90-9' ortelephone like '00-90-9-0-90-90-90-90-90-
17、90-90-9' )go-2银行卡信息表cardInfo 添加约束-主键约束cardID 卡号if exists (select * from sysobjects where name='pr_cardID')alter table cardInfodrop constraint pr_cardIDalter table cardInfoadd constraint pr_cardID primary key (cardID)go-检查约束cardID 卡号格式为:3576 xxxx xxx开始if exists (select * from sysobjects w
18、here name='ck_cardID')alter table cardInfodrop constraint ck_cardIDalter table cardInfoadd constraint ck_cardID check (cardID like '1010 3576 0-90-90-90-9 0-90-90-90-9')go-检查约束 存款类型活期/定活两便/定期if exists (select * from sysobjects where name='ck_savingType')alter table cardInfodr
19、op constraint ck_savingTypealter table cardInfoadd constraint ck_savingType check (savingType in('活期','定活两便','定期')go-默认约束curType货币种类默认RMBif exists (select * from sysobjects where name='df_curType')alter table cardInfodrop constraint df_curTypealter table cardInfoadd c
20、onstraint df_curType default ('RMB') for curType go-默认约束openDate开户日期默认为系统当前日期if exists (select * from sysobjects where name='df_openDate')alter table cardInfodrop constraint df_openDatealter table cardInfoadd constraint df_openDate default (getdate() for openDatego-检查约束openMoney开户金额不
21、低于元if exists (select * from sysobjects where name='ck_openMoney')alter table cardInfodrop constraint ck_openMoneyalter table cardInfoadd constraint ck_openMoney check (openMoney>=1)go-检查约束balance余额不低于元,否则将销户if exists (select * from sysobjects where name='ck_balance')alter table ca
22、rdInfodrop constraint ck_balancealter table cardInfoadd constraint ck_balance check (balance>=1)go-检查约束pass密码为位if exists (select * from sysobjects where name='ck_pass')alter table cardInfodrop constraint ck_passalter table cardInfoadd constraint ck_pass check (len(pass)=6)go-默认约束pass密码默认i
23、f exists (select * from sysobjects where name='df_pass')alter table cardInfodrop constraint df_passalter table cardInfoadd constraint df_pass default (888888) for passgo-默认约束IsReportLoss 是否挂失 是/否值,默认为”否”if exists (select * from sysobjects where name='df_IsReportLoss')alter table card
24、Infodrop constraint df_IsReportLossalter table cardInfoadd constraint df_IsReportLoss default (0) for IsReportLoss go-检查约束 IsReportLoss 是否挂失 只能为是/否值if exists (select * from sysobjects where name='ck_IsReportLoss')alter table cardInfodrop constraint ck_IsReportLossalter table cardInfoadd cons
25、traint ck_IsReportLoss check (IsReportLoss in (1,0)go-外键约束customerID 表示该卡对应的顾客编号,一位顾客允许办理多张卡号if exists (select * from sysobjects where name='fr_customerID')alter table cardInfodrop constraint fr_customerIDalter table cardInfoadd constraint fr_customerID foreign key (customerID) references us
26、erInfo(customerID)go-3交易信息表transInfo 添加约束-默认约束transDate交易日期,默认为系统当前日期if exists (select * from sysobjects where name='df_transDate')alter table transInfo drop constraint df_transDatealter table transInfo add constraint df_transDate default (getdate() for transDatego-外键约束cardID 卡号if exists (se
27、lect * from sysobjects where name='pr_cardID2')alter table transInfo drop constraint pr_cardID2alter table transInfo add constraint pr_cardID2foreign key (cardID) references cardInfo(cardID)go-检查约束transType 交易类型只能是存入/支取if exists (select * from sysobjects where name='ck_transType')alt
28、er table transInfodrop constraint ck_transTypealter table transInfoadd constraint ck_transType check (transType in('存入','支取')go-检查约束transMoney 交易金额大于if exists (select * from sysobjects where name='ck_transMoney')alter table transInfodrop constraint ck_transMoneyalter table tr
29、ansInfoadd constraint ck_transMoney check (transMoney>0)go/*5插入数据*/-1测试插入userInfo 用户信息表和cardInfo银行卡信息表数据-insert userInfo (customerName, PID ,telephone, address)values ( '张三','123456789012345','#39;,'北京海淀' )insert cardInfo (cardID ,savingType ,openMoney,bal
30、ance,customerID)values ('1010 3576 1234 5678','活期',1000,1000,identity)goinsert userInfo (customerName, PID ,telephone)values('李四','321245678912345678','#39;)insert cardInfo (cardID ,savingType ,openMoney,balance,customerID)values ('1010 3576 1212
31、 1134','定期',1 ,1 ,identity)-2测试手动取款交易插入交易信息表transInfo数据-测试手动添加交易表信息,更新卡号信息表中的数据declare cardid char(19)-定义变量cardid 卡号select cardid=cardId from cardInfo -从userInfo用户表中获取客户为张三的卡号cardIDwhere customerID in(select customerID from userInfo where customerName='张三')insert into transInfo (
32、transType,cardId,transMoney)values ('支取',cardid,900) -向交易信息表transInfo插入数据:张三支取900元卡号为cardId update cardInfo set balance =balance-900 -更改cardInfo银行卡信息表张三余额balance 减去where customerID in(select customerID from userInfo where customerName='张三')go-测试 手动添加交易表信息,更新卡号信息表中的数据declare cardid2 c
33、har(19)-定义变量cardid 卡号select cardid2=cardId from cardInfo -从userInfo用户表中获取客户为李四的卡号cardIdwhere customerID IN(select customerID from userInfo where customerName='李四')insert into transInfo (transType,cardId,transMoney)values ('存入',cardid2,5000) -向交易信息表transInfo插入数据:李四存入5000元卡号为cardid2 up
34、date cardInfo set balance =balance+5000 -更改cardInfo银行卡信息表李四余额balance 增加where customerID IN(select customerID from userInfo where customerName='李四')goselect * from cardInfoselect * from transInfo 7.2、创建视图 -7.创建视图,向用户展示友好界面,创建中文字段视图-7.1 userInfo表的视图if exists (select * from sysobjects where nam
35、e='view_userInfo')drop view view_userInfogocreate view view_userInfoas select 客户编号=customerID,开户名=customerName ,身份证号=PID,电话号码= telephone,居住地址=address from userInfogoselect * from view_userInfo -查看视图go-7.2 cardInfo 表的视图if exists (select * from sysobjects where name='view_cardInfo')dro
36、p view view_cardInfogocreate view view_cardInfoas select 卡号=cardID,货币种类=curType,存款种类=savingType,开户日期=openDate,余额=balance ,密码=pass,是否挂失=IsReportLoss,客户编码=customerIDfrom cardInfogoselect * from view_cardInfo -查看视图go-7.3 transInfo表的视图if exists (select * from sysobjects where name='view_transInfo
37、9;)drop view view_transInfogocreate view view_transInfoas select 交易日期=transDate,交易类型=transType,卡号=cardID,交易金额=transMoney,备注=remarkfrom transInfo goselect * from view_transInfo -查看视图 7.3、创建触发器 -8创建触发器-if exists (select * from sysobjects where name='trig_transInfo_insert')drop trigger trig_tra
38、nsInfo_insertgocreate trigger trig_transInfo_inserton transInfofor insertas -定义变量:cardID 交易卡号,transMoney 交易金额,transType 交易类型,balance 交易前余额newbalance交易后余额declare cardID char(19),transMoney money,transType char(8),balance money,newbalance money-获取要交易的交易卡号交易金额交易类型select cardID =cardID ,transMoney=trans
39、Money,transType=transType from inserted-获取交易前的余额select balance=balance from cardInfo where cardID=cardID if not exists (select * from cardInfo where cardID=cardID) -?没起作用 begin raiserror ('没有该用户',16,1) rollback tran return end -嵌套if 首先判断交易类型,如果是支取再判断余额是否足够交易 if (transType='存入') begin
40、 print '交易正在进行中,请稍候.' update cardInfo set balance=balance+transMoney where cardID=cardID print '存储成功,存储金额为'+convert(varchar(20),transMoney)-方法 SELECT newbalance=balance from cardInfo where cardID=cardIDPRINT '卡号'+convert(varchar(19),cardID)+'目前余额'+convert ( varchar(8)
41、,newbalance)endelse if (transType='支取')begin if(balance-transMoney<1)begin raiserror('支取失败,余额不足',16,1)print '卡号'+convert(varchar(19),cardID)+'目前余额'+convert ( varchar(8),balance)rollback tran-回滚事务,取消交易end else begin print '交易正在进行中,请稍候.'update cardInfo set ba
42、lance=balance-transMoney where cardID=cardIDprint '支取成功,支取金额为:'+convert(varchar(20),transMoney)-方法SELECT newbalance=balance from cardInfo where cardID=cardIDPRINT '卡号'+convert(varchar(19),cardID)+'目前余额'+convert ( varchar(8),newbalance)end end -8.1测试触发器:存入declare cardID2 char
43、(19)select cardID2=cardID from cardInfo where customerID in(select customerID from userInfo where customername='李四')if not exists (select * from cardInfo where cardID=cardID2)beginraiserror ('没有该用户',16,1)returnend insert into transInfo(cardID,transType, transMoney)values (cardID2,
44、9;存入',100)select *from transInfo -8.2测试触发器:支取declare card char(19)select card=cardID from cardInfo Inner join userinfo on cardInfo.customerID =userInfo.customerID where customername='张三'if not exists (select * from cardInfo where cardID=card)beginraiserror ('没有该用户',16,1)returnend
45、 insert into transInfo(cardID,transType, transMoney )values (card,'支取',200) select *from transInfo 7.4、创建包含事务处理的存储过程 -10创建存储过程-10.1取钱或存钱的存储过程-if exists (select * from sysobjects where name='proc_takeMoney')drop procedure proc_takeMoneygocreate procedure proc_takeMoney IDcard char(19)
46、,-交易卡号 m money,-交易金额 type char(8),-交易类型 inputpass char(6)=' '-取款密码asif (inputpass<>(select pass from cardInfo where cardID=IDcard) -判断密码是否相符begin raiserror ('密码错误,请核实',16,1)return end if not exists (select * from cardInfo where cardID=IDcard) -判断用户信息表中是否存在取钱或存钱的用户beginraiserror
47、 ('没有该用户',16,1)returnend insert transInfo (cardID,transType,transMoney) values (IDcard,type,m)insert into transInfo values(default,IDcard,type,m,default)go-测试:调用取钱或存钱的存储过程declare card char(19)select card=cardID from cardInfowhere customerID in(select customerID from userInfo where customername='张三')exec proc_takemoney card,300,'支取','123456' -调用过程,执行取钱select * from transInfogodeclare card2 char(19)select card2=cardID from cardInfowhere customerID in(select customerID from userInfo where customername='李四')
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年护理麻醉床考试题及答案
- 2026河南新乡市长垣市怀德小学教师招聘备考题库及完整答案详解一套
- 2026江西九江市田家炳实验中学临聘教师招聘2人备考题库及参考答案详解1套
- 2025广西南宁宾阳县“点对点”送工和乡村公岗专管员招聘1人备考题库及答案详解(易错题)
- 2025浙江义乌市昌德学校秋季教师招聘备考题库附答案详解
- 2025年思维逻辑面试题及答案
- 2025年建筑考试的题库及答案
- 2025年美女考试题及答案
- 2025年东软面试试题及答案
- 2026河南郑州大学河南省数字组工工程技术研究中心招聘非事业编制(劳务派遣)人员1人备考题库参考答案详解
- 2026年冀教版初一地理上册期末真题试卷+解析及答案
- 2026年孝昌县供水有限公司公开招聘正式员工备考题库及答案详解参考
- 2025年文化产业版权保护与运营手册
- 四川省乐山市高中高三上学期第一次调查研究考试数学试题【含答案详解】
- 《创新创业基础》课件-项目1:创新创业基础认知
- 2026年初一寒假体育作业安排
- 物流行业运输司机安全驾驶与效率绩效评定表
- 2026北京市通州区事业单位公开招聘工作人员189人笔试重点基础提升(共500题)附带答案详解
- 2025~2026学年山东省菏泽市牡丹区第二十一初级中学八年级上学期期中历史试卷
- 2026国家统计局仪征调查队招聘辅助调查员1人(江苏)考试参考试题及答案解析
- 水利工程施工质量检测方案
评论
0/150
提交评论