网吧管理系统数据库设计
摘? 要:網吧管理系統是為解決大型網吧面臨的復雜電腦管理業務流程和繁瑣的客戶服務、信息處理業務而開發的管理系統。它主要包含系統管理、會員管理、日常管理、查詢管理、統計報表五個模塊。數據庫設計過程中主要進行了分析網吧電腦使用業務方面的需求,進行概念結構、邏輯結構和物理結構的設計,并通過建立視圖、存儲過程和觸發器實現了滿足不同用戶的不同需求,如針對會員的上機和服務,針對管理員的賬單查看和收費時間計劃管理以及針對不同等級的會員的不同服務。實現了較為自動化、人性化的網吧管理、會員服務、信息管理的管理功能。
1、需求分析
本系統主要任務是實現網吧信息管理系統。系統分為以下五個功能模塊:系統管理、會員管理、日常管理、查詢管理、統計報表。具體功能可以從以下五個方面介紹:
數據流程圖
?
?
?
?
?
?
數據字典?
1.數據項
表6-1 數據項
| 編號 | 屬性名 | 含義 | 數據類型 | 長度 | 約束條件 | |
| DI-01 | UserAccount | 會員賬號 | Varchar2 | 40 | 無 | |
| DI-02 | UserID | 會員身份證號 | Varchar2 | 40 | 無 | |
| DI-03 | UserAge | 會員年齡 | Number | 40 | 1-100 | |
| DI-04 | UserPassword | 會員密碼 | Varchar2 | 40 | 無 | |
| DI-05 | UserBalance | 會員余額 | Number | 40 | 無 | |
| DI-06 | UserPhone | 會員電話號 | Varchar2 | 40 | 無 | |
| DI-07 | UserQQ | 會員QQ | Varchar2 | 40 | 無 | |
| DI-08 | UserWechat | 會員微信 | Varchar2 | 40 | 無 | |
| DI-09 | UserProfession | 會員職業 | Varchar2 | 40 | 無 | |
| DI-10 | UserSex | 會員性別 | Number | 40 | 0 or 1 | |
| DI-11 | UserAddress | 會員地址 | Varchar2 | 40 | 無 | |
| DI-12 | UserGrade | 會員等級 | Number | 40 | 無 | |
| DI-13 | AdministratorAccount | 管理員賬號 | Varchar2 | 40 | 無 | |
| DI-14 | AdministratorID | 管理員身份證號 | Varchar2 | 40 | 無 | |
| DI-15 | AdministratorAge | 管理員年齡 | Number | 40 | 1-100 | |
| DI-16 | AdministratorPassword | 管理員密碼 | Varchar2 | 40 | 無 | |
| DI-17 | AdministratorPhone | 管理員電話號 | Varchar2 | 40 | 無 | |
| DI-18 | AdministratorQQ | 管理員QQ | Varchar2 | 40 | 無 | |
| DI-19 | AdministratorWechat | 管理員微信 | Varchar2 | 40 | 無 | |
| DI-20 | AdministratorProfession | 管理員職業 | Varchar2 | 40 | 無 | |
| DI-21 | AdministratorSex | 管理員性別 | Number | 40 | 0 or 1 | |
| DI-22 | AdministratorAddress | 管理員地址 | Varchar2 | 40 | 無 | |
| DI-23 | AdministratorRight | 管理員權限 | Number | 40 | 0 or 1 | |
| DI-24 | UserUP_time | 會員上機時間 | Date | 40 | 無 | |
| DI-25 | UserDown_time | 會員下機時間 | Date | 40 | 無 | |
| DI-26 | AdministratorUp_time | 管理員上班時間 | Date | 40 | 無 | |
| DI-27 | AdministratorDown_time | 管理員下班時間 | Date | 40 | 無 | |
| DI-28 | UserDuration | 會員上機時長 | Number | 40 | 1-100 | |
| DI-29 | AdministrationDuration | 管理員工作時長 | Number | 40 | 0-24 | |
| DI-30 | User_recharge_amount | 會員充值金額 | Number | 40 | 無 | |
| DI-31 | User_other_consume | 會員其他消費金額 | Number | 40 | 無 | |
| DI-32 | Bill_ID | 賬單編號 | Number | 40 | 無 | |
| DI-33 | User_consume | 會員消費金額 | Varchar2 | 40 | 無 | |
| DI-34 | PC_ID | 電腦編號 | Varchar2 | 40 | 無 | |
| DI-35 | PC_Gpu | 電腦顯卡 | Varchar2 | 40 | 無 | |
| DI-36 | PC_CPU | 電腦CPU | Varchar2 | 40 | 無 | |
| DI-37 | PC_Display | 電腦顯示器 | Varchar2 | 40 | 無 | |
| DI-38 | PC_Keyboard | 電腦鍵鼠 | Varchar2 | 40 | 無 | |
| DI-39 | PC_maintain_Money | 電腦維修金額 | Number | 40 | 無 | |
| DI-40 | PC_charge_grade | 電腦收費等級 | Date | 40 | 無 | |
| DI-41 | PC_charge_time | 收費時間段 | Date | 40 | 無 | |
| DI-42 | Charge_money | 收費金額 | Varchar2 | 40 | 無 | |
| DI-43 | User_massage | 會員消息 | Varchar2 | 40 | 無 | |
| DI-44 | PC_state | 電腦使用狀態 | Number | 40 | 0 or 1 | |
| DI-45 | Rest_time | 會員可用時間 | Number | 40 | 無 | |
| DI-46 | Extend_time_length | 延時啟動時長 | Number | 40 | 無 | |
| DI-47 | Extend_PC_ID | 延時啟動機號 | Varchar2 | 40 | 無 | |
| DI-48 | Restart | 是否重新啟動 | Varchar2 | 40 | 無 | |
| DI-49 | Network_State | 電腦網絡狀態 | Number | 40 | 0 or 1 | |
| DI-50 | Extend_time | 延時啟動時間點 | Date | 40 | 當前時間 | |
| DI-51 | Administrator_work_ID | 工作單編號 | Varchar2 | 40 | 無 | |
| DI-52 | PC_maintain_ID | 維修單編號 | Varchar2 | 40 | 無 | |
| DI-53 | User_Recharge_time | 會員充值時間 | number | 40 | 大于0 | |
| DI-54 | User_name | 會員姓名 | Varchar2 | 40 | 無 | |
| DI-55 | Administrator_Name | 管理員姓名 | Varchar2 | 40 | 無 | |
| DI-56 | Maintain_Content | 維修內容 | Varchar2 | 40 | 無 | |
2.數據結構
表6-2 數據結構
| 含義 | 組成 |
| 會員表 | UserAccount,UserID,UserAge,UserName,UserPassword,UserBalance,UserPhone,UserQQ,UserWechat,UserProfession,UserSex,UserAddress,UserGrade |
| 管理員表 | AdministratorAccount,AdministratorID,AdministratorAge,AdministratorName,AdministratorPassword,AdministratorPhone,AdministratorQQ,AdministratorWechat,AdministratorProfession,AdministratorSex,AdministratorAddress,AdministratorRight |
| 電腦表 | PC_ID,PC_Gpu,PC_CPU,PC_Display,PC_Keyboard,PC_charge_grade |
| 賬單(下機) | UserUP_time,UserDown_time,UserDuration,User_consume,Bill_ID,User_other_consume,UserAccount,AdministratorAccount,PC_ID,User_name,Administrator_name |
| 電腦使用記錄 | PC_ID,UserAccount,AdministratorAccount,UserUP_time,UserDown_time,UserDuration,PC_charge_grade,PC_charge_time,PC_state |
| 電腦維修記錄 | AdministratorAccount,PC_maintain_ID,PC_maintain_Money,Maintain_Content |
| 上機情況表 | PC_ID,UserAccount,AdministratorAccount,UserUP_time,UserDown_time,UserDuration,PC_charge_grade,PC_charge_time,PC_state,Extend_time_length,Extend_PC_ID,Restart,Network_State,Extend_time |
| 會員充值表 | UserAccount,AdministratorAccount,User_recharge_amount,User_Recharge_time ,User_name,Administrator_Name |
| 會員消息表 | UserAccount,AdministratorAccount,User_name,Administrator_Name,User_massage,UserGrade |
| 費率表 | PC_ID,UserAccount,AdministratorAccount,PC_charge_grade,PC_charge_time,Charge_money |
| 管理員工作表 | AdministratorAccount,Administrator_Name,Administrator_work_ID,AdministratorPhone,AdministratorUp_time,AdministratorDown_time,AdministrationDuration |
3.數據流
表6-3 數據流
| 編號 | 數據流名稱 | 簡述 | 數據流來源 | 數據流去向 | 數據流組成 | 數據流量 | 高峰流量 |
| F1 | 機號信息 | 將電腦信息上傳至電腦設置 | 管理員 | 客戶端設置 | DS-3 | 300次/月 | 500次/月 |
| F2 | 機號信息 | 電腦的基本信息存入電腦表 | 客戶端設置 | 電腦表 | DS-20 | 300次/月 | 500次/月 |
| F3 | 機號信息 | 電腦的基本信息傳入費率設置 | 客戶端設置 | 費率設置 | DS-10 | 3次/月 | 6次/月 |
| F4 | 時段信息 | 傳輸收費的時間段 | 管理員 | 時段設置 | DS-17 | 30次/月 | 60次/月 |
| F5 | 費率信息 | 傳輸收費的金額等信息 | 管理員 | 費率設置 | DS-18 | 30次/月 | 60次/月 |
| F6 | 管理員信息 | 傳輸管理員信息用于設置 | 管理員 | 管理員設置 | DS-11 | 5次/月 | 10次/月 |
| F7 | 管理員信息 | 存儲管理員信息 | 管理員設置 | 管理員表 | DS-15 | 5次/月 | 10次/月 |
| F8 | 時段信息 | 存儲收費時段信息 | 時段設置 | 時段表 | DS-12 | 300次/月 | 500次/月 |
| F9 | 時段信息 | 將時段信息傳到費率設置 | 時段設置 | 費率設置 | DS-10 | 3次/月 | 6次/月 |
| F10 | 費率信息 | 存儲費率信息 | 費率設置 | 費率表 | DS-3 | 300次/月 | 500次/月 |
| F11 | 會員ID | 會員信息存儲到會員表 | 會員添加 | 會員表 | DS-13 | 300次/月 | 500次/月 |
| F12 | 會員ID | 傳輸會員信息用于添加 | 管理員 | 會員添加 | DS-3 | 300次/月 | 500次/月 |
| F13 | 會員詳情信息 | 從會員表中提取信息 | 會員表 | 會員刪除 | DS-8 | 5次/月 | 10次/月 |
| F14 | 會員ID | 選擇會員刪除信息 | 管理員 | 會員刪除 | DS-7 | 5次/月 | 10次/月 |
| F15 | 會員個人信息 | 將會員信息保存到會員表 | 會員修改 | 會員表 | DS-8 | 5次/月 | 10次/月 |
| F16 | 會員個人信息 | 會員修改個人信息 | 會員 | 會員修改 | DS-7 | 5次/月 | 10次/月 |
| F17 | 余額信息 | 用于會員查看余額 | 會員表 | 會員 | DS-12 | 30次/月 | 30次/月 |
| F18 | 余額信息 | 用于會員充值 | 會員表 | 賬號充值 | DS-13, DS-14 | 30次/月 | 50次/月 |
| F19 | 充值金額 | 用于會員充值 | 會員 | 賬號充值 | DS-10 | 30次/月 | 50次/月 |
| F20 | 充值信息 | 將充值信息保存 | 賬號充值 | 充值表 | DS-3 | 300次/月 | 500次/月 |
| F21 | 檢測信號 | 用于電腦的開機管理 | 管理員 | 開機管理 | DS-2 | 300次/月 | 500次/月 |
| F22 | 限時信息 | 限制電腦的使用時間 | 管理員 | 限時機制 | DS-2 | 300次/月 | 500次/月 |
| F23 | 機號信息 | 用于會員換機 | 管理員 | 換機機制 | DS-9 | 3次/月 | 6次/月 |
| F24 | 短信息 | 管理員接受消息 | 消息機制 | 管理員 | DS-13 | 3次/月 | 6次/月 |
| F25 | 連接信息 | 電腦的網絡連接狀態 | 開機管理 | 上機情況表 | DS-14 | 3次/月 | 6次/月 |
| F26 | 機號信息 | 將機號傳到消息機制 | 電腦表 | 消息機制 | DS-13 | 300次/月 | 500次/月 |
| F27 | 機號信息 | 限時信息傳到電腦表 | 限時機制 | 電腦表 | DS-14 | 20次/月 | 10次/月 |
| F28 | 延時信息 | 延長時間使用電腦 | 延時重啟設置 | 上機情況表 | DS-18 | 30次/月 | 60次/月 |
| F29 | 重啟信息 | 用于重新啟動電腦 | 延時重啟設置 | 上機情況表 | DS-5 | 30次/月 | 60次/月 |
| F30 | 費率信息 | 根據余額限制時間 | 費率表 | 限時機制 | DS-18 | 25次/月 | 50次/月 |
| F31 | 機號信息 | 設置延時重啟的電腦 | 電腦表 | 延時重啟設置 | DS-5 | 25次/月 | 50次/月 |
| F32 | 換機信息 | 換機信息存入上機情況表 | 換機機制 | 上機情況表 | DS-18 | 20次/月 | 40次/月 |
| F33 | 短消息 | 保存短消息 | 消息機制 | 短消息表 | DS-6 | 20次/月 | 40次/月 |
| F34 | 會員請求 | 會員對系統管理員的請求 | 會員 | 消息機制 | DS-13, DS-14 | 300次/月 | 30次/月 |
| F35 | 短消息 | 查看存儲的短消息 | 段消息表 | 消息機制 | DS-10 | 300次/月 | 50次/月 |
| F36 | 會員消息 | 會員詳細消息 | 會員表 | 賬號查詢 | DS-3 | 300次/月 | 50次/月 |
| F37 | 賬號信息 | 管理員查看會員消息 | 賬號查詢 | 管理員 | DS-2 | 3次/月 | 500次/月 |
| F38 | 賬單列表信息 | 賬單發送給管理員 | 賬單查詢 | 管理員 | DS-2 | 3次/月 | 500次/月 |
| F39 | 上機情況 | 管理員查看上機情況 | 上機統計 | 管理員 | DS-9 | 3次/月 | 500次/月 |
| F40 | 充值賬單信息 | 查看充值明細 | 充值明細 | 管理員 | DS-13 | 300次/月 | 6次/月 |
| F41 | 充值信息 | 充值表中查看明細 | 充值表 | 充值明細 | DS-14 | 20次/月 | 6次/月 |
| F42 | 個人充值信息 | 充值信息放入賬單 | 充值表 | 賬單查詢 | DS-13 | 30次/月 | 30次/月 |
| F43 | 賬單信息 | 賬單表中提取賬單信息 | 賬單表 | 賬單查詢 | DS-13, DS-14 | 30次/月 | 50次/月 |
| F44 | 賬單信息 | 會員查看賬單信息 | 賬單查詢 | 會員 | DS-10 | 300次/月 | 50次/月 |
| F45 | 會員ID | 查看特定會員賬單 | 會員 | 賬單查詢 | DS-3 | 300次/月 | 500次/月 |
| F46 | 人數信息 | 查看上機人數 | 上機情況表 | 上機統計 | DS-2 | 300次/月 | 500次/月 |
| F47 | 管理員信息 | 查看管理員信息 | 管理員表 | 管理員統計 | DS-2 | 3次/月 | 500次/月 |
| F48 | 管理員值班信息 | 查看管理員值班信息 | 管理員統計 | 管理員 | DS-9 | 3次/月 | 6次/月 |
| F49 | 收費明細 | 查看會員的收費明細 | 收費報表 | 管理員 | DS-13, DS-14 | 300次/月 | 30次/月 |
| F50 | 管理員信息 | 哪個管理員收費 | 管理員表 | 收費報表 | DS-10 | 300次/月 | 50次/月 |
| F51 | 賬單明細 | 具體的上機消費情況 | 上機情況表 | 收費報表 | DS-3 | 300次/月 | 50次/月 |
| F52 | 會員信息 | 用于會員統計 | 會員表 | 會員統計 | DS-2 | 3次/月 | 500次/月 |
| F53 | 會員信息 | 提供會員信息 | 會員統計 | 收費報表 | DS-2 | 3次/月 | 500次/月 |
4.處理邏輯
表6-4 處理邏輯
| 編號 | 處理邏輯名稱 | 簡述 | 輸入數據流 | 輸出數據流 | 解釋 | 處理頻率 |
| P1.1 | 管理員設置 | 對管理員的基本信息進行設計 | F6 管理員信息 | ?F7管理員信息 | 對管理員的基本信息進行設計 | 300次/月 |
| P1.2 | 客戶端設置 | 對電腦的基本信息進行設計 | F2 機號信息 | F1 機號信息 F3機號信息 | 對電腦的基本信息進行設計 | 300次/月 |
| P1.3 | 時段設置 | 設置收費的時間段 | F4 時段信息 | F8 時段信息 F9 時段信息 | 設置收費的時間段 | 500次/月 |
| P1.4 | 費率設置 | 設置電腦的收費情況 | F3 機號信息 F5 費率信息 F9 時段信息 | F10 費率信息 | 設置電腦的收費情況 | 5次/月 |
| P2.1 | 會員添加 | 添加新的會員 | F12 會員ID | F11 會員ID | 添加新的會員 | 3次/月 |
| P2.2 | 會員刪除 | 會員刪除自己信息 | F14 會員ID F13 會員詳情信息 | 無 | 會員刪除自己信息 | 30次/月 |
| P2.3 | 會員修改 | 會員修改信息 | F16 會員個人信息 | F15 會員個人信息 | 會員修改信息 | 25次/月 |
| P2.4 | 賬號充值 | 用戶在賬號充值 | F18 余額信息 F19 充值余額 | F20 充值信息 | 用戶在賬號充值 | 20次/月 |
| P3.1 | 開機管理 | 處理電腦的開機 | F21 檢測信號 | F25 連接信息 | 處理電腦的開機 | 300次/月 |
| P3.2 | 限時機制 | 對會員的使用限時 | F22 限時信息 F30 費率信息 | F27 機號信息 | 對會員的使用限時 | 300次/月 |
| P3.3 | 延時重啟設置 | 在規定的時間重啟電腦 | F31 機號信息 | F28 延時信息 F29 重啟信息 | 在規定的時間重啟電腦 | 500次/月 |
| P3.4 | 換機機制 | 處理換機信息 | F23 機號信息 | F32 換機信息 | 處理換機信息 | 5次/月 |
| P3.5 | 消息機制 | 處理會員的請求 | F26 機號信息 F3 短消息 F34 會員請求 | F24 短消息 F33 短消息 | 處理會員的請求 | 3次/月 |
| P4.1 | 賬號查詢 | 對會員的賬號查詢 | F36 會員信息 | F37 賬號信息 | 對會員的賬號查詢 | 30次/月 |
| P4.2 | 賬單查詢 | 對會員的賬單查詢 | F43 賬單信息 F42 個人充值信息 F45 會員ID | F38 賬單列表信息 F44 賬單信息 | 對會員的賬單查詢 | 25次/月 |
| P4.3 | 充值明細 | 處理會員的充值記錄 | F41 充值信息 | F40 充值賬單信息 | 處理會員的充值記錄 | 300次/月 |
| P4.4 | 上機統計 | 統計電腦使用情況 | F46 人數信息 | F39 上機情況 | 統計電腦使用情況 | 300次/月 |
| P5.1 | 管理員統計 | 統計管理員信息 | F47 管理員信息 | F48? 管理員值班信息 | 統計管理員信息 | 500次/月 |
| P5.2 | 會員統計 | 統計會員信息 | F52 會員信息 | F53 會員信息 | 統計會員信息 | 5次/月 |
| P5.3 | 收費報表 | 處理所有收費信息并統計 | F50 管理員信息 F53 會員信息 F51 賬單明細 | F49 收費明細 | 處理所有收費信息并統計 | 3次/月 |
5.數據存儲
表6-5 數據存儲
| 編號 | 數據存儲名稱 | 簡述 | 數據存儲組成 | 相關聯的處理 |
| S1 | 管理員表 | 用于存放管理員的基本信息 | DS-3 | P1.1,P5.1,P5.3 |
| S2 | 電腦表 | 用于存放電腦的基本信息 | DS-8 | P1.2,P3.2,P3.3,P3.5 |
| S3 | 費率表 | 對不同電腦不同時間段的收費標準 | DS-7 | P1.4,P3.2 |
| S4 | 會員表 | 用于存放會員的基本信息 | DS-10 | P2.1,P2.2,P2.3,P2.4,P4.1 |
| S5 | 充值表 | 會員的充值記錄 | DS-12 | P2.4,P4.2,P4.3 |
| S6 | 上機情況表 | 會員的上機情況 | DS-2 | P3.1,P3.3,P3.4,P4.4,5.3 |
| S7 | 短消息表 | 會員向管理員提出的請求 | DS-9 | P3.5 |
| S8 | 時段表 | 不同時間的不同收費標準 | DS-14 | P1.3 |
| S9 | 賬單表 | 會員下機后的消費單 | DS-15 | P4.2 |
E-R圖
?
?
?
?
?
?關系模式
會員(會員賬號,會員身份證號,會員年齡,會員密碼,會員余額,會員電話號,會員QQ,會員微信,會員職業,會員性別,會員地址,會員等級)
電腦(電腦編號,電腦顯卡,電腦CPU,電腦顯示器,電腦鍵鼠,電腦收費等級)
管理員(管理員賬號,管理員身份證號,管理員年齡,管理員密碼,管理員電話號,管理員QQ,管理員微信,管理員職業,管理員性別,管理員地址,管理員權限)
時段表(時段編號,收費時間段,收費金額)
費率表(費率編號,電腦編號,會員賬號,管理員賬號,電腦收費等級)
上機情況表(上機情況編號,電腦編號,會員賬號,管理員賬號,用戶上機時間,會員下機時間,會員上機時長,電腦收費等級,收費時間段,電腦狀態,延長時間,換機機號,重啟,網絡狀態,延時時刻)
使用記錄表(使用記錄編號,電腦編號,會員賬號,管理員賬號,用戶上機時間,會員下機時間,會員上機時長,電腦收費等級,電腦收費時間段,電腦狀態)
管理員工作表(工作編號,管理員賬號,管理員姓名,工作表編號,管理員電話,上班時間,下班時間,工作時長)
維修記錄表(維修編號,電腦編號,管理員賬號,維修費用,維修內容)
賬單表(賬單編號,會員上機時間,會員下機時間,會員上機時長,會員消費,會員其他消費,用戶賬號,管理員賬號,電腦編號,會員姓名,管理員姓名)
充值表(充值編號,會員賬戶,管理員賬戶,充值金額,充值時間,會員姓名,管理員姓名)
消息表(消息編號,會員賬戶,管理員賬戶,用戶姓名,管理員姓名,會員消息,管理員消息,會員等級)
數據庫實施
1. 用戶表
create table User0( UserAccount varchar2(10) not null, UserID varchar2(10) not null, UserAge int, UserName varchar2(40), UserPassword varchar2(10), UserBalance float, UserPhone varchar2(10), UserQQ varchar2(10), UserWechat varchar2(10), UserProfession varchar2(30), UserSex varchar2(10), UserAddress varchar2(40), UserGrade varchar2(20), constraint PK_UserAccount primary key (UserAccount), constraint CK_UserAge check (UserAge>=0 and UserAge <= 100), constraint CK_UserBalance check (UserBalance>=0), constraint CK_UserGrade check (UserGrade = '鉆石' or UserGrade = '金卡' or UserGrade = '銀卡' or UserGrade = '普通'), constraint CK_UserSex check (UserSex = '男' or UserSex = '女') );2. 管理員表
create table Administrator( AdministratorAccount varchar2(10) not null, AdministratorID varchar2(10) not null, AdministratorAge int, AdministratorName varchar2(40), AdministratorPassword varchar2(10), AdministratorQQ varchar2(10), AdministratorWechat varchar2(10), AdministratorProfession varchar2(10), AdministratorPhone varchar2(10), AdministratorSex varchar2(10), AdministratorAddress varchar2(40), AdministratorRight varchar2(20), constraint PK_AdministratorAccount primary key (AdministratorAccount), constraint CK_AdministratorAge check (AdministratorAge>=0 and AdministratorAge <= 100), constraint CK_AdministratorRight check (AdministratorRight = '普通' or AdministratorRight = '高級'), constraint CK_AdministratorSex check (AdministratorSex = '男' or AdministratorSex = '女') );3. 電腦表
create table Computer( PC_ID varchar2(10) not null, PC_Gpu varchar2(40) , PC_CPU varchar2(40), PC_Display varchar2(40), PC_Keyboard varchar2(40), PC_charge_grade int, constraint PK_PC_ID primary key (PC_ID), constraint CK_PC_charge_grade check (PC_charge_grade = 1 or PC_charge_grade = 2 or PC_charge_grade = 3) );4. 時段表
create table Time_Frame( Time_Frame_ID varchar2(10) not null, T_start date, T_end date, Charge_amount float, constraint PK_Time_Frame_ID primary key (Time_Frame_ID), constraint CK_Charge_amount check (Charge_amount >0) );5. 費率表
create table Charge_List( Rate_ID varchar2(10) not null, PC_ID varchar2(10), UserAccount varchar2(10), AdministratorAccount varchar2(10), PC_charge_grade int ,constraint PK_Rate_ID primary key (Rate_ID), constraint FK_PC_ID foreign key (PC_ID) references Computer(PC_ID), constraint FK_UserAccount foreign key (UserAccount) references User0(UserAccount), constraint FK_AdministratorAccount foreign key (AdministratorAccount) references Administrator(AdministratorAccount), constraint CK_PC_charge_grade1 check (PC_charge_grade = 1 or PC_charge_grade = 2 or PC_charge_grade = 3) );6. 上機情況表
create table Up_Computer_List( Up_computer_ID varchar2(10) not null, PC_ID varchar2(10), UserAccount varchar2(10), AdministratorAccount varchar2(10), UserUP_time date , UserDown_time date, UserDuration float, PC_charge_grade int, T_start date, T_end date, PC_state varchar2(10), Extend_time_length float, Extend_PC_ID varchar2(10), Restart varchar2(10), Network_State varchar2(10), Extend_time date, Charge_amount float, primary key (Up_computer_ID), foreign key (PC_ID) references Computer(PC_ID), foreign key (UserAccount) references User0(UserAccount), foreign key (AdministratorAccount) references Administrator(AdministratorAccount), foreign key (Extend_PC_ID) references Computer(PC_ID), check (PC_charge_grade = 1 or PC_charge_grade = 2 or PC_charge_grade = 3), check(UserDuration>=0), check(Extend_time_length>=0), check(Charge_amount>=0), check(PC_state='正常'or PC_state= '維修'), check(Restart='是'or Restart= '否'), check(Network_State='是'or Network_State= '否') );7. 使用記錄表
create table Use_Computer_List( Use_Computer_ID varchar2(10) not null, PC_ID varchar2(10), UserAccount varchar2(10), AdministratorAccount varchar2(10), UserUP_time date , UserDown_time date, UserDuration float, PC_charge_grade int, T_start date, T_end date, PC_state varchar2(10), Charge_amount float, primary key (Use_Computer_ID), foreign key (PC_ID) references Computer(PC_ID), foreign key (UserAccount) references User0(UserAccount), foreign key (AdministratorAccount) references Administrator(AdministratorAccount), check (PC_charge_grade = 1 or PC_charge_grade = 2 or PC_charge_grade = 3), check(UserDuration>=0), check(Charge_amount>=0), check(PC_state='正常'or PC_state= '維修') );8. 管理員工作表
create table Administrator_Work_List( Administrator_work_ID varchar2(10) not null, AdministratorAccount varchar2(10), Administrator_Name varchar2(40), AdministratorPhone varchar2(10), AdministratorUp_time date , AdministratorDown_time date, AdministrationDuration float, primary key (Administrator_work_ID), foreign key (AdministratorAccount) references Administrator(AdministratorAccount), check(AdministrationDuration>=0) );9. 維修記錄表
create table Maintain_List( PC_maintain_ID varchar2(10) not null, PC_ID varchar2(10), AdministratorAccount varchar2(10), Maintain_Content varchar2(80), PC_maintain_Money float, primary key (PC_maintain_ID), foreign key (AdministratorAccount) references Administrator(AdministratorAccount), foreign key (PC_ID) references Computer(PC_ID), check(PC_maintain_Money>=0) );10. 賬單表
create table Bill_List( Bill_ID varchar2(10) not null, PC_ID varchar2(10), UserAccount varchar2(10), AdministratorAccount varchar2(10), User_name varchar2(40), Administrator_Name varchar2(40), UserUP_time date, UserDown_time date, UserDuration float, User_consume float, User_other_consume float,primary key (Bill_ID), foreign key (AdministratorAccount) references Administrator(AdministratorAccount), foreign key (UserAccount) references User0(UserAccount), foreign key (PC_ID) references Computer(PC_ID), check(UserDuration>=0), check(User_consume>=0), check(User_other_consume>=0) );11. 充值表
create table User_recharge_List( Recharge_ID varchar2(10) not null, UserAccount varchar2(10), AdministratorAccount varchar2(10), User_name varchar2(40), Administrator_Name varchar2(40), User_Recharge_time date, User_recharge_amount float,primary key (Recharge_ID), foreign key (AdministratorAccount) references Administrator(AdministratorAccount), foreign key (UserAccount) references User0(UserAccount), check(User_recharge_amount>=0) );12. 信息表
create table Maeeage_List ( Message_ID varchar2(10) not null, UserAccount varchar2(10), AdministratorAccount varchar2(10), User_name varchar2(40), Administrator_Name varchar2(40), User_massage varchar2(50), UserGrade varchar2(20), Administrator_massage varchar2(50),primary key (Message_ID), foreign key (AdministratorAccount) references Administrator(AdministratorAccount), foreign key (UserAccount) references User0(UserAccount), check (UserGrade = '鉆石' or UserGrade = '金卡' or UserGrade = '銀卡' or UserGrade = '普通') );存儲過程
1. 結算賬單
create or replace procedure PRO_BILL( UserAccount_n in bill_list.useraccount%type, User_other_consume_n in bill_list.user_other_consume%type) is Bill_ID_n varchar2(10);PC_ID_n bill_list.pc_id%type; AdministratorAccount_n bill_list.administratoraccount%type; User_name_n bill_list.user_name%type;Administrator_Name_n bill_list.administrator_name%type; UserUP_time_n bill_list.userup_time%type;UserDown_time_n bill_list.userdown_time%type;UserDuration_n bill_list.userduration%type;User_consume_n bill_list.user_consume%type;userbalance_n user0.userbalance%type;begin --獲取會員余額信息select User0.Userbalance into userbalance_nfrom User0where User0.Useraccount = UserAccount_n;--獲取賬單信息select PC_ID,AdministratorAccount,User_name,Administrator_Name,UserUP_time,UserDown_time,UserDuration,User_consumeinto PC_ID_n,AdministratorAccount_n,User_name_n,Administrator_Name_n,UserUP_time_n,UserDown_time_n,UserDuration_n,User_consume_nfrom up_computer_listwhere up_computer_list.useraccount = UserAccount_n;--設置賬單編號Bill_ID_n := to_char(useraccount_n+UserUP_time_n);--添加賬單信息 dbms_output.put_line('這是您的賬單:'||to_char(User_consume_n+User_other_consume_n)); insert into Bill_list values(Bill_ID_n,PC_ID_n,UserAccount_n,AdministratorAccount_n,User_name_n,Administrator_Name_n,UserUP_time_n ,UserDown_time_n,UserDuration_n ,User_consume_n,User_other_consume_n); commit;--修改會員的余額信息update user0 set user0.userbalance = userbalance_n - User_consume_n - User_other_consume_nwhere User0.Useraccount = UserAccount_n;dbms_output.put_line('賬單已支付,歡迎下次光臨!!!'); commit; end PRO_BILL;2. 會員上機
create or replace procedure PRO_UP_PC( PC_ID_n in up_computer_list.pc_id%type, UserAccount_n in up_computer_list.useraccount%type, AdministratorAccount_n in up_computer_list.administratoraccount%type, UserUP_time_n in up_computer_list.userup_time%type ,Extend_time_length_n in up_computer_list.extend_time_length%type, Extend_PC_ID_n in up_computer_list.extend_pc_id%type, Restart_n in up_computer_list.restart%type, Network_State_n in up_computer_list.network_state%type, Extend_time_n in up_computer_list.extend_time%type, ) is Up_computer_ID_n up_computer_list.pc_id%type;PC_state_n up_computer_list.pc_id%type;User_consume_n up_computer_list.pc_id%type;UserGrade_n user0.usergrade%type;discount float;UserDown_time_n date;UserDuration_n float;PC_charge_grade_n int;T_start_n date;T_end_n date;Charge_amount_n float;begin --獲取電腦狀態select computer.pc_stateinto PC_state_nfrom computerwhere computer.pc_id = PC_ID_n;--修改電腦使用狀態update computer set computer.pc_state_1 = 1where computer.pc_id = PC_ID_n;commit;--設置上機編號Up_computer_ID_n := to_char(UserUP_time_n + useraccount_n);--獲取上機信息select PC_ID,AdministratorAccount,User_name,Administrator_Name,UserUP_time,UserDown_time,UserDuration_n,User_consume_ninto PC_ID_n,AdministratorAccount_n,User_name_n,Administrator_Name_n,UserUP_time_n,UserDown_time_n,UserDuration_n,User_consume_nfrom up_computer_listwhere up_computer_list.useraccount = UserAccount_n;--設置上機編號Bill_ID_n := to_char(useraccount+UserUP_time_n);--添加上機信息 dbms_output.put_line('這是您的上機情況'); insert into up_computer_list values(Up_computer_ID_n,PC_ID_n,UserAccount_n,AdministratorAccount_n,UserUP_time_n,UserDown_time_n,UserDuration_n,PC_charge_grade_n,T_start_n,T_end_n,PC_state_n,Extend_time_length_n,Extend_PC_ID_n,Restart_n,Network_State_n,Extend_time_n,Charge_amount_nUser_consume_n,); commit; end PRO_UP_PC;3. 會員下機
create or replace procedure PRO_DOWN_PC( PC_ID_n in up_computer_list.pc_id%type, UserAccount_n in up_computer_list.useraccount%type, AdministratorAccount_n in up_computer_list.administratoraccount%type, UserDown_time_n in up_computer_list.userup_time%type ,UserDuration_n in up_computer_list.userduration%type) is User_consume_n up_computer_list.pc_id%type;UserGrade_n user0.usergrade%type;discount float;PC_charge_grade_n int;T_start_n date;T_end_n date;Charge_amount_n float;UserUp_time_n date;begin --修改電腦使用狀態update computer set computer.pc_state_1 = 0where computer.pc_id = PC_ID_n;commit;--獲取用戶等級select UserGrade into UserGrade_n from user0 where user0.useraccount = UserAccount_n;if cuslevel='鉆石' then discount:=0.9; elsif cuslevel='金卡' then discount:=0.93; elsif cuslevel='銀卡' then discount:=0.96; else discount:=1; end if; --獲取上機時間select UserUp_timeinto UserUp_time_nfrom up_computer_listwhere up_computer_list.useraccount = UserAccount_n and up_computer_list.administratoraccount = AdministratorAccount_n and up_computer_list.pc_id = PC_ID_n;--獲取收費等級 select PC_charge_gradeinto PC_charge_grade_nfrom computerwhere computer.PC_ID = PC_ID_n;--獲取收費時間段select Charge_amount, t_start ,t_endinto Charge_amount_n, T_start_n, T_end_nfrom time_framewhere time_frame.t_start <= UserUp_time_n and time_frame.t_end >= UserDown_time_n;--計算消費金額User_consume_n := (Charge_amount_n*PC_charge_grade_n*discount*UserDuration_n);--修改上機信息 dbms_output.put_line('這是您的下機情況'); update up_computer_list set up_computer_list.userdown_time = UserDown_time_n,up_computer_list.userduration = UserDuration_n,up_computer_list.user_consume = User_consume_n,up_computer_list.pc_charge_grade = PC_charge_grade_n,up_computer_list.t_start = T_start_n,up_computer_list.t_end = T_end_n,up_computer_list.charge_amount = Charge_amount_n; commit; end PRO_DOWN_PC;4. 工作處理
create or replace procedure PRO_WORK( AdministratorAccount_n in Administrator.AdministratorAccount%type, AdministratorUp_time_n in administrator_work_list.administratorup_time%type ,AdministratorDown_time_n in administrator_work_list.administratordown_time%type, AdministrationDuration_n in administrator_work_list.administrationduration%type, ) is Administrator_work_ID_n varchar2(10); Administrator_Name_n varchar2(40);AdministratorPhone_n varchar2(10);begin --獲取管理員信息select AdministratorName, AdministratorPhoneinto Administrator_Name_n, AdministratorPhone_nfrom Administratorwhere Administrator.AdministratorAccount = AdministratorAccount_n;--設置工作編號Administrator_work_ID_n := to_char(AdministratorUp_time_n + AdministratorAccount_n);--添加上機信息 dbms_output.put_line( '這是您的工作情況'); insert into administrator_work_list values(Administrator_work_ID_n,AdministratorAccount_n,Administrator_Name_n,AdministratorPhone_n,AdministratorUp_time_n,AdministratorDown_time_n,AdministrationDuration_n); commit; end PRO_WORK;5. 會員充值
create or replace procedure PRO_RECHARGE( AdministratorAccount_n in Administrator.AdministratorAccount%type, UserAccount_n in user0.useraccount%type,User_Recharge_time_n in User_Recharge_List.User_Recharge_Time%type,User_recharge_amount_n in user_recharge_list.user_recharge_amount%type,) is Recharge_ID_n varchar2(10);User_name_n varchar2(40);Administrator_Name_n varchar2(40);begin --獲取管理員信息select AdministratorNameinto Administrator_Name_nfrom Administratorwhere Administrator.AdministratorAccount = AdministratorAccount_n;--獲取會員信息select UserNameinto User_name_nfrom user0where user0.useraccount = UserAccount_n;--設置充值編號Recharge_ID_n := to_char(UserAccount_n+ 'cz' + AdministratorAccount_n);--添加上機信息 dbms_output.put_line( '這是您的充值情況'); insert into User_Recharge_List values(Recharge_ID_n,UserAccount_n,AdministratorAccount_n,User_name_n,Administrator_Name_n,User_Recharge_time_n,User_recharge_amount_n); commit;--修改會員的余額信息update user0 set user0.userbalance = user0.userbalance_n + User_recharge_amount_nwhere User0.Useraccount = UserAccount_n;dbms_output.put_line('充值成功,歡迎下次充值!!!'); commit; end PRO_RECHARGE;6. 維修電腦
create or replace procedure PRO_MAINATION( AdministratorAccount_n in Administrator.AdministratorAccount%type, PC_ID_n in computer.pc_id%type ,Maintain_Content_n in maintain_list.maintain_content%type, PC_maintain_Money_n in maintain_list.pc_maintain_money%type, Maintain_time_n in maintain_list.maintain_time%type) is PC_maintain_ID_n varchar2(10);begin --設置維修編號PC_maintain_ID_n := to_char('wx' + AdministratorAccount_n + Maintain_time_n);--添加維修信息 dbms_output.put_line( '這是您的工作情況'); insert into administrator_work_list values(PC_maintain_ID_n,PC_ID_n,AdministratorAccount_n,Maintain_Content_n,PC_maintain_Money_n,Maintain_time_n); commit; end PRO_MAINATION;7. 更新管理員
create or replace procedure PRO_ADMINISTRATER( AdministratorAccount_n in administrator.administratoraccount%type, AdministratorID_n in administrator.administratorid%type, AdministratorAge_n in administrator.administratorage%type, AdministratorName_n in administrator.administratorname%type, AdministratorPassword_n in administrator.administratorpassword%type, AdministratorQQ_n in administrator.administratorqq%type, AdministratorWechat_n in administrator.administratorwechat%type, AdministratorProfession_n in administrator.administratorprofession%type, AdministratorPhone_n in administrator.administratorphone%type, AdministratorSex_n in administrator.administratorsex%type, AdministratorAddress_n in administrator.administratoraddress%type, AdministratorRight_n in administrator.administratorright%type,is_change in int ) is begin --1 表示為插入,0 表示為修改if is_change = 1 theninsert into administrator values(AdministratorAccount_n,AdministratorID_n,AdministratorAge_n,AdministratorName_n,AdministratorPassword_n,AdministratorQQ_n,AdministratorWechat_n,AdministratorProfession_n,AdministratorPhone_n,AdministratorSex_n,AdministratorAddress_n,AdministratorRight_n,); elseupdate administrator set AdministratorAccount = AdministratorAccount_n,AdministratorID = AdministratorID_n,AdministratorAge = AdministratorAge_n,AdministratorName = AdministratorName_n,AdministratorPassword = AdministratorPassword_n,AdministratorQQ = AdministratorQQ_n,AdministratorWechat = AdministratorWechat_n,AdministratorProfession = AdministratorProfession_n,AdministratorPhone = AdministratorPhone_n,AdministratorSex = AdministratorSex_n,AdministratorAddress = AdministratorAddress_n,AdministratorRight = AdministratorRight_n,where administrator.AdministratorAccount = AdministratorAccount_n;end if;commit; end PRO_ADMINISTRATER;8. 更新電腦
create or replace procedure PRO_COMPUTER( PC_ID_n in computer.pc_id%type,PC_Gpu_n in computer.pc_gpu%type,PC_CPU_n in computer.pc_cpu%type,PC_Display_n in computer.pc_display%type,PC_Keyboard_n in computer.pc_keyboard%type,PC_charge_grade_n in computer.pc_charge_grade%type,PC_STATE_n in computer.pc_state%type,is_change in int) is PC_STATE_1_n int;begin PC_STATE_1_n := 0;--1 表示為插入,0 表示為修改if is_change = 1 theninsert into computer values(PC_ID_n,PC_Gpu_n,PC_CPU_n,PC_Display_n,PC_Keyboard_n,PC_charge_grade_n,PC_STATE_1_n,PC_STATE_n); elseupdate computer set PC_ID = PC_ID_n,PC_Gpu = PC_Gpu_n,PC_CPU = PC_CPU_n,PC_Display = PC_Display_n,PC_Keyboard = PC_Keyboard_n,PC_charge_grade = PC_charge_grade_n,PC_STATE_1 = PC_STATE_1_n,PC_STATE = PC_STATE_nwhere computer.pc_id = PC_ID_n;end if;commit; end PRO_COMPUTER;9. 更新會員
create or replace procedure PRO_USERS( UserAccount_n in user0.useraccount%type, UserID_n in user0.userid%type,UserAge_n in user0.userage%type,UserName_n in user0.username%type,UserPassword_n in user0.userpassword%type, UserBalance_n in user0.userbalance%type,UserPhone_n in user0.userphone%type,UserQQ_n in user0.userqq%type,UserWechat_n in user0.userwechat%type,UserProfession_n in user0.userprofession%type,UserSex_n in user0.usersex%type,UserAddress_n in user0.useraddress%type,UserGrade_n in user0.usergrade%type,is_change in int ) is begin --1 表示為插入,0 表示為修改if is_change = 1 theninsert into user0 values(UserAccount_n,UserID_n, UserAge_n, UserName_n, UserPassword_n, UserBalance_n, UserPhone_n, UserQQ_n, UserWechat_n, UserProfession_n, UserSex_n, UserAddress_n, UserGrade_n ); elseupdate user0 set UserAccount = UserAccount_n,UserID = UserID_n, UserAge = UserAge_n, UserName = UserName_n, UserPassword = UserPassword_n, UserBalance = UserBalance_n, UserPhone = UserPhone_n, UserQQ = UserQQ_n, UserWechat = UserWechat_n,UserProfession = UserProfession_n, UserSex = UserSex_n, UserAddress = UserAddress_n, UserGrade = UserGrade_nwhere user0.UserAccount = UserAccount_n;end if;commit; end PRO_USERS;觸發器
會員等級變換
CREATE OR REPLACE TRIGGER TRI_POINTS after insert on Bill_List for each row declare pragma autonomous_transaction;Grage_n user0.usergrade%type; comsume_n bill_list.user_consume%type; begin --獲取會員等級 select user0.usergrade into Grage_n from user0 where user0.useraccount=:new.useraccount; --獲取會員消費金額 select sum(bill_list.user_consume + bill_list.user_other_consume) into comsume_n from bill_list where bill_list.bill_id=:new.bill_id; --計算等級 if comsume_n>600 and comsume_n<1400 then Grage_n:='銀卡'; elsif comsume_n>1400 and comsume_n<2200 then Grage_n:='金卡'; elsif comsume_n>2200 then Grage_n:='鉆石'; else Grage_n:='普通'; end if; --更新會員等級 update user0 set user0.usergrade=Grage_nwhere useraccount =:new.useraccount; commit; end TRI_POINTS;余量不足提醒
CREATE OR REPLACE TRIGGER TRI_computer after update on computer for each row declare shu int; begin select count(computer.pc_id)into shufrom computerwhere computer.pc_state_1 = 0;if shu <5 then dbms_output.put_line('當前空閑電腦僅有 '||to_char(shu) || ' 臺!!!'); end if; end TRI_computer;總結
以上是生活随笔為你收集整理的网吧管理系统数据库设计的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [导入]ASP.NET MVC的WebS
- 下一篇: 分享到系统面板_win7电脑没有nvid