大數據庫課程設計--機票預訂系統(tǒng)_第1頁
大數據庫課程設計--機票預訂系統(tǒng)_第2頁
大數據庫課程設計--機票預訂系統(tǒng)_第3頁
大數據庫課程設計--機票預訂系統(tǒng)_第4頁
大數據庫課程設計--機票預訂系統(tǒng)_第5頁
已閱讀5頁,還剩31頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、1前百12需求分析12.1課程設計目的12.2課程設計任務12.3設計環(huán)境22.4開發(fā)語言23分析和設計23.1系統(tǒng)ER模型23.2表空間及表的設計333視圖設計83.4存儲過程、函數、包的設計123.5觸發(fā)器設計173.6角色、用戶、權限設計183.7備份方案設計194課程設計總結20參考文獻21致211刖旨航空客運業(yè)務誕生已有近一個世紀了,作為現(xiàn)有交通工具中最方便快捷的一種, 它確確實實地給民眾的生活、出行帶來了極大的方便。隨看社會的進步,人們的生活 水平得到很大的提高,民航的發(fā)展也很迅速,乘坐飛機的旅客也大大增多。假如現(xiàn)在 沒有售票系統(tǒng),民航將也不會存在,人們的出行極大不便。換句話說,個

2、功能完善 的機票預定信息管理系統(tǒng)對人們的日常生活已經顯得尤其重要。現(xiàn)設計一個機票預定信息管理系統(tǒng)的數據庫。首先根據問題需求設計E-R模型, 包括幾個主要的實體,如航空公司、飛機、乘客、航班、機票、業(yè)務員等以及相關的 聯(lián)系。然后再轉根據E-R模型設計出相應的關系模型,對于關系模型的每一個關系, 可以設計出相應的表,接看分配表空間、創(chuàng)建視圖、設計存儲過程、函數和觸發(fā)器以 及設計安全與備份策略。2需求分析2.1課程設計目的通過專業(yè)課程設計口,即大型數據庫系統(tǒng)課程設計,有助于培養(yǎng)學生綜合運用數 據庫相關知識解決實際問題的能力。本設計要求對實際問題進行需求分析,提煉實際 問題中的數據,建立關系模型,并在

3、大型數據庫中得以實現(xiàn)。同時要求對數據庫的運 營、管理及使用上進行必要的規(guī)劃和實現(xiàn)。2.2課程設計任務系統(tǒng)需要管理以下主要信息:(1)航班基本信息”包括航班的編號、飛機名稱、機艙等級等。(2 )機票信息,包括票價、折扣、當前預售狀態(tài)及經手業(yè)務員等。(3 )客戶基本信息,包括、聯(lián)系方式、證件及、付款情況等?;疽螅?1)根據需求,補充必要的數據庫實體,建立ER模型,通過ER圖表示。(2 )在Oracle中創(chuàng)建該系統(tǒng)的數據庫,并在數據庫中實現(xiàn)各表,寫入一定的 數據。(3 )從實際查詢應用出發(fā),為一些主要的應用模塊設計至少3個參數化視圖。(4) 從數據檢驗的角度出發(fā),為相關的表建立至少1個觸發(fā)器。(

4、5) 從數據更新或修改的角度出發(fā),設計至少1個存儲過程。(6 )從安全的角度出發(fā),規(guī)劃系統(tǒng)的角色、用戶、權限,并通過相關的SQL 實現(xiàn)。(7)預計每個表的大致容量和增長速度,指定備份的方案,寫出相關的備份命 令。2.3設計環(huán)境(1) WINDOWS 2000/2003/XP 系統(tǒng)(2 ) Oracle數據庫亀里系統(tǒng)2.4開發(fā)語言PL/SQL語言3分析和設計3.1系統(tǒng)ER模型經過分析可以知道,機票預定信息管理系統(tǒng)一共有航空公司、飛行、航班、機艙、 機票、乘客和業(yè)務員這幾個實體,航空公司有公司編號、公司名、公司和公司地址這 幾個屬性;飛機有飛機編號、飛機名稱兩個屬性;航班有航班號、出發(fā)地、目的地、

