鱼C论坛

 找回密码
 立即注册
查看: 1387|回复: 7

[复制链接]
发表于 2024-9-19 17:10:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
.巨人航空公司的飞机由12个座位组成,它每天飞行一个航班,按照下面的功能,写一个座位预定程序:

1)、程序使用一个含12个结构的数组,每个结构要包括一个用于标识座位的编号,一个标识座位是否已经分配出去的标记,座位预订人的姓名和性别。

2)、程序显示并实现以下菜单功能

1、显示所有未被分配的空座位编号

2、显示已经卖出去的座位编号,并能知道乘客姓名以及性别

3、买票,如果没有余票,则提示购票失败

4、退票,将系统已经退票的座位号返还给系统

5、退出系统

提示:

结构体成员     座位编号,座位是否售出标志,乘客姓名,乘客性别

1.)准备工作    给座位编号,标记为未售出

2.)做其他工作   通过枚举类型去做, 按键选菜单功能,选中某一项调用某一个函数

3.)编写功能函数
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2024-9-19 17:13:47 | 显示全部楼层
好的,鱼油,我们可以用C语言来实现这个座位预定程序。让我们一步一步来解决这个问题:

### 第一步:定义结构体来存储座位信息

  1. #include <stdio.h>
  2. #include <string.h>

  3. #define TOTAL_SEATS 12

  4. typedef struct {
  5.     int seat_number;
  6.     int is_sold; // 0表示未售出,1表示已售出
  7.     char name[20];
  8.     char gender[10];
  9. } Seat;
复制代码


### 第二步:定义函数原型和初始化座位数组

我们需要一些函数来处理不同的功能,比如显示空座位、显示已售座位、预定和退票。

  1. void init_seats(Seat seats[]);
  2. void show_empty_seats(Seat seats[]);
  3. void show_sold_seats(Seat seats[]);
  4. void buy_ticket(Seat seats[]);
  5. void return_ticket(Seat seats[]);
  6. void print_menu();
  7. int get_choice();
复制代码


定义并初始化座位数组:

  1. void init_seats(Seat seats[]) {
  2.     for (int i = 0; i < TOTAL_SEATS; i++) {
  3.         seats[i].seat_number = i + 1;
  4.         seats[i].is_sold = 0;
  5.         strcpy(seats[i].name, "");
  6.         strcpy(seats[i].gender, "");
  7.     }
  8. }
复制代码


### 第三步:实现功能函数

1. 显示所有未被分配的空座位编号

  1. void show_empty_seats(Seat seats[]) {
  2.     printf("空座位编号:\n");
  3.     for (int i = 0; i < TOTAL_SEATS; i++) {
  4.         if (seats[i].is_sold == 0) {
  5.             printf("%d ", seats[i].seat_number);
  6.         }
  7.     }
  8.     printf("\n");
  9. }
复制代码


2. 显示已卖出的座位编号及乘客信息

  1. void show_sold_seats(Seat seats[]) {
  2.     printf("已卖出座位编号及乘客信息:\n");
  3.     for (int i = 0; i < TOTAL_SEATS; i++) {
  4.         if (seats[i].is_sold == 1) {
  5.             printf("座位号: %d, 姓名: %s, 性别: %s\n", seats[i].seat_number, seats[i].name, seats[i].gender);
  6.         }
  7.     }
  8. }
复制代码


3. 买票功能

  1. void buy_ticket(Seat seats[]) {
  2.     int seat_number;
  3.     printf("输入想要预定的座位号(1-12): ");
  4.     scanf("%d", &seat_number);
  5.     if (seat_number < 1 || seat_number > TOTAL_SEATS || seats[seat_number - 1].is_sold) {
  6.         printf("购票失败!该座位号无效或已售出。\n");
  7.         return;
  8.     }
  9.     printf("输入姓名: ");
  10.     scanf("%s", seats[seat_number - 1].name);
  11.     printf("输入性别: ");
  12.     scanf("%s", seats[seat_number - 1].gender);
  13.     seats[seat_number - 1].is_sold = 1;
  14.     printf("购票成功!\n");
  15. }
复制代码


4. 退票功能

  1. void return_ticket(Seat seats[]) {
  2.     int seat_number;
  3.     printf("输入想要退的座位号(1-12): ");
  4.     scanf("%d", &seat_number);
  5.     if (seat_number < 1 || seat_number > TOTAL_SEATS || !seats[seat_number - 1].is_sold) {
  6.         printf("退票失败!该座位号无效或未售出。\n");
  7.         return;
  8.     }
  9.     seats[seat_number - 1].is_sold = 0;
  10.     strcpy(seats[seat_number - 1].name, "");
  11.     strcpy(seats[seat_number - 1].gender, "");
  12.     printf("退票成功!\n");
  13. }
复制代码


### 第四步:打印菜单和获取用户选择

  1. void print_menu() {
  2.     printf("菜单:\n");
  3.     printf("1. 显示所有未被分配的空座位编号\n");
  4.     printf("2. 显示已卖出座位编号及乘客信息\n");
  5.     printf("3. 买票\n");
  6.     printf("4. 退票\n");
  7.     printf("5. 退出系统\n");
  8.     printf("请输入选择(1-5): ");
  9. }

  10. int get_choice() {
  11.     int choice;
  12.     scanf("%d", &choice);
  13.     return choice;
  14. }
复制代码


### 第五步:主函数来控制整体流程

  1. int main() {
  2.     Seat seats[TOTAL_SEATS];
  3.     init_seats(seats);

  4.     while (1) {
  5.         print_menu();
  6.         int choice = get_choice();
  7.         switch (choice) {
  8.             case 1:
  9.                 show_empty_seats(seats);
  10.                 break;
  11.             case 2:
  12.                 show_sold_seats(seats);
  13.                 break;
  14.             case 3:
  15.                 buy_ticket(seats);
  16.                 break;
  17.             case 4:
  18.                 return_ticket(seats);
  19.                 break;
  20.             case 5:
  21.                 printf("退出系统\n");
  22.                 return 0;
  23.             default:
  24.                 printf("无效选择,请重新输入。\n");
  25.         }
  26.     }

  27.     return 0;
  28. }
复制代码


这样,我们就完成了一个简单的座位预定程序。希望这个代码能帮助你理解这个过程。如果有任何问题,请随时提问!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-9-19 17:17:17 | 显示全部楼层
详细讲解一下代码思路,及代码实现
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-9-19 17:17:36 | 显示全部楼层
轻语远歌 发表于 2024-09-19 17:17
详细讲解一下代码思路,及代码实现


好的鱼油,我们来详细讲解一下代码的思路以及具体的实现。

### 1. 代码思路

1. **定义结构体:** 结构体包含座位编号(int)、座位是否已经售出(int)、乘客姓名(char数组)和乘客性别(char)。

2. **初始化座位数组:** 设置座位编号为0到11,所有座位初始状态为未售出,乘客信息为空。

3. **编写函数:**
    - 显示所有未分配的座位编号。
    - 显示已经卖出去的座位编号,显示对应的姓名和性别。
    - 买票操作,查询座位是否已售出,售出时记录乘客信息。
    - 退票操作,将座位状态标记为未售出。
    - 退出系统,程序结束。

4. **菜单功能:** 使用一个循环显示菜单,接受用户输入的选择,根据选择调用相应的函数。

