C Primer Plus(第六版)14.18 编程练习 第9题

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define LEN 20
#define MAX 12
#define S 3

struct fly{                   
    char seat[S];
    int reserve;
    char fname[LEN];
    char lname[LEN];
    
}seat_data[MAX];
    
int a(struct fly fly_data[],int n);
void b(struct fly fly_data[],int n);
void c(struct fly fly_data[],int n);
void d(struct fly fly_data[],int n);
void e(struct fly fly_data[],int n);
void menu(void);
void copy_seat_data(struct fly dest[], const struct fly src[], int count) ;
void handle_menu(struct fly seat_data[],int n);

int main(void)
{
    char ch;
    int flight=0;
    struct fly seat_102[MAX]={ {"A1", 0}, {"A2", 0}, {"A3", 0}, {"A4", 0}, {"A5",0}, {"A6", 0}, {"B1", 1,"BA","BA"}, 
    {"B2", 1,"BB","BB"}, {"B3", 1,"BC","BC"}, {"B4", 1,"BD","BD"}, {"B5", 1,"BE","BE"}, {"B6", 1,"BF","BF"}};
    struct fly seat_311[MAX]={ {"A1", 0}, {"A2", 0}, {"A3", 0}, {"A4", 0}, {"A5",0}, {"A6", 0}, {"B1", 1,"BA","BA"}, 
    {"B2", 1,"BB","BB"}, {"B3", 1,"BC","BC"}, {"B4", 1,"BD","BD"}, {"B5", 1,"BE","BE"}, {"B6", 1,"BF","BF"}};
    struct fly seat_444[MAX]={ {"A1", 0}, {"A2", 0}, {"A3", 0}, {"A4", 0}, {"A5",0}, {"A6", 0}, {"B1", 1,"BA","BA"}, 
    {"B2", 1,"BB","BB"}, {"B3", 1,"BC","BC"}, {"B4", 1,"BD","BD"}, {"B5", 1,"BE","BE"}, {"B6", 1,"BF","BF"}};
    struct fly seat_519[MAX]={ {"A1", 0}, {"A2", 0}, {"A3", 0}, {"A4", 0}, {"A5",0}, {"A6", 0}, {"B1", 1,"BA","BA"}, 
    {"B2", 1,"BB","BB"}, {"B3", 1,"BC","BC"}, {"B4", 1,"BD","BD"}, {"B5", 1,"BE","BE"}, {"B6", 1,"BF","BF"}};
    
    starting:puts("choose our flight (102,311,444,519) or 1 to quit:");
    while (scanf("%d",&flight)==1&&flight!=102&&flight!=311&&flight!=444&&flight!=519&&flight!=1)
    {
    while (getchar() != '\n')
        continue;      
    puts("wrong num :(102,311,444,519,1)");
    }
    while (getchar() != '\n')
        continue;
        switch (flight)
        {
            case 102:
                copy_seat_data(seat_data, seat_102, MAX);
                break;
            case 311:
                copy_seat_data(seat_data, seat_311, MAX);
                break;
            case 444:
                copy_seat_data(seat_data, seat_444, MAX);
                break;
            case 519:
                copy_seat_data(seat_data, seat_519, MAX);
                break;
            case 1:
                exit(1);
                break;
            default:
                puts("wrong num):");
                break;
        }
    handle_menu(seat_data,MAX);    
    goto starting;
}

void menu(void)
{
    puts("To choose a function, enter its letter label:\n");
    puts("a) Show number of empty seats\n");
    puts("b) Show list of empty seats\n");
    puts("c) Show alphabetical list of seats\n");
    puts("d) Assign a customer to, a seat assignment\n");
    puts("e) Delete a seat assignment\n");
    puts("f) Quit\n");
}

int a(struct fly fly_data[],int n)
{
    int count=0;
    for(int i=0;i<n;i++)
    {
        if(fly_data[i].reserve==0)
            count++;
    }
    return count;
}

void b(struct fly fly_data[],int n)
{
    for(int i=0;i<n;i++)
    {
        if(fly_data[i].reserve==0)
            printf("%s:空闲\n",fly_data[i].seat);
    }
}

void c(struct fly fly_data[],int n)
{
    for(int i=0;i<n;i++)
    {
        printf("%s |1预订,0未订: %d\n",fly_data[i].seat,fly_data[i].reserve);
    }
}

void d(struct fly fly_data[],int n)
{
    char seat[3];
    
    b(fly_data,n);
    puts("chose your seat,1 to quit:\n");
    scanf("%s",&seat);
    while (getchar() != '\n')
        continue;
    if(seat[0]='1')
        return;
    for(int i=0;i<n;i++)
        if(strcmp(seat,fly_data[i].seat)==0)
        {
            fly_data[i].reserve=1;
            puts("input your fname lname:\n");
            scanf("%s %s",&fly_data[i].fname,&fly_data[i].lname);
            while (getchar() != '\n')
                continue;
        }
    puts("reserve succeed!:\n");
    c(fly_data,n);
}


void e(struct fly fly_data[],int n)
{
    char * seat[3];
    char fname[LEN];
    char lname[LEN];
    int cancel=0;
    
    for(int i=0;i<n;i++)
    {
        if(fly_data[i].reserve!=0)
            printf("已预订的位置:%s\n",fly_data[i].seat);
    }
    puts("input your fname lname to delete your seat:\n");
    while(cancel!=1)
    {
    scanf("%s %s",&fname,&lname);
    while (getchar() != '\n')
        continue;
    for(int i=0;i<n;i++)
    {
        if (strcmp(lname,fly_data[i].lname)==0&&strcmp(fname,fly_data[i].fname)==0)
        //名字对了才可以取消 
        {
            fly_data[i].reserve=0;
            printf("你的座位%s已取消",fly_data[i].seat);
            cancel=1;
            break;
        }
        else continue;
    }
    puts("1 to quit ,0 to rename:\n");
    scanf("%d",&cancel);
    while (getchar() != '\n')
        continue;
    if(cancel!=1)
    puts("input your fname lname to delete your seat:\n");
    }
    puts("updated:\n");
    c(fly_data,n);
}

void copy_seat_data(struct fly dest[], const struct fly src[], int count) 
{
    for (int i = 0; i < count; ++i) 
    {
        strcpy(dest[i].seat, src[i].seat);
        dest[i].reserve = src[i].reserve;
        strcpy(dest[i].fname, src[i].fname);
        strcpy(dest[i].lname, src[i].lname);
    }
}

void handle_menu(struct fly seat_data[],int n)
{
    char ch; 
    menu();
    while (scanf("%c", &ch)!=EOF&&ch!='f')
    {
        while (getchar() != '\n')
            continue;       
        switch (ch)
        {
            case 'a':
                printf("empty seats:%d\n",a(seat_data,n));
                break;
            case 'b':
                b(seat_data,n);
                break;
            case 'c':
                c(seat_data,n);
                break;
            case 'd':
                d(seat_data,n);
                break;
            case 'e':
                e(seat_data,n);
                break;
            case 'f':
                printf("bye\n");
                break;
            default:
                printf("erro\n");
                break;
        }
        menu();
    }
}

相关推荐

  1. C Primer Plus()12.9 编程练习 5

    2024-02-01 08:36:03       46 阅读
  2. C Primer Plus()12.9 编程练习 2

    2024-02-01 08:36:03       47 阅读
  3. C Primer Plus()13.11 编程练习 9

    2024-02-01 08:36:03       58 阅读
  4. C Primer Plus()14.18 编程练习 9

    2024-02-01 08:36:03       56 阅读
  5. C Primer Plus()15.9 编程练习 6

    2024-02-01 08:36:03       49 阅读
  6. C Primer Plus()15.9 编程练习 3

    2024-02-01 08:36:03       44 阅读
  7. C Primer Plus()15.9 编程练习 7

    2024-02-01 08:36:03       45 阅读
  8. C Primer Plus()15.9 编程练习 5

    2024-02-01 08:36:03       48 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-01 08:36:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-01 08:36:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-02-01 08:36:03       82 阅读
  4. Python语言-面向对象

    2024-02-01 08:36:03       91 阅读

热门阅读

  1. C语言探索:冒泡排序的实现与解读

    2024-02-01 08:36:03       56 阅读
  2. 【算法每日一题 1】CordCoverMaxPoint

    2024-02-01 08:36:03       55 阅读
  3. C. Madoka and Formal Statement

    2024-02-01 08:36:03       60 阅读
  4. Elasticsearch:入门(二)

    2024-02-01 08:36:03       43 阅读
  5. Kotlin 协程四 —— Flow 和 Channel 的应用

    2024-02-01 08:36:03       47 阅读
  6. 扩展学习|大数据分析整合到价值创造的大见解

    2024-02-01 08:36:03       55 阅读