Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

roberto de souza gomes

programa não permitir reservar uma cadeira ja reservada em c.

Recommended Posts

boa noite pessoal, eu sou estudante de ADS , e sou novo na programacao, estou desenvolvendo 
um sistema para um trabalho final do curso, um sistema de controle de entrada e saida de usuarios,
mas nele esta acontecendo um erro, quando eu digito um numero de uma cadeira que ja esta comprada
ele aceita, estou vendo e revendo o codigo  mas nao vejo erro.
alguem pode apontar o meu erro?
obrigado, segue o codigo:

 

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#define linha 11
#define coluna 11
#define valor_minimo 29
#define valor_maximo 121
int valida(int num, int *ant, int cont);
void edita (int sort,int cont);
void chamaSorteio();
void CadeiraNum();//declara a funcao que preenche os lugares com numeros
void painel();//declara a funcao que mostra a matriz
void compra();//declara a funcao que faz a compra dos lugares
void cad();
int resp;
int matriz[linha][coluna];//
FILE *ponteiroArquivo;   
struct cadastro{
    char nome [50];
    char cpf [15];
    char email [30];
    };
     struct cadastro aux;

int main(){
    int opcao=0;
    int contador=0,lugares=92;
    char nomes[30];
    char timeStr[9];
    
    struct tm *data_hora_atual;
    time_t segundos;
    time(&segundos);
    data_hora_atual = localtime(&segundos); 
    
    CadeiraNum(matriz);//aqui complementa a funcao cadeiraNum(); colocando os numeros.
    
    do{
        //a partir daqui e mostrado para o usuario as opcoes do programa principal
         system("cls"); 
         printf("\n\n                      MENU  \n\n");      
         printf("                  1- Reservar Cadeira       (Ainda restam (%d) lugares)\n",lugares-contador);        
         printf("                  2- Mostrar Painel de lugares\n"); 
         printf("                  3- Sorteio\n");       
         printf("                  4- SAIR           \n");        
         printf("                   opcao: ");
         scanf("%d",&opcao);               
                       
     switch(opcao){
        case 1:
          system("cls");          
          //cad();
         // getch();
          system("cls"); 
          painel(matriz);//antes de escolher o lugar antes e chamado a matriz e o usuario pode ver o painel, inclusive com os lugares do teatro comprados atualizados.
          texto:
          printf("\n\nDigite o numero da cadeira desejada: \n");
          scanf("%d",&resp);
           
          if ((resp<=0) || (resp>=122)){  
              printf("Esta cadeira não existe!!!Escolha outra!\n");
              goto texto; 
            getch();              
        }else if ((resp>=1) && (resp<=22)){  
              printf("Esta cadeira ja esta reservada!!!Escolha outra!\n");
              goto texto; 
            getch();              
        }
        else if ((resp>=23) && (resp<=28)){  
              printf("Esta cadeira é preferencial!!!Escolha outra!\n");
              goto texto; 
            getch();              
        }else if (matriz[linha][coluna]==0){
            printf("Esta cadeira esta ocupada!!! Escolha outra!\n");
            goto texto;
            getch();
        }
        else (printf(" \n"));

           ponteiroArquivo=fopen("arquivo.txt","r"); 
          fgets(nomes,30,ponteiroArquivo);
          
          fclose(ponteiroArquivo);
          system("cls"); 
          
         _strtime( timeStr );
          printf_s( "\tParabens %s pela sua compra no dia %d/%d/%d as %s \n\nSeu ticket sera enviado por e-mail!!\n",aux.nome, data_hora_atual->tm_mday,data_hora_atual->tm_mon+1,data_hora_atual->tm_year+1900,timeStr);
            printf("seu assento e %d\n",resp);
            contador++;
          system("pause");         
          break;
        
        case 2:
          system("cls");
          system("cls");
          painel(matriz);//chama a funcao painel que contem a matriz 
          printf("\n\n");
          system("pause");
          break;
          
        case 3:
          system("cls");
          chamaSorteio();
          system("pause");
          break;
          
        //o usuario escolhendo este caso o programa retorna nada e fecha
        case 4:
          return 0;
          break;
             
        default:
            printf("OPCAO INVALIDA!!!\n");
            system("pause");
        break;
     }
  }while(1==1); 
  
    
system("pause");    
return(0);
}