### 2. 代码实现

  1. #include <stdio.h>
  2. #include <string.h>

  3. #define TOTAL_SEATS 12

  4. typedef struct {
  5.     int seatNumber;
  6.     int isSold;
  7.     char name[50];
  8.     char gender;
  9. } Seat;

  10. // 初始化座位
  11. void initializeSeats(Seat seats[]) {
  12.     for (int i = 0; i < TOTAL_SEATS; ++i) {
  13.         seats[i].seatNumber = i + 1;
  14.         seats[i].isSold = 0;
  15.         memset(seats[i].name, 0, sizeof(seats[i].name));
  16.         seats[i].gender = '\0';
  17.     }
  18. }

  19. // 显示所有未分配的空座位编号
  20. void displayAvailableSeats(Seat seats[]) {
  21.     printf("Available seats: \n");
  22.     for (int i = 0; i < TOTAL_SEATS; ++i) {
  23.         if (!seats[i].isSold) {
  24.             printf("Seat %d\n", seats[i].seatNumber);
  25.         }
  26.     }
  27. }

  28. // 显示已经卖出去的座位编号,乘客姓名以及性别
  29. void displaySoldSeats(Seat seats[]) {
  30.     printf("Sold seats: \n");
  31.     for (int i = 0; i < TOTAL_SEATS; ++i) {
  32.         if (seats[i].isSold) {
  33.             printf("Seat %d - Name: %s, Gender: %c\n", seats[i].seatNumber, seats[i].name, seats[i].gender);
  34.         }
  35.     }
  36. }

  37. // 买票
  38. void buyTicket(Seat seats[]) {
  39.     int seatNumber;
  40.     printf("Enter seat number to buy (1-12): ");
  41.     scanf("%d", &seatNumber);

  42.     if (seatNumber < 1 || seatNumber > 12) {
  43.         printf("Invalid seat number!\n");
  44.         return;
  45.     }

  46.     if (seats[seatNumber - 1].isSold) {
  47.         printf("Seat already sold!\n");
  48.     } else {
  49.         printf("Enter your name: ");
  50.         scanf("%s", seats[seatNumber - 1].name);
  51.         printf("Enter your gender (M/F): ");
  52.         scanf(" %c", &seats[seatNumber - 1].gender); // 注意前面有个空格,以处理上一个输入的回车问题
  53.         seats[seatNumber - 1].isSold = 1;
  54.         printf("Ticket bought successfully!\n");
  55.     }
  56. }

  57. // 退票
  58. void cancelTicket(Seat seats[]) {
  59.     int seatNumber;
  60.     printf("Enter seat number to cancel (1-12): ");
  61.     scanf("%d", &seatNumber);

  62.     if (seatNumber < 1 || seatNumber > 12) {
  63.         printf("Invalid seat number!\n");
  64.         return;
  65.     }

  66.     if (!seats[seatNumber - 1].isSold) {
  67.         printf("Seat not sold yet!\n");
  68.     } else {
  69.         seats[seatNumber - 1].isSold = 0;
  70.         memset(seats[seatNumber - 1].name, 0, sizeof(seats[seatNumber - 1].name));
  71.         seats[seatNumber - 1].gender = '\0';
  72.         printf("Ticket canceled successfully!\n");
  73.     }
  74. }

  75. // 显示菜单并获取用户输入
  76. void displayMenu() {
  77.     printf("\nMenu:\n");
  78.     printf("1. Display available seats\n");
  79.     printf("2. Display sold seats\n");
  80.     printf("3. Buy ticket\n");
  81.     printf("4. Cancel ticket\n");
  82.     printf("5. Exit\n");
  83.     printf("Enter your choice: ");
  84. }

  85. int main() {
  86.     Seat seats[TOTAL_SEATS];
  87.     initializeSeats(seats);

  88.     int choice;
  89.     while (1) {
  90.         displayMenu();
  91.         scanf("%d", &choice);

  92.         switch (choice) {
  93.             case 1:
  94.                 displayAvailableSeats(seats);
  95.                 break;
  96.             case 2:
  97.                 displaySoldSeats(seats);
  98.                 break;
  99.             case 3:
  100.                 buyTicket(seats);
  101.                 break;
  102.             case 4:
  103.                 cancelTicket(seats);
  104.                 break;
  105.             case 5:
  106.                 printf("Exiting...\n");
  107.                 return 0;
  108.             default:
  109.                 printf("Invalid choice!\n");
  110.         }
  111.     }

  112.     return 0;
  113. }
复制代码


### 3. 代码解释

- **结构体定义:** `Seat` 定义了每个座位包含的属性。
- **初始化函数:** `initializeSeats(Seat seats[])` 初始化每个座位的编号和状态。
- **显示功能:** `displayAvailableSeats()` 和 `displaySoldSeats()` 用于显示座位的状态。
- **预定功能:** `buyTicket()` 用于用户买票,更新座位的状态和乘客信息。
- **退订功能:** `cancelTicket()` 用于用户退票,重置座位的状态和乘客信息。
- **菜单显示和输入选择:** `displayMenu()` 用于显示菜单,主循环读取用户输入并调用相应的功能。

希望这些解释能够帮到您。哪怕您有进一步的问题,欢迎随时提问!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-9-19 19:18:52 | 显示全部楼层
FishC 发表于 2024-9-19 17:17
好的鱼油,我们来详细讲解一下代码的思路以及具体的实现。

### 1. 代码思路

通过枚举类型去做, 菜单功能和用户输入,
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-9-19 19:19:10 | 显示全部楼层
轻语远歌 发表于 2024-09-19 19:18
通过枚举类型去做, 菜单功能和用户输入,


