关于银行系统的数据库课程设计.docx

上传人:小飞机 文档编号:1647640 上传时间:2022-12-12 格式:DOCX 页数:16 大小:275.61KB
返回 下载 相关 举报
关于银行系统的数据库课程设计.docx_第1页
第1页 / 共16页
关于银行系统的数据库课程设计.docx_第2页
第2页 / 共16页
关于银行系统的数据库课程设计.docx_第3页
第3页 / 共16页
关于银行系统的数据库课程设计.docx_第4页
第4页 / 共16页
关于银行系统的数据库课程设计.docx_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《关于银行系统的数据库课程设计.docx》由会员分享,可在线阅读,更多相关《关于银行系统的数据库课程设计.docx(16页珍藏版)》请在三一办公上搜索。

1、目录一、目的与意义1二、设计内容与要求1三、设计原理11、数据库基本操作:1、定义基本表1、修改基本表1III、删除基本表2IV、数据查询2V、插入元组2VI、修改数据2VII、删除数据22、数据库完整性3I、实体完整性定义3II、参照完整性定义33、触发器3I、定义触发器3II、激活触发器4III、删除触发器44、存储过程4I、PL/SQL的块结构4II、变量常量的定义4III、控制结构5IV、存储过程的用户接口5四、总体设计方案6五、详细设计61、需求分析62、流程图63、E-R图74、设计表75、关系图86、编码8六、测试与调试11七、收获与体会15八、主要参考资料15一、目的与意义本课

2、程设计是在学完数据库系统与应用课程之后,让学生综合应用数据库知识,设计数据库,进行调试与测试,以加深对数据库基本知识及SQL语言的理解,提高综合应用知识的能力、分析解决问题的能力,加强数据库知识的实践技能,初步培养开发实用数据库系统的能力。二、设计内容与要求设计一个银行账户管理系统,至少能够实现存款、取款、查询、转账等基本功能,要求在在数据库实现过程中至少建立三张表、不得少于四个查询、三个触发器、使用至少一个存储过程。三、设计原理SQL是一种介于关系代数与关系演算之间的结构化查询语言,其功能并不仅仅是查询。SQL是一个通用的、功能极强的关系数据库语言。它之所以能够为用户和业界所接受,并成为国际

3、标准,是因为它是一个综合的、功能极强同时又简捷易学的语言。SQL语言集数据查询(Data Query)、数据操纵(Data Manipulation)、数据定义(Data Definition)和数据控制(Data Control)功能于一体。1、数据库基本操作:、定义基本表语句格式:CREATE TABLE ( , , ); 如果完整性约束条件涉及到该表的多个属性列,则必须定义在表级上,否则既可以定义在列级也可以定义在表级。 、修改基本表语句格式: ADD 完整性约束 DROP ALTER COLUMN ; III、删除基本表语句格式:DROP TABLE RESTRICT| CASCADE

4、; RESTRICT:删除表是有限制的。欲删除的基本表不能被其他表的约束所引用,如果存在依赖该表的对象,则此表不能被删除。CASCADE:删除该表没有限制。在删除基本表的同时,相关的依赖对象一起删除。IV、数据查询语句格式:SELECT ALL|DISTINCT , FROM , WHERE GROUP BY HAVING ORDER BY ASC|DESC ; V、插入元组语句格式:INSERT INTO (,) VALUES ( , ) 功能:将新元组插入指定表中。VI、修改数据语句格式: UPDATE SET =,= WHERE ; 功能:修改指定表中满足WHERE子句条件的元组。VII

5、、删除数据语句格式: DELETE FROM WHERE ; 功能:删除指定表中满足WHERE子句条件的元组。WHERE子句:指定要删除的元组。缺省表示要删除表中的全部元组,表的定义仍在字典中。2、数据库完整性I、实体完整性定义单属性构成的码有两种说明方法:定义为列级约束条件;定义为表级约束条件。对多个属性构成的码只有一种说明方法:定义为表级约束条件。插入或对主码列进行更新操作时,RDBMS按照实体完整性规则自动进行检查。包括:. 检查主码值是否唯一,如果不唯一则拒绝插入或修改。. 检查主码的各个属性是否为空,只要有一个为空就拒绝插入或修改。II、参照完整性定义在CREATE TABLE中用F

6、OREIGN KEY短语定义哪些列为外码,用REFERENCES短语指明这些外码参照哪些表的主码。参照完整性违约处理:.拒绝(NO ACTION)执行-默认策略 .级联(CASCADE)操作 .设置为空值(SET-NULL) 对于参照完整性,除了应该定义外码,还应定义外码列是否允许空值。3、触发器触发器(Trigger)是用户定义在关系表上的一类由事件驱动的特殊过程,由服务器自动激活,可以进行更为复杂的检查和操作,具有更精细和更强大的数据控制能力。I、定义触发器语法格式: CREATE TRIGGER BEFORE | AFTER ON FOR EACH ROW | STATEMENT WHE

