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

Projeto em C!


Henrique Neto

Pergunta

- O programa deve ser capaz de cadastrar um evento, com as seguintes informacoes data de inicio data final no formato dd/mm/aaaa, o nome do evento e o numero maximo de participantes

- O programa deve ser capaz de cadastrar palestras que serao apresentados no evento principal.Estes eventos devem conter o nome da palestra a data e a hora da apresentacao, e o nome do palestrante. A palestra deve estar associado a um evento principal(congresso por ex) e não pode ser cadastrado separadamente.

- O programa deve ser capaz de cadastrar um participante em um evento principal. O cadadastro de participantes deve conter a informacoao nome, cpf, rg.Um participante so podera ser cadastrado se ainda existir vagas.

- Deve tambem oferecer uma opcao de visualizar os eventos principais cadastrados, as palestras de um determinado evento, quais os participantes estao cadastrado em um evento e a quantidade de vagas.

- Deletar os cadastros efetuados nos itens acima.

Bem o projeto pede isso

1: Eu já fiz a parte de cadastro de evento, palestra, e participante, com STRUCTS, so não sei como fazer para que a palestra não seja apenas criada ligada com um evento eu tentei fazer so não sei se esta certo.

2: Como eu poderia visualizar isso que estao armazenados.

3: E deletar.

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

 struct evento {
          char nome[50];
          char data[15];  
          char datafim[15];
          int qtdepart; 
             
          }e;
          
 struct participante {
           char nome[50];
           char cpf[20];
           float rg;
    }p[2];

 struct palestra {
          char nome[50];
          char palestrante[50];
          char data[15];
          char hora[8];
          struct evento ev;
          
    }pa[2];
  



void menuPrincipal();
void CadastrarEvento();
void CadastrarPalestra();
void CadastrarParticipante();
void VisualizarEvento();

int main() {
    int contadorparti=0;
    
    menuPrincipal();
    getch();
    return 1;   
    system("pause");
    system("cls"); 
}






void menuPrincipal() {
     char opcao; 
     int saida = 1;
     
     
     do {
       printf("===========================TELA PRINCIPAL===================================");
        
        printf("\n1: Cadastrar Evento.\n");
        printf("2: Cadastrar Palestra.\n");
        printf("3: Cadastrar Participante.\n");
        printf("4: Visualizar Evento.\n");
        printf("Digite a Opcao:");
        opcao = getche();
        switch(opcao) {
                        case '1':
                          CadastrarEvento();
                          break;
                        case '2':
                          CadastrarPalestra();
                          break;
                         case '3':
                           CadastrarParticipante();
                           break; 
                         case '4':
                           VisualizarEvento();
                           break;
                          }
      } while (saida);
}



void CadastrarEvento() {
     char confirmar;
    
     FILE *arq;
   
     printf("\n===========================CADASTRAR EVENTO=================================");
          
     fflush(stdin);
     printf("\nNome do Evento: ");
     gets(e.nome);
     
     fflush(stdin);
     printf("\nData do Evento Inicial: ");
     gets(e.data);
     
     fflush(stdin);
     printf("\nData do Final do Evento: ");
     gets(e.datafim);
     
     
     fflush(stdin);
     printf("\nQuantidade maxima de Participantes: ");
     scanf("%d",&e.qtdepart);
     
     fflush(stdin);
     do {
         printf("\n\nDeseja Confirmar o cadastro do Evento[s\\n]: ");
         confirmar = getche();         
     } while ((confirmar != 's') && (confirmar != 'n'));
    
     if (confirmar == 's') {
        arq = fopen("evento.txt", "a+");
        if (!arq) {
           printf("Error 432423.");
        } else {
           fwrite(&e, sizeof(e), 1, arq);
           fclose(arq);  
          
        }             
     }  
 }


void CadastrarParticipante() {
     char confirmar;
    
     FILE *arq;
     printf("\n=========================CADASTRAR PARTICIPANTE==========================");
     
     
     fflush(stdin);
     printf("\nNome do Participante: ");
     gets(p[0].nome);
     
     fflush(stdin);
     printf("\nCPF: ");
     gets(p[0].cpf);
     
     fflush(stdin);
     printf("\nRG: ");
     scanf("%f",&p[0].rg);
     
     fflush(stdin);
     do {
         printf("\n\nDeseja Confirmar o cadastro do Participante[s\\n]: ");
         confirmar = getche();         
     } while ((confirmar != 's') && (confirmar != 'n'));
    
     if (confirmar == 's') {
        arq = fopen("part.txt", "a+");
        if (!arq) {
           printf("Error 432423.");
        } else {
           fwrite(&p, sizeof(p), 1, arq);
           fclose(arq);  
          
        }             
     }  
     
     
 }


