數(shù)據(jù)庫ATM自動(dòng)取款機(jī)系統(tǒng)_第1頁
數(shù)據(jù)庫ATM自動(dòng)取款機(jī)系統(tǒng)_第2頁
數(shù)據(jù)庫ATM自動(dòng)取款機(jī)系統(tǒng)_第3頁
數(shù)據(jù)庫ATM自動(dòng)取款機(jī)系統(tǒng)_第4頁
數(shù)據(jù)庫ATM自動(dòng)取款機(jī)系統(tǒng)_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、長 沙 學(xué) 院課程設(shè)計(jì)說明書題目ATM系統(tǒng)系(部)計(jì)算機(jī)科學(xué)與技術(shù)系專業(yè)(班級(jí))軟件五班姓名學(xué)號(hào)指導(dǎo)教師起止日期2013.6.132013.06.22實(shí)訓(xùn)任務(wù)書課程名稱:服務(wù)外包軟件綜合實(shí)訓(xùn)設(shè)計(jì)題目:ATM系統(tǒng)已知技術(shù)參數(shù)和設(shè)計(jì)要求:1 實(shí)訓(xùn)目的要求通過本實(shí)訓(xùn),應(yīng)能夠?qū)QLServer20005工具的了解,與數(shù)據(jù)庫語法的能力。1)了解SQL的簡史和功能特性。2)掌握E-R圖的繪制和數(shù)據(jù)庫的設(shè)計(jì)。3)掌握T-SQL的語法知識(shí),并能夠熟練運(yùn)用它。 4)掌握事務(wù)與存儲(chǔ)過程的使用。2 問題描述(功能要求):本次案例將完成一個(gè)ATM銀行取款機(jī)系統(tǒng)的數(shù)據(jù)庫。(1) 創(chuàng)建BankDB數(shù)據(jù)庫。并保存在D:A

2、TM文件夾下。 (2) 創(chuàng)建用戶信息表(userinfo) (3) 創(chuàng)建銀行卡信息表(cardinfo) (4) 創(chuàng)建交易信息表(transinfo) (5) 添加各種約束關(guān)系:Ø 為userinfo表中客戶ID(customerID)添加主鍵約束。Ø 為userinfo表中客戶的身份證(PID)添加唯一約束Ø 為useinfo表中的身份證號(hào)碼添加檢查約束,長度為15或者18Ø 為userinfo表中的客戶電話號(hào)碼添加檢查約束。Ø 為cardinfo表中的卡號(hào)ID(cardID)添加主鍵約束Ø 為cardinfo表中的卡號(hào)ID(car

3、dID)添加約束,必須是以Ø 1010 3576開頭,長度為12Ø 為cardinfo表中的貨幣類型(curType)添加默認(rèn)約束,默認(rèn)為RMB。Ø 為cardinfo表中的存款類型添加約束,只能是活期、定活兩便和定期。Ø cardinfo表中開卡日期默認(rèn)為當(dāng)天日期。Ø cardinfo表中的開戶金額不能低于1元。Ø cardinfo表中的余額不能低于1元。Ø cardinfo表中的密碼長度為6位數(shù)。默認(rèn)為88888。Ø cardinfo表中是否掛失只能是是和否。默認(rèn)為否Ø 添加userinfo表與car

4、dinfo表的外鍵約束。Ø transinfo表中的交易日期默認(rèn)為當(dāng)天。Ø 交易類型只能是存入和支取。Ø 添加cardinfo表與transinfo表的外鍵約束。(6)開戶(7)取錢(8)存錢(9)查詢余額(10)轉(zhuǎn)賬(11)交易統(tǒng)計(jì)3. 運(yùn)行環(huán)境要求:(1)客戶端:windows操作系統(tǒng),SQL Server 2005 數(shù)據(jù)庫客戶端(2)服務(wù)器:SQL Server 2005 數(shù)據(jù)庫服務(wù)器、4. 技術(shù)要求:1)掌握E-R圖的繪制和數(shù)據(jù)庫的設(shè)計(jì)。2)掌握T-SQL的語法知識(shí),并能夠熟練運(yùn)用它。 3)掌握事務(wù)與存儲(chǔ)過程的使用。 4) 觸發(fā)器(選做)設(shè)計(jì)工作量:40課

