數據庫大作業——一卡通課程設計_第1頁
數據庫大作業——一卡通課程設計_第2頁
數據庫大作業——一卡通課程設計_第3頁
數據庫大作業——一卡通課程設計_第4頁
數據庫大作業——一卡通課程設計_第5頁
已閱讀5頁,還剩10頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、 數據庫應用大作業實 驗 報 告課程名稱:Oracle數據庫試驗實驗項目:校園一卡通的設計與實現姓 名:任秀虎學 號:13101192班 級:軟件開發技術校園一卡通的設計與實現一 、引言:1.1背景 一卡通網 校園一卡通系統是數字化校園的基礎工程,是數字化校園中有機的、重要的組成部分。為數字化校園提供了全面的數據采集平臺,結合學校的管理信息系統和網絡,形成全校范圍的數字空間和共享環境。為學校管理人員提供具有開放性、靈活性、面向學校的應用服務管理平臺、是管理科學化的必要前提和基本途徑。以校園一卡通系統為平臺,實現以人為本,并可充分利用銀行的金融服務,實現“一卡在手,走遍校園”,必將滿足學校數字化

2、建設的需求及目的。1.2簡要需求說明 有多個校區,每個校區都有自己獨立的服務器,校區間通過寬帶連接,校園卡在校區間可通用,前提是服務器之間數據要同步。 針對學校的實際情況,校園一卡通可以實現以下幾個方面的功能:1 電子錢包功能:校區內的所有的食堂,都可以使用一卡通進行交易。2 管理(身份識別)功能:校內使用的各種證卡均可由校園一卡通代替,實現圖書館、電子閱覽室、學生公寓、考勤的身份識別一卡通。實現校內所有重要場所的出入門禁管理。3 .金融功能:學生可以使用與校園卡關聯的銀行卡進行存取款、轉賬結算等金融業務1.3 系統需求: 中心數據庫:oracle11g 操作系統:Windows xp,Lin

3、ux 內存要求:不小于2G 交換空間:不小于8G 工作站操作系統:Windows 2000/XP等 系統容量:系統帳戶容量10萬,可以擴充 子系統接入數量:128個,可以擴充 網絡設置:根據學校建筑布局結合現有走線管道,并為安全性考慮,提供兩種一卡通網絡的組建方案: (1)在現有校園主干網中分一個VLAN(虛擬局域網),將所有一卡通系統的計算機全部接入這個VLAN,以達到一卡通網絡與校園網邏輯上分開互相不能訪問。 (2)利用現有管道重新鋪設線路并添置新的網絡設置(交換機、集線器等),將一卡通系統組成一個單獨的網絡,這樣在物理上與校園網分開。 校區互聯: 應用代理服務器機制,代理服務器只接受用戶

4、的查詢并轉發服務器中的數據,在代理服務器上運行專用的軟件,定時負責與各個校區的服務器交換數據。 例圖如下:校區B校區A 代理服務 器 校區C 1.4系統設計原則: 安全、可靠、高效、易擴展1.5 設計背景: 項目名稱:校園一卡通系統 用戶:大學或高級中學1.6 參考資料: 1.oracle10g:Program with PL/SQL 2.數據庫系統概論 3.CSDN有關Oracle數據庫資料 二 、數據庫的物理結構設計 2.1 數據庫設計:l 全局數據庫名稱:orcl l 數據庫字符集選擇 :采用UTF8字符集l 數據庫的DB_FILES 設置 使用默認的值200l OLTP類型:db_bl

5、ock_size 用比較小的取值范圍: 2048 或 4096 2.2 數據庫控制文件配置: D:ORACLEORADATAORCLCONTROL01.CTL D:ORACLEORADATAORCLCONTROL02.CTL D:ORACLEORADATAORCLCONTROL03.CTL 2.3 數據庫重做日志文件配置: D:ORACLEORADATAORCLREDO01.LOG D:ORACLEORADATAORCLREDO02.LOG D:ORACLEORADATAORCLREDO03.LOG三 、數據庫的邏輯結構設計 3.1 有關表空間的設計與實現: 1、管理員信息表: admin_i

