高程的設計
通過此系統可以實現如下功能: 錄入: 可以錄入航班情況(數據可以存儲在一個數據文件中,數據結構、具體數據自定) ; 查詢: 可以查詢某個航線的情況(如,輸入航班號,查詢起降時間,起飛抵達城市,航班票價,票價折扣,確定航班是否滿倉); 可以輸入起飛抵達城市,查詢飛機航班情況; 訂票:(訂票情況可以存在一個數據文件中,結構自己設定) 可以訂票,如果該航班已經無票,可以提供相關可選擇航班或提供候補席位; 退票: 可退票,退票后修改相關數據文件; 客戶資料有姓名,證件號,訂票數量及航班情況,訂單要有編號。 修改航班信息: 當航班信息改變可以修改航班數據文件 。
2.1 結構定義因為本題函數變量巨多無比,所以我們定義了typedef struct client和airline,統領一些小變量。這樣在之后引用的時候,比較方便。 2.2 函數構造 利用之前構造的的變量進行函數構造,利用不同函數實現不同的功能。設計航班信息,訂票信息的存儲結構,設計程序完成功能。 2.3 功能實現通過此系統可以實現如下功能: 錄入: 可以錄入航班情況(數據可以存儲在一個數據文件中,數據結構、具體數據自定) ; 查詢: 可以查詢某個航線的情況(如,輸入航班號,查詢起降時間,起飛抵達城市,航班票價,票價折扣,確定航班是否滿倉); 可以輸入起飛抵達城市,查詢飛機航班情況; 訂票:(訂票情況可以存在一個數據文件中,結構自己設定) 可以訂票,如果該航班已經無票,可以提供相關可選擇航班或提供候補席位; 退票: 可退票,退票后修改相關數據文件; 客戶資料有姓名,證件號,訂票數量及航班情況,訂單要有編號。 修改航班信息: 當航班信息改變可以修改航班數據文件 。
3 程序與功能模塊設計
3.1 設計思路總體思路,通過對題目的閱讀和分析,我們發現要求大體分為2大模塊,1.航班信息的錄入,修改與查詢。2.顧客的信息錄入,訂票,退票系統。我們對錄入信息的解決方法是運用鏈表的插入,將信息放入到一個個鏈表當中,對于輸出,我們則借鑒了遍歷函數,同時,我們對于數據的查找,也借鑒了鏈表中的查找,在訂票系統中,我們也是基于此,進行修改,完成了訂票退票系統。 錄入:首先是數據的錄入,這個可以分為航班信息airline和顧客信息client,根據題目要求航班信息airline中需包含 航班號,起飛地,目的地,起飛時間,降落時間,票價,座位總數,剩余座位數,不同艙位的數目,而顧客信息client中需要包含訂單號,顧客姓名,證件號,及他所訂購的航班信息,和所定的艙位信息。我們根據需求把他們定義為不同的數據類型,便于在之后的函數中直接引用,也便于后期不同模塊的整合與統一。 查詢:根據功能要求,我們需采取兩種方式查詢航班:1.航班號 2.起始地和目的地。利用指針,將錄入的航班逐個與客戶查詢的關鍵字進行比較,直至查找到對應的航班,并輸出航班所有信息。 訂票:創建一個新的結構體來儲存客戶的信息,其中包括選擇航班的相關信息、客戶的身份信息和訂單號。與查詢方式類似,當指針指向相應的航班時,我們將該航班對應的結構體中相關信息復制儲存至收集客戶信息的結構體中,并將客戶的身份信息也一同存入。若航班的余票量不能滿足客戶的訂票需求,那么系統將提供其他滿足客戶需求的航班,客戶可以重新進行選擇訂票。客戶也可以選擇候補滿客航班,這時重新創建一個新結構體來儲存候補客戶的信息。 退票:同樣運用指針,我們先找到退票客戶的“信息文件夾”。然后將該客戶的訂票信息刪除,同時恢復對應航班的座位數。這時,系統將會按順序為候補席位中的客戶訂票。 修改:修改內容包括:1.增加航班 2.刪除航班 3.修改部分信息。 增加航班:在儲存航班信息的鏈表中創建一個新的結點,將對應的新航班信息存儲在結構體中。 刪除航班:利用指針找到需刪除航班的結點,之后刪除該節點并釋放節點中存儲的航班信息。 修改部分內容:利用指針找到需要修改航班的結點,根據要求對指針指向的結構體內容進行修改,以完成航班的相關信息修改。 3.2 詳細實現過程錄入:在主程序利用了import(num,headline);函數錄入航班信息,在之后的訂票模塊利用 bookticket錄入了顧客信息,主要的錄入就這兩塊信息,所以分別定義typedef struct client 和typedef struct airline作為結構變量統領這些信息,而在輸入的時候只要采用循環結構,就可以實現地址的移動,一位一位的實現信息錄入,具體程序如之后程序所示。 查詢:我們分為兩種方式對航班進行查詢:1.航班號 2.起始地和目的地。通過航班號進行查詢,我們利用strcmp函數比較輸入的航班號字符串與指針指向的航班號字符串,若返回值為0,則指針temp所指向的就是找到的航班號,這時利用指針temp將結點中該航班的信息全部輸出。若返回值不為0,那么指針順著鏈表移動,指向下一個結點,繼續比較。通過起始地與目的地查找航班方法與通過航班號查詢方式差不多,只不過同時比較起始地和目的地兩個字符串。
訂票:為了便于儲存訂票客戶的具體信息,我們創建了一個新的結構體client。訂票時客戶選擇合適航班,指針temp順著鏈表移動找到該航班對應的結點,將對應的航班信息復制儲存在client中,同時客戶從鍵盤上輸入自己的名字與id,一并存入client中,并將客戶的id作為訂單編號。訂票完成后,執行函數display_client,將客戶的訂單信息輸出至屏幕上。若航班余票量不能滿足客戶的訂票需求,通過函數display_all_line將所有航班信息輸出在屏幕上為客戶提供其他選擇。客戶可以選擇訂購其他航班,其實現步驟與訂票無異。客戶也可以選擇在滿客航班候補,這時程序將客戶信息存入client中。候補信息填寫完成后,將執行函數display_client1將候補信息輸出,并提醒客戶“無余票,需耐心等待”。 退票:我們先利用指針headclient順著client鏈表移動,找到退票客戶的結點,然后刪除該節點并釋放結構體儲存的信息。接著再利用指針headline順著airline鏈表移動,找到與退票客戶信息中的航班號相等的結點,修改其中的座位數。這時要判斷客戶的艙位等級,利用switch語句分別對不同艙位進行座位數修改。 修改:先利用switch語句選擇航班修改操作類型。 - 增加航班:airline鏈表新增一個結點,然后與錄入過程相似。
- 刪除航班:指針delline順著鏈表移動直至找到對應航班結點,然后刪除該結點,并釋放相關信息存儲空間。
- 修改部分內容:指針temp順著鏈表移動直至找到對應航班結點,由于只有部分信息需要修改,我們利用switch語句的選擇結構分別執行不同修改內容的語句。當進行選擇后,我們通過指針temp對結構體的內容進行修改。考慮到多個部分信息需修改的情況,我們運用了while語句,對定義的整型變量y判斷,當有繼續修改的需求時,y=1,循環繼續,若無需求,y=0,循環結束。
3.3 設計總結這幾個功能有著類似之處,比如訂票,退票,修改在設計中,把他們三個定義為3個函數 display_line(find),bookticket和returnticket。然后在不同的函數中實現具體不同的功能,詳細的在之后程序分析細說。修改也是同理,不過是找到數據地址,然后進行數據覆蓋,只要注意變量定義在了哪里即可。 總的來說,這次的程序設計與我們之前做的作業有著異曲同工之妙,先是定義變量,而后進行功能實現的構思,然后寫主函數,主函數簡單,利用多種函數實現功能,將大程序分為一個個小功能,最后用main函數總結起來,實現我們希望的功能。 我們最后又進行了功能的完善和擴展,進行了一些實際問題的思考讓他看起來更像一個真實的航空售票系統。
5 程序測試例與分析
5.1 結果截圖首先進入選項頁面: 1)正常錄入航班信息: 