5、時(shí)工作計(jì)劃:(1) 2011級(jí)軟件工程所有班級(jí)20課時(shí): 設(shè)計(jì),計(jì)算機(jī)系機(jī)房/普通教室。16課時(shí):上機(jī)、調(diào)試。計(jì)算機(jī)系機(jī)房4課時(shí):答辯。計(jì)算機(jī)系機(jī)房。班級(jí)日期節(jié)次地點(diǎn)內(nèi)容指導(dǎo)老師11軟件5班15周周四9-12節(jié)致遠(yuǎn)樓1201布置任務(wù)、上機(jī)調(diào)試曾俊勇15周周五9-12節(jié)致遠(yuǎn)樓1201上機(jī)調(diào)試15周周六9-12節(jié)致遠(yuǎn)樓1201上機(jī)調(diào)試16周周一9-12節(jié)致遠(yuǎn)樓1401上機(jī)調(diào)試16周周二9-12節(jié)致遠(yuǎn)樓1401上機(jī)調(diào)試16周周三9-12節(jié)致遠(yuǎn)樓1401上機(jī)調(diào)試16周周四9-12節(jié)致遠(yuǎn)樓1201上機(jī)調(diào)試16周周五9-12節(jié)致遠(yuǎn)樓1201上機(jī)調(diào)試16周周六5-8節(jié)致遠(yuǎn)樓1404上機(jī)調(diào)試16周周六9-12

6、節(jié)致遠(yuǎn)樓1201答辯指導(dǎo)教師簽名:日期:教研室主任簽名: 日期:系主任簽名: 日期:長沙學(xué)院課程設(shè)計(jì)鑒定表姓名學(xué)號(hào)專業(yè)軟件工程班級(jí)軟件五班設(shè)計(jì)題目ATM自動(dòng)取款機(jī)系統(tǒng)指導(dǎo)教師曾俊勇指導(dǎo)教師意見: 評(píng)定等級(jí): 教師簽名: 日期: 答辯小組意見:評(píng)定等級(jí):答辯小組長簽名:日期:教研室意見:教研室主任簽名: 日期: 系(部)意見:系主任簽名:日期:說明課程設(shè)計(jì)成績分“優(yōu)秀”、“良好”、“及格”、“不及格”四類;目 錄一、引言61.1編寫目的61.2參考資料6二、需求規(guī)約72.1 業(yè)務(wù)描述72.2 需求分析7三、數(shù)據(jù)庫環(huán)境說明8四、數(shù)據(jù)庫的命名規(guī)則84.1 數(shù)據(jù)庫對(duì)象命名規(guī)則84.2 數(shù)據(jù)項(xiàng)編碼規(guī)則8

7、五、邏輯設(shè)計(jì)95.1 E-R圖95.2 關(guān)系模型9六、物理設(shè)計(jì)106.1表匯總106.2表1: userinfo表( 用戶信息表)106.3表2: cardinfo表( 銀行卡信息表)116.4表3: transinfo表(供應(yīng)表)126.5 存儲(chǔ)過程的設(shè)計(jì)136.6 觸發(fā)器的設(shè)計(jì)18七、操作結(jié)果207.1 存款測(cè)試結(jié)果207.2 取款測(cè)試結(jié)果207.3 轉(zhuǎn)賬測(cè)試結(jié)果217.4 注銷結(jié)果測(cè)試21八、事物設(shè)計(jì)238.1 事物的創(chuàng)建23總結(jié)25一、引言1.1編寫目的通過數(shù)據(jù)庫ATM實(shí)訓(xùn),進(jìn)一步掌握數(shù)據(jù)庫系統(tǒng)的理論和方法。培養(yǎng)和鍛煉開發(fā)管理信息系統(tǒng)的能力。為今后信息系統(tǒng)開發(fā)打下良好的基礎(chǔ)。本文檔是A

