#include <stdio.h>
void func_top_menu(int* p_i);
void func_menu(char flight_number[10]);
void func_empty_seats_quantity(void);
void func_empty_seats_list(void);
void func_all_seats_list(void);
void func_assignment_seats(struct aircraft_seats seats_array[12]);
void func_delete_seats(struct aircraft_seats seats_array[12]);
static unsigned int i_flight_numb;
struct aircraft_seats{
unsigned int u_seats_num;
unsigned int u_isreserve;
char first_name[10];
char last_name[10];
};
struct aircraft_seats seats_array[12] ={
{1 , 0 },{2 , 0 },{3 , 0 },{4 , 0 },
{5 , 0 },{6 , 0 },{7 , 0 },{8 , 0 },
{9 , 0 },{10 , 0 },{11 , 0 },{12 , 0 },
};
struct aircaraft
{
char flight_number[10];
struct aircraft_seats;
};
struct aircaraft flight[4] = {
{"102",seats_array},{"311",seats_array},
{"444",seats_array},{"519",seats_array},
};
int main(void) {
func_top_menu(&i_flight_numb);
return 0;
}
// 主菜单
void func_top_menu(int * p_i) {
puts("*********************************************");
printf("To choose a flight_number, enter its letter table: \n");
printf("a) 102\n");
printf("b) 311\n");
printf("c) 444\n");
printf("d) 519\n");
printf("q) Quit\n");
puts("*********************************************");
char c_chiose;
while (scanf_s("%c", &c_chiose, sizeof(char)) == 1 && c_chiose != 'q')
{
if (c_chiose == '\n')
{
continue;
}
while (getchar() != '\n')
{
continue;
}
switch (c_chiose)
{
case 'a':
*p_i = 0;
func_menu(flight[0].flight_number);
func_empty_seats_quantity();
break;
case 'b':
*p_i = 1;
func_menu(flight[1].flight_number);
func_empty_seats_list();
break;
case 'c':
*p_i = 2;
func_menu(flight[2].flight_number);
func_all_seats_list();
break;
case 'd':
*p_i = 3;
func_menu(flight[3].flight_number);
func_assignment_seats(seats_array);
break;
default:
printf("********输入错误,请重新选择********\n");
puts("*********************************************");
printf("To choose a flight_number, enter its letter table: \n");
printf("a) 102\n");
printf("b) 311\n");
printf("c) 444\n");
printf("d) 519\n");
printf("q) Quit\n");
puts("*********************************************");
break;
}
}
}
// 功能菜单
void func_menu(char flight_number[10]) {
puts("*********************************************");
printf("flight number: ");
puts(flight_number);
printf("To choose a function, enter its letter table: \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) Asign a customer to a seat assignment\n");
printf("e) Delete a seat assignment\n");
printf("f) Quit\n");
puts("*********************************************");
char c_chiose;
while (scanf_s("%c", &c_chiose, sizeof(char)) == 1)
{
if (c_chiose == '\n')
{
continue;
}
while (getchar() != '\n')
{
continue;
}
switch (c_chiose)
{
case 'a':
func_empty_seats_quantity();
break;
case 'b':
func_empty_seats_list();
break;
case 'c':
func_all_seats_list();
break;
case 'd':
func_assignment_seats(seats_array);
break;
case 'e':
func_delete_seats(seats_array);
break;
case 'f':
func_top_menu(&i_flight_numb);
getchar(); //吸收字符
break;
default:
printf("********输入错误,请重新选择********\n");
break;
}
func_menu(flight[i_flight_numb].flight_number);
}
}
//查询空座位数量
void func_empty_seats_quantity(void) {
int i_count = 0;
for (size_t i = 0, j = 0; i < 12; i++)
{
if (seats_array[i].u_isreserve == 0)
{
i_count++;
}
};
printf("The aircraft has %d empty_seats now\n", i_count);
}
//显示空座位列表
void func_empty_seats_list(void) {
for (size_t i = 0, j = 0; i < 12; i++)
{
if (seats_array[i].u_isreserve == 0)
{
printf("\t%3u 可选位置", seats_array[i].u_seats_num);
j++;
}
if (j == 4)
{
printf("\n");
j = 0;
}
};
puts("\n");
}
//显示全部座位列表
void func_all_seats_list(void) {
for (size_t i = 0, j = 0; i < 12; i++)
{
if (seats_array[i].u_isreserve == 0)
{
printf("\t%3u 可选位置", seats_array[i].u_seats_num);
j++;
}
if (seats_array[i].u_isreserve == 1)
{
printf("\t%3u 不可选位置", seats_array[i].u_seats_num);
j++;
}
if (j == 4)
{
printf("\n");
j = 0;
}
};
}
//分配座位
void func_assignment_seats(struct aircraft_seats seats_array[12]) {
unsigned int u_del_num;
printf("please a number of set seat(enter q to menu): ");
while (scanf_s("%u", &u_del_num) && u_del_num >= 1 && u_del_num <= 12)
{
while (getchar() != '\n')
{
continue;
}
if (seats_array[u_del_num - 1].u_isreserve == 0)
{
seats_array[u_del_num - 1].u_isreserve = 1;
printf("set seat successfully\n");
printf("please a number of delete seat(enter q to menu): ");
continue;
}
printf("Failed to set seat , please a number of set seat(enter q to menu):");
}
getchar(); //吸收字符
}
//删除座位
void func_delete_seats(struct aircraft_seats seats_array[12]) {
unsigned int u_del_num;
printf("please a number of delete seat(enter q to menu): ");
while (scanf_s("%u", &u_del_num) && u_del_num >= 1 && u_del_num <= 12)
{
while (getchar() != '\n')
{
continue;
}
if (seats_array[u_del_num - 1].u_isreserve == 1)
{
seats_array[u_del_num - 1].u_isreserve = 0;
printf("Reset seat successfully\n");
printf("please a number of delete seat(enter q to menu): ");
continue;
}
printf("seat need not to reset, please a number of delete seat(enter q to menu):");
}
getchar(); //吸收字符
}
过程演示
*********************************************
To choose a flight_number, enter its letter table:
a) 102
b) 311
c) 444
d) 519
q) Quit
*********************************************
b
*********************************************
flight number: 311
To choose a function, enter its letter table:
a) Show number of empty seats
b) Show list of empty seats
c) Show alphabetical list of seats
d) Asign a customer to a seat assignment
e) Delete a seat assignment
f) Quit
*********************************************
c
1 可选位置 2 可选位置 3 可选位置 4 可选位置
5 可选位置 6 可选位置 7 可选位置 8 可选位置
9 可选位置 10 可选位置 11 可选位置 12 可选位置
*********************************************
flight number: 311
To choose a function, enter its letter table:
a) Show number of empty seats
b) Show list of empty seats
c) Show alphabetical list of seats
d) Asign a customer to a seat assignment
e) Delete a seat assignment
f) Quit
*********************************************
f
*********************************************
To choose a flight_number, enter its letter table:
a) 102
b) 311
c) 444
d) 519
q) Quit
*********************************************
c
*********************************************
flight number: 444
To choose a function, enter its letter table:
a) Show number of empty seats
b) Show list of empty seats
c) Show alphabetical list of seats
d) Asign a customer to a seat assignment
e) Delete a seat assignment
f) Quit
*********************************************