版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p> 《數(shù)據(jù)庫技術(shù)與開發(fā)》</p><p><b> 項(xiàng)目實(shí)訓(xùn)設(shè)計(jì)報(bào)告</b></p><p> 項(xiàng)目名稱:銀行ATM存取款機(jī)系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)</p><p><b> 一、項(xiàng)目背景3</b></p><p><b> 1、項(xiàng)目任務(wù)3</b></
2、p><p> 2、項(xiàng)目技能目標(biāo)3</p><p><b> 3、需求概述3</b></p><p><b> 4、開發(fā)環(huán)境3</b></p><p><b> 5、問題分析4</b></p><p> 二、項(xiàng)目實(shí)訓(xùn)內(nèi)容6</p>
3、;<p> 1、實(shí)訓(xùn)一:制定《數(shù)據(jù)庫設(shè)計(jì)與編程規(guī)范》6</p><p> 2、實(shí)訓(xùn)二:數(shù)據(jù)庫分析設(shè)計(jì)與建模12</p><p> 3、實(shí)訓(xùn)三:創(chuàng)建數(shù)據(jù)庫14</p><p> 4、實(shí)訓(xùn)四:創(chuàng)建觸發(fā)器和插入測試數(shù)據(jù)19</p><p> 5、實(shí)訓(xùn)五:模擬常規(guī)業(yè)務(wù)26</p><p>
4、6、實(shí)訓(xùn)六:創(chuàng)建、使用視圖30</p><p> 7、實(shí)訓(xùn)七:存儲過程實(shí)現(xiàn)業(yè)務(wù)處理33</p><p> 8、實(shí)訓(xùn)八:利用事務(wù)實(shí)現(xiàn)轉(zhuǎn)賬49</p><p><b> 8、心得體會54</b></p><p><b> 一、項(xiàng)目背景</b></p><p>&l
5、t;b> 1、項(xiàng)目任務(wù)</b></p><p> 使用PowerDesigner完成數(shù)據(jù)庫設(shè)計(jì)</p><p> 創(chuàng)建數(shù)據(jù)庫、創(chuàng)建表、創(chuàng)建約束</p><p> 使用觸發(fā)器和插入測試數(shù)據(jù)</p><p> 模擬常規(guī)業(yè)務(wù)、創(chuàng)建視圖</p><p> 使用存儲過程實(shí)現(xiàn)業(yè)務(wù)處理</p>
6、;<p> 利用事務(wù)實(shí)現(xiàn)較復(fù)雜的數(shù)據(jù)更新</p><p><b> 2、項(xiàng)目技能目標(biāo)</b></p><p> 使用PowerDesigner完成數(shù)據(jù)庫概念模型和數(shù)據(jù)庫物理模型設(shè)計(jì)。</p><p> 使用T-SQL語句創(chuàng)建數(shù)據(jù)庫、表和各種約束。</p><p> 使用T-SQL語句編程實(shí)現(xiàn)常見業(yè)
7、務(wù)。</p><p> 使用觸發(fā)器實(shí)現(xiàn)多表之間的級聯(lián)更新。</p><p> 使用事務(wù)和存儲過程封裝業(yè)務(wù)邏輯。</p><p> 使用視圖簡化復(fù)雜的數(shù)據(jù)查詢。</p><p> 使用游標(biāo)技術(shù)實(shí)現(xiàn)結(jié)果集的行集操作。</p><p><b> 3、需求概述</b></p>&l
8、t;p> 某銀行是一家民辦的小型銀行企業(yè),現(xiàn)有十多萬客戶,公司將為該銀行開發(fā)一套ATM存取款機(jī)系統(tǒng),對銀行日常的存取款業(yè)務(wù)進(jìn)行計(jì)算機(jī)管理,以便保證數(shù)據(jù)的安全性,提高工作效率。</p><p> 要求根據(jù)銀行存取款業(yè)務(wù)需求設(shè)計(jì)出符合第三范式的數(shù)據(jù)庫結(jié)構(gòu),使用T-SQL語言創(chuàng)建數(shù)據(jù)庫和表,并添加表約束,進(jìn)行數(shù)據(jù)的增刪改查,運(yùn)用邏輯結(jié)構(gòu)語句、事務(wù)、視圖和存儲過程,按照銀行的業(yè)務(wù)需求,實(shí)現(xiàn)各項(xiàng)銀行日常存款、取款
9、和轉(zhuǎn)賬業(yè)務(wù)。</p><p><b> 4、開發(fā)環(huán)境</b></p><p> 數(shù)據(jù)庫:SQL SERVER 2008開發(fā)版</p><p> 數(shù)據(jù)庫建模工具:PowerDesigner15</p><p><b> 問題分析</b></p><p> 該項(xiàng)目的AT
10、M存取款機(jī)業(yè)務(wù)如下:</p><p> (1) 銀行存取款業(yè)務(wù)介紹</p><p> 銀行為客戶提供了各種銀行存取款業(yè)務(wù)。詳見表1</p><p><b> 銀行存取款業(yè)務(wù)</b></p><p><b> (2) 客戶信息</b></p><p> 每個(gè)客戶憑
11、個(gè)人身份證在銀行可以開設(shè)多個(gè)銀行卡賬戶,開設(shè)賬戶時(shí),客戶需要提供的開戶數(shù)據(jù)如表2所示:</p><p> 開設(shè)銀行卡賬戶的客戶信息</p><p> (3) 銀行卡賬戶信息</p><p> 銀行為每個(gè)賬戶提供一個(gè)銀行卡,每個(gè)銀行卡可以存入一種幣種的存款,銀行保存賬戶如表3所示:</p><p><b> 銀行卡賬戶信息&
12、lt;/b></p><p> 客戶持銀行卡在ATM機(jī)上輸入密碼,經(jīng)系統(tǒng)驗(yàn)證身份后辦理存款、取款和轉(zhuǎn)賬等銀行業(yè)務(wù)。銀行規(guī)定,每個(gè)賬戶當(dāng)前的存款金額不得小于1元。</p><p> (4) 銀行卡交易信息</p><p> 銀行在為客戶辦理業(yè)務(wù)時(shí),需要記錄每一筆賬目,賬目交易信息如表4所示:</p><p><b> 銀
13、行卡交易信息</b></p><p> 銀行卡手工賬戶和存取款單據(jù)信息</p><p> 該銀行要求這套軟件實(shí)現(xiàn)銀行客戶的開戶、存款、取款、轉(zhuǎn)賬和余額查詢等業(yè)務(wù),使得銀行儲蓄業(yè)務(wù)方便、快捷,同事保證銀行業(yè)務(wù)數(shù)據(jù)的安全性。</p><p> 為使開發(fā)人員盡快了解銀行業(yè)務(wù),該銀行提供了銀行卡手工賬戶和存取款單據(jù)的樣本數(shù)據(jù),以供項(xiàng)目開發(fā)時(shí)參考,參加表5和
14、表6。</p><p> 銀行卡手工賬戶樣本數(shù)據(jù)</p><p><b> 存取款單據(jù)樣本數(shù)據(jù)</b></p><p><b> 二、項(xiàng)目實(shí)訓(xùn)內(nèi)容</b></p><p> 實(shí)訓(xùn)一:制定《數(shù)據(jù)庫設(shè)計(jì)與編程規(guī)范》</p><p><b> 長度規(guī)范</
15、b></p><p> 凡是需要命名的對象其標(biāo)識符均控制在30個(gè)字符以內(nèi),也即:SQL Server中的表名、字段名、函數(shù)名、存儲過程、觸發(fā)器、視圖等名字長度要盡量不超過30個(gè)字符長度。</p><p><b> 構(gòu)成規(guī)范</b></p><p> 數(shù)據(jù)庫各種名稱必須以字母開頭,但嚴(yán)禁以系統(tǒng)關(guān)鍵字開頭,名稱只能含有字母、數(shù)字以及下劃
16、線“_”三類字符,“_”用于間隔名稱中的各語義字段;不要使用系統(tǒng)保留字作表名。</p><p><b> 大小寫規(guī)范</b></p><p> 構(gòu)成SQL Server數(shù)據(jù)庫中的各種名稱(表名、字段名、過程名、視圖名等所有命名符的首字母需要使用大寫,也即每個(gè)命名單詞的首字母大寫,其它字符小寫。但對于簡寫或縮寫的短單詞,如ID、UI可以全為大寫。</p>
17、<p><b> 主鍵規(guī)范</b></p><p> 除臨時(shí)表、流水表以及日志表外,其它表都要建立主鍵。主鍵最好設(shè)計(jì)成單一主鍵,盡量不要用復(fù)合主鍵,盡量使用沒有業(yè)務(wù)語義的字段作為主鍵,</p><p> 如采用按順序自增的數(shù)值型字段為主鍵</p><p><b> 注釋規(guī)范</b></p>
18、<p> 每個(gè)表,每個(gè)字段都要有注釋,說明其含義,對于冗余字段還要特別說明其</p><p> 維護(hù)方法,外鍵字段要說明參照于那個(gè)表,另外對于存儲過程、視圖、觸發(fā)器、函數(shù)等代碼均要增加注釋,以保持代碼的可讀性以及后續(xù)的可維護(hù)性。</p><p><b> 行大小規(guī)范 </b></p><p> SQL Server的1頁
19、的大小是8K,因此一行的數(shù)據(jù)要控制到8K之內(nèi),如果超過8K要想辦法將表進(jìn)行拆分成多個(gè)子表。</p><p><b> 數(shù)據(jù)保留策略</b></p><p> 大表由于數(shù)據(jù)量較大,往往是系統(tǒng)的性能瓶頸所在,因此對于大表的設(shè)計(jì)好考慮到今后的數(shù)據(jù)轉(zhuǎn)移、分片、Partition等,并且對大表以及其相關(guān)表</p><p> 的數(shù)據(jù)保留時(shí)間也要有一個(gè)
20、提前規(guī)劃,以免今后出現(xiàn)性能問題束手無策。</p><p><b> 必備字段要求 </b></p><p> 每個(gè)大表都應(yīng)該添加以下幾個(gè)有用的字段,分別為創(chuàng)建日期、修改日期、操</p><p> 作人以及版本標(biāo)記,創(chuàng)建這些字段的目的是為今后的數(shù)據(jù)轉(zhuǎn)移以及分片或分</p><p> 區(qū)做準(zhǔn)備,同時(shí)也有利于今后的數(shù)
21、據(jù)審計(jì)等。</p><p><b> 注意事項(xiàng) </b></p><p> 基于大表的任何操作都要慎重思考,通常情況下要禁止在大表上創(chuàng)建觸發(fā)器,禁止在大表上做頻繁的批量更新或刪除動(dòng)作,禁止在生產(chǎn)時(shí)間對大表</p><p> 做DDL操作,禁止在大表上做全表掃描(Full Scan)等。</p><p><b&
22、gt; 臨時(shí)表功能</b></p><p> SQL Server分為全局臨時(shí)表和局部臨時(shí)表,臨時(shí)表在很多場合下能帶來意想不到的效果,尤其是需要中轉(zhuǎn)的數(shù)據(jù)記錄集采用臨時(shí)表能提升系統(tǒng)性能。臨時(shí)表支持索引、約束、排序等實(shí)體表具有的功能。</p><p><b> 存儲特點(diǎn) </b></p><p> 臨時(shí)表的數(shù)據(jù)存儲在tempd
23、b數(shù)據(jù)庫中,因此過于頻繁的創(chuàng)建臨時(shí)表會增加tempdb庫的負(fù)荷,尤其是數(shù)據(jù)量超過10W條記錄的臨時(shí)表更是會影響tempdb庫的性能,由此在某些情況下可用CTE替代臨時(shí)表的使用。</p><p><b> 注意事項(xiàng) </b></p><p> 臨時(shí)表執(zhí)行完畢后,要及時(shí)的手工Drop掉,及時(shí)釋放資源,減輕系統(tǒng)的Loading,另外特別注意的是要盡量禁止使用全局臨時(shí)表,
24、全局適合多個(gè)session間的數(shù)據(jù)交互,但往往會引起數(shù)據(jù)的串值。</p><p><b> 命名規(guī)范</b></p><p> 盡量采用有意義的字段名,使描述盡可能清楚,如采用縮寫,盡量使用通用的縮寫語言,如addr代表address,避免出現(xiàn)只有自己理解的縮寫。</p><p><b> 日期字段 </b><
25、/p><p> 時(shí)效性數(shù)據(jù)應(yīng)包括“創(chuàng)建時(shí)間/修改時(shí)間”字段,時(shí)間標(biāo)記對查找數(shù)據(jù)、清理數(shù)據(jù)、排序合并特別有用,另外要根據(jù)具體業(yè)務(wù)考量時(shí)間字段的類型,如在Smalldatetime和Datetime類型進(jìn)行選擇。</p><p><b> 注意保留詞 </b></p><p> 對于字段的命名,要確保字段名沒有和保留詞、數(shù)據(jù)庫系統(tǒng)或者常用方法沖
26、突,比如master、CROSS、address、substring、len、sysobjects等詞就不適合用來做字段的獨(dú)立命名。</p><p><b> 數(shù)值規(guī)范</b></p><p> 數(shù)值型的主要有INT、BIGINT、TINYINT、SMALLINT、FLOAT、NUMERIC、MONEY等類型,要根據(jù)實(shí)際應(yīng)用選擇合適的類型,如字段的數(shù)據(jù)為小于255
27、的整形數(shù)字,那么就要選擇TINYINT;如字段數(shù)據(jù)小于32767的整形數(shù)字,那么就要選擇SMALLINT,以此類推。</p><p><b> 文本規(guī)范</b></p><p> 文本類型主要有CHAR、VARCHAR、TEXT等類型,要根據(jù)實(shí)際應(yīng)用選擇合適的類型,如字段文本長度固定為8位,那么就要用CHAR(8);如文本長度最大為100,并且大小是非定長的,那么
28、就要設(shè)為VARCHAR(100)。并且以上文本若為漢字,那么就要設(shè)為NVARCHAR和NCHAR。</p><p><b> 字段命名技巧 </b></p><p> 字段命名要統(tǒng)一規(guī)范,同一個(gè)字段在不同的表中命名要一致,另外字段名一般都要帶上業(yè)務(wù)模塊的前綴,如訂單(Order)價(jià)格字段命名為Or_Price,部門(Department)編號為Dep_No。命名
29、規(guī)范沒有那個(gè)是最合理的,只有定義好最適合自己的統(tǒng)一規(guī)范即可。</p><p><b> 外鍵建立索引</b></p><p> 外鍵不建立索引,將有可能導(dǎo)致兩個(gè)嚴(yán)重的問題。1.更新相關(guān)的表產(chǎn)生死鎖。2.兩表關(guān)聯(lián)查詢時(shí)性能低下。因此通常情況下都必須要求外鍵建立索引。</p><p><b> 聯(lián)合索引規(guī)范</b><
30、;/p><p> 當(dāng)數(shù)據(jù)對某表經(jīng)常要多條件查詢時(shí),可能就需要建立聯(lián)合索引,聯(lián)合索引的第一個(gè)引導(dǎo)列字段非常重要,引導(dǎo)列字段通常要能過濾掉大部分?jǐn)?shù)據(jù),這樣方能減少IO的讀寫,提高性能。非引導(dǎo)列字段在引導(dǎo)列的查詢數(shù)據(jù)基礎(chǔ)上繼續(xù)過濾數(shù)據(jù),以提高查詢速度。聯(lián)合索引對更新會產(chǎn)生一定的性能影響。</p><p><b> 禁用多余索引</b></p><p>
31、; 數(shù)據(jù)庫索引能提高查詢速度,但會增加寫操作的開銷,因此對一些幾月或者從沒有使用過的索引要?jiǎng)h除掉,以免增大數(shù)據(jù)庫的負(fù)荷。</p><p><b> 重復(fù)索引問題</b></p><p> 一般情況下,盡量避免重復(fù)索引的出現(xiàn),重復(fù)索引很容易引起死鎖,減低數(shù)據(jù)庫的并發(fā)訪問。重復(fù)索引也會造成索引的維護(hù)困難。</p><p><b>
32、 索引數(shù)量限制</b></p><p> 數(shù)據(jù)庫索引主要用來解決讀的性能瓶頸,但是會增加寫操作的負(fù)荷,因此過多的索引會造成更新速度變慢,甚至?xí)鸩灰乃梨i。一般情況下表中的索引不要超過5個(gè)。</p><p><b> 注意事項(xiàng)</b></p><p> 建立索引前,要充分了解表的使用及數(shù)據(jù)特性,要了解表的查詢條件和查詢頻率,
33、甚至隨著業(yè)務(wù)的變化而引起表數(shù)據(jù)使用狀況的變化,帶之而來的是索引也需要相應(yīng)調(diào)整。</p><p><b> 命名規(guī)范</b></p><p> 存儲過程命名遵守統(tǒng)一的規(guī)范,對于業(yè)務(wù)存儲過程要以p或proc開頭,接著加上”_”,然后再加上模塊名稱簡寫和具體的業(yè)務(wù)詞,最后加上執(zhí)行類型。</p><p> 數(shù)據(jù)庫的存儲過程名嚴(yán)禁以sp開頭,sp通
34、常表示系統(tǒng)數(shù)據(jù)庫存儲過程名的前綴。觸發(fā)器以Tr開頭,接著加上”_”,然后加上表名。</p><p><b> 書寫規(guī)范</b></p><p> 關(guān)鍵字建議用大寫,同樣的代碼書寫格式保持一致,SQL腳本采用縮進(jìn)風(fēng)格,風(fēng)格一致,縮進(jìn)格式一致,使用空格。</p><p><b> INSERT規(guī)范 </b></p&
35、gt;<p> 通常情況下,INSERT語句要給出具體的字段列表,避免采用“INSERT INTO TB_1 VALUES(‘值1’,’值2’,’值3’)”用法,此種用法往往會由于表結(jié)構(gòu)變遷而導(dǎo)致語句不可執(zhí)行</p><p><b> 避免隱式轉(zhuǎn)換</b></p><p> 書寫時(shí),必須明確表結(jié)構(gòu)及表中各個(gè)字段的數(shù)據(jù)類型,特別是查詢條件中的字段,
36、要避免由于類型的不同導(dǎo)致數(shù)據(jù)類型轉(zhuǎn)換的發(fā)生,從而減少因?yàn)?lt;/p><p> 數(shù)據(jù)類型轉(zhuǎn)換產(chǎn)生的系統(tǒng)開銷。</p><p><b> NULL陷阱</b></p><p> NULL不要直接用來進(jìn)行運(yùn)算符的比較,也不要和其它值進(jìn)行連接操作,判斷一個(gè)值是否為NULL值時(shí),要采用IS NULL來進(jìn)行比較。</p><p>
37、;<b> LIKE規(guī)范 </b></p><p> LIKE子句應(yīng)盡量前段匹配,要避免通配符在前段,以免導(dǎo)致全索引掃描的發(fā)生。</p><p><b> 參數(shù)化代碼</b></p><p> SQL中常量的直接使用,會導(dǎo)致SQL語句頻繁的硬解析,進(jìn)而嚴(yán)重影響數(shù)據(jù)庫的性能,基于這些原因,代碼中要盡量采用參數(shù)綁定,以
38、減少語句硬解析的次數(shù),從而提高語句執(zhí)行性能。</p><p><b> 動(dòng)態(tài) SQL</b></p><p> 動(dòng)態(tài)SQL是在運(yùn)行時(shí)才進(jìn)行解析的,相當(dāng)于是硬解析,因此會損失一些系統(tǒng)性能,但是動(dòng)態(tài)SQL寫法靈活,因此在某些情況下需要以性能換靈活,但對于用靜態(tài)語句就能簡單實(shí)現(xiàn)的SQL,就不要用動(dòng)態(tài)SQL語句。</p><p><b>
39、 嵌套層級限制 </b></p><p> 嵌套查詢盡量少使用,尤其是對于超過3層的嵌套查詢更要慎用,對于復(fù)雜的嵌套語句要根據(jù)業(yè)務(wù)進(jìn)行拆分為多條SQL來實(shí)現(xiàn),或者通過臨時(shí)表來取代一部分嵌套層級。</p><p><b> 排序規(guī)范</b></p><p> SQL語句中要盡量減少排序,對查詢結(jié)果進(jìn)行的排序會大大降低系統(tǒng)的性能
40、,并且會增加tempdb數(shù)據(jù)庫的負(fù)荷,因此在開發(fā)時(shí)間寬松情況下,要盡量將排序動(dòng)作放到應(yīng)用程序?qū)尤ネ瓿伞?lt;/p><p><b> 代碼注釋要求 </b></p><p> 注釋是指程序中會被編譯器忽略掉的部分,目的是描述代碼的用途及更新時(shí)間,合理的添加注釋可以使得程序結(jié)構(gòu)清晰,可以使代碼更好理解,便于系統(tǒng)后續(xù)的維護(hù)。一般情況下,注釋要不少于代碼的十分之一。<
41、/p><p><b> 靜態(tài) SQL</b></p><p> SQL語句要盡可能采用靜態(tài)SQL,靜態(tài)SQL第一次執(zhí)行時(shí)會將編譯器解析的結(jié)果存儲在緩存中,下次執(zhí)行該靜態(tài)SQL時(shí)會直接從緩存中獲取其執(zhí)行計(jì)劃,相當(dāng)于是軟解析,因此采用靜態(tài)SQL可以減少語句的解析時(shí)間,提升了數(shù)據(jù)庫的性能。</p><p><b> 最小事務(wù)原則</
42、b></p><p> 數(shù)據(jù)庫事務(wù)用來保持?jǐn)?shù)據(jù)的一致性,但是對于一個(gè)執(zhí)行時(shí)間較長的大事務(wù),會造成數(shù)據(jù)庫鎖的增加,當(dāng)鎖越積越多的時(shí)候就會從行鎖升級到頁鎖,從業(yè)鎖升級到表鎖,從而嚴(yán)重影響數(shù)據(jù)庫的性能。因此,在能滿足數(shù)據(jù)一致性的前提下,要盡量將非一致性要求的語句代碼從事務(wù)中移除,以便提升數(shù)據(jù)庫的并發(fā)訪問。</p><p><b> 順序提交 </b></p&
43、gt;<p> 順序提交是一個(gè)好的代碼編寫習(xí)慣,順序提交可以減少死鎖的發(fā)生,并且還能增加代碼的可讀性及可維護(hù)性。</p><p> 2、實(shí)訓(xùn)二:數(shù)據(jù)庫分析設(shè)計(jì)與建模</p><p> (1) 分析銀行ATM存取款系統(tǒng)實(shí)體</p><p> 銀行存取款系統(tǒng)ER圖</p><p><b> 規(guī)范數(shù)據(jù)庫結(jié)構(gòu)設(shè)計(jì)&l
44、t;/b></p><p> 第一范式(1NF)是指數(shù)據(jù)庫表的每一列都是不可分割的基本數(shù)據(jù)項(xiàng),同一列中不能有多個(gè)值,即實(shí)體中的某個(gè)屬性不能有多個(gè)值或者不能有重復(fù)的屬性。</p><p> 如在銀行客戶表BankCustomer中,不能將客戶信息都放在一列中顯示,也不能將其中的兩列或多列在一列中顯示;客戶信息表的每一行只表示一個(gè)員工的信息,一個(gè)客戶的信息在表中只出現(xiàn)一次。簡而言之,
45、第一范式就是無重復(fù)的列。</p><p> 第二范式(2NF)要求實(shí)體的屬性完全依賴于主關(guān)鍵字。</p><p> 如銀行交易信息表BankDealInfo中,不能把卡號設(shè)為主鍵因?yàn)橐粋€(gè)卡號可以發(fā)生多條交易記錄。要確定唯一的一條信息,必須重新定義一個(gè)和其它屬性無關(guān)的交易編號。這樣要查詢一條交易信息。就可以用交易編號。簡而言之,第二范式就是屬性完全依賴于主鍵。 </p>&
46、lt;p> 第三范式(3NF)要求一個(gè)數(shù)據(jù)庫表中不包含已在其它表中已包含的非主關(guān)鍵字信息。</p><p> 如銀行卡表BankCard中,有了用戶Id后。不能還添加用戶姓名等相關(guān)的用戶信息。否則就會有大量的數(shù)據(jù)冗余。簡而言之,第三范式就是屬性不依賴于其它非主屬性。 </p><p> (3) 繪制CDM模型、生成PDM模型</p><p> 銀行存取
47、款系統(tǒng)數(shù)據(jù)概念模型CDM</p><p> 銀行存取款系統(tǒng)數(shù)據(jù)物理模型PDM</p><p> 3、實(shí)訓(xùn)三:創(chuàng)建數(shù)據(jù)庫</p><p><b> (1) 創(chuàng)建數(shù)據(jù)庫</b></p><p> 使用Create DataBase語句創(chuàng)建“ATM存取款機(jī)系統(tǒng)”數(shù)據(jù)庫BankDB,數(shù)據(jù)文件和日志文件保存在指定目錄下文件
48、增長率為15%。</p><p> --創(chuàng)建BankDB數(shù)據(jù)庫,數(shù)據(jù)庫文件和日志文件均保存在</p><p> --文件夾d:\sql下</p><p> --文件增長率均為%,數(shù)據(jù)文件起始大小為MB,日志文件起始大小為MB</p><p> CREATE DATABASE BankDB</p><p> O
49、N PRIMARY</p><p><b> (</b></p><p> NAME=N'BankDB',</p><p> FILENAME=N'd:\sql\BankDB.mdf',</p><p><b> SIZE=5MB,</b></p>
50、<p> FILEGROWTH=15%</p><p><b> )</b></p><p><b> LOG ON </b></p><p><b> (</b></p><p> NAME=N'BankDB_log',</p&g
51、t;<p> FILENAME=N'd:\sql\BankDB_log.ldf',</p><p><b> SIZE=2MB,</b></p><p> FILEGROWTH=15%</p><p><b> )</b></p><p> (2) 創(chuàng)建各個(gè)數(shù)
52、據(jù)表及相關(guān)的約束</p><p> 根據(jù)銀行業(yè)務(wù),分析表中每個(gè)列相應(yīng)的約束要求,為每個(gè)表添加各種約束。要求創(chuàng)建表時(shí)要求檢測是否存在表結(jié)構(gòu),如果存在,則先刪除再創(chuàng)建。</p><p> USE BankDB</p><p><b> GO</b></p><p> --判斷銀行業(yè)務(wù)類型是否存在,若存在則刪除<
53、/p><p> --sysobjects系統(tǒng)對象表。保存當(dāng)前數(shù)據(jù)庫的對象。</p><p> --OBJECT_ID()根據(jù)對象名稱返回該對象的id</p><p> IF EXISTS(SELECT * FROM sysobjects WHERE id=OBJECT_ID(N'BankBusinessType'))</p><
54、p> DROP TABLE BankBusinessType</p><p> --創(chuàng)建銀行業(yè)務(wù)類型表</p><p> CREATE TABLE BankBusinessType</p><p><b> (</b></p><p> --銀行業(yè)務(wù)類型編號</p><p>
55、 BBTId INT IDENTITY(1,1) PRIMARY KEY,</p><p> --銀行業(yè)務(wù)類型名稱</p><p> BBTName CHAR(20) NOT NULL,</p><p><b> --銀行業(yè)務(wù)描述</b></p><p> BBTComment VARCHAR(100) <
56、/p><p><b> )</b></p><p><b> GO</b></p><p> --判斷銀行卡客戶是否存在,若存在則刪除</p><p> IF EXISTS (SELECT * FROM sysobjects WHERE id=OBJECT_ID(N'BankCustom
57、er'))</p><p> DROP TABLE BankCustomer</p><p> --創(chuàng)建銀行客戶信息表</p><p> CREATE TABLE BankCustomer</p><p><b> (</b></p><p><b> --客戶編號&l
58、t;/b></p><p> BCId INT IDENTITY(1,1) PRIMARY KEY,</p><p><b> --客戶姓名</b></p><p> BCName CHAR(20) NOT NULL,</p><p> --客戶身份證,定義身份證號前位必須是數(shù)字,后位可以是數(shù)字或者X。&l
59、t;/p><p> BCICNo CHAR(18) NOT NULL CHECK(LEFT(BCICNo,17) LIKE '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' </p><p> AND (RIGHT(BCICNo,1) LIKE
60、39;[0-9]' OR RIGHT(BCICNo,1) LIKE 'X')),</p><p> --客戶聯(lián)系電話,必須是固定電話號碼或者手機(jī)號</p><p> BCTel VARCHAR(20) NOT NULL CHECK(BCTel like '[0-9][0-9][0-9][0-9]_[0-9][0-9][0-9][0-9][0-9][0-9
61、][0-9]' or</p><p> BCTel like '[0-9][0-9][0-9]_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' or </p><p> BCTel like '1[358][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'),<
62、/p><p><b> --客戶居住地址</b></p><p> BCAddr varchar(100)</p><p><b> )</b></p><p><b> GO</b></p><p> --判斷銀行卡是否存在,若存在。則刪除Ban
63、kCard</p><p> IF EXISTS(SELECT * FROM sysobjects WHERE id=OBJECT_ID(N'BankCard'))</p><p> DROP TABLE BankCard</p><p><b> --建立銀行卡信息</b></p><p> C
64、REATE TABLE BankCard</p><p><b> (</b></p><p><b> --銀行卡號</b></p><p> BCNo CHAR(19) PRIMARY KEY CHECK(BCNo LIKE '1010 3576 [0-9][0-9][0-9][0-9] [0-9][0-
65、9][0-9][0-9]'),</p><p><b> --密碼</b></p><p> BCPwd CHAR(6) NOT NULL DEFAULT('888888'),</p><p><b> --幣種</b></p><p> BCCurrency CHA
66、R(5) NOT NULL DEFAULT('RMB'),</p><p><b> --存款類型</b></p><p> BCBBTId INT NOT NULL,</p><p><b> --開戶日期</b></p><p> BCOpenDate DATE NOT
67、NULL DEFAULT(GETDATE()),</p><p><b> --開戶金額</b></p><p> BCOpenAmount MONEY NOT NULL CHECK(BCOpenAmount>=1),</p><p><b> --是否掛失</b></p><p>
68、BCRegLoss CHAR(2) DEFAULT('否'),</p><p><b> --客戶編號</b></p><p> BCBCId INT NOT NULL,</p><p><b> --余額</b></p><p> BCExistBalance MONEY
69、NOT NULL</p><p><b> )</b></p><p><b> GO</b></p><p> --判斷交易信息BankDealInfo是否存在,若存在則刪除</p><p> IF EXISTS(SELECT * FROM sysobjects WHERE id=OBJE
70、CT_ID(N'BankDealInfo'))</p><p> DROP TABLE BankDealInfo</p><p><b> --創(chuàng)建交易信息表</b></p><p> CREATE TABLE BankDealInfo</p><p><b> (</b>&
71、lt;/p><p><b> --交易編號</b></p><p> BDNo INT IDENTITY(1,1) PRIMARY KEY,</p><p><b> --卡號</b></p><p> BDBCNo CHAR(19) NOT NULL,</p><p>
72、<b> --交易日期</b></p><p> BDDealDate DATE NOT NULL,</p><p><b> --交易金額</b></p><p> BDDealAcount MONEY NOT NULL,</p><p><b> --交易類型</b&g
73、t;</p><p> BDDealType CHAR(10) NOT NULL CHECK(BDDealType='存入' OR BDDealType='支取'),</p><p><b> --交易備注</b></p><p> BDDealComment varchar(100)</p>
74、<p><b> )</b></p><p> (3) 添加外鍵約束和生成數(shù)據(jù)庫關(guān)系圖</p><p> 添加子表外鍵約束及生成數(shù)據(jù)庫關(guān)系圖</p><p> ALTER TABLE BankCard</p><p> ADD CONSTRAINT FK_BC_BBT FOREIGN KEY(BCB
75、BTId) REFERENCES BankBusinessType(BBTId)</p><p> ALTER TABLE BankCard</p><p> ADD CONSTRAINT FK_BC_BC FOREIGN KEY(BCBCId) REFERENCES BankCustomer(BCId)</p><p> ALTER TABLE BankDe
76、alInfo</p><p> ADD CONSTRAINT FK_BDI_BC FOREIGN KEY(BDBCNo) REFERENCES BankCard(BCNo)</p><p> 在SQL SERVER里自動(dòng)生成數(shù)據(jù)庫關(guān)系圖,如下圖所示:</p><p> BankDb數(shù)據(jù)庫關(guān)系圖</p><p> 4、實(shí)訓(xùn)四:創(chuàng)建觸發(fā)器
77、和插入測試數(shù)據(jù)</p><p> (1) 創(chuàng)建級聯(lián)觸發(fā)器</p><p> 創(chuàng)建Insert觸發(fā)器</p><p> 在交易信息表創(chuàng)建一個(gè)Insert觸發(fā)器,當(dāng)增加一條交易信息時(shí),修改相應(yīng)銀行卡的存款余額。</p><p> --在交易信息表插入觸發(fā)器.使用游標(biāo)當(dāng)新增一個(gè)交易信息.修改銀行卡的存款余額</p><p
78、> --檢查觸發(fā)器是否存在.存在則刪除</p><p> IF(OBJECT_ID('tr_InsertDealInfo','TR') IS NOT null)</p><p> DROP TRIGGER tr_InsertDealInfo</p><p><b> GO</b></p>
79、<p> --創(chuàng)建Insert觸發(fā)器</p><p> CREATE TRIGGER tr_InsertDealInfo ON BankDealInfo FOR INSERT</p><p><b> AS</b></p><p> DECLARE @type CHAR(10),@sum MONEY,@BDBCNo CHA
80、R(19)</p><p> --定義游標(biāo),指向inserted表</p><p> DECLARE cursor_BankDealInfo CURSOR FOR </p><p> SELECT BDDealType,BDDealAcount,BDBCNo FROM Inserted</p><p><b> --打開游標(biāo)
81、</b></p><p> OPEN cursor_BankDealInfo</p><p> --讀取游標(biāo).賦值給相應(yīng)字段</p><p> FETCH NEXT FROM cursor_BankDealInfo INTO @type,@sum,@BDBCNo</p><p> --@@FETCH_STATUS=0 FE
82、TCH 語句成功</p><p> WHILE @@FETCH_STATUS=0</p><p><b> BEGIN</b></p><p> --根據(jù)交易類型.更新銀行卡余額.RTRIM和LRAIM是去除首尾空格</p><p> IF(RTRIM(LTRIM(@type))='存入')<
83、;/p><p> UPDATE BankCard SET BCExistBalance=BCExistBalance+@sum WHERE BCNo=@BDBCNo</p><p> IF(RTRIM(LTRIM(@type))='支取')</p><p> UPDATE BankCard SET BCExistBalance=BCExistBal
84、ance-@sum WHERE BCNo=@BDBCNoFETCH NEXT FROM cursor_BankDealInfo INTO @type,@sum,@BDBCNo</p><p><b> END</b></p><p><b> --關(guān)閉游標(biāo)</b></p><p> CLOSE cursor_Ban
85、kDealInfo</p><p><b> --釋放游標(biāo)</b></p><p> DEALLOCATE cursor_BankDealInfo</p><p><b> GO</b></p><p> 創(chuàng)建Delete觸發(fā)器</p><p> 在交易信息表創(chuàng)建一
86、個(gè)Delete觸發(fā)器,當(dāng)刪除一條交易信息時(shí),修改相應(yīng)銀行卡的存款余額。</p><p><b> --刪除</b></p><p> --觸發(fā)器存在則刪除</p><p> IF(OBJECT_ID('tr_DelDealInfo','TR') IS NOT NULL)</p><p&g
87、t; DROP TRIGGER tr_DelDealInfo</p><p><b> GO</b></p><p> --創(chuàng)建delete觸發(fā)器</p><p> CREATE TRIGGER tr_DelDealInfo ON BankDealInfo FOR DELETE</p><p><b>
88、 AS</b></p><p> DECLARE @type CHAR(10),@sum MONEY,@BDBCNo CHAR(19)</p><p> --定義游標(biāo),指向deleted表</p><p> DECLARE cursor_BankDealInfo CURSOR FOR </p><p> SELECT B
89、DDealType,BDDealAcount,BDBCNo FROM Deleted</p><p><b> --打開游標(biāo)</b></p><p> OPEN cursor_BankDealInfo</p><p><b> --讀取游標(biāo),賦值</b></p><p> FETCH NEX
90、T FROM cursor_BankDealInfo INTO @type,@sum,@BDBCNo</p><p> WHILE @@FETCH_STATUS=0</p><p><b> BEGIN</b></p><p> IF(RTRIM(LTRIM(@type))='存入')</p><p&g
91、t; UPDATE BankCard SET BCExistBalance=BCExistBalance-@sum WHERE BCNo=@BDBCNo</p><p> IF(RTRIM(LTRIM(@type))='支取')</p><p> UPDATE BankCard SET BCExistBalance=BCExistBalance+@sum WHERE
92、BCNo=@BDBCNo</p><p> FETCH NEXT FROM cursor_BankDealInfo INTO @type,@sum,@BDBCNo</p><p><b> END</b></p><p> CLOSE cursor_BankDealInfo</p><p> DEALLOCATE
93、 cursor_BankDealInfo</p><p><b> GO</b></p><p> 創(chuàng)建Update觸發(fā)器</p><p> 在交易信息表創(chuàng)建一個(gè)Update觸發(fā)器,當(dāng)更新一條交易信息時(shí),修改相應(yīng)銀行卡的存款余額。</p><p><b> --更新</b></p>
94、;<p> --觸發(fā)器存在則刪除</p><p> IF(OBJECT_ID('tr_UpdateDealInfo','TR') IS NOT NULL)</p><p> DROP TRIGGER tr_UpdateDealInfo</p><p><b> GO</b></p>
95、;<p> CREATE TRIGGER tr_UpdateDealInfo ON BankDealInfo FOR UPDATE</p><p><b> AS</b></p><p> DECLARE @type CHAR(10),@sum MONEY,@BDBCNo CHAR(19)</p><p> --定義游標(biāo),
96、指向deleted表</p><p> DECLARE cursor_BankDealInfo CURSOR FOR </p><p> SELECT BDDealType,BDDealAcount,BDBCNo FROM Deleted</p><p><b> --打開游標(biāo)</b></p><p> OPEN
97、 cursor_BankDealInfo</p><p><b> --讀取游標(biāo),賦值</b></p><p> FETCH NEXT FROM cursor_BankDealInfo INTO @type,@sum,@BDBCNo</p><p> WHILE @@FETCH_STATUS=0</p><p>&
98、lt;b> BEGIN</b></p><p> IF(RTRIM(LTRIM(@type))='存入')</p><p> UPDATE BankCard SET BCExistBalance=BCExistBalance-@sum WHERE BCNo=@BDBCNo</p><p> IF(RTRIM(LTRIM(@t
99、ype))='支取')</p><p> UPDATE BankCard SET BCExistBalance=BCExistBalance+@sum WHERE BCNo=@BDBCNo</p><p> FETCH NEXT FROM cursor_BankDealInfo INTO @type,@sum,@BDBCNo</p><p>&l
100、t;b> END</b></p><p> CLOSE cursor_BankDealInfo</p><p> DEALLOCATE cursor_BankDealInfo</p><p> --定義游標(biāo),指向inserted表</p><p> DECLARE cursor_BankDealInfo CURSO
101、R FOR </p><p> SELECT BDDealType,BDDealAcount,BDBCNo FROM Inserted</p><p><b> --打開游標(biāo)</b></p><p> OPEN cursor_BankDealInfo</p><p> --讀取游標(biāo).賦值給相應(yīng)字段</p&g
102、t;<p> FETCH NEXT FROM cursor_BankDealInfo INTO @type,@sum,@BDBCNo</p><p> --@@FETCH_STATUS=0 FETCH 語句成功</p><p> WHILE @@FETCH_STATUS=0</p><p><b> BEGIN</b>&l
103、t;/p><p> --根據(jù)交易類型.更新銀行卡余額.RTRIM和LRAIM是去除首尾空格</p><p> IF(RTRIM(LTRIM(@type))='存入')</p><p> UPDATE BankCard SET BCExistBalance=BCExistBalance+@sum WHERE BCNo=@BDBCNo</p>
104、;<p> IF(RTRIM(LTRIM(@type))='支取')</p><p> UPDATE BankCard SET BCExistBalance=BCExistBalance-@sum WHERE BCNo=@BDBCNoFETCH NEXT FROM cursor_BankDealInfo INTO @type,@sum,@BDBCNo</p>&l
105、t;p><b> END</b></p><p><b> --關(guān)閉游標(biāo)</b></p><p> CLOSE cursor_BankDealInfo</p><p><b> --釋放游標(biāo)</b></p><p> DEALLOCATE cursor_Bank
106、DealInfo</p><p> 插入數(shù)據(jù)表的測試數(shù)據(jù)</p><p> 使用T-SQL語句向每個(gè)表插入如下所示測試數(shù)據(jù),要保證業(yè)務(wù)數(shù)據(jù)的一致性和完整性。</p><p> BankBusinessType表的測試數(shù)據(jù)</p><p> INSERT INTO BankBusinessType</p><p>
107、; (BBTName,BBTComment)</p><p> VALUES('活期','無固定存期,可隨時(shí)存取,存取金額不限的一種比較靈活的存款'),</p><p> ('定活兩便','事先不約定存定期,一次性存入,一次性支取的存款'),</p><p> ('通知',
108、39;不約定存期,支取是需提前通知銀行,約定支取日期和金額方能支取的存款'),</p><p> ('整存整取年','整筆存入,到期提取本息'),</p><p> ('整存整取年','整筆存入,到期提取本息'),</p><p> ('整存整取年','整筆存入,到
109、期提取本息'),</p><p> ('零存整取年','事先原定金額,逐月按約定金額存入,到期支付本息'),</p><p> ('零存整取年','事先原定金額,逐月按約定金額存入,到期支付本息'),</p><p> ('零存整取年','事先原定金額,逐月按約定金
110、額存入,到期支付本息'),</p><p> ('自助轉(zhuǎn)賬','銀行ATM存取款機(jī)上辦理銀行卡之間互相劃轉(zhuǎn)')</p><p><b> GO</b></p><p> SELECT * FROM BankBusinessType</p><p> BankBusiness
111、Type表測試數(shù)據(jù)</p><p> BankCustomer表的測試數(shù)據(jù)</p><p> INSERT INTO BankCustomer</p><p> (BCName,BCICNo,BCTel,BCAddr)</p><p> VALUES ('葉春萌','152825198512548541
112、9;,'13585941287','麗都新城'),</p><p> ('周明','152821198401248574','0147-7418527','松石名第')</p><p><b> GO</b></p><p> SELECT *
113、 FROM BankCustomer</p><p> BankCustomer表測試數(shù)據(jù)</p><p> BankCard表的測試數(shù)據(jù)</p><p> INSERT INTO BankCard (BCNo,BCPwd,BCCurrency,BCBBTId,BCOpenDate,BCOpenAmount,BCRegLoss,BCBCId,BC
114、ExistBalance)</p><p> VALUES ('1010 3576 1234 5678','197611','RMB',1,CAST(DATEADD(DAY,-(RAND()*30),GETDATE()) AS date),1000,'否',1,1000),</p><p> ('1010 357
115、6 1234 5688','197611','RMB',2,CAST(DATEADD(DAY,-(RAND()*30),GETDATE()) AS date),1000,'否',2,1500)</p><p><b> GO</b></p><p> SELECT * FROM BankCard</p&
116、gt;<p> BankCard表測試數(shù)據(jù)</p><p> BankDealInfo表的測試數(shù)據(jù)</p><p> INSERT INTO BankDealInfo</p><p> (BDBCNo,BDDealDate,BDDealAcount,BDDealType,BDDealComment)</p><p>
117、VALUES ('1010 3576 1234 5678',CAST(DATEADD(DAY,-(RAND()*15),GETDATE()) AS date),500,'存入','單位月工資'),</p><p> ('1010 3576 1234 5678',CAST(DATEADD(DAY,-(RAND()*15),GETDATE()) AS
118、 date),1500,'存入','單位月工資'),</p><p> ('1010 3576 1234 5678',CAST(DATEADD(DAY,-(RAND()*15),GETDATE()) AS date),300,'存入','支付寶付款'),</p><p> ('1010 3576 1
119、234 5678',CAST(DATEADD(DAY,-(RAND()*15),GETDATE()) AS date),400,'支取','刷卡消費(fèi)'),</p><p> ('1010 3576 1234 5688',CAST(DATEADD(DAY,-(RAND()*15),GETDATE()) AS date),3500,'存入',
120、'單位月工資'),</p><p> ('1010 3576 1234 5688',CAST(DATEADD(DAY,-(RAND()*15),GETDATE()) AS date),4500,'存入','單位月工資'),</p><p> ('1010 3576 1234 5688',CAST(DATE
121、ADD(DAY,-(RAND()*15),GETDATE()) AS date),800,'存入','支付寶付款'),</p><p> ('1010 3576 1234 5688',CAST(DATEADD(DAY,-(RAND()*15),GETDATE()) AS date),900,'支取','刷卡消費(fèi)')</p&g
122、t;<p><b> GO</b></p><p> SELECT * FROM BankDealInfo</p><p> BankDealInfo表測試數(shù)據(jù)</p><p> 5、實(shí)訓(xùn)五:模擬常規(guī)業(yè)務(wù)</p><p> (1) 修改客戶密碼</p><p> 根據(jù)卡號
123、修改指定2個(gè)客戶的銀行密碼,其中第一個(gè)客戶1010 3576 1234 5678密碼修改為123456,第二個(gè)客戶1010 3576 1234 5688修改為123123。</p><p> --(1)修改客戶密碼</p><p> UPDATE BankCard SET BCPwd='123465' WHERE BCNo='1010 3576 1234 567
124、8'</p><p> UPDATE BankCard SET BCPwd='123123' WHERE BCNo='1010 3576 1234 5688'</p><p> SELECT BCNo '銀行卡卡號',BCPwd '密碼',BCCurrency '貨幣類型',BCBBTId '
125、;儲蓄種類',BCOpenDate '開戶日期',BCOpenAmount '開戶金額', BCRegLoss '是否掛失',BCBCId'客戶編號',BCExistBalance '存款金額' FROM BankCard</p><p><b> 修改客戶密碼效果圖</b></p>&l
126、t;p><b> 辦理銀行卡掛失</b></p><p> 卡號為1010 3576 1234 5678的銀行卡丟失,申請掛失。</p><p> --(2)辦理銀行卡掛失</p><p> UPDATE BankCard SET BCRegLoss='是' WHERE BCNo='1010 3576 12
127、34 5678'</p><p> SELECT BCNo '銀行卡卡號',BCPwd '密碼',BCCurrency '貨幣類型',BBTName '儲蓄類型',BCOpenDate '開戶日期',BCOpenAmount '開戶金額', BCRegLoss '是否掛失',BCName
128、9;客戶姓名',BCExistBalance '存款金額' FROM BankCard </p><p> INNER JOIN BankCustomer ON BankCard.BCBCId=BankCustomer.BCId</p><p> INNER JOIN BankBusinessType ON BankCard.BCBBTId=BankBusine
129、ssType.BBTId</p><p> 辦理銀行卡掛失效果圖</p><p> 統(tǒng)計(jì)銀行資金流通余額和盈利結(jié)算</p><p> 存入代表資金流入,支取代表資金流出。</p><p> 計(jì)算公式:資金流通余額=總存入金額-總支取金額</p><p> 假定存款利率為千分之三,貸款利率為千分之八。</
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 銀行自動(dòng)存取款機(jī)(atm機(jī))怎樣存錢
- java課程設(shè)計(jì)報(bào)告--atm存取款系統(tǒng)
- 銀行atm自動(dòng)取款機(jī)系統(tǒng)課程設(shè)計(jì)
- atm自動(dòng)存取款機(jī)服務(wù)指南
- 銀行atm自動(dòng)取款機(jī)系統(tǒng)課程設(shè)計(jì)
- c_課程設(shè)計(jì)—自動(dòng)存取款機(jī)軟件設(shè)計(jì)
- vb課程設(shè)計(jì)--銀行存取款管理系統(tǒng)
- java課程設(shè)計(jì)銀行存取款管理系統(tǒng)
- 銀行存取款業(yè)務(wù)受理課程設(shè)計(jì)
- vb課程設(shè)計(jì)--銀行存取款管理
- 銀行存取款管理課程設(shè)計(jì)
- 課程設(shè)計(jì)報(bào)告--atm取款機(jī)程序
- 信息管理與信息系統(tǒng)課程設(shè)計(jì)--銀行atm機(jī)存取款系統(tǒng)分析與設(shè)計(jì)
- c語言課程設(shè)計(jì)--銀行存取款業(yè)務(wù)
- 銀行存取款管理系統(tǒng)設(shè)計(jì)
- c語言課程設(shè)計(jì)銀行存取款業(yè)務(wù)8
- c語言課程設(shè)計(jì)報(bào)告(銀行存取款管理設(shè)計(jì))
- c語言課程設(shè)計(jì)---模擬銀行存取款業(yè)務(wù)
- c++課程設(shè)計(jì)---建行atm取款機(jī)管理系統(tǒng)
- atm自動(dòng)取款機(jī)系統(tǒng)設(shè)計(jì)
評論
0/150
提交評論