Dev - C++ - Eliminar linea de fichero cargado con estructuras

 
Vista:

Eliminar linea de fichero cargado con estructuras

Publicado por Jeremias Araujo (2 intervenciones) el 02/08/2010 22:57:00
Hola de tarea me mandaron hacer una agenda en la cual se debe poder ingresar contactos (nombre[30], apellido[30], direccion[30], telefono[30], celular[30], fecha de nacimiento[30] ; todos del tipo char).
tambien se deben poder listar los contactos guardados ( en un fichero de texto ).

hasta ahi todo fue bien pero se me complico la parte de eliminar un contacto.
lo que se me ocurrio es verificar de a una estructura (que estan guardadas en agenda.txt), y si vec_agenda (array del struct) .nombre es igual al nombre ingresado no haga nada, pero si es distinto que lo copie en un archivo auxiliar, asi hasta recorrer todas las estructuras guardadas en agenda.txt.

el problema es que no se como hacerlo!! :(

aclaro que uso dev - c++.

les dejo el codigo:

#include <conio.h>
#include <stdio.h>
#include <string.h>
#include <windows.h>

void menu();
void altas();
void anim_salir();
void listar();
void bajas();

struct st_agenda{

char nombre[30];
char apellido[30];
char direccion[30];
char telefono[30];
char celular[30];
char fecha_nac[30];

}vec_agenda;




main(){


menu();


}

void menu(){

int menu;

clrscr();
gotoxy(1,1);
textcolor(LIGHTBLUE);
printf("\n\n\n\n\n\n\n\n\n\t\t\t°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°\n\t\t\t°\t\t\t\t °\n\t\t\t°\t\t\t\t °\n\t\t\t°\t\t\t\t °\n\t\t\t°\t\t\t\t °\n\t\t\t°\t\t\t\t °\n\t\t\t°\t\t\t\t °\n\t\t\t°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°");
textcolor(LIGHTRED);
gotoxy(33,12);
printf("1- Altas contactos");
gotoxy(33,13);
printf("2- Listar contactos");
gotoxy(33,14);
printf("3- Eliminar contactos");
gotoxy(33,15);
printf("4- Salir");
gotoxy(25,18);
textcolor(LIGHTGREEN);
printf("----------------> <---------------");
gotoxy(43,18);
textcolor(LIGHTRED);
scanf("%d", &menu);


if(menu==1)
altas();
if(menu==2)
listar();
if(menu==3)
bajas();
if(menu==4)
anim_salir();
if(menu!=1 && menu!=2 && menu!=3 && menu!=4)
{
fflush(stdin);
clrscr();
textcolor(LIGHTRED);
gotoxy(36,30);
printf("ERROR");
Sleep(500);
main();
}
}

void altas(){

FILE *agenda;
agenda=fopen("agenda.txt","a");

int salir=0;

while(salir==0){
clrscr();
gotoxy(1,1);

textcolor(LIGHTRED);
printf("Ingrese nombre: ");
fflush(stdin);
textcolor(LIGHTGREEN);
gets(vec_agenda.nombre);
textcolor(LIGHTRED);
printf("Ingrese apellido: ");

fflush(stdin);
textcolor(LIGHTGREEN);
gets(vec_agenda.apellido);
textcolor(LIGHTRED);
printf("Ingrese direccion: ");
fflush(stdin);
textcolor(LIGHTGREEN);
gets(vec_agenda.direccion);
textcolor(LIGHTRED);
printf("Ingrese telefono: ");
fflush(stdin);
textcolor(LIGHTGREEN);
gets(vec_agenda.telefono);
textcolor(LIGHTRED);
printf("Ingrese celular: ");
fflush(stdin);
textcolor(LIGHTGREEN);
gets(vec_agenda.celular);
textcolor(LIGHTRED);
printf("Ingrese fecha de nacimiento: ");
fflush(stdin);
textcolor(LIGHTGREEN);
gets(vec_agenda.fecha_nac);

clrscr();

/**/fwrite (&vec_agenda, sizeof(vec_agenda), 1, agenda);

gotoxy(25,13);
printf("REGISTRO AGREGADO EXITOSAMENTE");
Sleep(800);
clrscr();
gotoxy(17,13);
char sino;
printf("Desea agregar otro registro? (s/n): ");
textcolor(LIGHTRED);
scanf("%c", &sino);
if(sino=='n')
salir=1;
if(sino=='s')
salir=0;
if(sino!='n' && sino!='s'){
clrscr();
textcolor(LIGHTRED);
gotoxy(40,33);
printf("ERROR");
Sleep(500);
salir=1;
}
}

fclose(agenda);

menu();
}

void anim_salir(){

clrscr();
gotoxy(1,10);
textcolor(LIGHTGREEN);
printf("\n ## ####### ###### ####### ## ### #### #### ## ##### #####");
printf("\n ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ##");
printf("\n ## ## ## ## ## ## ## ## ###### ## ## ## ### ###");
printf("\n###### ####### ###### ####### ## ## ## ## ## #### ## ##");
printf("\n ##### #####");
printf("\n##############################################################################");
//printf("HOLA CAPO");
Sleep(3000);
exit(1);
}

void listar(){

FILE *agenda;
agenda=fopen("agenda.txt","r");

int i=1;


clrscr();
gotoxy(1,1);
while(!feof(agenda)){
if(fread(&vec_agenda, sizeof(vec_agenda), 1, agenda)){
textcolor(LIGHTGREEN);
printf("\n\n\nCONTACTO %d", i);
textcolor(LIGHTRED);printf("\nNombre: \t");textcolor(WHITE);printf("%s", vec_agenda.nombre);
textcolor(LIGHTRED);printf("\nApellido: \t");textcolor(WHITE);printf("%s", vec_agenda.apellido);
textcolor(LIGHTRED);printf("\nDireccion: \t");textcolor(WHITE);printf("%s", vec_agenda.direccion);
textcolor(LIGHTRED);printf("\nTelefono: \t");textcolor(WHITE);printf("%s", vec_agenda.telefono);
textcolor(LIGHTRED);printf("\nCelular: \t");textcolor(WHITE);printf("%s", vec_agenda.celular);
textcolor(LIGHTRED);printf("\nF. Nac: \t");textcolor(WHITE);printf("%s", vec_agenda.fecha_nac);

i++;
}
}
fclose(agenda);
getch();
menu();
}

void bajas(){

}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Eliminar linea de fichero cargado con estructur

Publicado por Ismael (100 intervenciones) el 04/08/2010 14:51:31
Mira en

http://www.programandoenc.webcindario.com/

Saludos

Ismael
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar