軟件工程課程設(shè)計
成都創(chuàng)新互聯(lián)專注于泰興企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè),商城系統(tǒng)網(wǎng)站開發(fā)。泰興網(wǎng)站建設(shè)公司,為泰興等地區(qū)提供建站服務(wù)。全流程定制網(wǎng)站設(shè)計,專業(yè)設(shè)計,全程項目跟蹤,成都創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)
一、 課程設(shè)計題目:
航空公司機票預(yù)訂系統(tǒng)。
二、 課程設(shè)計內(nèi)容簡要分析:
航空公司為方便旅客,需開發(fā)一個機票預(yù)定系統(tǒng)。為便于旅客由旅行社代替航空公司負責為旅客定票,旅行社把預(yù)定機票的旅客信息,包括姓名、性別、工作單位、身份證號碼、旅行時間、旅行目的地,輸入機票預(yù)定系統(tǒng)的客戶端程序,系統(tǒng)經(jīng)過查詢航空公司內(nèi)的航班數(shù)據(jù)服務(wù)器后,為旅客安排航班,印出取票通知。旅客在飛機起飛前一天憑取票通知和帳單交款后取票,系統(tǒng)校對無誤后即印出機票給旅客。
要求系統(tǒng)能有效、快速、安全、可靠和無誤的完成上述操作。并要求客戶機的界面要簡單明了,易于操作,服務(wù)器程序利于維護。
三、主要設(shè)計過程:
1、問題定義:
航空運輸現(xiàn)在已經(jīng)逐漸成為我國運輸事業(yè)的重要手段,但是對于航空運輸來說,天氣或人為的種種的因素,會給航空機票的預(yù)定和退訂帶來困難,特別是對于機票的預(yù)定和退訂的條理性、及時性和準確性,也同樣帶來巨大的困難。
對以上的問題,完全可以建立一套完整的航空公司機預(yù)定系統(tǒng),來對信息進行錄入、查詢、訂票、退票等日常管理工作,盡量少的人員介入和數(shù)據(jù)冗余,以簡練實用為基礎(chǔ),實現(xiàn)信息管理計算機化,提高工作效率和信息化水平。
2、可行性分析:
可行性分析對系統(tǒng)的開發(fā)至關(guān)重要,可以大幅減少不必要的損失,保證系統(tǒng)開發(fā)的順利進行??梢詮募夹g(shù)可行性、經(jīng)濟可行性、操作可行性三方面進行系統(tǒng)可行性分析:
2.1、技術(shù)可行性:
這些年來,計算機技術(shù)的發(fā)展異常迅猛,而絕大多數(shù)的企業(yè)和單位,都已經(jīng)把計算機作為信息和數(shù)據(jù)處理、保存和管理的重要工具。
Java是Sun Microsystem公司的James Gosling開發(fā)的編程語言。它以C++為基礎(chǔ),但是卻是一個全新的軟件開發(fā)語言。Java是一個簡單,面象對象、分布式、解釋性、強壯、安全,與系統(tǒng)無關(guān)、可移植、高性能、多線程和動態(tài)的語言,利用Java就可以編制出程序接口好、圖形界面優(yōu)美的管理系統(tǒng)。同時,微軟公司開發(fā)的SOL Server 2000,為數(shù)據(jù)庫的開發(fā)和管理帶來了極大的方便。
2.2、經(jīng)濟可行性:
一方面,對于新系統(tǒng)的開發(fā)和研究,不需要花費更多的費用,而且對于人員的培訓,不同樣不需要花費很多;另一方面,航空公司的原有服務(wù)器和計算機系統(tǒng),同樣可以用來使用,不需要更新系統(tǒng)。
2.3、操作可行性:
對于用Java開發(fā)的本系統(tǒng),通過簡單的學習就可以熟練操作,同時,對于票務(wù)的管理,也同樣因為本系統(tǒng)的高效性、及時性和方便性而易于管理。
通過以上的分析,航空公司機票預(yù)定系統(tǒng)在經(jīng)濟上、技術(shù)上、操作上都是可行的。
3、 需求分析:
需求分析階段的主要目標是準確了解用戶對未來軟件的系統(tǒng)結(jié)構(gòu)的需求,是發(fā)現(xiàn)、求精、建模、規(guī)格說明和復(fù)審過程。
在需求分析中,可以采用主要流程和數(shù)據(jù)流程圖來描述。
3.1、該系統(tǒng)主要要完成的流程為:
a) 錄入:可以錄入航班情況(數(shù)據(jù)可以存儲在一個數(shù)據(jù)文件中,數(shù)據(jù)結(jié)構(gòu)、具體數(shù)據(jù)自定)
b) 查詢:可以查詢某個航線的情況(如,輸入航班號,查詢起降時間,起飛抵達城市,航班票價,票價折扣,確定航班是否滿倉);可以輸入起飛抵達城市,查詢飛機航班情況;
c) 訂票:(訂票情況可以存在一個數(shù)據(jù)文件中,結(jié)構(gòu)自己設(shè)定)可以訂票,如果該航班已經(jīng)無票,可以提供相關(guān)可選擇航班;
d) 退票: 可退票,退票后修改相關(guān)數(shù)據(jù)文件;客戶資料有姓名,證件號,訂票數(shù)量及航班情況,訂單要有編號。
3.2、數(shù)據(jù)流程圖:
數(shù)據(jù)流程圖是描繪信息流和數(shù)據(jù)從輸入移動到輸出的過程中所經(jīng)歷的變換。是一種能全面描述信息系統(tǒng)邏輯模型的主要工具,也是系統(tǒng)分析人員與用戶進行交流的有效手段。
旅客的訂票流程圖如下:
旅客取票的流程圖如下:
訂票旅客清單
打印機票
旅客信息查詢
旅客
旅客
售出機票信息
4、概要設(shè)計:
4.1、本系統(tǒng)的設(shè)計總框圖:
說明:本系統(tǒng)共分為兩大子系統(tǒng):客戶定票系統(tǒng)和后臺管理系統(tǒng)。
客戶服務(wù)系統(tǒng)包含三個子系統(tǒng):
1、查詢系統(tǒng)(實現(xiàn)查詢功能)
2、定票系統(tǒng)(實現(xiàn)定票功能)
3、退票系統(tǒng)(實現(xiàn)退票和修改功能)
后臺處理系統(tǒng)包含三個子系統(tǒng):
1、航班信息查詢 (實現(xiàn)航班信息的查詢功能)
2、航班信息修改(實現(xiàn)航班信息的修改、新增、刪除功能)
3、乘客信息查詢(實現(xiàn)乘客信息的查詢)
兩大系統(tǒng)共用兩個數(shù)據(jù)文件:航班基本信息文件和客戶定票信息文件。
4.2、客戶定票系統(tǒng)的概要設(shè)計:
說明:
1)查詢:用戶可以通過輸入航班號單關(guān)鍵字查詢,飛機的起降地點和飛機的起飛時間雙關(guān)鍵字查詢兩種方式進行查詢。(注:結(jié)構(gòu)圖里查詢和訂票之間的連線表示客戶可以由查詢界面直接進入訂票界面)
2)訂票:客戶可以直接從主界面直接進入訂票界面,也可以從航班信息查詢界面通過事件觸發(fā)進入訂票界面??蛻粼谟喥苯缑鎯?nèi)填寫客戶基本信息和所定航班的關(guān)鍵信息,然后由提交事件進行信息有效性判斷。如果數(shù)據(jù)有效,則修改航班基本信息,新增客戶信息。
3)退票和修改:在客戶正確輸入交易單號,乘客姓名,身份證號的前提下,系統(tǒng)確定數(shù)據(jù)有效性,客戶擁有退票或修改交易的權(quán)限。此時對航班基本信息數(shù)據(jù)文件和客戶訂票信息文件進行數(shù)據(jù)項的刪除或修改。
4)客戶修改的主要作用:當客戶對于所定機票的航班號,數(shù)量,等級等內(nèi)容需要修改時,可啟動此功能。
同時,為方便客戶修改過程能準確的了解航班基本信息,在客戶退票界面加入了查詢按鈕。可以通過事件觸發(fā)進入相關(guān)界面。
4.3、后臺管理系統(tǒng)的概要設(shè)計:
說明:
1) 航班信息修改:管理人員可以通過輸入航班號與日期查詢該航班的基本信息 ??稍诓樵兊慕Y(jié)果上進行修改,也可刪除該條信息。所有數(shù)據(jù)修改都應(yīng)在數(shù)據(jù)文件中完成,在界面上顯示出來。
2) 航班信息錄入:管理人員可以通過輸入新的航班信息新加一條航班的基本信息。
3) 乘客信息查詢:管理人員可以通過輸入交易單號碼,乘客姓名,乘客身份證號查詢乘客的基本信息。
4.4、機票預(yù)訂系統(tǒng)的邏輯模型如下:
航班機票信息
旅行時間
姓名
性別
旅行地點
身份證號碼
工作單位
旅客
1
價格
航空公司
取票通知
帳單
訂票
1 1
時間
旅行社
合適航班機票
N
訂票旅客清單
售出機票信息
可售機票
等級
5、詳細設(shè)計:
5.1、主界面程序流程圖設(shè)計:
說明:在主界面,可以設(shè)置四個按鈕以供選擇:查詢、訂票、退票和退出。
選擇不同的按鈕觸發(fā)不同事件。
5.2、查詢系統(tǒng)程序流程圖設(shè)計:
5.3、訂票系統(tǒng)程序流程圖設(shè)計:
5.4、 退票系統(tǒng)流程流程圖設(shè)計:
6、實現(xiàn)和單元測試:
6.1、編碼:
航班信息鏈表類核心代碼:
public class FlightList implements Serializable
{
public FlightListNode firstNode; // 第一架航班的信息表
public FlightListNode lastNode; // 最后一架航班的信息表
public String name;
public int numberOfRecords; // 全天起落航班的總記錄
public FlightList( String s )
{
name = s;
firstNode = lastNode = null;
}
public boolean exist( String sFlightNo, Date date ) //判斷含傳入航班號和日期的結(jié)點是否存在
{
FlightListNode current = firstNode; // 航班信息的第一個結(jié)點
while( current != null)
{
if( current.data.flightNum.equals( sFlightNo )
current.data.date.equals( date ) )
return false;
else
current = current.next; //當前航班號不存在時轉(zhuǎn)入下一個結(jié)點
}
return true;
}
public void insertAtFront( FlightInfo insertItem ) //在鏈首插入結(jié)點
{
if( isEmpty() )
firstNode = lastNode = new FlightListNode( insertItem );
else
firstNode = new FlightListNode( insertItem, firstNode );
return numberOfRecords ++;
}
public void insertAtBack( FlightInfo insertItem ) //在鏈尾插入結(jié)點
{
if( isEmpty() )
firstNode = lastNode = new FlightListNode( insertItem );
else
lastNode = lastNode.next = new FlightListNode( insertItem );
return numberOfRecords ++;
}
public void delete( FlightInfo deleteItem ) //刪除航班信息結(jié)點
{
FlightListNode deleteNode = new FlightListNode( deleteItem );
FlightListNode current = firstNode;
if( isEmpty() )
throw new EmptyListException( name );
FlightListNode temp = firstNode;
int flag = 0 ;
while( current != null )
{
if( current.data.flightNum.equals( deleteNode.data.flightNum ))
{
if( flag == 0 )
{
firstNode = firstNode.next;
}
temp.next = current.next;
break;
}
else
{
temp = current;
current = current.next;
flag ++;
}
}
numberOfRecords --;
}
}
7、軟件維護:
維護方面主要為對服務(wù)器上的數(shù)據(jù)庫數(shù)據(jù)進行維護。可使用 SQL SERVER 2000的數(shù)據(jù)庫維護功能機制。例如,定期為數(shù)據(jù)庫進行Backup,維護管理數(shù)據(jù)庫死鎖問題和維護數(shù)據(jù)庫內(nèi)數(shù)據(jù)的一致性等。
三、 主要參考文獻:
1 張海潘. 軟件工程導(dǎo)論. 北京:清華大學出版社,2005
2 趙松濤. SQL Server 2000系統(tǒng)管理實錄. 北京:電子工業(yè)出版社, 2006
3 宋波. Java Web應(yīng)用與開發(fā)教程. 北京:清華大學出版社,2006
4 孫衛(wèi)琴. Java面向?qū)ο缶幊? 北京:電子工業(yè)出版社,2006
各個航空公司的代碼是不同的。比如:AA 美國航空公司 LY 以色列空公司 AC 加拿大航空公司 MA 匈牙利航空公司等等,你要先查到航空公司代碼,然后查到航班代碼才能預(yù)定。
機票預(yù)定系統(tǒng)概要設(shè)計說明書1.引言
1.1 編寫目的
在本機票預(yù)定系統(tǒng)項目的前一階段,也就是需求分析階段中,已經(jīng)將系統(tǒng)用戶對本系統(tǒng)的需求做了詳細的闡述,這些用戶需求已經(jīng)在上一階段中對航空公司、各旅行社及機場的實地調(diào)研中獲得,并在需求規(guī)格說明書中得到詳盡得敘述及闡明。
本階段已在系統(tǒng)的需求分析的基礎(chǔ)上,對機票預(yù)定系統(tǒng)做概要設(shè)計。主要解決了實現(xiàn)該系統(tǒng)需求的程序模塊設(shè)計問題。包括如何把該系統(tǒng)劃分成若干個模塊、決定各個模塊之間的接口、模塊之間傳遞的信息,以及數(shù)據(jù)結(jié)構(gòu)、模塊結(jié)構(gòu)的設(shè)計等。在以下的概要設(shè)計報告中將對在本階段中對系統(tǒng)所做的所有概要設(shè)計進行詳細的說明。
在下一階段的詳細設(shè)計中,程序設(shè)計員可參考此概要設(shè)計報告,在概要設(shè)計對機票預(yù)定系統(tǒng)所做的模塊結(jié)構(gòu)設(shè)計的基礎(chǔ)上,對系統(tǒng)進行詳細設(shè)計。在以后的軟件測試以及軟件維護階段也可參考此說明書,以便于了解在概要設(shè)計過程中所完成的各模塊設(shè)計結(jié)構(gòu),或在修改時找出在本階段設(shè)計的不足或錯誤。 1.2 項目背景 本項目(機票預(yù)定系統(tǒng))時由浙江航空公司委托,由負責開發(fā)。
機票預(yù)定系統(tǒng)將由兩部分組成:置于個旅行社定票點的前臺客戶程序,以及置于航空公司的數(shù)據(jù)庫服務(wù)器。本系統(tǒng)與其他系統(tǒng)的關(guān)系如下: 1.3 定義 1.3.1 專門術(shù)語
SQL SERVER: 系統(tǒng)服務(wù)器所使用的數(shù)據(jù)庫管理系統(tǒng)(DBMS)。
SQL: 一種用于訪問查詢數(shù)據(jù)庫的語言
事務(wù)流:數(shù)據(jù)進入模塊后可能有多種路徑進行處理。
主鍵:數(shù)據(jù)庫表中的關(guān)鍵域。值互不相同。
外部主鍵:數(shù)據(jù)庫表中與其他表主鍵關(guān)聯(lián)的域。
ROLLBACK: 數(shù)據(jù)庫的錯誤恢復(fù)機制。
1
1.3.2 縮寫
系統(tǒng):若未特別指出,統(tǒng)指本機票預(yù)定系統(tǒng)。
SQL: Structured Query Language(結(jié)構(gòu)化查詢語言)。
ATM: Asynchronous Transfer Mode (異步傳輸模式)。
1.4 參考資料 以下列出在概要設(shè)計過程中所使用到的有關(guān)資料:
1. 機票預(yù)定系統(tǒng)項目計劃任務(wù)書 浙江航空公司 1999/3 2.機票預(yù)定系統(tǒng)項目開發(fā)計劃 《》軟件開發(fā)小組 1999/3
3.需求規(guī)格說明書 《》軟件開發(fā)小組 1999/3
4.用戶操作手冊(初稿) 《》軟件開發(fā)小組 1999/4
5.軟件工程及其應(yīng)用 周蘇、王文等 天津科學技術(shù)出版社 1992/1
6.軟件工程 張海藩 清華大學出版社 1990/11
7.Computer Network A.S.Tanenbaun Prentice Hall 1996/01
文檔所采用的標準是參照《軟件工程導(dǎo)論》沈美明著 的“計算機軟件開發(fā)文檔編寫指南”。
2.任務(wù)概述
鏈接:v(括號里不是鏈接)iew-so(括號里不是鏈接)(括號里不是鏈接)urce:ht(括號里不是鏈接)tp://(括號里不是鏈接)ww(括號里不是鏈接)w.a(括號里不是鏈接)irch(括號里不是鏈接)ina(括號里不是鏈接).co(括號里不是鏈接)m.cn(括號里不是鏈接)/?ci(括號里不是鏈接)d=(括號里不是鏈接)GN-buy(括號里不是鏈接):20130221:SEM:Baidu:CHN:00(括號里不是鏈接)0120|fc=(括號里不是鏈接)k91(括號里不是鏈接)8988499.a151793471.u933021.pb
public class Ticket {
private int month;
private int classLevel; //1: 頭等艙, 2: 經(jīng)濟艙
private int price;
private int basePrice = 5000; //原價
public Ticket(int month, int classLevel) {
this.month = month;
this.classLevel = classLevel;
}
public void showMeThePrice() {
//旺季月份: 4-10
if ((month = 4) (month = 10)) {
if (classLevel == 1) {
price = basePrice * 0.9;
System.out.println("Month: " + month + "; Class: " + classLevel + "; Price: " + price);
} else if (classLevel == 2) {
price = basePrice * 0.8;
System.out.println("Month: " + month + "; Class: " + classLevel + "; Price: " + price);
}
}
// 淡季月份: 1,2,3,11,12
if ((month = 1) (month = 3) || month = 11 || month = 12) {
if (classLevel == 1) {
price = basePrice * 0.5;
System.out.println("Month: " + month + "; Class: " + classLevel + "; Price: " + price);
} else if (classLevel == 2) {
price = basePrice * 0.4;
System.out.println("Month: " + month + "; Class: " + classLevel + "; Price: " + price);
}
}
}
}
測試類:
public class Test {
Ticket myTicket = new Ticket(4, 1); //例如:四月,頭等艙
myTicket.showMeThePrice();//輸出顯示價格
...
}
以上代碼全部手打,因為公司沒有安裝jdk,所以無法測試,你自己調(diào)試吧。