日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

课程设计:基于SQL Server的银行ATM 存取款机系统设计与实现

發布時間:2025/3/15 windows 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 课程设计:基于SQL Server的银行ATM 存取款机系统设计与实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • 前言
  • 一、項目背景
    • 1、項目任務
    • 2、項目技能目標
    • 3、需求概述
    • 4、開發環境
    • 5 、問題分析
      • (1) 銀行存取款業務介紹
      • (2) 客戶信息
      • (3) 銀行卡賬戶信息
      • (4) 銀行卡交易信息
      • (5) 銀行卡手工賬戶和存取款單據信息
  • 二、項目實訓內容
    • 1、實訓一:制定《數據庫設計與編程規范》
    • 2、實訓二:數據庫分析設計與建模
      • (1) 分析銀行 ATM 存取款系統實體
      • (2) 規范數據庫結構設計
      • (3) 繪制 CDM 模型、生成 PDM 模型
    • 3、實訓三:創建數據庫
      • (1) 創建數據庫
      • (2) 創建各個數據表及相關的約束
      • (3) 添加外鍵約束和生成數據庫關系圖
    • 4、實訓四:創建觸發器和插入測試數據
      • (1) 創建級聯觸發器
      • (2) 插入數據表的測試數據
    • 5、實訓五:模擬常規業務
      • (1) 修改客戶密碼
      • (2) 辦理銀行卡掛失
      • (3) 統計銀行資金流通余額和盈利結算
      • (4) 查詢本周開戶信息
      • (5) 查詢本月單次交易金額最高的卡號和總交易金額最高的卡號
      • (6) 查詢掛失客戶
      • (7) 催款提醒業務
    • 6、實訓六:創建、使用視圖
      • (1) 輸出銀行客戶記錄視圖VW_userInfo
      • (2) 輸出銀行卡記錄視圖VW_CardInfo
      • (3) 輸出銀行卡交易記錄視圖VW_TransInfo
      • (4) 根據客戶登錄名查詢該客戶賬戶信息VW_OneUserInfo
    • 7、實訓七:存儲過程實現業務處理
      • (1) 完成存款或取款業務
      • (2) 產生隨機卡號
      • (3) 完成開戶業務
      • (4) 分頁顯示查詢交易數據
      • (5) 統計未發生交易的賬戶
    • 8、實訓八:利用事務實現轉賬

加油加油

前言

? ? ? ? 本文章主要是在學了SQL Server后做的一個課程設計,全文有三萬多字,接近一千行,光簡簡單單寫這篇博客就花了不少時間,若有出現錯誤之處,請指出,定當感激不盡,一起學習,一起進步。


一、項目背景

1、項目任務

  • 使用PowerDesigner 完成數據庫設計
  • 創建數據庫、創建表、創建約束
  • 使用觸發器和插入測試數據
  • 模擬常規業務、創建視圖
  • 使用存儲過程實現業務處理
  • 利用事務實現較復雜的數據更新

2、項目技能目標

  • 使用PowerDesigner 完成數據庫概念模型和數據庫物理模型設計。
  • 使用 T-SQL 語句創建數據庫、表和各種約束。
  • 使用 T-SQL 語句編程實現常見業務。
  • 使用觸發器實現多表之間的級聯更新。
  • 使用事務和存儲過程封裝業務邏輯。
  • 使用視圖簡化復雜的數據查詢。
  • 使用游標技術實現結果集的行集操作。

3、需求概述

? ? ? ?某銀行是一家民辦的小型銀行企業,現有十多萬客戶,公司將為該銀行開發一套 ATM 存取款機系統,對銀行日常的存取款業務進行計算機管理,以便保證數據的安 全性,提高工作效率。
? ? ? ?要求根據銀行存取款業務需求設計出符合第三范式的數據庫結構,使用 T-SQL 語言創建數據庫和表,并添加表約束,進行數據的增刪改查,運用邏輯結構語句、事 務、視圖和存儲過程,按照銀行的業務需求,實現各項銀行日常存款、取款和轉賬業 務。

4、開發環境

  • 數據庫:SQL SERVER 2008 開發版
  • 數據庫建模工具:PowerDesigner15

5 、問題分析

該項目的 ATM 存取款機業務如下:

(1) 銀行存取款業務介紹

? ? ? ?銀行為客戶提供了各種銀行存取款業務。詳見表 1

(2) 客戶信息

? ? ? ?每個客戶憑個人身份證在銀行可以開設多個銀行卡賬戶,開設賬戶時,客戶需要 提供的開戶數據如表 2 所示:

(3) 銀行卡賬戶信息

? ? ? ?銀行為每個賬戶提供一個銀行卡,每個銀行卡可以存入一種幣種的存款,銀行保 存賬戶如表 3 所示:

客戶持銀行卡在 ATM 機上輸入密碼,經系統驗證身份后辦理存款、取款和轉賬 等銀行業務。銀行規定,每個賬戶當前的存款金額不得小于 1 元。

(4) 銀行卡交易信息

? ? ? ?銀行在為客戶辦理業務時,需要記錄每一筆賬目,賬目交易信息如表 4 所示:

(5) 銀行卡手工賬戶和存取款單據信息

? ? ? ?該銀行要求這套軟件實現銀行客戶的開戶、存款、取款、轉賬和余額查詢等業務,使得銀行儲蓄業務方便、快捷,同事保證銀行業務數據的安全性。
? ? ? ?為使開發人員盡快了解銀行業務,該銀行提供了銀行卡手工賬戶和存取款單據的 樣本數據,以供項目開發時參考,參加表 5 和表 6 。

二、項目實訓內容