8、TM系統(tǒng)設(shè)計(jì)文檔的組成部分,數(shù)據(jù)庫是一門應(yīng)用性很強(qiáng)的專業(yè)課,在學(xué)習(xí)時(shí)必須注意理論與實(shí)踐相結(jié)合。本次課程環(huán)節(jié)旨在培養(yǎng)學(xué)生在本課程范圍內(nèi),初步掌握解決實(shí)際應(yīng)用問題時(shí)所應(yīng)具備的查閱資料、綜合運(yùn)用所學(xué)知識(shí)的能力,為畢業(yè)設(shè)計(jì)及今后從事專業(yè)工作打下基礎(chǔ)。本課程環(huán)節(jié)要求學(xué)生了解企業(yè)管理信息系統(tǒng)后臺(tái)數(shù)據(jù)庫的設(shè)計(jì)、配置過程,掌握管理信息系統(tǒng)的開發(fā)方法。主要包括:需求分析、數(shù)據(jù)分析、系統(tǒng)邏輯模型設(shè)計(jì)方法;功能設(shè)計(jì)、物理模型設(shè)計(jì)方法;系統(tǒng)的實(shí)現(xiàn)等方法。完成一個(gè)小型系統(tǒng)后臺(tái)數(shù)據(jù)庫的設(shè)計(jì)與配置。目的是:明確數(shù)據(jù)庫的表名、字段名等數(shù)據(jù)信息,用來指導(dǎo)后期的數(shù)據(jù)庫腳本的開發(fā),設(shè)計(jì)該數(shù)據(jù)庫的目的是設(shè)計(jì)一個(gè)ATM系統(tǒng),能夠按照一

9、定條件查詢、統(tǒng)計(jì)交易信息,可以模擬完成開戶、存款、取款、轉(zhuǎn)賬、注銷、掛失、激活、修改密碼、查詢等業(yè)務(wù)。1.2參考資料資料名稱作者文件編號(hào)、版本數(shù)據(jù)庫系統(tǒng)概論王珊、薩師煊2006年5月第4版數(shù)據(jù)庫設(shè)計(jì)入門經(jīng)典鮑威爾2007年3月第1版數(shù)據(jù)庫原理克羅恩科2005年6月第1版二、 需求規(guī)約2.1 業(yè)務(wù)描述ATM系統(tǒng)業(yè)務(wù)是模擬了銀行ATM提款機(jī)業(yè)務(wù)的管理功能。在計(jì)算機(jī)網(wǎng)絡(luò),數(shù)據(jù)庫和先進(jìn)的開發(fā)平臺(tái)上,利用數(shù)據(jù)庫sql語言模擬開發(fā)一個(gè)良好的ATM系統(tǒng),實(shí)現(xiàn)顧客的開戶、存款、取款、查詢、轉(zhuǎn)賬、修改密碼等一系列操作。并且在完成一定的操作后保存數(shù)據(jù)的更新和查詢。在轉(zhuǎn)賬和取款時(shí)還要核對(duì)余額是否足夠,在足夠的條件下

10、才能執(zhí)行。存儲(chǔ)內(nèi)容則是存儲(chǔ)用戶的一些信息,如電話號(hào)碼和身份證號(hào)碼等,一些用戶的詳細(xì)資料,還有卡號(hào)表中的金額的信息,并對(duì)這些信息能夠及時(shí)更新。2.2 需求分析開戶功能: 新客戶需要開戶之后才能擁有相應(yīng)的卡,并對(duì)其進(jìn)行各種交易。在存入一定金額后可以登錄或跳轉(zhuǎn)到交易的界面,進(jìn)行各種交易。存款功能:客戶要能夠正確地存款,能夠準(zhǔn)確地更新客戶賬號(hào)中的余額,并且記錄客戶的操作。 l 取款功能:判斷客戶的余額是否大于取款金額,避免出現(xiàn)溢出現(xiàn)象,操作結(jié)果記錄在表中。轉(zhuǎn)賬功能: 準(zhǔn)確核對(duì)客戶的賬戶信息,核對(duì)轉(zhuǎn)入賬號(hào)的信息,判斷轉(zhuǎn)出賬號(hào)的余額是否大于轉(zhuǎn)出金額,避免出現(xiàn)溢出現(xiàn)象,并記錄轉(zhuǎn)

11、出賬號(hào)和轉(zhuǎn)入賬號(hào)的操作。注銷功能: 老用戶可在此注銷自己原有的卡。掛失功能: 當(dāng)客戶遺失自己卡后,需對(duì)卡進(jìn)行掛失操作,否則該卡的余額取不出。激活功能: 客戶遺失自己卡并找到卡后,可對(duì)卡進(jìn)行激活操作,以便繼續(xù)使用該卡。修改密碼功能: 客戶可在此功能下修改卡的原始密碼。查詢功能: 查詢客戶余額 ;查詢客戶的賬號(hào)信息 ;查詢客戶的操作記錄;三、 數(shù)據(jù)庫環(huán)境說明數(shù)據(jù)庫實(shí)例數(shù)據(jù)庫系統(tǒng)數(shù)據(jù)庫部署環(huán)境數(shù)據(jù)庫設(shè)計(jì)工具數(shù)據(jù)庫存放位置說明ATM自動(dòng)取款機(jī)系統(tǒng)Sql Server 2008Windows 2007Sql Server存放位置,絕對(duì)路徑/相對(duì)路徑用于ATM自動(dòng)取款四、 數(shù)

