Una consulta....

mauro
16 de Agosto del 2009
Hola necesito almacenar diversos "Usuarios con sus datos", eso como se podria hacer ??
Con que funcion ??
Uso c++ window borland c++

[email protected]
16 de Agosto del 2009
Que te parece stooooooooooooo,

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

typedef struct {
char nom[20];
char apep[20];
char apem[20];
char tel[10];
char dir[35];
char email[30];
}Amigo;

/*Funciones de Archivo*/
void Crear(void);
void Listar(void);
void Agregar(void);
void Modificar(void);
void Borrar(void);
void Encontrar(void);

/*Nombre del Archivo a guardar*/
char hans[] = "agenda.dat";

FILE *archivo2(char cadena[], int metodo);

void main(){
FILE *mechita;
int opc;
char cad[5];

mechita = archivo2(hans,0);
if( mechita ){
fclose(mechita);
}
else
{
printf("Error: No se pudo abrir el archivon");
puts("Presiona cualquier tecla para continuar... y Crear el Archivon");
mechita = archivo2(hans,1);
fclose(mechita);
getch();
}

do{
clrscr();
printf("ttProyecto Final de Fundamentos de Programacionn");
printf("ttttAgenda de Amigosn");

printf("tt*******************************************n");
printf("MENUnn");
puts("1. Crear Archivon");
puts("2. Agregarn");
puts("3. Eliminarn");
puts("4. Listarn");
puts("5. Buscarn");
puts("6. Modificarn");
puts("7. Salirn");
puts("Opcion: ");
opc = atoi(gets(cad));
while(opc<0 || opc>7) /*Limitando la entrada de las opciones*/
opc = atoi(gets(cad)); //atoi Convierte a una representacion de int
clrscr();
switch(opc)
{
case 1:
Crear();
break;
case 2:
Agregar();
break;
case 3:
Borrar();
break;
case 4:
Listar();
break;
case 5:
Encontrar();
break;
case 6:
Modificar();
break;
}

/*Solo parar cuando sea una de las opciones*/
if(opc<7){
puts("Presiona Cualquier Tecla para ir al Menu Principaln");
getch();
}


}while(opc!=7);

}



// FUNCION PARA CREAR UN ARCHIVO
/*****************************************************************
Funcion que sirve para borrar todo el Contenido del Archivo Binario*/
void Crear(void){
FILE *mechita;

mechita = archivo2(hans,0);
if(mechita)
{
printf("Error al abrir: agenda.datn");
fclose(mechita);
}
}


/********************************************************
Funcion que sirve para imprimir todos los un registros del Archivo Binario*/
void Listar(void){
FILE *mechita;
int i=1;
Amigo aux;
mechita = archivo2(hans,0);
if(!(mechita))
printf("Error de apuertura del archivo agenda.dat");
else{
printf("***** LISTA DE AMIGOS *****nn");
while ((fread(&aux, sizeof(aux), 1, mechita))!=0){
printf("---------------------------------------------------------------n");
printf("DATOS DEL AMIGO # %dn",i);
printf("Nombre: %sn",aux.nom);
printf("Apellido Paterno: %sn",aux.apep);
printf("Apellido Materno: %sn",aux.apem);
printf("Telefono: %sn",aux.tel);
printf("Direccion: %sn",aux.dir);
printf("Email: %sn",aux.email);
i++;
getch();
}
printf("---------------------------------------------------------------n");
fclose(mechita);
}
}

/********************************************************
Funcion que sirve para agregar un registro dentro del Archivo Binario*/
void Agregar(void){
FILE *mechita;
Amigo aux;
char cad[3];

printf("***** INGRESAR NUEVO AMIGO ******nn");
mechita=archivo2(hans,2);
if(!(mechita))
printf("No se puede abrir el archivo agenda.dat");
else{
/*Introduciendo los Datos del Amigo*/
printf("Nombre: n");
gets(aux.nom);
printf("Apellido Paterno: n");
gets(aux.apep);
printf("Apellido Materno: n");
gets(aux.apem);
printf("Telefono: n");
gets(aux.tel);
printf("Direccion: n");
gets(aux.dir);
printf("Email: n");
gets(aux.email);

fwrite(&aux, sizeof(aux), 1, mechita);
printf("---------------------------------------------------------------n");
fclose(mechita);
}
}


