Ir ao conteúdo

Posts recomendados

Postado

Boa tarde! Fiz um código para uma bilheteria de teatro, mas não consigo pensar em como fazer a função de reservar o ingresso, só resta esta função para terminar o código alguém podeira me ajudar, por favor.

 

#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>

// Estrutura da Peça Teatral.
typedef struct peca
{
	unsigned long int codigo;
	char nome[100];
	char data[10];
	char horario[5];
	unsigned long int capacidade;
	float valor;
	struct peca* prox;
} Peca;

typedef struct ingresso
{
	unsigned long int codigo;
	char nome[100];
	char data[10];
	char horario[5];
	char tipo[20];
	float total;
	struct ingresso* prox;
} Ingresso;

// Declaração de funções da estrutura peça.
Peca* inserir_pecas(Peca* primeiro);
void listar_pecas(Peca* primeiro);
Peca* excluir_pecas(Peca* primeiro);
void alterar_pecas(Peca* primeiro);

// Declaração de funções da estrutura ingresso.
Ingresso* reservar_ingressos(Ingresso* segundo);
void listar_ingressos(Ingresso* segundo);
Ingresso* excluir_ingressos(Ingresso* segundo);

main()
{
	// Declaração de variáveis.
	Peca *primeiro = NULL;
	Ingresso *segundo = NULL;
	int opcao;
	
	// Artifício para repetir o programa.
	while(opcao != 0)
	{
		// Menu de Opções.
		printf("%c----------------------------------------------------------------------------%c\n", 201, 187);
		printf(" | ");
		printf("\t\t\t\t MENU DE OPÇÕES \t\t\t\t");
		printf(" | ");
		printf("\n\n");
		printf("| 1 - Cadastrar peças |\n");
		printf("| 2 - Listar peças |\n");
		printf("| 3 - Alterar peças |\n");
		printf("| 4 - Excluir peças |\n");
		printf("| 5 - Reservar ingressos |\n");
		printf("| 6 - Listar ingressos |\n");
		printf("| 7 - Excluir ingressos |\n");
		printf("| 0 - Finalizar sistema |\n\n");
		printf("%c----------------------------------------------------------------------------%c\n\n", 200, 188);
		printf("Comando: ");
		scanf("%d", &opcao);
		
		// Lendo a opção do menu
		fflush(stdin);
		opcao = getch();
		
		// Executando as funções de acordo com a opção escolhida.
		switch(opcao)
		{
			case 1:
				// Inserindo peças.
				fflush(stdin);
				system("cls");
				printf("%c----------------------------------------------------------------------------%c\n", 201, 187);
				printf(" | ");
				printf("\t\t\t CADASTRAR NOVA PEÇA \t\t\t");
				printf(" | ");
				printf("%c----------------------------------------------------------------------------%c\n\n", 200, 188);
				primeiro = inserir_pecas(primeiro);
				getch();
				system("cls");
				break;
			case 2:
				// Listando peças.
				system("cls");
				printf("%c----------------------------------------------------------------------------%c\n", 201, 187);
				printf(" | ");
				printf("\t\t\t PEÇAS CADASTRADAS \t\t\t");
				printf(" | ");
				printf("%c----------------------------------------------------------------------------%c\n\n", 200, 188);
				listar_pecas(primeiro);
				getch();
				system("cls");
				break;
			case 3:
				// Alterando peças da lista.
				system("cls");
				printf("%c----------------------------------------------------------------------------%c\n", 201, 187);
				printf(" | ");
				printf("\t\t\t ALTERAR PEÇAS CADASTRADAS \t\t\t");
				printf(" | ");
				printf("%c----------------------------------------------------------------------------%c\n\n", 200, 188);
				alterar_pecas(primeiro);
				getch();
				system("cls");
				break;
			case 4:
				// Excluindo peças da lista.
				system("cls");
				printf("%c----------------------------------------------------------------------------%c\n", 201, 187);
				printf(" | ");
				printf("\t\t\t EXCLUIR PEÇA CADASTRADA \t\t\t");
				printf(" | ");
				printf("%c----------------------------------------------------------------------------%c\n\n", 200, 188);
				primeiro = excluir_pecas(primeiro);
				getch();
				system("cls");
				break;
			case 5:
				// Reservando ingressos.
				fflush(stdin);
				system("cls");
				printf("%c----------------------------------------------------------------------------%c\n", 201, 187);
				printf(" | ");
				printf("\t\t\t RESERVAR INGRESSO \t\t\t");
				printf(" | ");
				printf("%c----------------------------------------------------------------------------%c\n\n", 200, 188);
				segundo = reservar_ingressos(segundo);
				getch();
				system("cls");
				break;
			case 6:
				// Listando ingressos.
				system("cls");
				printf("%c----------------------------------------------------------------------------%c\n", 201, 187);
				printf(" | ");
				printf("\t\t\t INGRESSOS CADASTRADOS \t\t\t");
				printf(" | ");
				printf("%c----------------------------------------------------------------------------%c\n\n", 200, 188);
				listar_ingressos(segundo);
				getch();
				system("cls");
				break;
			case 7:
				// Excluindo peças da lista.
				system("cls");
				printf("%c----------------------------------------------------------------------------%c\n", 201, 187);
				printf(" | ");
				printf("\t\t\t EXCLUIR INGRESSO CADASTRADO \t\t\t");
				printf(" | ");
				printf("%c----------------------------------------------------------------------------%c\n\n", 200, 188);
				segundo = excluir_ingressos(segundo);
				getch();
				system("cls");
				break;
			case 0:
				// Artifício para finalizar o programa.
				opcao = 0;
				break;
			default:
				// Artifício que previne a situação de um usuário qualquer, digitar uma opção inexistente no menu.
				system("cls");
				break;
		}
	}
}

