c练习题——飞机航班座位管理系统(简易版)

#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
*********************************************
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值