3) 
若是訂滿,則顯示艙位已滿,讓客戶選擇排隊或者退出,若是排隊進行信息的補錄,并且顯示需要幾張票。 
4)退票直接顯示退票成功 
5) 
6) 
  0) 5.2 程序結果詳解 首先,由上文的結果截圖可以看到,一共分為了六個模塊和一個系統退出。 在主函數處,我們把程序用switch(x) 函數 ,分為不同的case,這樣便于我們分配任務編寫,和最后的檢查。接下來是每一塊的詳細實現過程。 (1)第一個是錄入航班信息,這也是這個系統最為基礎的部分,由程序段我們也可以看到,我們利用了typedef struct airline 定義了許多個變量,這個是需要我們手動輸入的數據。 而折扣在這里我們采用的是0-1.0作為折扣的輸入,比如九折就是0.9,結果都如之前所示。 (2)第二個是查詢航線信息,根據我們的生活經驗,我們把這個又分為兩種查詢方式,分別是起始地和航班編號查詢,查詢之后,會在下面把所有航班信息都列出來,供人們參考。 (3)第三個是客戶訂票,在這里輸入的是客戶數據,若是還有空位,利用typedef struct client將數據儲存起來,同時把航班的空間減一,作為座位的分配,若是沒有空位,如上述程序所顯示,進行排隊或者退出的選擇。 (4)第四個是客戶退票,這個很簡單,只要把數據清空就可以了,如上述程序顯示。 (5) 第五個是輸出所有航班信息,只要利用循環結構和與期中考試類似的node->line_num等等,輸出剛剛輸入的數據,并且全部列出即可。 (6)第六個是修改航班信息,注意當前航班信息,找對地址,修改相應數據,再進行錄入即可,這個也是實現比較困難的一個。 (7)第七個是退出程序,直接break就可以了。 6整體設計總結 6.1 遇到的問題1.刪除航班模塊,我們發現在刪除選擇航班后,程序會直接退出,并沒有返回訂票主系統,即如圖所示 
