大数据库oracle银行管理系统.docx

上传人:b****3 文档编号:27558805 上传时间:2023-07-02 格式:DOCX 页数:38 大小:129.66KB
下载 相关 举报
大数据库oracle银行管理系统.docx_第1页
第1页 / 共38页
大数据库oracle银行管理系统.docx_第2页
第2页 / 共38页
大数据库oracle银行管理系统.docx_第3页
第3页 / 共38页
大数据库oracle银行管理系统.docx_第4页
第4页 / 共38页
大数据库oracle银行管理系统.docx_第5页
第5页 / 共38页
点击查看更多>>
下载资源
资源描述

大数据库oracle银行管理系统.docx

《大数据库oracle银行管理系统.docx》由会员分享,可在线阅读,更多相关《大数据库oracle银行管理系统.docx(38页珍藏版)》请在冰豆网上搜索。

大数据库oracle银行管理系统.docx

大数据库oracle银行管理系统

 

摘要

 随着计算机的飞速发展及应用领域的扩大,特别是计算机网络和电子商务的发展,极大的改变了商业银行传统的经营模式。

能够为客户提供方便、快捷、安全的服务,也能够有效的降低银行的营运成本,这是银行存储系统追求的目标。

目前,对于现代化银行运营的要求是客户可以实现方便安全的业务交易,银行职员可以进行高效合理的工作管理,实现银行业务电子化。

方便用户快速的进行存款、取款、修改密码以及完成一些转账的交易,大大提高办公效率,能够及时、准确、有效的帮用户办理各种繁琐的手续,也减缓了银行工作人员的压力。

1、设计银行管理系统结构图

1.1系统结构图

 

 

银行系统

账户管理

财务管理

信息查询

开户

修改密码

账户挂失

销户

存款

取款

转账

余额查询

 

图1.1系统结构图

2、银行管理系统E-R图和表结构

2.1E-R图

 

开户名

身份证号

联系电话

住址

开户信息表

开户

开户名

身份证号

联系电话

 

 

图2.1

 

卡号

货币种类

存款类型

开户日期

开户金额

余额

密码

是否挂失

开户

交易

用户编号

交易信息表

交易日期

交易类型

卡号

交易金额

图2.2

2.2表结构

通过对银行管理系统的需求分析,应该为该系统设计3个表,分别为用户信息表、银行卡信息表和交易信息表。

用户信息表用于存储用户的基本信息,包括用户的编号、开户名、身份证号、联系电话和家庭住址等信息

表2.1用户信息表

字段名称

字段描述

数据类型

长度

约束

customer

用户编号

Number

4

主键

customer

开户名

Varhcar2

20

必填

PID

身份证号

Varchar2

18

必填

telephone

联系电话

Varchar2

13

必填

Address

家庭地址

Varchar2

50

银行卡信息表用于存储银行卡相关的信息主要包括卡号、存储的货币类型,存款方式,开户时间,开户金额,余额、银行卡密码、是否挂失和用户编号等信息,

表2.2银行卡信息表

字段名称

字段描述

数据类型

长度

约束

cardID

卡号

Varchar2

20

主键

curType

货币种类

Varhcar2

10

必填

SavingType

存款类型

Varchar2

8

非空

Opendate

开户日期

DATETIME

必填

openmoney

开户金额

Number

8

必填

Balance

帐户余额

Number

8

必填

Isreportloss

是否挂失

Varchar2

2

必填

Customer

开户编号

Varchar

4

外键

交易信息表用于存储用户的交易记录,主要包括交易日期,卡号、交易类型,交易金额等信息。

表2.3交易信息表

字段名称

字段描述

数据类型

长度

属性

Transdate

交易日期

Datetime

PK

cardID

卡号

Varhcar2

20

非空

transTYPE

交易类型

VARCHAR2

4

非空

transMoney

交易金额

NUMBER

4

非空

remark

备注

VARCHAR2

50

非空

三、创建系统数据表

3.1创建表空间和用户

使用system用户连接数据库后,创建表空间space_zqp,指定数据文件为D:

\Bank.dbf,代码如下图:

图3.1表空间和用户

3.2创建用户信息表并添加约束

用户信息表保存了用户的基本信息,该表的创建语句如下,

CREATETABLEuserInfo

customerIDNUMBER(4)NOTNULL,

customerNameVARCHAR2(20)NOTNULL,

PIDVARCHAR2(18)NOTNULL,

telephoneVARCHAR2(13)NOTNULL,

addressVARCHAR2(50)

PARTITIONBYHASH(PID)

PARTITIONpid1,

PARTITIONpid2,

PARTITIONpid3,

);