6、nfo 記錄系統管理者的有關信息,權限分三級,用數字1,2,3來表示,權限大小遞減用戶編號姓名密碼權限 Create table admin_info ( admin_id varchar2(20) constraint admin_info_pk primary key , admin_name varchar2(20) not null, admin_password varchar2(15) not null, admin_privilege number(1); 2、用戶信息表: user_info記錄學生用戶的有關信息用戶編號姓名信息卡號性別院系/部門 用戶編號為學號或教職工編號Cr

7、eate table user_info( user_num varchar2(20) constraint student_info_pk primary key , user_name varchar2(20) not null, user_card_id varchar2(20) not null , user_sex varchar2(4) not null, user_department varchar2(30) not null, Constraint user_info_fk foreign key( user_card_id) references user_info(use

8、r_num) ); 3、一卡通信息表: info_card 記錄一卡通用戶的有關信息信息卡號用戶編號 剩余金額密 碼掛 失 0表示為非掛失狀態,1表示為掛失狀態 Create table info_card( card_num varchar2(20) primary key, card_user_id varchar2(20), card_leftmoney number(10,2) , card_password varchar2(20) not null, card_losted number(1) not null default(0), Constraint info_card_fk

9、 foreign key( card_user_id) references info_card(card_num) );4、 流水帳消費記錄表: consume_info 記錄用戶消費情況信息卡號消費金額消費日期終端號 Create table consume_info( consume_num varchar2(20) not null, consume_money number(10,2) not null, consume_date varchar2(20) not null, concume_machine_id number(3) not null);5、 存款/轉賬記錄表:sav

10、e_money 記錄學生存款的情況信息卡號存款金額存款日期存款類型操作員編號 此表記錄學生存現、轉賬情況。 如果是轉賬:存款類型為 0 如果是存現:存款類型為 1 操作員編號為POS機的編號(自動編號為0000)Create table save_money( save_user_id varchar2(20) primary key, save_money number(10,2) not null, save_date varchar2(20) not null, save_type number(1) not null default(0), save_operator_id varch

11、ar2(6) not null);6、 連接銀行卡和一卡通的中間記錄表(銀校表):bank_campus 信息卡號儲蓄卡號儲蓄密碼儲蓄折號轉賬金額身份證號 僅用來作為一卡通用戶進行轉賬時的用戶安全驗證Create table save_money( bank_campus_userid varchar2(20) primary key, bank_campus_banknum varchar2(30) not null, bank_campus_bankpassword varchar2(6) not null, bank_campus_bankbook varchar2(30) not nu

12、ll , Bank_campus_transfer number(10,2) not null default(50.00), bank_campus_idcard varchar2(20) not null); 7、假設用戶在銀行開的賬戶表如下:bank_account儲蓄折號儲蓄卡號儲蓄密碼用戶姓名剩余金額身份證號 Create table bank_account( bank_account_bankbookid varchar2(30) primary key, bank_account_banknum varchar2(30) not null, bank_account_bankp

13、assword varchar2(6) not null, bank_account_name varchar2(20) not null , Bank_account_leftmoney number(10,2) not null , bank_account_idcard varchar2(20) not null); 8、退款銷戶記錄表: remove_user_info 用于記錄退款銷戶情況用戶編號退款金額 退款日期操作類型操作員 Create table remove_user_info( remove_userid varchar2(20) primary key, remove_

14、money number(10,2) not null, remove_date varchar2(20) not null, remove_type number(1) not null, remove_operator varchar2(10) not null); 3.2 有關表索引的設計與實現: 1.對學生用戶表按院系/部門建立索引:index_student Create index index_student on user_info(user_department); 2.對一卡通信息表的掛失字段建立索引:index_card_lost Create index index_ca

15、rd_lost on info_card(card_losted); 3.3 有關視圖的設計與實現: 1、終端交易記錄視圖:view_terminal_record終端號交易金額消費日期 Create or replace view view_terminal_record (terminal_id,terminal_trademoney,terminal_date) As select concume_machine_id,sum(consume_money),consume_date From consume_info Where concume_machine_id = &p_t

16、erminal_id Order by concume_machine_id,to_date(consume_date,'DD-Mon-YY'); 3.4 PL/SQL程序實現(存儲過程和函數) 在用戶存在且一卡通沒有掛失的條件下實現 1、存現函數 :Fun_save_money用來完成對一卡通現金的存儲, 存款不成功返回值為False,存現成功則返回為True Create or replace function Fun_save_money ( P_userid IN info_card.Card_num%TYPE, p_save_money IN info_card.Ca

17、rd_leftmoney%TYPE, P_operatorid IN varchar2, P_show_message OUT varchar2 ) return boolean Is Begin If p_save_money > 0 then Update info_card Set card_leftmoney=card_leftmoney+p_save_money Where card_num=p_userid; Insert into save_money Values(p_userid,p_save_money,to_char(sysdate,'yyyy-mm-dd

18、hh:mi:ss'),1,p_operatorid); P_show_message='用戶' p_userid存現成功!; Return true; Else P_show_message = 存款金額非法!; Retrun false; End if End Fun_save_money; 2、轉賬函數:Fun_hand_transfer和Proc_auto_transfer 用來從銀行儲蓄卡里面向一卡通里充值,可以自動充值也可手動充值。當一卡通余額不足10元時系統可以自動向一卡通充值(默認值50元,可以修改),用戶也可手動用儲蓄卡向一卡通充值。 手動充值函數:Fu

19、n_hand_transfer Create or replace function Fun_hand_transfer ( P_posid IN number, p_tansfer_money IN bank_campus.bank_campus_transfer%TYPE, P_userid IN bank_campus.bank_campus_userid %TYPE, P_bank_account_num IN bank_campus.bank_campus_banknum%TYPE, P_bank_account_psw IN bank_campus.bank_campus_bank

20、password%TYPE, P_show_message OUT varchar2 )return boolean Is V_bank_money number(10,2); Begin If p_tansfer_money >0 then V_bank_money = Fun_bank_interface(p_tansfer_money,P_bank_account_num,P_bank_account_psw); If v_bank_money !=0 then Update table_info_card -更新一卡通信息表 Set card_leftmoney=card_lef

21、tmoney + v_bank_money Where card_num=p_userid; Insert into save_money -記錄轉賬信息 Values(p_userid,p_tansfer_money,to_char(sysdate,'yyyy-mm-dd hh:mi:ss'),0,p_posid); P_show_message='用戶' p_userid轉賬成功!; Return true; Else P_show_message='用戶' p_userid轉賬失敗!; Retrun false; End if Else P

22、_show_message=輸入金額非法!; Return false; End if End Fun_hand_tansfer 自動充值存儲過程: Proc_auto_transfer Create or replace procedure Proc_auto_transfer Is V_money number(10,2); V_addmoney number(10,2); V_user_id varchr2(20); V_bank_cardid varchar2(30); V_bank_psw varchar2(6); Cursor auto_transfer_cursor is Sel

23、ect card_num,card_leftmoney From info_card Where card_leftmoney<10.00 Order by card_leftmoney; Begin Open auto_transfer_cursor; Fetch auto_transfer_cursor into v_user_id,v_money; While auto_transfer_cursor%found loop Select bank_campus_banknum,bank_campus_bankpassword,Bank_campus_transfe Into V_b

24、ank_cardid,V_bank_psw,V_addmoney From bank_campus Where bank_campus_userid=v_user_id; V_money=Fun_bank_interface(V_addmoney,V_bank_cardid,V_bank_psw); If v_money!=0 then Update info_card -更新一卡通信息表 Set card_leftmoney=card_leftmoney + v_money Where card_num=v_user_id; Insert into save_money -記錄轉賬信息 Va

25、lues(v_user_id,v_money,to_char(sysdate,'yyyy-mm-dd hh:mi:ss'),0,'0000'); End if Fetch auto_transfer_cursor into v_user_id,v_money; End loop; Close auto_transfer_cursor; Commit; End Proc_auto_transfer 銀行卡接口函數:Fun_bank_interface Create or replace function Fun_bank_interface ( p_tansfer

26、_num IN number , P_tansfer_accountid IN varchar2, P_tansfer_accountpassword IN varchar2, P_show_message OUT varchar2 ) return number Is V_money number(10,2); Begin Select bank_account_leftmoney Into v_money From bank_account Where P_tansfer_accountid=bank_account_banknum And P_tansfer_accountpasswor

27、d=bank_account_bankpassword ; If (p_tansfer_num > 0 and v_money-ptansfer_num>0) then Update bank_account Set Bank_account_leftmoney=bank_account_leftmoney-p_tansfer_num Where P_tansfer_accountid=bank_account_banknum And P_tansfer_accountpassword=bank_account_bankpassword ; Update P_show_messag

28、e='轉賬成功!' Return p_tansfer_num; Else P_show_message=轉賬失敗!; Return 0; End if End Fun_bank_interface; 3、就餐消費函數:Fun_consume Create or replace function Fun_consume ( p_user_id IN info_card.card_num%TYPE, P_consume_money IN consume_info.consume_money%TYPE, P_terminal_id IN consume_info.concume_ma

29、chine_id%TYPE, P_show_message OUT varchar2 ) return boolean Is V_leftmoney number(10,2); Begin Select card_leftmoney Into v_leftmoney From info_card Where card_num=p_user_id ; If v_leftmoney > p_consume_money then Update info_card Set card_leftmoney=card_leftmoney - p_consume_money Where card_num

30、=p_user_id ; Insert into consume_info Values(p_user_id,p_consume_money,to_char(sysdate,'yyyy-mm-dd hh:mi:ss'),p_terminal_id); P_show_message='用戶'|p_user_id|'消費成功!' Return true; Else P_show_message=用戶|p_user_id|'消費失敗!' Return false; End if End Fun_consume 4、退款函數:Fun_ba

31、ck_remove 記錄用戶退款及刪除用戶并寫入日志表 Create or replace function Fun_back_remove ( p_user_id IN info_card.card_num%TYPE, P_operator IN remove_user_info.remove_operator%TYPE, )return varchar2 Is V_back_money number(10,2); Begin Select card_leftmoney Into v_back_money From info_card Where p_user_id = card_num;

32、If v_back_money>0 then Delete from bank_campus where bank_campus_userid=p_user_id; Delete from info_card where card_num=p_user_id; Insert into remove_user_info Values(p_user_id,v_back_money,to_char(sysdate,'yyyy-mm-dd hh:mi :ss'),0,p_operator); Return ('請退給用戶'|p_user_id|v_back_mon

33、ey|'元'|'并刪除用戶!'); Else Delete from bank_campus where bank_campus_userid=p_user_id; Delete from info_card where card_num=p_user_id; Insert into remove_user_info Values(p_user_id,v_back_money,to_char(sysdate,'yyyy-mm-dd hh:mi :ss'),0,p_operator); Return('用戶'|p_user_id|'一卡通里已無余額!'|'并刪除用戶!'); End if End Fun_back_remove 四 、數據庫運行與維護方案 4.1 數據庫的備份策略 DBA要針對一卡通系統的特殊性制定出多種備份方案,以保證一旦發生故障能盡快將數據庫恢復到某種一致狀態,并盡可能減少對數據庫的損壞。 1.可利用oracle數據庫所提供的備份技術進行數據庫級、用戶級及表級備份 2.可利用動態增量轉儲技術對數據庫進行周期性備份

溫馨提示

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

評論

0/150

提交評論