Nombre: PEQUEÑO PROGRAMA DE ARCHIVOS
Descripción:
hola dejo un programa modificado oki
espero que SEA DE SU AYUDA oki
sale nadamas que este codigo esta compilado en DEV C++
ya que este compilador esta siendo muy utilizado
oki la verdad que es un gran problema entenderla a este compildaor
ya que
incluye C/C++
oki espero que sea de su utilidad
"AL MENOS A MI SI PARA UN PROGRAMA QUE EM DEJO EL TEACHER "
okiki
sale adios
URL: http://www.mygnet.net/codigos/cplusplus/archivosydirectorios/pequeno_programa_de_archivos.2996
Código Fuente:
#include <stdio.h>
#include <conio.h>
#include <string>
#include <stdlib.h>
using namespace std;
typedef struct {
char nom[25];
int edad;
char tel[15];
char dir[35];
}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 nombre_fichero[] = "agenda.dat";
FILE *abrir_fichero_b(char cadena[], int metodo);
int main()
{
FILE *fp;
int opc;
char cad[3];
fp = abrir_fichero_b(nombre_fichero,0);
if( fp ){
fclose(fp);
}
else
{
printf( "Error (NO ABIERTO)n" );
puts("Presiona cualquier tecla para continuar.... y Crear el Archivo");
fp = abrir_fichero_b(nombre_fichero,1);
fclose(fp);
getch();
}
do{
system("CLS");
puts("1. Crear Archivo (Cuidado, elimina lo que ya se tiene en el Archivo)");
puts("2. Agregar n 3. Eliminar n 4. Listar n 5. Buscarn 6. Modificarn 7. Salir");
puts("?Introduce tu opcion y depues enter.");
opc = atoi(gets(cad));
while(opc<0 || opc>7) /*Limitando la entrada de las opciones*/
opc = atoi(gets(cad));
system("CLS");
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("nnPresiona Cualquier Tecla para Regresar al Menu");
getch();
}
}while(opc!=7);
}
// FUNCION PARA CREAR UN ARCHIVO
/*****************************************************************
Funcion que sirve para borrar todo el Contenido del Archivo Binario*/
void Crear(void){
FILE *fp;
fp = abrir_fichero_b(nombre_fichero,0);
if(fp)
{
printf("n Error de apuertura del archivo agenda.datn");
fclose(fp);
}
}
/********************************************************
Funcion que sirve para imprimir todos los un registros del Archivo Binario*/
void Listar(void){
FILE *fp;
int i=1;
Amigo aux;
fp = abrir_fichero_b(nombre_fichero,0);
if(!(fp))
printf("n Error de apuertura del archivo agenda.datn");
else{
printf("n U S U A R I O S E N L A A G E N D An");
printf("---------------------------------------------------------------n");
while ((fread(&aux, sizeof(aux), 1, fp))!=0){
printf("=> Datos del Amigo %dn",i);
printf("Nombre: %s | Edad: %d | Telefono: %sn",aux.nom,aux.edad,aux.tel);
printf("Direccion: %sn",aux.dir);
i++;
}
printf("---------------------------------------------------------------n");
fclose(fp);
}
}
/********************************************************
Funcion que sirve para agregar un registro dentro del Archivo Binario*/
void Agregar(void){
FILE *fp;
Amigo aux;
char cad[3];
printf("n Agregando un Amigo Nuevo al archivo binario agenda.datn");
fp=abrir_fichero_b(nombre_fichero,2);
if(!(fp))
printf("n Error de apuertura del archivo agenda.datn");
else{
/*Introduciendo los Datos del Amigo*/
printf("Dame el nombre del Amigo: ");
gets(aux.nom);
printf("Dame la Edad del Amigo: ");
aux.edad=atoi(gets(cad));
printf("Dame el telefono del Amigo: ");
gets(aux.tel);
printf("Dame la direccion del Amigo: ");
gets(aux.dir);
fwrite(&aux, sizeof(aux), 1, fp);
fclose(fp);
}
}
/********************************************************
Funcion que sirve para Modificar un registro dentro del Archivo Binario*/
void Modificar(void){
FILE *fp;
Amigo aux;
int n;
char cadena[25],cad[2];
fp=abrir_fichero_b(nombre_fichero,3);
if(!(fp))
printf("n Error de apuertura del archivo agenda.datn");
else{
printf("Como se llama al amigo que quieres Modificar: ");
gets(cadena);
/*Buscando el Amigo dentro del Archivo*/
while ((n=fread(&aux, sizeof(aux), 1, fp))!=0 && stricmp(aux.nom,cadena)!=0);
if (n==0)
printf("No existe el cuate llamado: %s ",cadena);
else{
printf("n Amigo encontrado....!!!n");
printf("Nombre: %s ",aux.nom);
printf("Edad: %d ",aux.edad);
printf("Telefono %s ",aux.tel);
printf("Direccion: %sn",aux.dir);
printf("n CAMBIANDO VALORES n");
printf("Dame el nombre nuevo del Amigo: ");
gets(aux.nom);
printf("Dame la nueva Edad del Amigo: ");
aux.edad=atoi(gets(cad));
printf("Dame el nuevo telefono del Amigo: ");
gets(aux.tel);
printf("Dame la nueva direccion del Amigo: ");
gets(aux.dir);
printf("n GRABANDO Y CERRANDO ARCHIVO n");
fseek(fp,-1*sizeof(aux),SEEK_CUR);
fwrite(&aux, sizeof(aux), 1, fp);
}
fclose(fp); //Cerramos el archivo
}
}
/********************************************************
Funcion que sirve para borrar un registro dentro del Archivo Binario*/
void Borrar(void){
FILE *fp,*fd;
Amigo aux;
int encontrado=0;
char cadena[25];
printf("Introduce el nombre del Amigo a borrar: ");
gets(cadena);
printf("n BORRANDO REGISTROS n");
fp=abrir_fichero_b(nombre_fichero,0);
if(!(fp))
printf("n Error de apuertura del archivo agenda.datn");
else{
fd=abrir_fichero_b("paso.$$$",1);
if(!(fd))
printf("n Error Imposible crear archivo auxiliarn");
else{
while ((fread(&aux, sizeof(aux), 1, fp))!=0)
if(stricmp(aux.nom,cadena)!=0)
fwrite(&aux, sizeof(aux), 1, fd);
else
encontrado=1;
fclose(fd);
}
fclose(fp);
if(encontrado){
system("del agenda.dat");
system("ren paso.$$$ agenda.dat");
printf("n Registro BORRADO con Exito!!!n");
}
else{
system("del paso.$$$");
printf("n El Registro NO SE ENCONTRO, no fue borrado!!!");
}
}
}
/******************************************
Funcion para Encontrar un Amigo e imprimir sus datos*/
void Encontrar(void){
FILE *fp;
Amigo aux;
int n;
char cadena[25];
printf("Introduce el nomrbre del Amigo que buscas: ");
gets(cadena);
printf("n Buscando a un Amigo n");
fp=abrir_fichero_b(nombre_fichero,0);
if(!(fp))
printf("n Error de apuertura del archivo agenda.datn");
else{
while ((n=fread(&aux, sizeof(aux), 1, fp))!=0 && stricmp(aux.nom,cadena)!=0);
if (n==0)
printf("No existe el cuate llamado: %s ",cadena);
else{
printf("n Amigo encontrado....!!!n");
printf("Nombre: %s | Edad: %d | Telefono: %sn",aux.nom,aux.edad,aux.tel);
printf("Direccion: %sn",aux.dir);
/* getch();*/
}
}
}
/*************************************************
Funcion que Carga el Archivo y regresa un apuntador con que se va ha manejar el Archivo
Recibe: El nombre del Archivo , Y el método con que se va abrir el Archivo
Un Apuntador tipo Archivo, 0 - Solo Lectura , 1 - Para crearlo de nuevo desde cero,
2 - Anhadir Informacion, 3 - para Lectura y Escritura.
Regresa: El apuntador de Tipo FILE, con el cual se abrio*/
FILE *abrir_fichero_b(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;
}