Lbboy
Power Member
Tenho o seguinte codigo em c a funcionar exepto a parte de apagar a matricula.. mas essa parte é opcional por isso n interessa
como disse o programa funciona..mas tenho que entregar o trabalho usando realloc e mallocs ( memoria dinamica, coisa que n fiz nem tou a ver como implementar neste codigo)
agradecia uma ajuda
retirado do pdf-->
2) O programa principal deverá permitir a escolha das seguintes opções (utilize a
instrução switch):
1. Inserir registo. Deverá solicitar a introdução da matrícula e o nome do
proprietário.
2. Imprimir todos os registos no "standard output".
3. Apagar registo.
2.1 - Implemente o menu principal do programa e as opções 1 e 2. A lista deverá ser
armazenada num bloco de memória alocado dinamicamente e cujo tamanho deverá
crescer à medida que são inseridos registos (use a função realloc()).
Nota: na opção 2, os registos cujo campo "apagado" tenha valor diferente de 0 não
deverão ser impressos.
---------------------------------------------------------------------------------
---------------------------------------------------------------
como disse o programa funciona..mas tenho que entregar o trabalho usando realloc e mallocs ( memoria dinamica, coisa que n fiz nem tou a ver como implementar neste codigo)
agradecia uma ajuda
retirado do pdf-->
2) O programa principal deverá permitir a escolha das seguintes opções (utilize a
instrução switch):
1. Inserir registo. Deverá solicitar a introdução da matrícula e o nome do
proprietário.
2. Imprimir todos os registos no "standard output".
3. Apagar registo.
2.1 - Implemente o menu principal do programa e as opções 1 e 2. A lista deverá ser
armazenada num bloco de memória alocado dinamicamente e cujo tamanho deverá
crescer à medida que são inseridos registos (use a função realloc()).
Nota: na opção 2, os registos cujo campo "apagado" tenha valor diferente de 0 não
deverão ser impressos.
---------------------------------------------------------------------------------
Código:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 80
typedef struct veiculos
{
char matricula[6];
char proprietario[SIZE];
char apagado;
} veiculo_t;
int menu();
veiculo_t veiculo();
void inserir_registo();
void registos();
void apagar_registo();
int main()
{
int op;
while(1)
{
op=menu();
switch(op)
{
case 1:system("cls");
inserir_registo();
break;
case 2:system("cls");
registos();
break;
case 3:system("cls");
apagar_registo();
break;
case 0:system("cls");
exit(0);
break;
default: printf("ERRO: Opcao mal Escolhida\n");
getchar();
}
}
}
int menu()
{
int op;
system("cls");
printf("\n\t\t\t\t MENU");
printf("\n\n\t\t 1 - Inserir Registo");
printf("\n\t\t 2 - Listar todos os registos");
printf("\n\n\t\t 3 - Apagar Registo");
printf("\n\n\t\t 0-Sair");
printf("\n\n\t\t opcçao: ");
scanf("%d",&op);
getchar();
return(op);
}
veiculo_t veiculo()
{
char temp[8];
veiculo_t registo;
printf("\t\tREGISTO:");
printf("\n\n\tInsira a matricula (EX:1111AA) do Automovel: ");
fgets(temp,8,stdin);
memcpy(registo.matricula,temp,6);
printf("\n\tInsira o Nome do proprietário: ");
fgets(registo.proprietario,80,stdin);
registo.apagado='0';
return(registo);
}
void inserir_registo()
{
veiculo_t registo;
FILE *fa;
fa=fopen("regist.bin","ab+");
if(fa==NULL)
{
printf("ERRO: O Ficheiro não existe\n");
exit(0);
}
registo=veiculo();
fwrite(®isto,sizeof(veiculo_t),1,fa);
fclose(fa);
}
void registos()
{
veiculo_t registo;
FILE *fa;
int i=1;
fa=fopen("regist.bin","rb");
if(fa==NULL)
{
printf("ERRO: O Ficheiro não existe\n");
exit(0);
}
while(fread(®isto,sizeof(veiculo_t),1,fa)!= 0)
{
if(registo.apagado=='0')
{
system("cls");
fwrite(registo.matricula,6,1,stdout);
printf("\n%s",registo.proprietario);
printf("\n\n");
getchar();
i++;
}
}
printf("Fim do ficheiro");
fclose(fa);
}
void apagar_registo()
{
FILE *fa;
veiculo_t registo;
char mat[6];
int g=0;
char op;
system("cls");
fa=fopen("regist.bin","rb");
if(fa==NULL)
{
printf("ERRO: O ficheiro nao existe");
exit(0);
}
printf("Insira a matricula do automovel, referente ao registo que quer eliminar:\n ");
scanf("%s",mat);
getchar();
while(fread(®isto,sizeof(veiculo_t),1,fa) != 0)
{
if(strcmp(registo.matricula,mat)== 0);
{
g=1;
}
}
if(g==0)
{
printf("O registo não existe!!\n");
getchar();
fclose(fa);
exit(0);
}
else
{
printf("\nConfirma eliminação (S/N)\n");
scanf("%s",&op);
if(op!='S'||op!='s')
{
fclose(fa);
return;
}
else
{
registo.apagado=1;
}
fclose(fa);
return;
}
}
---------------------------------------------------------------
Última edição pelo moderador: