




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
.../目錄TOC\o"1-3"\h\u摘要 1一、設(shè)計銀行管理系統(tǒng)結(jié)構(gòu)圖1.1系統(tǒng)結(jié)構(gòu)圖 2二、銀行管理系統(tǒng)E-R圖和表結(jié)構(gòu)2.1E-R圖 32.2表結(jié)構(gòu) 5三、創(chuàng)建系統(tǒng)數(shù)據(jù)表3.1創(chuàng)建表空間和用戶 63.2創(chuàng)建用戶信息表并添加約束 63.3創(chuàng)建銀行卡信息表 83.4創(chuàng)建交易信息表 9四、模擬常規(guī)業(yè)務(wù)操作4.1建立更新賬號觸發(fā)器 114.2存取款交易操作 114.3用戶開戶 134.4更改密碼 154.5賬號掛失 164.6余額查詢 164.7轉(zhuǎn)賬業(yè)務(wù)設(shè)置 174.8銀行盈利結(jié)算 184.9撤戶操作 18五、總結(jié) 20參考文獻 21附錄 22摘要隨著計算機的飛速發(fā)展及應(yīng)用領(lǐng)域的擴大,特別是計算機網(wǎng)絡(luò)和電子商務(wù)的發(fā)展,極大的改變了商業(yè)銀行傳統(tǒng)的經(jīng)營模式。能夠為客戶提供方便、快捷、安全的服務(wù),也能夠有效的降低銀行的營運成本,這是銀行存儲系統(tǒng)追求的目標(biāo)。目前,對于現(xiàn)代化銀行運營的要求是客戶可以實現(xiàn)方便安全的業(yè)務(wù)交易,銀行職員可以進行高效合理的工作管理,實現(xiàn)銀行業(yè)務(wù)電子化。方便用戶快速的進行存款、取款、修改密碼以及完成一些轉(zhuǎn)賬的交易,大大提高辦公效率,能夠及時、準確、有效的幫用戶辦理各種繁瑣的手續(xù),也減緩了銀行工作人員的壓力。設(shè)計銀行管理系統(tǒng)結(jié)構(gòu)圖1.1系統(tǒng)結(jié)構(gòu)圖銀行系統(tǒng)銀行系統(tǒng)信息查詢信息查詢財務(wù)管理賬戶管理財務(wù)管理賬戶管理開戶開戶修改密碼賬戶掛失銷戶存款取款轉(zhuǎn)賬余額查詢圖1.1系統(tǒng)結(jié)構(gòu)圖銀行管理系統(tǒng)E-R圖和表結(jié)構(gòu)2.1E-R圖身份證號開戶開戶信息表住址開戶名身份證號開戶開戶信息表住址開戶名開戶名身份證號開戶名身份證號圖2.1開戶開戶開戶金額是否掛失用戶編號密碼開戶日期貨幣種類余額卡號存款類型銀行信息表開戶金額是否掛失用戶編號密碼開戶日期貨幣種類余額卡號存款類型銀行信息表圖2.2卡號交易金額交易日期交易類型交易信息表交易圖2.2卡號交易金額交易日期交易類型交易信息表交易2.2表結(jié)構(gòu)通過對銀行管理系統(tǒng)的需求分析,應(yīng)該為該系統(tǒng)設(shè)計3個表,分別為用戶信息表、銀行卡信息表和交易信息表。用戶信息表用于存儲用戶的基本信息,包括用戶的編號、開戶名、身份證號、和家庭住址等信息表2.1用戶信息表字段名稱字段描述數(shù)據(jù)類型長度約束customer用戶編號Number4主鍵customer開戶名Varhcar220必填PID身份證號Varchar218必填telephoneVarchar213必填A(yù)ddress家庭地址Varchar250無銀行卡信息表用于存儲銀行卡相關(guān)的信息主要包括卡號、存儲的貨幣類型,存款方式,開戶時間,開戶金額,余額、銀行卡密碼、是否掛失和用戶編號等信息,表2.2銀行卡信息表字段名稱字段描述數(shù)據(jù)類型長度約束cardID卡號Varchar220主鍵curType貨幣種類Varhcar210必填SavingType存款類型Varchar28非空Opendate開戶日期DATETIME必填openmoney開戶金額Number8必填Balance帳戶余額Number8必填I(lǐng)sreportloss是否掛失Varchar22必填Customer開戶編號Varchar4外鍵交易信息表用于存儲用戶的交易記錄,主要包括交易日期,卡號、交易類型,交易金額等信息。表2.3交易信息表字段名稱字段描述數(shù)據(jù)類型長度屬性Transdate交易日期DatetimePKcardID卡號Varhcar220非空transTYPE交易類型VARCHAR24非空transMoney交易金額NUMBER4非空remark備注VARCHAR250非空三、創(chuàng)建系統(tǒng)數(shù)據(jù)表3.1創(chuàng)建表空間和用戶使用system用戶連接數(shù)據(jù)庫后,創(chuàng)建表空間space_zqp,指定數(shù)據(jù)文件為D:\Bank.dbf,代碼如下圖:圖3.1表空間和用戶3.2創(chuàng)建用戶信息表并添加約束用戶信息表保存了用戶的基本信息,該表的創(chuàng)建語句如下,CREATETABLEuserInfo<customerIDNUMBER<4>NOTNULL,customerNameVARCHAR2<20>NOTNULL,PIDVARCHAR2<18>NOTNULL,telephoneVARCHAR2<13>NOTNULL,addressVARCHAR2<50>>PARTITIONBYHASH<PID><PARTITIONpid1,PARTITIONpid2,PARTITIONpid3,>;ALTERTABLEuserInfoADDCONSTRAINTPK_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]'ORLENGTH<telephone>=13>;創(chuàng)建可以自動生成自增主列的序列customerid_seqCREATESEQUENCEcustomerid_seqSTARTWITH1INCREMENTBY1NOCACHE如上述語句所示,在userInfo表中包含用戶編號〔customerid>、開戶名〔customername、身份證號〔PID>、<telephone>、家庭住址〔address。其中,customerid為主鍵,自增〔從1開始;PID只能是18位或15位,并且是唯一的;telephone必須是xxxx-xxxxxxxx的格式或13位的手機號碼。圖3.2用戶信息表3.3創(chuàng)建銀行卡信息表銀行卡信息表〔cardinfo中包含了卡號<cardid>,貨幣種類<curType>,存款類型〔savingtype,開戶日期〔opendate,開戶金額〔openmoney,余額〔balance,密碼〔pass,是否掛失〔isREPORTLOSS和用戶編號〔customerID的信息。其中,cardID為主鍵,必須為10103756xxxxxxxx的格式;CURTYPE默認為RMB,openmoney必須不能低于一元;balance也必須不能低于一元;pass默認為88888888;ISREPORTLOSS的值必須是"是/否"中之一,默認為否;customerID為外鍵,引用userInfo表中的customerID列。圖3.33.4創(chuàng)建交易信息表交易信息表中包含了五個字段,分別為transdate<交易日期>,cardID<卡號>、TRANSTYPE<交易類型>,transmoney<交易金額>和remark〔備注。其中,transdate默認為系統(tǒng)當(dāng)前日期;cardid位外鍵,引用cardinfo表中的cardid列,可重復(fù);transtype只能是"存入/取出"之一;transmoney必須大于0.圖3.4交易信息表四、模擬常規(guī)業(yè)務(wù)操作4.1建立更新賬號觸發(fā)器結(jié)果如下:圖4.1創(chuàng)建beforeupdate觸發(fā)器4.2存取款交易操作當(dāng)用戶辦理取款或存款業(yè)務(wù)時,不僅需要向交易信息表中添加一條交易記錄,還需要修改當(dāng)前賬戶中的余額,如果辦理取款業(yè)務(wù),如果將當(dāng)前賬戶總的余額減去支取余額,如果辦理托管業(yè)務(wù),多叫當(dāng)前賬戶中的金額加上存款金額。在交易信息表中包含一個名為transtype的字段,該字段用于表示交易類型,取值范圍必須是存入或者自取,因此可以為transINFO表創(chuàng)建BEFOREINSERTR觸發(fā)器。根據(jù)要辦理里的交易類型,判斷出當(dāng)前的交易類型,如果transtype字段值為"支取",則表示要辦理取款業(yè)務(wù),檢測當(dāng)前余額是否大于或等于要支取的金額,如果滿足條件,則要修改cardinfo表中的balance字段值,將該字段值減去交易金額〔transmoney,如果transtype字段值為"存入",則表示要辦理存款業(yè)務(wù),修改cardinfo表中的balance字段值,將該值加上交易金額〔transmoney。代碼如下:reateorreplacetriggertrig_transbeforeinsertorupdateontransinfoforeachrowdeclaremy_balancenumber;rate_exceptionexception;beginselectbalanceintomy_balancefromcardinfowherecardid=:new.cardid;if:new.transtype='支取'thenifmy_balance<:new.transmoney-1thendbms_output.put_line<'對不起,您的余額不足!'>;return;elsifmy_balance>:new.transmoney-1thenupdatecardinfosetbalance=balance-:new.transmoneywherecardId=:new.cardId;endif;elsif:new.transtype='存入'thenupdatecardinfosetbalance=balance+:new.transmoneywherecardid=:new.cardId; endif;dbms_output.put_line<'交易成功!'>;exceptionwhenrate_exceptionthenraise_application_error<-20001,'交易失敗'>;end;select*fromcardInfo_vw;insertintotransInfo<transdate,cardID,transType,transMoney>values<sysdate,'1010357688886666','存入',1000>;commit;4.3用戶開戶根據(jù)身份證號查詢是否在該行開過戶,為萬無一失,還需要查詢生成的卡號是否已經(jīng)被使用,如果這兩個條件都符合要求〔此人從未在該行開過戶,生成的卡號也無人使用,則向userinfo表中插入開戶人的基本信息記錄,并根據(jù)開戶人的身份證號獲取開戶人的編號,從而向cardinfo表中插入開戶人的基本信息記錄,同時還需要將生成的卡號顯示給開戶人。如果收到卡號已經(jīng)被使用,得提醒用戶開戶失??;如果當(dāng)前開戶人已經(jīng)在此行開過戶,則提示用戶此身份證已有賬號。結(jié)果如下圖:圖4.24.4更改密碼一個銀行賬號對應(yīng)一個密碼,因此當(dāng)用戶輸入的卡號密碼相對應(yīng)時,可以為該銀行卡設(shè)置新的密碼,代碼:createorreplaceprocedureproc_updateUserPass<temp_cardidvarchar2,--卡號oldpassvarchar2,--舊密碼newpassvarchar2--新密碼>asinumber;pass_iVARCHAR2<6>;beginselectcount<*>intoifromcardInfowherecardID=temp_cardid;selectpassintopass_ifromcardInfowherecardID=temp_cardid;ifi=0thendbms_output.put_line<'此卡號不存在!'>;elsifi>0thenifpass_i=oldpassthenUPDATEcardInfosetpass=newpasswherecardid=temp_cardid;dbms_output.put_line<'密碼更改成功!'>;elsedbms_output.put_line<'舊密碼不正確!'>;endif;endif;commit;exceptionwhenothersthendbms_output.put_line<'密碼更改失??!'>;end4.5賬號掛失當(dāng)用戶的銀行卡丟失后,可以對該卡進行掛失,銀行管理系統(tǒng)需要驗證用戶的真實性,當(dāng)用戶輸入銀行卡號和密碼相對應(yīng),才可以對該卡進行掛失操作,即修改cardinfo表中的IsreportLOSS列為"是",否則提示"無權(quán)掛失"。結(jié)果如圖:圖4.34.6余額查詢用戶可以使用銀行管理系統(tǒng),辦理余額查詢等業(yè)務(wù),系統(tǒng)要求用戶輸入銀行卡賬號和密碼,當(dāng)用戶輸入的賬號和密碼都合法時,系統(tǒng)就查詢該用戶的賬戶余額,否則將提示用戶"賬號或密碼錯誤!",代碼:CREATEORREPLACEprocedurepro_query_balance<card_idvarchar2,--帳戶card_passvarchar2>--密碼asiNUMBER:=0;not_data_foundexception;user_balanceNUMBER<8>;beginselectcount<*>intoifromcardInfowherecardID=card_idandpass=card_pass;ifi=0thenraisenot_data_found;elseselectbalanceintouser_balancefromcardInfowherecardID=card_idandpass=card_pass;dbms_output.put_line<'你帳號的余額為:'||user_balance>;endif;exceptionwhennot_data_foundthendbms_output.put_line<'帳號或密碼錯誤!'>;end;4.7轉(zhuǎn)賬業(yè)務(wù)設(shè)置自助銀行管理系統(tǒng)辦理轉(zhuǎn)賬業(yè)務(wù)時,要求用戶輸入正確的用于轉(zhuǎn)賬的卡號和密碼,以及獲得轉(zhuǎn)賬的卡號和轉(zhuǎn)賬金額,系統(tǒng)將根據(jù)用戶輸入的卡號和密碼,檢測該銀行卡是否存在,如果存在,則判斷該銀行卡余額是否大于要轉(zhuǎn)賬的余額;如果大于,則向表中插入兩條交易記錄,一條支取的記錄,一條為存入的記錄,并提示用戶轉(zhuǎn)賬成功;如果用戶輸入的卡號和密碼不正確,則提示"你的卡號或密碼有誤!"。4.8銀行盈利結(jié)算銀行的管理人員可以統(tǒng)計銀行的資金流通余額和盈利結(jié)算,資金流動金額等于總存入-總支數(shù)金額;盈利結(jié)算,等于總支出金額乘以8%-總存入金額乘以3%,代碼如圖:圖4.44.9撤戶操作當(dāng)用戶不再需要使用某張銀行卡時,可去銀行辦理撤戶操作,撤戶操作需要用戶輸入正確的卡號和密碼,系統(tǒng)將根據(jù)用戶輸入的數(shù)據(jù)對該銀行卡進行驗證,如果該銀行卡存在,都需要將卡上的余額全部取出,并刪除該卡在cardinfo表中的記錄,以及在transinfo表中所有的交易記錄。代碼如下圖圖4.5五、總結(jié)通過此次課程設(shè)計,使我更加扎實的掌握了有關(guān)數(shù)據(jù)庫方面的知識,在設(shè)計過程中雖然遇到了一些問題,但經(jīng)過一次又一次的思考,一遍又一遍的檢查終于找出了原因所在,也暴露出了前期我在這方面的知識欠缺和經(jīng)驗不足。實踐出真知,通過親自動手制作,使我們掌握的知識不再是紙上談兵。在課程設(shè)計過程中,我們不斷發(fā)現(xiàn)錯誤,不斷改正,不斷領(lǐng)悟,不斷獲取。最終的檢測調(diào)試環(huán)節(jié),本身就是在踐行"過而能改,善莫大焉"的知行觀。這次課程設(shè)計終于順利完成了,在設(shè)計中遇到了很多問題,最后在老師的指導(dǎo)下,終于游逆而解。在今后社會的發(fā)展和學(xué)習(xí)實踐過程中,一定要不懈努力,不能遇到問題就想到要退縮,一定要不厭其煩的發(fā)現(xiàn)問題所在,然后一一進行解決,只有這樣,才能成功的做成想做的事,才能在今后的道路上劈荊斬棘,而不是知難而退,那樣永遠不可能收獲成功,收獲喜悅,也永遠不可能得到社會及他人對你的認可!參考文獻[1]郝安林,《Oracle11g基礎(chǔ)教程與實驗指導(dǎo)》,清華大學(xué)出版社[2]王珊,《數(shù)據(jù)庫系統(tǒng)概論》,高等教育出版社[3]王霓虹,《數(shù)據(jù)庫系統(tǒng)原理》,XX工業(yè)出版社〔十二五規(guī)劃教材[4]李建中,《數(shù)據(jù)庫系統(tǒng)原理》,電子工業(yè)出版社〔原理[5]Stephens著,《數(shù)據(jù)庫設(shè)計》,機械工業(yè)出版社[6]李丙洋.涂抹oracle--三思筆記之一步一步學(xué)oracle[M]中國水利水電出版社,2010.1[7]KarenMorton.OracleSQL高級編程[M].人民郵電出版社,2011.11[8]梁敬彬,梁敬弘.收獲不止oracle[M].電子工業(yè)出版社,2013.5[9]蓋國強.循序漸進oracle數(shù)據(jù)庫管理、優(yōu)化與備份恢復(fù)[M].人民郵電出版社,2011.8[10]LanAbramson,MicheaelAbbey,MichaelJ.Corey,竇朝輝.oracledatabase11g:初學(xué)者指南[M].清華大學(xué)出版社,2010-01附錄程序源代碼:CREATETABLESPACEspace_zqpDATAFILE'D:\Bank.dbf'SIZE50MAUTOEXTENDONNEXT5MMAXSIZEUNLIMITED;創(chuàng)建用戶zqp,用戶密碼:zqpCREATEUSERzqpIDENTIFIEDBYzqpDEFAULTTABLESPACEspace_zqp;TEMPORARYTABLESPACEtempQUOTA20MONspace_xianglin;//用戶已創(chuàng)建GRANTDBATOXIANGLIN;//授權(quán)成功CONNECTxianglin/accp;//已連接REATETABLEuserInfo<customerIDNUMBER<4>NOTNULL,customerNameVARCHAR2<20>NOTNULL,PIDVARCHAR2<18>NOTNULL,telephoneVARCHAR2<13>NOTNULL,addressVARCHAR2<50>>根據(jù)身份證ID創(chuàng)建散列分區(qū)PARTITIONBYHASH<PID><PARTITIONpid1,PARTITIONpid2,PARTITIONpid3,>;為userInfo表添加約束條件ALTERTABLEuserInfoADDCONSTRAINTPK_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]'ORLENGTH<telephone>=13>;//表已更改創(chuàng)建可以自動生成自增主列的序列customerid_seqCREATESEQUENCEcustomerid_seqSTARTWITH1INCREMENTBY1NOCACHE;//序列已創(chuàng)建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>根據(jù)開戶日期創(chuàng)建表分區(qū)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>>;//表已創(chuàng)建為cardInfo表添加約束條件ALTERTABLEcardIofoADDCONSTRAINTPK_cardIDPRIMARYKEY<cardID>ADDCONSTRAINTCK_cardIDCHECK<TRANSLATE<cardID,'0123456789','xxxxxxxxxx'>='xxxxxxxxxxxxxxxx'ANDINSTR<cardID,'10103576'>=1ADDCONSTRAINTCK_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<passDEFAULT888888>MODIFY<IsReportLossDEFAULT'否'>;//表已更改CREATETABLEtransInfo<transDateDATENOTNULL,cardIDVARCHAR2<20>NOTNULL,transTypeVARCHAR2<4>NOTNULL,transMoneyNUMBER<4>NOTNULL,remarkVARCHAR2<50>>根據(jù)交易時間創(chuàng)建表分區(qū)PARTITIONBYRANGE<transDate><PARTITIONtransDate_p1VALUESLESSTHAN<to_date<'01/01/2007','dd/mm/yyyy'>>,PARTITIONtransDate_p2VALUESLESSTHAN<to_date<'01/04/2007','dd/mm/yyyy'>>,PARTITIONtransDate_p3VALUESLESSTHAN<to_date<'01/07/2007','dd/mm/yyyy'>>,PARTITIONtransDate_p4VALUESLESSTHAN<to_date<'01/10/2007','dd/mm/yyyy'>>,PARTITIONtransDate_p5VALUESLESSTHAN<to_date<'01/01/2008','dd/mm/yyyy'>>,PARTITIONtransDate_p6VALUESLESSTHAN<to_date<'01/04/2008','dd/mm/yyyy'>>,PARTITIONtransDate_p7VALUESLESSTHAN<to_date<'01/07/2008','dd/mm/yyyy'>>,PARTITIONtransDate_p8VALUESLESSTHAN<to_date<'01/10/2008','dd/mm/yyyy'>>,PARTITIONtransDate_p9VALUESLESSTHAN<to_date<'01/01/2009','dd/mm/yyyy'>>,PARTITIONtransDate_p10VALUESLESSTHAN<to_date<'01/04/2009','dd/mm/yyyy'>>,PARTITIONtransDate_p11VALUESLESSTHAN<to_date<'01/07/2009','dd/mm/yyyy'>>,PARTITIONtransDate_p12VALUESLESSTHAN<maxvalue>>;//表已創(chuàng)建為transInfo表添加表約束ALTERTABLEtransInfoADDCONSTRAINTFK_cardIDFOREIGNKEY<cardID>REFERENCEScardIofo<cardID>ADDCONSTRAINTCK_transTypeCHECK<transTypeIN<'存入','支取'>>ADDCONSTRAINTCK_transMoneyCHECK<transMoney>0>MODIFY<transDateDEFAULTsysdate>;//表已更改--創(chuàng)建userInfo表視圖CREATEORREPLACEVIEWuserInfo_vwASSELECTcustomerIDas用戶編號,customerNameas用戶名稱,PIDas身份證號,telephoneas,addressas家庭住址FROMuserInfo;--創(chuàng)建cardInfo表視圖CREATEORREPLACEVIEWcardInfo_vwASSELECTcardIDas銀行卡號,curTypeas貨幣類型,savingTYpeas存款類型,openDateas開戶日期,openMoneyas開戶金額,balanceas余額,passas密碼,IsReportLossas是否掛失,customerIDas用戶編號FROMcardInfo;--創(chuàng)建transInfo表視圖CREATEORREPLACEVIEWtransInfo_vwASselecttransDateas交易日期,cardIDas卡號,transTypeas交易類型,transMoneyas交易金額,remarkas備注FROMtransInfo;--創(chuàng)建查詢掛失的客戶信息視圖CREATEORREPLACEVIEWuserInfo_IsReportLoss_vwASselectu.customerIDas用戶編號,u.customerNameas開戶名,u.pidas身份證號,u.telephoneas,u.addressas家庭地址FROMuserInfouINNERJOINcardInfocONu.customerID=c.customerIDWHEREIsReportLoss='是';--創(chuàng)建查詢本周開戶的卡號顯示相關(guān)信息視圖CREATEORREPLACEVIEWquery_week_information_vwASSELECTcardIDas卡號,curTypeas貨幣類型,savingTypeas存款類型,openDateas開戶日期,openMoneyas開戶金額,balanceas余額,passas密碼,IsReportLossas是否掛失,customerIDas用戶編號FROMcardInfoWHEREopenDateBETWEENTRUNC<sysdate,'day'>ANDsysdate;--創(chuàng)建查詢本月交易金額最高的卡號的視圖CREATEORREPLACEVIEWtop_balance_vwASSELECTDISTINCTcardIDas交易最高的卡號,transMoneyas交易金額FROMtransInfoWHEREtransMoney=<SELECTMax<transMoney>FROMtransInfo>;查看視圖select*fromuserInfo_vw;--userInfo表視圖select*fromcardInfo_vw;--cardInfo表視圖select*fromtransInfo_vw;--transInfo表視圖select*fromuserInfo_IsReportLoss_vw;--查詢掛失的客戶信息視圖select*fromquery_week_information_vw;--查詢本周開戶的卡號select*fromtop_balance_vw;--查詢本月交易金額最高的卡號/*selectu.customerNameas客戶名字,c.balanceas余額,t.transMoneyas交易金額fromuserInfou,cardInfoc,transInfotwhereu.customerName='張三'andu.customerid=c.customeridandc.cardid=t.cardid;selectu.customerNameas客戶名稱,c.balanceas余額fromuserInfouINNERJOINcardInfoconu.customername='張三'andu.customerid=c.customerid;*/--不允許更新cardInfo表的cardID列--不能更新卡號的觸發(fā)器createorreplacetriggertrg_cardInfo_cardID_notUpdatebeforeupdateofcardIDoncardInfoforeachrowbeginraise_application_error<-20001,'此列不允許修改!'>;end;--創(chuàng)建觸發(fā)器實現(xiàn)交易操作createorreplacetriggertrig_transbeforeinsertorupdateontransinfoforeachrowdeclaremy_balancenumber;rate_exceptionexception;beginselectbalanceintomy_balancefromcardinfowherecardid=:new.cardid;if:new.transtype='支取'thenifmy_balance<:new.transmoney-1thendbms_output.put_line<'對不起,您的余額不足!'>;return;elsifmy_balance>:new.transmoney-1thenupdatecardinfosetbalance=balance-:new.transmoneywherecardId=:new.cardId;endif;elsif:new.transtype='存入'thenupdatecardinfosetbalance=balance+:new.transmoneywherecardid=:new.cardId; endif;dbms_output.put_line<'交易成功!'>;exceptionwhenrate_exceptionthenraise_application_error<-20001,'交易失敗'>;end;select*fromcardInfo_vw;--插入交易數(shù)據(jù)自動觸發(fā)一系列操作insertintotransInfo<transdate,cardID,transType,transMoney>values<sysdate,'1010357688886666','存入',1000>;commit;select*fromcardInfo_vw;select*fromtransInfo_vw;createorreplaceTRIGGERtrg_cardIofo_card_notUpdateBEFOREUPDATEOFcardIDONcardIofoFOREACHROWBEGINRAISE_APPLICATION_ERROR<-20001,'賬號不允許修改'>;END;CREATEORREPLACEFUNCTIONrandom_cardIdRETURNVARCHAR2AScard_idVARCHAR2<20>:='10103576';temCHAR<5>;re_card_id_countNUMBER:=0;BEGINLOOPtem:=to_char<dbms_random.value<1000,9999>,'0000'>;card_id:=card_id||tem;tem:=to_char<dbms_random.value<1000,9999>,'0000'>;card_id:=card_id||tem;SELECTCOUNT<*>INTOre_card_id_countFROMcardInfoWHEREcardID=card_id;EXITWHENre_card_id_count=0;ENDLOOP;RETURNcard_id;END;開戶過程:CREATEORREPLACEprocedureproc_openUser<unamevarchar2,--開戶的姓名p_idvarchar2,--身份證telvarchar2,--電話號碼addressvarchar2,--地址savingtypevarchar2,--存款類型curTypevarchar2,--貨幣類型openMoneynumber,--開戶金額passvarchar2--開戶密碼>ascidvarchar2<20>;--卡號customer_idnumber;--顧客IDiNUMBER;cNUMBER;Begin--調(diào)用函數(shù)生成卡號cid:=random_cardId;--查詢此人是否在此行開過戶selectcount<*>intoifromuserinfowherePID=p_id;--查詢卡號是否應(yīng)該有了selectcount<*>intocfromcardinfowherecardID=cid;ifi=0thenifc=0thenInsertintouserInfovalues<customerid_seq.nextval,uname,p_id,tel,address>;--根據(jù)身份證號獲取顧客編號selectcustomerIdintocustomer_idfromuserInfowherePID=p_id;insertintocardInfo<cardId,curType,Savingtype,Openmoney,balance,pass,customerId>values<cid,curType,savingType,openMoney,openMoney,pass,customer_id>;DBMS_OUTPUT.PUT_LINE<'您已成功開戶!'>;DBMS_OUTPUT.PUT_LINE<'您的卡號為:'||cid>;elsifc>0thendbms_output.put_line<'開戶失敗!'>;endif;elsifi>0thendbms_output.put_line<'此身份證已開有帳號!'>;ENDIF;EXCEPTIONwhenothersthendbms_output.put_line<'開戶失??!'>;end;createorreplaceprocedureproc_updateUserPass<temp_cardidvarchar2,--卡號oldpassvarchar2,--舊密碼newpassvarchar2--新密碼>asinumber;pass_iVARCHAR2<6>;beginselectcount<*>intoifromcardInfowherecardID=temp_cardid;selectpassintopass_ifromcardInfowherecardID=temp_cardid;ifi=0thendbms_output.put_line<'此卡號不存在!'>;elsifi>0thenifpass_i=oldpassthenUPDATEcardInfosetpass=newpasswherecardid=temp_cardid;dbms_output.put_line<'密碼更改成功!'>;elsedbms_output.put_line<'舊密碼不正確!'>;endif;endif;commit;exceptionwhenothersthendbms_output.put_line<'密碼更改失?。?>;Endcreateorreplaceprocedureproc_lostCard<card_idvarchar2,pass2varchar2>asxchar<2>;inumber;beginselectcount<*>intoifromcardInfowherecardId=card_idandpass=pass2;ifi>0THENSELECTIsReportLossINTOxfromcardInfowherecardId=card_idandpass=pass2;ifx='是'thendbms_output.put_line<'此卡已經(jīng)掛失!'>;elseUPDATEcardInfosetIsReportLoss='是'wherecardId=card_id;dbms_output.put_line<'該卡已成功掛失,請帶相關(guān)證件到柜臺去辦理恢復(fù)該卡!'>; endif; ELSEdbms_output.put_line<'掛失失敗!請核實卡號是否正確!'>; ENDIF;end;存取款:CREATEORREPLACEPROCEDUREproc_takeMoney<temp_cardIdVARCHAR2,--卡號temp_transTypeVARCHAR2,--交易類型temp_passVARCHAR2,--密碼temp_transMoneyNUMBER,--交易金額temp_remarkVARCHAR2--備注>AStemp_pwdVARCHAR2<6>;BEGINIFtemp_transType='支取'THEN--取款SELECTpassINTOtemp_pwdFROMcardInfoWHEREcardID=temp_cardId;IFtemp_pwd=temp_passTHENINSERTINTOtransInfo<transType,cardID,transMoney,remark>VALUES<temp_transType,temp_cardId,temp_transMoney,temp_remark>;ELSEDBMS_OUTPUT.PUT_LINE<'密碼錯誤,請重新輸入!'>;ENDIF;ELSINSERTINTOtransInfo<transType,cardID,transMoney,remark>VALUES<'存入',temp_cardId,temp_transMoney,temp_remark>;ENDIF;END;余額查詢:CREATEORREPLACEprocedurepro_query_balance<card_idvarchar2,--帳戶card_passvarchar2>--密碼asiNUMBER:=0;not_data_foundexception;user_balanceNUMBER<8>;beginselectcount<*>intoifromcardInfowherecardID=card_idandpass=card_pass;ifi=0thenraisenot_data_found;elseselectbalanceintouser_balancefromcardInfowherecardID=card_idandpass=card_pass;dbms_output.put_line<'你帳號的余額為:'||user_balance>;endif;exceptionwhennot_data_foundthendbms_output.put_line<'帳號或密碼錯誤!'>;end;轉(zhuǎn)賬:createorreplaceprocedurepro_transfer<from_card
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 腦血管意外觀察及護理
- 新疆鐵道職業(yè)技術(shù)學(xué)院《車輛工程專業(yè)課程》2023-2024學(xué)年第二學(xué)期期末試卷
- 石棉縣2025屆數(shù)學(xué)四年級第二學(xué)期期末綜合測試模擬試題含解析
- 遼寧特殊教育師范高等??茖W(xué)?!秾W(xué)科科技英語寫作:安全》2023-2024學(xué)年第二學(xué)期期末試卷
- 天津城市職業(yè)學(xué)院《相對論與量子力學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 山東特殊教育職業(yè)學(xué)院《中醫(yī)內(nèi)科學(xué)理論》2023-2024學(xué)年第一學(xué)期期末試卷
- 遼寧城市建設(shè)職業(yè)技術(shù)學(xué)院《藝術(shù)衍生品策劃與創(chuàng)意(文創(chuàng)方向)》2023-2024學(xué)年第二學(xué)期期末試卷
- 鄭州財經(jīng)學(xué)院《中藥商品學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 吉林省白城市洮南市2024-2025學(xué)年三下數(shù)學(xué)期末教學(xué)質(zhì)量檢測試題含解析
- 天津輕工職業(yè)技術(shù)學(xué)院《合唱指揮1》2023-2024學(xué)年第二學(xué)期期末試卷
- 眼科護理中的病人安全與風(fēng)險管理
- 統(tǒng)編版高二歷史選擇性必修2《第13課現(xiàn)代交通運輸?shù)男伦兓氛n件
- GB/T 14713-2023旋切機通用技術(shù)條件
- 無脊椎動物的特征和分類
- 電纜敷設(shè)培訓(xùn)課件
- 植被恢復(fù)安全施工方案
- 2024年員工考勤表(通用版)
- 2024年高考作文熱點新聞素材積累與運用
- 《公共裝置藝術(shù)》課件
- 個稅贍養(yǎng)老人專項扣除協(xié)定書
- 消化道畸形課件
評論
0/150
提交評論