航班管理系統(數組版)
航班信息查詢系統
1、 導言 用所學過的 C 語言,以及鏈表相關知識,實現一個航班信息的錄入、查詢、顯示、 排序等功能。航班信息
節點設計,請參見附錄。
2、 基本功能: 使用鏈表或數組,實現以下功能:
1) 錄入(可以直接從鍵盤錄入,也可通過文件存儲)
2) 顯示所有航班信息
3) 按照查詢要求(比如日期、地點等),列出相關的航班信息。
4) 完善該項目功能。
5) 對錄入的信息進行排序(比如按起飛時間排序、按起飛地址排序等)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>#define MAX_FLIGHTS 100 // 定義最大航班數量static int flight_num = 0; // 當前航班的數量typedef struct airplane
{char number[10]; // 航班號char Start_City[20]; // 起飛城市char End_City[20]; // 到達城市// char type; //機型char Start_Time[20]; // 起飛時間char End_Time[20]; // 到達時間float Price; // 機票價格float Discount; // 機票折扣int Tickets; // 機票剩余數量
} Plane;Plane flights[MAX_FLIGHTS]; // 存儲航班信息的數組void Menu(); // 菜單
void addFlight(); // 添加
void findFlight(); // 查詢
void displayFlights(); // 顯示所有
void modifyFlight(); // 修改
void deleteFlight(); // 刪除
void Sort(); // 排序/*功能: 顯示菜單信息參數: 無返回值:無*/
void Menu()
{int choice;while (1){printf(" 航班管理系統 \n");printf("----------------------------\n");printf("|1、添加航班信息 |\n");printf("|2、顯示所有航班信息 |\n");printf("|3、查詢航班信息 |\n");printf("|4、修改航班信息 |\n");printf("|5、刪除航班信息 |\n");printf("|6、排序 |\n");printf("|0、退出 |\n");printf("----------------------------\n");printf("請輸入相應的序號選擇! \n");scanf("%d", &choice);getchar();switch (choice){case 1:addFlight();break;case 2:displayFlights();break;case 3:findFlight();break;case 4:modifyFlight();break;case 5:deleteFlight();break;case 6:Sort();break;case 0:exit(0);break;default:printf("無效的選擇,請重試!\n");}// 暫停操作printf("\n");system("pause"); // 這行代碼會使程序等待用戶按下任意鍵system("cls"); // 清屏操作}
}/*功能: 添加航班信息參數: 無返回值:無
*/
void addFlight()
{if (flight_num >= MAX_FLIGHTS){printf("無法添加更多航班,已達到最大限制!\n");return;}Plane newFlight;printf("請輸入航班號: ");gets(newFlight.number);printf("請輸入起飛城市: ");gets(newFlight.Start_City);printf("請輸入到達城市: ");gets(newFlight.End_City);printf("請輸入起飛時間: ");gets(newFlight.Start_Time);printf("請輸入到達時間: ");gets(newFlight.End_Time);printf("請輸入機票價格: ");scanf("%f", &newFlight.Price);getchar();printf("請輸入機票折扣: ");scanf("%f", &newFlight.Discount);getchar();printf("請輸入剩余票數: ");scanf("%d", &newFlight.Tickets);getchar();flights[flight_num++] = newFlight; // 將新航班添加到數組中printf("航班添加成功!\n");
}/*功能: 顯示所有航班信息參數: 無返回值:無
*/
void displayFlights()
{if (flight_num == 0){ // 檢查是否有航班信息printf("沒有可顯示的航班信息!\n");return;}printf("航班號\t\t起飛城市\t到達城市\t起飛時間\t到達時間\t機票價格\t優惠折扣\t剩余票數\n");for (int i = 0; i < flight_num; i++){printf("%s\t\t%s\t-->\t%s\t\t%s\t\t%s\t\t%.2f\t\t%.2f\t\t%d\n",flights[i].number, flights[i].Start_City, flights[i].End_City,flights[i].Start_Time, flights[i].End_Time,flights[i].Price, flights[i].Discount, flights[i].Tickets);}
}/*功能: 查詢航班信息參數: 無返回值:無
*/
void findFlight()
{if (flight_num == 0){ // 檢查是否有航班信息printf("沒有可查詢的航班信息!\n");return;}char fnum[10];printf("請輸入要查詢的航班號:");fgets(fnum, sizeof(fnum), stdin);fnum[strcspn(fnum, "\n")] = '\0'; // 去除換行符for (int i = 0; i < flight_num; i++){if (strcmp(fnum, flights[i].number) == 0){printf("航班號\t\t起飛城市\t到達城市\t起飛時間\t到達時間\t機票價格\t優惠折扣\t剩余票數\n");printf("%s\t\t%s\t\t%s\t\t%s\t\t%s\t\t%.2f\t\t%.2f\t\t%d\n",flights[i].number, flights[i].Start_City, flights[i].End_City,flights[i].Start_Time, flights[i].End_Time,flights[i].Price, flights[i].Discount, flights[i].Tickets);return;}}printf("未找到該航班!\n");
}/*功能: 修改航班信息參數: 無返回值:無
*/
void modifyFlight()
{if (flight_num == 0){ // 檢查是否有航班信息printf("沒有修改的航班信息!\n");return;}printf("請輸入要修改的航班號:");char fnum[10];int flag = 0;fgets(fnum, 10, stdin);fnum[strcspn(fnum, "\n")] = 0; // 去掉換行符for (int i = 0; i < flight_num; i++){if (strcmp(fnum, flights[i].number) == 0){flag = 1;printf("修改開始\n請輸入航班號: ");gets(flights[i].number);printf("請輸入起飛城市: ");gets(flights[i].Start_City);printf("請輸入到達城市: ");gets(flights[i].End_City);printf("請輸入起飛時間: ");gets(flights[i].Start_Time);printf("請輸入到達時間: ");gets(flights[i].End_Time);printf("請輸入機票價格: ");scanf("%f", &flights[i].Price);getchar();printf("請輸入機票折扣: ");scanf("%f", &flights[i].Discount);getchar();printf("請輸入剩余票數: ");scanf("%d", &flights[i].Tickets);getchar();printf("航班修改成功!\n");break;}}if (flag == 0){printf("未找到該航班號對應的航班信息!\n");}
}/*功能: 刪除航班信息參數: 無返回值:無
*/void deleteFlight()
{if (flight_num == 0){ // 檢查是否有航班信息printf("沒有可刪除的航班信息!\n");return;}printf("請輸入要刪除的航班號:");char fnum[10];int flag = 0;fgets(fnum, sizeof(fnum), stdin);fnum[strcspn(fnum, "\n")] = 0;for (int i = 0; i < flight_num; i++){if (strcmp(fnum, flights[i].number) == 0){flag = 1;for (int j = i; j < flight_num - 1; j++){strcpy(flights[j].number, flights[j + 1].number);strcpy(flights[j].Start_City, flights[j + 1].Start_City);strcpy(flights[j].End_City, flights[j + 1].Start_Time);strcpy(flights[j].Start_Time, flights[j + 1].Start_Time);strcpy(flights[j].End_Time, flights[j + 1].End_Time);flights[j].Price = flights[j + 1].Price;flights[j].Discount = flights[j + 1].Discount;flights[j].Tickets = flights[j + 1].Tickets;}flight_num--;printf("刪除成功!");break;}}if (!flag)printf("未找到該航班號對應的航班信息!\n");
}/*功能: 刪除航班信息參數: 無返回值:無
*/
void Sort()
{if (flight_num == 0){ // 檢查是否有航班信息printf("沒有可排序的航班信息!\n");return;}printf("請選擇排序方式:\n");printf("1.按日期升序排序\n2.按日期降序排序\n3.按價格升序排序\n4.按價格降序排序\n");int num;scanf("%d", &num);if (num == 1 || num == 2) // 1.按日期升序排序 2.按日期降序排序{for (int i = 0; i < flight_num - 1; i++){for (int j = 0; j < flight_num - i - 1; j++){if ((num == 1 && strcmp(flights[j].Start_Time, flights[j + 1].Start_Time) > 0) ||(num == 2 && strcmp(flights[j].Start_Time, flights[j + 1].Start_Time) < 0)){Plane temp = flights[j];flights[j] = flights[j + 1];flights[j + 1] = temp;}}}printf("日期排序成功!\n");}else if (num == 3 || num == 4) // 3.按價格升序排序 4.按價格降序排序{for (int i = 0; i < flight_num - 1; i++){for (int j = 0; j < flight_num - i - 1; j++){if ((num == 3 && (flights[j].Price - flights[j + 1].Price) > 0) ||(num == 4 && (flights[j].Price - flights[j + 1].Price) < 0)){Plane temp = flights[j];flights[j] = flights[j + 1];flights[j + 1] = temp;}}}printf("價格排序成功!\n");}printf("航班號\t\t起飛城市\t到達城市\t起飛時間\t到達時間\t機票價格\t優惠折扣\t剩余票數\n");for (int i = 0; i < flight_num; i++){printf("%s\t\t%s\t-->\t%s\t\t%s\t\t%s\t\t%.2f\t\t%.2f\t\t%d\n",flights[i].number, flights[i].Start_City, flights[i].End_City,flights[i].Start_Time, flights[i].End_Time,flights[i].Price, flights[i].Discount, flights[i].Tickets);}
}int main(int argc, char const *argv[])
{Menu();return 0;
}