The_Kenobi
25-01-2008, 23:20
Boas people este é o meu 1º post aki:P
Vi este topiko aki e resolvi expor a minha duvida:D
tenho de fazer um programa em c++ k grave em ficheiro .dat o nº de processo, nome, numero, turma e ano!
Mas depois podelos eliminar e alterar!!!;)
Ai é k está o meu problema!prá já ele grava-me esses dados mas agora presisava de ajuda no alterar e eliminar:P
aki fika o k tenho ate agora:
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
typedef struct
{
int n_processo,ano;
char nome[20], turma[20];
}
tnomes;
FILE *f, *auxf;
void abrir_fich()
{
if((f=fopen("dados.dat","r+"))==NULL)
{
printf("O ficheiro nao existe! Foi criado um novo\n");
f= fopen ("dados.dat","w+");
}
else printf("Ficheiro aberto com sucesso! \n");
}
void ler_dados(tnomes *r)
{
printf("Insira o numero de processo do aluno \n");
scanf("%d",&r->n_processo);
printf("Insira o nome do aluno \n");
scanf("%s",r->nome);
printf("Insira a Turma do Aluno \n");
scanf("%s",r->turma);
printf("Insira o ano do aluno \n");
scanf("%d",&r->ano);
}
void escrever_dados(tnomes *r)
{
printf("Numero de processo do aluno: %d\n",r->n_processo);
printf("Nome do Aluno: %s\n",r->nome);
printf("Turma do aluno: %s\n",r->turma);
printf("Ano do aluno: %d\n",r->ano);
}
int ler_fich(tnomes regs[])
{
int i=0;
fread(®s[i],sizeof(tnomes),1,f);
while(!feof(f))
{
i++;
fread(®s[i],sizeof(tnomes),1,f);
}
return(i);
}
void escrever_fich(tnomes regs[], int n)
{
int i;
for(i=0;i<n;i++)
fwrite(®s[i],sizeof(tnomes),1,f);
}
int menu()
{
system("color 4E");
int op;
printf("\t\t***************[MENU]***************\n");
printf("\n\t\t\t\ 1-Inserir\n");
printf("\n\t\t\t\ 2-Consultar\n");
printf("\n\t\t\t\ 3-Alterar \n");
printf("\n\t\t\t\ 4-Remover registo \n");
printf("\n\t\t\t\ 5-Ordenar registos \n");
printf("\n\t\t\t\ 6- Sair\n");
printf("\n>QUAL A SUA OPCAO: \n");
scanf("%d",&op);
return(op);
}
main()
{
int opc,i,dim=0;
tnomes registos [100];
abrir_fich();
dim=ler_fich(registos);
do
{
opc=menu();
switch(opc)
{
case 1:
ler_dados(®istos[dim]);
dim++;
break;
case 2:
for(i=0;i<dim;i++)
escrever_dados(®istos[i]);
break;
}
}while(opc!=6);
escrever_fich(registos,dim);
} Alguem me pode dar uma ajuda:P?
Vi este topiko aki e resolvi expor a minha duvida:D
tenho de fazer um programa em c++ k grave em ficheiro .dat o nº de processo, nome, numero, turma e ano!
Mas depois podelos eliminar e alterar!!!;)
Ai é k está o meu problema!prá já ele grava-me esses dados mas agora presisava de ajuda no alterar e eliminar:P
aki fika o k tenho ate agora:
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
typedef struct
{
int n_processo,ano;
char nome[20], turma[20];
}
tnomes;
FILE *f, *auxf;
void abrir_fich()
{
if((f=fopen("dados.dat","r+"))==NULL)
{
printf("O ficheiro nao existe! Foi criado um novo\n");
f= fopen ("dados.dat","w+");
}
else printf("Ficheiro aberto com sucesso! \n");
}
void ler_dados(tnomes *r)
{
printf("Insira o numero de processo do aluno \n");
scanf("%d",&r->n_processo);
printf("Insira o nome do aluno \n");
scanf("%s",r->nome);
printf("Insira a Turma do Aluno \n");
scanf("%s",r->turma);
printf("Insira o ano do aluno \n");
scanf("%d",&r->ano);
}
void escrever_dados(tnomes *r)
{
printf("Numero de processo do aluno: %d\n",r->n_processo);
printf("Nome do Aluno: %s\n",r->nome);
printf("Turma do aluno: %s\n",r->turma);
printf("Ano do aluno: %d\n",r->ano);
}
int ler_fich(tnomes regs[])
{
int i=0;
fread(®s[i],sizeof(tnomes),1,f);
while(!feof(f))
{
i++;
fread(®s[i],sizeof(tnomes),1,f);
}
return(i);
}
void escrever_fich(tnomes regs[], int n)
{
int i;
for(i=0;i<n;i++)
fwrite(®s[i],sizeof(tnomes),1,f);
}
int menu()
{
system("color 4E");
int op;
printf("\t\t***************[MENU]***************\n");
printf("\n\t\t\t\ 1-Inserir\n");
printf("\n\t\t\t\ 2-Consultar\n");
printf("\n\t\t\t\ 3-Alterar \n");
printf("\n\t\t\t\ 4-Remover registo \n");
printf("\n\t\t\t\ 5-Ordenar registos \n");
printf("\n\t\t\t\ 6- Sair\n");
printf("\n>QUAL A SUA OPCAO: \n");
scanf("%d",&op);
return(op);
}
main()
{
int opc,i,dim=0;
tnomes registos [100];
abrir_fich();
dim=ler_fich(registos);
do
{
opc=menu();
switch(opc)
{
case 1:
ler_dados(®istos[dim]);
dim++;
break;
case 2:
for(i=0;i<dim;i++)
escrever_dados(®istos[i]);
break;
}
}while(opc!=6);
escrever_fich(registos,dim);
} Alguem me pode dar uma ajuda:P?