#include<stdio.h>
#include<string.h>
#define NAMEL 21
#define SEATS 12
struct giant {
int seat_number;
_Bool is_ordered;
char fname[NAMEL];
char lname[NAMEL];
};
void showmenu(void);
void eatline(void);
char* s_gets(char* st, int n);
int main(void)
{
char choice;
int i, empty_seats_count = 0, assign_number;
struct giant plane[SEATS];
struct giant* pts[SEATS];
struct giant* temp;
for (i = 0; i < SEATS; i++)
{
plane[i].is_ordered = 0;
plane[i].fname[0] = '\0';
plane[i].lname[0] = '\0';
plane[i].seat_number = i + 1;
pts[i] = &plane[i];
}
while (1)
{
showmenu();
while ((scanf("%c", &choice) != 1) || (strchr("abcdef", choice)) == NULL)
{
eatline();
printf("Please select options by inputing a,b,c,d,e or f.\n");
}
eatline();
switch (choice)
{
case 'a':
printf("Number of empty seats:\n");
for (i = 0; i < SEATS; i++)
if (plane[i].is_ordered == 0)
empty_seats_count++;
printf("There are %d empty seats.\n", empty_seats_count);
empty_seats_count = 0;
break;
case 'b':
printf("List of empty seats:\n");
for (i = 0; i < SEATS; i++)
if (plane[i].is_ordered == 0)
printf("Seat number %2d.\n", plane[i].seat_number);
break;
case 'c':
printf("Alphabetical list of seats depend on customer's first name:\n");
for (i = 0; i < SEATS - 1; i++)
for (int j = i + 1; j < SEATS; j++)
if ((strcmp(pts[i]->fname, pts[j]->fname)) > 0)
{
temp = pts[i];
pts[i] = pts[j];
pts[j]=temp;
}
for (i = 0; i < SEATS; i++)
if(pts[i]->is_ordered==1)
printf("%s %s:seat number %2d.\n", pts[i]->fname,
pts[i]->lname, pts[i]->seat_number);
break;
case 'd':
printf("Input the seat number you wanna assign:");
while(scanf_s("%d", &assign_number)!=1||assign_number<1||assign_number>12)
printf("Input seat number from 1 to 12");
eatline();
for (i = 0; i < SEATS; i++)
{
if (plane[i].seat_number == assign_number)
{
printf("Input your first name:");
s_gets(plane[i].fname, NAMEL);
printf("Input your last name:");
s_gets(plane[i].lname, NAMEL);
plane[i].is_ordered = 1;
}
}
break;
case 'e':
printf("Input the seat number you wanna delete assignment:");
while (scanf_s("%d", &assign_number) != 1 || assign_number < 1 || assign_number>12)
printf("Input seat number from 1 to 12");
eatline();
for (i = 0; i < SEATS; i++)
{
if (plane[i].seat_number == assign_number)
{
plane[i].is_ordered = 0;
plane[i].fname[0] = '\0';
plane[i].lname[0] = '\0';
}
}
break;
case 'f':
goto quit;
}
}
quit:
return 0;
}
void showmenu(void)
{
printf("To choose a function, enter its letter label :\n"
"a) Show number of empty seats\nb) Show list of empty seats\n"
"c) Show alphabetical list of seats\nd) Assign a customer to a seat assignment\n"
"e) Delete a seat assignment\nf) Quit\n");
}
void eatline(void)
{
while (getchar() != '\n')
continue;
}
char* s_gets(char* st, int n)
{
char* ret_val, * find;
if (ret_val = fgets(st, n, stdin))
if (find = strchr(st, '\n'))
*find = '\0';
else
while (getchar() != '\n')
continue;
return ret_val;
}