Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <windows.h>
- #include <mmsystem.h>
- #include <stdlib.h>
- typedef struct
- {
- char mat[9];
- int sit;
- char cod[4];
- }Mem;
- Mem *Cam = NULL, *Par = NULL;
- int NCam=0,NPar=0;
- void CarregarFicheiros()
- {
- FILE * pFile;
- char mystring [100];
- pFile = fopen ("camioes.txt" , "r");
- if (pFile == NULL)
- {
- perror ("Error opening file");
- return;
- }
- while(!feof(pFile))
- {
- Cam = (Mem *)realloc(Cam,sizeof(Mem) * ++NCam);
- fgets (mystring , 100 , pFile);
- sscanf(mystring, "%s%d%s", Cam[NCam-1].mat, &Cam[NCam-1].sit, Cam[NCam-1].cod);
- }
- fclose (pFile);
- pFile = fopen ("parque.txt" , "r");
- if (pFile == NULL)
- {
- perror ("Error opening file");
- return;
- }
- while(!feof(pFile))
- {
- Par = (Mem *)realloc(Par,sizeof(Mem) * ++NPar);
- fgets (mystring , 100 , pFile);
- sscanf(mystring, "%s%d%s", Par[NPar-1].cod, &Par[NPar-1].sit, Par[NPar-1].mat);
- }
- fclose(pFile);
- }
- void GravarFicheiros()
- {
- FILE * pFile;
- char mystring [100];
- pFile = fopen ("camioes.txt" , "w");
- if (pFile == NULL)
- {
- perror ("Error opening file");
- return;
- }
- for(int i=0; i<NCam-1; i++)
- fprintf(pFile, "%s%d%s\n", Cam[i].mat, Cam[i].sit, Cam[i].cod);
- fprintf(pFile, "%s%d%s\n", Cam[NCam].mat, Cam[NCam].sit, Cam[NCam].cod);
- fclose (pFile);
- pFile = fopen ("parque.txt" , "w");
- if (pFile == NULL)
- {
- perror ("Error opening file");
- return;
- }
- for(int i=0; i<NPar-1; i++)
- fprintf(pFile, "%s%d%s", Par[i].cod, Par[i].sit, Par[i].mat);
- fclose(pFile);
- }
- void verc()
- {
- system("cls");
- printf("Matricula\t\tSituacao\tCodigo\n\n");
- for(int i=0; i<NCam; i++)
- {
- printf("%s\t%d\t%s\n",Cam[i].mat,Cam[i].sit,Cam[i].cod);
- if(i != 0 && i%100 == 0)
- {
- printf("Pressione enter para continuar a mostrar");
- fflush(stdin);
- getchar();
- system("cls");
- }
- }
- printf("Pressione enter para continuar a mostrar");
- fflush(stdin);
- getchar();
- }
- void verp()
- {
- system("cls");
- printf("Codigo\tSituacao\tMatricula\n\n");
- for(int i=0; i<NPar; i++)
- {
- printf("%s\t%d\t%s\n",Par[i].cod,Par[i].sit,Par[i].mat);
- if(i != 0 && i%100 == 0)
- {
- printf("Pressione enter para continuar a mostrar");
- fflush(stdin);
- getchar();
- system("cls");
- }
- }
- printf("Pressione enter para continuar a mostrar");
- fflush(stdin);
- getchar();
- }
- int GetPosParque(char *c)
- {
- for(int i=0; i<NPar; i++)
- if(!stricmp(c,Par[i].cod))
- return i;
- return -1;
- }
- int GetPosCam(char *mat)
- {
- for(int i=0; i<NCam; i++)
- if(!stricmp(mat,Cam[i].mat))
- return i;
- return -1;
- }
- void AddCam()
- {
- Cam = (Mem *)realloc(Cam,sizeof(Mem) * (NCam+1)); //adicionar mais um espaço no array dos camiões
- printf("\nInsira a matricula do camiao (00-XX-00): ");
- scanf("%s", Cam[NCam].mat);
- printf("Insira a situacao do camiao: ");
- while(scanf("%d", &Cam[NCam].sit) != 1 || Cam[NCam].sit > 8 || Cam[NCam].sit < 0)
- {
- printf("Apenas numeros entre 0 e 8.\n");
- printf("Insira a situacao do camiao: ");
- }
- if(Cam[NCam].sit == 0)
- {
- strcpy(Cam[NCam].cod,"-");
- Cam[NCam].sit = 0;
- NCam++;
- return;
- }
- printf("Insira o codigo do lugar do camiao: ");
- int p;
- while(scanf("%s", Cam[NCam].cod), p = GetPosParque(Cam[NCam].cod) == -1 || !strcmp(Par[p].mat,"-"))
- {
- printf("Lugar inexistente ou ocupado.\n");
- printf("Insira o codigo do lugar do camiao: ");
- }
- strcpy(Par[p].mat,Cam[NCam].mat);
- Par[p].sit = Cam[NCam].sit;
- NCam++;
- }
- void AlterarCam()
- {
- printf("\nInsira a matricula do camiao (00-XX-00): ");
- char mat[9]; int i;
- while(scanf("%s", mat), i=GetPosCam(mat) == -1)
- {
- printf("\nCamiao nao encontrado.");
- printf("\nInsira a matricula do camiao (00-XX-00): ");
- }
- printf("Matricula\tSituacao\tCodigo\n\n");
- printf("%s\t%d\t%s\n",Cam[i].mat,Cam[i].sit,Cam[i].cod);
- int sit;
- printf("Insira a nova situacao do camiao: ");
- while(scanf("%d", &sit) != 1 || sit > 8 || sit < 0 || Cam[i].sit == sit)
- {
- printf("Apenas numeros entre 0 e 8.\n");
- printf("Insira a situacao do camiao: ");
- }
- if(sit == 0)
- {
- Cam[i].sit = 0;
- Par[GetPosParque(Cam[i].cod)].sit = 0;
- strcpy(Par[GetPosParque(Cam[i].cod)].mat,"-");
- strcpy(Cam[i].cod,"-");
- return;
- }
- char cod[4]; int n;
- printf("\nInsira o codigo do parque: ");
- while(scanf("%s", cod), i=GetPosParque(cod) == -1 || strcmp(Par[i].mat,cod))
- {
- printf("\nParque nao encontrado. Ou parque ocupado.");
- printf("\nInsira o codigo do parque: ");
- }
- Cam[i].sit = sit;
- Par[n].sit = sit;
- strcpy(Par[n].mat,Cam[i].mat);
- strcpy(Cam[i].cod,Par[i].cod);
- }
- void RemCam(int pos)
- {
- if(!strcmp(Cam[pos].cod,"-"))
- {
- int n = GetPosParque(Cam[pos].cod);
- Par[n].sit = 0;
- strcpy(Par[n].mat,"-");
- }
- for(int i=pos+1; i<NCam; i++,pos++)
- Cam[pos]=Cam[i];
- Cam = (Mem *)realloc(Cam,sizeof(Mem) * (NCam-1));
- }
- int menu()
- {
- system("cls");
- int o ;
- printf("\n\t\t ____________________________________");
- printf("\n\t\t | |");
- printf("\n\t\t | Adicionar Camiao [1] |");
- printf("\n\t\t | Retirar Camiao [2] |");
- printf("\n\t\t | Pesquisar Camiao [3] |");
- printf("\n\t\t | Pesquisar Lugar [4] |");
- printf("\n\t\t | Ver dados camioes [5] |");
- printf("\n\t\t | Ver dados parque [6] |");
- printf("\n\t\t | Alterar situacao camiao [7] |");
- printf("\n\t\t | Adicionar lugar parque [8] |");
- printf("\n\t\t | Sair [9] |");
- printf("\n\t\t |___________________________________|");
- printf("\n\n\n\t\t\tQual a opcao ?\t\t");
- while(scanf("%d", &o) != 1 || o > 9 || o < 0)
- {
- printf("\n\n\n\t\t\tApenas numeros entre 0 e 6.");
- printf("\n\n\n\t\t\tQual a opcao ?\t\t");
- }
- return o ;
- }
- void main()
- {
- CarregarFicheiros();
- while(true)
- {
- char mat[9], cod[4];
- int i;
- switch(menu())
- {
- case 1 : AddCam();
- break;
- case 2 :
- printf("\nInsira a matricula do camiao a remover.\n");
- while(scanf("%s", mat), GetPosCam(mat) == -1)
- {
- printf("\nCamiao nao encontrado!\n");
- printf("Insira a situacao do camiao: ");
- }
- break;
- case 3 :
- printf("\nInsira a matricula do camiao a pesquisar.\n");
- scanf("%s", mat);
- if(GetPosCam(mat) != -1)
- {
- printf("\nCamiao nao encontrado!\n");
- break;
- }
- printf("\nCamiao Encontrado:\n%s\t%d\t%d\n", Cam[i].mat,Cam[i].sit,Cam[i].cod);
- break;
- case 4 :
- printf("\nInsira o codigo do lugar a pesquisar: ");
- scanf("%s", cod);
- if(GetPosCam(cod) != -1)
- {
- printf("\nLugar nao encontrado!\n");
- break;
- }
- printf("\nLugar Encontrado:\n%s\t%d\t%d\n", Par[i].cod,Par[i].sit,Par[i].mat);
- break;
- case 5 : verc();
- break;
- case 6 : verp();
- break;
- case 7 : AlterarCam();
- break;
- case 8 :
- printf("\nInsira o codigo do parque a adicionar: ");
- char cod[4];
- while(scanf("%s", cod), GetPosParque(cod) != -1)
- {
- printf("\nParque ja existente!\n");
- printf("\nInsira o codigo do parque a adicionar: ");
- }
- Par = (Mem *)realloc(Par,sizeof(Mem) * (NPar+1)); //adicionar mais um espaço no array dos lugares
- strcpy(Par[NPar].cod,cod);
- strcpy(Par[NPar].mat,"-");
- Par[NPar].sit=0;
- NPar++;
- break;
- case 9 : return;
- }
- }
- GravarFicheiros();
- free(Cam);
- free(Par);
- }
Advertisement
Add Comment
Please, Sign In to add comment