1、實訓一:制定《數據庫設計與編程規范》

  • 長度規范:
    ? ? ? ?凡是需要命名的對象其標識符均控制在 30 個字符以內,也即:SQL Server 中的 表名、字段名、函數名、存儲過程、觸發器、視圖等名字長度要盡量不超過 30 個字 符長度。
  • 構成規范:
    ? ? ? ?數據庫各種名稱必須以字母開頭,但嚴禁以系統關鍵字開頭,名稱只能含有字母、數 字以及下劃線“_ ”三類字符, “_ ”用于間隔名稱中的各語義字段;不要使用系統保留字作表名。
  • 大小寫規范:
    ? ? ? ?構成 SQL Server 數據庫中的各種名稱(表名、字段名、過程名、視圖名等所有命 名符的首字母需要使用大寫,也即每個命名單詞的首字母大寫,其它字符小寫。但對 于簡寫或縮寫的短單詞,如 ID 、UI 可以全為大寫。
  • 主鍵規范:
    ? ? ? ?除臨時表、流水表以及日志表外,其它表都要建立主鍵。主鍵最好設計成單一主 鍵,盡量不要用復合主鍵,盡量使用沒有業務語義的字段作為主鍵,
    如采用按順序自增的數值型字段為主鍵
  • 注釋規范:
    ? ? ? ?每個表,每個字段都要有注釋,說明其含義,對于冗余字段還要特別說明其維護方法,外鍵字段要說明參照于那個表,另外對于存儲過程、視圖、觸發器、函數等代碼均要增加注釋,以保持代碼的可讀性以及后續的可維護性。
  • 行大小規范:
    ? ? ? ?SQL Server 的 1 頁的大小是 8K,因此一行的數據要控制到 8K 之內,如果超過 8K 要想辦法將表進行拆分成多個子表。
  • 數據保留策略:
    ? ? ? ?大表由于數據量較大,往往是系統的性能瓶頸所在,因此對于大表的設計好考慮到今后的數據轉移、分片、Partition 等,并且對大表以及其相關表的數據保留時間也要有一個提前規劃,以免今后出現性能問題束手無策。
  • 必備字段要求:
    ? ? ? ?每個大表都應該添加以下幾個有用的字段,分別為創建日期、修改日期、操作人以及版本標記,創建這些字段的目的是為今后的數據轉移以及分片或分區做準備,同時也有利于今后的數據審計等。
    注意事項:
    ? ? ? ?基于大表的任何操作都要慎重思考,通常情況下要禁止在大表上創建觸發器,禁止在大表上做頻繁的批量更新或刪除動作,禁止在生產時間對大表做 DDL 操作,禁止在大表上做全表掃描(Full Scan)等。
  • 臨時表功能:
    ? ? ? ?SQL Server 分為全局臨時表和局部臨時表,臨時表在很多場合下能帶來意想不到 的效果,尤其是需要中轉的數據記錄集采用臨時表能提升系統性能。臨時表支持索引、 約束、排序等實體表具有的功能。
  • 存儲特點:
    ? ? ? ?臨時表的數據存儲在 tempdb 數據庫中,因此過于頻繁的創建臨時表會增加 tempdb 庫的負荷,尤其是數據量超過 10W 條記錄的臨時表更是會影響 tempdb 庫的 性能,由此在某些情況下可用CTE 替代臨時表的使用。
    注意事項:
    ? ? ? ?臨時表執行完畢后,要及時的手工 Drop 掉,及時釋放資源,減輕系統的 Loading , 另外特別注意的是要盡量禁止使用全局臨時表,全局適合多個 session 間的數據交互, 但往往會引起數據的串值。
  • 命名規范:
    ? ? ? ?盡量采用有意義的字段名,使描述盡可能清楚,如采用縮寫,盡量使用通用的縮 寫語言,如 addr 代表 address,避免出現只有自己理解的縮寫。
  • 日期字段:
    ? ? ? ?時效性數據應包括“創建時間/修改時間”字段,時間標記對查找數據、清理數據、 排序合并特別有用,另外要根據具體業務考量時間字段的類型,如在 Smalldatetime和 Datetime 類型進行選擇。
  • 注意保留詞:
    ? ? ? ?對于字段的命名,要確保字段名沒有和保留詞、數據庫系統或者常用方法沖突, 比如 master 、CROSS 、address 、substring 、len 、sysobjects 等詞就不適合用來做字段 的獨立命名。
  • 數值規范:
    ? ? ? ?數值型的主要有 INT 、BIGINT 、TINYINT 、SMALLINT 、FLOAT 、NUMERIC 、 MONEY 等類型,要根據實際應用選擇合適的類型,如字段的數據為小于 255 的整形 數字,那么就要選擇 TINYINT;如字段數據小于 32767 的整形數字,那么就要選擇SMALLINT,以此類推。
  • 文本規范:
    ? ? ? ?文本類型主要有 CHAR 、VARCHAR 、TEXT 等類型,要根據實際應用選擇合適 的類型,如字段文本長度固定為 8 位,那么就要用CHAR(8);如文本長度最大為 100 , 并且大小是非定長的,那么就要設為 VARCHAR(100)。并且以上文本若為漢字,那 么就要設為 NVARCHAR 和 NCHAR 。
  • 字段命名技巧:
    ? ? ? ?字段命名要統一規范,同一個字段在不同的表中命名要一致,另外字段名一般都 要帶上業務模塊的前綴,如訂單(Order)價格字段命名為 Or_Price,部門(Department)編 號為 Dep_No。命名規范沒有那個是最合理的,只有定義好最適合自己的統一規范即 可。
    ? ? ? ?外鍵建立索引:
    外鍵不建立索引,將有可能導致兩個嚴重的問題。1.更新相關的表產生死鎖。2. 兩表關聯查詢時性能低下。因此通常情況下都必須要求外鍵建立索引。
  • 聯合索引規范:
    ? ? ? ?當數據對某表經常要多條件查詢時,可能就需要建立聯合索引,聯合索引的第一 個引導列字段非常重要,引導列字段通常要能過濾掉大部分數據,這樣方能減少 IO 的讀寫,提高性能。非引導列字段在引導列的查詢數據基礎上繼續過濾數據,以提高 查詢速度。聯合索引對更新會產生一定的性能影響。
    禁用多余索引:
    ? ? ? ?數據庫索引能提高查詢速度,但會增加寫操作的開銷,因此對一些幾月或者從沒 有使用過的索引要刪除掉,以免增大數據庫的負荷。
    重復索引問題:
    ? ? ? ?一般情況下,盡量避免重復索引的出現,重復索引很容易引起死鎖,減低數據庫
    的并發訪問。重復索引也會造成索引的維護困難。
    索引數量限制:
    ? ? ? ?數據庫索引主要用來解決讀的性能瓶頸,但是會增加寫操作的負荷,因此過多的 索引會造成更新速度變慢,甚至會引起不要的死鎖。一般情況下表中的索引不要超過5 個。
    注意事項:
    ? ? ? ?建立索引前,要充分了解表的使用及數據特性,要了解表的查詢條件和查詢頻率, 甚至隨著業務的變化而引起表數據使用狀況的變化,帶之而來的是索引也需要相應調
    整。
  • 命名規范:
    ? ? ? ?存儲過程命名遵守統一的規范,對于業務存儲過程要以 p 或 proc開頭,接著加上” _ ”,然后再加上模塊名稱簡寫和具體的業務詞,最后加上執行類型。
    數據庫的存儲過程名嚴禁以 sp 開頭,sp 通常表示系統數據庫存儲過程名的前綴。觸 發器以 Tr 開頭,接著加上”_ ”,然后加上表名。
  • 書寫規范:
    ? ? ? ?關鍵字建議用大寫,同樣的代碼書寫格式保持一致,SQL 腳本采用縮進風格,風 格一致,縮進格式一致,使用空格。
    INSERT 規范:
    ? ? ? ?通常情況下,INSERT 語句要給出具體的字段列表,避免采用“INSERT INTO TB_1 VALUES( ‘值 1’, ’值 2’, ’值 3’)”用法,此種用法往往會由于表結構變遷 而導致語句不可執行
    避免隱式轉換:
    ? ? ? ?書寫時,必須明確表結構及表中各個字段的數據類型,特別是查詢條件中的字段,要避免由于類型的不同導致數據類型轉換的發生,從而減少因為
    數據類型轉換產生的系統開銷。
  • NULL 陷阱:
    ? ? ? ?NULL 不要直接用來進行運算符的比較,也不要和其它值進行連接操作,判斷一 個值是否為 NULL 值時,要采用IS NULL 來進行比較。
  • LIKE 規范:
    ? ? ? ?LIKE 子句應盡量前段匹配,要避免通配符在前段,以免導致全索引掃描的發生。
  • 參數化代碼:
    ? ? ? ?SQL 中常量的直接使用,會導致 SQL 語句頻繁的硬解析,進而嚴重影響數據庫 的性能,基于這些原因,代碼中要盡量采用參數綁定,以減少語句硬解析的次數,從 而提高語句執行性能。
  • 動態 SQL:
    ? ? ? ?動態 SQL 是在運行時才進行解析的,相當于是硬解析,因此會損失一些系統性 能,但是動態 SQL 寫法靈活,因此在某些情況下需要以性能換靈活,但對于用靜態 語句就能簡單實現的 SQL,就不要用動態SQL 語句。
  • 嵌套層級限制:
    ? ? ? ?嵌套查詢盡量少使用,尤其是對于超過 3 層的嵌套查詢更要慎用,對于復雜的嵌 套語句要根據業務進行拆分為多條 SQL 來實現,或者通過臨時表來取代一部分嵌套 層級。
  • 排序規范:
    ? ? ? ?SQL 語句中要盡量減少排序,對查詢結果進行的排序會大大降低系統的性能,并 且會增加 tempdb 數據庫的負荷,因此在開發時間寬松情況下,要盡量將排序動作放 到應用程序層去完成。
  • 代碼注釋要求:
    ? ? ? ?注釋是指程序中會被編譯器忽略掉的部分,目的是描述代碼的用途及更新時間, 合理的添加注釋可以使得程序結構清晰,可以使代碼更好理解,便于系統后續的維護。 一般情況下,注釋要不少于代碼的十分之一。
  • 靜態 SQL:
    ? ? ? ?SQL 語句要盡可能采用靜態 SQL,靜態 SQL 第一次執行時會將編譯器解析的結 果存儲在緩存中,下次執行該靜態 SQL 時會直接從緩存中獲取其執行計劃,相當于 是軟解析,因此采用靜態 SQL 可以減少語句的解析時間,提升了數據庫的性能。
  • 最小事務原則:
    ? ? ? ?數據庫事務用來保持數據的一致性,但是對于一個執行時間較長的大事務,會造 成數據庫鎖的增加,當鎖越積越多的時候就會從行鎖升級到頁鎖,從業鎖升級到表鎖, 從而嚴重影響數據庫的性能。因此,在能滿足數據一致性的前提下,要盡量將非一致
    性要求的語句代碼從事務中移除,以便提升數據庫的并發訪問。
  • 順序提交:
    ? ? ? ?順序提交是一個好的代碼編寫習慣,順序提交可以減少死鎖的發生,并且還能增 加代碼的可讀性及可維護性。

2、實訓二:數據庫分析設計與建模

(1) 分析銀行 ATM 存取款系統實體

(2) 規范數據庫結構設計

  • 第一范式(1NF)是指數據庫表的每一列都是不可分割的基本數據項,同一列中 不能有多個值,即實體中的某個屬性不能有多個值或者不能有重復的屬性。
    ? ? ? ?如在銀行客戶表 BankCustomer 中,不能將客戶信息都放在一列中顯示,也不能 將其中的兩列或多列在一列中顯示;客戶信息表的每一行只表示一個員工的信息,一個客戶的信息在表中只出現一次。簡而言之,第一范式就是無重復的列。
  • 第二范式(2NF)要求實體的屬性完全依賴于主關鍵字。
    ? ? ? ?如銀行交易信息表 BankDealInfo 中,不能把卡號設為主鍵因為一個卡號可以發生 多條交易記錄。要確定唯一的一條信息,必須重新定義一個和其它屬性無關的交易編 號。這樣要查詢一條交易信息。就可以用交易編號。簡而言之,第二范式就是屬性完全依賴于主鍵。
  • 第三范式(3NF)要求一個數據庫表中不包含已在其它表中已包含的非主關鍵字 信息。
    ? ? ? ? 如銀行卡表 BankCard 中,有了用戶Id 后。不能還添加用戶姓名等相關的用戶信 息。否則就會有大量的數據冗余。簡而言之,第三范式就是屬性不依賴于其它非主屬性。

(3) 繪制 CDM 模型、生成 PDM 模型


3、實訓三:創建數據庫

(1) 創建數據庫

? ? ? ?使用 Create DataBase 語句創建“ATM 存取款機系統”數據庫BankDB,數據文件和日志文件保存在指定目錄下文件增長率為 15% 。

--創建BankDB數據庫,數據庫文件和日志文件均保存在文件夾D:\data下 --文件增長率均為%,數據文件起始大小為MB,日志文件起始大小為MB create database BankDB on primary ( name=N'BankDB', filename=N'C:\data\BankDB.mdf', size=5mb, filegrowth=15% ) log on ( name=N'BankDB_log', filename=N'C:\data\BankDB_log.ldf', size=2mb, filegrowth=15% )

(2) 創建各個數據表及相關的約束

? ? ? ?根據銀行業務,分析表中每個列相應的約束要求,為每個表添加各種約束。要求創建表時要求檢測是否存在表結構,如果存在,則先刪除再創建。

use BankDB go--判斷銀行客戶信息表是否存在,若存在則刪除 --sysobjects 系統對象表。保存當前數據庫的對象。 --OBJECT_ID()根據對象名稱返回該對象的id IF EXISTS(SELECT * FROM sysobjects WHERE id=OBJECT_ID(N'BankCustomerInfo')) DROP TABLE BankCustomerInfo--創建BankCustomerInfo表 create table BankCustomerInfo( CustNum int identity(1,1) primary key not null, --客戶編號 CustName char(20) not null, --客戶姓名 CustID char(18) not null, --身份證號 CustTelephone char(20) not null, --客戶電話 CustAddress varchar(100) not null --客戶住址 )--判斷銀行卡表是否存在,若存在則刪除 IF EXISTS(SELECT * FROM sysobjects WHERE id=OBJECT_ID(N'BankCardInfo')) DROP TABLE BankCardInfo--創建BankCardInfo表 create table BankCardInfo( CardID char(19) primary key not null, --銀行卡號 Password char(6) not null, --密碼 MoneyType char(5) not null, --貨幣類型 DepositType int not null, --存款類型 OpenDate date not null, --開戶日期 OpenMoney money not null, --開戶金額 CardLoss char(10) not null, --是否掛失 CustNum int not null, --客戶編號 CardMoney numeric(8,2) not null --卡內余額 )--判斷銀行交易信息表是否存在,若存在則刪除 IF EXISTS(SELECT * FROM sysobjects WHERE id=OBJECT_ID(N'BankDealInfo')) DROP TABLE BankDealInfo--創建BankDealInfo表 create table BankDealInfo( DealNum int identity(1,1) primary key not null, --交易編號 CardID char(19) not null, --銀行卡號 DealDate date not null, --交易日期 DealMoney decimal(8,2) not null, --交易金額 DealType char(256) not null, --交易類型 DealNote varchar(1024) null --交易備注 )--判斷業務類型表是否存在,若存在則刪除 IF EXISTS(SELECT * FROM sysobjects WHERE id=OBJECT_ID(N'BankBusinessType')) DROP TABLE BankBusinessType--創建BankBusinessType表 create table BankBusinessType( BusNum int identity(1,1) primary key not null, --業務編號 BusName char(20) not null, --業務名稱 BusDescribe varchar(100) null --業務描述 )--為BankCustomerInfo表添加約束 --添加check約束,身份證號前位必須是數字,后位可以是數字或者X alter table BankCustomerInfo add constraint ck_CustID check(left(CustID ,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]' and (right(CustID ,1) like'[0-9]' or right(CustID,1) like 'X')) --客戶電話必須是固定電話號碼或者手機號 alter table BankCustomerInfo add constraint ck_CustTelephone check( CustTelephone like'[0-9][0-9][0-9][0-9]_[0-9][0-9][0-9][0-9][0-9][0-9][0-9]' or CustTelephone like '[0-9][0-9][0-9]_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' or CustTelephone like '1[358][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]') --銀行卡號前位必須為,后位為-9任意數字--為BankCardInfo表添加約束 alter table BankCardInfo add constraint ck_CardID check(CardID LIKE '1010 3576 [0-9][0-9][0-9][0-9] [0-9][0-9][0-9][0-9]') --密碼默認為 alter table BankCardInfo add constraint df_Password default('888888') for Password --貨幣類型默認為RMB alter table BankCardInfo add constraint df_MoneyType default('RMB') for MoneyType --開戶日期默認為當前時間 alter table BankCardInfo add constraint df_OpenDate default(getdate()) for OpenDate --開戶金額至少為元 alter table BankCardInfo add constraint ck_OpenMoney check(OpenMoney>=1) --是否掛失默認為’否‘ alter table BankCardInfo add constraint df_CardLoss default('否') for CardLoss

(3) 添加外鍵約束和生成數據庫關系圖

添加子表外鍵約束

--添加外鍵約束 alter table BankCardInfo add constraint fk_DepositType foreign key(DepositType) references BankBusinessType(BusNum) alter table BankCardInfo add constraint fk_CustNum foreign key(CustNum) references BankCustomerInfo(CustNum) alter table BankDealInfo add constraint fk_CardID foreign key(CardID) references BankCardInfo(CardID)

在 SQL SERVER 里自動生成數據庫關系圖,如下圖所示:

4、實訓四:創建觸發器和插入測試數據

(1) 創建級聯觸發器

創建 Insert 觸發器:
? ? ? ? 在交易信息表創建一個 insert 觸發器,當增加一條交易信息時,修改相應銀行卡
的存款余額。

--在交易信息表插入觸發器.使用游標當新增一個交易信息.修改銀行卡的存款余額 --檢查觸發器是否存在.存在則刪除 if(object_id('tr_insertDealInfo','tr') is not null) drop trigger tr_insertDealInfo go --創建insert 觸發器 create trigger tr_insertDealInfo on BankDealInfo for insert as declare @type char(10),@sum money,@BDCardID char(19) --定義游標,指向inserted 表 declare cursor_BankDealInfo cursor for select DealType,DealMoney,CardID from inserted --打開游標、 open cursor_BankDealInfo --讀取游標.賦值給相應字段 fetch next from cursor_BankDealInfo into @type,@sum,@BDCardID --@@fetch_status=0 fetch 語句成功 while @@fetch_status=0 begin --根據交易類型.更新銀行卡余額.rtrim 和lraim 是去除首尾空格 if(rtrim(ltrim(@type))='存入') update BankCardInfo set CardMoney=CardMoney+@sum where CardID=@BDCardID if(rtrim(ltrim(@type))='支取') update BankCardInfo set CardMoney=CardMoney-@sum where CardID=@BDCardID fetch next from cursor_BankDealInfo into @type,@sum,@BDCardID end --關閉游標 close cursor_BankDealInfo --釋放游標 deallocate cursor_BankDealInfo go

創建Delete觸發器:
? ? ? ? 在交易信息表創建一個 Delete 觸發器,當刪除一條交易信息時,修改相應銀行卡
的存款余額。

--觸發器存在則刪除 if(object_id('tr_delDealInfo','tr') is not null) drop trigger tr_delDealInfo go --創建delete 觸發器 create trigger tr_delDealInfo on BankDealInfo for delete as declare @type char(10),@sum money,@BDCardID char(19) --定義游標,指向deleted 表 declare cursor_BankDealInfo cursor for select DealType,DealMoney,CardID from deleted --打開游標 open cursor_BankDealInfo --讀取游標,賦值 fetch next from cursor_BankDealInfo into @type,@sum,@BDCardID while @@fetch_status=0 begin if(rtrim(ltrim(@type))='存入') update BankCardInfo set CardMoney=CardMoney-@sum where CardID=@BDCardID if(rtrim(ltrim(@type))='支取') update BankCardInfo set CardMoney=CardMoney+@sum where CardID=@BDCardID fetch next from cursor_BankDealInfo into @type,@sum,@BDCardID end close cursor_BankDealInfo deallocate cursor_BankDealInfo go

創建 Update 觸發器
? ? ? ? 在交易信息表創建一個 Update 觸發器,當更新一條交易信息時,修改相應銀行 卡的存款余額。

--觸發器存在則刪除 if(object_id('tr_updateDealInfo','tr') is not null) drop trigger tr_updateDealInfo go create trigger tr_updateDealInfo on BankDealInfo for update as declare @type char(10),@sum money,@BDCardID char(19) --定義游標,指向deleted 表 declare cursor_BankDealInfo cursor for select DealType,DealMoney,CardID from deleted --打開游標 open cursor_BankDealInfo --讀取游標,賦值 fetch next from cursor_BankDealInfo into @type,@sum,@BDCardID while @@fetch_status=0 begin if(rtrim(ltrim(@type))='存入') update BankCardInfo set CardMoney=CardMoney-@sum where CardID=@BDCardID if(rtrim(ltrim(@type))='支取') update BankCardInfo set CardMoney=CardMoney+@sum where CardID=@BDCardID fetch next from cursor_BankDealInfo into @type,@sum,@BDCardID end close cursor_BankDealInfo deallocate cursor_BankDealInfo --定義游標,指向inserted 表 declare cursor_BankDealInfo cursor for select DealType,DealMoney,CardID from inserted --打開游標 open cursor_BankDealInfo --讀取游標.賦值給相應字段 fetch next from cursor_BankDealInfo into @type,@sum,@BDCardID --@@fetch_status=0 fetch 語句成功 while @@fetch_status=0 begin --根據交易類型.更新銀行卡余額.rtrim 和lraim 是去除首尾空格 if(rtrim(ltrim(@type))='存入') update BankCardInfo set CardMoney=CardMoney+@sum where CardID=@BDCardID if(rtrim(ltrim(@type))='支取') update BankCardInfo set CardMoney=CardMoney-@sum where CardID=@BDCardID fetch next from cursor_BankDealInfo into @type,@sum,@BDCardID end --關閉游標 close cursor_BankDealInfo --釋放游標 deallocate cursor_BankDealInfo

(2) 插入數據表的測試數據

? ? ? ? 使用 T-SQL 語句向每個表插入如下所示測試數據,要保證業務數據的一致性和 完整性。
BankBusinessType 表的測試數據:

insert into BankBusinessType (BusName,BusDescribe) values ('活期','無固定存期,可隨時存取,存取金額不限的一種比較靈活的存款'), ('定活兩便','事先不約定存定期,一次性存入,一次性支取的存款'), ('通知','不約定存期,支取是需提前通知銀行,約定支取日期和金額方能支取的存款'), ('整存整取年','整筆存入,到期提取本息'), ('整存整取年','整筆存入,到期提取本息'), ('整存整取年','整筆存入,到期提取本息'), ('零存整取年','事先原定金額,逐月按約定金額存入,到期支付本息'), ('零存整取年','事先原定金額,逐月按約定金額存入,到期支付本息'), ('零存整取年','事先原定金額,逐月按約定金額存入,到期支付本息'), ('自助轉賬','銀行atm 存取款機上辦理銀行卡之間互相劃轉') go select * from BankBusinessType


BankCustomerInfo 表的測試數據:

insert into BankCustomerInfo(CustName,CustID,CustTelephone,CustAddress) values ('葉春萌','152825198512548541','13585941287','麗都新城'), ('周明','152821198401248574','0147-7418527','松石名第') go select * from BankCustomerInfo

BankCardInfo表的測試數據:

insert into BankCardInfo (CardID,Password,MoneyType,DepositType,OpenDate,OpenMoney,CardLoss,CustNum,CardMoney) values ('1010 3576 1234 5678','197611','RMB',1,cast(dateadd(day,-(rand()*30),getdate()) as date),1000,'否',1,1000), ('1010 3576 1234 5688','197611','RMB',2,cast(dateadd(day,-(rand()*30),getdate()) as date),1000,'否',2,1500) go select * from BankCardInfo


BankDealInfo 表的測試數據:

insert into BankDealInfo (CardID,DealDate,DealMoney,DealType,DealNote) values ('1010 3576 1234 5678',cast(dateadd(day,-(rand()*15),getdate()) as date),500,'存入','單位月工資'), ('1010 3576 1234 5678',cast(dateadd(day,-(rand()*15),getdate()) as date),1500,'存入','單位月工資'), ('1010 3576 1234 5678',cast(dateadd(day,-(rand()*15),getdate()) as date),300,'存入','支付寶付款'), ('1010 3576 1234 5678',cast(dateadd(day,-(rand()*15),getdate()) as date),400,'支取','刷卡消費'), ('1010 3576 1234 5688',cast(dateadd(day,-(rand()*15),getdate()) as date),3500,'存入','單位月工資'), ('1010 3576 1234 5688',cast(dateadd(day,-(rand()*15),getdate()) as date),4500,'存入','單位月工資'), ('1010 3576 1234 5688',cast(dateadd(day,-(rand()*15),getdate()) as date),800,'存入','支付寶付款'), ('1010 3576 1234 5688',cast(dateadd(day,-(rand()*15),getdate()) as date),900,'支取','刷卡消費') go select * from BankDealInfo

5、實訓五:模擬常規業務

(1) 修改客戶密碼

? ? ? ?根據卡號修改指定 2 個客戶的銀行密碼,其中第一個客戶 1010 3576 1234 5678 密碼修改為 123456,第二個客戶 1010 3576 1234 5688 修改為 123123。

update BankCardInfo set Password='123465' where CardID='1010 3576 1234 5678' update BankCardInfo set Password='123123' where CardID='1010 3576 1234 5688' select CardID '銀行卡卡號',Password '密碼',MoneyType '貨幣類型',DepositType '儲蓄種類',OpenDate ' 開戶日期',OpenMoney '開戶金額', CardLoss '是否掛失',CustNum'客戶編號',CardMoney '存款金額' from BankCardInfo

(2) 辦理銀行卡掛失

? ? ? ?卡號為 1010 3576 1234 5678 的銀行卡丟失,申請掛失。

update BankCardInfo set CardLoss='是' where CardID='1010 3576 1234 5678' select CardID '銀行卡卡號',Password'密碼',MoneyType '貨幣類型',BusName '儲蓄類型',OpenDate ' 開戶日期',OpenMoney '開戶金額', CardLoss '是否掛失',CustName'客戶姓名',CardMoney '存款 金額' from BankCardInfo inner join BankCustomerInfo on BankCardInfo.CustNum=BankCustomerInfo.CustNum inner join BankBusinessType on BankCardInfo.DepositType=BankBusinessType.BusNum

(3) 統計銀行資金流通余額和盈利結算

存入代表資金流入,支取代表資金流出。
計算公式:資金流通余額=總存入金額-總支取金額
假定存款利率為千分之三,貸款利率為千分之八。
計算公式:盈利結算=總支取金額0.008-總存入金額0.003 。
要求創建一個存儲過程 proc_staticsBanlanceAndProfit 。

if exists(select * from sys.sysobjects where name='proc_staticsBanlanceAndProfit') drop procedure proc_staticsBanlanceAndProfit go create procedure proc_staticsBanlanceAndProfit as declare @inmoney money declare @outmoney money select @inmoney=sum(DealMoney) from BankDealInfo where DealType='存入' select @outmoney=sum(DealMoney) from BankDealInfo where DealType='支取' print '存入總金額:'+ltrim(str(@inmoney))+'rmb,支取總金 額:'+ltrim(str(@outmoney))+'rmb,銀行流通余額:'+ltrim(str(@inmoney-@outmoney))+'rmb, 盈利余額:'+ ltrim(str(@outmoney*0.008-@inmoney*0.003))+'rmb' go exec proc_staticsBanlanceAndProfit

(4) 查詢本周開戶信息

查詢本周開戶的卡號,顯示該卡的相關信息。

--默認星期日作為一周的第一天.修改星期一為第一天 set datefirst 1 select CardID '銀行卡卡號',CustName '姓名', MoneyType '貨幣類型',OpenDate '開戶時間 ',BusName '儲蓄類型',OpenMoney '開戶金額',CardMoney '存款金額', case CardLoss when '是' then '掛失賬戶' when '否' then '正常賬戶' end '是否掛失' from BankCardInfo inner join BankBusinessType on BankBusinessType.BusNum = BankCardInfo.DepositType inner join BankCustomerInfo on BankCustomerInfo.CustNum = BankCardInfo.CustNum where datediff(day,OpenDate,getdate())<datepart(weekday,getdate())

(5) 查詢本月單次交易金額最高的卡號和總交易金額最高的卡號

查詢本月存、取款中單次交易金額最高的卡號信息。

select distinct BankDealInfo.CardID '銀行卡卡號',OpenDate '開戶日期',OpenMoney '開戶金額 ',DealMoney '單次最高金額' from BankCardInfo inner join BankDealInfo on BankDealInfo.CardID=BankCardInfo.CardID where DealMoney =(select max(DealMoney ) from BankDealInfo where datediff(month,DealDate,getdate())=0) select top 1 BankCardInfo.CardID '銀行卡卡號',OpenDate '開戶日期',OpenMoney '開戶金額 ',sum(DealMoney ) '總交易最高金額' from BankCardInfo inner join BankDealInfo on BankDealInfo.CardID=BankCardInfo.CardID where datediff(month,DealDate,getdate())=0 group by BankCardInfo.CardID,OpenDate,OpenMoney order by sum(DealMoney ) desc

(6) 查詢掛失客戶

--子查詢 select CustName '客戶姓名',CustTelephone '聯系電話' from BankCustomerInfo where CustNum in (select CustNum from BankCardInfo where CardLoss='是') --內連接 select CustName '客戶姓名',CustTelephone '聯系電話' from BankCustomerInfo inner join BankCardInfo on BankCardInfo.CustNum = BankCustomerInfo.CustNum where CardLoss='是'

(7) 催款提醒業務

? ? ? ?根據某種業務(如代繳電話費、代繳手機費或房貸等)的需要,每個月末,查詢出客戶賬戶上余額少于 10000 元,由銀行統一致電催款。

select CustName '客戶姓名',CustTelephone '聯系電話',CardMoney '存款金額' from BankCardInfo inner join BankCustomerInfo on BankCustomerInfo.CustNum = BankCardInfo.CustNum where CardMoney<=10000

6、實訓六:創建、使用視圖

(1) 輸出銀行客戶記錄視圖VW_userInfo

? ? ? ?顯示的列名全為中文,要求先判斷該視圖是否存在,若存在,則先刪除。

if object_id('vw_userinfo','v') is not null drop view vw_userinfo go create view vw_userinfo as select CustNum '客戶編號',CustName '開戶名',CustID '身份證號',CustTelephone '電話號碼',CustAddress '居住地址' from BankCustomerInfo go select * from vw_userinfo

(2) 輸出銀行卡記錄視圖VW_CardInfo

if object_id('VW_CardInfo','v') is not null drop view VW_CardInfo go create view VW_CardInfo as select CardID '銀行卡卡號',CustName '姓名', MoneyType '貨幣類型',BusName '儲蓄類型 ',OpenDate '開戶日期',CardMoney '存款金額',Password'密碼', CardLoss '是否掛失' from BankCardInfo inner join BankCustomerInfo on BankCustomerInfo.CustNum = BankCardInfo.CustNum inner join BankBusinessType on BankBusinessType.BusNum = BankCardInfo.DepositType go select * from VW_CardInfo

(3) 輸出銀行卡交易記錄視圖VW_TransInfo

if object_id('VW_TransInfo','v') is not null drop view VW_TransInfo go create view VW_TransInfo as select DealDate '交易日期',DealType '交易類型',CardID '銀行卡卡號',DealMoney'交易 金額',DealNote '備注' from BankDealInfo go select * from VW_TransInfo order by 交易日期

(4) 根據客戶登錄名查詢該客戶賬戶信息VW_OneUserInfo

? ? ? ?根據客戶登錄名(采用實名制訪問銀行系統)查詢該客戶賬戶信息的視圖,利用SQL SERVER 系統函數 system_user 獲得數據庫用戶名。

if object_id('VW_OneUserInfo','v') is not null drop view VW_OneUserInfo go create view VW_OneUserInfo as select CustNum '客戶編號',CustName '開戶名',CustID '身份證號',CustTelephone '電話號碼',CustAddress '居住地址' from BankCustomerInfo where CustName=system_user go select * from VW_OneUserInfo

7、實訓七:存儲過程實現業務處理

(1) 完成存款或取款業務

描述:
? ? ? ? 根據銀行卡號和交易金額實現銀行卡的存款和取款業務。
? ? ? ? 每一筆存款,取款業務都要計入銀行交易賬,并同時更新客戶的存款余額。
? ? ? ? 如果是取款業務,在記賬之前,要完成下面兩項數據的檢查驗證工作,如果檢查 不合格,那么中斷取款業務,給出提示信息后退出。
? ? ? ? 檢查客戶輸入的密碼是否正確。
? ? ? ? 賬戶取款金額是否大于當前存款額加 1 。

--判斷存儲過程是否存在.存在則刪除 if object_id('proc_TakeMoney','p') is not null drop procedure proc_TakeMoney go --創建存取款業務的存儲過程 create procedure proc_TakeMoney @CardID char(19),@money money,@pwd char(6)=null as --不返回受影響的行數 set nocount on declare @existbanlance money --啟動事務 begin transaction select @existbanlance=CardMoney from BankCardInfo where CardID=@CardID print '交易前,卡號'+@CardID print '交易正進行,請稍后...' --如果輸入參數@pwd 為空,則為取款業務.否則為存款業務 if (select CardLoss from BankCardInfo where CardID=@CardID)='是' begin print '本卡已掛失,不能交易!' rollback transaction return end if(@pwd is not null) begin --取款 if exists(select * from BankCardInfo where CardID=@CardID and Password=@pwd) begin if(@money<=@existbanlance-1) insert into BankDealInfo (CardID,DealDate,DealMoney,DealType,DealNote) values (@CardID,getdate(),@money,'支取','通過存儲過程操作') else print '取款交易失敗.余額不足,請減少取款' end else begin print '取款交易失敗,卡號或密碼有錯誤' rollback transaction return end end else begin --辦理存款業務 if exists(select * from BankCardInfo where CardID=@CardID) insert into BankDealInfo (CardID,DealDate,DealMoney,DealType,DealNote) values (@CardID,getdate(),@money,'存入','通過存儲過程操作') else begin print '存款失敗,卡號不存在' rollback transaction return end end --判斷事務處理是否有異常.沒有提交.有則回滾 if(@@error<>0) begin print '交易失敗,發生未知錯誤' rollback transaction end else begin commit transaction print '交易成功,交易金額為:'+ltrim(str(@money)) select @existbanlance=CardMoney from BankCardInfo where CardID=@CardID print '卡號:'+@CardID+',余額為:'+ltrim(str(@existbanlance)) end --顯示銀行卡用戶詳情和交易詳情 select * from VW_CardInfo select * from VW_TransInfo order by 交易日期 go --執行存款存儲過程 exec proc_TakeMoney @CardID='1010 3576 1234 5688',@money=2000 --執行取款存儲過程 exec proc_TakeMoney @CardID='1010 3576 1234 5688',@money=1200,@pwd='123465'

(2) 產生隨機卡號

? ? ? ? 創建存儲過程產生 8 位隨機數字,與前 8 位固定數字“1010 3576”連接,生成一個由 16 位數字組成的銀行卡號,并輸出。

if object_id('proc_RandCardID','p') is not null drop procedure proc_RandCardID go --創建隨機卡號的存儲過程 create procedure proc_RandCardID @randcardid char(19) output as declare @r numeric(8,8),@tmpstr char(10) --產生隨機種子=當前的月份數*100000+當前的秒數*1000+當前的毫秒數 set @r=rand(datepart(month,getdate())*100000+datepart(second,getdate())*1000+datepart(millisecond,getdate())) set @tmpstr=convert(char(10),@r) set @randcardid='1010 3576 '+substring(@tmpstr,3,4)+' '+substring(@tmpstr,7,4) go declare @mycardid1 char(19) exec proc_RandCardID @mycardid1 output print '產生隨機卡號為'+@mycardid1

(3) 完成開戶業務

描述:
? ? ? ? 利用存儲過程為客戶開設 2 個銀行卡賬戶,開戶時需要提供客戶的信息有:開戶 名、身份證號、電話號碼、開戶金額、存款類型和地址。客戶的信息見表所示:
? ? ? ? 為成功開戶的客戶提供銀行卡,且銀行卡號唯一。

if object_id('proc_OpenAccount','p') is not null drop procedure proc_OpenAccount go --創建存取款業務的存儲過程 create procedure proc_OpenAccount @CustName char(20),@CustID char(18),@CustTelephone varchar(20),@OpenMoney money,@BusName varchar(20),@CustAddress varchar(100) as --不返回受影響的行數 set nocount on declare @DepositType int,@CardID char(19),@CustNum int --判斷存款類型是否正確 if exists(select * from BankBusinessType where BusName=@BusName) begin begin tran select @DepositType=BusNum from BankBusinessType where BusName=@BusName exec proc_randcardid @CardID output --選出不重復的卡號 while(exists(select * from BankCardInfo where CardID=@CardID)) exec proc_RandCardID @CardID output --插入一條客戶信息記錄,身份證一樣不重復插入 if not exists(select * from BankCustomerInfo where CustID=@CustID ) begin insert BankCustomerInfo (CustName,CustID,CustTelephone,CustAddress) values (@CustName,@CustID,@CustTelephone,@CustAddress) set @CustNum=@@identity end else select @CustNum=CustNum from BankCustomerInfo where CustID=@CustID insert BankCardInfo (CardID,Password,MoneyType,DepositType,OpenDate,OpenMoney,CardLoss,CustNum,CardMoney) values (@CardID,'888888','rmb',@DepositType,getdate(),@OpenMoney,'否 ',@CustNum,@OpenMoney) if(@@error<>0) begin print '尊敬的客戶,開戶不成功,所有操作均撤銷' rollback tran end else begin commit tran print '尊敬的客戶,開戶成功,系統為你產生的隨機卡號是:'+@CardID+',開戶日 期:'+convert(char(10),getdate(),111)+',開戶金額:'+ltrim(str(@OpenMoney)) end --顯示開戶的客戶表信息和銀行卡信息 select * from vw_userinfo select * from VW_CardInfo end else print '尊敬的客戶,未能成功開戶,存款類型不正確,請重新輸入!' go exec proc_OpenAccount @CustName = '陳曦',@CustID = '152825198909120124',@CustTelephone = '13574129856',@OpenMoney = 1200,@BusName = '定活兩便',@CustAddress = '海天家園' exec proc_OpenAccount @CustName = '林念初',@CustID = '152825197905149652',@CustTelephone = '15852147869',@OpenMoney = 1000,@BusName = '活期',@CustAddress = '峻峰華庭'

(4) 分頁顯示查詢交易數據

? ? ? ? 根據指定的頁數和每頁的記錄數分頁顯示交易數據。

if object_id('proc_PagingDisplay','p') is not null drop procedure proc_PagingDisplay go create procedure proc_PagingDisplay @page int,@count int as select rownumber '交易編號',DealDate '交易日期',DealType '交易類型',CardID '銀行卡卡號 ',DealMoney'交易金額' from (select row_number() over(order by DealNum) rownumber,DealDate,DealType,CardID,DealMoney from BankDealInfo) c where c.rownumber between (@page-1)*@count+1 and @page*@count go exec proc_PagingDisplay @page = 2,@count = 5

(5) 統計未發生交易的賬戶

? ? ? ? 查詢統計指定時間段內沒有發生交易的賬戶信息

if object_id('proc_getwithouttrade','p') is not null drop procedure proc_getwithouttrade go create procedure proc_getwithouttrade @startdate datetime=null,@enddate datetime=null as declare @name char(16),@icno char(18),@tel char(15),@addr char(50),@moneysum money=0,@customersum int=0,@money int if (@startdate is null) set @startdate=convert(datetime,convert(char(8),getdate(),120)+'1') if (@enddate is null) set @enddate=getdate() --有的客戶未交易.所以用右連接或者全連接 declare cur_outtrade cursor for select distinct CustName,CustID,CustTelephone,CustAddress,CardMoney from BankDealInfo right join BankCardInfo on BankCardInfo.CardID=BankDealInfo.CardID right join BankCustomerInfo on BankCustomerInfo.CustNum = BankCardInfo.CustNum where BankDealInfo.CardID not in(select BankDealInfo.CardID from BankDealInfo where DealDate>=@startdate and DealDate<=@enddate) print convert(char(16),'客戶姓名')+convert(char(20),'身份證號')+convert(char(16),'電 話')+convert(char(20),'地址') open cur_outtrade fetch next from cur_outtrade into @name,@icno,@tel,@addr,@money while @@fetch_status=0 begin print convert(char(16),@name)+convert(char(20),@icno)+convert(char(16),@tel)+convert(char(20),@addr) set @moneysum=@moneysum+@money set @customersum=@customersum+1 fetch next from cur_outtrade into @name,@icno,@tel,@addr,@money end print '統計未發生交易的客戶' print '客戶人數:'+ltrim(str(@customersum))+',客戶總余額:'+ltrim(str(@moneysum)) close cur_outtrade deallocate cur_outtrade go exec proc_getwithouttrade @startdate='2015-8-19',@enddate='2015-9-19' exec proc_getwithouttrade

8、實訓八:利用事務實現轉賬

? ? ? ? 使用存儲過程和事務實現轉賬業務,操作步驟如下所示:
? ? ? ? (1)從某一個賬戶支取一定金額的存款。
? ? ? ? (2)將支取金額存入到另一個指定的賬戶中。
? ? ? ? (3)分別打印此筆業務的轉出賬單和轉入賬單

--判斷該存儲過程是否存在,若存在,則刪除 if object_id('usp_transfer','p') is not null drop procedure usp_transfer go --創建轉賬存儲過程,需要傳遞兩個賬戶號碼及轉賬金額 create procedure usp_transfer @outCardID char(19),@inCardID char(19),@dealacount money as --不返回受影響的行數 set nocount on --聲明個變量分別存放轉出賬戶和轉入賬戶的轉賬之后的余額 declare @outexistbalance money,@inexistbalance money --聲明變量存放轉出賬戶的姓名、貨幣類型、存款類型和開戶日期 declare @outCustName char(20),@outMoneyType char(5),@outBusName char(20),@outOpenDate date --聲明變量存放轉入賬戶的姓名、貨幣類型、存款類型和開戶日期 declare @inCustName char(20),@inMoneyType char(5),@inBusName char(20),@inOpenDate date --聲明交易日.類型.交易金額.備注 declare @DealDate date,@DealType char(20),@DealMoney money,@DealNote char(100) print '開始轉賬,請稍后...' --判斷轉出賬戶及余額是否大于轉出金額+1 if exists(select * from BankCardInfo where CardID=@outCardID and CardMoney>=@dealacount+1) begin --判斷轉入賬戶是否存在 if not exists(select * from BankCardInfo where CardID=@inCardID) begin print '轉入賬戶不存在,轉賬交易失敗' return end --判斷轉出賬戶是否存在 if not exists(select * from BankCardInfo where CardID=@outCardID) begin print '轉出賬戶不存在,轉賬交易失敗' return end --啟動事務機制 begin tran print '交易正進行,請稍后...' --首先增加一條轉出賬戶的支出交易記錄 insert into BankDealInfo (CardID,DealDate,DealMoney,DealType,DealNote) values (@outCardID,getdate(),@dealacount,'支取','轉出') -- 給交易日.類型.交易金額.備注賦值 select @DealDate=DealDate,@DealType=DealType,@DealMoney=DealMoney,@DealNote=DealNote from BankDealInfo where DealNum=@@identity --增加一條轉入賬戶的存取交易記錄 insert into BankDealInfo (CardID,DealDate,DealMoney,DealType,DealNote) values (@inCardID,getdate(),@dealacount,'存入','轉入') --取得轉賬后兩個賬戶的余額 select @outexistbalance=(select CardMoney from BankCardInfo where CardID=@outCardID) select @inexistbalance=(select CardMoney from BankCardInfo where CardID=@inCardID) --判斷事務處理里是否有異常,若沒有異常,則提交,若有異常,則回滾 if @@error<>0 begin print '轉賬交易失敗' rollback tran end else begin commit tran print '交易成功,交易金額:'+convert(varchar(10),@dealacount) print '卡號'+@outCardID+' 余額:'+ltrim(str(@outexistbalance)) print '卡號'+@inCardID+' 余額:'+ltrim(str(@inexistbalance)) print '轉賬成功!' end end --分別打印轉出賬戶對賬單和轉入賬戶對賬單 else begin print '轉出賬戶余額不足,此次轉賬交易失敗' return end print '打印轉出賬戶對賬單' --獲取轉出賬戶的相關信息 select @outCustName=CustName,@outMoneyType=MoneyType,@outBusName=BusName,@outOpenDate=OpenDate from BankCardInfo inner join BankCustomerInfo on BankCustomerInfo.CustNum = BankCardInfo.CustNum inner join BankBusinessType on BankBusinessType.BusNum = BankCardInfo.DepositType where CardID=@outCardID print '---------------------------------------------------' print '卡號:'+@outCardID print '姓名:'+@outCustName print '存款類型:'+@outMoneyType print '開戶日期:'+convert(char(14),@outOpenDate) print convert(char(15),'交易日')+convert(char(15),'類型')+convert(char(15),'交易金額 ')+convert(char(15),'備注') print '---------------------------------------------------' print convert(char(15),@DealDate)+convert(char(15),@DealType)+convert(char(15),ltrim(@DealMoney))+convert(char(15),@DealNote) print '打印轉入賬戶對賬單' --獲取轉入賬戶的相關信息 select @inCustName=CustName,@inMoneyType=MoneyType,@inBusName=BusName,@inOpenDate=OpenDate from BankCardInfo inner join BankCustomerInfo on BankCustomerInfo.CustNum = BankCardInfo.CustNum inner join BankBusinessType on BankBusinessType.BusNum = BankCardInfo.DepositType where CardID=@inCardID print '---------------------------------------------------' print '卡號:'+@inCardID print '姓名:'+@inCustName print '存款類型:'+@inMoneyType print '開戶日期:'+convert(char(14),@inOpenDate) -- 給交易日.類型.交易金額.備注賦值 select @DealDate=DealDate,@DealType=DealType,@DealMoney=DealMoney,@DealNote=DealNote from BankDealInfo where DealNum=@@identity print convert(char(15),'交易日')+convert(char(15),'類型')+convert(char(15),'交易金額 ')+convert(char(15),'備注') print '---------------------------------------------------' print convert(char(15),@DealDate)+convert(char(15),@DealType)+convert(char(15),ltrim(@DealMoney))+convert(char(15),@DealNote) Go exec usp_transfer @outCardID='1010 3576 1234 5678',@inCardID='1010 3576 1234 5688',@dealacount=50

總結

以上是生活随笔為你收集整理的课程设计:基于SQL Server的银行ATM 存取款机系统设计与实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

精品天堂av| 国产二级视频 | 久久久久久久免费观看 | 91在线免费观看网站 | 天天在线操 | 欧美日韩视频 | 黄a在线看 | 黄色软件视频大全免费下载 | 久草久草在线 | 日韩有码网站 | 久草在线在线 | 一区二区在线电影 | 久久久久久免费毛片精品 | 婷婷色站| 射综合网 | 日韩av成人在线 | 91在线看黄 | 九九热在线精品 | 免费色网 | 麻豆视频国产在线观看 | 日韩在线国产精品 | 国产精品刺激对白麻豆99 | 国产精品成人一区二区三区 | 人人爽影院 | 欧美日韩激情视频8区 | 插久久 | 97超碰人人爱 | 成人一级影视 | 国产精品入口a级 | 狠狠88综合久久久久综合网 | 91亚洲精品久久久久图片蜜桃 | 成人观看视频 | 亚洲一区网站 | 国产精品一区二区久久精品爱涩 | 91资源在线免费观看 | 久久久国产99久久国产一 | 免费看国产视频 | 日韩免费b | 亚洲自拍偷拍色图 | 国产精品视频久久久 | 中国一级片在线播放 | 欧美性生活免费看 | 2000xxx影视 | www好男人| 亚洲首页 | 久久99精品久久久久久秒播蜜臀 | 国产超碰97 | 亚洲欧洲日韩 | 98福利在线| 欧美在线aa | 国产 欧美 日韩 | 韩国av一区二区三区 | 视频在线观看一区 | 五月激情婷婷丁香 | 日韩肉感妇bbwbbwbbw | 国产黄色精品在线观看 | 久久久香蕉视频 | 亚洲日日射| 国产精品视频免费在线观看 | www婷婷| 人人爽人人 | 色综合天天综合在线视频 | 欧美黄色免费 | 亚洲最新av在线 | av在线中文 | www最近高清中文国语在线观看 | 一区二区精品在线视频 | 99午夜| 亚洲在线视频免费观看 | 久久久久久久久免费 | 久一久久 | 亚洲毛片久久 | 亚洲黄网站 | 亚洲免费不卡 | 亚洲最大成人网4388xx | 久久免费视频精品 | 午夜视频二区 | 五月天.com | 91九色精品女同系列 | 午夜少妇av | 成人免费观看av | 日日夜操 | 九九99| 在线91观看 | 精品专区| 国产亚洲精品久久久久久久久久 | 13日本xxxxxⅹxxx20 | 国产原创中文在线 | 国产资源在线视频 | 91看片淫黄大片一级在线观看 | 精品久久久99 | 97超碰色偷偷 | 婷婷成人综合 | 久久九九精品久久 | 91高清视频 | 一区二区视频在线免费观看 | www日日夜夜 | 黄在线免费观看 | 久久久国产精品一区二区三区 | 午夜精品中文字幕 | 一区二区三区在线影院 | 天天干天天射天天插 | 精品免费久久久久 | 免费中午字幕无吗 | 欧美专区国产专区 | 欧美精品视 | 亚洲三级网 | 久久精品在线 | 在线国产高清 | 99热最新精品 | 国产精品av免费观看 | 99视频在线看 | 日韩动态视频 | 亚洲 精品在线视频 | 久久国产综合视频 | 国产成人精品一区二区三区福利 | 色停停五月天 | 欧美成人h版电影 | 一区二区成人国产精品 | 超碰在线观看av | 国产精品一区二区三区四区在线观看 | 在线看国产日韩 | 在线色资源| 亚洲黄色免费电影 | 亚洲精品日韩一区二区电影 | 在线观看激情av | 天天操天天操天天操天天操天天操天天操 | 色视频网址 | 婷婷色中文| 啪啪凸凸 | 亚洲免费av在线 | 在线电影 你懂得 | 天天操天天色天天 | 日韩精品中文字幕在线播放 | 免费av在线网站 | 看黄色.com| 97超碰国产精品 | 久久免费视频在线观看 | 成人免费视频免费观看 | av在线激情 | 国产成人精品网站 | 欧美日韩亚洲第一 | 成人国产电影在线观看 | www·22com天天操| 国产亚洲精品无 | 国模一区二区三区四区 | 一区二区三区在线观看 | 亚洲天堂网视频 | 午夜精品视频免费在线观看 | 国产精品对白一区二区三区 | 色五月成人 | 四虎最新域名 | 免费看v片网站 | 麻豆成人精品视频 | 99在线热播精品免费 | 99免在线观看免费视频高清 | 96亚洲精品久久久蜜桃 | 欧美日韩一区二区三区免费视频 | 欧美日韩视频一区二区三区 | 麻豆va一区二区三区久久浪 | 97人人网 | 欧美日本一二三 | 久草视频手机在线 | av福利超碰网站 | 久久国产视频网站 | 久久草草热国产精品直播 | av成年人电影 | 国产亚洲精品久 | 日韩免费网站 | 亚洲国产美女久久久久 | 日韩av在线一区二区 | 日韩免费视频观看 | 91热精品 | 国产品久精国精产拍 | 日韩在线视频不卡 | 久久99深爱久久99精品 | 最新av网站在线观看 | 99在线视频免费观看 | 麻豆免费视频观看 | 8x成人免费视频 | 久久久久国产免费免费 | 天天干天天看 | 天天操婷婷 | www.色五月 | 亚洲欧美怡红院 | 国产精品一区久久久久 | 久久精品视频在线看 | 精品国产乱码 | 久久夜色精品国产欧美乱极品 | 国产一级免费视频 | 日本mv大片欧洲mv大片 | 在线观看免费av片 | 久久 一区 | av在线免费播放 | 伊人天天综合 | 中文字幕免费观看视频 | 亚洲资源 | 免费在线中文字幕 | 亚洲激情久久 | 成年人视频在线免费 | 日韩在线电影观看 | 91av在线免费视频 | 97超视频在线观看 | 激情欧美丁香 | 精品99在线视频 | 四虎小视频 | 久草精品视频在线看网站免费 | 日韩精品亚洲专区在线观看 | 丁香av在线| 中文字幕高清免费日韩视频在线 | 在线亚洲免费视频 | 青草视频在线免费 | 9999激情| 中文字幕在线播放日韩 | 日韩免费三级 | 亚洲欧洲日韩在线观看 | 国产一线在线 | 99久久精品久久亚洲精品 | 国产成人精品亚洲日本在线观看 | 成人h在线观看 | 午夜视频在线观看网站 | 免费看成年人 | 韩国av三级 | 超碰资源在线 | 国产69精品久久久久久久久久 | 9草在线 | 日本久久综合视频 | 97av色| 毛片一区二区 | 在线黄色国产电影 | 伊人天天狠天天添日日拍 | 国产一二三区av | 97在线视频网站 | 国产伦精品一区二区三区高清 | 伊人色综合久久天天 | 97精品视频在线播放 | 成人毛片在线观看 | 正在播放国产91 | 国产手机精品视频 | 久久久久久久影视 | 精品一区二区免费在线观看 | 亚洲电影久久 | 丁香影院在线 | 成人黄色大片在线观看 | 激情在线网站 | 国产高清在线观看av | 国产成人精品一区二区三区福利 | 亚洲a成人v | 国产破处在线播放 | 久久乱码卡一卡2卡三卡四 五月婷婷久 | 中国黄色一级大片 | 国产精品成人aaaaa网站 | 国内精品免费久久影院 | 成人视屏免费看 | 日韩av免费一区二区 | 国产精品久久久av久久久 | 久草久视频 | 久久精品国产一区二区三 | 亚洲欧美精品一区 | 一区三区视频 | 色噜噜噜噜 | 国产一区91 | 亚洲 欧美 国产 va在线影院 | 午夜视频在线观看一区二区三区 | 黄色在线看网站 | 久久美女视频 | 精品一二区 | av在线免费播放 | 国产不卡在线看 | 久久国内免费视频 | 国产做爰视频 | 国产日韩欧美在线观看视频 | 天天干人人干 | 国产精品麻豆91 | 亚洲精品一区二区久 | 99热超碰在线 | 一 级 黄 色 片免费看的 | 国产99精品在线观看 | 在线观看黄色国产 | av黄色成人| 九九欧美视频 | 精品资源在线 | 日韩欧美69| 全黄色一级片 | 亚洲欧洲精品一区 | 免费网站黄 | 青青河边草免费视频 | 美女在线观看av | 久久久免费看视频 | 欧美亚洲国产日韩 | 91精品啪啪| 久久久www成人免费精品张筱雨 | 91在线视频精品 | 免费一级片观看 | 91麻豆精品久久久久久 | 国产日韩精品一区二区三区在线 | 在线观看小视频 | 97激情影院 | 蜜桃久久久| 日韩毛片在线一区二区毛片 | 99在线视频免费观看 | 中文字幕日韩一区二区三区不卡 | 欧美国产日韩一区二区 | 中文字幕在线观看完整 | 国产码电影 | 丁香综合五月 | 91在线文字幕 | 欧美精品乱码久久久久 | 久久久久久久久久福利 | 成人网在线免费视频 | 亚洲电影影音先锋 | 国产精品国产亚洲精品看不卡 | 国产美女视频免费观看的网站 | 日本二区三区在线 | 久草在线视频首页 | 亚洲精品乱码久久久久v最新版 | 日韩精品一区二区三区丰满 | 日本黄网站 | 国产精品久久久久久久久久不蜜月 | 91精品伦理 | 久草在线免费看视频 | 久久国内精品视频 | 国产 日韩 在线 亚洲 字幕 中文 | 丁香六月久久综合狠狠色 | 日韩精品一区二区三区水蜜桃 | 精品国产三级a∨在线欧美 免费一级片在线观看 | 国产亚洲视频在线观看 | 在线视频手机国产 | 高清av免费看 | 国产精品一区二区av日韩在线 | 精品国产诱惑 | 国产精品久久一区二区三区不卡 | 五月婷婷综合在线观看 | 久久国产美女视频 | 人人射人人 | 国产精品一区二区精品视频免费看 | 亚洲精品国产第一综合99久久 | 国产视频美女 | 天天干天天做 | 国产一级在线观看 | 久久精品欧美日韩精品 | 免费av免费观看 | 亚洲一级片免费观看 | 日韩免费一区 | 色婷婷激情综合 | 精品久久久久一区二区国产 | 久久国产亚洲 | 亚洲少妇影院 | 91人人爱 | 日本最新一区二区三区 | 国内精品久久久久 | 欧美a级一区二区 | 91传媒在线播放 | 国产日韩av在线 | 亚洲第一香蕉视频 | 久久tv| 日韩在线视频在线观看 | 麻豆视频国产在线观看 | 91刺激视频 | aaa亚洲精品一二三区 | a爱爱视频 | 国产亚洲在 | 蜜桃视频在线视频 | 免费看黄在线 | 色婷婷福利视频 | 国产97碰免费视频 | 很黄很黄的网站免费的 | 91在线日本| 久免费 | 日韩69av | 91豆花在线| 久久九九久久 | 日韩在线观看第一页 | 亚洲欧美日本一区二区三区 | 成人a视频 | 亚洲精欧美一区二区精品 | 热热热热热色 | 久久久国内精品 | 国产精品女主播一区二区三区 | 日韩网站在线看片你懂的 | 91高清在线| 国产免费一区二区三区网站免费 | 欧美a级一区二区 | 成人观看视频 | 国产精品成人av久久 | 久草久视频 | 免费情缘 | 午夜性生活片 | 久久精品91久久久久久再现 | 奇米7777狠狠狠琪琪视频 | 国产欧美最新羞羞视频在线观看 | 操老逼免费视频 | 久久久精品网 | 免费观看福利视频 | 欧美久久久久久久久中文字幕 | 天天操天天舔天天爽 | 成人在线观看日韩 | 色999视频| 91九色蝌蚪在线 | 在线欧美日韩 | 免费亚洲视频 | 免费视频久久久久久久 | 天天综合网在线 | 在线看片日韩 | 成人在线视频在线观看 | 99久久久国产免费 | 黄网站免费大全入口 | 亚洲精品自拍视频在线观看 | 国产精品成人久久久久久久 | 国产在线精品一区二区不卡了 | 中国一级片在线观看 | 国产精品va | 免费在线观看成人av | 色婷婷综合视频在线观看 | 中文字幕久久精品一区 | 麻花豆传媒mv在线观看网站 | www久草| 国产69精品久久久久久 | 四虎永久视频 | 丁香 久久 综合 | 日本久久久久久久久 | 在线亚洲成人 | 日本性高潮视频 | 波多野结衣在线观看视频 | 国外成人在线视频网站 | 午夜精品一区二区三区免费视频 | 在线观看mv的中文字幕网站 | 国产黄色片久久 | 91黄色小视频| 国产成人不卡 | 色婷婷啪啪免费在线电影观看 | 国产一区二区三区网站 | 国产在线理论片 | 亚洲最大免费成人网 | 午夜精品影院 | 久久国产色 | 成人在线一区二区三区 | 视频国产在线观看18 | 99色人| 亚洲精品美女在线观看播放 | 色综合久久久久网 | 国产一区二区在线免费视频 | av一级片在线观看 | 日韩免费观看一区二区三区 | 国产破处视频在线播放 | 国产精品一区二区白浆 | 婷婷亚洲五月色综合 | 九九久久久久久久久激情 | 久久再线视频 | 亚洲精品91天天久久人人 | 国产小视频免费在线观看 | 99精品国产在热久久 | 视频在线一区二区三区 | 久久毛片视频 | 在线性视频日韩欧美 | 国产精品久久久久久久久久妇女 | 精品国产乱码久久久久久久 | 欧美福利在线播放 | 欧美日韩国内在线 | 美女网站黄免费 | 国产高清视频在线 | 黄色在线看网站 | 蜜臀av网址 | 欧美视屏一区二区 | 五月激情天 | 成人 国产 在线 | 久久艹在线观看 | 色天天天| www.夜色321.com | 日本中文字幕在线一区 | 中文字幕婷婷 | 婷婷丁香花| 激情开心网站 | 999久久久免费精品国产 | 九九综合九九综合 | 免费在线观看av网址 | 韩国一区二区三区视频 | 99re亚洲国产精品 | 九九免费观看全部免费视频 | 国产精品久久久久影院日本 | 免费精品国产va自在自线 | 在线精品视频免费播放 | 五月婷婷狠狠 | 欧美精品在线观看一区 | 午夜色场| 最近中文字幕免费大全 | 欧美精品999 | 韩国视频一区二区三区 | 开心色插 | 国产日本在线观看 | 亚洲精品视频播放 | 欧美日韩在线看 | 日韩电影久久久 | 色婷婷综合视频在线观看 | 99国产成+人+综合+亚洲 欧美 | 久亚洲精品 | 国产人成在线观看 | 在线免费试看 | 欧美性超爽 | 黄色一级性片 | 国产在线观看你懂的 | 夜色资源站国产www在线视频 | 亚洲高清视频在线播放 | 成人精品久久久 | 一级黄色免费 | aaa亚洲精品一二三区 | 日韩欧美综合 | 日韩理论电影网 | 国产69精品久久99不卡的观看体验 | 日韩中文字幕国产精品 | www最近高清中文国语在线观看 | 日韩欧美69 | 国产精品久久久一区二区 | 美国av片在线观看 | 综合色婷婷 | av在线com| 9999在线视频 | 四虎影视成人永久免费观看亚洲欧美 | 天天久久综合 | 亚洲精品久久久久中文字幕二区 | 国产精品区二区三区日本 | 丁香六月天 | 97国产在线播放 | 国产午夜一区 | 亚洲欧美视频网站 | 久久综合婷婷综合 | 婷婷六月网 | 国产午夜精品视频 | 亚洲精品国精品久久99热一 | 在线精品视频免费观看 | 国产中出在线观看 | 久草国产精品 | 最新日韩视频在线观看 | 黄色av一区二区三区 | 亚洲a在线观看 | 在线观看视频国产一区 | 久久一精品 | 国产精品一区欧美 | 久久久精品高清 | 亚洲资源一区 | 91看片在线播放 | 99精品在线视频播放 | 免费在线激情电影 | 日韩欧美高清视频在线观看 | 国产精品久久久久久久久久三级 | 91九色免费视频 | 91麻豆文化传媒在线观看 | 在线观看视频你懂的 | 一级黄色网址 | 91精品国自产在线观看欧美 | 日韩高清在线一区二区 | 国产黄色片网站 | 激情综合网五月 | 成人免费视频视频在线观看 免费 | 香蕉影院在线播放 | 久草在线视频在线 | 日韩专区 在线 | 91伊人影院 | 国产精品久久嫩一区二区免费 | 久久免费精品国产 | 国产一区麻豆 | 日韩视频一区二区在线观看 | 欧美一级片 | 欧美在线视频a | 精品在线观看一区二区三区 | 日韩在线国产精品 | 在线播放视频一区 | 精品黄色片 | 亚洲狠狠操| 天天天天天天操 | 超碰人人乐 | 丰满少妇在线 | 干干操操| 手机av在线不卡 | 久久免费大片 | 怡红院成人在线 | 亚洲 成人 欧美 | 高清视频一区 | 夜夜操狠狠干 | 久精品视频在线观看 | 97超碰资源网 | 欧美日本不卡视频 | 国产精品女同一区二区三区久久夜 | ww视频在线观看 | 天天干,天天干 | 亚洲精品女 | 久久九九影视网 | 国产一区在线视频播放 | 91成品视频| 久99久中文字幕在线 | 四虎国产精品免费观看视频优播 | 国产高清无线码2021 | 激情网在线观看 | 久久久www成人免费精品张筱雨 | 中文国产在线观看 | 国产精品日韩在线 | 亚洲色图激情文学 | 国产一级片毛片 | 婷婷深爱网 | 久久久天天操 | 曰本免费av | 国产亚洲精品久久久久久网站 | 国产字幕在线观看 | 探花视频在线观看免费 | 亚洲激情在线 | 久久av中文字幕片 | 久久躁日日躁aaaaxxxx | 五月天婷婷狠狠 | 欧美精品资源 | 午夜久久视频 | 91精品视频在线免费观看 | 成人黄色免费在线观看 | 欧美日韩中文字幕在线视频 | 日韩视频在线观看免费 | 美女免费视频一区二区 | 91爱爱电影 | 91成人在线观看喷潮 | 天天爽天天搞 | 亚洲国产97在线精品一区 | 在线观看91精品国产网站 | 亚洲欧美日韩在线看 | 韩日精品中文字幕 | 欧美精品在线视频观看 | 精品超碰| 午夜精品影院 | 夜夜爽天天爽 | 91高清完整版在线观看 | 国产特级毛片aaaaaa | 91精品福利在线 | 在线观看av黄色 | 99久久精品日本一区二区免费 | 国产一级片在线播放 | 日韩av区| av片子在线观看 | 国产精品久久久久一区二区国产 | 国产精品一区二区三区电影 | 激情喷水 | 久久视频这里有久久精品视频11 | 99精品网站| 国产综合视频在线观看 | 黄色毛片网站在线观看 | 欧美天天射 | 国产精品久久久久久久免费大片 | 久久激情综合网 | 十八岁以下禁止观看的1000个网站 | 午夜精品一二三区 | 国产精品99久久久久久久久 | 国产一区二区在线播放 | 奇米影视8888 | 亚洲激情av | 日韩电影在线一区二区 | 国产精品白丝av | 香蕉视频网站在线观看 | 婷婷激情综合网 | 日韩激情免费视频 | 草久视频在线观看 | 91网址在线观看 | 成人av资源网站 | 久久国产精品视频观看 | 天天做日日做天天爽视频免费 | 国产成人免费高清 | 欧美日韩视频免费 | www91在线观看 | 亚洲精品美女在线观看播放 | 国产日韩欧美自拍 | 精品久久久久久亚洲 | 久久99国产精品 | 免费国产在线视频 | 亚洲国产成人久久 | 69av在线视频 | 手机在线看片日韩 | 亚洲欧美激情插 | 日韩精选在线观看 | 亚洲va欧美 | 免费男女网站 | 午夜影院在线观看18 | 97在线视频观看 | 91在线观 | 亚洲精品在线视频播放 | 久久6精品 | 99久久久久久国产精品 | 美女视频是黄的免费观看 | 国产视频亚洲精品 | 久草在线久草在线2 | 国产精品国产三级国产不产一地 | 亚洲欧美日韩精品一区二区 | 成人免费亚洲 | 狠狠干,狠狠操 | 在线不卡的av | 国产在线va | 五月激情电影 | 97人人爽 | 国产人成免费视频 | 成人影音在线 | 在线观看国产v片 | 天天操夜夜操夜夜操 | 亚洲福利精品 | 国产精品一区二区久久精品 | 欧美日韩在线精品 | 国产日韩中文字幕在线 | 中国一区二区视频 | 91理论片午午伦夜理片久久 | 午夜久久久久久久久久久 | 欧美一区二区在线看 | 91中文视频 | 亚洲精品小视频 | 天天干天天拍天天操天天拍 | 在线看片成人 | 免费看日韩片 | 国产高清在线视频 | 精品久久久久久一区二区里番 | 99视频在线精品国自产拍免费观看 | 四虎免费在线观看视频 | 日日夜夜精品视频 | 99久久国产免费免费 | 日韩欧美一区二区三区黑寡妇 | 国产乱视频 | 99精品福利| 在线观看国产中文字幕 | 国产精品综合久久 | av免费在线观看网站 | 麻豆 videos | 99精品国产一区二区 | 鲁一鲁影院 | 亚洲性少妇性猛交wwww乱大交 | 欧美在线资源 | 在线免费观看国产视频 | 精品久久久成人 | 久草视频精品 | 国产精品原创 | 久久综合久色欧美综合狠狠 | 最近高清中文在线字幕在线观看 | 超碰在97 | 天天操天天综合网 | 国产 日韩 欧美 自拍 | 国产日韩欧美视频在线观看 | 国产一线二线三线性视频 | 欧美色综合久久 | 蜜臀av性久久久久av蜜臀妖精 | 91av视频在线播放 | 国产黄色视 | 国产在线视频一区 | 精品国产自在精品国产精野外直播 | 夜夜夜精品 | 欧美人人爱| 福利片免费看 | 精品中文字幕在线 | 免费美女av| 九色激情网 | 最近更新好看的中文字幕 | 97成人免费视频 | 狠狠久久伊人 | 中文字幕免费不卡视频 | 精品视频资源站 | 国产.精品.日韩.另类.中文.在线.播放 | 五月天激情视频 | 国产九九九视频 | 日韩夜夜爽 | 欧美坐爱视频 | 免费又黄又爽的视频 | 黄色电影网站在线观看 | 手机av永久免费 | 在线免费国产视频 | 国产麻豆视频网站 | 精品国偷自产国产一区 | 天天综合导航 | av中文天堂在线 | 欧美久久成人 | 美女又爽又黄 | 欧美视频不卡 | 丁香五月亚洲综合在线 | 手机看片| 黄色软件在线观看视频 | 热久久国产精品 | 亚洲国产成人精品在线观看 | 中文在线字幕免费观 | 国产v在线| 国产在线91在线电影 | 亚洲精品国久久99热 | 国内精品视频在线 | 日韩欧美亚洲 | 日日草夜夜操 | 91九色网站| 99精品国产一区二区 | 91精品国自产拍天天拍 | 成人av网站在线播放 | 四虎永久国产精品 | 97成人免费视频 | 亚洲国产精品成人综合 | 一区二区在线影院 | 五月天.com| 最近中文字幕免费视频 | 亚洲欧洲精品视频 | 国产人成免费视频 | 人人射人人 | 日韩久久精品一区二区 | 午夜美女视频 | 国产高清视频免费观看 | 欧美一级日韩三级 | 国产在线视频导航 | 一区二区视频在线看 | 国产又粗又长的视频 | 精品国产一区二区三区四 | 亚洲欧洲精品视频 | 国产一级二级视频 | 久久字幕精品一区 | 免费污片| 一区二区av| 久久五月精品 | 五月综合色婷婷 | 一区二区三区在线视频观看58 | 在线观看中文字幕视频 | 91麻豆精品一区二区三区 | 免费在线观看91 | 国产精品每日更新 | 91丨九色丨高潮 | 91av视频导航 | 丝袜护士aⅴ在线白丝护士 天天综合精品 | av成人黄色| 亚洲国产精品久久久久久 | 91久久精品一区二区三区 | 国产亚洲激情视频在线 | 精品一区二区免费视频 | 色综合天天做天天爱 | 免费高清在线观看电视网站 | 911国产 | 中文字幕一区二区三区久久蜜桃 | 亚洲欧美成人综合 | 黄色资源在线观看 | 日韩精品欧美专区 | 美女网站视频久久 | 一区二区视频在线看 | 欧洲精品久久久久毛片完整版 | 六月丁香激情综合色啪小说 | 久久99婷婷 | 婷婷精品在线 | 成人h动漫精品一区二 | www.婷婷色| 亚洲专区在线播放 | 又黄又爽的免费高潮视频 | 欧美精品xx| 亚洲成人av电影在线 | 天天射天天干 | 欧美激情亚洲综合 | 超级碰视频 | 国产高清在线精品 | 国产91aaa| 国产视频精品在线 | 狠狠操91| 成人作爱视频 | 色在线视频网 | 视频91在线 | 国产精品自产拍在线观看网站 | 天天干视频在线 | 欧美性生爱 | 欧美激情精品久久 | 97成人精品视频在线观看 | 国产91精品一区二区麻豆亚洲 | 丁香视频全集免费观看 | 精品一区二区日韩 | 日日操操操 | 婷婷色在线观看 | 狠狠色丁香婷婷综合最新地址 | 美女福利视频一区二区 | 丁香一区二区 | 激情欧美一区二区三区免费看 | 色综合久 | 在线观看成人国产 | 99精品美女 | 国产精品入口传媒 | 91豆花在线 | 亚洲性xxxx | 超碰在线人 | 国产美腿白丝袜足在线av | 成人国产亚洲 | 精品美女国产在线 | 91黄色小视频 | 亚洲综合国产精品 | 狠狠狠色 | 天天透天天插 | 国模视频一区二区三区 | 亚洲va欧美va国产va黑人 | 久久国产福利 | 91麻豆精品国产自产在线游戏 | 免费精品国产va自在自线 | 99精品视频免费全部在线 | 很黄很污的视频网站 | 国产又黄又猛又粗 | 久久伊人爱 | 国产黄色观看 | 免费久草视频 | 九九热av| 国产欧美精品一区aⅴ影院 99视频国产精品免费观看 | 婷婷国产一区二区三区 | 久久这里只有精品视频99 | 色婷婷六月天 | 久草网视频| 国产精品视频地址 | 五月情婷婷| 日韩av电影中文字幕在线观看 | 日韩免费一级a毛片在线播放一级 | 婷婷四房综合激情五月 | 国产精品免费在线播放 | 92中文资源在线 | 欧美色综合 | 久热电影 | 欧美国产精品久久久久久免费 | 久久天天躁 | 热久久国产精品 | 成年人视频在线 | 色姑娘综合网 | 中文字幕有码在线播放 | 永久免费精品视频 | 西西www4444大胆在线 | 国产视频色 | 精品视频久久 | 特级黄色电影 | 亚洲美女在线国产 | 少妇视频在线播放 | 日韩一级网站 | 五月激情丁香图片 | 日韩高清在线一区二区三区 | 96亚洲精品久久久蜜桃 | 极品嫩模被强到高潮呻吟91 | 91成人在线视频观看 | 国产精品k频道 | 国产一区免费在线观看 | 在线中文日韩 | 国产99久久久国产精品免费看 | 人人插人人插 | 久久五月激情 | 狠狠躁夜夜躁人人爽超碰91 | japanese黑人亚洲人4k | 精品超碰| 97视频在线观看网址 | 少妇做爰k8经典 | 亚洲精品国产精品国自产观看 | bayu135国产精品视频 | 激情综合国产 | 日韩中文字幕免费 | 91传媒91久久久 | 99热手机在线观看 | 久久黄色a级片 | 国产一级黄色电影 | 91自拍91 | 美女视频黄色免费 | 黄色小说网站在线 | 97在线影院 | 久草在线一免费新视频 | 色com网 | 国产一区二区中文字幕 | 国产成人一区三区 | 欧美久久久久久久久久 | 日韩av高清在线观看 | 国产永久免费观看 | 91麻豆精品国产91久久久无限制版 | 免费成人黄色 | 操操综合 | 国产黄色美女 | 狠狠躁天天躁 | 久久久精品国产一区二区电影四季 | 欧美va电影 | 美女网站久久 | 亚洲国产网站 | 最近中文字幕完整视频高清1 | 成人国产精品久久久春色 | 色国产在线 | 精品99久久 | 欧美日韩精品区 | 免费在线观看av不卡 | 午夜婷婷综合 | 欧洲性视频 | 1024久久| 国内精品久久久久久久久久清纯 | 欧美日本国产在线观看 | 天天操天天插 | 免费碰碰 | 在线成人av | 成人手机在线视频 | 九色视频自拍 | 国产123av| 肉色欧美久久久久久久免费看 | 日韩在线免费视频观看 | 99色在线观看视频 | 午夜18视频在线观看 | 韩日在线一区 | 欧美中文字幕第一页 | 99精品欧美一区二区 | 日韩午夜在线观看 | 久久亚洲视频 | 视频精品一区二区三区 | 国产精品普通话 | 在线视频在线观看 | 激情综合色图 | 国产香蕉视频 | 一区二区三区 中文字幕 | 日韩欧美精品一区 | 午夜视频亚洲 |