資料庫航空訂票系統
現在都是中航信在壟斷,作出來也沒人用呀。
『貳』 求C語言解答
按要求用順序表,自己寫吧,就當是鍛煉自己。
『叄』 軟體工程航空公司機票預定系統
軟體工程課程設計
一、 課程設計題目:
航空公司機票預訂系統。
二、 課程設計內容簡要分析:
航空公司為方便旅客,需開發一個機票預定系統。為便於旅客由旅行社代替航空公司負責為旅客定票,旅行社把預定機票的旅客信息,包括姓名、性別、工作單位、身份證號碼、旅行時間、旅行目的地,輸入機票預定系統的客戶端程序,系統經過查詢航空公司內的航班數據伺服器後,為旅客安排航班,印出取票通知。旅客在飛機起飛前一天憑取票通知和帳單交款後取票,系統校對無誤後即印出機票給旅客。
要求系統能有效、快速、安全、可靠和無誤的完成上述操作。並要求客戶機的界面要簡單明了,易於操作,伺服器程序利於維護。
三、主要設計過程:
1、問題定義:
航空運輸現在已經逐漸成為我國運輸事業的重要手段,但是對於航空運輸來說,天氣或人為的種種的因素,會給航空機票的預定和退訂帶來困難,特別是對於機票的預定和退訂的條理性、及時性和准確性,也同樣帶來巨大的困難。
對以上的問題,完全可以建立一套完整的航空公司機預定系統,來對信息進行錄入、查詢、訂票、退票等日常管理工作,盡量少的人員介入和數據冗餘,以簡練實用為基礎,實現信息管理計算機化,提高工作效率和信息化水平。
2、可行性分析:
可行性分析對系統的開發至關重要,可以大幅減少不必要的損失,保證系統開發的順利進行。可以從技術可行性、經濟可行性、操作可行性三方面進行系統可行性分析:
2.1、技術可行性:
這些年來,計算機技術的發展異常迅猛,而絕大多數的企業和單位,都已經把計算機作為信息和數據處理、保存和管理的重要工具。
Java是Sun Microsystem公司的James Gosling開發的編程語言。它以C++為基礎,但是卻是一個全新的軟體開發語言。Java是一個簡單,面象對象、分布式、解釋性、強壯、安全,與系統無關、可移植、高性能、多線程和動態的語言,利用Java就可以編制出程序介面好、圖形界面優美的管理系統。同時,微軟公司開發的SOL Server 2000,為資料庫的開發和管理帶來了極大的方便。
2.2、經濟可行性:
一方面,對於新系統的開發和研究,不需要花費更多的費用,而且對於人員的培訓,不同樣不需要花費很多;另一方面,航空公司的原有伺服器和計算機系統,同樣可以用來使用,不需要更新系統。
2.3、操作可行性:
對於用Java開發的本系統,通過簡單的學習就可以熟練操作,同時,對於票務的管理,也同樣因為本系統的高效性、及時性和方便性而易於管理。
通過以上的分析,航空公司機票預定系統在經濟上、技術上、操作上都是可行的。
3、 需求分析:
需求分析階段的主要目標是准確了解用戶對未來軟體的系統結構的需求,是發現、求精、建模、規格說明和復審過程。
在需求分析中,可以採用主要流程和數據流程圖來描述。
3.1、該系統主要要完成的流程為:
a) 錄入:可以錄入航班情況(數據可以存儲在一個數據文件中,數據結構、具體數據自定)
b) 查詢:可以查詢某個航線的情況(如,輸入航班號,查詢起降時間,起飛抵達城市,航班票價,票價折扣,確定航班是否滿倉);可以輸入起飛抵達城市,查詢飛機航班情況;
c) 訂票:(訂票情況可以存在一個數據文件中,結構自己設定)可以訂票,如果該航班已經無票,可以提供相關可選擇航班;
d) 退票: 可退票,退票後修改相關數據文件;客戶資料有姓名,證件號,訂票數量及航班情況,訂單要有編號。
3.2、數據流程圖:
數據流程圖是描繪信息流和數據從輸入移動到輸出的過程中所經歷的變換。是一種能全面描述信息系統邏輯模型的主要工具,也是系統分析人員與用戶進行交流的有效手段。
旅客的訂票流程圖如下:
旅客取票的流程圖如下:
訂票旅客清單
列印機票
旅客信息查詢
旅客
旅客
售出機票信息
4、概要設計:
4.1、本系統的設計總框圖:
說明:本系統共分為兩大子系統:客戶定票系統和後台管理系統。
客戶服務系統包含三個子系統:
1、查詢系統(實現查詢功能)
2、定票系統(實現定票功能)
3、退票系統(實現退票和修改功能)
後台處理系統包含三個子系統:
1、航班信息查詢 (實現航班信息的查詢功能)
2、航班信息修改(實現航班信息的修改、新增、刪除功能)
3、乘客信息查詢(實現乘客信息的查詢)
兩大系統共用兩個數據文件:航班基本信息文件和客戶定票信息文件。
4.2、客戶定票系統的概要設計:
說明:
1)查詢:用戶可以通過輸入航班號單關鍵字查詢,飛機的起降地點和飛機的起飛時間雙關鍵字查詢兩種方式進行查詢。(註:結構圖里查詢和訂票之間的連線表示客戶可以由查詢界面直接進入訂票界面)
2)訂票:客戶可以直接從主界面直接進入訂票界面,也可以從航班信息查詢界面通過事件觸發進入訂票界面。客戶在訂票界面內填寫客戶基本信息和所定航班的關鍵信息,然後由提交事件進行信息有效性判斷。如果數據有效,則修改航班基本信息,新增客戶信息。
3)退票和修改:在客戶正確輸入交易單號,乘客姓名,身份證號的前提下,系統確定數據有效性,客戶擁有退票或修改交易的許可權。此時對航班基本信息數據文件和客戶訂票信息文件進行數據項的刪除或修改。
4)客戶修改的主要作用:當客戶對於所定機票的航班號,數量,等級等內容需要修改時,可啟動此功能。
同時,為方便客戶修改過程能准確的了解航班基本信息,在客戶退票界面加入了查詢按鈕。可以通過事件觸發進入相關界面。
4.3、後台管理系統的概要設計:
說明:
1) 航班信息修改:管理人員可以通過輸入航班號與日期查詢該航班的基本信息 。可在查詢的結果上進行修改,也可刪除該條信息。所有數據修改都應在數據文件中完成,在界面上顯示出來。
2) 航班信息錄入:管理人員可以通過輸入新的航班信息新加一條航班的基本信息。
3) 乘客信息查詢:管理人員可以通過輸入交易單號碼,乘客姓名,乘客身份證號查詢乘客的基本信息。
4.4、機票預訂系統的邏輯模型如下:
航班機票信息
旅行時間
姓名
性別
旅行地點
身份證號碼
工作單位
旅客
1
價格
航空公司
取票通知
帳單
訂票
1 1
時間
旅行社
合適航班機票
N
訂票旅客清單
售出機票信息
可售機票
等級
5、詳細設計:
5.1、主界面程序流程圖設計:
說明:在主界面,可以設置四個按鈕以供選擇:查詢、訂票、退票和退出。
選擇不同的按鈕觸發不同事件。
5.2、查詢系統程序流程圖設計:
5.3、訂票系統程序流程圖設計:
5.4、 退票系統流程流程圖設計:
6、實現和單元測試:
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 ) //判斷含傳入航班號和日期的結點是否存在
{
FlightListNode current = firstNode; // 航班信息的第一個結點
while( current != null)
{
if( current.data.flightNum.equals( sFlightNo )
&& current.data.date.equals( date ) )
return false;
else
current = current.next; //當前航班號不存在時轉入下一個結點
}
return true;
}
public void insertAtFront( FlightInfo insertItem ) //在鏈首插入結點
{
if( isEmpty() )
firstNode = lastNode = new FlightListNode( insertItem );
else
firstNode = new FlightListNode( insertItem, firstNode );
return numberOfRecords ++;
}
public void insertAtBack( FlightInfo insertItem ) //在鏈尾插入結點
{
if( isEmpty() )
firstNode = lastNode = new FlightListNode( insertItem );
else
lastNode = lastNode.next = new FlightListNode( insertItem );
return numberOfRecords ++;
}
public void delete( FlightInfo deleteItem ) //刪除航班信息結點
{
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、軟體維護:
維護方面主要為對伺服器上的資料庫數據進行維護。可使用 SQL SERVER 2000的資料庫維護功能機制。例如,定期為資料庫進行Backup,維護管理資料庫死鎖問題和維護資料庫內數據的一致性等。
三、 主要參考文獻:
1 張海潘. 軟體工程導論. 北京:清華大學出版社,2005
2 趙松濤. SQL Server 2000系統管理實錄. 北京:電子工業出版社, 2006
3 宋波. Java Web應用與開發教程. 北京:清華大學出版社,2006
4 孫衛琴. Java面向對象編程. 北京:電子工業出版社,2006
『肆』 在一個飛機訂票系統中,多個用戶共享一個資料庫。各用戶可以同時查詢信息,若有一個用戶要訂票,須更新數
ms比較理論的東西,看下這個吧,說不定有幫助
http://www.hudong.com/wiki/PV%E6%93%8D%E4%BD%9C
『伍』 資料庫設計實驗題目(三):機票預定系統
我暈,這是誰給你安排的實驗題目。你們團隊有多少人來做這個項目,太可怕了。祝你好運。
『陸』 飛機訂票系統設計 c語言
(已修改,請用最新的代碼)代碼說明:
1級菜單:選擇購買的航班號,並顯示對應座位狀態。
(我只做測試,所以初始化initFlight函數中我只初始了2個航班,需要自己按照我的代碼添)
(注意:實際開發軟體,鏈表數據是從資料庫中讀取的,需要實時同步,如果要多次調用initFlight函數,記得自己寫一個釋放內存的函數,把所有鏈表「SINFO和FLINFO」節點都釋放掉,釋放函數我沒寫,需要你自己寫!!!)
2級菜單:選擇購買對應座位號,完成購買,並實時顯示購買結果。
位置編號、座位最大排數、艙室類型、折扣等參數均由常量參數空值,需要修改自行改常量。
注意:艙室類型(我默認3個類型頭等艙、公務艙、經濟艙)對應折扣參數:tDiscount二維數組。如要如要添加新的艙室類型,必須將參數常量TYPESIZE、typeName、types、tDiscount這4個同時修改,具體看代碼備注!!
座位票價=基礎票價*類型折扣*時段折扣。
因為飛機不讓吸煙,所以我沒做吸煙區(笑),如果你需要,可以作為類型自行添加!
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
#include<malloc.h>
#include<time.h>
//-----------------------相關參數,想改變,在這里修改!!!!!!!-----------------------------
constfloattimeDiscount=1;//時段折扣,影響所有航班最終價格,默認1
constcharcID[5]="ABCD";//位置編號
constintmaxRow=20;//位置最大排號
//注意:如果修改類型數量,types和tDiscount必須同時修改!!!
#defineTYPESIZE3//類型數量
constchartypeName[TYPESIZE][10]={"頭等艙","公務艙","經濟艙"};
constinttypes[TYPESIZE][2]={{1,2},{3,4},{5,20}};//排號對應類型。1~2排頭等艙,3~4排公務艙,5~20排經濟艙
constfloattDiscount[TYPESIZE]={1.5,1.3,1};//類型折扣。頭等艙1.5倍,公務艙1.3倍,經濟艙1倍
//-------------------------------------------------------------------------------
typedefstructseatInfo//座位信息,一條鏈表對應一個航班信息,鏈表順序從第一排左邊第一個開始往後A1~D1,A2~D2。。。
{
charcloID;//位置編號A、B、C、D
introw;//位置排號
inttype;//座位所屬類型:0:頭等艙、1:公務艙、2:經濟艙,不同類型對應不同的類型折扣tDiscount
intsell;//出售狀態,0:未出售;1:已出售
structseatInfo*next;
}SINFO;
typedefstructflightInfo//航班信息
{
charfid[10];//航班號
time_ttfTime;//起飛時間
time_tldTime;//降落時間
chartoCity[20];//抵達城市
floattPrice;//基礎票價,不同位置具有不同折扣,座位票價=基礎票價*類型折扣*時段折扣
structflightInfo*next;
structseatInfo*sHead;//對應座位鏈表的頭節點
}FLINFO;
voidmeError(void*p);
SINFO*getSINFO();//獲取座位鏈表
//addFLINFO:添加航班信息鏈表的節點flinfoHead:頭節點(第一次傳NULL會自動生成),flinfoTail:尾節點,fNew:要添加的結構信息(成員指針無需賦值)
FLINFO*addFLINFO(FLINFO**ffHead,FLINFO*flinfoTail,FLINFOfNew);//返回尾節點
time_tgetTime_tfromStr(char*sTime);//將YYYY-MM-DDhh:mm:ss格式的時間字元串轉換成time_t型數值
FLINFO*initFlight();//初始化航班信息,返回航班鏈表頭節點,如果想手動輸入,請在這里添加!!!正常軟體開發,這一步應該是從資料庫讀取!
char*getTString(structtm*tm0);//通過tm獲取時間字元串
voidshowSinfo(FLINFO*flinfo);//顯示航班對應座位信息
voidprintfFlinfo(FLINFO*flinfoHead);
FLINFO*selectFlinfo(FLINFO*flinfoHead,char*fid);//選擇航班號,返回節點
voidshowSinfo(FLINFO*flinfo);//顯示航班對應座位信息
SINFO*selectSinfo(FLINFO*flinfo,char*sid);//選擇座位,返回節點
intmain()
{
FLINFO*flinfoHead=initFlight(),*ffSelect=NULL;
SINFO*sfSelect=NULL;
charfid[10]={0},sid[10]={10};
while(1)
{
ffSelect=NULL;
sfSelect=NULL;
memset(fid,0,10);
memset(sid,0,10);
printfFlinfo(flinfoHead);
printf("請輸入要購買的航班號:");
scanf("%s",fid);
ffSelect=selectFlinfo(flinfoHead,fid);
if(!ffSelect)
{
printf("未找到對應航班,按任意鍵繼續-----
");
getch();
system("cls");
continue;
}
system("cls");
printf("航班號:%s座位信息如下:
",ffSelect->fid);
showSinfo(ffSelect);
printf("請輸入要購買的座位編號(輸入0返回主菜單):");
scanf("%s",sid);
if(!strcmp(sid,"0"))
{
system("cls");
continue;
}
else
{
sfSelect=selectSinfo(ffSelect,sid);
if(!sfSelect||sfSelect->sell)
{
printf("未找到對應座位或該座位已出售,請重新輸入!按任意鍵繼續-----
");
getch();
system("cls");
continue;
}
printf("購買成功!按任意鍵繼續-----");
sfSelect->sell=1;
getch();
system("cls");
}
}
return0;
}
SINFO*selectSinfo(FLINFO*flinfo,char*sid)//選擇座位,返回節點
{
SINFO*sinfoHead=flinfo->sHead;
while(sinfoHead->next)
{
if(sinfoHead->next->cloID==sid[0]&&sinfoHead->next->row==atoi(sid+1))
returnsinfoHead->next;
sinfoHead=sinfoHead->next;
}
returnNULL;
}
voidshowSinfo(FLINFO*flinfo)//顯示航班對應座位信息
{
SINFO*sinfoHead=flinfo->sHead,*sfp=NULL;
inti,j,k,row=maxRow,clo=strlen(cID);
chartypeStr[10]={0};
for(i=0;i<row;i++)
{
//---------讀取座位所屬艙室------------
memset(typeStr,0,10);
for(k=0;k<TYPESIZE;k++)
if(i+1>=types[k][0]&&i+1<=types[k][1])
strcpy(typeStr,typeName[k]);
//--------------------------------------
printf("
");
for(j=0;j<clo;j++)
printf("-------------");
printf("
");
sfp=sinfoHead;
for(j=0;j<clo;j++)
{
printf("|%c%02d|",sfp->next->cloID,sfp->next->row);
sfp=sfp->next;
}
printf("
");
sfp=sinfoHead;
for(j=0;j<clo;j++)
{
printf("|%c|",sfp->next->sell?2:1);
sfp=sfp->next;
}
printf("
");
sfp=sinfoHead;
for(j=0;j<clo;j++)
{
printf("|%6s:%4.0f|",typeStr,flinfo->tPrice*tDiscount[sfp->next->type]*timeDiscount);
sfp=sfp->next;
}
printf("
");
sinfoHead=sfp;
}
for(j=0;i<clo;j++)
printf("-------");
printf("
");
}
FLINFO*selectFlinfo(FLINFO*flinfoHead,char*fid)//選擇航班號,返回節點
{
while(flinfoHead->next)
{
if(!strcmp(flinfoHead->next->fid,fid))
returnflinfoHead->next;
flinfoHead=flinfoHead->next;
}
returnNULL;
}
voidprintfFlinfo(FLINFO*flinfoHead)
{
while(flinfoHead->next)
{
printf("目的地:%s,航班號:%s
----起飛時間:%s,抵達時間:%s
",flinfoHead->next->toCity,flinfoHead->next->fid,getTString(localtime(&flinfoHead->next->tfTime)),getTString(localtime(&flinfoHead->next->ldTime)));
flinfoHead=flinfoHead->next;
}
}
char*getTString(structtm*tm0)//通過tm獲取時間字元串
{
char*str=(char*)malloc(sizeof(char)*20),num[5]={0};
meError(str);
memset(str,0,20);
sprintf(num,"%4d",tm0->tm_year+1900);
strcat(str,num);
strcat(str,"-");
memset(num,0,5);
sprintf(num,"%02d",tm0->tm_mon);
strcat(str,num);
strcat(str,"-");
memset(num,0,5);
sprintf(num,"%02d",tm0->tm_mday);
strcat(str,num);
strcat(str,"");
memset(num,0,5);
sprintf(num,"%02d",tm0->tm_hour);
strcat(str,num);
strcat(str,":");
memset(num,0,5);
sprintf(num,"%02d",tm0->tm_min);
strcat(str,num);
strcat(str,":");
memset(num,0,5);
sprintf(num,"%02d",tm0->tm_sec);
strcat(str,num);
returnstr;
}
time_tgetTime_tfromStr(char*sTime)//將YYYY-MM-DDhh:mm:ss格式的時間字元串轉換成time_t型數值
{
time_trt;
structtm*tm1=NULL;
rt=time(NULL);
tm1=localtime(&rt);
sscanf(sTime,("%4d-%2d-%2d%2d:%2d:%2d"),&tm1->tm_year,&tm1->tm_mon,&tm1->tm_mday,&tm1->tm_hour,&tm1->tm_min,&tm1->tm_sec);
tm1->tm_year-=1900;
tm1->tm_mon--;
rt=mktime(tm1);
returnrt;
}
FLINFO*initFlight()//初始化航班信息,返回航班鏈表頭節點,如果想手動輸入,請在這里添加!!!正常軟體開發,這一步應該是從資料庫讀取!
{
FLINFO*ffHead=NULL,*flinfoTail=NULL,fNew;
//--------添加一個航班信息----需要增加按照我下面調用方式寫--------------------------------
strcpy(fNew.fid,"CI502");
fNew.tfTime=getTime_tfromStr("2019-02-2003:30:30");
fNew.ldTime=getTime_tfromStr("2019-02-2005:20:30");
strcpy(fNew.toCity,"台北");
fNew.tPrice=1000;
fNew.next=NULL;
flinfoTail=addFLINFO(&ffHead,flinfoTail,fNew);
//--------------------------------------------------------------------------------------------
strcpy(fNew.fid,"9C8921");
fNew.tfTime=getTime_tfromStr("2019-02-2014:30:30");
fNew.ldTime=getTime_tfromStr("2019-02-2016:40:30");
strcpy(fNew.toCity,"香港");
fNew.tPrice=500;
fNew.next=NULL;
flinfoTail=addFLINFO(&ffHead,flinfoTail,fNew);
returnffHead;
}
FLINFO*addFLINFO(FLINFO**ffHead,FLINFO*flinfoTail,FLINFOfNew)//返回尾節點
//添加航班信息鏈表的節點flinfoHead:頭節點(第一次傳NULL會自動生成),flinfoTail:尾節點,fNew:要添加的結構信息(成員指針無需賦值)
{
FLINFO*flinfoHead=*ffHead;
if(flinfoHead==NULL)
{
*ffHead=(FLINFO*)malloc(sizeof(FLINFO));
flinfoHead=*ffHead;
meError(flinfoHead);
flinfoHead->next=NULL;
}
FLINFO*flinfoNew=(FLINFO*)malloc(sizeof(FLINFO));
meError(flinfoNew);
flinfoNew->next=NULL;
flinfoNew->fid[0]=0;
strcpy(flinfoNew->fid,fNew.fid);
flinfoNew->ldTime=fNew.ldTime;
flinfoNew->tfTime=fNew.tfTime;
flinfoNew->toCity[0]=0;
strcpy(flinfoNew->toCity,fNew.toCity);
flinfoNew->tPrice=fNew.tPrice;
flinfoNew->sHead=getSINFO();
if(flinfoHead->next==NULL)
flinfoHead->next=flinfoNew;
else
flinfoTail->next=flinfoNew;
flinfoTail=flinfoNew;
returnflinfoTail;
}
SINFO*getSINFO()//獲取座位鏈表
{
intmaxClo=strlen(cID),cnt=maxClo*maxRow,clo=0,row=1,i;
SINFO*sinfoHead=(SINFO*)malloc(sizeof(SINFO)),*sinfoTail=NULL;
meError(sinfoHead);
sinfoHead->next=NULL;
SINFO*sinfoNew=NULL;
while(cnt--)//按順序生成對應數量的座位鏈表
{
if(clo==maxClo)
clo=0,row++;
if(row==maxRow+1)
row=1;
sinfoNew=(SINFO*)malloc(sizeof(SINFO));
meError(sinfoNew);
sinfoNew->cloID=cID[clo];
sinfoNew->row=row;
for(i=0;i<TYPESIZE;i++)
if(row>=types[i][0]&&row<=types[i][1])
{
sinfoNew->type=i;
break;
}
sinfoNew->sell=0;
sinfoNew->next=NULL;
if(sinfoHead->next==NULL)
sinfoHead->next=sinfoNew;
else
sinfoTail->next=sinfoNew;
sinfoTail=sinfoNew;
clo++;
}
returnsinfoHead;
}
voidmeError(void*p)//內存申請失敗
{
if(p==NULL)
{
printf("
異常:內存申請失敗!回車結束程序!
");
while(getch()!='
');
exit(0);
}
}
『柒』 航空售票系統 Airport cntl
是電子客票票面狀態的一種,機場控制,說明該客票的控制權已經移交給機場,通常情況下是在航衡山空公司系統中才能看到的一種狀態,因為每漲客票在不同的時期,客票的控制權會交給在不同的系統處理,而這時侯在不同系統中會出現不同的狀態,比如說你這種客票,如果說你是在航空公司資料庫中看到的狀態時AIRPORT CNTL狀態的,而此時該客票在航信資料庫中的狀態應該是OPEN FOR USE,這說明該客票的控制權已經移交給離崗系統了敏攔轎,在航空公司系統中是無法對該客票的票面做任何更改,如果你要對客票票面進行更改,那就需要你去取回控制權以後才能處理,如果你是中國國內代理,一般情況下你是看不到這個狀態的,如果你看到,有可能是航信系統的錯誤,你最好打各電話去航空公司那裡,讓他們在航空公司資料庫里查下,該客橋肆票的狀態是否正確,這樣才能保證旅客能夠順利乘機,當然如果你是在變更或者退票時發現這樣的情況,這說明控制權不在你所在的系統中,你你需要打電話聯系航空公司,讓他們把控制權發送一下就好了,否則你是無法對票面進行更改的!
『捌』 飛機訂票系統都有什麼主要功能
主要功能航班信息查詢和訂座出票。還包括提供運價計算等功能。
『玖』 用Java鏈接mysql資料庫編寫一個簡單的飛機票訂票系統,大學作業級別,急!!!
swing 是吧, eclipse中的swing插件並茄可以讓你像在WINFORM中那樣托控制項.
但是, 一樓是正解, 這個需要旅察RMB的拆蔽茄.