Ir para conteúdo
Fórum Script Brasil
  • 0

Função para reservar ingresso - Bilheteria de teatro


The_Kings688

Pergunta

Boa tarde! Fiz um código de uma bilheteria de teatro, mas não consigo pensar em uma função para o reservar o ingresso, alguém poderia 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;
}

 

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0
1 hora atrás, Michel Farina da Costa disse:

Consegui algo amigo?

Poderia me ajudar com este novo?

#include<stdio.h>
#include<string.h>
#include <locale.h>

struct sala {
  int cod_sala;
  int num_sala;
  int capacidade; 
} Sala;

struct peca {
  int cod_peca;
  char nome[100];
  char data[20];
  char horario[10];
  int sala;
  int capacidade;
  float valor;
} Peca;

struct ingresso {
  int cod_ingresso;
  char nome[100];
  char data[20];
  char horario[10];
  int sala;
  char tipo[20];
  float total;
} Ingresso;

main()
{
    setlocale(LC_ALL, "Portuguese");
    
  struct sala lista_sala[1000];
  struct peca lista_peca[100];
  struct ingresso lista_ingresso[200];

  int indice_sala; 
  int indice_peca;
  int indice_ingresso;
  int opcao;
  int i;
  char temp[256];
  char buffer[256];
  int k;
  int tipo;
        
  indice_sala = 0;
  indice_peca = 0;
  indice_ingresso = 0;

  while(1) {
    puts("________________________________________ MENU ________________________________________\n\n");
    puts(" 1 - Cadastrar Sala");
    puts(" 2 - Listar Salas");
    puts(" 3 - Cadastrar Peça");
    puts(" 4 - Listar Peças");
    puts(" 5 - Reservar Ingresso");
    puts(" 6 - Listar Ingressos");
    puts(" 7 - Procurar Peça");
    puts(" 8 - Procurar Ingresso");
    puts("11 - Remover Peça");
    puts("12 - Remover Ingresso");
    puts("0 - Sair");
    puts("______________________________________________________________________________________\n\n");
    scanf("%d",&opcao);
    getchar();
    system("cls");
    switch(opcao) {
      case 1: // Cadastrar Sala
        lista_sala[indice_sala].cod_sala = indice_sala + 1;
        printf("Digite o número da sala: ");
        scanf("%d",&lista_sala[indice_sala].num_sala);
        printf("Digite a capacidade: ");
        scanf("%d",&lista_sala[indice_sala].capacidade);
        indice_sala = indice_sala + 1;
        puts("\n\n----->Sala Cadastrada com Sucesso<-----\n");    
        puts("\n\nPressione ENTER para sair...");    
        break;
      case 2: // Listar Salas
        puts("\n__________________________________________________________________");      
        printf("\t\tLISTA DE SALAS");
        printf("\nCódigo | Número |  Capacidade ");
        puts("\n__________________________________________________________________");
        for(i = 0; i < indice_sala; i++) {
          printf("%d         %d         %d", lista_sala.cod_sala, lista_sala.num_sala, lista_sala.capacidade);
          puts("\n__________________________________________________________________");
        }
        puts("\n\nPressione ENTER para sair...");
        break;
      case 3: // Cadastrar Peça
        lista_peca[indice_peca].cod_peca = indice_peca + 1;
        printf("Nome da peça: ");
        gets(lista_peca[indice_peca].nome);
        printf("Data: ");
        gets(lista_peca[indice_peca].data);
        printf("Horário: ");
        gets(lista_peca[indice_peca].horario);
        printf("Sala: ");
        scanf("%d",&lista_peca[indice_peca].sala);
        printf("Capacidade: ");
        scanf("%d",&lista_peca[indice_peca].capacidade);
        fflush(stdin);
        printf("Valor: ");
        scanf("%f",&lista_peca[indice_peca].valor);
        indice_peca = indice_peca + 1;
        puts("\n\n----->Peça Cadastrada com Sucesso<-----\n");
        puts("\n\nPressione ENTER para sair...");        
        break;
      case 4: // Listar Peças
        puts("\n__________________________________________________________________");      
        printf("\t\tLISTA DE PEÇAS");
        printf("\nCódigo     |     Peça     |     Data     |     Horário     |     Sala     |     Capacidade     |     Valor");
        puts("\n__________________________________________________________________");
        for(i = 0; i < indice_peca; i++) {
          printf("%d          %s          %s          %s          %d          %d          %f", lista_peca.cod_peca, lista_peca.nome, lista_peca.data, lista_peca.horario, lista_peca.sala, lista_peca.capacidade, lista_peca.valor);
          puts("\n__________________________________________________________________");
        }
        puts("\n\nPressione ENTER para sair...");
        break;
      case 5: // Reservar ingresso.
          lista_ingresso[indice_ingresso].cod_ingresso = indice_ingresso + 1;
        printf("\nCódigo da peça: ");
        scanf("%d", &lista_peca[indice_peca].cod_peca);
        for(i = 0; i < indice_peca; i++){
            if(lista_peca.cod_peca == lista_peca[indice_peca].cod_peca){
                strcpy(lista_ingresso[indice_ingresso].nome, lista_peca.nome);
                strcpy(lista_ingresso[indice_ingresso].data, lista_peca.data);
                strcpy(lista_ingresso[indice_ingresso].horario, lista_peca.horario);
                lista_ingresso[indice_ingresso].sala = lista_peca.sala;
                break;
            }
            break;
        }
        printf("\n\nTipo:\n\n1 - Inteira\n2 - Meia\n3 - Gratuita\n\nEscolha o tipo: ");
        scanf("%d", &tipo);
        if(tipo == 1)
        {
            lista_ingresso.tipo == 'Inteira';
            lista_ingresso.total = lista_peca.valor;
            break;
        }
        else if(tipo == 2)
        {
            lista_ingresso.tipo == 'Meia';
            lista_ingresso.total = lista_peca.valor / 2;
            break;
        }
        else if(tipo == 3)
        {
            lista_ingresso.tipo == 'Gratuita';
            lista_ingresso.total = 0;
            break;
        }
        else
        {
            printf("\nTipo inválida. Pressione ENTER para sair...");
            break;
        }
        printf("\n\n------------------------------ RECIBO ------------------------------\n\n");
        printf("Código: %d  Peça: %s Sala %d\n", lista_ingresso[indice_ingresso].cod_ingresso, lista_ingresso[indice_ingresso].nome, lista_ingresso[indice_ingresso].sala);
        printf("Data: %s  Horário: %s\n", lista_ingresso[indice_ingresso].data, lista_ingresso[indice_ingresso].horario);
        printf("Tipo: %s\n", lista_ingresso[indice_ingresso].tipo);
        printf("Valor: %f\n\n", lista_ingresso[indice_ingresso].total);
        printf("--------------------------------------------------------------------\n\n");
        break;
      case 6: // Listar Reservas
        puts("\n__________________________________________________________________");      
        printf("\t\tLISTA DE RESERVAS");
        printf("\nCódigo  |      Peça      |  Sala  |  Data  |  Horário  |  Tipo  |  Total");
        puts("\n__________________________________________________________________");
        for(i = 0; i < indice_ingresso; i++) {
          printf("  %d     %s              %d      %s      %s      %s      %f", lista_ingresso.cod_ingresso, lista_ingresso.nome, lista_ingresso.sala, lista_ingresso.data, lista_ingresso.horario, lista_ingresso.tipo, lista_ingresso.total);
          puts("\n__________________________________________________________________");
        }
        puts("\n\nPressione ENTER para sair...");
        break;
      case 7: // Procurar Peça
        printf("\nCódigo da peça: ");
        scanf("%d", &lista_peca[indice_peca].cod_peca);
        for(i = 0; i < indice_peca; i++) {
          if(lista_peca.cod_peca == 0) {
            printf("%d - ",&lista_peca.cod_peca);
            getchar();
            printf("%s\n", lista_peca.nome);
            printf("%s\n", lista_peca.data);
            printf("%s\n", lista_peca.horario);
            printf("%d\n", lista_peca.sala);
            printf("%s\n", lista_peca.tipo);
            printf("%f", lista_peca.valor);
            puts("\n\n----->Código Encontrado com Sucesso<-----\n");    
            puts("\n\nPressione ENTER para sair...");  
            break;                               
          } //fim do if
        } //fim do for    
        break;
      case 8: // Procurar Ingresso
        printf("\nCódigo do ingresso: ");
        scanf("%d", &lista_ingresso[indice_ingresso].cod_ingresso);
        for(i = 0; i < indice_ingresso; i++) {
          if(lista_ingresso.cod_ingresso == 0) {
            printf("%d - ",&lista_ingresso.cod_ingresso);
            getchar();
            printf("%s\n", lista_ingresso.nome);
            printf("%s\n", lista_ingresso.data);
            printf("%s\n", lista_ingresso.horario);
            printf("%d\n", lista_ingresso.sala);
            printf("%s\n", lista_ingresso.tipo);
            printf("%f", lista_ingresso.valor);
            puts("\n\n----->Código Encontrado com Sucesso<-----\n");    
            puts("\n\nPressione ENTER para sair...");  
            break;                               
          } //fim do if
        } //fim do for    
        break;
      case 9: // Remover Peça
        printf("\nCódigo da peça: ");
        scanf("%d", &lista_peca[indice_peca].cod_peca);
        for(i = 0; i < indice_peca; i++) {
          if(lista_peca.cod_peca==0) {
            printf("Remova a peça [%s]: ", lista_peca.nome);
            gets(buffer);
            if(strlen(buffer) > 0) {
              strcpy(lista_peca.nome, buffer);                                    
            }
            for(k = 1; k < indice_peca; k++) {
              lista_peca[k] = lista_peca[k+1];
            }     
            indice_peca--;                       
          }
        }
        break;
      case 10: // Remover Ingresso
        printf("\nCódigo do ingresso: ");
        scanf("%d", &lista_ingresso[indice_ingresso].cod_ingresso);
        for(i = 0; i < indice_ingresso; i++) {
          if(lista_ingresso.cod_ingresso==0) {
            printf("Remova o ingresso [%s]: ", lista_ingresso.nome);
            gets(buffer);
            if(strlen(buffer) > 0) {
              strcpy(lista_ingresso.nome, buffer);                                    
            }
            for(k = 1; k < indice_ingresso; k++) {
              lista_ingresso[k] = lista_ingresso[k+1];
            }
            indice_ingresso--;                   
          }
        }
        break;
      case 99: // Sair
        return(0);
      default: // Opcao Invalida
        puts("Opção Inválida.");
        puts("\n\nPressione ENTER para sair...");
    } //fecha o switch            
    system("pause>>null");
    system("cls");
  } //fecha o while
} //fecha o main

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...