/********************************************************
Funcion que sirve para Modificar un registro dentro del Archivo Binario*/
void Modificar(void){
FILE *mechita;
Amigo aux;
int n;
char cadena[25],cad[2];
mechita=archivo2(hans,3);
if(!(mechita))
printf("Error de apuertura del archivo agenda.dat");
else{
printf("Ingrese el Nombre del amigo a modificar: n");
gets(cadena);

/*Buscando el Amigo dentro del Archivo*/
while ((n=fread(&aux, sizeof(aux), 1, mechita))!=0 && stricmp(aux.nom,cadena)!=0);
if (n==0)
printf("No se encuentra a: %s n",cadena);
else{
printf("--------------n");
printf("Nombre: %s n",aux.nom);
printf("Apellido Paterno: %s n",aux.apep);
printf("Apellido Materno: %s n",aux.apem);
printf("Telefono: %s n",aux.tel);
printf("Direccion: %s n",aux.dir);
printf("Email: %s n",aux.email);
printf("--------------nn");
printf("***** Modificando *****n");
printf("Ingrese Nuevo Nombre: n");
gets(aux.nom);
printf("Ingrese Nuevo Apellido Paterno: n");
gets(aux.apep);
printf("Ingrese Nuevo Apellido Materno: n");
gets(aux.apem);
printf("Ingrese Nuevo Telefono: n");
gets(aux.tel);
printf("Ingrese Nueva Direccion: n");
gets(aux.dir);
printf("Ingrese Nuevo Email: n");
gets(aux.email);
printf("--------------nn");
printf("Guardado Exitosamente!!!n");
fseek(mechita,-1*sizeof(aux),SEEK_CUR);
fwrite(&aux, sizeof(aux), 1, mechita);
}
printf("---------------------------------------------------------------n");
fclose(mechita); //Cerramos el archivo
}
}

/********************************************************
Funcion que sirve para borrar un registro dentro del Archivo Binario*/
void Borrar(void){
FILE *mechita,*fd;
Amigo aux;
int encontrado=0;
char cadena[25];

printf("Introduce el nombre del Amigo a borrar: ");
gets(cadena);

printf("Borrando Registrosn");
mechita=archivo2(hans,0);
if(!(mechita))
printf("Error de apuertura del archivo agenda.dat");
else{
fd=archivo2("paso.$$$",1);
if(!(fd))
printf("Error Imposible crear archivo auxiliar");
else{
while ((fread(&aux, sizeof(aux), 1, mechita))!=0)
if(stricmp(aux.nom,cadena)!=0)
fwrite(&aux, sizeof(aux), 1, fd);
else
encontrado=1;
fclose(fd);
}
printf("---------------------------------------------------------------n");
fclose(mechita);
if(encontrado){
system("del agenda.dat");
system("ren paso.$$$ agenda.dat");
printf("Borrado Exitosamenten");
}
else{
system("del paso.$$$");
printf("No se encontro en el registro, fallo en la operacionn");
}
}
}

/******************************************
Funcion para Encontrar un Amigo e imprimir sus datos*/
void Encontrar(void){
FILE *mechita;
Amigo aux;
int n;
char cadena[25];

printf("Introduce el nombre del Amigo que buscas: ");
gets(cadena);
mechita=archivo2(hans,0);
if(!(mechita))
printf("No se puede abrir el archivo agenda.datn");
else{
while ((n=fread(&aux, sizeof(aux), 1, mechita))!=0 && stricmp(aux.nom,cadena)!=0);
if (n==0)
printf("No se encuentra a: %s n",cadena);
else{
printf("DATOS:n");
printf("Nombres: %sn",aux.nom);
printf("Apellido Paterno: %sn",aux.apep);
printf("Apellido Materno: %sn",aux.apem);
printf("Telefono: %sn",aux.tel);
printf("Direccion: %sn",aux.dir);
printf("Email: %sn",aux.email);
/* getch();*/

}
}
printf("---------------------------------------------------------------n");

}

/*************************************************
Funcion que Carga el Archivo y regresa un apuntador con que se va a manejar el Archivo
Recibe: El nombre del Archivo , Y el m&#1081;todo con que se va abrir el Archivo
Un Apuntador tipo Archivo, 0 - Solo Lectura , 1 - Para crearlo de nuevo desde cero,
2 - Anadir Informacion, 3 - para Lectura y Escritura.
Regresa: El apuntador de Tipo FILE, con el cual se abrio*/
FILE *archivo2(char cadena[], int metodo){
FILE *x;
switch(metodo){
case 0:
x = fopen(cadena,"rb");
break;
case 1:
x = fopen(cadena,"wb");
break;
case 2:
x = fopen(cadena,"ab");
break;
case 3:
x = fopen(cadena,"r+b");
break;
}
return x;
}