12、據(jù)庫的命名規(guī)則4.1 數(shù)據(jù)庫對(duì)象命名規(guī)則數(shù)據(jù)庫對(duì)象命名規(guī)則備注表字符串功能描述字符串例如:Client客戶信息表視圖_View功能描述字符串例如:all_view每個(gè)客戶訂單數(shù)視圖觸發(fā)器_trigger功能描述字符串例如:Decre_trigger減少庫存觸發(fā)器存儲(chǔ)過程proce_ 功能描述字符串例如:proce_SearchClient查詢客戶 信息存儲(chǔ)過程 4.2 數(shù)據(jù)項(xiàng)編碼規(guī)則數(shù)據(jù)項(xiàng)命名規(guī)則數(shù)據(jù)類型長度范圍備注編號(hào)類整數(shù)序號(hào)整型0-65535無姓名類字符串Varchar(20)0-20位無地址類字符串Varchar(20)0-20位無電話類字符串Char(11)11位無價(jià)格類浮點(diǎn)型flo

13、at無無時(shí)間類Datetime型Datetime無2011-01-01 10:10:10五、 邏輯設(shè)計(jì)5.1 E-R圖用戶信息表戶名顧客編號(hào)顧客編號(hào)PID聯(lián)系電話居住地址銀行卡信息表表卡號(hào)密碼貨幣類型是否掛失余額顧客編號(hào)開戶金額開戶日期屬于交易信息表屬于交易日期交易金額交易類型卡號(hào)備注1NMN交易號(hào)5.2 關(guān)系模型注:下劃線為主碼,下劃波浪線為外碼用戶(顧客編號(hào),開戶名,身份證號(hào)碼,聯(lián)系電話,居住地址)銀行卡(卡號(hào),顧客編號(hào),密碼,開戶金額,開戶日期,是否掛失,余額,存款類型,貨幣類型)交易(交易號(hào),卡號(hào),交易金額,交易日期,交易類型,備注)六、 物理設(shè)計(jì)6.1表匯總表名功能說明表userin

14、fo用戶信息表,存儲(chǔ)用戶信息等表cardinfo銀行卡信息表,存儲(chǔ)銀行卡信息等表transinfo交易信息表,存儲(chǔ)客戶的交易信息信息等6.2表1: userinfo表( 用戶信息表)表名用戶信息表(userinfo)數(shù)據(jù)庫用戶sa主鍵customer_ID其他排序字段無索引字段無序號(hào)字段名稱數(shù)據(jù)類型(精度范圍)允許為空Y/N唯一Y/N區(qū)別度默認(rèn)值約束條件/說明1customer_IDintNY無無identity(1,1)主鍵/客戶編號(hào)2customer_namechar(10)NN無無客戶姓名3P_IDvarchar(18)NY無無check(len(P_ID)=15 or len(P_ID

15、)=18)身份證號(hào)碼4customer_phonevarchar(11)YN無無check(customer_phone like '0-90-90-90-90-90-90-90-90-90-90-9' )聯(lián)系電話5customer_addressvarchar(50) YN無無居住地址sql腳本create table userinfo( customer_ID int identity(1,1) primary key,-顧客編號(hào) customer_name char(10) not null,-開戶名 P_ID varchar(18) unique check(len(P

16、_ID)=15 or len(P_ID)=18) not null,-身份證號(hào)碼 customer_phone varchar(11) check(customer_phone like '0-90-90-90-90-90-90-90-90-90-90-9' ),-聯(lián)系電話 customer_address varchar(50) -居住地址 );6.3表2: cardinfo表( 銀行卡信息表)表名銀行卡信息表(cardinfo)數(shù)據(jù)庫用戶sa主鍵card_ID其他排序字段無索引字段無序號(hào)字段名稱數(shù)據(jù)類型(精度范圍)允許為空Y/N唯一Y/N區(qū)別度默認(rèn)值約束條件/說明1card

17、_IDchar(19) NY無無check(card_ID like '1010 3576 0-90-90-90-9 0-90-90-90-9')主鍵/卡號(hào)2customer_ID int NY無無外鍵/顧客編號(hào)3card_passwordchar(6)NN無無default '888888' check(len(card_password)=6)密碼4open_moneymoneyNN無無check(open_money>=1)開戶金額5open_datedatetimeNN無無default 'getdate() '開戶日期6isrep