Peca* inserir_pecas (Peca *primeiro){
	Peca peca;
	Peca *atual = primeiro;
	char identificador = 'F';
	
	// Lendo as informações da peça.
	printf("Nome da peça: ");
	fflush(stdin);
	fgets(peca.nome, 100, stdin);
	printf("\n");
	printf("Data: ");
	fflush(stdin);
	fgets(peca.data, 10, stdin);
	printf("\n");
	printf("Horário: ");
	fflush(stdin);
	fgets(peca.horario, 5, stdin);
	printf("\n");
	printf("Valor do ingresso: ");
	scanf("%f", &peca.valor);
	printf("\n");
	printf("Capacidade: ");
	scanf("%u", &peca.capacidade);
	printf("\n");
	printf("Código: ");
	scanf("%u", &peca.codigo);
	printf("\n");
	
	// Verificando se o cadastro já existe.
	for(atual=primeiro; atual!=NULL; atual=atual->prox){
		if(atual->codigo==peca.codigo){
			identificador = 'V';
			break;
		}
	}
	
	if(identificador!='V' && (strlen(peca.nome)!=1 && strlen(peca.data)!=1)){
		// Alocando os espaços e guardando as informações da peça.
		Peca* NovaPeca=(Peca*) malloc (sizeof(Peca));
		strcpy(NovaPeca->nome, peca.nome);
		strcpy(NovaPeca->data, peca.data);
		strcpy(NovaPeca->horario, peca.horario);
		NovaPeca->capacidade= peca.capacidade;
		NovaPeca->valor= peca.valor;
		NovaPeca->codigo= peca.codigo;
		NovaPeca->prox= primeiro;
		printf(" Cadastro realizado com sucesso.");
		printf("\n\n Pressione QUALQUER TECLA para voltar ao menu...");
		return NovaPeca;
	}else{
		printf(" Cadastro inválido.");
		printf("\n\n Pressione QUALQUER TECLA para voltar ao menu...");
		exit(0);
	}
}

void listar_pecas (Peca* primeiro){
	Peca* atual; // Ponteiro para percorrer a lista sem perder a referência do primeiro elemento da lista.
	
	// Imprimindo as peças da lista, e suas respectivas informações.
	for(atual= primeiro; atual!= NULL; atual= atual->prox){
		printf("\nCódigo: ");
		printf("%u", atual->codigo);
		printf("\nPeça: ");
		printf("%s", atual->nome);
		printf("\nData: ");
		printf("%s", atual->data);
		printf("\nHorário: ");
		printf("%s", atual->horario);
		printf("\nCapacidade: ");
		printf("%u", atual->capacidade);
		printf("\nValor: ");
		printf("%f", atual->valor);
		printf("\n\n");
	}
	if(primeiro==NULL)
		printf(" Nenhuma peça cadastrada.");
		printf("\n\n Pressione QUALQUER TECLA para voltar ao menu...");
}

Peca* excluir_pecas(Peca *primeiro){
	
	Peca *anterior= NULL; // Ponteiro para saber o elemento anterior ao elemento atual da lista.
	Peca *atual= primeiro; // Ponteiro para percorrer a lista sem perder o primeiro elemento da lista.
	unsigned long int codigo=0;
	
	// Requisitando e lendo o código da peça a ser excluída.
	printf("Código da peça: ");
	fflush(stdin);
	scanf("%u", &codigo);
	
	// Procurando a peça na lista.
	while(atual!= NULL && atual->codigo!=codigo){
		anterior= atual;
		atual= atual->prox;
	}
	
	// Mensagem caso a peça não seja encontrada.
	if(atual==NULL){
		printf("\n Peça não encontrada.");
		printf("\n\n Pressione QUALQUER TECLA para voltar ao menu...");
		return primeiro;
	}
	
	// Excluindo a primeira peça da lista.
	if(anterior==NULL){
		printf("\n Conteúdo excluído com sucesso.");
		primeiro= atual->prox;
	// Excluindo uma peça do meio da lista.
	}else{
		printf("\n Conteúdo excluído com sucesso.");
		anterior->prox= atual->prox;
	}
	
	// Desalocando o espaço da memória.
	free(atual);
	printf("\n\n Pressione QUALQUER TECLA para voltar ao menu...");
	return primeiro;
}

