飞机订票系统(c语言)
生活随笔
收集整理的這篇文章主要介紹了
飞机订票系统(c语言)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
飛機訂票系統(c語言)
- 一、項目背景
- 二、設計目的
- 三、項目功能需求
- 1、添加機票信息
- 2、查詢可預訂的機票信息
- 3、預定機票并輸入個人信息
- 4、修改機票信息
- 5、退票
- 6、根據目的地和最早出發時間,系統可以推薦合適的機票信息
- 7、顯示當前時間
- 四、系統的功能結構圖
- 五、功能模塊介紹
- 1、添加模塊
- 2、查找模塊
- 3、訂票模塊
- 4、修改模塊
- 5、退票模塊
- 6、顯示模塊
- 7、推薦模塊
- 8、保存模塊
- 9、時間模塊
- 六、詳細設計
- 1、主函數
- 2、添加模塊
- 3、查找模塊
- 4、訂票模塊
- 5、修改模塊
- 6、退票模塊
- 7、顯示模塊
- 8、推薦模塊
- 9、保存模塊
- 10、時間模塊
- 七、代碼
一、項目背景
? 為了免去在窗口排隊買票的麻煩,飛機訂票系統應運而生。用戶通過該系統可以快速,詳細地了解需要的信息,并提供了一個很好的購票渠道。
二、設計目的
- 如何合理設計不同數據結構來存儲航班信息、旅客信息、訂票信息等不同數據
- 如何合理設計不同的鏈表節點來封裝不同的實體信息;
- 如何合理設計多個鏈表結構來管理不同實體的若干記錄;
- 進一步強化學習鏈表的創建、插入、查找、修改和刪除等基本操作;
- 進一步強化學習內存中鏈表數據和外部文件之間的存取操作;
- 如何利用time.h中的函數獲取系統日期時間
三、項目功能需求
1、添加機票信息
- 能夠添加機票的航班號、起飛降落時間、目的地、出發地、票價、可定的剩余票數以及折扣信息等。
2、查詢可預訂的機票信息
- 能夠根據用戶的具體需求即航班號或目的地,查詢可定的機票并輸出相應的機票信息,支持標準格式輸出多條機票信息。
3、預定機票并輸入個人信息
- 查詢機票后,根據用戶的選擇,決定是否訂票,并輸入信息。
4、修改機票信息
- 能修改已經存在的機票信息。
5、退票
6、根據目的地和最早出發時間,系統可以推薦合適的機票信息
7、顯示當前時間
四、系統的功能結構圖
五、功能模塊介紹
1、添加模塊
- 可以連續添加多條航班信息,包括航班號、出發城市、到達城市、出發時間、到達時間、票價、折扣信息、票數
2、查找模塊
- 用戶在訂票之前需要先查詢滿足自己出行需要的機票信息,本功能模塊支持按照“航班號”查詢和按照“目的地”查詢兩種方式
3、訂票模塊
- 輸入目的地信息,可以輸出所有滿足該目的地的航班信息,并提示用戶是否訂票
4、修改模塊
- 輸入需要修改的航班號,可以修改航班信息
5、退票模塊
- 能支持用戶退票操作
6、顯示模塊
- 顯示模塊可以展示所有航班信息,供旅客查看選擇
7、推薦模塊
- 推薦模塊的功能是根據旅客輸入的目的地信息和最早出發時間,向旅客推薦滿足要求的航班信息,幫助旅客快速搜索符合時間要求的航班
8、保存模塊
- 能將航班信息和旅客訂票信息保存到磁盤文件中,再次啟動系統時,則可以自動讀取文件中的航班信息和旅客訂票信息
9、時間模塊
- 支持實時查詢當前時間功能
六、詳細設計
1、主函數
功能設計
- 主函數用于實現主菜單的顯示,并響應用戶對菜單項的選擇。
- 本系統的主函數主要兩大功能:保存信息和菜單選擇。
- 某個功能執行完之后,還能按任意鍵自動回到主菜單,便于用戶進行其他操作。
2、添加模塊
功能設計
- 用于對飛機班次,始發地,目的地,起飛時間,降落時間,票價,折扣以及所剩票數等信息的輸入與保存。
添加模塊流程圖
3、查找模塊
功能設計
- 用于根據輸入的飛機班次或到達城市來進行查找,了解航班的信息。
- 提供了兩種查詢方式:一是根據飛機班次查詢,二是根據到達城市查詢。
4、訂票模塊
功能設計
- 用于根據用戶輸入的城市進行查詢,在屏幕上顯示滿足條件的飛機班次信息。
- 從中選擇自己想要預定的機票,并根據提示輸入個人信息。
5、修改模塊
功能設計
- 用于對已添加的飛機班次,時間,地點,票價等信息的修改。
6、退票模塊
功能設計
- 用于用戶對已經預定的飛機票進行退票。
7、顯示模塊
功能設計
- 用于對輸入的航班信息和經過修改的航班信息進行整理輸出,方便用戶查看。
8、推薦模塊
功能設計
- 用于對用戶提供的信息,系統檢索后提供合適的機票,以便用戶選擇適合自己時間的班次后進行預訂。
9、保存模塊
功能設計
- 應用文件處理來將航班信息和訂票人信息保存到指定的磁盤文件中。
10、時間模塊
功能設計
- 為了更好地方便用戶訂票時的實際需求,本系統提供了查詢當地時間的功能。
七、代碼
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> #include <time.h> #define HEAD1 " *************************Airplane Ticket Booking*****************************\n" #define HEAD2 " | Flight |Start City| Dest City|DepartureTime|ArrivalTime|price | number |\n" #define HEAD3 " |----------|----------|----------|-------------|-----------|-------|--------|\n" #define FORMAT " |%-10s|%-10s|%-10s|%-12s |%-10s | %-.2f| %4d |\n" #define DATA pst->stData.acFlight,pst->stData.acOrigin,pst->stData.acDest,pst->stData.acTakeOffTime,pst->stData.acReceiveTime,pst->stData.fPrice,pst->stData.iNumint iSave = 0; /************************************** 定義飛機票信息以及訂票人的信息相關結構體 **************************************//*定義儲存機票的結構體*/ struct AirPlane {char acFlight[10]; /*航班號*/char acOrigin[10]; /*出發地*/char acDest[10]; /*目的地*/char acTakeOffTime[10]; /*起飛時間*/char acReceiveTime[10]; /*降落時間*/float fPrice; /*票價*/char acDiscount[4]; /*折扣*/int iNum; /*剩余票數*/};/*定義購票者信息的結構體*/ struct Man {char acName[20]; /*姓名*/char acID[20]; /*身份證號*/char acSex[2]; /*性別*/int iBookNum; /*購票數*/char acBookFlight[10]; /*訂購航班號*/ };/*定義機票信息節點的結構體*/ struct PlaneNode {struct AirPlane stData;struct PlaneNode *pstNext; };/*定義訂票人信息節點的結構體*/ struct ManNode {struct Man stData;struct ManNode *pstNext; };/*定義相關表頭打印函數*/ void PrintHead() {printf(HEAD1);printf(HEAD2);printf(HEAD3); } void PrintData(struct PlaneNode*stLp) {struct PlaneNode *pst = stLp;printf(FORMAT, DATA); }/*菜單界面*/ void Menu() {puts("**************************************************");puts("* Welcome to the airplane tickets booking system *");puts("*------------------------------------------------*");puts("* choose the following operations(0-9); *");puts("*------------------------------------------------*");puts("* 1.Insert flights 2.Search flights *");puts("* 3.Book tickets 4.Modify flight data *");puts("* 5.Show flights 6.Recommend flights *");puts("* 7.Refund tickets 8.Show current time *");puts("* 9.Save to files 0.quit *");puts("**************************************************"); } /*顯示時間函數*/ void NowTime() {time_t lt;lt = time(NULL);printf("現在的時間是:%s\n", ctime(<)); }/*添加機票函數*/ void Insert(struct PlaneNode* pstPlaneNodeHead) {struct PlaneNode *pstHead,*pstTail, *pstCur, *pstNew;char acFlight[10];pstHead = pstTail = pstPlaneNodeHead;while (pstTail->pstNext != NULL){pstTail = pstTail->pstNext; /*讓ptail指向最后一個節點*/}while (1){printf("Input the new flight number(-1 to end):");scanf("%s", acFlight);if (strcmp(acFlight, "-1") == 0)break;pstCur = pstPlaneNodeHead->pstNext;while (pstCur != NULL){if (strcmp(acFlight, pstCur->stData.acFlight) == 0){printf("this flight %s exists!\n", acFlight);return;/*如果航班號已存在,則返回*/}pstCur = pstCur->pstNext;}/*如果航班號沒有和現有記錄中的航班號重復,則新建一個鏈表節點*/pstNew = (struct PlaneNode*)malloc(sizeof(struct PlaneNode));strcpy(pstNew->stData.acFlight, acFlight);printf("Input the Start City:\n");scanf("%s", pstNew->stData.acOrigin);printf("Input the Dest City:\n");scanf("%s", pstNew->stData.acDest);printf("Input the Departure Time (Format 00:00):\n");scanf("%s", pstNew->stData.acTakeOffTime);printf("Input the Arrival Time (Format 00:00):\n");scanf("%s", pstNew->stData.acReceiveTime);printf("Input the price of ticket:\n");scanf("%f", &pstNew->stData.fPrice);printf("Input the discount (Format 0.0):\n");scanf("%s", pstNew->stData.acDiscount);printf("Input the number of the tickets:\n");scanf("%d", &pstNew->stData.iNum);pstNew->pstNext = NULL;pstTail->pstNext = pstNew;pstTail = pstNew;iSave = 1;/*有新的航班信息,保存標志置為1,若退出需提示是否保存信息*/} }/*查找機票函數*/ void Search(struct PlaneNode* pstPlaneNodeHead) {struct PlaneNode *pstPlaneNode;int iSel = 0, iCount = 0;char acFlight[10], acDest[10];pstPlaneNode = pstPlaneNodeHead->pstNext;if (pstPlaneNode == NULL){printf("No flight record!\n");return;}printf("Choose one way according to:\n1.flight number;\n2.Dest:\n");scanf("%d", &iSel);if (iSel == 1){printf("Input the flight number:");scanf("%s", acFlight);PrintHead();while (pstPlaneNode != NULL){if (strcmp(pstPlaneNode->stData.acFlight, acFlight) == 0){PrintData(pstPlaneNode);break;/*由于航班號是唯一的,找到一條即可退出*/}elsepstPlaneNode = pstPlaneNode->pstNext;}/*遍歷一遍,均沒有中途break,則提示用戶沒有記錄*/if (pstPlaneNode == NULL)printf("Sorry, no record!\n");}else if (iSel == 2){printf("Input the Dest City:");scanf("%s", acDest);PrintHead();while (pstPlaneNode != NULL){if (strcmp(pstPlaneNode->stData.acDest, acDest) == 0){/*由于相同目的地的航班可能是多條,所以需要遍歷完整個鏈表*/PrintData(pstPlaneNode);iCount++;}pstPlaneNode = pstPlaneNode->pstNext;}if (iCount == 0)/*如果記錄數仍為0,則提示用戶沒有記錄*/printf("Sorry, no record!\n");}else{printf("Sorry, please input right number:1-2\n");return;} }/*訂票函數*/void Book(struct ManNode* pstManNodeHead, struct PlaneNode* pstPlaneNodeHead) {struct PlaneNode *pstPlaneNodeCur, *astPlaneNode[10]; /*定義臨時指針和指針數組*/struct ManNode *pstManNodeCur, *pstManNodeTemp = 0;char acDest[10], acID[20], acName[20], acSex[2], acDecision[2], acFlight[10];/*iNum表示預定票數,iRecord記錄符合要求的航班數*/int iNum = 0, iRecord = 0, k = 0, iFlag = 0;pstManNodeCur = pstManNodeHead;/*接收訂票人信息鏈表的頭指針*/while (pstManNodeCur->pstNext != NULL)pstManNodeCur = pstManNodeCur->pstNext;printf("Input the Dest City:\n");scanf("%s", acDest);/*輸入目的地*/pstPlaneNodeCur = pstPlaneNodeHead->pstNext;while (pstPlaneNodeCur != NULL)/*循環條件為鏈表不為空*/{if (strcmp(pstPlaneNodeCur->stData.acDest, acDest) == 0)/*比較目的地*/{astPlaneNode[iRecord++] = pstPlaneNodeCur;/*目的地吻合的節點地址存到指針數組中*/}pstPlaneNodeCur = pstPlaneNodeCur->pstNext;/*指針后移*/}printf("\nthere are %d flight you can choose!\n", iRecord);PrintHead();/*輸出表頭*/for (k = 0; k < iRecord; k++)/*循環輸出指針數組中的指針指向的航班信息*/PrintData(astPlaneNode[k]);if (iRecord == 0)/*若記錄為0,表示沒有符合條件的航班*/printf("sorry,no flight you can book!\n");else{printf("do you want to book it<y(Y)/n(N)>?\n");/*提示用戶是否預定*/scanf("%s", acDecision);getchar(); /*提取多余的回車符,否則下面輸入姓名的gets函數將獲得一個回車符*/if (strcmp(acDecision, "y") == 0 || strcmp(acDecision, "Y") == 0){printf("Input your information!\n");/*輸入訂票的詳細信息*/pstManNodeTemp = (struct ManNode*)malloc(sizeof(struct ManNode));printf("Input your name:");gets(acName);/*由于姓和名中間會有空格,只能用gets函數,不能用scanf結合%s*/strcpy(pstManNodeTemp->stData.acName, acName);printf("Input your id:");scanf("%s", acID);strcpy(pstManNodeTemp->stData.acID, acID);printf("Input your sex (M/F):");scanf("%s", acSex);strcpy(pstManNodeTemp->stData.acSex, acSex);printf("Input the flight number:");scanf("%s", acFlight);strcpy(pstManNodeTemp->stData.acBookFlight, acFlight);for (k = 0; k<iRecord; k++)if (strcmp(astPlaneNode[k]->stData.acFlight, acFlight) == 0){if (astPlaneNode[k]->stData.iNum < 1)/*判斷是否有剩余的票*/{printf("no ticket!");return;}printf("remain %d tickets\n", astPlaneNode[k]->stData.iNum);iFlag = 1;break;}if (iFlag == 0){printf("error");return;}printf("Input the book number:");scanf("%d", &iNum);/*輸入預定的票數,剩余票數相應減少*/astPlaneNode[k]->stData.iNum = astPlaneNode[k]->stData.iNum - iNum;pstManNodeTemp->stData.iBookNum = iNum;pstManNodeCur->pstNext = pstManNodeTemp;pstManNodeTemp->pstNext = NULL;pstManNodeCur = pstManNodeTemp;printf("success!\n");iSave = 1;}} } struct ManNode *FindMan(struct ManNode* pstManNodeHead, char acID[20]) {struct ManNode *pstManNodeCur;pstManNodeCur = pstManNodeHead->pstNext;while (pstManNodeCur){if (strcmp(pstManNodeCur->stData.acID, acID) == 0){return pstManNodeCur;}pstManNodeCur = pstManNodeCur->pstNext;}return NULL; }struct PlaneNode *FindPlane(struct PlaneNode* pstPlaneNodeHead, char acFlight[10]) {struct PlaneNode *pstPlaneNodeCur;pstPlaneNodeCur = pstPlaneNodeHead->pstNext;while (pstPlaneNodeCur){if (strcmp(pstPlaneNodeCur->stData.acFlight, acFlight) == 0){//iMark = 1;return pstPlaneNodeCur;}pstPlaneNodeCur = pstPlaneNodeCur->pstNext;}return NULL; }/*退票系統*/ void Refund(struct ManNode* pstManNodeHead, struct PlaneNode* pstPlaneNodeHead) {struct ManNode *pstManNodeCur, *pstManNodeFind = 0;struct PlaneNode *pstPlaneNodeFind = 0;char acID[20], acDecision[2];int iNum, iBookNum;printf("\nInput your ID:");scanf("%s", acID);pstManNodeFind = FindMan(pstManNodeHead, acID);if (pstManNodeFind == NULL)printf("can't find!\n");else /*找到了相應的旅客訂票信息*/{printf("\t\tthis is your tickets:\n");printf("id number:%s\n", pstManNodeFind->stData.acID);printf("name:%s\n", pstManNodeFind->stData.acName);printf("sex:%s\n", pstManNodeFind->stData.acSex);printf("book flight:%s\n",pstManNodeFind->stData.acBookFlight);printf("book number:%d\n", pstManNodeFind->stData.iBookNum);printf("do you want to cancel it?<y/n>");scanf("%s", acDecision);if (strcmp(acDecision, "y") == 0 || strcmp(acDecision, "Y") == 0){/*將pstManNodeCur定位到指向pstManNodeFind前面那個節點*/pstManNodeCur = pstManNodeHead;while (pstManNodeCur->pstNext != pstManNodeFind)pstManNodeCur = pstManNodeCur->pstNext;/*找到該旅客訂票信息中對應的航班記錄*/pstPlaneNodeFind = FindPlane(pstPlaneNodeHead, pstManNodeFind->stData.acBookFlight);if (pstPlaneNodeFind != NULL)/*退票后,對應航班的剩余票數相應增加*/{iNum = pstPlaneNodeFind->stData.iNum;iBookNum = pstManNodeFind->stData.iBookNum;pstPlaneNodeFind->stData.iNum = iNum + iBookNum;} pstManNodeCur->pstNext = pstManNodeFind->pstNext;free(pstManNodeFind);/*釋放該乘客訂票記錄的鏈表節點空間*/printf("successful!\n");/*航班信息有調整,保存標志置為1,退出系統時提示用戶是否保存*/iSave = 1;}} }/*修改機票信息函數*/ void Modify(struct PlaneNode* pstPlaneNodeHead) {struct PlaneNode *pstPlaneNodeCur;char acFlight[10];pstPlaneNodeCur = pstPlaneNodeHead->pstNext;if (pstPlaneNodeCur == NULL){printf("no flight to modify!\n");return;}else{printf("Input the flight number you want to modify:");scanf("%s", acFlight);while (pstPlaneNodeCur != NULL){if (strcmp(pstPlaneNodeCur->stData.acFlight, acFlight) == 0)break;elsepstPlaneNodeCur = pstPlaneNodeCur->pstNext;}if (pstPlaneNodeCur){printf("Input new Start City:\n");scanf("%s", pstPlaneNodeCur->stData.acOrigin);printf("Input new Dest City:\n");scanf("%s", pstPlaneNodeCur->stData.acDest);printf("Input new Departure Time:\n");scanf("%s", pstPlaneNodeCur->stData.acTakeOffTime);printf("Input new Arrival Time:\n");scanf("%s", pstPlaneNodeCur->stData.acReceiveTime);printf("Input new price of ticket:\n");scanf("%f", &pstPlaneNodeCur->stData.fPrice);printf("Input new discount:\n");scanf("%s", pstPlaneNodeCur->stData.acDiscount);printf("Input new number of the tickets:\n");scanf("%d", &pstPlaneNodeCur->stData.iNum);printf("successful!\n");iSave = 1;return;}elseprintf("\tcan't find your ticket!\n");} }/*顯示機票信息函數*/ void Show(struct PlaneNode* pstPlaneNodeHead) {struct PlaneNode *pstPlaneNodeCur;pstPlaneNodeCur = pstPlaneNodeHead->pstNext;PrintHead();if (pstPlaneNodeHead->pstNext == NULL){printf("no flight ticket!\n");}else{while (pstPlaneNodeCur != NULL){PrintData(pstPlaneNodeCur);pstPlaneNodeCur = pstPlaneNodeCur->pstNext;}} }/*快速終點站推薦機票函數*/ void Recommend(struct PlaneNode* pstPlaneNodeHead) {struct PlaneNode *pstPlaneNodeCur;char acDest[10],acTime[10];int iNum = 0;pstPlaneNodeCur = pstPlaneNodeHead->pstNext;printf("Input your destination:");scanf("%s", acDest);printf("Input the earliest time you can take:");scanf("%s",acTime);PrintHead();while (pstPlaneNodeCur != NULL){if (strcmp(pstPlaneNodeCur->stData.acDest, acDest) == 0){if (strcmp(acTime, pstPlaneNodeCur->stData.acTakeOffTime) < 0){PrintData(pstPlaneNodeCur);iNum++;}}pstPlaneNodeCur = pstPlaneNodeCur->pstNext;}printf("there are %d flight you can take!\n", iNum);if (iNum != 0){printf("please choose 3rd operation to book it!\n");} }/*保存機票信息函數*/ void SavePlane(struct PlaneNode* pstPlaneNodeHead) {FILE *pfPlane;struct PlaneNode *pstPlaneNodeCur;int iCount = 0, iFlag = 1;pfPlane = fopen("plane.txt", "wb");if (pfPlane == NULL){printf("the file can't be opened!");return;}pstPlaneNodeCur = pstPlaneNodeHead->pstNext;while (pstPlaneNodeCur != NULL){if (fwrite(pstPlaneNodeCur, sizeof(struct PlaneNode), 1, pfPlane) == 1){pstPlaneNodeCur = pstPlaneNodeCur->pstNext;iCount++;}else{iFlag = 0;break;}}if (iFlag){printf("you have save %d flights!\n", iCount);iSave = 0;}fclose(pfPlane); }/*保存訂票人信息函數*/ void SaveMan(struct ManNode* pstManNodeHead) {FILE *pfMan;struct ManNode *pstManNodeCur;int iCount = 0, iFlag = 1;pfMan = fopen("man.txt", "wb");if (pfMan == NULL){printf("the file can't bo opened!");return;}pstManNodeCur = pstManNodeHead->pstNext;while (pstManNodeCur != NULL){if (fwrite(pstManNodeCur, sizeof(struct ManNode), 1, pfMan) == 1){pstManNodeCur = pstManNodeCur->pstNext;iCount++;}else{iFlag = 0;break;}} }int main() {FILE *pfPlane, *pfMan;struct PlaneNode *pstPlaneNodeTemp, *pstPlaneNodeHead, *pstPlaneNodeCur;struct ManNode *pstManNodeTemp, *pstManNodeHead, *pstManNodeCur;int iSel = 0;char c1;pstPlaneNodeHead = (struct PlaneNode*)malloc(sizeof(struct PlaneNode));pstPlaneNodeHead->pstNext = NULL;pstPlaneNodeCur = pstPlaneNodeHead;pstManNodeHead = (struct ManNode*)malloc(sizeof(struct ManNode));pstManNodeHead->pstNext = NULL;pstManNodeCur = pstManNodeHead;pfPlane = fopen("plane.txt", "ab+");if (pfPlane == NULL){printf("can't open plane.txt!");return 0;}while (!feof(pfPlane)){pstPlaneNodeTemp = (struct PlaneNode*)malloc(sizeof(struct PlaneNode));if (fread(pstPlaneNodeTemp, sizeof(struct PlaneNode), 1, pfPlane) == 1){pstPlaneNodeTemp->pstNext = NULL;pstPlaneNodeCur->pstNext = pstPlaneNodeTemp;pstPlaneNodeCur = pstPlaneNodeTemp;}}free(pstPlaneNodeTemp);fclose(pfPlane);pfMan = fopen("man.txt", "rb+");if (pfMan == NULL){printf("can't open man.txt!");return 0;}while (!feof(pfMan)){pstManNodeTemp = (struct ManNode*)malloc(sizeof(struct ManNode));if (fread(pstPlaneNodeHead, sizeof(struct ManNode), 1, pfMan) == 1){pstManNodeTemp->pstNext = NULL;pstManNodeCur->pstNext = pstManNodeTemp;pstManNodeCur = pstManNodeTemp;}}free(pstManNodeTemp);fclose(pfMan);while (1){system("cls");Menu();printf("Input 0-9 operations:");scanf("%d", &iSel);getchar();/*取走數字后面多余的回車符*/system("cls");if (iSel == 0){if (iSave == 1){printf("do you want to save?<y/n>");scanf("%c", &c1);if (c1 == 'y' || c1 == 'Y'){SaveMan(pstManNodeHead);SavePlane(pstPlaneNodeHead);}}break;}switch (iSel){case 1:Insert(pstPlaneNodeHead); break;case 2: Search(pstPlaneNodeHead); break;case 3: Book(pstManNodeHead, pstPlaneNodeHead); break;case 4:Modify(pstPlaneNodeHead); break;case 5:Show(pstPlaneNodeHead); break;case 6:Recommend(pstPlaneNodeHead); break;case 7:Refund(pstManNodeHead, pstPlaneNodeHead); break;case 8:NowTime(); break;case 9:SaveMan(pstManNodeHead); SavePlane(pstPlaneNodeHead); break;case 0:return 0;}printf("\nplease press any key to continue.......\n");getch();} }總結
以上是生活随笔為你收集整理的飞机订票系统(c语言)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在vpp中做nat实验
- 下一篇: vodplayer.exe