Ir ao conteúdo
  • Cadastre-se
Gustavo Santos Reis

C Bilheteria de teatro em c - DEV C++

Recommended Posts

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Gustavo Santos Reis Como assim não entendeu minha sugestão; para ficar mais claro que isso só escrevendo o código mesmo.

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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

×