- 其他還有一些函數定義的錯誤。
- 在乘客訂票結束后,程序不進行下一步,而是卡死在這一步,再次按回車則直接彈出。
6.2 問題的解決方法1.我們返回函數change_line,然后在2選項中修改了相應代碼delete delline->next; 增加了delline=delline->next;使他能夠一位一位后移,解決了這個問題。 2.我們找到了相應的定義位置,詳細修改了函數的找尋方式及具體定義,解決了這個問題。 3.我們回到對應函數的位置,在程序結束處補上了 return 0; 使函數能夠正常結束,解決了這個問題。 6.3 總結其他還有一些問題,都用類似方法得到了解決,發現程序出錯要到相應位置去詳細檢查,解決之后不能立刻編譯,應該先預想一下運行結果,然后再進行編譯。 然后若是功能出錯,要到相應功能實現的函數位置進行檢查,之后與程序檢查的步驟一致。
7心得體會 根據第一段信息可知,應將系統信息總體分為兩部分——航班信息,乘客信息。可定義出兩個結構體來進行信息存儲。對于題目所要求的 錄入,查詢,訂票,退票等功能,可通過定義不同函數,分別實現不同功能 ,最后在主函數中進行調用,進行整合。 使用鏈表來存儲信息,更加方便靈活。不同函數間可進行相互調用,以實現所要求的功能。 我們可以利用課上學到的知識,定義結構體,大量使用結構指針,實現很多信息的錄入,修改,賦值,比較等。定義單鏈表,使用 while 循環語句,if 判斷,switch 選擇等。使用 #include<string.h> 等頭文件,使用 strcmp() 來進行數據的比較以實現 航線的查詢,訂票等功能。 最后再查閱相關資料完成程序的具體編寫。
4 C語言程序與接口實現
4.1 程序設計- using namespace std;
- #include<stdlib.h>
- #include<string.h>
- #include<stdio.h>
- /*****************************************************
- *功能描述:定義客戶信息
- *輸入參數:name,id,line_num,time1,time2,seat_num
- *輸出參數:client
- txt文件
- ******************************************************/
- typedef struct client
- {
- char file[20];//訂單編號
- char name[20];//顧客名
- char id[17];//顧客證件號
- char line_num[10];//航班號
- char time1[10];//起飛時間
- char time2[10];//降落時間
- double price;//現票價
- int class0;//艙位等級
- int seat_num;//座位號
- struct client *next;//下一個結點
- } client;
- typedef struct clienthead
- {
- int count;
- client *next;
- } clienthead;
- /*****************************************************
- *功能描述:定義航班信息
- *輸入參數:line_num,time1,time2,seat_num,start_place,end_place,total
- *輸出參數:airline
- txt
- ******************************************************/
- typedef struct airline
- {
- char line_num[10];//航班號
- char start_place[20];//起飛地
- char end_place[20];//目的地
- char time1[10];//起飛時間
- char time2[10];//降落時間
- double price0;//票價
- double price;//現票價
- double discount;//折扣
- int class1;//一等艙
- int class2;//二等艙
- int class3;//三等艙
- int total;//座位總數
- int left;//剩余座位
- struct airline *next;//下一個結點
- } airline;
- //頭結點
- typedef struct airlinehead
- {
- int count;
- airline *next;
- } airlinehead;
- /*****************************************************
- *功能描述:錄入航班函數
- *輸入參數:line_num,start_place,end_place,time1,time2,total,left
- *輸出參數:第i+1個航班錄入
- ******************************************************/
- airlinehead* import(int n,airlinehead *pheadline)//錄入航班函數: n為所要錄入航班的數量:
- {
- airline *temp = new airline;
- temp->next=NULL;
- pheadline->next=temp;
- pheadline->count = n;
- int flag;
- for(int i=0; i<n; i++)
- {
- printf("請輸入第%d個航班的航班號 ",i+1);
- scanf("%s",temp->line_num);
- printf("\n");
- printf("請輸入第%d個航班的起飛地 ",i+1);
- scanf("%s",temp->start_place);
- printf("\n");
- printf("請輸入第%d個航班的目的地 ",i+1);
- scanf("%s",temp->end_place);
- printf("\n");
- printf("請輸入第%d個航班的起飛時間 ",i+1);
- scanf("%s",temp->time1);
- printf("\n");
- printf("請輸入第%d個航班的降落時間 ",i+1);
- scanf("%s",temp->time2);
- printf("\n");
- printf("請輸入第%d個航班的座位總數 ",i+1);
- scanf("%d",&temp->total);
- printf("\n");
- printf("請輸入一等艙座位數 ");
- scanf("%d",&temp->class1);
- printf("請輸入二等艙座位數 ");
- scanf("%d",&temp->class2);
- printf("請輸入三等艙座位數 ");
- scanf("%d",&temp->class3);
- temp->left=temp->total;
- printf("本航班的剩余座位數: %d",temp->left);
- printf("\n");
- printf("請輸入原票價 ");
- scanf("%lf",&temp->price0);
- printf("是否有折扣:(1:是 0:否)");
- scanf("%d",&flag);
- if(flag){
- printf("請輸入折扣:");
- scanf("%lf",&temp->discount);
- temp->price=(temp->price0)*(temp->discount);
- }
- else{
- temp->discount=0;
- temp->price=temp->price0;
- }
- printf("現票價:%.2f",temp->price);
- printf("\n");
- printf("第%d個航班成功錄入。 ",i+1);
- printf("\n");
- if(i<n-1)
- {
- temp->next = new airline;
- if(temp->next == NULL)
- { printf("分配失敗");
- printf("\n");
- exit(1);
- }
- temp->next->next=NULL;
- temp = temp->next;
- }
- }
- return pheadline;
- }
- /*****************************************************
- *功能描述:查詢航班功能
- *輸入參數:select,1,2
- *輸出參數:航班號,起飛地,抵達地,起飛時間,降落時間,座位數,剩余座數
- *返回值:temp-成功,NULL-失敗
- ******************************************************/
- airline* query(airlinehead *phead )//查詢航班情況
- {
- airline *find=NULL;
- airline *temp;
- printf("(#^.^#)(#^.^#)(#^.^#)(#^.^#)(#^.^#)(#^.^#)(#^.^#)(#^.^#)(#^.^#)"); printf("\n") ;
- printf("1,航線查詢航班。 "); printf("\n") ;
- printf("2,起飛城市查詢航班。"); printf("\n") ;
- printf("(#^.^#)(#^.^#)(#^.^#)(#^.^#)(#^.^#)(#^.^#)(#^.^#)(#^.^#)(#^.^#)");
- printf("\n") ;
- printf("請選擇:");
- int A;
- scanf("%d",&A) ;
- printf("\n") ;
- if(A==1)
- {
- printf("請輸入航班號:");
- char line_num[10];
- scanf("%s",line_num);
- temp = phead->next;
- while(temp )
- {
- if(strcmp(temp->line_num,line_num) == 0)
- {
- find= temp;
- //display_line(find);
- return temp;
- break;
- }
- else
- {
- temp = temp->next;
- }
- }
- if(!temp)
- {
- printf("沒有找到該航班的信息。") ;
- printf("\n") ;
- return NULL;
- }
-
- }
- if(A==2)
- {
- char start_place[20];//起飛地
- char end_place[20];//目的地
- printf("請輸入起始地:") ;
- scanf("%s",start_place);
-
- printf("\n") ;
- printf("請輸入目的地:") ;
- scanf("%s",end_place);
- printf("\n") ;
- //airline *temp;
- temp=phead->next;
- while(temp)
- {
- if(strcmp(temp->start_place,start_place)==0 &&
- strcmp(temp->end_place,end_place)==0)
- {
- find=temp;
- //return temp;
- break;
- }
- temp = temp->next;
- }
- if(!temp)
- { printf("沒有找到該航班的信息。") ;
- printf("\n") ;
- return NULL;
- }
- }
- else{
- printf("輸入錯誤。") ;
- printf("\n") ;
- }
- return find;
- }
- /*****************************************************
- *功能描述:查詢航班功能
- *輸入參數:select,1,2
- *輸出參數:航班號,起飛地,抵達地,起飛時間,降落時間,座位數,剩余座數
- ******************************************************/
- void display_line(airline *node)//輸出一個航班結點的所有信息到屏幕
- {
- if(node==NULL)
- {
- printf("參數為空!輸出失敗.\n");
- return;
- }
- printf("\n");
- printf("航班號\t\t 起飛地\t\t 目的地\t\t 起飛時間\t\t 降落時間\t\t 一等艙座位數\t\n ");
- printf("%s\t\t",node->line_num);
- printf(" %s\t\t",node->start_place);
- printf(" %s\t\t",node->end_place);
- printf(" %s\t\t",node->time1);
- printf(" %s\t\t",node->time2);
- printf(" %d\t\t\n",node->class1);
- printf("二等艙座位數\t\t 三等艙座位數\t\t 座位總數\t\t 剩余座位\t\n ");
- printf("%d\t\t",node->class2);
- printf(" %d\t\t",node->class3);
- printf(" %d\t\t",node->total);
- printf(" %d\t\t\n",node->left);
- printf("原票價\t\t 折扣\t\t 現票價\t\t 余票量\t\n");
- printf("%.2f\t\t",node->price0);
- printf("%.2f\t\t",node->discount);
- printf("%.2f\t\t",node->price);
- if(node->left<0){
- printf("無余票,所需票量%d",(0-node->left));
- }
- else printf("%d\t\n",node->left);
- printf("\n");
- }
- /******************************************************
- *功能描述:輸出所有的航班信息到屏幕
- *輸入參數:無
- *輸出參數:headline
- *******************************************************/
- void display_all_line(airlinehead *headline)
- {
- printf("\n");
- airline *node;
- node = headline->next;
- if(!node)
- {
- printf("當前沒有航班信息\n");
- return ;
- }
- printf("航班數目: \n",headline->count);
- while(node)
- {
- display_line(node);
- node=node->next;
- }
- }
- /******************************************************
- *功能描述:修改航班信息
- *輸入參數:select
- *輸出參數:無
- *返回值:0-正確,1-錯誤
- *******************************************************/
- int change_line(airlinehead *headline)//修改航班信息。
- {
- printf("當前所有航班的信息為:\n");
- airline *temp,*t;
- int i;
- temp = headline->next;
- while(temp)
- {
- display_line(temp);
- t=temp;
- temp=temp->next;
- }
- printf("\n");
- printf("請選擇你要進行的操作:\n");
- printf("1,增加航班。\n");
- printf("2,刪除航班。\n");
- printf("3,修改部分信息。\n");
- int select;
- scanf("%d",&select);
- printf("\n");
- if(select>3 || select<1)
- {
- printf("輸入錯誤。\n");
- return 0;
- }
- switch(select)
- {
- case 1:
- {
- //temp->next = (airline*)malloc(sizeof(airline));
- temp=new airline;
- int flag;
- // temp=temp->next;
-
- printf("請輸入要增加的航班號: ");
- scanf("%s",temp->line_num);
- printf("請輸入航班的起飛地: ");
- scanf("%s",temp->start_place);
- printf("請輸入航班的目的地: ");
- scanf("%s",temp->end_place);
- printf("請輸入航班的起飛時間: ");
- scanf("%s",temp->time1);
- printf("請輸入航班的降落時間: ");
- scanf("%s",temp->time2);
- printf("請輸入一等艙座位數:");
- scanf("%d",&temp->class1);
- printf("請輸入二等艙座位數:");
- scanf("%d",&temp->class2);
- printf("請輸入三等艙座位數:");
- scanf("%d",&temp->class3);
- printf("請輸入航班的座位總數: ");
- scanf("%d",&temp->total);
- t->next=temp;
- temp->left=temp->total;
- printf("請輸入原票價:");
- scanf("%lf",&temp->price0);
- printf("是否有折扣:(1:是 0:否)");
- scanf("%d",&flag);
- if(flag){
- printf("請輸入折扣:");
- scanf("%lf",&temp->discount);
- temp->price=(temp->price0)*(temp->discount);
- }
- temp->next=NULL;
- headline->count++;
- printf("增加成功。\n");
- break;
- }
- case 2:
- {
- printf("請輸入您要刪除的航班的航班號: ");
- char line_num[10];
- scanf("%s",line_num);
- airline * delline;
- delline = headline->next;
- while(delline)
- {
- if(strcmp(delline->next->line_num, line_num)==0)
- {
- i=1;
- airline *plink;
- plink = delline->next->next;
- //free(delline->next);
- delete delline->next;
- delline->next=plink;
- headline->count--;
- }
- delline=delline->next;
- }
- if(delline == 0&&i!=1)
- {
- printf("沒有找到輸入的航班號。\n");
- return 0;
- }
- i=0;
- break;
- }
- case 3:
- {
- printf("請輸入您要修改的航班的航班號:");
- char line_num3[10];
- scanf("%s",line_num3);
- temp = headline->next;
- while(temp)
- {
- if(strcmp(temp->line_num, line_num3)==0)
- {
- int B;
- i=1;
- printf("請選擇要修改的內容??\n");
- printf("--1,座位總數。--\n");
- printf("--2,起始地址。--\n");
- printf("--3,目的地址。--\n");
- printf("--4,起飛時間。--\n");
- printf("--5,降落時間。--\n");
- printf("--6,原票價。--\n");
- printf("--7,折扣。--\n");
- printf("--0,無修改內容。--\n");
- scanf("%d",&B);
- while(B){
- switch(B){
- case 1: {
- int c;
- int y=1;
- while(y){
- printf("請輸入需修改的艙位等級:(1:一等座 2:二等座 3:三等座 )");
- scanf("%d",&c);
- printf("請輸入修改后的座位數:");
- switch(c){
- case1: temp->left=(temp->total)-(temp->left);
- scanf("%d",&temp->class1);
- temp->left=(temp->left)+(temp->class1);
- break;
- case2: temp->left=(temp->left)-(temp->class2);
- scanf("%d",&temp->class2);
- temp->left=(temp->left)+(temp->class2);
- break;
- case3: temp->left=(temp->left)-(temp->c lass3);
- scanf("%d",&temp->class3);
- temp->left=(temp->left)+(temp->class3);
- break;
- }
- printf("是否繼續修改座位數:(1:是 0:否)");
- scanf("%d",&y);
- }
- temp->total=(temp->class1)+(temp->class2)+(temp->class3);
- break;}
- case 2: printf("請輸入修改后的起始地址:");
- scanf("%s",temp->start_place);
- break;
- case 3: printf("請輸入修改后的目的地址:");
- scanf("%s",temp->end_place);
- break;
- case 4: printf("請輸入修改后的起飛時間:");
- scanf("%s",temp->time1);
- break;
- case 5: printf("請輸入修改后的降落時間:");
- scanf("%s",temp->time2);
- break;
- case 6: printf("請輸入修改后的原票價:");
- scanf("%lf",&temp->price0);
- if(temp->discount) temp->price=(temp->price0)*(temp->discount);
- else temp->price=temp->price0;
- break;
- case 7: printf("請輸入修改后的折扣:");
- scanf("%lf",&temp->discount);
- if(temp->discount) temp->price=(temp->price0)*(temp->discount);
- else temp->price=temp->price0;
- break; }
- display_line(temp);
- printf("請選擇要修改的內容??\n");
- printf("--1,座位總數。--\n");
- printf("--2,起始地址。--\n");
- printf("--3,目的地址。--\n");
- printf("--4,起飛時間。--\n");
- printf("--5,降落時間。--\n");
- printf("--6,原票價。--\n");
- printf("--7,折扣。--\n");
- printf("--0,無修改內容。--\n");
- scanf("%d",&B); } }
- temp=temp->next; }
- if(temp==0&&i!=1)
- {
- printf("沒有找到輸入的航班號。\n");
- return 0; }
- break; } }
- return 1;}
- /*****************************************************
- *功能描述:輸出一個客戶信息到屏幕
- *輸入參數:無
- *輸出參數:姓名,證件號碼,座號,航班號,起飛時間,降落時間,
- ******************************************************/
- void display_client(client *node=NULL)//輸出一個客戶節點的信息到屏幕。
- {
- if(node==NULL)
- { printf("參數為空!輸出失敗.\n");
- return; }
- printf("\n");
- printf("訂單編號\t\t 姓名\t\t 證件號碼\t 艙位等級\t 座號\t\n");
- printf("%s\t\t",node->file);
- printf(" %s\t\t",node->name);
- printf(" %s\t\t",node->id);
- printf(" %d\t\t",node->class0);
- printf(" %d\t\n",node->seat_num);
- printf("起飛時間\t 降落時間\t 航班\t\t\n");
- printf("%s\t\t",node->time1);
- printf("%s\t\t",node->time2);
- printf("%s\t\t",node->line_num);
- printf("\n");}
- void display_client1(client *node=NULL)//輸出一個客戶節點的信息到屏幕。
- { if(node==NULL)
- { printf("參數為空!輸出失敗.\n");
- return; }
- printf("\n");
- printf("姓名\t\t 證件號碼\t 座號\t 起飛時間\t 降落時間\t 航班\t\t\n");
- printf("%s\t\t",node->name);
- printf("%s\t\t",node->id);
- printf("無座位,等待中");
- printf("%s\t\t",node->time1);
- printf("%s\t\t",node->time2);
- printf("%s\t\t",node->line_num);
- printf("\n");}
-
- /*****************************************************
- *功能描述:輸出未售完票航班信息
- *輸入參數:無
- *輸出參數:headline
- ******************************************************/
- void display_left_airline(airlinehead *headline)//輸出未售完票的航班的信息。
- { airline *node = headline->next;
- if(!node)
- {
- printf("當前沒有航班。。"); }
- for(; node->left!=node->total; node = node->next)
- {
- display_line(node); } }
- /*****************************************************
- *功能描述:訂票
- *輸入參數:line_num,id
- *輸出參數:
- *返回值:1-正確,0-錯誤
- ******************************************************/
- int bookticket(airlinehead * headline,clienthead *headclient)//訂票
- {
- //headclient->count=0;
- printf("請輸入航班號: ");
- char line_num[10] ;
- scanf("%s",line_num);
- airline *temp;
- temp=headline->next;
- while(temp)
- { if(strcmp(temp->line_num,line_num)==0)
- { break; }
- temp=temp->next; }
- if(!temp)
- { printf("未找到該航班\n");
- return 0; }
- if(temp->left==0)
- { int x;
- printf("對不起,您所定航班已無余座\n請進行選擇:1 退出\n 2 排隊\n");
- scanf("%d",&x);
- switch(x) { case 1:
- printf("請選擇其他合適的航班.\n");
- printf("全部");
- display_all_line(headline);
- printf("\n");
- return 0;
- case 2:int z;
- printf("替補人員信息補錄\n");
- client *custom1=new client;
- printf("請輸入你的證件號碼: ");
- scanf("%s",custom1->id);
- printf("\n");
- printf("請輸入你的姓名:");
- scanf("%s",custom1->name);
- printf("\n");
- printf("請輸入訂票量:");
- scanf("%d",&z);
- custom1->next=NULL;
- strcpy(custom1->line_num,line_num);
- strcpy(custom1->time1,temp->time1);
- strcpy(custom1->time2,temp->time2);
- headclient->count++;
- custom1->next = headclient->next;
- headclient->next = custom1;
- printf("\n替補信息加入完成!\n");
- display_client1(custom1); printf(" 需要座位\n ");printf(" %d\n",z);
- printf("替補輸入完成\n");
- return 1; } }
- client *custom=new client;
- printf("請輸入你的證件號碼: ");
- scanf("%s",custom->id);
- printf("\n");
- printf("請輸入你的姓名:");
- scanf("%s",custom->name);
- printf("一等艙座位數\t\t 二等艙座位數\t\t 三等艙座位數\t\n");
- printf("%d\t\t",temp->class1);
- printf(" %d\t\t",temp->class2);
- printf(" %d\t\t",temp->class3);
- printf("\n");
- printf("請輸入理想艙位等級:(1:一等艙 2:二等艙 3:三等艙)");
- scanf("%d",&custom->class0);
- custom->seat_num=temp->total-temp->left+1;
- custom->next=NULL;
- strcpy(custom->line_num,line_num);
- strcpy(custom->time1,temp->time1);
- strcpy(custom->time2,temp->time2);
- temp->left--;
- switch(custom->class0){
- case 1: temp->class1--;
- break;
- case 2: temp->class2--;
- break;
- case 3: temp->class3--;
- break; }
- headclient->count++;
- custom->next = headclient->next;
- headclient->next = custom;
- strcat(custom->file,custom->id);
- printf("訂票成功!祝您旅途愉快~~");
- display_client(custom);
- return 1; }
- /*****************************************************
- *功能描述:退票
- *輸入參數:id
- *輸出參數:
- *返回值:1-正確,0-錯誤
- ******************************************************/
- int returnticket(airlinehead * headline,clienthead *headclient)//退票。
- {
- printf("請輸入顧客的證件號碼:id: ");
- char id[20];
- scanf("%s",id);
- airline *airlinetemp= headline->next;
- client *clienttemp= headclient->next;
- if(NULL==airlinetemp)
- { printf("當前沒有航班信息。\n");
- return 0; }
- char line_num[10]; int rclass;
- client *delnext ;
- if(strcmp(clienttemp->id,id)==0)//要刪除的節點為第一個時。。。
- {
- strcpy(line_num,clienttemp->line_num);
- rclass=clienttemp->class0;
- headclient->next=clienttemp->next;
- delete clienttemp;
- while(airlinetemp)//修改對票客戶所對應的航班的售票信息。
- {
- if(strcmp(line_num,airlinetemp->line_num)== 0 )
- {
- airlinetemp->left++;
- switch(rclass){
- case 1: airlinetemp->class1++;
- break;
- case 2: airlinetemp->class2++;
- break;
- case 3: airlinetemp->class3++;
- break; }
- break; }
- airlinetemp = airlinetemp->next; }
- printf("退票成功!希望有機會與您繼續合作。");
- return 1; }
- while(clienttemp->next)//要刪除 的節點不是第一個時。。。
- {
- if(strcmp(clienttemp->next->id,id)==0)
- { strcpy(line_num,clienttemp->next->line_num);
- delnext = clienttemp->next->next;
- delete clienttemp->next;
- clienttemp->next=delnext;
- while(airlinetemp)//修改對票客戶所對應的航班的售票信息。
- {
- if(strcpy(line_num,airlinetemp->line_num)== 0 )
- {
- airlinetemp->left++;
- switch(rclass){
- case 1: airlinetemp->class1++;
- break;
- case 2: airlinetemp->class2++;
- break;
- case 3: airlinetemp->class3++;
- break; }
- break; }
- airlinetemp = airlinetemp->next; }
- printf("退票成功!有機會繼續合作。\n\n");
- return 1; break; }
- clienttemp = clienttemp->next; }
- printf("未找到該客戶的信息。\n");
- return 0; }
- /*****************************************************
- *功能描述:退票
- *輸入參數:id
- *輸出參數:
- *返回值:1-正確,0-錯誤
- ******************************************************/
-
-
- void main_menu()
- {
- printf("********<( ̄︶ ̄)/ 歡迎使用飛機售票系統 \( ̄︶ ̄)>******** \n\n");
- printf("*** 1---- 錄入航班信息。*** \n\n");
- printf("*** 2---- 查詢航線信息。*** \n\n");
- printf("*** 3---- 客戶訂票。***\n\n");
- printf("*** 4---- 客戶退票。*** \n\n");
- printf("*** 5---- 輸出所有航班信息。*** \n\n");
- printf("*** 6---- 修改航班信息。*** \n\n");
- printf("*** 0---- 退出系統 。*** \n\n");
- printf("**************************************************************** \n\n");}
- int main(void)
- { airlinehead *headline=new airlinehead;
- headline->count=0;
- headline->next=NULL;
- clienthead *headclient=new clienthead;
- headclient->count=0;
- headclient->next=NULL;
- while(1)
- { main_menu();
- int x;
- printf("請選擇您要進行的操作: ");
- scanf("%d",&x);
- printf("\n");
- switch(x)
- { case 1:
- int num;
- printf("請選擇您要錄入的航班的數目: ");
- scanf("%d",&num);
- printf("\n");
- import(num,headline);
- printf("\n");
- //display_all_line(headline);
- printf("航班信息成功錄入。。 ");
- printf("\n\n");
- break;
-
- case 2:
- airline *find;
- find=query(headline);
- if(find)
- {
- display_line(find); }
- break;
- case 3:
- *****限于篇幅余下內容下載附件******
復制代碼
完整的Word格式文檔51黑下載地址:
程序報告-改二.doc
(498.27 KB, 下載次數: 41)
2019-6-13 09:49 上傳
點擊文件名下載附件
航空售票系統 下載積分: 黑幣 -5
|