数据库oracle银行管理系统.docx
《数据库oracle银行管理系统.docx》由会员分享,可在线阅读,更多相关《数据库oracle银行管理系统.docx(26页珍藏版)》请在冰豆网上搜索。
数据库oracle银行管理系统
摘要
随着计算机的飞速开展及应用领域的扩大,特别是计算机网络和电子商务的开展,极大的改变了商业银行传统的经营模式。
能够为客户提供方便、快捷、平安的效劳,也能够有效的降低银行的营运本钱,这是银行存储系统追求的目标。
目前,对于现代化银行运营的要客户可以实现方便平安的业务交易,银行职员可以进展高效合理的工作管理,实现银行业务电子化。
方便用户快速的进展存款、取款、修改密码以及完成一些转账的交易,大大提高办公效率,能够及时、准确、有效的帮用户办理各种繁琐的手续,也减缓了银行工作人员的压力。
一、""行管理系"构"
1.1系"构"
"1.1系"构"
二、"行管理系"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必"是****-********的格式或13位的手机"。
"3.2用"信息表
3.3"建"行卡信息表
"行卡信息表〔cardinfo〕中包含了卡"(cardid),"种"(curType),存款"型〔savingtype〕,"日期〔opendate〕,"金"〔openmoney〕,余"〔balance〕,密"〔pass〕,是否挂失〔isREPORTLOSS〕和用""〔customerID〕的信息。
其中,cardID"主",必"10103756********的格式;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);
mit;
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;
mit;
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)
ADDCONSTRAINTCK_cardIDCHECK(
TRANSLATE(cardID,'0123456789','**********')='****************'AND
INSTR(cardID,'10103576')=1〕
ADDCONSTRAINTCK_savCHECK(
savingTypeIN('活期','定期"便','定期'))
ADDCONSTRAINTCK_openMoneyCHECK(openMoney>=1)
ADDCONSTRAINTCK_passCHECK(LENGTH(pass)=6)
ADDCONSTRAINTCK_IsRePortLossCHECK(IsReportLossIN('是','否'))
ADDCONSTRAINTFK_customerIDFOREIGNKEY(customerID)REFERENCESuserInfo(customerID)
MODIFY(curTypeDEFAULT'RMB')
MODIFY(openDateDEFAULTsysdate)
MODIFY(passDEFAUL