首页 > 试题广场 >

巨人航空公司的机群由座位容量为12的飞机组成。它每天飞行一个

[问答题]

巨人航空公司的机群由座位容量为12的飞机组成。它每天飞行一个航班。按照下面的功能,写一个座位预订程序:

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

b.程序显示下面的菜单:

To choose a function, enter its letter label:

a) Show number of empty seats

b) Show list of empty seats

c) Show alphabetical list of seats

d) Assign a customer to a seat assignment

e) Delete a seat assignment

f) Quit

c. 程序应能执行菜单所给出的功能。选择d)和e)需要额外的输入,每一个选项都应当允许用户终止输入。

d.执行完一个特定的功能之后,程序再次显示菜单,除非选择了f)。

e.每次运行程序都把数据保存到一个文件中。当程序再次运行时,首先从文件中载入数据(如果有的话)。

推荐
#include<stdio.h>
#include<stdlib.h>
#define MAX 12
void read_file(struct seat *p, char* filename);
void choose(void);
void show_number_empty(struct seat *p);
void show_list_empty(struct seat *p);
void show_list(struct seat *p);
void assign_seat(struct seat *p);
void delete_seat(struct seat *p);
void write_file(struct seat *p, char* filename);
struct seat{
 int number;
 int assign;
 char lastname[10];
 char firstname[10];
};
struct seat seats[MAX]={  //缺省设置
 {101,0},
 {102,0},
 {103,0},
 {104,0},
 {105,0},
 {106,0},
 {107,0},
 {108,0},
 {109,0},
 {110,0},
 {111,0},
 {112,0}
};
int main(void)
{
 read_file(seats, "seat.dat");
 while( 1 )
 choose();
 return 0;//此句无用
}
void read_file(struct seat *p, char* filename)
{
 FILE * pseats;
 if ((pseats = fopen(filename, "rb")) == NULL)
 printf("Can't open %s file. So load default data.\n", filename);
 else
 {
 rewind(pseats);            /* go to start of file     */
 while (fread(p, sizeof (struct seat), MAX, pseats) == 1) continue;
 fclose(pseats);
 printf("read %s successfully!\n", filename);
 }
}
void choose(void)
{
 char command[10];
 printf("\nTo choose a function, enter its letter label:\n");
 printf("a) Show number of empty seats\n");
 printf("b) Show list of empty seats\n");
 printf("c) Show alphabetical list of seats\n");
 printf("d) Assign a customer to a seat assignment\n");
 printf("e) Delete a seat assignment\n");
 printf("f) Quit\n");
 gets(command);
 switch( command[0] )
 {
 case 'a': show_number_empty(seats); break;
 case 'b': show_list_empty(seats);  break;
 case 'c': show_list(seats);   break;
 case 'd': assign_seat(seats);   break;
 case 'e': delete_seat(seats);   break;
 default : write_file(seats,"seat.dat"); puts("Quit"); exit(1);
 }
}
void show_number_empty(struct seat *p)
{
 int i,n;
 for (i=0, n=0; i<MAX; i++)
 if ( p[i].assign == 0 )
 n++;
 printf("There are %d empty seats\n",n);
}
void show_list_empty(struct seat *p)
{
 int i;
 printf("empty seats:\n");
 for (i=0; i<MAX; i++)
 if ( p[i].assign == 0 )
 printf("number %d\n", p[i].number);
}
void show_list(struct seat *p)
{
 int i;
 printf("seat list:\n");
 for (i=0; i<MAX; i++)
 {
 printf("number %d\t", p[i].number);
 if (p[i].assign == 1)
 printf("full    %s %s\n",  p[i].firstname, p[i].lastname );
 else
 printf("empty\n");
 }
}
void assign_seat(struct seat *p)
{
 int number, i;
 printf("Input the seat number:");
 scanf("%d", &number);
 getchar();
 for (i=0; i<MAX; i++)
 if( p[i].number == number)
 {
 if( p[i].assign == 1 )
 printf("NO.%d seat is already assigned!\n", p[i].number);
 else
 {
 printf("Input firstname of the holder:");
 scanf("%s", p[i].firstname);
 printf("Input lastname of the holder:");
 scanf("%s", p[i].lastname);
 getchar();
 p[i].assign = 1;
 printf("assign NO.%d seat successfully!\n", p[i].number);
 }
 return;
 }
 printf("%d is a invalid seat number!\n", number);
}
void delete_seat(struct seat *p)
{
 int number, i;
 printf("Input the seat number:");
 scanf("%d", &number);
 getchar();
 for (i=0; i<MAX; i++)
 if( p[i].number == number)
 {
 if (p[i].assign == 0)
 printf("NO.%d seat is already empty!\n", number);
 else
 {
 p[i].assign = 0;
 printf("delete NO.%d seat successfully!\n", number);
 }
 return;
 }
 printf("%d is a invalid seat number\n", number);
}
void write_file(struct seat *p, char* filename)
{
 FILE * pseats;
 if ((pseats = fopen(filename, "wb")) == NULL)
 {
 printf("Can't open %s file.", filename);//将文件以可写模式打开,没有则创造,清空文件内容
 exit(1);
 }
 fwrite(p, sizeof (struct seat), MAX, pseats);
 fclose(pseats);
}

发表于 2018-05-05 22:11:03 回复(0)