18、ortlosschar(2)YN無無default '否' check(isreportloss='是' or isreportloss='否')掛失狀態(tài)7balancemoneyNN無無check(balance>=1)余額8saving_typevarchar(10)NN無無check(saving_type like '活期' or saving_type like '定活兩便' or saving_type like'定期')存款類型9cur_typechar(5)NN無無defaul

19、t 'RMB' /貨幣類型sql腳本create table cardinfo( card_ID char(19) check(card_ID like '1010 3576 0-90-90-90-9 0-90-90-90-9') primary key,-卡號(hào) customer_ID int,-顧客編號(hào) card_password char(6) not null default '888888 ' check(len(card_password)=6),-卡密碼 open_money money not null check(open_mon

20、ey>=1),-開戶金額 open_date datetime default 'getdate() ' not null, -開戶日期 isreportloss char(2) default '否' check(isreportloss='是' or isreportloss='否'), -是否掛失 balance money not null check(balance>=1), -余額 saving_type varchar(10) not null check(saving_type like '活期

21、' or saving_type like '定活兩便' or saving_type like'定期'),-存款類型 cur_type char(5) not null default 'RMB' ,-貨幣類型 foreign key (customer_ID) references userinfo(customer_ID) on delete cascade on update cascade);6.4表3: transinfo表(供應(yīng)表)表名交易信息表(transinfo)數(shù)據(jù)庫用戶sa主鍵trans_ID其他排序字段無索引字段無

22、序號(hào)字段名稱數(shù)據(jù)類型(精度范圍)允許為空Y/N唯一Y/N區(qū)別度默認(rèn)值約束條件/說明1trans_IDintNY無無identity(1,1)主鍵/交易號(hào)2card_IDchar(19)NY無無check(card_ID like '1010 3576 0-90-90-90-9 0-90-90-90-9')外鍵/卡號(hào)3trans_moneymoneyNN無無check(trans_money>0)/交易金額4trans_datedetetimeNN無無default'getdate()'交易日期5trans_typevarchar(5)NN無無check(t

23、rans_type like '存入' or trans_type like '支取')交易類型6remarkvarchar(50)YN無無備注sql腳本create table transinfo( trans_ID int identity(1,1) primary key,-交易號(hào) card_ID char(19) not null check(card_ID like '1010 3576 0-90-90-90-9 0-90-90-90-9') ,-卡號(hào) trans_money money not null check(trans_mon

24、ey>0),-交易金額 trans_date datetime not null default'getdate()',-交易日期 trans_type varchar(5) check(trans_type like '存入' or trans_type like '支取'),-交易類型 remark varchar(50), -備注 foreign key (card_ID) references cardinfo(card_ID) on delete cascade on update cascade)6.5 存儲(chǔ)過程的設(shè)計(jì)1、開戶存

25、儲(chǔ)過程-提示:銀行卡卡號(hào)共19位(4位數(shù)一組,中間用空格隔開),對(duì)于某個(gè)銀行來說,前面8個(gè)數(shù)字是固定的,后面8個(gè)數(shù)字-要求隨機(jī)的,并且唯一。我們只需要產(chǎn)生8位隨機(jī)的數(shù)字,然后和前8位固定的數(shù)字“10103576”連接即可。隨機(jī)函數(shù)的用法下:-RAND(隨機(jī)種子):將產(chǎn)生01的隨機(jī)數(shù),要求每次的隨機(jī)種子不一樣。為了保證隨機(jī)種子每次不相同,一般的算法如下:-隨機(jī)種子=當(dāng)前的月份數(shù)×100000 + 當(dāng)前秒數(shù)×1000 +當(dāng)前毫秒數(shù)-產(chǎn)生了01的隨機(jī)數(shù)后,我們?nèi)⌒?shù)點(diǎn)后8位,即:0.xxxxxxxx-使用substring(字符串,開始位置,長度)create procedure

26、 proc_CardID2 randCardID char(19) output, -輸出參數(shù)-銀行卡號(hào) card_password char(6), -賬號(hào)密碼 open_money money, -開戶金額 isreportloss char(2), -是否掛失 saving_type varchar(10), -存款類型 cur_type char(5), -貨幣類型 customer_name char(10), -用戶姓名 P_ID varchar(18) -身份證號(hào)AS declare r numeric(15,8) -15位數(shù),保留8位小數(shù)declare tempStr char