7、N II、激活触发器触发器的执行,是由触发事件激活的,并由数据库服务器自动执行,一个数据表上可能定义了多个触发器。同一个表上的多个触发器激活时遵循如下的执行顺序: .执行该表上的BEFORE触发器; .激活触发器的SQL语句; .执行该表上的AFTER触发器。III、删除触发器语法格式: DROP TRIGGER ON ; 触发器必须是一个已经创建的触发器,并且只能由具有相应权限的用户删除。 4、存储过程I、PL/SQL的块结构.定义部分 DECLARE -变量、常量、游标、异常等 定义的变量、常量等只能在该基本块中使用,当基本块执行结束时,定义就不再存在。.执行部分 BEGIN -SQL语句

8、、PL/SQL的流程控制语句 EXCEPTION -异常处理部分 END;II、变量常量的定义.PL/SQL中定义变量的语法形式是:: 变量名 数据类型 NOT NULL:=初值表达式或 变量名 数据类型 NOT NULL初值表达式 .常量的定义类似于变量的定义:: 常量名 数据类型 CONSTANT :=常量表达式 常量必须要给一个值,并且该值在存在期间或常量的作用域内不能改变。如果试图修改它,PL/SQL将返回一个异常。.赋值语句 变量名称:= 表达式III、控制结构.条件控制语句 IF-THEN,IF-THEN-ELSE和嵌套的IF语句:A. IF condition THEN Sequ

9、ence_of_statements; END IF B. IF condition THEN Sequence_of_statements1; ELSE Sequence_of_statements2; END IF; C. 在THEN和ELSE子句中还可以再包括IF语句,即IF语句可以嵌套。.循环控制语句A.最简单的循环语句LOOP LOOP Sequence_of_statements; END LOOP; 多数数据库服务器的PL/SQL都提供EXIT、BREAK或LEAVE等循环结束语句,保证LOOP语句块能够结束。B. WHILE-LOOP WHILE condition LOOP

10、Sequence_of_statements; END LOOP; 每次执行循环体语句之前,首先对条件进行求值,如果条件为真,则执行循环体内的语句序列,如果条件为假,则跳过循环并把控制传递给下一个语句。C. FOR-LOOP FOR count IN REVERSEbound1 bound2 LOOP Sequence_of_statements; END LOOP;.错误处理: 如果PL/SQL在执行时出现异常,则应该让程序在产生异常的语句处停下来,根据异常的类型去执行异常处理语句。SQL标准对数据库服务器提供什么样的异常处理做出了建议,要求PL/SQL管理器提供完善的异常处理机制。IV、存

11、储过程的用户接口. 创建存储过程: CREATE Procedure 过程名(参数1,参数2,.) AS ; 过程名:数据库服务器合法的对象标识。参数列表:用名字来标识调用时给出的参数值,必须指定值的数据类型。参数也可以定义输入参数、输出参数或输入/输出参数。默认为输入参数。过程体:是一个。包括声明部分和可执行语句部分。. 执行存储过程: CALL/PERFORM Procedure 过程名(参数1,参数2,.); 使用CALL或者PERFORM等方式激活存储过程的执行。在PL/SQL中,数据库服务器支持在过程体中调用其他存储过程。. 删除存储过程 DROP PROCEDURE 过程名();四

12、、总体设计方案首先进行需求分析和结构设计,确定该系统的一些功能要求及数据的存储方法,画出流程图以及E-R图。然后根据需求分析所得的流程图及E-R图设计表,确定属性。再用SQL语言编写程序实现操作。最后对系统进行调试与测试,确定系统是否完成设计要求。五、详细设计1、需求分析银行账户管理系统主要用于用户的一些操作,包括存款、取款、查询、转账等基本操作,主要涉及到银行与用户两个实体,还有交易这个联系。2、流程图3、E-R图4、设计表Bank表:表示银行信息,属性有名称,网点,存款总额。其中网点号为主码。Customer表:表示客户信息,属性有账号,姓名,ID,开户时间,账户余额,开户银行,银行网点。