//esta e a funcao responsavel por preencher todos os lugares do teatro com numeros!
void CadeiraNum(){
    int c,l;
    int num;
    num=1;
    
    for(l=1;l<=linha;l++)
     for(c=1;c<=coluna;c++){      
     matriz[l][c]=num;
       num++; 
    }
    matriz[3][1]=333; 
    matriz[3][2]=333;
    matriz[3][3]=333;
    matriz[3][4]=333;
    matriz[3][5]=333;
    matriz[3][6]=333;
    /**/
    matriz[1][1]=222; 
    matriz[1][2]=222;
    matriz[1][3]=222;
    matriz[1][4]=222;
    matriz[1][5]=222;
    matriz[1][6]=222;
    matriz[1][7]=222;
    matriz[1][8]=222;
    matriz[1][9]=222;
    matriz[1][10]=222;
    matriz[1][11]=222;
    /**/
    matriz[2][1]=222;
    matriz[2][2]=222;
    matriz[2][3]=222;
    matriz[2][4]=222;
    matriz[2][5]=222;
    matriz[2][6]=222;
    matriz[2][7]=222;
    matriz[2][8]=222;
    matriz[2][9]=222;
    matriz[2][10]=222;
    matriz[2][11]=222;   
}

//esta e a funcao que cria as linhas e as colunas do teatro matriz
void painel(){
  
  int c,l;
  printf("\n            PAINEL DE OCUPACOES   \n\n");
  printf("          ");
   
  
  for(c=1;c<=coluna;c++)
    printf("\t%d",c);
  
  for(l=1;l<=linha;l++){
     printf("\n\n\t%d",l);
     for(c=1;c<=coluna;c++)
     
       
    if(matriz[l][c]==222){
         printf("\t(R)");
     }else if(matriz[l][c]==resp){
         matriz[l][c]=0;
         printf("\t(C)");
     }else if(matriz[l][c]==0){
         printf("\t(c)");
     }
     else if(matriz[l][c]==333){
         printf("\t(P)");
     }     else printf("\t(%d)",matriz[l][c]);
            
  }
    printf("\n\n\t(29-121) - LUGAR LIVRE    (p) - Assento preferencial   (C) - CADEIRA JA COMPRADA   (R) CADEIRA RESERVADA\n");

//funcao que marca no lugar escolhido o valor 0 guardando o lugar 
/*void compra(int l, int c){
  
  
  if(resp==matriz[linha][linha]){
    matriz[linha][coluna] = 0;
}
} */
void cad(){

    
    ponteiroArquivo=(fopen("arquivo.txt","a")); // "a"  - cria um arquivo novo, ou modifica um ja existente.
    getchar();
    printf("\t\tSEJA BEM VINDO AO TEATRO DA UNIP!!\n\n");
    printf("Antes de comprar a cadeira vamos fazer um breve cadastro........\n\npresssione ENTER para continuar......\n\n\n");
    getch();
    printf("Digite seu nome: ");
    fgets (aux.nome, 50 ,stdin);

    getchar();
    printf("Digite seu CPF: ");  
    fgets (aux.cpf, 15 ,stdin);

    getchar();
    printf("Digite seu Email: ");
    fgets (aux.email , 30 ,stdin);

    //gravando com fprintf no arquivo
    printf("\n");
    
    fprintf(ponteiroArquivo, "\n------------------------\n");
    fprintf(ponteiroArquivo,"nome: %s\n",aux.nome);
    fprintf(ponteiroArquivo,"CPF: %s\n",aux.cpf);
    fprintf(ponteiroArquivo,"Email: %s\n",aux.email);

    fclose(ponteiroArquivo);//fecha o arquivo
}
void chamaSorteio(){
    int i;
    int sorteados[4];
    
    srand(time(NULL));
    
    printf("---------|SORTEIO\n\n");
    
    for(i=0;i<4;i++){
        sorteados = valor_minimo+rand()%(valor_maximo-valor_minimo);
        if(i==0){
            edita(sorteados,i);
        }
        else {
            sorteados = valida(sorteados,sorteados,i);
            edita(sorteados,i);
        }
    }
    printf("------------------------------------------");
        getch();
        printf("\nParabens a todos os premiados!!\n\n");
        getch();
}

int valida(int num, int *ant, int cont){
    int aux;
    
    for(aux=0;aux<cont;aux++){
        while(num==*(ant+aux)){
            num=valor_minimo+rand()%(valor_maximo-valor_minimo);
        }        
    }
    return num;
}
void edita (int sort,int cont){
            
        printf("\t%d°premiado usuario da caderia : %.2d\n",cont+1,sort);        
        
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por biza
      Ola
      Estou  a construir um datalogger em código C.Desta forma necessito passar os dados entre ficheiros. O meu problema está na inclusão de algumas variáveis no topo de um arquivo .txt onde os dados são salvos. Variáveis como tempo de data e hora, id do dispositivo e muito mais... Para isso preciso de ajuda, gostaria que os dados estivessem disponíveis para todos os arquivos, até aí é fácil, basta incluir a variável como extern, no arquivos *.h e incluí-lo em todos os outros que você deseja que a variável esteja disponível. mas como posso fazer para ter acesso a ele dentro do array que preciso?
      Exemplo: main.c
      #include "main.h" char dateTimeFormat[24]; void main(void){ dateTimeFormat = "22-02-22 13:23:04"; } main.h
      extern char dateTimeFormat[24];  
      teste.c
       
      #include "main.h" extern char dateTimeFormat[24]; /*Header .txt file initialization*/ volatile char headerFile[] ="\n\n" "# HEALT MONITORING SYSTEM \r\n" "# DEVELOPED: BIZA \r\n" "# VERSION: B \r\n" "# DATATIMECAPTURE:"+dateTimeFormat+ "\r\n" "# SAMPLINGFREQUENCY: 500 \r\n" "# SAMPLECHANNELS: 1 2 3 4 5 6 7 8 \r\n" "# SAMPLINGRESULUTION: 24 \r\n" "# IDDEVICE: HEALTHY \r\n" "# ENDOFHEADER  
      Como posso incluir a variável "dateTimeFormat" dentro do headerFile como descrevi acima?
       
    • Por oromotoceu
      #include <stdio.h>
      #include <stdlib.h>
      #define MAXTAM 1000
      int Frente, Tras, Lista[MAXTAM];
      void Lista_Construtor(){
      Frente=0;
      Tras=-1;
      }
      int Lista_Vazia(){
      if(Tras==-1)
      return 1;
      else
      return 0;
      }
      int Lista_Cheia(){
      if(Tras==MAXTAM-1)
      return 1;
      else
      return 0;
      }
      int Lista_Tamanho(){
      return Tras+1;
      }
      int Lista_Inserir_Inicio(int Valor){
      if(Lista_Cheia()){
      return 0;
      }else{
      /*se quero inserir na posição 0,
      vou deslocar todos os elementos para frente*/
      for(int i=Tras+1;i>Frente;i--){
      Lista=Lista[i-1];
      }
      Lista[Frente]=Valor;
      Tras++;
      return 1;
        }
      }
      int Lista_Inserir_Fim(int Valor){
      if(Lista_Cheia()){
      return 0;
      }else{
      Tras++;
      Lista[Tras]=Valor;
      return 1;
        }
      }
      int Lista_Inserir(int Valor, int Posicao){
      if(Lista_Cheia()){
      return 0;
      }else{
      /* Para verificar se a posição
      está no meio da lista */
      if(Posicao>Frente && Posicao<Tras){
      for(int i=Tras+1;i>Posicao;i--){
      Lista=Lista[i-1];
      }
      Lista[Posicao]=Valor;
      Tras++;
      return 1;
      }else{ 
      return 0;
         }
        }
      }
      int Lista_Remover_Inicio(int *Valor){
      if(Lista_Vazia()){
      return 0;
      }else{
      *Valor =Lista[Frente];
      for(int i=Frente;i<Tras;i++){
      Lista=Lista[i+1];
         }
      Tras--;
        }
      }
      int Lista_Remover_Fim(int *Valor){
      if(Lista_Vazia()){
      return 0;
      }else{
      *Valor=Lista[Tras];
      Tras--;
      return 1;
        }
      }
      int Lista_Remover(int *Valor, int Posicao){
      if(Lista_Vazia()){
      return 0;
      }else{
      if(Posicao>Frente && Posicao<Tras){
      *Valor=Lista[Posicao];
      for(int i=Posicao;i<Tras;i++){
      Lista=Lista[i+1];
      }
      Tras--;
      return 1;
         }
        }
      }
      int Lista_Get_toda(int *Valor){
      if(Lista_Vazia()){
      return 0;
      }else{
      *Valor=Lista[Frente];
      return 1;
        }
      }
      int Lista_Get_inicio(int *Valor){
      if(Lista_Vazia()){
      return 0;
      }else{
      *Valor=Lista[Frente];
      return 1;
        }
      }
      int Lista_Get_Fim(int *Valor){
      if(Lista_Vazia()){
      return 0;
      }else{
      *Valor=Lista[Tras];
      return 1;
        }
      }
      int Lista_Busca_Valor(int Valor, int *Posicao){
      int i;
      if(Lista_Vazia()){
      return 0;
      }else{
      for(i=Frente;i<Tras;i++){
      if(Lista==Valor){
      break;
        }
      }
      if(i==Tras){
      return 0;
      }else{
      *Posicao=i; 
      return 1;
         }
        }
      }
      int Lista_Busca_Posicao(int *Valor, int Posicao){
      if(Lista_Vazia()){
      return 0;
      }else{
      if(Posicao>Frente && Posicao<Tras){
      *Valor=Lista[Posicao];
      return 1;
      }else{
      return 0;
         }
        }
      }
      int main(){
      int i,Valor,op=0,pos;
      Lista_Construtor();
      while(op!=12){
      printf("*** Menu de opções ***\n");
      printf("1-Inserir início\n");
      printf("2-Inserir fim\n");
      printf("3-Inserir meio\n");
      printf("4-Excluir início\n");
      printf("5-Excluir fim\n");
      printf("6-Excluir meio\n");
      printf("7-Mostrar toda lista\n");
      printf("8-Mostrar primeiro item da lista\n");
      printf("9-Mostrar último item da lista\n");
      printf("10-Mostrar a posição de um item da lista\n");
      printf("11-Mostrar o valor de uma posição\n");
      printf("12-Sair\n");
      printf("Escolha uma opção: ");
      scanf("%d", &op);
      switch(op){
          case 1:
              printf("Digite o valor a ser inserido: ");
              scanf("%d", &Valor);
              Lista_Inserir_Inicio(Valor);
              break;
          case 2:
              printf("Digite o valor a ser inserido: ");
              scanf("%d", &Valor);
              Lista_Inserir_fim(Valor);
              break;
            case 3:
              printf("Digite o valor a ser inserido: ");
              scanf("%d", &Valor);
              printf("Digite a posição que deseja inserir: ");
              scanf("%d", &pos);
              Lista_ Inserir_meio(int Valor, pos); 
              break;
            case 4:
              printf("Digite a remoção do início: ");
              scanf("%d", &*Valor);
              Lista_ Excluir_inicio(*Valor); 
              break;
              case 5:
              printf("Digite a remoção do fim: ");
              scanf("%d", &*Valor);
              Lista_ Excluir_fim(*Valor); 
              break;
              case 6:
              printf("Digite a remoção do meio: ");
              scanf("%d", &Valor);
              printf("Digite a posição que deseja remover: ");
              scanf("%d", &*Posicao);
              Lista_ Excluir_meio(intValor, * pos); 
              break;
               case 7:
              printf("Digite ao a mostrar toda lista: ");
              scanf("%d", &Valor);
              Lista_ mostrar_toda_lista(Valor);
              break;
             case 8:
              printf("Digite ao a mostrar primeiro item da lista: ");
              scanf("%d", &*Valor);
              Lista_ mostrar_primeiro_item_da_lista(*Valor);
              break;
             case 9:
              printf("Digite ao a mostrar último item da lista: ");
              scanf("%d", &*Valor);
              Lista_ mostrar_ultimo_item_da_lista(*Valor);
              break;
              case 10:
              printf("Digite ao a mostrar a posição de um item da lista: ");
              scanf("%d", &Valor);
              printf("Digite a posição que deseja mostrar na lista: ");
              scanf("%d", &* pos);
              Lista_ mostrar_posicao_de_um_item_da_lista(intValor, *pos);
              break;
              case 11:
              printf("Digite ao a mostrar o valor de uma posição: ");
              scanf("%d", &*Valor
              printf("Digite a posição que deseja mostrar no valor: ");
              scanf("%d", &pos);
              Lista_ mostrar_posicao_de_um_valor_da_lista(int*Valor, pos);
              break;
              case 12:
              default:
              printf("Valor Invalido!\n");
              system("PAUSE");
               }
         }
       return 0;
      }
    • Por oromotoceu
      bom dia pode me ajudar nessa questão por favor
      O programa deverá trabalhar dados de um veículo, onde será armazenado, Nome do proprietário, placa do carro, modelo do carro e preço do carro.
      O programa deve ter as seguintes opções:
      Inserir dados (todos os dados sugeridos no enunciado acima).
      Excluir um Carro específico com a busca pela placa.
      Editar dados de um Carro com a busca pela placa.
      Consultar carro por Placa.
      Exibir todos os dados cadastrados.
      Finalizar programa.
      A opção exibir todos os dados, apresenta tudo que já foi cadastrado e está na memória.
       
    • Por TK_T
      olá sou iniciante consegui fazer um o código de um exercício só que quando eu peço o valor 12ab ele lê como numérica alguém pode me ajudar? 
      Exercício: Leia uma string e diga se a mesma é numérica (na base decimal) ou não.
      Ex.: "123" -> numérica
      "abc" -> não numérica
      "12ab" -> não numérica
      "12.34" -> numérica 
      #include <stdio.h> int main() { char Numero; printf("Digite Algo: "); scanf("%c", &Numero); if(Numero == '1' || Numero == '2' || Numero == '3' || Numero == '4' || Numero == '5' || Numero == '6' || Numero == '7' || Numero == '8' || Numero== '9' || Numero == '0') printf("\tNumérica...\n"); else printf("\tNão Numérica\n"); return 0; }  
    • Por cgm2k7
      Boa noite!
      Bom preciso de uma dica/ajuda em uma problema...
      tenho duas structs, LIST e NO.  lista duplamente encadeada.
      //insiro/crio 100.000 nos.
       
      struct no{ char *nome; char sexo; float nota; float media; int id; struct no *next, *prev; }; struct list{ long int size_list; struct no *begin, *end; }; typedef struct no NO; typedef struct list LIST; for(int y = 0; y < 100000; y++) inserir_inicio(*list); void CreateNo(NO **no) { *no = (NO*)calloc(1,sizeof(NO)); if (*no) { (*no)->nome = "cicero"; (*no)->sexo = 'M'; (*no)->nota = 0.0; (*no)->media = 1; (*no)->id++; (*no)->next = NULL; (*no)->prev = NULL; is_Ok = true; } else { printf("ERRO: Ao alocar memoria em 'void CreateNo(NO **no)'\n"); is_Ok = false; return; } } void inserir_inicio(LIST *list) { NO *no; CreateNo(&no); if (is_Ok) { no->next = list->begin; list->begin = no; list->size_list++; } } // destroy os nos void DestoyList(LIST **list) { if ((*list)->begin == NULL) { free(*list); printf("Lista vazia!\n\n"); } else { NO *p = (*list)->begin, *tmp = NULL; while (p != NULL) { tmp = p; p = p->next; /*tmp->nome = "0"; tmp->sexo = '\0'; tmp->id = 0; tmp->media = 0;*/ free(tmp); } free(p); (*list = NULL); } } o problema é o seguinte:
      quando inicio o aplicativo ele começão com 512kb, quando criando  100.000  na memoria heap, aumenta para mais ou menos uns 7,8mb, bom ate aqui tudo oks
      mas quando delete este nos com o free() esperava eu q retornasse para os mesmo 512kb inicias do aplicativo, mas isso não acontece, ele retorna para 1,3mb.
      minha pergunta é: porque não deleta tudo, já setei zeros e para todos os membros da struct no mas mesmo assim não deleta tudo.
      Se alguém poder meda da uma dica. OBS: não quero código  pronto eu quero apenas dicas se possível bem explicada porque sou meio novato em c kkk.
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.