好的,鱼油。我们可以通过枚举类型来管理菜单选项,并结合用户输入来实现功能。以下是详细的步骤和代码实现:

### 1. 定义结构体与枚举类型

首先,我们定义一个结构体来存储座位信息,同时定义一个枚举类型来表示不同的菜单选项。

  1. #include <stdio.h>
  2. #include <string.h>

  3. #define TOTAL_SEATS 12
  4. #define NAME_LENGTH 50

  5. // 结构体定义
  6. typedef struct {
  7.     int seatNumber;
  8.     int isBooked;
  9.     char passengerName[NAME_LENGTH];
  10.     char passengerGender;
  11. } Seat;

  12. // 枚举类型定义
  13. typedef enum {
  14.     SHOW_EMPTY_SEATS = 1,
  15.     SHOW_BOOKED_SEATS,
  16.     BOOK_SEAT,
  17.     CANCEL_SEAT,
  18.     EXIT
  19. } MenuOption;
复制代码


### 2. 初始化座位

我们可以编写一个函数来初始化所有座位,使它们标记为未售出。

  1. void initializeSeats(Seat seats[], int totalSeats) {
  2.     for (int i = 0; i < totalSeats; i++) {
  3.         seats[i].seatNumber = i + 1;
  4.         seats[i].isBooked = 0; // 0表示未售出
  5.         strcpy(seats[i].passengerName, "");
  6.         seats[i].passengerGender = ' ';
  7.     }
  8. }
复制代码


### 3. 显示菜单选项

我们用一个简单的函数来显示菜单选项,并从用户那里获取输入。

  1. MenuOption getMenuOption() {
  2.     int option;
  3.     printf("\nMenu:\n");
  4.     printf("1. 显示所有未被分配的空座位编号\n");
  5.     printf("2. 显示已经卖出去的座位编号,并能知道乘客姓名以及性别\n");
  6.     printf("3. 买票\n");
  7.     printf("4. 退票\n");
  8.     printf("5. 退出系统\n");
  9.     printf("请选择一个选项: ");
  10.     scanf("%d", &option);
  11.     return (MenuOption)option;
  12. }
复制代码


### 4. 显示空座位

  1. void showEmptySeats(Seat seats[], int totalSeats) {
  2.     printf("未被分配的空座位编号:\n");
  3.     for (int i = 0; i < totalSeats; i++) {
  4.         if (!seats[i].isBooked) {
  5.             printf("座位编号: %d\n", seats[i].seatNumber);
  6.         }
  7.     }
  8. }
复制代码


### 5. 显示已售出座位

  1. void showBookedSeats(Seat seats[], int totalSeats) {
  2.     printf("已经卖出去的座位编号:\n");
  3.     for (int i = 0; i < totalSeats; i++) {
  4.         if (seats[i].isBooked) {
  5.             printf("座位编号: %d, 姓名: %s, 性别: %c\n", seats[i].seatNumber, seats[i].passengerName, seats[i].passengerGender);
  6.         }
  7.     }
  8. }
复制代码


### 6. 订票

  1. void bookSeat(Seat seats[], int totalSeats) {
  2.     int seatNumber;
  3.     printf("请输入要订的座位编号: ");
  4.     scanf("%d", &seatNumber);

  5.     if (seatNumber <= 0 || seatNumber > totalSeats) {
  6.         printf("座位编号无效\n");
  7.         return;
  8.     }

  9.     if (seats[seatNumber - 1].isBooked) {
  10.         printf("该座位已经被订了\n");
  11.         return;
  12.     }

  13.     seats[seatNumber - 1].isBooked = 1;
  14.     printf("请输入乘客姓名: ");
  15.     scanf("%s", seats[seatNumber - 1].passengerName);
  16.     printf("请输入乘客性别 (M/F): ");
  17.     scanf(" %c", &seats[seatNumber - 1].passengerGender);
  18.     printf("订票成功\n");
  19. }
复制代码


### 7. 退票

  1. void cancelSeat(Seat seats[], int totalSeats) {
  2.     int seatNumber;
  3.     printf("请输入要退的座位编号: ");
  4.     scanf("%d", &seatNumber);

  5.     if (seatNumber <= 0 || seatNumber > totalSeats) {
  6.         printf("座位编号无效\n");
  7.         return;
  8.     }

  9.     if (!seats[seatNumber - 1].isBooked) {
  10.         printf("该座位未被订\n");
  11.         return;
  12.     }

  13.     seats[seatNumber - 1].isBooked = 0;
  14.     strcpy(seats[seatNumber - 1].passengerName, "");
  15.     seats[seatNumber - 1].passengerGender = ' ';
  16.     printf("退票成功\n");
  17. }
复制代码


### 8. 主函数处理循环

  1. int main() {
  2.     Seat seats[TOTAL_SEATS];
  3.     initializeSeats(seats, TOTAL_SEATS);

  4.     MenuOption option;
  5.     do {
  6.         option = getMenuOption();
  7.         switch (option) {
  8.             case SHOW_EMPTY_SEATS:
  9.                 showEmptySeats(seats, TOTAL_SEATS);
  10.                 break;
  11.             case SHOW_BOOKED_SEATS:
  12.                 showBookedSeats(seats, TOTAL_SEATS);
  13.                 break;
  14.             case BOOK_SEAT:
  15.                 bookSeat(seats, TOTAL_SEATS);
  16.                 break;
  17.             case CANCEL_SEAT:
  18.                 cancelSeat(seats, TOTAL_SEATS);
  19.                 break;
  20.             case EXIT:
  21.                 printf("退出系统\n");
  22.                 break;
  23.             default:
  24.                 printf("无效选项,请重新选择\n");
  25.         }
  26.     } while (option != EXIT);

  27.     return 0;
  28. }
复制代码


这就是整个程序的实现和详细讲解。初始化座位后,程序通过一个循环不断显示菜单,处理用户输入,实现订票、退票和查询功能,直到用户选择退出。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-9-19 19:35:41 | 显示全部楼层
FishC 发表于 2024-9-19 19:19
好的,鱼油。我们可以通过枚举类型来管理菜单选项,并结合用户输入来实现功能。以下是详细的步骤和代码 ...

