第一篇:QTP自帶的飛機訂票功能測試報告
QTP自帶的飛機訂票功能測試報告
課題名稱
飛機訂票系統功能測試報告 系/專 業
*******學院 班
級
***** 學
號
***** 學生姓名
*****
指導教師:*****
測試目標
了解熟悉QTP自動化測試工具及其基本功能,掌握QTP自動化測試的基本測試步驟,能運用QTP測試工具對系統進行簡單的自動化測試。在QTP測試中能寫出基本的腳本語言,以及能夠對腳本語句進行編寫,能夠測試登錄功能、訂票功能。其中有判斷訂票是否成功、添加檢查點及循環所有航班能否成功測試。
測試內容
熟悉了解飛機訂票系統的基本運行流程,從登錄到訂票、查詢、刪除等一系列基本功能的操作,并能夠對其中的一些功能進行測試工作。此次飛機訂票系統測試內容有登錄功能,其中登陸功能測試包含一個用戶能否正確登錄、設置參數可以進行多個用戶正確和錯誤的登錄進行測試。在訂票功能中有對訂票是否成功的測試、設置檢查點以及循環所有航班的測試。
測試原理分析
QTP主要采用的是GUI模擬人的操作。它在模擬人的操作時會通過錄制記錄操作的對象及所做的操作和順序,然后在回放時按照記錄順序操作這些對象。而在這個模擬的過程中最重要的莫過于界面對象控件的識別。
基本操作
第二步:點擊QTP的執行文件
第二步:第一步完成后會出現下圖的對畫框,然后點擊”OK”,如圖1-01;
圖1-01
第三步:選擇“Blank Test”選項,如圖1-02;
圖1-02
第四步:關閉右上角的對話框,選擇左上角的“Record”選項,如圖1-03;
圖1-03
第五步:對具體軟件程序的測試有兩種方法。第一種是錄制并且運行測試任何一個打開的基于Windows下的應用程序,第二種是只是錄制和運行QTP軟件中打開的應用程序。如圖1-04;
圖1-04
第六步:在“application”中點擊“+”按鈕選擇要執行程序的文件,并點擊確定按鈕,開始錄制,如圖1-05;
圖1-05
登陸測試測試用例設計
針對登錄模塊的輸入條件:用戶名和密碼,有以下幾種情況: 1.當用戶什么也沒輸入,直接點OK按鈕,是否提示請輸入用戶名;
2.當用戶輸入正確的用戶名,沒輸入密碼,直接點擊OK按鈕,是否提示請輸入密碼;
3.對密碼進行驗證看是否設置輸入密碼的長度;
4.當輸入正確的用戶名和密碼時,點擊OK按鈕是否進入操作界面;
對登錄模塊進行測試時,盡可能全面的測試登陸功能的正常和異常情況:只要用戶名大于或等于4個字符,密碼是“mercury”,即可
登錄。
錄制與測試過
第一步:用QTP自動打開Flight Reservation系統的登陸界面,輸入用戶名和密碼,確定當前的操作,將訂票系統打開,登陸界面如圖2-01;
圖2-01 第二步:在QTP主界面中單擊“Record”,在登陸界面的文本框
中,輸入正確的用戶名和密碼,單擊“OK”按鈕,進入飛機訂票系統界面。在QTP主界面,單擊“Stop”按鈕,結束當前的錄制,如圖2-02;
圖2-02
錄制的腳本代碼為:
'寫一個循環,讀取datatable的每一行測試用例 Dim i '定義變量i Dim outputvalue '定義變量實際得到的輸出 Dim istatus '定義變量希望得到的輸出
For i=1 to datatable.GetSheet(“Action1”).getrowcount '從第一行,讀到datatable的最后一行
Dialog(“Login”).WinEdit(“Agent Name:”).Set DataTable(“AgentName”, dtLocalSheet)Dialog(“Login”).WinEdit(“Password:”).SetSecure DataTable(“Password”, dtLocalSheet)Dialog(“Login”).WinButton(“OK”).Click Dialog(“Login”).Dialog(“Flight Reservations”).Static(“Agent name must be at least 4 characters long.”).Output CheckPoint(“Agent name must be at least 4 characters long.”)Dialog(“Login”).Dialog(“Flight Reservations”).WinButton(“確定”).Click outputvalue=datatable(“outmsg”,dtlocalsheet)'獲取該次循環的實際輸出 istatus=datatable(“status”,dtlocalsheet)'獲取該次循環的預期輸出
If outputvalue<>istatus Then Reporter.ReportEvent micFail,“登錄測試”,“實際的:”+outputvalue+“預期的:”+istatus+“不相同!” '報錯
else Reporter.ReportEvent micPass,“登錄測試”,“實際的:”+outputvalue+“預期的:”+istatus+“相同!” '報對 End If
datatable.GetSheet(“Action1”).setnextrow '獲取下一行測試用例 Next Dialog(“Login”).WinButton(“Cancel”).Click Dialog(“Login_2”).WinButton(“Cancel”).Click
測試結果
通過運用QTP對飛機訂票系統的測試,將已設計好的測試用例添加到QTP中,通過腳本的參數化設置,對測試用例進行自動化循環測試,如下圖2-03;
圖2-03 QTP對測試用例的自動化測試后,分別將可以登陸成功和不能登陸成功的測試用例進行測試,運行結果如圖2-04
圖2-04
訂票測試
訂票實例的前提是登錄訂票系統的成功,該實例是在訂票系統中進行訂票
操作:輸入航班日期、選擇起飛地、選擇目的地、選擇航班、輸入顧客姓名、輸入票的張數、選擇航班級別、單擊訂票按鈕,完成訂票功能。
錄制與測試過程
第一步:錄制腳本,選擇“Record”如圖(3-01);
圖3-01 第二步:在Agent Nname和Password中都輸入Mercury點擊“OK”按鈕,如圖3-02;
圖3-02 第三步:輸入飛機的時間、出發地、目的地,然后選擇“Flights”選擇航班,如圖3-03;
圖3-03
第四步:選擇要乘坐飛機的航班,然后點擊確定,如圖3-04;
圖3-04 第五步:輸入顧客的姓名、票數、票的類型、點擊“insert”,如圖3-05;
圖3-05 第六步:點擊“Stop”結束錄制過程,腳本錄制成功,如圖3-06;
圖3-06 錄制的腳本代碼為:
Dialog(“Login”).WinEdit(“Agent Name:”).Set “mercury” Dialog(“Login”).WinEdit(“Password:”).SetSecure “50d03c65bf584d4548c5df42c75a1b2ce70a1491” Dialog(“Login”).WinButton(“OK”).Click
Dim i '定義變量i
For i=1 to datatable.GetSheet(“Action1”).getrowcount '循環datatable中若干個測試用例 Window(“Flight
Reservation”).ActiveX(“MaskEdBox”).Type DataTable(“Date”, dtLocalSheet)Window(“Flight
Reservation”).WinComboBox(“Fly
From:”).Select DataTable(“FlyFrom”, dtLocalSheet)Window(“Flight
Reservation”).WinComboBox(“Fly
To:”).Select DataTable(“FlyTo”, dtLocalSheet)Window(“Flight Reservation”).WinButton(“FLIGHT”).Click ' 日期不同,起飛地不同,目的地不同,可選擇的航班是不一樣的 ' 為適應這種不同,則需要從剛才現實的列表中隨機選擇一個 '則需要用到隨機函數,首先要獲取列表框中的條目個數
ItemCount=Window(“Flight Table”).WinList(“From”).GetItemsCount SelectItem=RandomNumber(0,ItemCount)'從0~ItemCount中隨機選擇一個數目
Window(“Flight
Reservation”).Dialog(“Flights Reservation”).Dialog(“Flights Table”).WinList(“From”).Select SelectItem Window(“Flight Table”).WinButton(“OK”).Click Window(“Flight Reservation”).WinEdit(“Name:”).Set “lixiao” Window(“Flight Reservation”).WinRadioButton(“Business”).Set Window(“Flight Reservation”).WinButton(“Insert Order”).Click Window(“Flight Reservation”).WinButton(“Button”).Click
datatable.GetSheet(“Action1”).setnextrow '讀取下一行 Next Window(“Flight Reservation”).Close
Reservation“).Dialog(”Flights
測試結果
通過運用QTP對飛機訂票系統的測試,將已設計好的測試用例添加到QTP中,通過腳本的參數化設置,對測試用例進行自動化循環測試,如下圖3-07;
圖3-07 QTP對測試用例的自動化測試后,對訂票參數的測試用例進行測試,測試結果如圖3-08
圖3-08 分析與建議
功能較少,但基本上滿足了飛機訂票的需求,但是建議一般用戶也能對系統進行訪問,查看自己的訂票。沒有連到外網,只是在本機進行測試,建議在互聯網進行功能等測試。
飛機訂票系統測試小結
通過對QTP飛機訂票系統從需求分析到執行測試,從錄制腳本到腳本分析結果,使得我對以前所學習的軟件測試方面的知識有了更好的理解,實踐中才能更深入的理解掌握知識。在此期間我了解和認識了軟件測試技術和QTP自動化測試工具,并且學習了QTP工具的使用?,F在已經能很熟練的使用QTP測試工具。使用QTP可以加速測試的整個過程,并且建置完新版本的應用程序后網站后,可以重復使用測試腳本進行測試。
第二篇:QTP自帶的飛機訂票程序產品規格說明書
QTP自帶的飛機訂票程序
產品規格說明書
一.產品介紹
QTP是HP公司開發的功能自動化測試工具。相對于手工測試,QTP自動化測試比人工測試快得多,同時可以避免人工測試的錯誤,減輕了測試的工作量,給測試人來帶來了極大的便利。隨著測試技術的發展,自動化測試逐漸成為測試的一個重要測試工具。
二.產品面向的用戶群體
專業的測試人員、企業公司測試組以及測試團隊 三.產品應當遵循的標準和規范
遵守軟件相關的標準、規范建立一套軟件測試的管理和評判體系,從根本上保證軟件測試的質量,有一定的行業規范和操作規范,腳本生成簡單易懂,錯誤糾正符合常規測試人員的測試習慣,操作易于上手。
四.產品的功能簡介
QTP自帶的飛機訂票程序包括登錄、訂票、刪除等一系列功能操作,運用QTP自動化測試工具來進行登錄測試和訂票測試,通過檢查點來實現對各種測試用例的測試,同時可以對操作進行錄制和回放,并生成腳本,便于測試人員對產品進行檢查。
五.操作說明
QTP自帶的飛機訂票程序,可實現登錄測試和訂票測試。
QTP自帶的飛機訂票程序,小圖標為飛行圖標。如圖1-01
圖1-01
登錄模塊
打開后可以看到登錄界面,登錄界面——兩個文本框,三個按鈕 如圖1-02
圖1-02 Agent Name文本框
1.登錄框可以輸入的登錄名必須大于4個字符,小于10個字符。
當輸入的字符小于4個時,不能登錄成功
當輸入的字符大于10個時,則光標將移動到所輸入字符的初始端,如果此時繼續輸入字符,那么所輸入的字符將會逐漸覆蓋原先輸入的 字符
2.輸入的字符可以是數字,字母,漢字以及特殊符號。3.所輸入的字符均為明文,可以看得見。4.登錄名不固定可以自主輸入。
Password文本框
1.密碼框中可以輸入的字符可以是數字,字母,漢字以及特殊符號。2.密碼框中可以輸入的字符必須大于4個字符,最多只能有8個字符。3.所輸入的字符均加密不可見,用戶所看到的只是星號(*)。4.密碼固定為mercury,不區分大小寫。OK按鈕
登陸窗口中沒有輸入任何內容,或者是只輸入密碼時,點擊此按鈕會提示。如圖1-03
圖1-03
2.當登錄名輸入的字符小于4個時,點擊此按鈕會提示。如圖1-04
圖1-04 3.當輸入符合規格的登錄名時,并沒有輸入密碼時,點擊此按鈕會提示。如圖1-05
圖1-05 4.當輸入符合規格的登錄名,及任意輸入大于4個字符的密碼時,點擊按鈕會提示。如圖1-06
圖1-06 5.當輸入符合規格的登錄名,并輸入密碼長度小于4個字符時,點擊此按鈕會提示。如圖1-07
圖1-07 6.當在文本框中輸入的字符均不符合時,點擊此按鈕將會提示出以下警示框。如圖1-08
圖1-08 7.當輸入符合規格的登錄名,并輸入Help中所提示的密碼(不區分大小寫時,則會登錄成功。如圖1-09
圖1-09
Cancel按鈕
點擊此按鈕整個登錄窗口都會關閉,如果在點擊按鈕之前的路窗口 中輸入的有內容,則將不會被保存。
Help按鈕
不論登錄窗口中是否輸入有字符,點擊此按鈕都會提示。如圖1-08
圖1-08
訂票模塊
登陸成功后可以看到訂票界面。如圖2-01
圖2-01
日期選擇
時間的格式為月/日/年,其中空格處必須輸入兩個數字,其他字符均不能識別。
當輸入的日期不符合常規或者輸入的數字不均為兩個時,點擊飛行班機圖標。如圖2-02,會出現提示框。如圖2-03
圖2-02
圖2-03
當輸入的日期時間過早,則會出現提示框。如圖2-04
圖2-04 當輸入的日期沒有對應的航班,點擊飛行班機圖標時,則會出現對話框。如圖2-05
圖2-05 當輸入的時間有對應的航班,點擊飛行班機圖標時,則會出現相應對話框可供選擇具體航班。如圖2-06
圖2-06 起始地和目的地
均有下拉列表,可以自行選擇,但只能選擇下拉列表里所給出的地點。起始地 如圖2-07,目的地 如圖2-08。
圖2-07
圖2-08
當選擇相應的航班,點擊飛行班機圖標時。對應在訂票窗口中的航班號,登機時間,到達時間,航線,票數,所價錢以及總計都會自動生成在對話框中。如圖2-09
圖2-09
種類選擇class 可以自行選擇 頭等艙first,經濟艙economy,商務艙business,如圖2-10。同時票價會隨著選擇自行改動。
圖2-10
姓名填寫Name 在選票的同時可以輸入自己的姓名,如圖2-11
圖2-11
選擇所買票的張數點擊提交訂單Insert Order,則訂票成功,且自動生成訂單號,同時可以刪除訂單Delete Order。
快捷按鈕
訂票窗口不但可以訂票,同時可以查看某時間段的訂票比例圖。如圖2-12
圖2-12 查看Agents Order Report,在Agents Order Report 記錄著訂票人的信息,訂票信息,以及總人數,總票數和總價。如圖2-13
圖2-13 菜單欄
可以根據自己的需要進行有機選擇和調整,進行新建、查看、添加、刪除等操作,同時對某些疑問可以在help中尋求幫助。
附:
登錄模塊中,當登錄次數過多時,將會有警示框提示錯誤次數太多,不能再登錄了。
訂票模塊中,菜單欄和快捷圖形按鈕可實現的功能基本相同,都可以進行新建、查看、添加、刪除等操作,同時對某些疑可尋求幫助。
第三篇:qtp測試飛機訂票使用DataTable參數化(實驗3
飛機訂票使用DataTable參數化(實驗III)
原理:通過關鍵字視圖可觀察到自動化測試腳本是由操作步驟與數據構成的。如測試腳本在某個變量中重復使用,而該變量的值經常需要根據具體測試需求進行變更。QT參數化可以實現無須打開測試腳本,直接改變量的值,提供了高效的維護測試腳本方式。主要過程包括:錄制實驗程序,使用DataTable進行參數化,同時使用RandomNumber實現參數化的正常運行和測試。初步掌所握QuickTest Professional的環境變量的使用,同時對Data Driver了解其概念。
一: 實現步驟
1.1:點擊安裝并QuickTest安裝步驟完成后,運行QuickTest Professional,出現如下界面,點擊Automation->Record and Run Setting,選擇紅框中的內容。
1.2:將flight4b.exe打開,運行至此界面,確保錄制從這個階段開始
1.3插入一條訂票的記錄,注意記好num號,生成如下的測試過程,并運行回放該測試的結果,點擊run驗證“僅錄制預定機票的過程”
1.4:要求測試過程為全部pass
II.對預定機票中的數據進行參數化 2.1:在test用例中選中Fly From這個項
2.2:命名為Fly_from,點擊確定
2.3:,以此類推,對Fly_to進行參數化,命名后點擊OK
2.4參數如下紅框所示,手動添加進參數,London Denver;London Frankfurt;也可以自已多添幾條,前提是機票預定系統里有這些地點即可。
2.5:出錯信息如附,因為手工添加參數后,QT并沒有識別到,所以我們下一步采用RandomNumber來實現
2.6:選擇Flight Table下的From,點擊# 5 2.7:選擇random Number
2.8:測試完成,參數化自動執行Data table表中的參數。III:環境變量的使用
3.1使用正常的錄制過程,機票錄入系統界面彈出即可。點擊File-setting 6
3.2選擇用戶自定義
3.3按+號將用戶名添加入
3.4按下圖操作,選擇Environment
3.5選RUN驗證吧
要求:主要完成I、II部分,III部分作為體驗
完成將調試PASS的界面截圖,同時將測試腳本用例保存打包 班級+姓名+學號.RAR方式提交,同時將實驗報告(可以打?。┓绞缴辖徽n代表。
第四篇:數據結構課程設計 飛機訂票系統
飛機訂票系統
1.需求分析
描述要求編程解決的問題。以無歧義的陳述說明程序設計的任務,強調的是程序要做什么?明確規定:
(a)輸入的形式和輸入值的范圍;
(b)輸出的形式;
(c)程序所能達到的功能;
(d)測試數據:包括正確的輸入及其輸出結果和含有錯誤的輸入及其輸出結果。
2.概要設計
給出程序要達到的具體的要求。描述解決相應問題算法的設計思想。描述所設計程序的各個模塊(即函數)功能。說明本程序中用到的所有抽象數據類型的定義、主程序的流程以及各程序模塊之間的層次(調用)關系。
3.詳細設計
實現概要設計中定義的所有數據類型,對每個操作只需要寫出流程或偽碼算法;對主程序和其他模塊也都需要寫出流程或偽碼算法(偽碼算法達到的詳細程度建議為:按照偽碼算法可以在計算機鍵盤直接輸入高級程序設計語言程序);畫出函數的調用關系圖。給出所使用的基本抽象數據類型,所定義的具體問題的數據類型,以及新定義的抽象數據類型。設計出良好的輸入輸出界面(清晰易懂)。
4.調試分析 內容包括:
(a)調試過程中遇到的問題是如何解決的以及對設計與實現的回顧討論和分析;
(b)算法的時空分析(包括基本操作和其他算法的時間復雜度和空間復雜度的分析)和改進設想;
(c)經驗和體會等。
5.用戶使用說明
說明如何使用你編寫的程序,詳細列出每一步的操作步驟。
6.測試結果
設計測試數據,或具體給出測試數據。要求測試數據能全面地測試所設計程序的功能。列出你的測試結果,包括輸入和輸出。這里的測試數據應該完整和嚴格,最好多于需求分析中所列。
7.測試情況:給出程序的測試情況,并分析運行結果
附錄(非必須,按照需要添加)
帶注釋的源程序??梢灾涣谐龀绦蛭募那鍐巍?/p>
需求分析
任務:通過此系統可以實現如下功能: 錄入:
可以錄入航班情況(數據可以存儲在一個數據文件中,數據結構、具體數據自定)
查詢:
可以查詢某個航線的情況(如,輸入航班號,查詢起降時間,起飛抵達城市,航班票價,票價折扣,確定航班是否滿倉); 可以輸入起飛抵達城市,查詢飛機航班情況;
訂票:(訂票情況可以存在一個數據文件中,結構自己設定)可以訂票,如果該航班已經無票,可以提供相關可選擇航班;
退票: 可退票,退票后修改相關數據文件;
客戶資料有姓名,證件號,訂票數量及航班情況,訂單要有編號。
概要設計
詳細設計
詳列函數 void list(){
struct airline *info;
int i=0;
info=start;
printf(“起點城市t終點城市t航班號t起飛時間t降落時間t總票數t余票數n”);
while(i { display(info); info++; i++; } printf(“nn”);} 查詢函數 void search(){ struct airline *info,*find(); char qiname[10]; char jiangname[10]; int i=0; info=start; printf(“請輸入要起飛城市的名稱:”); scanf(“%s”,qiname); printf(“請輸入要抵達城市的名稱:”); scanf(“%s”,jiangname); while(i { if(!strcmp(jiangname,info->jiang_name)) { break; } info++; i++; } if(i>=MAXSIZE) { printf(“沒有這條航線!n”); } else { printf(“起飛城市t降落城市t航班號t起飛時間t降落時間t總票數t余票數n”); display(info); } } struct airline *find(){ struct airline *info; char number[10]; int i=0; info=start; printf(“請輸入航班號:”); scanf(“%s”,number); while(i { if(!strcmp(number,info->air_num)) { return info; } info++; i++; } printf(“沒有這條航線!n”); return NULL;} 訂票函數 void order(){ struct airline *info; char qiname[10]; char jiangname[10]; int amount; char name[10]; char id[30]; info=start; printf(“請輸入您的起飛城市:”); scanf(“%s”,qiname); printf(“請輸入您的降落城市:”); scanf(“%s”,jiangname); printf(“請輸入您需要的票數:”); scanf(“%d”,&amount); int i=1; while(i<5) { if(!strcmp(info->qi_name,qiname)&&!strcmp(info->jiang_name,jiangname)) { if(amount<=info->ticket_left) { int i; printf(“請輸入您的姓名:”); scanf(“%s”,name); printf(“請輸入您的身份證號:”); scanf(“%s”,id); info->order=insertlink(info->order,amount,name,id); printf(“您的航班信息為:n”); display(info); for(i=0;i { printf(“%s的座位號是:%dn”,name,info->ticket_all-info->ticket_left+i+1); } info->ticket_left-=amount; printf(“訂票成功!n”); break; } else { info++; i++; } } else { info++; i++; } } } 退票函數 void returnticket(){ struct airline *info; linklist *p1,*p2,*head; char name[10]; if(!(info=find())) { return; } head=info->order; p1=head; printf(“請輸入您的姓名:”); scanf(“%s”,name); while(p1!=NULL) { if(!strcmp(name,p1->name)) { break; } p2=p1; p1=p1->next; } if(p1==NULL) { printf(“您沒有訂過票!n”); return; } else { if(p1==head) { head=p1->next; } else { p2->next=p1->next; } info->ticket_left+=p1->tickets; printf(“%s退票成功!n”,p1->name); free(p1); } info->order=head;} 存儲結構 typedef struct passenger { char name[10]; int tickets; char id[30]; struct passenger *next;} linklist;typedef struct airline { char qi_name[10]; char jiang_name[10]; char air_num[10]; char qi_time[10]; char jiang_time[10]; int ticket_all; int ticket_left; linklist *order;} lineinfo;調試分析 查看航線信息 查詢航線 ① 輸入起飛城市 ② 輸入抵達城市 ③ 輸出航班信息 辦理訂票業務 ① 查詢符合的航班 ② 查詢余票量 ③ 輸出航班信息 辦理退票業務 源代碼 #include char name[10]; int tickets; char id[30]; struct passenger *next;} linklist; typedef struct airline { char qi_name[10]; char jiang_name[10]; char air_num[10]; char qi_time[10]; char jiang_time[10]; int ticket_all; int ticket_left; linklist *order;} lineinfo; struct airline *start; void display(struct airline *info){ printf(“%st %10st %10st %10st %10st %5dt %5dn”,info->qi_name,info->jiang_name,info->air_num,info->qi_time,info->jiang_time,info->ticket_all,info->ticket_left);} void list(){ struct airline *info; int i=0; info=start; printf(“起點城市t終點城市t航班號t起飛時間t降落時間t總票數t余票數n”); while(i { display(info); info++; i++; } printf(“nn”);} void search(){ struct airline *info,*find(); char qiname[10]; char jiangname[10]; int i=0; info=start; printf(“請輸入要起飛城市的名稱:”); scanf(“%s”,qiname); printf(“請輸入要抵達城市的名稱:”); scanf(“%s”,jiangname); while(i { if(!strcmp(jiangname,info->jiang_name)) { break; } info++; i++; } if(i>=MAXSIZE) { printf(“沒有這條航線!n”); } else { printf(“起飛城市t降落城市t航班號t起飛時間t降落時間t總票數t余票數n”); display(info); } } struct airline *find(){ struct airline *info; char number[10]; int i=0; info=start; printf(“請輸入航班號:”); scanf(“%s”,number); while(i { if(!strcmp(number,info->air_num)) { return info; } info++; i++; } printf(“沒有這條航線!n”); return NULL;} linklist *insertlink(linklist *head,int amount,char name[],char id[]){ linklist *p1,*new1; p1=head; new1=(linklist*)malloc(sizeof(linklist)); strcpy(new1->name,name); new1->tickets=amount; new1->next=NULL; strcpy(new1->id,id); if(head==NULL) { head=new1; new1->next=NULL; } else { while(p1->next!=NULL) p1=p1->next; p1->next=new1; } return head;} void order(){ struct airline *info; char qiname[10]; char jiangname[10]; int amount; char name[10]; char id[30]; info=start; printf(“請輸入您的起飛城市:”); scanf(“%s”,qiname); printf(“請輸入您的降落城市:”); scanf(“%s”,jiangname); printf(“請輸入您需要的票數:”); scanf(“%d”,&amount); int i=1; while(i<5) { if(!strcmp(info->qi_name,qiname)&&!strcmp(info->jiang_name,jiangname)) { if(amount<=info->ticket_left) { int i; printf(“請輸入您的姓名:”); scanf(“%s”,name); printf(“請輸入您的身份證號:”); scanf(“%s”,id); info->order=insertlink(info->order,amount,name,id); printf(“您的航班信息為:n”); display(info); for(i=0;i { printf(“%s的座位號是:%dn”,name,info->ticket_all-info->ticket_left+i+1); } info->ticket_left-=amount; printf(“訂票成功!n”); break; } else { info++; i++; } } else { info++; i++; } } } void returnticket(){ struct airline *info; linklist *p1,*p2,*head; char name[10]; if(!(info=find())) { return; } head=info->order; p1=head; printf(“請輸入您的姓名:”); scanf(“%s”,name); while(p1!=NULL) { if(!strcmp(name,p1->name)) { break; } p2=p1; p1=p1->next; } if(p1==NULL) { printf(“您沒有訂過票!n”); return; } else { if(p1==head) { head=p1->next; } else { p2->next=p1->next; } info->ticket_left+=p1->tickets; printf(“%s退票成功!n”,p1->name); free(p1); } info->order=head;} int menu_select(){ int c; char s[20]; printf(“ 訂票系統n”); printf(“-------------n”); printf(“ 1.查看航線信息 printf(” 2.查詢航線 printf(“ 3.辦理訂票業務 printf(” 4.辦理退票業務 printf(“ 5.退出系統 printf(”-------------n“); do { printf(”請選擇(1-5):“); scanf(”%s“,s); c=atoi(s); } while(c<1||c>6); return c; n”);n“);n”);n“); n”); } int main(){ struct airline air[MAXSIZE]= { {“harbin”,“beijing”,“1”,“12:00”,“14:00”,30,30},{“harbin”,“shanghai”,“2”,“10:00”,“13:00”,20,20},{“harbin”,“beijing”,“3”,“13:30”,“10:00”,50,50},{“harbin”,“guangzhou”,“4”,“17:00”,“21:00”,50,50},{“harbin”,“dalian”,“5”,“14:00”,“17:00”,40,40} }; start=air; while(1) { system(“cls”); switch(menu_select()) { case 1: list(); break; case 2: search(); break; case 3: order(); break; case 4: returnticket(); break; case 5: exit(0); } getch(); } } 經驗體會 1、通過設計飛機訂票系統,加深了對鏈表的運用和理解。 2、通過多組測試數據,發現了程序的問題,并做了調整、3、通過設計選擇菜單,對選擇結構有更深刻的了解。 飛機訂票系統 1.概述(設計題目與可行性分析) 1.1設計題目:飛機訂票系統 1.2可行性分析 飛機訂票系統是為機場工作人員和客戶提供訂票退票等與機票相關內容的管理系統,方便機場工作人員對機票的管理,以提高機場工作人員對機票管理工作的效率。當前飛機訂票問題:手工訂票所產生的客座率低。而我們的目標是:建立一個飛機訂票系統數據庫。 1.2.1研究現有系統,畫現有系統的流程圖 了解當前系統能夠完成的功能及組成 航班管理:票據管理 售票點:直接面向用戶 航班管理 票據管理 票庫 訂票庫 訂票管理 出售管理 打印機票 售票點1 售票點n 現有系統:票據都分布在各個售票點 1.2.2導出新系統的高層邏輯結構 數據流圖的基本符號: 數據源/終點(人機界面): 加工處理: 文件名 文件: 數據流名 數據流: 票價信息 機票 查訂票號 訂票處理 客戶信息 出票處理 訂票記錄 顧客 訂票信息 訂票號 庫存信息 票價信息 票價管理 航班管理 航班信息 操作員 航班信息 保存 新系統的數據流圖: 說明:流向文件的數據流的名可以省略 1.2.3可行性分析報告 隨著Internet的迅速發展和用戶數量的急劇增加,互聯網對于企業和事業單位的運營和發展日益重要,網上交易也逐漸被人們認可,并成為未來交易的發展方向。在這種情況下,很多原有的C/S模式的系統也逐步向B/S模式靠攏,飛機訂票系統也不例外。 飛機訂票系統是飛機旅游服務信息系統的一個重要組成部分。為旅客提供優質便捷的服務,為了提高飛機客運的售票效率,豐富飛機客運的營銷手段,飛機售票總站的下屬代售點可以通過公用的互聯網資源,建立數據庫,實現網上的售票,查詢及管理工作。 2.系統目標和設計原則 2.1系統目標: 建立一個飛機訂票系統數據庫。 2.1.1系統簡介: 本系統是專為乘坐飛機的旅客準備的,旅客只需把自己的信息(姓名.性別.工作單位.身份證號.旅行時間.旅行目的地)預先交給旅行社,旅行社就可以將信息輸入本系統,系統就可以為旅客安排航班,打印出取票通知和帳單。旅客只要在飛機起飛的前一天憑取票通知單和帳單交款取單,系統校對無誤即印出機票給旅客。 2.2設計原則 2.2.1根據實際情況考慮三種可行性 技術可行性、經濟可行性、操作可行性 2.2.2提出侯選方案、提出各種各樣的實現方案 主機(純主機型、C/S型)、開發環境、網絡方案、對提出的每個方案進行成本估計 硬件、軟件費用投資(根據各公司的報價)開發成本估計(任務估算法) 運行費用、投資回收期 純收入:通過本系統的運行、投資回收后的收入 3、描述推薦理由:分別從技術、經濟、用戶、投資方的不同角度考慮 3.支撐環境規劃 3.1整體系統運作圖 3.2運行環境 服務器:硬件配置:CPU Intel P4 1.2G以上 內存256 硬盤 80G以上 軟件配置:Windows 2000/2003 SERVER SQL SERVER 2000 4.系統功能結構 1、錄入:可以錄入航班情況(數據可以存儲在一個數據文件中,數據結構、具體數據自定) 2、查詢:可以查詢某個航線的情況(如,輸入航班號,查詢起降時間,起飛抵達城市,航班票價,票價折扣,確定航班是否滿倉);可以輸入起飛抵達城市,查詢飛機航班情況; 3、訂票:(訂票情況可以存在一個數據文件中,結構自己設定)可以訂票,如果該航班已經無票,可以提供相關可選擇航班; 4、退票:可退票,退票后修改相關數據文件; 客戶資料有姓名,證件號,訂票數量及航班情況,訂單要有編號。 5、修改航班信息:當航班信息改變可以修改航班數據文件。 5.數據庫設計 5.1概念結構設計 E-R圖如下: 5.2邏輯結構設計 1.航空公司表:AIRLINE 2.客戶表CUSTOMER 3、飛機表PLANE 4.航線表LINE 5.航班表FLIGHT 6.訂票表BOOKTICKET 5.3實現設計 實現以下操作: 1、注冊航空公司: 2、增加飛機: 3、增加航線: 4、增加航班: 5、增加客戶: 6、建立一個訂票的存儲過程,存儲過程名為Book_Ticket,請完成以下存儲過程,實現訂票的操作: a)指定要訂的航班號(HID)及客戶的編號(KID); b)先查看客戶是否為特殊客戶,如果不是,票價不打折扣; c)否則如果客戶航程超過5萬公里,票價7折,超過15萬公里,票價打5折; d)查看客戶訂票以后,所有乘客的票數是否超過總的座位數,如果超過,回滾訂票操作; e)要求在操作過程中使用到事務技術。 CREATE PROCEDURE Book_ticket @HID VARCHAR(20) @HID VARCHAR(20) AS DECLARE @TRANS_NAME VARCHAR(20)select @TRANS_NAME=’ ’ BEGIN TRANSACTION DECLARE @Bookid int,@seats int,@IsSpec char(1)/*定義訂票里程DIST、折扣率discount、總的訂票里程distance、票價PRICE(實型)*/ select @Isspec=Isspec,@distance=Points FROM Customer where select @discount=1 IF @ BEGIN END /*選擇出票價*/ SELECT @PRICE=PRICE FROM FLIGHT WHERE /*加入客戶訂票信息*/ /*將客戶新訂票里程的信息累計到用戶信息里面*/ UPDATE SET WHERE /*查看客戶訂票后,是否超過可容納的座位數目,如果超過,取消所有操作*/ SELECT booked=count(*)FROM WHERE FID= /*查看額定座位容量*/ SELECT @seats=seatsnum FROM WHERE IF @BOOKED>@SEATS ELSE COMMIT TRANSACTION GO 7.運行這個訂票操作的存儲過程(自己設定客戶及航班) book_ticket , 8.事務運行成功后,再顯示各表的數據,按表分別寫出來。 6.總體實施計劃 6.1可行性研究: 研究現有系統,畫現有系統的流程圖,編寫可行性分析報告 6.2進行數據庫設計: 概念結構設計,邏輯結構設計,實現設計 6.3概要設計: 從數據流圖導出初始結構圖,設計優化 6.4詳細設計: 結構化的程序設計,采用流程圖的形式 6.5保密設計 1.每個用戶需要注冊才能進入航空訂票信息系統,并進行網上訂票的。用戶必須 用自己真實的身份進行注冊。 2.系統要另外在備一份數據庫,防止系統出現錯誤而使數據信息丟失的可能性。 3.系統要安裝防火墻,防止黑客入侵破壞系統。還有就是安裝殺毒軟件,防止 病毒入侵而導致系統癱瘓。 6.6維護設計 系統設置提供管理員操作頁面: 1.提供管理員密碼,方便維護操作.2.固定時間對系統進行維護和檢測.3.若系統出現癱瘓時,可出動備用系統維持運轉.4.定期對系統進行更新整頓清空.7.總結 這次數據庫課程設計的“飛機訂票系統”,通過近一周的上機操作,充分應用了所學的數據庫的知識,并去圖書館查閱了一些書集和上網搜索一部分相當資料,粗略設計出該系統??傮w上來說,這次課程設計還是比較成功的,充分運用了所學的軟件工程設計、數據庫的設計,設計出E-R圖、流程圖、數據庫基本表,從整體規劃出了系統的運行環境和系統實現的功能。 當然,由于學藝不精,在課程設計的過程也碰到的一些問題。其中,畫E-R圖時,各實體中的關系的確定,由于對系統還不夠了解而找不到一個準確的詞來形容;總體規劃時,材料太多,不易整理;相關數據庫技術方面沒有多注意,這次課程設計的重點只在對整個系統的總體思路設計。 其實這些通過最近的課程設計覺得最重要一點就是:我們一定要自己動手,這樣才能真正的學到東西。書本知識固然重要,但我們更要學會將書本知識應用到實際的工作中。實踐中才會發現錯誤,也才能改進,才能達到學習的最終目的。 最后感謝在這次課程設計中幫助過我的老師,同學!8.參考文獻 物流信息系統 趙剛 四川大學人民出版社 2002/9 物流信息管理 尹濤 東北財經大學出版社 2005/1 數據庫系統概論 王珊 薩師煊 高等教育出版社 2006/5 數據庫技術與應用-Access2000篇 郭力平人民郵電出版社 2002/8 軟件設計師教程 陳平禇華 清華大學出版社 2006/6 文章引用自:第五篇:數據庫課程設計+飛機訂票系統