void CadastrarPalestra() {
     char confirmar;
     FILE *arq;
    
     printf("\n========================CADASTRAR PALESTRA===============================");
     
     
     fflush(stdin);
     printf("\nNome do Palestra: ");
     gets(pa[0].nome);
     
     fflush(stdin);
     printf("\nNome do Palestrante: ");
     gets(pa[0].palestrante);
     
     fflush(stdin);
     printf("\nData da Palestra: ");
     gets(pa[0].data);
     
     fflush(stdin);
     printf("\nHora da Palestra: ");
     gets(pa[0].hora);
  
     fflush(stdin);
     printf("\nEvento: ");
     gets(pa[0].ev.nome);
  
     
     fflush(stdin);
     do {
         printf("\n\nDeseja Confirmar o Cadastro da Palestra[s\\n]: ");
         confirmar = getche();         
     } while ((confirmar != 's') && (confirmar != 'n'));
    
     if (confirmar == 's') {
        arq = fopen("palestra.txt", "a+");
        if (!arq) {
           printf("Error 432423.");
        } else {
           fwrite(&pa, sizeof(pa), 1, arq);
           fclose(arq);  
          
        }             
     }  
     
 } 


 void VisualizarEvento() {
      
      char comparaevento[50];

      printf("\nDigite o evento que procura:\n");
      gets(comparaevento);
      
     if (!strcmp(comparaevento, e.nome))
       {
          printf("\n",e.nome);               
          printf("\n",e.data);
          printf("\n",e.datafim);
          printf("\n",e.qtdepart);
        }else {
                printf("Tente Novamente. não Existi esse Evento.");
              }
       

}

Fiz uma funcao visualizar evento mais não funciona.rss

E tambem definir a quantidade de participantes na estrutura.

Desde já grato.

Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0

1 - Sobre o visualizar evento: Ele precisa estar criado e em memória para que tu tenha acesso a ele, correto?

Os eventos ficam armazenados em um arquivo, correto?

Para visualizar, acredito que tu tenha que ter uma das duas situações acima. Com ele em memória tu acessaria diretamente, pela variável, como está fazendo. Ele em arquivo, terá de varrer o arquivo onde estão todos os eventos em busca do

solicitado pelo usuário.

2 - Sua PALESTRA depende de um EVENTO, correto? Eu enxergo o seguinte nessa situação:

Ao envez de armazenar uma Struct evento dentro da uma Palestra, tu deve armazenar apenas a LIGAÇÃO entre uma e outra. Isso é facilmente resolvido com um inteiro que podemos

chamar de ID_Palestra (assim como nos bancos de dados). Aí tu "liga" os campos fisicamente nos arquivos.

Por ex: Evento "Congresso" cod. de identificação (ID_Cong) "2".

Palestra "Apresentações em C" cod. de identificação (ID_Pal) "1"

cod. de identificação do EVENTO (ao qual está subordinada a PALESTRA APRESENTAÇÕES EM C) "2".

Entendeste a idéia? É o conceito de chave / chave estrangeira.

Espero ter ajudado!

Link para o comentário
Compartilhar em outros sites

  • 0

rodrigo entendi, já fiz isso tudo, agora em relacao a excluir apenas aquela estrutura que foi adicionada no arquivo.

exemplo

void deletaEvento() {
   
   FILE *arq, *aux; 
     arq = fopen("evento.txt", "rb"); 
     aux = fopen("aux.txt", "ab");
        int dado, excluir;
              printf("Dado a ser Excluido:");
              scanf("%d",&excluir);
                    fread(&e, sizeof(e), 1, arq); 
           while (!feof(arq)) 
                {
                    if (e.id != excluir)
                {
                        fwrite(&e, sizeof(e), 1, aux); 
                        fread(&e, sizeof(e), 1, arq); 
               }
                    fclose(arq); 
                    fclose(aux);
                    remove("evento.txt"); 
                    rename("aux.txt", "evento.txt"); 
               }

   

}

Com esse codigo tentasse, o usuario digitar o codigo do evento que quer remover, com isso ele sobrescreve tudo para um arquivo auxiliar, em seguida deleta o evento.txt e renomeia o auxiliar para evento. mais não to conseguindo realizar essa operacao :S

Link para o comentário
Compartilhar em outros sites

  • 0
rodrigo entendi, já fiz isso tudo, agora em relacao a excluir apenas aquela estrutura que foi adicionada no arquivo.

exemplo

void deletaEvento() {
   
   FILE *arq, *aux; 
     arq = fopen("evento.txt", "rb"); 
     aux = fopen("aux.txt", "ab");
        int dado, excluir;
              printf("Dado a ser Excluido:");
              scanf("%d",&excluir);
                    fread(&e, sizeof(e), 1, arq); 
           while (!feof(arq)) 
                {
                    if (e.id != excluir)
                {
                        fwrite(&e, sizeof(e), 1, aux); 
                        fread(&e, sizeof(e), 1, arq); 
               }
                    fclose(arq); 
                    fclose(aux);
                    remove("evento.txt"); 
                    rename("aux.txt", "evento.txt"); 
               }

   

}

