terça-feira, 8 de dezembro de 2009

Codigo em C - Estacionamento para fins acadêmicos

E ai Galera... meu trabalho do estacionamento ficou interessante pelos detalhes, mas ta cheio de BUGs...

quem quiser dar um bizu ta ai:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
typedef struct ticket
{
    char carro[50];
    char placa[50];
    int move;
    int tick;
    time_t hora_entrada;
    struct ticket *prox;
}nodo;
struct tm *ptr;
int ticket=1;
void imprime_hora(nodo *lista)//funciona
{
     ptr=localtime(&lista->hora_entrada);
     printf(asctime(ptr));
}
void insere(nodo **lista,char *car,char *plac)//funciona
{
     nodo *novo;
     novo=(nodo*)malloc(sizeof(nodo));
     strcpy(novo->carro,car);
     strcpy(novo->placa,plac);
     novo->hora_entrada=time(NULL);
     novo->move=0;
     novo->tick=ticket;
     novo->prox=*lista;
     *lista=novo;
     ticket++;
     printf("\nSEU TICKET COMPROVANTE É  %d\n",novo->tick);
}
void entrada(nodo **lista)//funciona
{
     char car[50],plac[50];
     printf("\n NOME DO CARRO: \t");
     gets(car);
     printf("\n PLACA: \t");
     gets(plac);
     insere(&*lista,car,plac);
}
void imprime(nodo **lista)//funciona
{
     nodo *aux;
     if (*lista==NULL)
     {
         printf("LISTA VAZIA MANEH \n");
     }
     else
     {
         aux=*lista;
         printf("\nCarro: %s",aux->carro);
         printf("\nPlaca: %s",aux->placa);
         printf("\nMovimentacoes: %d",aux->move);
         printf("\nHorario de entrada:");
         imprime_hora(aux);
                
     }
}
int verifica_fila_cheia(nodo **lista)//funciona
{
    int i=0;
    nodo *aux;
    aux=*lista;
    while(aux!=NULL)
    {
        aux=aux->prox;
        i++;
    }
    if(i>=4)
       return 1;
    else
       return 0;
}
void cabecalho()
{
     printf("----------------------------------------------------------------------------\n");
     printf("|                                                                          |\n");
     printf("|\t\t\tBEM VINDO AO STAR PARK I (beta)\t\t\t   |\n");
     printf("|                                                                          |\n");
     printf("----------------------------------------------------------------------------\n");
   
   
}
void desenha(nodo ** l1,nodo ** l2, nodo ** l3,nodo **l4)//funciona
{
    nodo *aux1,*aux2,*aux3,*aux4;
    int i;
    aux1=*l1;
    aux2=*l2;
    aux3=*l3;
    aux4=*l4;
    printf("\t\t\t|---|---|---|---|\n");
    for(i=0;i<4;i++)
    {
        printf("\t\t\t|");
        if(aux1!=NULL)
        {
            printf(" X ");
            aux1=aux1->prox;
        }
        else
        {
            printf("   ");
        }
        printf("|");
        if(aux2!=NULL)
        {
            printf(" X ");
            aux2=aux2->prox;
        }
        else
        {
            printf("   ");
        }
        printf("|");
        if(aux3!=NULL)
        {
            printf(" X ");
            aux3=aux3->prox;
        }
        else
        {
            printf("   ");
        }
        printf("|");
        if(aux4!=NULL)
        {
            printf(" X ");
            aux4=aux4->prox;
        }
        else
        {
            printf("   ");
        }
        printf("|");
        printf("\n");
    }
}