ALTERTABLEuserInfo

ADDCONSTRAINTPK_customerIDPRIMARYKEY(customerID)

ADDCONSTRAINTUK_PIDUNIQUE(PID)

ADDCONSTRAINTCK_PIDCHECK(LENGTH(PID)=18ORLENGTH(PID)=15)

ADDCONSTRAINTCK_telephoneCHECK(

telephoneLIKE'[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

LENGTH(telephone)=13);

------------------创建可以自动生成自增主列的序列customerid_seq

CREATESEQUENCEcustomerid_seq

STARTWITH1

INCREMENTBY1

NOCACHE

如上述语句所示,在userInfo表中包含用户编号(customerid)、开户名(customername)、身份证号(PID)、联系电话(telephone)、家庭住址(address)。

其中,customerid为主键,自增(从1开始);PID只能是18位或15位,并且是唯一的;telephone必须是xxxx-xxxxxxxx的格式或13位的手机号码。

图3.2用户信息表

3.3创建银行卡信息表

银行卡信息表(cardinfo)中包含了卡号(cardid),货币种类(curType),存款类型(savingtype),开户日期(opendate),开户金额(openmoney),余额(balance),密码(pass),是否挂失(isREPORTLOSS)和用户编号(customerID)的信息。

其中,cardID为主键,必须为10103756xxxxxxxx的格式;CURTYPE默认为RMB,openmoney必须不能低于一元;balance也必须不能低于一元;pass默认为88888888;ISREPORTLOSS的值必须是“是/否”中之一,默认为否;customerID为外键,引用userInfo表中的customerID列。

图3.3

3.4创建交易信息表

交易信息表中包含了五个字段,分别为transdate(交易日期),cardID(卡号)、TRANSTYPE(交易类型),transmoney(交易金额)和remark(备注)。

其中,transdate默认为系统当前日期;cardid位外键,引用cardinfo表中的cardid列,可重复;transtype只能是“存入/取出”之一;transmoney必须大于0.

图3.4交易信息表

四、模拟常规业务操作

4.1建立更新账号触发器

结果如下:

图4.1创建beforeupdate触发器

4.2存取款交易操作

当用户办理取款或存款业务时,不仅需要向交易信息表中添加一条交易记录,还需要修改当前账户中的余额,如果办理取款业务,如果将当前账户总的余额减去支取余额,如果办理托管业务,多叫当前账户中的金额加上存款金额。

在交易信息表中包含一个名为transtype的字段,该字段用于表示交易类型,取值范围必须是存入或者自取,因此可以为transINFO表创建BEFOREINSERTR触发器。

根据要办理里的交易类型,判断出当前的交易类型,如果transtype字段值为“支取”,则表示要办理取款业务,检测当前余额是否大于或等于要支取的金额,如果满足条件,则要修改cardinfo表中的balance字段值,将该字段值减去交易金额(transmoney),如果transtype字段值为“存入”,则表示要办理存款业务,修改cardinfo表中的balance字段值,将该值加上交易金额(transmoney)。

代码如下:

reateorreplacetriggertrig_trans

beforeinsertorupdate

ontransinfo

foreachrow

declare

my_balancenumber;

rate_exceptionexception;

begin

selectbalanceintomy_balancefromcardinfowherecardid=:

new.cardid;

if:

new.transtype='支取'then

ifmy_balance<:

new.transmoney-1then

dbms_output.put_line('对不起,您的余额不足!

');

return;

elsifmy_balance>:

new.transmoney-1then

updatecardinfosetbalance=balance-:

new.transmoneywherecardId=:

new.cardId;

endif;

elsif:

new.transtype='存入'then

updatecardinfosetbalance=balance+:

new.transmoneywherecardid=:

new.cardId;

endif;

dbms_output.put_line('交易成功!

');

exception

whenrate_exceptionthen

raise_application_error(-20001,'交易失败');

end;

select*fromcardInfo_vw;

insertintotransInfo(transdate,cardID,transType,transMoney)

values(sysdate,'1010357688886666','存入',1000);

commit;

4.3用户开户

根据身份证号查询是否在该行开过户,为万无一失,还需要查询生成的卡号是否已经被使用,如果这两个条件都符合要求(此人从未在该行开过户,生成的卡号也无人使用),则向userinfo表中插入开户人的基本信息记录,并根据开户人的身份证号获取开户人的编号,从而向cardinfo表中插入开户人的基本信息记录,同时还需要将生成的卡号显示给开户人。

如果收到卡号已经被使用,得提醒用户开户失败;如果当前开户人已经在此行开过户,则提示用户此身份证已有账号。

结果如下图:

图4.2

4.4更改密码

一个银行账号对应一个密码,因此当用户输入的卡号密码相对应时,可以为该银行卡设置新的密码,

代码:

createorreplaceprocedureproc_updateUserPass(

temp_cardidvarchar2,--卡号

oldpassvarchar2,--旧密码

newpassvarchar2--新密码

as

inumber;

pass_iVARCHAR2(6);

begin

selectcount(*)intoifromcardInfowherecardID=temp_cardid;

selectpassintopass_ifromcardInfowherecardID=temp_cardid;

ifi=0then

dbms_output.put_line('此卡号不存在!

');

elsifi>0then

ifpass_i=oldpassthen

UPDATEcardInfosetpass=newpasswherecardid=temp_cardid;

dbms_output.put_line('密码更改成功!

');

else

dbms_output.put_line('旧密码不正确!

');

endif;

endif;

commit;

exception

whenothersthen

dbms_output.put_line('密码更改失败!

');

end

4.5账号挂失

当用户的银行卡丢失后,可以对该卡进行挂失,银行管理系统需要验证用户的真实性,当用户输入银行卡号和密码相对应,才可以对该卡进行挂失操作,即修改cardinfo表中的IsreportLOSS列为“是”,否则提示“无权挂失”。

结果如图:

图4.3

4.6余额查询

用户可以使用银行管理系统,办理余额查询等业务,系统要求用户输入银行卡账号和密码,当用户输入的账号和密码都合法时,系统就查询该用户的账户余额,否则将提示用户“账号或密码错误!

”,

代码:

CREATEORREPLACEprocedurepro_query_balance(

card_idvarchar2,--帐户

card_passvarchar2)--密码

as

iNUMBER:

=0;

not_data_foundexception;

user_balanceNUMBER(8);

begin

selectcount(*)intoifromcardInfowherecardID=card_idandpass=card_pass;

ifi=0then

raisenot_data_found;

else

selectbalanceintouser_balancefromcardInfowherecardID=card_idandpass=card_pass;

dbms_output.put_line('你帐号的余额为:

'||user_balance);

endif;

exception

whennot_data_foundthen

dbms_output.put_line('帐号或密码错误!

');

end;

4.7转账业务设置

自助银行管理系统办理转账业务时,要求用户输入正确的用于转账的卡号和密码,以及获得转账的卡号和转账金额,系统将根据用户输入的卡号和密码,检测该银行卡是否存在,如果存在,则判断该银行卡余额是否大于要转账的余额;如果大于,则向表中插入两条交易记录,一条支取的记录,一条为存入的记录,并提示用户转账成功;如果用户输入的卡号和密码不正确,则提示“你的卡号或密码有误!

”。

4.8银行盈利结算

银行的管理人员可以统计银行的资金流通余额和盈利结算,资金流动金额等于总存入-总支数金额;盈利结算,等于总支出金额乘以8%-总存入金额乘以3%,

代码如图:

图4.4

4.9撤户操作

当用户不再需要使用某张银行卡时,可去银行办理撤户操作,撤户操作需要用户输入正确的卡号和密码,系统将根据用户输入的数据对该银行卡进行验证,如果该银行卡存在,都需要将卡上的余额全部取出,并删除该卡在cardinfo表中的记录,以及在transinfo表中所有的交易记录。

代码如下图

图4.5

五、总结

通过此次课程设计,使我更加扎实的掌握了有关数据库方面的知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我在这方面的知识欠缺和经验不足。

实践出真知,通过亲自动手制作,使我们掌握的知识不再是纸上谈兵。

 

在课程设计过程中,我们不断发现错误,不断改正,不断领悟,不断获取。

最终的检测调试环节,本身就是在践行“过而能改,善莫大焉”的知行观。

这次课程设计终于顺利完成了,在设计中遇到了很多问题,最后在老师的指导下,终于游逆而解。

在今后社会的发展和学习实践过程中,一定要不懈努力,不能遇到问题就想到要退缩,一定要不厌其烦的发现问题所在,然后一一进行解决,只有这样,才能成功的做成想做的事,才能在今后的道路上劈荆斩棘,而不是知难而退,那样永远不可能收获成功,收获喜悦,也永远不可能得到社会及他人对你的认可!

 

参考文献

[1]郝安林,《Oracle11g基础教程与实验指导》,清华大学出版社

[2]王珊,《数据库系统概论》,高等教育出版社

[3]王霓虹,《数据库系统原理》,哈尔滨工业出版社(十二五规划教材)

[4]李建中,《数据库系统原理》,电子工业出版社(原理)

[5]Stephens著,《数据库设计》,机械工业出版社

[6]李丙洋.涂抹oracle--三思笔记之一步一步学oracle[M]中国水利水电出版社,2010.1 

[7] Karen Morton.Oracle SQL高级编程[M].人民邮电出版社,2011.11 

[8] 梁敬彬,梁敬弘.收获不止oracle[M].电子工业出版社,2013.5 

[9] 盖国强.循序渐进oracle数据库管理、优化与备份恢复[M].人民邮电出版社,2011.8 

[10]Lan Abramson,Micheael Abbey,Michael J.Corey,窦朝辉.oracle database 11g:

初学者指南[M].清华大学出版社,2010-01

附录

程序源代码:

CREATETABLESPACEspace_zqp

DATAFILE'D:

\Bank.dbf'SIZE50M

AUTOEXTENDONNEXT5MMAXSIZEUNLIMITED;

创建用户zqp,用户密码:

zqp

CREATEUSERzqp

IDENTIFIEDBYzqp

DEFAULTTABLESPACEspace_zqp;

TEMPORARYTABLESPACEtemp

QUOTA20MONspace_xianglin;//用户已创建

GRANTDBATOXIANGLIN;//授权成功

CONNECTxianglin/accp;//已连接

REATETABLEuserInfo

customerIDNUMBER(4)NOTNULL,

customerNameVARCHAR2(20)NOTNULL,

PIDVARCHAR2(18)NOTNULL,

telephoneVARCHAR2(13)NOTNULL,

addressVARCHAR2(50)

-----根据身份证ID创建散列分区

PARTITIONBYHASH(PID)

PARTITIONpid1,

PARTITIONpid2,

PARTITIONpid3,

);

-------------------为userInfo表添加约束条件

ALTERTABLEuserInfo

ADDCONSTRAINTPK_customerIDPRIMARYKEY(customerID)

ADDCONSTRAINTUK_PIDUNIQUE(PID)

ADDCONSTRAINTCK_PIDCHECK(LENGTH(PID)=18ORLENGTH(PID)=15)

ADDCONSTRAINTCK_telephoneCHECK(

telephoneLIKE'[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

LENGTH(telephone)=13);//表已更改

------------------创建可以自动生成自增主列的序列customerid_seq

CREATESEQUENCEcustomerid_seq

STARTWITH1

INCREMENTBY1

NOCACHE;//序列已创建

CREATETABLEcardIofo

cardIDVARCHAR2(20)NOTNULL,

curTypeVARCHAR2(10)NOTNULL,

savingTypeVARCHAR2(8)NOTNULL,

openDateDATENOTNULL,

openMoneyNUMBER(8)NOTNULL,

balanceNUMBER(8)NOTNULL,

passVARCHAR2(6)NOTNULL,

IsReportLossVARCHAR2

(2)NOTNULL,

customerIDNUMBER(4)NOTNULL

-------根据开户日期创建表分区

PARTITIONBYRANGE(openDate)

PARTITIONopenDate_p1VALUESLESSTHAN(TO_DATE('01/01/2007','dd/mm/yyyy')),

PARTITIONopenDate_p2VALUESLESSTHAN(TO_DATE('01/04/2007','dd/mm/yyyy')),

PARTITIONopenDate_p3VALUESLESSTHAN(TO_DATE('01/07/2007','dd/mm/yyyy')),

PARTITIONopenDate_p4VALUESLESSTHAN(TO_DATE('01/10/2007','dd/mm/yyyy')),

PARTITIONopenDate_p5VALUESLESSTHAN(TO_DATE('01/01/2008','dd/mm/yyyy')),

PARTITIONopenDate_p6VALUESLESSTHAN(TO_DATE('01/04/2008','dd/mm/yyyy')),

PARTITIONopenDate_p7VALUESLESSTHAN(TO_DATE('01/07/2008','dd/mm/yyyy')),

PARTITIONopenDate_p8VALUESLESSTHAN(TO_DATE('01/10/2008','dd/mm/yyyy')),

PARTITIONopenDate_p9VALUESLESSTHAN(TO_DATE('01/01/2009','dd/mm/yyyy')),

PARTITIONopenDate_p10VALUESLESSTHAN(TO_DATE('01/04/2009','dd/mm/yyyy')),

PARTITIONopenDate_p11VALUESLESSTHAN(TO_DATE('01/07/2009','dd/mm/yyyy')),

PARTITIONopenDate_p12VALUESLESSTHAN(maxvalue)

);//表已创建

-------------------------为cardInfo表添加约束条件

ALTERTABLEcardIofo

ADDCONSTRAINTPK_cardIDPRIMARYKEY(cardID)

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

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1