Com esse codigo tentasse, o usuario digitar o codigo do evento que quer remover, com isso ele sobrescreve tudo para um arquivo auxiliar, em seguida deleta o evento.txt e renomeia o auxiliar para evento. mais não to conseguindo realizar essa operacao :S

Cara, tu pode me dizer qual pe o resultado apresentado quando excutado este trexo de código? Faz tempo que não uso arquivos..porém, é uma pergunta meio tola mas, na função (!feof(arq)) ele automaticamente vai apontando aos próximos registros e jogando todo o conteudo do arquivo na variável e (transformando-a num vetor)?

[]'s

Link para o comentário
Compartilhar em outros sites

  • 0

Bixo, acredito que teu erro tá no seu IF....

preste atenção no que tu tá mandando ele fazer...

if (e.id != excluir) {
                            fwrite(&e, sizeof(e), 1, aux); 
                            fread(&e, sizeof(e), 1, arq); 
                           }

Link para o comentário
Compartilhar em outros sites

  • 0

void cadastraEvento() {
     
    evento e[2];
    int i=0;
    FILE *arq;
    char confirmar;
    
    while(i<=2) {
       
       fflush(stdin);
       printf("Id\n");
       scanf("%d",&e[i].id);
                
       fflush(stdin);
       printf("Nome \n");
       gets(e[i].nome);
      
       fflush(stdin);
       printf("Quantidade\n");
       scanf("%d",&e[i].qtdepart);
      
       arq = fopen("evento.txt","a");
       if (!arq) {
           printf("Error 432423.");
        } else {
           fwrite(&e, sizeof(evento), 1, arq);
           fclose(arq);  
        }
        
        
     if(i<=2) {
         printf("\n\nDeseja Cadastrar outro Evento[s\\n]: ");
         confirmar = getche();         
         
           if (confirmar == 's') {
               i++;  
               cadastraEvento();
            }else {
                    menuPrincipal();
                  }         
     }
  }
 }

Segue meu raciocinio ai Rodrgio, eu estou tentando com isso armazenar, mais de uma estrutura, so que estou perdido no laco no while, como eu faria , para que quando ele cadastrasse um se deseja-se cadastrar um proximo ele não comecasse do 0 e se do 1 já que o, 0 já foi inserido.

Como tou tentando ali ele depois de confirmar um proximo cadastro ele incremente o i, so que axo q assim não ta dando certo.

Link para o comentário
Compartilhar em outros sites

  • 0
void cadastraEvento() {
     
    evento e[2];
    int i=0;
    FILE *arq;
    char confirmar;
    
    while(i<=2) {
       
       fflush(stdin);
       printf("Id\n");
       scanf("%d",&e[i].id);
                
       fflush(stdin);
       printf("Nome \n");
       gets(e[i].nome);
      
       fflush(stdin);
       printf("Quantidade\n");
       scanf("%d",&e[i].qtdepart);
      
       arq = fopen("evento.txt","a");
       if (!arq) {
           printf("Error 432423.");
        } else {
           fwrite(&e, sizeof(evento), 1, arq);
           fclose(arq);  
        }
        
        
     if(i<=2) {
         printf("\n\nDeseja Cadastrar outro Evento[s\\n]: ");
         confirmar = getche();         
         
           if (confirmar == 's') {
               i++;  
               cadastraEvento();
            }else {
                    menuPrincipal();
                  }         
     }
  }
 }

Segue meu raciocinio ai Rodrgio, eu estou tentando com isso armazenar, mais de uma estrutura, so que estou perdido no laco no while, como eu faria , para que quando ele cadastrasse um se deseja-se cadastrar um proximo ele não comecasse do 0 e se do 1 já que o, 0 já foi inserido.

Como tou tentando ali ele depois de confirmar um proximo cadastro ele incremente o i, so que axo q assim não ta dando certo.

Tem algum lugar, fora a memória, que tu esteja armazenando o i??

Nas suas gravações, não me recordo se o fwrite posiciona automaticamente

no final do arquivo, isso acontece ou ele grava em cima de algo

se tiver algo escrito?

O seu i pelo que vi é um indice, este indice tem que ser salvo e recuperado

na abertura do programa, para que tu não perca a referencia de quantos registros

possiu o arquivo. Ou tu coloca o i fora da função, direto no main de seu programa e

adiciona a passagem dele a função.

Quanto ao fwrite, é + um warning meu pois não me recordo e eu sempre uso fseek

antes.

Espero ter dado + uma ajuda!

abraços!

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
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...