// Função para alterar peças.
void alterar_pecas(Peca* primeiro){
	char nome_substituto[100], data_substituta[10], horario_substituto[5];
	unsigned long int capacidade_substituta;
	float valor_substituto;
	unsigned long int codigo;
	Peca* atual=primeiro;
	
	// Requisitando e lendo o código da peças a ser alterada.
	printf("\nCódigo da peça: ");
	fflush(stdin);
	scanf("%u", &codigo);
	
	// Procurando a peça na lista.
	while(atual!= NULL && atual->codigo!=codigo){
		atual= atual->prox;
	}
	
	// Alterando os dados da peça.
	if(atual!=NULL){
		printf("\nNovo nome: ");
		fflush(stdin);
		fgets(nome_substituto, 100, stdin);
		strcpy(atual->nome,nome_substituto);
		printf("\nNova data: ");
		fflush(stdin);
		fgets(data_substituta, 10, stdin);
		strcpy(atual->data,data_substituta);
		printf("\nNovo horário: ");
		fflush(stdin);
		fgets(horario_substituto, 5, stdin);
		strcpy(atual->horario,horario_substituto);
		printf("\nNova capacidade: ");
		fflush(stdin);
		scanf("%u", &capacidade_substituta);
		atual->capacidade == capacidade_substituta;
		printf("\nNovo valor: ");
		fflush(stdin);
		scanf("%f", &valor_substituto);
		atual->valor == valor_substituto;
		printf("\n");
		printf("Dados alterados com sucesso.");
	}else{
		printf("\nPeça não encontrada.");
	}
	printf("\n\n\nPressione QUALQUER TECLA para voltar ao menu...");
	
}

void listar_ingressos (Ingresso* segundo){
	Ingresso* atual; // Ponteiro para percorrer a lista sem perder a referência do primeiro elemento da lista.
	
	// Imprimindo od ingressos da lista, e suas respectivas informações.
	for(atual= segundo; atual!= NULL; atual= atual->prox){
		printf("\nCódigo: ");
		printf("%u", atual->codigo);
		printf("\nPeça: ");
		printf("%s", atual->nome);
		printf("\nData: ");
		printf("%s", atual->data);
		printf("\nHorário: ");
		printf("%s", atual->horario);
		printf("\nTipo: ");
		printf("%s", atual->tipo);
		printf("\nValor: ");
		printf("%f", atual->total);
		printf("\n\n");
	}
	if(segundo==NULL)
		printf(" Nenhum ingresso cadastrado.");
		printf("\n\n Pressione QUALQUER TECLA para voltar ao menu...");
}

Ingresso* excluir_ingressos(Ingresso *segundo){
	
	Ingresso *anterior= NULL; // Ponteiro para saber o elemento anterior ao elemento atual da lista.
	Ingresso *atual= segundo; // Ponteiro para percorrer a lista sem perder o primeiro elemento da lista.
	unsigned long int codigo=0;
	
	// Requisitando e lendo o código do ingresso a ser excluído.
	printf("Código do ingresso: ");
	fflush(stdin);
	scanf("%u", &codigo);
	
	// Procurando o ingresso na lista.
	while(atual!= NULL && atual->codigo!=codigo){
		anterior= atual;
		atual= atual->prox;
	}
	
	// Mensagem caso o ingresso não seja encontrado.
	if(atual==NULL){
		printf("\n Ingresso não encontrado.");
		printf("\n\n Pressione QUALQUER TECLA para voltar ao menu...");
		return segundo;
	}
	
	// Excluindo o primeiro ingresso da lista.
	if(anterior==NULL){
		printf("\n Conteúdo excluído com sucesso.");
		segundo= atual->prox;
	// Excluindo um ingresso do meio da lista.
	}else{
		printf("\n Conteúdo excluído com sucesso.");
		anterior->prox= atual->prox;
	}
	
	// Desalocando o espaço da memória.
	free(atual);
	printf("\n\n Pressione QUALQUER TECLA para voltar ao menu...");
	return segundo;
}

 

  • Curtir 2
Postado

Olá, tudo certo!?

Então ...

 

Minha sugestão: coloque mais um ponteiro na estrutura ingresso, esse ponteiro vai apontar para o cadastro de reserva, caso o ingresso seja de reserva esse ponteiro aponta para o nome de seu destinatário. Ora! São mais duas linhas de código para implementar as reservas.

  1. Para cadastra a reserva
  2. Para buscar as reservas cadastradas.
  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...