// 枚举类型定义
typedef enum {
    SHOW_EMPTY_SEATS = 1,
    SHOW_BOOKED_SEATS,
    BOOK_SEAT,
    CANCEL_SEAT,
    EXIT
} MenuOption;这一段能否具体讲解以下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-9-19 19:35:59 | 显示全部楼层
轻语远歌 发表于 2024-09-19 19:35
// 枚举类型定义
typedef enum {
    SHOW_EMPTY_SE ...


好的,鱼油,我们来看一下嵌套枚举类型定义的具体含义及其作用。

### 枚举类型 `MenuOption`
  1. typedef enum {
  2.     SHOW_EMPTY_SEATS = 1,
  3.     SHOW_BOOKED_SEATS,
  4.     BOOK_SEAT,
  5.     CANCEL_SEAT,
  6.     EXIT
  7. } MenuOption;
复制代码


### 作用及解释
1. **定义菜单选项枚举类型:**
   `typedef enum { ... } MenuOption;` 是在定义一个枚举类型 `MenuOption`,它包含了一组命名的整数常量。通过使用枚举,我们可以让代码更具可读性。这样我们在处理菜单选项时可以使用这些命名常量,而不仅仅是数字。

2. **枚举值及其意义:**
   - `SHOW_EMPTY_SEATS = 1` 的值为1,表示显示所有未被分配的空座位编号。
   - `SHOW_BOOKED_SEATS` 的值为2(默认从上一个值递增),表示显示已经卖出去的座位编号,并能知道乘客姓名以及性别。
   - `BOOK_SEAT` 的值为3,表示买票。
   - `CANCEL_SEAT` 的值为4,表示退票。
   - `EXIT` 的值为5,表示退出系统。

这样,通过枚举类型不仅可以便于理解和维护代码,还可以防止在代码中直接使用“魔法数字”(magic numbers),提高了代码的可读性和可维护性。

### 代码实现
下面我们将上述结构体定义和枚举类型定义放到程序中,并为每个功能编写函数:

  1. #include <stdio.h>
  2. #include <string.h>

  3. #define TOTAL_SEATS 12

  4. typedef struct {
  5.     int seatNumber;
  6.     int isBooked;
  7.     char name[50];
  8.     char gender;
  9. } Seat;

  10. typedef enum {
  11.     SHOW_EMPTY_SEATS = 1,
  12.     SHOW_BOOKED_SEATS,
  13.     BOOK_SEAT,
  14.     CANCEL_SEAT,
  15.     EXIT
  16. } MenuOption;

  17. void showEmptySeats(Seat seats[], int size) {
  18.     printf("Empty seats: ");
  19.     for (int i = 0; i < size; i++) {
  20.         if (!seats[i].isBooked) {
  21.             printf("%d ", seats[i].seatNumber);
  22.         }
  23.     }
  24.     printf("\n");
  25. }

  26. void showBookedSeats(Seat seats[], int size) {
  27.     printf("Booked seats:\n");
  28.     for (int i = 0; i < size; i++) {
  29.         if (seats[i].isBooked) {
  30.             printf("Seat %d: Name: %s, Gender: %c\n", seats[i].seatNumber, seats[i].name, seats[i].gender);
  31.         }
  32.     }
  33. }

  34. void bookSeat(Seat seats[], int size) {
  35.     int seatNumber;
  36.     printf("Enter seat number to book: ");
  37.     scanf("%d", &seatNumber);

  38.     if (seatNumber < 1 || seatNumber > size || seats[seatNumber - 1].isBooked) {
  39.         printf("Seat not available or already booked.\n");
  40.     } else {
  41.         printf("Enter your name: ");
  42.         scanf("%s", seats[seatNumber - 1].name);
  43.         printf("Enter your gender (M/F): ");
  44.         scanf(" %c", &seats[seatNumber - 1].gender);
  45.         seats[seatNumber - 1].isBooked = 1;
  46.         printf("Seat %d booked successfully.\n", seatNumber);
  47.     }
  48. }

  49. void cancelSeat(Seat seats[], int size) {
  50.     int seatNumber;
  51.     printf("Enter seat number to cancel: ");
  52.     scanf("%d", &seatNumber);

  53.     if (seatNumber < 1 || seatNumber > size || !seats[seatNumber - 1].isBooked) {
  54.         printf("Seat not booked or invalid seat number.\n");
  55.     } else {
  56.         seats[seatNumber - 1].isBooked = 0;
  57.         strcpy(seats[seatNumber - 1].name, "");
  58.         seats[seatNumber - 1].gender = '\0';
  59.         printf("Seat %d cancelled successfully.\n", seatNumber);
  60.     }
  61. }

  62. int main() {
  63.     Seat seats[TOTAL_SEATS];
  64.     for (int i = 0; i < TOTAL_SEATS; i++) {
  65.         seats[i].seatNumber = i + 1;
  66.         seats[i].isBooked = 0;
  67.         strcpy(seats[i].name, "");
  68.         seats[i].gender = '\0';
  69.     }

  70.     while (1) {
  71.         printf("Menu:\n");
  72.         printf("1: Show empty seats\n");
  73.         printf("2: Show booked seats\n");
  74.         printf("3: Book a seat\n");
  75.         printf("4: Cancel a booking\n");
  76.         printf("5: Exit\n");
  77.         printf("Enter an option: ");

  78.         int option;
  79.         scanf("%d", &option);

  80.         switch (option) {
  81.         case SHOW_EMPTY_SEATS:
  82.             showEmptySeats(seats, TOTAL_SEATS);
  83.             break;
  84.         case SHOW_BOOKED_SEATS:
  85.             showBookedSeats(seats, TOTAL_SEATS);
  86.             break;
  87.         case BOOK_SEAT:
  88.             bookSeat(seats, TOTAL_SEATS);
  89.             break;
  90.         case CANCEL_SEAT:
  91.             cancelSeat(seats, TOTAL_SEATS);
  92.             break;
  93.         case EXIT:
  94.             return 0;
  95.         default:
  96.             printf("Invalid option, try again.\n");
  97.         }
  98.     }

  99.     return 0;
  100. }
复制代码


### 解释
1. **结构体 `Seat`:** 存储座位信息,包括座位编号、是否已预订、乘客姓名和性别。
2. **枚举类型 `MenuOption`:** 定义菜单选项使代码更具可读性。
3. **函数实现:**
   - `showEmptySeats`:显示所有未被预订的座位编号。
   - `showBookedSeats`:显示所有已预订的座位编号及乘客信息。
   - `bookSeat`:预订座位,如果座位已被预订或无效座位编号,则提示错误信息。
   - `cancelSeat`:取消预订,返还该座位的相关信息。
4. **主函数 `main`:** 初始化座位信息,显示菜单并根据用户输入调用不同的功能函数。

通过这种方式,程序更加模块化和可读,用户也能更方便地操作。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-7 21:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表