27、(10)select r=rand(datepart(mm,getdate()*100000)+ (datepart(ss,getdate()*1000)+datepart(ms,getdate() set tempStr=rset randCardID='1010 3576 '+substring(tempStr,3,4)+' '+substring(tempStr,7,4) -若存在該客戶信息 declare customer_ID int if EXISTS(select * from userinfo where P_ID=P_ID) begin - 禁

28、用CHECK約束 alter table cardinfo nocheck constraint ALL; select customer_ID=customer_ID from userinfo where(P_ID=P_ID ) insert into cardinfo(card_ID,customer_ID,card_password,open_money, open_date,isreportloss,balance,saving_type,cur_type) values(randCardID,customer_ID,card_password,open_money, getdate

29、(),isreportloss,open_money,saving_type,cur_type) - 啟用CHECK約束 alter table cardinfo check constraint ALL; end else begin print'需注冊(cè)用戶信息!請(qǐng)先登記您的詳細(xì)信息.' end-執(zhí)行存儲(chǔ)過程:declare randCardID char(19)print '您的卡號(hào)為:'+randCardID2、存錢存儲(chǔ)過程在存儲(chǔ)過程中定義三個(gè)變量,card_ID char(19), inputmoney money和card_password char(

30、6),這三個(gè)變量是用來核對(duì)賬號(hào)的。card_ID char(19)用來核對(duì)卡號(hào)是否正確,inputmoney money暫時(shí)存儲(chǔ)需要存入的金額,card_password char(6)則是用來核對(duì)密碼的。存儲(chǔ)過程中對(duì)所有需要核對(duì)的信息都進(jìn)行了準(zhǔn)確的核對(duì),例如核對(duì)賬號(hào)是否處于掛失狀態(tài),核對(duì)賬號(hào)密碼是否正確。在核對(duì)完所有的信息之后才準(zhǔn)確地完成操作。存錢存儲(chǔ)過程如下:create procedure proc_inputMoney card_ID char(19), inputmoney money , card_password char(6) as declare errorsum int s

31、et errorsum=0 declare isreportloss char(2) select isreportloss=isreportloss from cardinfo where card_ID=card_ID and card_password=card_password if(isreportloss='是') begin print '交易正在進(jìn)行中.' print '帳戶處于掛失狀態(tài)則不可以存款' end else if (cast(inputmoney as int)%100<>0) begin print &#

32、39;交易正在進(jìn)行中.' print '存款金額為100的整數(shù)倍' end else if(inputmoney>10000) begin print '交易正在進(jìn)行中.' print '存款金額不能大于10000' end else begin begin transaction update cardinfo set balance=balance+inputmoney where card_ID=card_ID and card_password=card_password insert transinfo(card_ID,t

33、rans_money,trans_date,trans_type,remark) values (card_ID,inputmoney ,getdate(),'存入','無') declare money money select money=balance from cardinfo where card_ID=card_ID and card_password=card_password print '交易正在進(jìn)行中.' print '卡號(hào):'+card_ID+' 余額'+convert(char(19),mo

34、ney) print '交易成功' if(error<>0) begin rollback transaction end commit transaction end-執(zhí)行存儲(chǔ)過程:exec proc_inputMoney '1010 3576 1111 1111',500,'123456'3、取錢存儲(chǔ)過程在存儲(chǔ)過程中定義三個(gè)變量,card_ID char(19), takemoney money和card_password char(6),這三個(gè)變量是用來核對(duì)賬號(hào)的。card_ID char(19)用來核對(duì)卡號(hào)是否正確,takem

35、oney money暫時(shí)存儲(chǔ)需要取出的金額,并且用該變量存儲(chǔ)的值與數(shù)據(jù)庫中的值進(jìn)行比較,如果變量中的值大于數(shù)據(jù)庫中存儲(chǔ)的余額的,則不進(jìn)行取款操作,card_password char(6)則是用來核對(duì)密碼的。存儲(chǔ)過程中對(duì)所有需要核對(duì)的信息都進(jìn)行了準(zhǔn)確的核對(duì),例如核對(duì)賬號(hào)是否處于掛失狀態(tài),核對(duì)賬號(hào)密碼是否正確。在核對(duì)完所有的信息之后才準(zhǔn)確地完成操作。取錢存儲(chǔ)過程如下:create proc proc_takeMoney card_ID char(19),-卡號(hào) takemoney money,-取款金額 card_password char(6) -密碼as declare errorsum i

36、nt -錯(cuò)誤基數(shù) set errorsum=0begin transaction -開始取款 if not EXISTS( select card_ID from cardinfo where card_ID=card_ID and card_password=card_password) begin print '交易正在進(jìn)行中.' print '賬號(hào)或密碼輸入不正確,請(qǐng)重輸:' end else begin if EXISTS(select * from cardinfo where isreportloss='是')-判斷卡是否掛失 beg

37、in print '交易正在進(jìn)行中.' print '帳戶處于掛失狀態(tài)則不可以取款' end else begin if (cast(takemoney as int)%100<>0)-判斷取款金額是否為100的整數(shù)倍 begin print '交易正在進(jìn)行中.' print '取款金額應(yīng)為100的整數(shù)倍' end else begin declare money money select money=balance from cardinfo where card_ID=card_ID and card_passwo

38、rd=card_password if(takemoney>money) -取款金額不能超過卡上余額 begin print '交易正在進(jìn)行中.' print '余額不足' end else begin update cardinfo set balance=balance-takemoney where card_ID=card_ID and card_password=card_passwordinsert transinfo(card_ID,trans_money,trans_date,trans_type,remark) values (card_

39、ID,takemoney ,getdate(),'支取','無') declare balance money -余額 select balance=balance from cardinfo where card_ID=card_ID and card_password=card_password if(error<>0)begin rollback transactionendelse begincommit transactionprint '交易正在進(jìn)行中.'print '卡號(hào):'+card_ID +'

40、 余額'+convert(char(19),balance) print '交易成功' end end end end end -執(zhí)行存儲(chǔ)過程:exec proc_takeMoney '1010 3576 1111 1111',100,'123456'4、轉(zhuǎn)賬存儲(chǔ)過程:在存儲(chǔ)過程中定義三個(gè)變量,card_ID char(19), card_ID2 char(19)和transmoney money,這三個(gè)變量是用來核對(duì)賬號(hào)的。card_ID char(19)用來核對(duì)轉(zhuǎn)出卡號(hào)是否正確,transmoney money暫時(shí)存儲(chǔ)需要轉(zhuǎn)出的金額,

41、并且用這個(gè)變量中的值與數(shù)據(jù)庫中存儲(chǔ)的余額值進(jìn)行比較,如果這個(gè)轉(zhuǎn)出值大于數(shù)據(jù)庫中的余額值,則不能執(zhí)行操作。card_ID2 char(19)則是用來核對(duì)轉(zhuǎn)入賬號(hào)的。在轉(zhuǎn)賬的存儲(chǔ)過程中,轉(zhuǎn)入的賬號(hào)核對(duì)是非常重要的。存儲(chǔ)過程中對(duì)所有需要核對(duì)的信息都進(jìn)行了準(zhǔn)確的核對(duì),例如核對(duì)賬號(hào)是否處于掛失狀態(tài),核對(duì)賬號(hào)密碼是否正確。在核對(duì)完所有的信息之后才準(zhǔn)確地完成操作。轉(zhuǎn)賬存儲(chǔ)過程如下:create proc proc_transaccountscard_ID char(19),-卡號(hào)card_ID2 char(19),transmoney moneyasbegin tran-開始執(zhí)行事務(wù) declare mon

42、ey int -轉(zhuǎn)賬出錢,減去轉(zhuǎn)出的金額 select money=balance-transmoney -驗(yàn)證是否超額 from cardinfo where card_ID=card_IDif (money > 1) -驗(yàn)證余額begininsert transinfo(card_ID,trans_money,trans_date,trans_type,remark) values (card_ID,transmoney,getdate(),'支取','無')update cardinfoset balance=balance-transmoneywh

43、ere card_ID=card_ID and balance-transmoney>0 update cardinfo -轉(zhuǎn)賬進(jìn)錢,加上轉(zhuǎn)出的金額set balance=balance+transmoneywhere card_ID2=card_ID insert transinfo(card_ID,trans_money,trans_date,trans_type,remark) values (card_ID2,transmoney,getdate(),'存入','無')print '恭喜您,轉(zhuǎn)賬成功!'commit tranif (

44、error<>0) rollback tranreturn 0end elsebeginprint '余額不足,無法轉(zhuǎn)賬'end-執(zhí)行存儲(chǔ)過程:exec proc_transaccounts '1010 3576 1111 2222','1010 3576 1111 1111',150由于每個(gè)操作都用到了存儲(chǔ)過程,所以列出以上具有代表性的存儲(chǔ)過程。6.6 觸發(fā)器的設(shè)計(jì)1、建立觸發(fā)器Decre_trigger:當(dāng)用戶注銷賬號(hào)時(shí),執(zhí)行delete過程。在cardinfo表中出現(xiàn)delete過程時(shí)觸發(fā)。執(zhí)行delete用戶表中的用戶編號(hào)功能

45、:能夠根據(jù)數(shù)據(jù)庫中數(shù)據(jù)的變化來注銷掉選中的用戶信息-觸發(fā)器- -當(dāng)用戶注銷賬號(hào)時(shí),執(zhí)行delete過程 -在cardinfo表中出現(xiàn)delete過程時(shí)觸發(fā) -執(zhí)行delete用戶表中的用戶編號(hào) - create trigger Decre_trigger on cardinfo after delete asdeclare card_ID char(19),customer_id intselect card_ID=card_ID,customer_id=customer_id from deletedbeginprint '開始注銷用戶信息!'delete from user

46、info where customer_id=customer_idprint '恭喜您,用戶信息注銷成功!' end -注銷的過程的創(chuàng)建-用戶注銷卡-核對(duì)卡賬號(hào)密碼-執(zhí)行delete注銷create proc proc_dropcardcard_ID char(19),card_password char(6)asbegin transaction if EXISTS( select card_id from cardinfo where card_ID=card_ID and card_password=card_password)-核對(duì)卡號(hào) begin print 

47、9;請(qǐng)等待' print'開始注銷卡' delete from cardinfo where card_id=card_ID and card_password=card_password print '注銷成功' commit transaction end else begin print '您的卡不存在,無需注銷' rollback transaction end-執(zhí)行注銷過程:exec proc_dropcard '1010 3576 1111 1111','111111'七、操作結(jié)果7.1 存款測(cè)

48、試結(jié)果在執(zhí)行存儲(chǔ)過程的時(shí)候同事執(zhí)行兩行查詢語句,查詢卡上存款前后的信息,進(jìn)行對(duì)照,來檢測(cè)存儲(chǔ)過程的設(shè)計(jì)是都正確,檢測(cè)存儲(chǔ)過程的執(zhí)行是否正確。該存儲(chǔ)過程執(zhí)行的是將卡號(hào)為1010 3576 1111 1111中的的balance存入500,可以看到balance的值由開始的100變?yōu)?00.執(zhí)行中沒有出現(xiàn)報(bào)錯(cuò)現(xiàn)象,說明存儲(chǔ)過程的設(shè)計(jì)和執(zhí)行都是正確的。執(zhí)行結(jié)果如下圖:圖7.1 存款前后結(jié)果查詢7.2 取款測(cè)試結(jié)果在執(zhí)行存儲(chǔ)過程的時(shí)候同事執(zhí)行兩行查詢語句,查詢卡上取款款前后的信息,進(jìn)行對(duì)照,來檢測(cè)存儲(chǔ)過程的設(shè)計(jì)是都正確,檢測(cè)存儲(chǔ)過程的執(zhí)行是否正確。該存儲(chǔ)過程執(zhí)行的是將卡號(hào)為1010 3576 1111

49、 1111中的的balance取出100,可以看到balance的值由開始的600變?yōu)?00.執(zhí)行中沒有出現(xiàn)報(bào)錯(cuò)現(xiàn)象,說明存儲(chǔ)過程的設(shè)計(jì)和執(zhí)行都是正確的。執(zhí)行結(jié)果如下圖:圖7.2取款前后結(jié)果查詢7.3 轉(zhuǎn)賬測(cè)試結(jié)果在執(zhí)行存儲(chǔ)過程的時(shí)候同事執(zhí)行兩行查詢語句,查詢卡上取款款前后的信息,進(jìn)行對(duì)照,來檢測(cè)存儲(chǔ)過程的設(shè)計(jì)是都正確,檢測(cè)存儲(chǔ)過程的執(zhí)行是否正確。該存儲(chǔ)過程執(zhí)行的是將卡號(hào)為1010 3576 1111 2222中的的balance轉(zhuǎn)出150到卡號(hào)為1010 3576 1111 1111中去,可以看到1010 3576 1111 1111卡中balance的值由開始的500變?yōu)?50。1010 3576 1111 2222卡中balance的值由開始的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論