Eu consegui fazer apenas dessa forma:
#include <stdio.h>
#include <stdlib.h>
int LeOpcaoMenu(void) {
int op;
system("cls");
printf("\n\nBem vindo ao sistema de venda de passagens aereas\n\n\n");
printf("\n\nOpcoes Disponiveis\n\n");
printf("1 - Fazer Reserva\n");
printf("2 - Cancelar Reserva\n");
printf("3 - Sair\n");
printf("\n\nOpção desejada: ");
scanf("%d", &op);
return(op);
}
int LeDestino(int qdestino, char destinos[8][20]) {
int op, i;
do {
system("cls");
printf("\n\nDestinos Disponiveis\n\n");
for (i = 0; i < qdestino; i ++ ) {
printf("%d - %s\n", i+1, destinos[i]);
}
printf("%d - Volta ao Menu Inicial\n", i+1);
printf("\n\nOpcao desejada: ");
scanf("%d", &op);
if (op <1 || op > qdestino +1) {
printf("\nOpcao invalida !! \n");
system("pause");
}
}while (op <1 || op > qdestino+1);
return(op);
}
int LeDia(int destino, char destinos[8][20], int qdias, char dias_semana[7][8]) {
int op, i;
do {
system("cls");
printf("\n\nDias Disponiveis para o destino %s\n\n", destinos[destino-1]);
for (i = 0; i < qdias; i ++ ) {
printf("%d - %s\n", i+1, dias_semana[i]);
}
printf("%d - Volta ao Menu Inicial\n", i+1);
printf("\n\nOpcao desejada: ");
scanf("%d", &op);
if (op <1 || op > qdias +1) {
printf("\nOpcao invalida !! \n");
system("pause");
}
}while (op <1 || op > qdias+1);
return(op);
}
int LeHorario(int destino, char destinos[8][20], int dia, char dias_semana[7][8], int qhorario, char horarios[4][8]) {
int op, i;
do {
system("cls");
printf("\nHorarios Disponiveis para o destino %s na %s:\n\n", destinos[destino-1], dias_semana[dia-1]);
for (i = 0; i < qhorario; i ++ ) {
printf("%d - %s\n", i+1, horarios[i]);
}
printf("%d - Volta ao Menu Inicial\n", i+1);
printf("\n\nOpcao desejada: ");
scanf("%d", &op);
if (op <1 || op > qhorario+1) {
printf("\nOpcao Invalida !! \n");
system("pause");
}
}while (op <1 || op > qhorario+1);
return(op);
}
int LeFila(int destino, char destinos[8][20], int dia, char dias_semana[7][8], int horario, char horarios[4][8], int qfila, char filas[20][8]) {
int op, i;
do {
system("cls");
printf("\nEscolha uma dentre as seguintes filas:\n\n");
for (i = 0; i < qfila; i ++ ) {
printf("%d - %s\n", i+1, filas[i]);
}
printf("%d - Volta ao Menu Inicial\n", i+1);
printf("\n\nOpcao desejada: ");
scanf("%d", &op);
if (op <1 || op > qfila+1) {
printf("\nOpcao Invalida !! \n");
system("pause");
}
}while (op <1 || op > qfila+1);
return(op);
}
int LePoltrona(int destino, char destinos[8][20], int dia, char dias_semana[7][8], int horario, char horarios[4][8], int fila, char filas[20][8], int qpoltrona, char poltronas[8][20]) {
int op, i;
do {
system("cls");
printf("\nEscolha uma dentre as seguintes poltronas disponiveis:\n\n");
for (i = 0; i < qpoltrona; i ++ ) {
printf("%d - %s\n", i+1, poltronas[i]);
}
printf("%d - Volta ao Menu Inicial\n", i+1);
printf("\n\nOpcao desejada: ");
scanf("%d", &op);
if (op <1 || op > qpoltrona+1) {
printf("\nOpcao Invalida !! \n");
system("pause");
}
}while (op <1 || op > qpoltrona+1);
return(op);
}
void ReservaVagas(int qdestino, int qdias, int qhorarios, int qfila, int qpoltrona, char destinos[8][20], char dias_semana[7][8], char horarios[4][8], char filas[20][8], char poltronas[8][20]) {
int p, d, h, f, a;
p = LeDestino(qdestino, destinos);
if (p <= qdestino) {
d = LeDia(p, destinos, qdias, dias_semana);
if (d <= qdias) {
h = LeHorario(p, destinos, d, dias_semana, qhorarios, horarios);
if (h <= qhorarios){
f = LeFila(p, destinos, d, dias_semana, h, horarios, qfila, filas);
if (f <= qfila){
a = LePoltrona(p, destinos, d, dias_semana, h, horarios, f, filas, qpoltrona, poltronas);
if (a <= qpoltrona){
printf("\n\nVoce fez reserva para viagem com destino a %s, %s, as %s, voce escolheu a poltrona %s na %s\n\n", destinos[p-1],dias_semana[d-1], horarios[h-1], poltronas[a-1], filas[f-1]);
system("pause");
}
}
}
}
}
}
void CancelaReserva(int qdestino, int qdias, int qhorarios, char destinos[8][20], char dias_semana[7][8], char horarios[4][8]) {
int p, d, h;
p = LeDestino(qdestino, destinos);
if (p <= qdestino) {
d = LeDia(p, destinos, qdias, dias_semana);
if (d <= qdias) {
h = LeHorario(p, destinos, d, dias_semana, qhorarios, horarios);
if (h <= qhorarios){
printf("\n\nCancelamento Realizado com sucesso\nVoce cancelou a sua viagem para %s, que seria em uma %s, no horario das %s\n\n", destinos[p-1],dias_semana[d-1], horarios[h-1]);
system("pause");
}
}
}
}
int main() {
int op;
char destinos[8][20]={"Rio de Janeiro RJ", "são Paulo SP", "Belo Horizonte MG", "Santa Catarina RS", "Salvador BA", "Recife PE", "Palmas TO", "Belem do Para PA "};
char dias_semana[7][8]={"Segunda", "Terca", "Quarta", "Quinta", "Sexta", "sábado", "Domingo"};
char horarios[4][8]={"09:00 h", "13:00 h", "17:00 h", "21:00 h"};
char filas[20][8]={"fila 1", "fila 2", "fila 3", "fila 4", "fila 5", "fila 6", "fila 7", "fila 8", "fila 9", "fila 10", "fila 11", "fila 12", "fila 13", "fila 14", "fila 15", "fila 16", "fila 17", "fila 18", "fila 19", "fila 20"};
char poltronas[8][20]={"1", "2", "3", "4", "5", "6", "7", "8"};
do {
op = LeOpcaoMenu();
switch (op) {
case 1:
system("cls");
ReservaVagas(8, 7, 4, 20, 8, destinos, dias_semana, horarios, filas, poltronas);
break;
case 2:
system("cls");
CancelaReserva(8, 7, 4, destinos, dias_semana, horarios);
break;
case 3:
system("cls");
printf("\n\nPROGRAMA FINALIZADO !!!\n\n");
system("pause");
break;
default:
printf("\nOpcao invalida.\n");
system("pause");
}
} while (op != 3);
}
Ao longo do programa precisaria mostrar ao usuário, as opções de vagas em forma de matriz (filas por poltronas) em que cada vaga seria representada por 4 dígitos, ex: 0102, 1ª fila, 2ª poltrona. Além de mostrar algumas das vagas já ocupadas, pelo texto OCUP. No fim, mostraria a matriz final com sua vaga secionada. É estas matrizes que eu não consegui fazer para se adequar ao código, necessitaria ser um vetor multidimensional (*****) para cada dimensão ser ocupada (destinos, dias, horários, filas e poltronas).