Kimossab

...

Jan 9th, 2015
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 7.33 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <windows.h>
  3. #include <mmsystem.h>
  4. #include <stdlib.h>
  5.  
  6. typedef struct
  7. {
  8.     char mat[9];
  9.     int sit;
  10.     char cod[4];
  11. }Mem;
  12.  
  13. Mem *Cam = NULL, *Par = NULL;
  14. int NCam=0,NPar=0;
  15.  
  16. void CarregarFicheiros()
  17. {
  18.     FILE * pFile;
  19.     char mystring [100];
  20.  
  21.     pFile = fopen ("camioes.txt" , "r");
  22.     if (pFile == NULL)
  23.     {
  24.         perror ("Error opening file");
  25.         return;
  26.     }
  27.     while(!feof(pFile))
  28.     {
  29.         Cam = (Mem *)realloc(Cam,sizeof(Mem) * ++NCam);
  30.         fgets (mystring , 100 , pFile);
  31.         sscanf(mystring, "%s%d%s", Cam[NCam-1].mat, &Cam[NCam-1].sit, Cam[NCam-1].cod);
  32.     }
  33.     fclose (pFile);
  34.  
  35.     pFile = fopen ("parque.txt" , "r");
  36.     if (pFile == NULL)
  37.     {
  38.         perror ("Error opening file");
  39.         return;
  40.     }
  41.     while(!feof(pFile))
  42.     {
  43.         Par = (Mem *)realloc(Par,sizeof(Mem) * ++NPar);
  44.         fgets (mystring , 100 , pFile);
  45.         sscanf(mystring, "%s%d%s", Par[NPar-1].cod, &Par[NPar-1].sit, Par[NPar-1].mat);
  46.     }
  47.     fclose(pFile);
  48. }
  49.  
  50. void GravarFicheiros()
  51. {
  52.     FILE * pFile;
  53.     char mystring [100];
  54.  
  55.     pFile = fopen ("camioes.txt" , "w");
  56.     if (pFile == NULL)
  57.     {
  58.         perror ("Error opening file");
  59.         return;
  60.     }
  61.     for(int i=0; i<NCam-1; i++)
  62.         fprintf(pFile, "%s%d%s\n", Cam[i].mat, Cam[i].sit, Cam[i].cod);
  63.     fprintf(pFile, "%s%d%s\n", Cam[NCam].mat, Cam[NCam].sit, Cam[NCam].cod);
  64.     fclose (pFile);
  65.  
  66.     pFile = fopen ("parque.txt" , "w");
  67.     if (pFile == NULL)
  68.     {
  69.         perror ("Error opening file");
  70.         return;
  71.     }
  72.     for(int i=0; i<NPar-1; i++)
  73.         fprintf(pFile, "%s%d%s", Par[i].cod, Par[i].sit, Par[i].mat);
  74.     fclose(pFile);
  75. }
  76.  
  77. void verc()
  78. {
  79.     system("cls");
  80.     printf("Matricula\t\tSituacao\tCodigo\n\n");
  81.     for(int i=0; i<NCam; i++)
  82.     {
  83.         printf("%s\t%d\t%s\n",Cam[i].mat,Cam[i].sit,Cam[i].cod);
  84.         if(i != 0 && i%100 == 0)
  85.         {
  86.             printf("Pressione enter para continuar a mostrar");
  87.             fflush(stdin);
  88.             getchar();
  89.             system("cls");
  90.         }
  91.     }
  92.     printf("Pressione enter para continuar a mostrar");
  93.     fflush(stdin);
  94.     getchar();
  95. }
  96. void verp()
  97. {
  98.     system("cls");
  99.     printf("Codigo\tSituacao\tMatricula\n\n");
  100.     for(int i=0; i<NPar; i++)
  101.     {
  102.         printf("%s\t%d\t%s\n",Par[i].cod,Par[i].sit,Par[i].mat);
  103.         if(i != 0 && i%100 == 0)
  104.         {
  105.             printf("Pressione enter para continuar a mostrar");
  106.             fflush(stdin);
  107.             getchar();
  108.             system("cls");
  109.         }
  110.     }
  111.     printf("Pressione enter para continuar a mostrar");
  112.     fflush(stdin);
  113.     getchar();
  114. }
  115.  
  116. int GetPosParque(char *c)
  117. {
  118.     for(int i=0; i<NPar; i++)
  119.         if(!stricmp(c,Par[i].cod))
  120.             return i;
  121.     return -1;
  122. }
  123.  
  124. int GetPosCam(char *mat)
  125. {
  126.     for(int i=0; i<NCam; i++)
  127.         if(!stricmp(mat,Cam[i].mat))
  128.             return i;
  129.     return -1;
  130. }
  131.  
  132. void AddCam()
  133. {
  134.     Cam = (Mem *)realloc(Cam,sizeof(Mem) * (NCam+1)); //adicionar mais um espaço no array dos camiões
  135.     printf("\nInsira a matricula do camiao (00-XX-00): ");
  136.     scanf("%s", Cam[NCam].mat);
  137.     printf("Insira a situacao do camiao: ");
  138.     while(scanf("%d", &Cam[NCam].sit) != 1 || Cam[NCam].sit > 8 || Cam[NCam].sit < 0)
  139.     {
  140.         printf("Apenas numeros entre 0 e 8.\n");
  141.         printf("Insira a situacao do camiao: ");
  142.     }
  143.     if(Cam[NCam].sit == 0)
  144.     {
  145.         strcpy(Cam[NCam].cod,"-");
  146.         Cam[NCam].sit = 0;
  147.         NCam++;
  148.         return;
  149.     }
  150.     printf("Insira o codigo do lugar do camiao: ");
  151.     int p;
  152.     while(scanf("%s", Cam[NCam].cod), p = GetPosParque(Cam[NCam].cod) == -1 || !strcmp(Par[p].mat,"-"))
  153.     {
  154.         printf("Lugar inexistente ou ocupado.\n");
  155.         printf("Insira o codigo do lugar do camiao: ");
  156.     }
  157.     strcpy(Par[p].mat,Cam[NCam].mat);
  158.     Par[p].sit = Cam[NCam].sit;
  159.     NCam++;
  160. }
  161.  
  162. void AlterarCam()
  163. {
  164.     printf("\nInsira a matricula do camiao (00-XX-00): ");
  165.     char mat[9]; int i;
  166.     while(scanf("%s", mat), i=GetPosCam(mat) == -1)
  167.     {
  168.         printf("\nCamiao nao encontrado.");
  169.         printf("\nInsira a matricula do camiao (00-XX-00): ");
  170.     }
  171.     printf("Matricula\tSituacao\tCodigo\n\n");
  172.     printf("%s\t%d\t%s\n",Cam[i].mat,Cam[i].sit,Cam[i].cod);
  173.  
  174.     int sit;
  175.     printf("Insira a nova situacao do camiao: ");
  176.     while(scanf("%d", &sit) != 1 || sit > 8 || sit < 0 || Cam[i].sit == sit)
  177.     {
  178.         printf("Apenas numeros entre 0 e 8.\n");
  179.         printf("Insira a situacao do camiao: ");
  180.     }
  181.     if(sit == 0)
  182.     {
  183.         Cam[i].sit = 0;
  184.         Par[GetPosParque(Cam[i].cod)].sit = 0;
  185.         strcpy(Par[GetPosParque(Cam[i].cod)].mat,"-");
  186.         strcpy(Cam[i].cod,"-");
  187.         return;
  188.     }
  189.     char cod[4]; int n;
  190.     printf("\nInsira o codigo do parque: ");
  191.     while(scanf("%s", cod), i=GetPosParque(cod) == -1 || strcmp(Par[i].mat,cod))
  192.     {
  193.         printf("\nParque nao encontrado. Ou parque ocupado.");
  194.         printf("\nInsira o codigo do parque: ");
  195.     }
  196.     Cam[i].sit = sit;
  197.     Par[n].sit = sit;
  198.     strcpy(Par[n].mat,Cam[i].mat);
  199.     strcpy(Cam[i].cod,Par[i].cod);
  200. }
  201.  
  202. void RemCam(int pos)
  203. {
  204.     if(!strcmp(Cam[pos].cod,"-"))
  205.     {
  206.         int n = GetPosParque(Cam[pos].cod);
  207.         Par[n].sit = 0;
  208.         strcpy(Par[n].mat,"-");
  209.     }
  210.     for(int i=pos+1; i<NCam; i++,pos++)
  211.         Cam[pos]=Cam[i];
  212.     Cam = (Mem *)realloc(Cam,sizeof(Mem) * (NCam-1));
  213. }
  214.  
  215. int menu()
  216. {
  217.     system("cls");
  218.  
  219.     int o ;
  220.    
  221.     printf("\n\t\t  ____________________________________");
  222.     printf("\n\t\t |                                   |");
  223.     printf("\n\t\t |      Adicionar Camiao [1]         |");
  224.     printf("\n\t\t |      Retirar Camiao [2]           |");
  225.     printf("\n\t\t |      Pesquisar Camiao [3]         |");
  226.     printf("\n\t\t |      Pesquisar Lugar [4]          |");        
  227.     printf("\n\t\t |      Ver dados camioes [5]        |");  
  228.     printf("\n\t\t |      Ver dados parque [6]         |");      
  229.     printf("\n\t\t |      Alterar situacao camiao [7]  |");  
  230.     printf("\n\t\t |      Adicionar lugar parque [8]   |");  
  231.     printf("\n\t\t |      Sair [9]                     |");
  232.     printf("\n\t\t |___________________________________|");
  233.  
  234.     printf("\n\n\n\t\t\tQual a opcao ?\t\t");
  235.     while(scanf("%d", &o) != 1 || o > 9 || o < 0)
  236.     {
  237.         printf("\n\n\n\t\t\tApenas numeros entre 0 e 6.");
  238.         printf("\n\n\n\t\t\tQual a opcao ?\t\t");
  239.     }
  240.  
  241.     return o ;
  242. }
  243.  
  244. void main()
  245. {
  246.     CarregarFicheiros();
  247.    
  248.     while(true)
  249.     {
  250.         char mat[9], cod[4];
  251.         int i;
  252.         switch(menu())
  253.         {
  254.         case 1 : AddCam();
  255.             break;
  256.         case 2 :
  257.                 printf("\nInsira a matricula do camiao a remover.\n");
  258.                 while(scanf("%s", mat), GetPosCam(mat) == -1)
  259.                 {
  260.                     printf("\nCamiao nao encontrado!\n");
  261.                     printf("Insira a situacao do camiao: ");
  262.                 }
  263.             break;
  264.         case 3 :
  265.                 printf("\nInsira a matricula do camiao a pesquisar.\n");
  266.                 scanf("%s", mat);
  267.                 if(GetPosCam(mat) != -1)
  268.                 {
  269.                     printf("\nCamiao nao encontrado!\n");
  270.                     break;
  271.                 }
  272.                 printf("\nCamiao Encontrado:\n%s\t%d\t%d\n", Cam[i].mat,Cam[i].sit,Cam[i].cod);
  273.             break;
  274.         case 4 :
  275.                 printf("\nInsira o codigo do lugar a pesquisar: ");
  276.                 scanf("%s", cod);
  277.                 if(GetPosCam(cod) != -1)
  278.                 {
  279.                     printf("\nLugar nao encontrado!\n");
  280.                     break;
  281.                 }
  282.                 printf("\nLugar Encontrado:\n%s\t%d\t%d\n", Par[i].cod,Par[i].sit,Par[i].mat);
  283.             break;
  284.         case 5 : verc();
  285.             break;
  286.         case 6 : verp();
  287.             break;
  288.         case 7 : AlterarCam();
  289.             break;
  290.         case 8 :
  291.                 printf("\nInsira o codigo do parque a adicionar: ");
  292.                 char cod[4];
  293.                 while(scanf("%s", cod), GetPosParque(cod) != -1)
  294.                 {
  295.                     printf("\nParque ja existente!\n");
  296.                     printf("\nInsira o codigo do parque a adicionar: ");
  297.                 }
  298.                 Par = (Mem *)realloc(Par,sizeof(Mem) * (NPar+1)); //adicionar mais um espaço no array dos lugares
  299.                 strcpy(Par[NPar].cod,cod);
  300.                 strcpy(Par[NPar].mat,"-");
  301.                 Par[NPar].sit=0;
  302.                 NPar++;
  303.             break;
  304.         case 9 : return;
  305.         }
  306.     }
  307.  
  308.     GravarFicheiros();
  309.  
  310.     free(Cam);
  311.     free(Par);
  312. }
Advertisement
Add Comment
Please, Sign In to add comment