nodo *busca_carro(nodo **lista,int key)
{
     nodo *aux;
     aux=*lista;
     while(aux!=NULL)
     {
        if(aux->tick==key)
           return aux;
        aux=aux->prox;
     }
     return NULL;
}
void insere_manobra(nodo **carro,nodo **pilha_manobra)
{
     nodo *novo;
     novo=(nodo*)malloc(sizeof(nodo));
     strcpy(novo->carro,(*carro)->carro);
     strcpy(novo->placa,(*carro)->placa);
     novo->move=((*carro)->move);
     novo->tick=(*carro)->tick;
     novo->hora_entrada=(*carro)->hora_entrada;
     novo->prox=*pilha_manobra;
     *pilha_manobra=novo;
}
void retorna_estacionamento(nodo **manobra,nodo **lista)
{
     nodo *novo;
     novo=(nodo*)malloc(sizeof(nodo));
     strcpy(novo->carro,(*manobra)->carro);
     strcpy(novo->placa,(*manobra)->placa);
     novo->move=((*manobra)->move+1);
     novo->hora_entrada=(*manobra)->hora_entrada;
     novo->tick=(*manobra)->tick;
     novo->prox=*lista;
     *lista=novo;
     free(*manobra);
}
   
    
void retira(nodo ** saindo,nodo **lista)
{
     nodo *aux,*manobra=NULL;
     aux=*lista;
     if(aux==(*saindo) || ((*lista)->prox)==NULL )
     {
         (*lista)=(*lista)->prox;
         free(*saindo);
     }
     else
     {
         while(aux!=(*saindo))
         {
             insere_manobra(&aux,&manobra);
              aux=aux->prox;
              free((*lista));
              *lista=aux;
         }
         *lista=(*lista)->prox;
         free(*saindo);
         aux=manobra;
         while(aux!=NULL)
         {
             retorna_estacionamento(&manobra,&*lista);
             aux=aux->prox;
         }
     }
}
   
   
       
   
int main ()
{
    int escolha,tic;
    nodo *fila1=NULL,*fila2=NULL,*fila3=NULL,*fila4=NULL,*aux;
    cabecalho();
    do{
       printf("DIGITE A OPCAO DESEJADA:\n");
       printf("\t1-REGISTRAR ENTRADA DE VEICULO;\n\t2-REGISTRAR SAIDA DE UM VEICULO;\n\t3-IMPRIMIR O STATUS DO ESTACIONAMENTO;\n\t4-SAIR;\n\t");
       scanf("%d",&escolha);
       fflush(stdin);
       switch(escolha)
          {
           case 1:
                  if(verifica_fila_cheia(&fila1)==0)
                     entrada(&fila1);
                  else
                  {
                    
                      if(verifica_fila_cheia(&fila2)==0)
                         entrada(&fila2);
                      else
                      {
                        
                          if(verifica_fila_cheia(&fila3)==0)
                             entrada(&fila3);
                          else
                          {
                            
                              if(verifica_fila_cheia(&fila4)==0)
                                 entrada(&fila4);
                              else
                                  printf("O ESTACIONAMENTO ESTA CHEIO... PROCURE OUTRA FILIAL!!!\n");
                          }
                      }
                  }
                  break;
           case 2: printf("Digite o codigo do ticket:");
                   scanf("%d",&tic);
                   aux=busca_carro(&fila1,tic);
                   if(aux!=NULL)
                   {
                       imprime(&aux);
                       retira(&aux,&fila1);
                   }
                   else
                   {
                       aux=busca_carro(&fila2,tic);
                       if(aux!=NULL)
                       {
                           imprime(&aux);
                           retira(&aux,&fila2);
                       }
                       else
                       {
                           aux=busca_carro(&fila3,tic);
                           if(aux!=NULL)
                           {
                               imprime(&aux);
                               retira(&aux,&fila3);
                           }
                           else
                           {
                               aux=busca_carro(&fila4,tic);
                               if(aux!=NULL)
                               {
                                   imprime(&aux);
                                   retira(&aux,&fila4);
                               }
                           }
                       }
                   }
                              
                   if(aux==NULL)
                       printf("CARRO NAO ENCONTRADO\n");
                   break;                     
                    
           case 3: desenha(&fila1,&fila2,&fila3,&fila4);
                   break;
           case 4:printf("OBRIGADO POR UTILIZAR O SISTEMA\n");
                  break;
          }
       }while(escolha!=4);
    system("PAUSE");
    return 0;

}

Nenhum comentário:

Postar um comentário