5、 起飛時刻和飛行時間這幾個屬性;機艙有機艙等級、座位數、定價和折扣這幾個屬性; 機票有機票編號、登機日期、預定狀態(tài)、座位號這幾個屬性;乘客有號、聯(lián)系、住 址這幾個屬性;業(yè)務員有業(yè)務員編號、業(yè)務員、業(yè)務員號、聯(lián)系和住址這幾個屬性。個航空公司有多架飛機和多名業(yè)務員,一架飛機可有多個航班,一個航班有多 種機艙等級,一個機艙可有多機票;乘客、業(yè)務員和機票之間有售票聯(lián)系,售票聯(lián)系 有售票日期這一屬性。根據以上分析可以畫出系統(tǒng)E-R圖,系統(tǒng)E-R圖如圖3.1所示:3.2表空I可及表的設計(1)表空間的設計。經過分析可知,乘客表、機票信息表和機票銷售表數據量 比較大,可單獨分配表空間,其他的表數據量較少,可

6、一起使用一個表空間。創(chuàng)建表分配表空間和添加數據文件,SQL語句如下:CREATE SMALLFILE TABLESPACE "PASSENGER"DATAFILE'F:ARPORACLEORADATAORCLTICKETSALEpassenger.dbfSIZE 100M AUTOEXTEND ON NEXT 5M MAXSIZE UNLIMITEDLOGGING EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENTAUTO;CREATE SMALLFILE TABLESPACE "TICKETDATAFILE

7、'F:APPORACLEORADATAORCLTICKETSALEticket.dbfSIZE 100M AUTOEXTEND ON NEXT 5M MAXSIZE UNLIMITEDLOGGING EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENTAUTO;CREATE SMALLFILE TABLESPACE "TICKETSALE"DATAFILE 'F:APPORACLEORADATAORCLTICKETSALEticketsale.dbfSIZE 100M AUTOEXTEND ON NEXT 5M M

8、AXSIZE UNLIMITEDLOGGING EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENTAUTO;CREATE SMALLFILE TABLESPACE "OTHERS-DATAFILE 'F:APPORACLEORADATAORCLTICKETSALEothers .dbf'SIZE 100M AUTOEXTEND ON NEXT 5M MAXSIZE UNLIMITEDLOGGING EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENTAUTO;表空間結構如圖3.2

