Untitled
user_6355630
c_cpp
a year ago
16 kB
8
Indexable
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>
#include <ctype.h>
#include <windows.h>
#define VERMELHO 12
#define CIANO 11
#define MAX_ESPACOS 4
#define MAX_NOME_ESPACO 20
// Estrutura do item da lista
typedef enum { MORADOR, APARTAMENTO } TipoItem;
typedef struct {
TipoItem tipo;
union {
// Estrutura com as informações do morador
struct {
char nome[50];
int idade;
int cpf;
} morador;
// Estrutura do apartamento
struct {
int numeroEndereco;
int numeroQuartos;
int numeroBanheiros;
float valorAluguel; // Novo campo para o valor do aluguel
char nomeMorador[50]; // Nome do morador que ocupa o apartamento
} apartamento;
} info;
} ItemLista;
// Estrutura da lista de moradores
typedef struct NoLista {
ItemLista item;
struct NoLista *prox;
} NoLista;
typedef struct {
NoLista *primeiro;
int tamanho;
} ListaMoradores;
// Estrutura da lista de apartamentos
typedef struct NoListaApartamento {
ItemLista item;
struct NoListaApartamento *prox;
} NoListaApartamento;
typedef struct {
NoListaApartamento *primeiro;
int tamanho;
} ListaApartamentos;
// Estrutura de espaço comum
typedef struct EspacoComum {
char nome[MAX_NOME_ESPACO];
int disponivel;
char horario[MAX_NOME_ESPACO];
int limite_usuarios;
int usuarios_presentes;
} EspacoComum;
// Estrutura de nó para a lista de espaços comuns
struct NoListae {
EspacoComum espaco;
struct NoListae *prox;
};
// Função para criar a lista
ListaMoradores* criarListaMoradores() {
ListaMoradores *lista = (ListaMoradores*) malloc(sizeof(ListaMoradores));
if (lista != NULL) {
lista->primeiro = NULL;
lista->tamanho = 0;
}
return lista;
}
ListaApartamentos* criarListaApartamentos() {
ListaApartamentos *lista = (ListaApartamentos*) malloc(sizeof(ListaApartamentos));
if (lista != NULL) {
lista->primeiro = NULL;
lista->tamanho = 0;
}
return lista;
}
// Função para colocar um elemento na lista
void inserirMorador(ListaMoradores *lista, ItemLista novoMorador) {
NoLista *novoNo = (NoLista*) malloc(sizeof(NoLista));
if (novoNo == NULL) {
printf("Erro na alocação de memória\n");
return;
}
novoNo->item = novoMorador;
novoNo->prox = lista->primeiro;
lista->primeiro = novoNo;
lista->tamanho++;
}
void inserirApartamento(ListaApartamentos *lista, ItemLista novoApartamento) {
NoListaApartamento *novoNo = (NoListaApartamento*) malloc(sizeof(NoListaApartamento));
if (novoNo == NULL) {
printf("Erro na alocação de memória\n");
return;
}
novoNo->item = novoApartamento;
novoNo->prox = lista->primeiro;
lista->primeiro = novoNo;
lista->tamanho++;
}
// Função de busca
NoLista* buscarMorador(ListaMoradores *lista, char nome[]) {
NoLista *atual = lista->primeiro;
while (atual != NULL) {
if (atual->item.tipo == MORADOR && strcmp(atual->item.info.morador.nome, nome) == 0) {
return atual;
}
atual = atual->prox;
}
return NULL;
}
NoListaApartamento* buscarApartamento(ListaApartamentos *lista, int numeroEndereco) {
NoListaApartamento *atual = lista->primeiro;
while (atual != NULL) {
if (atual->item.tipo == APARTAMENTO && atual->item.info.apartamento.numeroEndereco == numeroEndereco) {
return atual;
}
atual = atual->prox;
}
return NULL;
}
// Função de remoção
void removerMorador(ListaMoradores *lista, char nome[]) {
NoLista *anterior = NULL;
NoLista *atual = lista->primeiro;
while (atual != NULL) {
if (atual->item.tipo == MORADOR && strcmp(atual->item.info.morador.nome, nome) == 0) {
if (anterior == NULL) {
lista->primeiro = atual->prox;
} else {
anterior->prox = atual->prox;
}
free(atual);
lista->tamanho--;
return;
}
anterior = atual;
atual = atual->prox;
}
}
void removerApartamento(ListaApartamentos *lista, int numeroEndereco) {
NoListaApartamento *anterior = NULL;
NoListaApartamento *atual = lista->primeiro;
while (atual != NULL) {
if (atual->item.tipo == APARTAMENTO && atual->item.info.apartamento.numeroEndereco == numeroEndereco) {
if (anterior == NULL) {
lista->primeiro = atual->prox;
} else {
anterior->prox = atual->prox;
}
free(atual);
lista->tamanho--;
return;
}
anterior = atual;
atual = atual->prox;
}
}
// Função para verificar se uma string contém apenas letras ou espaços
int contemApenasLetras(const char *str) {
while (*str) {
if (!isalpha(*str) && *str != ' ') { // Permitir espaços no nome
return 0;
}
str++;
}
return 1;
}
// Função de verificação de disponibilidade dos apartamentos
void verificarDisponibilidadeApartamentos(ListaApartamentos *lista, ListaMoradores *listaMoradores) {
NoListaApartamento *atual = lista->primeiro;
printf("Lista de apartamentos disponíveis:\n");
int num = 1;
while (atual != NULL) {
// Verificar se o apartamento está ocupado
NoLista *morador = buscarMorador(listaMoradores, atual->item.info.apartamento.nomeMorador);
if (morador == NULL) {
printf("%d. Número de Endereço: %d, Quartos: %d, Banheiros: %d, Valor do Aluguel: R$ %.2f\n",
num,
atual->item.info.apartamento.numeroEndereco,
atual->item.info.apartamento.numeroQuartos,
atual->item.info.apartamento.numeroBanheiros,
atual->item.info.apartamento.valorAluguel);
num++;
}
atual = atual->prox;
}
}
// Função de registro de reserva
void registrarReserva(ListaMoradores *listaMoradores, ListaApartamentos *listaApartamentos, char nome[], int numeroEndereco) {
NoListaApartamento *apartamento = buscarApartamento(listaApartamentos, numeroEndereco);
if (apartamento == NULL) {
printf("Apartamento não encontrado.\n");
return;
}
// Verificar se o nome contém apenas letras
if (!contemApenasLetras(nome)) {
printf("O nome do morador deve conter apenas letras.\n");
return;
}
strcpy(apartamento->item.info.apartamento.nomeMorador, nome);
printf("Reserva efetuada com sucesso:\n");
printf("Apartamento: %d\n", apartamento->item.info.apartamento.numeroEndereco);
removerApartamento(listaApartamentos, numeroEndereco);
printf("\nApartamentos disponíveis para aluguel:\n");
verificarDisponibilidadeApartamentos(listaApartamentos, listaMoradores);
}
// Função para atualizar informações do morador
void atualizarMorador(ListaMoradores *listaMoradores, char nomeAntigo[], char novoNome[], int novaIdade, int novoCpf) {
NoLista *morador = buscarMorador(listaMoradores, nomeAntigo);
if (morador == NULL) {
printf("Morador não encontrado.\n");
return;
}
// Atualizar informações do morador
strcpy(morador->item.info.morador.nome, novoNome);
morador->item.info.morador.idade = novaIdade;
morador->item.info.morador.cpf = novoCpf;
printf("Informações do morador atualizadas com sucesso.\n");
}
// Função para inserir um novo espaço comum na lista de espaços comuns
void inserirEspacoComum(struct NoListae **lista, EspacoComum novoEspaco) {
struct NoListae *novoNo = (struct NoListae*) malloc(sizeof(struct NoListae));
if (novoNo == NULL) {
printf("Erro na alocação de memória\n");
return;
}
novoNo->espaco = novoEspaco;
novoNo->prox = *lista;
*lista = novoNo;
}
// Função para reservar um espaço comum
void reservarEspaco(struct NoListae **lista, int opcao) {
struct NoListae *atual = *lista;
int indice = 1;
while (atual != NULL) {
if (indice == opcao) {
if (atual->espaco.disponivel && atual->espaco.usuarios_presentes < atual->espaco.limite_usuarios) {
atual->espaco.usuarios_presentes++;
printf("Espaço '%s' reservado com sucesso.\n", atual->espaco.nome);
} else {
printf("O espaço '%s' está lotado ou não está disponível para reserva no momento.\n", atual->espaco.nome);
}
return;
}
atual = atual->prox;
indice++;
}
}
// Função para imprimir texto colorido
void imprimirTextoColorido(const char *texto, int cor) {
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hConsole, cor);
printf("%s", texto);
SetConsoleTextAttribute(hConsole, 7); // Resetar para a cor padrão
}
int main() {
setlocale(LC_ALL, "Portuguese");
// Cabeçalho
imprimirTextoColorido("-=-= Centro Universitário do Rio São Francisco =-=-\n", CIANO);
imprimirTextoColorido("\nAlunos:\n", VERMELHO);
imprimirTextoColorido("\tAnthonio Calazans\n", CIANO);
imprimirTextoColorido("\tAnthony dos Santos Martins\n", CIANO);
imprimirTextoColorido("\tGlauber Lima\n", CIANO);
imprimirTextoColorido("\tGuilherme Augusto\n", CIANO);
imprimirTextoColorido("\tGuilherme Leite\n", CIANO);
imprimirTextoColorido("\tIago Kauan\n", CIANO);
imprimirTextoColorido("\tYuri A moreira\n", CIANO);
imprimirTextoColorido("\nProfessora:\n", VERMELHO);
imprimirTextoColorido("\tMirthys Marinho\n\n", CIANO);
system("pause");
system("cls");
// Regras do condomínio
puts("\033[0;31mRegras do condomínio:\033[0m");
puts("\033[0;36m");
puts("1 - É proibido fazer barulho após as 22h.");
puts("2 - Não é permitido estacionar em locais não destinados a estacionamento.");
puts("3 - O uso da área de lazer deve ser feito de forma a não atrapalhar os demais moradores.\033[0m\n");
system("pause");
system("cls");
// Criando listas de moradores e apartamentos
ListaMoradores *listaMoradores = criarListaMoradores();
ListaApartamentos *listaApartamentos = criarListaApartamentos();
// Inserindo apartamentos com valores base
ItemLista novoApartamento;
novoApartamento.tipo = APARTAMENTO;
novoApartamento.info.apartamento.numeroEndereco = 101;
novoApartamento.info.apartamento.numeroQuartos = 2;
novoApartamento.info.apartamento.numeroBanheiros = 2;
novoApartamento.info.apartamento.valorAluguel = 1000.00;
inserirApartamento(listaApartamentos, novoApartamento);
novoApartamento.info.apartamento.numeroEndereco = 201;
novoApartamento.info.apartamento.numeroQuartos = 3;
novoApartamento.info.apartamento.numeroBanheiros = 2;
novoApartamento.info.apartamento.valorAluguel = 1500.00;
inserirApartamento(listaApartamentos, novoApartamento);
novoApartamento.info.apartamento.numeroEndereco = 301;
novoApartamento.info.apartamento.numeroQuartos = 1;
novoApartamento.info.apartamento.numeroBanheiros = 1;
novoApartamento.info.apartamento.valorAluguel = 800.00;
inserirApartamento(listaApartamentos, novoApartamento);
// Verificando disponibilidade dos apartamentos
printf("Apartamentos disponíveis para aluguel:\n");
verificarDisponibilidadeApartamentos(listaApartamentos, listaMoradores);
// Solicitar ao usuário registrar reservas
char nomeMorador[50];
int enderecoApartamento;
char opcao;
do {
printf("\nDigite o nome do morador para registrar a reserva: ");
fgets(nomeMorador, 50, stdin);
nomeMorador[strcspn(nomeMorador, "\n")] = 0; // Remover a quebra de linha
printf("Digite o número do apartamento para a reserva: ");
scanf("%d", &enderecoApartamento);
registrarReserva(listaMoradores, listaApartamentos, nomeMorador, enderecoApartamento);
// Verificar se há apartamentos disponíveis
if (listaApartamentos->tamanho == 0) {
printf("Desculpe, todos os apartamentos estão ocupados no momento. Por favor, volte mais tarde.\n");
break;
}
printf("\nDeseja fazer outra reserva? (S/N): ");
scanf(" %c", &opcao);
getchar(); // Limpar o buffer de entrada
} while (opcao == 'S' || opcao == 's');
// Área de lazer:
struct NoListae **listaEspacos = (struct NoListae **)malloc(sizeof(struct NoListae *));
if (listaEspacos == NULL) {
printf("Erro: Falha na alocação de memória para a lista de espaços.\n");
return 1;
}
struct EspacoComum espacos[MAX_ESPACOS] = {
{"Piscina", 1, "09:00 - 18:00", 10, 0},
{"Academia", 1, "06:00 - 22:00", 10, 0},
{"Salao_de_festas", 1, "08:00 - 00:00", 10, 0},
{"Quadra", 1, "09:00 - 22:00", 10, 0},
};
int i = 0;
do {
inserirEspacoComum(&(*listaEspacos), espacos[i]);
i++;
} while (i < MAX_ESPACOS);
do {
printf("\nDeseja reservar uma área de lazer? (S/N): ");
scanf(" %c", &opcao);
if (opcao == 'S' || opcao == 's') {
do {
printf("Areas de Lazer Disponíveis:\n");
puts("\n");
struct NoListae *atual = *listaEspacos;
int indice = 1;
while (atual != NULL) {
if (atual->espaco.disponivel && atual->espaco.usuarios_presentes < atual->espaco.limite_usuarios) {
printf("%d. %s\n", indice++, atual->espaco.nome);
}
atual = atual->prox;
}
printf("\nEscolha um espaço pelo número correspondente (ou 0 para sair):\n");
printf("Opção: ");
scanf("%d", &opcao);
getchar(); // Limpar o buffer de entrada
switch (opcao) {
case 0:
printf("\nSaindo...\n");
break;
case 1:
case 2:
case 3:
case 4:
printf("\nOpção escolhida: %d\n", opcao);
reservarEspaco(&(*listaEspacos), opcao);
break;
default:
printf("\nOpção inválida! Tente novamente.\n");
}
} while (opcao != 0);
} else if (opcao != 'N' && opcao != 'n') {
break;
}
} while (opcao == 'S' || opcao == 's');
printf("Pressione qualquer tecla para sair...\n");
getchar(); // Esperar que o usuário pressione qualquer tecla para sair
return 0;
}Editor is loading...
Leave a Comment