13、其中账号为主码。trade表:用于记录每次交易信息,属性有流水号,姓名,账号,交易项目,交易金额,交易时间,交易对象,余额,上次余额,网点。其中流水号为主码。5、关系图建立关系图其中customer表的外码银行网点参照引用bank表的主码网点;trade表的外码账号参照引用customer表的主码账号;trade表的外码网点参照引用bank表的主码网点。6、编码CREATE TRIGGER totle ON dbo.user_customerafter UPDATE AS if update(银行)update 总存款额 set 存款总额 = (select SUM(余额) from user

14、_inform where 银行总存款额.银行=customer.银行)CREATE TRIGGER 交易项目 ON dbo.tradeafter UPDATE AS if update(余额)if (select 余额 from trade where 流水号=(select max(流水号) from trade) ) (select 上次余额 from trade where 流水号=(select max(流水号) from trade)update trade set 交易项目=支入 where 流水号=(select max(流水号) from trade) and 账号=(sel

15、ect 账号 from trade where 流水号 = (select max(流水号) from trade)elseupdate trade set 交易项目=支出 where 流水号=(select max(流水号) from trade) and 账号=(select 账号 from trade where 流水号 = (select max(流水号) from trade)CREATE TRIGGER 交易余额 ON dbo.tradeafter UPDATEAS if update(交易金额)beginupdate trade set 余额= (select 账户余额 from

16、 customer where 账号 = (select 账号 from trade where 流水号 = (select max(流水号) from trade) where 流水号 = (select max(流水号) from trade)end;CREATE proc 交易 card varchar(18)asbegininsert trade(交易时间,账号,姓名,余额,上次余额) select getdate(),card,姓名,账户余额,账户余额 from customer a where a.账号=cardendGOCREATE PROCEDURE 存款(card varch

17、ar(18),cke money)ASBEGIN exec 交易 cardupdate customer set 账户余额=(账户余额+cke) where 账号=cardupdate trade set 交易金额=cke where 账号=card and 流水号=(select max(流水号) from trade where 账号=card )select * from customer where 账号=cardRETURN;END;GOCREATE procedure 开户 name varchar(20),id varchar(18),card varchar(18) outpu

18、t,bal moneyasbegin select card=60+substring(ltrim(str(rand(),30,30),len(ltrim(str(rand(),30,30)-15,6) insert customer(开户时间,姓名,ID,账号,账户余额) values (getdate(),name,id,card,bal) print 账号创建成功,你的账号为:+cardendGOCREATE PROCEDURE 查询(card varchar(18)ASBEGIN exec 交易 cardupdate trade set 交易项目=查询 where 账号=card an

19、d 流水号=(select max(流水号) from trade where 账号=card )select * from customer where 账号=cardselect * from trade where 账号=cardRETURN;END;GOCREATE PROCEDURE 转账(card1 varchar(18),card2 varchar(18),zze money)ASBEGIN exec 交易 card1update customer set 账户余额=(账户余额-zze) where 账号=card1if( (select 账户余额 from customer w

20、here 账号=card1 )0 ) begin print 余额不足! update customer set 账户余额=(账户余额+zze) where 账号=card1 endelsebeginupdate trade set 交易项目=转出 where 账号=card1 and 流水号=(select max(流水号) from trade where 账号=card1 )update trade set 交易金额=zze where 账号=card1 and 流水号=(select max(流水号) from trade where 账号=card1 )select *from cu

21、stomer where 账号=card1select * from trade where 账号=card1exec 交易 card2update customer set 账户余额=(账户余额+zze) where 账号=card2update trade set 交易项目=转入 where 账号=card2 and 流水号=(select max(流水号) from trade where 账号=card2 )update trade set 交易金额=zze where 账号=card2 and 流水号=(select max(流水号) from trade where 账号=card

22、2 )select * from customer where 账号=card2select * from trade where 账号=card2endRETURN;END;GOCREATE PROCEDURE 取款(card varchar(18),qke money)ASBEGIN exec 交易 cardupdate customer set 账户余额=(账户余额-qke) where 账号=cardif( (select 账户余额 from customer where 账号=card )0 ) begin print 账户余额不足! update customer set 账户余额

23、=(账户余额+qke) where 账号=card endelsebeginupdate trade set 交易项目=取款 where 账号=card and 流水号=(select max(流水号) from trade where 账号=card )update trade set 交易金额=qke where 账号=card and 流水号=(select max(流水号) from trade where 账号=card )select * from customer where 账号=cardendRETURN;END;GO六、测试与调试进过设计与编码,基本已经将设计要求的功能做到

24、,为了进一步确定系统功能的完整性以及应对错误的情况的处理机制,要进行相应的测试与调试。调试过程中要做到以下几项工作:测试主要功能是否达到要求;进行错误的操作,检查系统的应对机制是否达到要求;进一步加强系统的功能,增加一些附加功能。一些操作过程的截图如下:七、收获与体会经过一周的课程设计,我的收获颇多。刚开始的时候我感到无从下手,很多问题都没有头绪,对于课程的理解不够,想了很久都没什么思路,甚至想到放弃或者抄袭,但想想自己这样做那就一点收获都没有了,所以还是硬着头皮往下做。后来经过老师的帮助和自己专研看书,在查阅了一些资料之后终于有了一些想法,并且逐步逐步的向下设计,慢慢完成要求,完善系统。其实

25、数据库是一项很有用的技术,现代社会凡是用到计算机的地方几乎都有数据库的存在,我想我们作为一个学习通讯的学生对于数据库的知识是必须掌握的,这对于我们未来是至关重要的,这是将来很多工作的基础。课程设计作为一个实践环节,对于我们更好的掌握课本知识是很有利的,如果少了这个环节,我们仅仅是学理论,纸上谈兵,华而无实,无法体会到数据库的应用,这是很糟糕的,同时也不利于我们掌握书本上的理论知识。因为课程设计我教学环节所必须的一部分希望今后能多增加一些这样的环节,让我们更好的应用所学的理论,同时也让我们体会到知识的强大,因为我们用自己所学的东西亲手做一些东西并实现一些功能是相当有成就感的。八、主要参考资料数据库系统概论(第四版) 王珊 萨师煊 高等教育出版社 2007年11月15

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号