9、所示:圖3.2表空間結構圖(2 )關系模型的設計。根據E-R模型,可以得出相應的關系模型,關系模型如 下:company ( eno , cname , ctel z caddress ) passenge( pID , pname , ptel , paddress ) salesman ( sno , sID , sname , stel , saddress , eno ) airplane ( ano , aname , eno )flight (kio , departure , arrival ; time , flytime z ano )cabin (fno , cblevel

10、 seats z price )ticket (tno z fno z cblevel r flydate f status f seat r discount) ticketsale (tno , pID , sno f saledate )(3)表的創(chuàng)建。對于關系模型的每一個關系,可以得出相應的一表,創(chuàng)建表的 SQL語句如下:CREATE TABLE "SYSTEM"."COMPANY"(CNO" VARCHAR2(10) NOT NULL,-CNAME" VARCHAR2(20) NOT NULL,CTEL" VARC

11、HAR2(20),CADDRESS" VARCHAR2(50),PRIMARY KEY ("CNO") VALIDATE)TABLESPACE "OTHERS"CREATE TABLE "SYSTEMn.nPASSENGERB (PID" VARCHAR2(20) NOT NULL,PNAME" VARCHAR2(20) NOT NULL,PTEL" VARCHAR2(20),PADDRESS" VARCHAR2(50),PRIMARY KEY ("PID") VALIDAT

12、E)TABLESPACE "PASSENGER"CREATE TABLE "SYSTEM"."SALESMAN"(SNO" VARCHAR2(10) NOT NULL,SID" VARCHAR2(20) NOT NULL,SNAME" VARCHAR2(20) NOT NULL,"STEL" VARCHAR2(20),"SADDRESS- VARCHAR2(50),"CNO" VARCHAR2(10) NOT NULL,PRIMARY KEY ("

13、;SNO") VAUDATE ,FOREIGN KEY ('CNO') REFERENCES "SYSTEM"."COMPANY" ("CNO") VALIDATE)TABLESPACE "OTHERS"CREATE TABLE "SYSTEM"."AIRPLANE"("ANO" VARCHAR2(10) NOT NULL,"ANAME" VARCHAR2(20) NOT NULL,"CNO"

14、; VARCHAR2(10) NOT NULL,PRIMARY KEY ("ANO") VAUDATE ,FOREIGN KEY ("CNO") REFERENCES "SYSTEM"."COMPANY" ("CNO") VALIDATE)TABLESPACE "OTHERS"CREATE TABLE "SYSTEMTFUGHT"("FNO" VARCHAR2(10) NOT NULL,"DEPARTURE" VAR

15、CHAR2(20) NOT NULL,"ARRIVAL- VARCHAR2(20) NOT NULL,"TIME" DATE NOT NULL,"FLYTIME" INTERVAL DAY TO SECOND NOT NULL,"ANO" VARCHAR2(10) NOT NULL,PRIMARY KEY ("FNO") VALIDATE ,FOREIGN KEY CANO") REFERENCES SYSTEM"."AIRPLANEn ("ANO") V

16、ALIDATE)TABLESPACE "OTHERS"CREATE TABLE "SYSTEM"."CABIN"("FNO" VARCHAR2(10) NOT NULL,"CBLEVEL" NUMBER(l) NOT NULL,"SEATS" NUMBER NOT NULL,"PRICE" NUMBER(5) NOT NULL,PRIMARY KEY ("FNO; "CBLEVEL") VAUDATE ,FOREIGN KEY

17、 ('FNO') REFERENCES "SYSTEM"."FLIGHT" ("FNO") VALIDATE)TABLESPACE "OTHERS"CREATE TABLE "SYSTEMn.nTICKET"("TNO" NUMBER(IO) NOT NULL,"FNO" VARCHAR2(10) NOT NULL,"CBLEVEL" NUMBER(l) NOT NULL,"FLYDATE" DATE

18、 NOT NULL f"STATUS" NUMBER(l) DEFAULT 1 NOT NULL,"SEAT" NUMBER(3) NOT NULL,"DISCOUNT" NUMBER(3, 2) NOT NULL,PRIMARY KEY ("TNO") VAUDATE ,FOREIGN KEY (TNO", 'CBLEVEL") REFERENCES "SYSTEM"/CABIN" ("FNO",CBLEVEL") VALID

19、ATE)TABLESPACE "TICKET"CREATE TABLE nSYSTEM".nTICKETSALE"("TNO" NUMBER (10) NOT NULL,"PID VARCHAR2(20) NOT NULL,"SNO" VARCHAR2(10) NOT NULL,"SALEDATE- DATE NOT NULL,PRIMARY KEY ("TNO", 'PID"f "SNO") VALIDATE,FOREIGN KEY (

20、'TNO") REFERENCES 'SYSTEM"."TICKET" ("TNO') VALIDATE ,FOREIGN KEY ('PID') REFERENCES "SYSTEM'/'PASSENGER" ('PID') VALIDATE,FOREIGN KEY ('SNO") REFERENCES 'SYSTEM"."SALESMAN" ('SNO") VAUDATE)TA

21、BLESPACE "TICKETSALE"(4)為表添加數據由于表company、salesman, airplane, flight和cabin是公司管理員通過應 用程序的管理端預先錄入的,因此應用程序需要為這些表添加一定數據,應用程序將會執(zhí)行INSERT語句對表進行插入數據。company的數據如表3.1所示:CNOCNAMECTELCADDRESSC0001朝云航空省市C0002航空市C0003航空省市表3.1 company表的數據salesman的數據如表3.2所示:SNOSIDSNAM£STELSADDRESSCNOS00011鄧春國省市茂南區(qū)C000

22、1S00021土車省市C0002S00032省市C0003S00048暮云省市茂南區(qū)C0001表 3.2 salesman 表的:airplane的數據如表3.3所示:ANOANAMECNOA0001波音737C0001A0002波音777C0001A0003波音737C0002A0004麥道82C0003表3.3 airplane表的數據flight的數據如表3.4所示:FNODEPARTUREARRIVALTO_CHAR(TIME, HH-MI-SS')FLYTIMEANOF000107-50-000 3:30:0.0A0001F000212-30-000 3:30:0.0A000

23、1F000308-00-000 1:5:0.0A0002F000410-20-000 1:5:0.0A0002F000509-10-000 2:50:0.0A0003F000612-50-000 2:50:0.0A0003F000707-35-000 1:10:0.0A0004F000810-05-000 1:10:0.0A0004表3.4 flight表的3艱cabin的數據如表3.5所示:FNOCBLEVELSEATSPRICEF0001150900F0001280700F0002150900F0002280700F0003130500F0003250400F0003370300F0004

24、130500F0004250400F0004370300F0005150800F0005270600F0006150800F0006270600F00071120400F00081120400表3.5 cabin表的婁3.3視圖設計應用程序需要查詢航班信息,因此需要創(chuàng)建一個航班信息的視圖,根據參數航班 號或者出發(fā)地以及目的地查詢航班信息,顯示航班號、公司名、飛機名稱、出發(fā)時間、 到達時間、出發(fā)地和目的地。由于oracle的視圖不支捋參數,但可以利用臨時表作 為參數進行傳遞,因此需要創(chuàng)建一個臨時表,創(chuàng)建臨時表的SQL語句如下:CREATE GLOBAL TEMPORARY TABLE "

25、;SYSTEM""INPUT_TO_FLIGHT"(T_FNO VARCHAR2(10),T_DEPARTURE" VARCHAR2(20),T_ARRIVAL" VARCHAR2(20),T_FLYDATE DATE)ON COMMIT PRESERVE ROWS;創(chuàng)建參數化視圖的SQL語句如下:CREATE OR REPLACE VIEW 'SYSTEM".'FUGHT_VIEW_BYFNOB(nFNO"/nCNAME,/"ANAME"/BTIME"/ARRIVAL_TIME

26、n,"DEPARTURE","ARRIVAL")AS SELECT fno,cname,aname,time,time+flytime,departur巳arrivalFROM flightcompany,airplane,input_to_flightWHERE flight.ano=airplane.anoAND o=oAND fno=input_to_fIight.T_fno;CREATE OR REPLACE VIEW 'SYSTEM".'FUGHT_VIEW_BYSITEB(,FNOn/CNAME,/nANAME&qu

27、ot;,nTIME"/ARRIVAL_TIMEB,nDEPARTURE"/ARRIVAL')AS SELECT fno,cname,aname,time,time+flytime,departure,arrivalFROM flightcompany,airplane,input_to_flightWHERE flight.ano=airplane.anoAND o=oAND departure=inputJoJlight.T_departureAND arrival=inputJoJlight.T_arrival;應用程序還可以根據航班號和航班日期查詢余票信息,因

28、此需要創(chuàng)建一個余票信 息的視圖,顯示某一航班某一日期不同機艙等級的剩余座位數、定價和折扣等信息。 因此創(chuàng)建一個參數化的視圖,其中計算余票使用函數countjicket,創(chuàng)建視圖的SQL 語句如下:CREATE OR REPLACE VIEW SYSTEM"."REMAIN_SEATS_VIEWn("FNO","FLYDATE",CBLEVEL","COUNT")AS SELECT DISTINCT fno,flydate,cblevel, count_ticket(fno,flydate,cblevel)

29、FROM ticket,input_to_flightWHERE fno=input_to_flight.t_fnoAND flydate=input_to_flight.T_FLYDATE;假設應用程序要查詢“的航班信息時,應用程序先執(zhí)行以下SQL語句:INSERT INTO input_to_flight VALUES(,7,);SELECT * FROM flight_view_bysite;此時系統(tǒng)會返回查詢的結果如圖3.3所示:倉 ht 忖bcaQ ©置 C X 二心血 ErepriseManag | 急 Oracle Enterprise Man. x w £?

30、瑟圖3.3 flight_view_bysite視圖查詢的數據這時候假設再想查詢航班F0003、日期為2011年6月1日的余票信息,應用 程序會執(zhí)行以下SQL語句:INSERT INTO input Jo JlightVALUES('F00037,;,/ to_date('2011-6-l:'yyyy-mm-dd');SELECT * FROM remain_seats_view ORER BY cblevel;此時系統(tǒng)會返回查詢的結果如圖3.4所示:圖3.4 remain_seats_view視圖查詢的數據在乘客確定好要預訂的機票的時候,系統(tǒng)需要打印機票,機票

31、上需要顯示機票編 號、航班號、公司名、飛機名稱、出發(fā)地、目的地、機票日期、出發(fā)時間、到達時間、 機艙等級、座位號、定價、折扣、售價以及乘客、乘客號和業(yè)務員,因此可以創(chuàng)建一 個視圖,創(chuàng)建視圖的SQL語句如下:CREATE OR REPLACE VIEW -SYSTEM".TICKET_INFO_VIEW"("TNO"/FNOB,"CNAME'/ANAME",'DEPARTURE",BARRIVAL"FLYDATE"f"TIME"ARR IVAL_TIME",&q

32、uot;CBLEVELn/SEAT"/PRICEBfBDISCOUNr/FINAL_PRICE",-PNAME"/PIDB,nSNAME')AS SELECT ticket.tno, ticket.fno ,ame , aname , departure, arrival, flydate, time, time+flytime, ticket.cblevel , seat , price , discount, price*discount , pname,passenger.pID, snameFROM ticket r flight, airplan

33、e, company, passenger.salesman.ticketsale, cabinWHERE ticket.fno =flight.fnoAND flight.ano=airplane.anoAND o=oAND ticketsale.tno=ticket.tnoAND ticketsale.pid二passenger.pidAND ticketsale.sno=salesman.snoAND ticket.fno=cabin.fnoAND ticket.cblevel=cabin.cblevel;應用程序需要查詢售票記錄,因此可以創(chuàng)建一個視圖來查詢機票編號、乘客、乘 客號、業(yè)務

34、員編號、業(yè)務員和購票日期,創(chuàng)建視圖的SQL語句如下:CREATE OR REPLACE VIEW -SYSTEM"."SALERECORD_VIEW"("TNO",PNAME","PID",SNO",SNAME,"SALEDATE")AS SELECT ticketsale.tno,pnam巳ticketsale.pID,ticketsale.sno$nam巳saledateFROM ticket,passenger;salesmanfticketsaleWHERE ticket.tn

35、o=ticketsale.tnoAND ticketsale.pid=passenger.pidAND ticketsale.sno=salesman.sno;視圖salerecord_view的查詢結果如圖所示3.5 :,I 心 ocb P * 0 <2 C X Oracle Enterprise Manager (. Oracle Enterprise Manage. x圖 3.5 salerecord_view 視圖查詢的:應用程序需要統(tǒng)計業(yè)務員的業(yè)績,需要顯示業(yè)務員編號、業(yè)務員、航空公司名和 銷售總額。因此創(chuàng)建視圖sale_grade_view來查詢銷售總額,SQL如下所示:CR

36、EATEORREPLACEVIEWSYSTEMTSALE GRADE VIEW"CSNOTSNAMETCNAMETSUMJAS SELECT ticketsale.sno,sname rame z SUM(price*discount)FROM ticketsale f salesman f company .ticket, cabinWHERE salesman.sno =ticketsale.snoAND o =oAND ticket.tno =ticketsale.tnoAND cabin.fno =ticket.fnoAND cabin.cblevel=ticket.cble

37、velGROUP BY ticketsale.snoz sname zame視圖sale_grade_view查詢結果如圖3.6所示:圖3.6 sale_grade_view視圖直詢的數據3.4存儲過程、函數、包的設計(1)存儲過程設計管理員需要對機票信息的錄入,由于機票信息的數據量龐大,手工輸入是不現(xiàn)實 的事情,因此需要采用存儲過程來進行對數據的錄入。為了使機票編號有序且不重復, 因此需要創(chuàng)建一個表,表存放當前機票編號,創(chuàng)建表和存儲過程SQL語句如下:CREATE TABLE nSYSTEMM.BT_NUMBERn (TNO" NUMBER(IO)CREATE OR REPLACE

38、 PROCEDURE SYSTEM-.XREATEJICKET-(pjno varchar2f pjlydate date, p_discount number)as v_cblevel_count number;v_ticket_count_by_cblevel number;v_tno number;beginSELECT count(l) INTO v_cblevel_count FROM cabin WHERE fno=pjno;SELECT tno INTO v_tno FROM t_number;FOR v_i in l.v_cblevel_count loopSELECT sea

39、ts INTO v_ticket_count_by_cblevel FROM cabin WHEREfno=pjno AND cblevel=vj;FOR vj IN :L.v_ticket_count_by_cblevel loopINSERT INTO ticketVALUES(v_tnop_fnov_Lp_flydatelvjp_discount);v_tno:=v_tno+l;END LOOP;END LOOP;UPDATE t_number SET tno=v_tno;END;假設管理員需要插入航班號為F0003.日期為2011年6月10日、折扣為0.7的機票,這需要執(zhí)行過程CREA

40、TE_TICKET ,過程執(zhí)行的SQL語句如下:CALL create_ticketCF0003:to_date('2011610:'yyyymmdd'),0.7);此時ticket表的數據就會更新f ticket表的部分數據如表3.6所示:007654321o3gg3gg3gg3gg3gg3gg3gg3ggn N O11111111CBLEVEL2011-6-102011-6-102011-6-102011-6-102011-6-102011-6-102011-6-102011-6-10TO_CHAR(FLYDATE, YYYY-MM-DD)iiiiiiiiUHS&g

41、t;00765432iT史o7O7O7OOO7O7o7DISCOULd0 36 ticket斜wffi対洶母 ( Mcketsa_e ) ii>sH兵凹壬e_® sf 8w_m3H' »_m3ni3 SQL®回合 tf可- CREATE GLOBAL TEMPORARY TABLE dYSTEM-:PRINTTICKET 二TNO" VARCHAR2(10),FNO VARCHAR2(10),CNAME" VARCHAR2(20),ANAME" VARCHAR2(20),DEPARTURE" VARCHAR2(

42、20),ARRIVAL" VARCHAR2(20), FLYDATE" DATE,TIME" DATE,ARRIVAL_TIME' DATE,CBLEVEL" NUMBER(l),-SEAT" NUMBER(3),PRICE" NUMBER(5),DISCOUNT" NUMBER(3, 2),FINAL_PRICE" NUMBER,PNAME" VARCHAR2(20),PID" VARCHAR2(20),SNAME" VARCHAR2(20)ON COMMIT PRESERV

43、E ROWS;CREATE OR REPLACE PROCEDURE "SYSTEM."CREATE_RECORD"(p_fno ticket.fno%TYPE,p_flydate date,p_cblevel ticket.cblevel%TYPE,p_pid passenger.pid%TYPE/p_sno salesman.sno%TYPE)AS v_tno ticket.tno%TYPE; v_row ticketjnfo_view%ROWTYPE;BEGINSELECT min(tno) INTO v_tno FROM ticket WHERE fno=

44、p_fno ANDflydate=pjlydate AND cblevel=p_cblevel AND status=l;INSERT INTO ticketsale VALUES(v_tno,p_pid,p_sno, sysdate);UPDATE ticket SET status=O WHERE tno=v_tno;SELECT * INTO v_row FROM ticketjnfo_view WHERE tno=v_tno;INSERT INTO print_ticket VALUES(v_rowtno,v_rowfnoN_rowcname,v_rowaname,v_rowdepar

45、ture,vowarrival,v_ rowflydatEVowtimeN_rowarTival_timeN_rowcblevel,v_rowseatv_rowpiceN_rowdisc ount v_row.fi nal_pric 巳 v_row.p name,v_row.picLv_rowsnarne);END;假設乘客鄧春國要購買一航班號為F0003、日期為6月1號的機票,售票員工 號為S0001 ,則系統(tǒng)先讓乘客輸入號,查詢該乘客是否存在,存在的話顯示乘客信 息并提示是否需要更新,否則添加一個乘客信息,假設該乘客的記錄不存在,則先進 行插入操作然后執(zhí)行CREATE.RECORD過程并且

46、查詢臨時表PRINT_TICKET的數 據用于打印機票,SQL語句如下:INSERT INTO passenger VALUES('5:'鄧春國:",'省市茂南區(qū)');CALL create_record(10003*,to_date(,2011-6-17yyyy-mm-dd,)fX,5';S0001,);SELECT * FROM print_ticket;查詢結果如圖3.7所示:圖 3.7 printjicket 表的(2 )函數設計在售票的時候需要計算剩余票的數量,因此可以創(chuàng)建一個函數來計算剩余票的數 量,函數的參數為航班號、航班日期和機

47、艙等級,函數的創(chuàng)建如下:CREATE OR REPLACE FUNCTION MSYSTEMB/COUNT_TICKET"(pjno flight.fno%TYPE/pJlydate dat巳p_cblevel cabin.cblevel%TYPE)RETURN numberAS v_count number;BEGINSELECT count(l) INTO v_count from ticket WHERE fno=p_fno AND flydate=pjlydate AND cblevel = p_cblevel AND status=l;RETURN v_count;END;

48、(1)包設計可以把以上的存儲過程和函數封裝到包里面,創(chuàng)建包的SQL語句如下:CREATE OR REPLACE PACKAGE "SYSTEM'."SALES_SYSTEM" ASFUNCTION countjicket(p_fno flight.fno%TYPE/pJlydate date#p_cblevel cabin.cblevel%TYPE )RETURN number;PROCEDURE createjicket( pjno varchar2r pjlydate dater p_discount number);PROCEDURE create_

49、record( pjno ticket.fno%TYPE/ pjlydate dater p_cblevelticket.cblevel%TYPEf p_pid passenger.pid%TYPE, p_sno salesman.sno%TYPE );END;創(chuàng)建包體的SQL語句如下:CREATE OR REPLACE PACKAGE BODY "SYSTEM-."SALES_SYSTEMASPROCEDURE CREATE_RECORD ( p_fno ticket.fno%TYPE,pjlydate date,p_cblevel ticket.cblevel%TYPE

50、,p_pid passenger.pid%TYPE/p-sno salesman.sno%TYPE)AS v_tno ticket.tno%TYPE; v_row ticketjnfo_view%ROWTYPE;BEGINSELECT min(tno) INTO v_tno FROM ticket WHERE fno=p_fno ANDflydate=pjlydate AND cblevel=p_cblevel AND status=l;INSERT INTO ticketsale VALUES(v_tno,p_pid,p_sno, sysdate);UPDATE ticket SET sta

51、tus=0 WHERE tno=v_tno;SELECT * INTO v_row FROM ticketjnfo_view WHERE tno=v_tno;INSERT INTO print_ticket VALUES(v_owtnov_row.fno,v_rowcname,v_rowa nam 巳 v_row.departur 巳 v_row.arrival,v_ rowflydate,v_rowtimEV_rowarTival_timeN_rowcblevel,v_owseatv_rowpricEV_rowdiscoun tv_row.fi nal_pric 巳 v_rowpname,v

52、_rowpid,v_rowsname);END;FUNCTION COUNT_TICKET(pjno flight.fno%TYPErpJlydate date,p_cblevel cabin.cblevel%TYPE)RETURN numberAS v_count number;BEGINSELECT count(l) INTO v_count from ticket WHERE fno=p_fno ANDflydate=pjlydate AND cblevel=p_cblevel AND status=l;RETURN v_count;END;PROCEDURE CREATE_TICKET

53、(pjno varchar2, pjlydate date, p_discount number)AS v_cblevel_count number;v_ticket_count_by_cblevel number;vjno number;BEGINSELECT count INTO v_cblevel_count FROM cabin WHERE fno=pjno;SELECT tno INTO v_tno FROM t_number;FOR vj in l.v_cblevel_count loopSELECT seats INTO v_ticket_count_by_cblevel FRO

54、M cabin WHERE fno=pjno AND cblevel=v_i;FOR vj IN l.v_ticket_count_by_cblevel loopINSERT INTO ticketVALUES(v_tno,p_fno.v_Lp_flydatelvjp_discount);v_tno:=v_t no+1;END LOOP;END LOOP;UPDATE t_number SET tno=v_tno;END;END;3.5觸發(fā)器設計在輸入機票信息時,需要保證航B日期是在當前日期的下一,因此可以用觸發(fā)器來實現(xiàn),觸發(fā)器創(chuàng)建的SQL語句如下:CREATE OR REPLACE TRIG

55、GER 'SYSTEMn.-CHECK_FLYDATE" BEFOREINSERT OR UPDATE OF "FLYDATE" ON "SYSTEMTICKET" REFERENCING OLD ASOLD NEW AS NEW FOR EACH ROWBEGINIF :new.flydate< =sysdate THEN raise_application_error(-20000/out of range');END IF;END CHECK_FLYDATE;假如想要插入5月1號的機票,則系統(tǒng)會提示錯誤,如圖3.8所

56、示:圖3.8觸發(fā)器返回結果圖3.6角色、用戶、權限設計整個機票預定系統(tǒng)需要兩個應用程序,一個是售票管理員使用的,用來錄入和更新信息,另一個是售票員使用的前臺應用程序,因此需要兩個角色,分別為管理員和售票員。角色sales.manager和saler的信息如圖3.9所示:般信息名稱 SALESIANAGER 驗證None角色角色管理迭項SELECT_CATALOG_ROLE N系統(tǒng)權限系繞欽眼管理迭項未找到任何頂對象權限般信息名稱SALER 驗證None角色角色管理迭項SELECT_CATALOG_ROLE N系統(tǒng)權限系統(tǒng)權眼管理迭項未棧到任何項1 ©上一步彳10/52后10條記錄對製

57、權眼方案對製DELETESYSTEM.AIRPLANEINSERTSYSTEMAIRPLANESELECTSYSTEMAIRPLANEUPDATESYSTEMAIRPLANEDELETESYSTEMCABININSERTSYSTEMCABINSELECTSYSTEMCABINUPDATESYSTEMCABINDELETESYSTEMCO'IPANYINSERTSYSTEMCO'IPANY©上一步1-10/52后10條記錄)對象權限對象權眼方案對象EXECUTE SYSTEM CREATT_RECORDEXECUTE SYSTEM CREATE_TICKETSELECT

58、SYSTEM FLIGHT JTEW_BTNOSELECTSYSTEM FLIGHT JTEW_BYSITEINSERTSYSTEM INPUT_TO_FLIGHTINSERTSYSTEM PASSENGERSELECTSYSTEM REfAIN_SEATS_VIE5VSELECTSYSTEM S ALERECORD_VEEWSELECTSYSTEM TICKET_INFO_VIEW使用者組權限使用者組未找到任何項使用者組權限侵用者組未棧到任何項圖 3.9 角色 SALES_MANAGER 和 SALES 信息接看創(chuàng)建兩個用戶user_manage和user_sales ,并分別授予sales_manager 和saler角色。創(chuàng)建

溫馨提示

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

最新文檔

評論

0/150

提交評論