Hola!!! (: como ya saben estamos en los ultimos dias de clases y es el tiempo de dejar los proyectos finales que decidiran si aprovamos una materia o si nos vamos a globales y recursamientos D: asi que aqui les tengo un codigo para Borland C++, es un programa que crea un archivo de con extencion .txt en el que se graban los datos que ingreses, el programa tambien los elimina, los modifica y los enlista o muestra, solo tiene un pequeño error creo que con el fichero y es que se traba un poco n.n' pero en si realiza lo que le pides aqui se los dejo n.n .
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
typedef struct {
char tit[30];
int isbn;
char autor[20];
char tipo[25];
}Libro;
//Funciones de Archivo
void Crear(void);
void Listar(void);
void Agregar(void);
void Modificar(void);
void Borrar(void);
void Encontrar(void);
//NOMBRE DEL ARCHIVO
char nombre_fichero[] = "libros.txt";
FILE *abrir_fichero_b(char cadena[], int metodo);
void 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" );
gotoxy(7,6);
cputs("Presiona cualquier tecla para continuar.... y Crear el Archivo");
fp = abrir_fichero_b(nombre_fichero,1);
fclose(fp);
getch();
}
do{
clrscr();
textcolor(10);
cprintf("\n ..:: Lista de libros ::..");
textcolor(29);
gotoxy(25,7);
cputs("\n1. Agregar libro");
gotoxy(25,9);
cputs("\n2. Eliminar libro");
gotoxy(25,11);
cputs("\n3. Visualizar libros");
gotoxy(25,13);
cputs("\n4. Buscar titulo de libro");
gotoxy(25,15);
cputs("\n5. Modificar\n");
gotoxy(25,17);
cputs("\n6. Salir\n\n");
textcolor(RED);
gotoxy(57,24);
cprintf("Gonzalez Corrales Lucia\n");
gotoxy(57,25);
cprintf("Gonzalez Laffagra Yulisa");
textcolor(5);
gotoxy(20,20);
cputs("\n Que opcion deseas elegir? ");
opc = atoi(gets(cad));
while(opc<0 || opc>7)
opc = atoi(gets(cad));
clrscr();
switch(opc)
{
case 0:
Crear();
break;
case 1:
Agregar();
break;
case 2:
Borrar();
break;
case 3:
Listar();
break;
case 4:
Encontrar();
break;
case 5:
Modificar();
break;
}
if(opc<7){
puts("\n\n... presiona cualquier tecla para regresar al Menu");
getch();
}
}while(opc!=7);
}
//CREAR ARCHIVO
void Crear(void){
FILE *fp;
fp = abrir_fichero_b(nombre_fichero,0);
if(fp)
{
textcolor(8);
gotoxy(7,4);
cprintf("\nError de apuertura del archivo agenda.dat\n");
fclose(fp);
}
}
//VISUALIZAR REGISTROS
void Listar(void){
FILE *fp;
int i=1;
Libro aux;
fp = abrir_fichero_b(nombre_fichero,0);
if(!(fp))
printf("\n Error de apuertura del archivo libros.txt\n");
else{
textcolor(10);
cprintf("\n .:: T i t u l o s D e L i b r o s E n l i s t a d o s ::.\n\n");
while ((fread(&aux, sizeof(aux), 1, fp))!=0){
printf("\n -Datos de libro: %d\n\n",i);
printf(" Titulo: %s\n",aux.tit);
printf(" ISBN: %d\n",aux.isbn);
printf(" Autor: %s\n",aux.autor);
printf(" Tipo: %s\n\n",aux.tipo);
i++;
}
fclose(fp);
}
}
//AGREGAR REGISTRO
void Agregar(void){
FILE *fp;
Libro aux;
char cad[3];
textcolor(14);
cprintf("\n Agregando titulo de libro\n");
fp=abrir_fichero_b(nombre_fichero,2);
if(!(fp))
printf("\n Error de apuertura del archivo libros.txt\n");
else{
/*Introduciendo los Datos del Amigo*/
textcolor(12);
gotoxy(5,4);
cprintf("Ingresa el titulo: ");
gets(aux.tit);
gotoxy(5,6);
cprintf("Ingresa el ISBN: ");
aux.isbn=atoi(gets(cad));
gotoxy(5,8);
cprintf("Ingresa el autor: ");
gets(aux.autor);
gotoxy(5,10);
cprintf("Ingresa el tipo: ");
gets(aux.tipo);
fwrite(&aux, sizeof(aux), 1, fp);
fclose(fp);
}
}
//MODIFICAR
void Modificar(void){
FILE *fp;
Libro 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.dat\n");
else{
printf("Cual es el titulo del libro que quieres Modificar? ");
gets(cadena);
//MODIFICAR
while ((n=fread(&aux, sizeof(aux), 1, fp))!=0 && stricmp(aux.tit,cadena)!=0);
if (n==0)
printf("No se encuentra el libro llamado: %s ",cadena);
else{
printf("\n Libro encontrado....!!!\n");
printf("Titulo: %s ",aux.tit);
printf("ISBN: %d ",aux.isbn);
printf("Autor: %s ",aux.autor);
printf("Tipo: %s\n",aux.tipo);
printf("\n CAMBIANDO VALORES \n");
printf("Ingresa el nuevo titulo: ");
gets(aux.tit);
printf("Ingresa el nuevo ISBN: ");
aux.isbn=atoi(gets(cad));
printf("Ingresa el nuevo autor: ");
gets(aux.autor);
printf("Ingresa el nuevo tipo: ");
gets(aux.tipo);
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
}
}
//ELIMINAR REGISTRO
void Borrar(void){
FILE *fp,*fd;
Libro aux;
int encontrado=0;
char cadena[25];
printf("Introduce el titulo 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 libros.txt\n");
else{
fd=abrir_fichero_b("paso.$$$",1);
if(!(fd))
printf("\n Error!!! Imposible crear archivo auxiliar\n");
else{
while ((fread(&aux, sizeof(aux), 1, fp))!=0)
if(stricmp(aux.tit,cadena)!=0)
fwrite(&aux, sizeof(aux), 1, fd);
else
encontrado=1;
fclose(fd);
}
fclose(fp);
if(encontrado){
system("del libros.txt");
system("ren paso.$$$ libros.txt");
printf("\n Registro BORRADO con Exito!!!\n");
}
else{
system("Del paso.$$$");
printf("\n El Registro NO SE ENCONTRO, no fue borrado!!!");
}
}
}
//BUSCAR REGISTRO
void Encontrar(void){
FILE *fp;
Libro aux;
int n;
char cadena[25];
printf("Introduce el titulo del libro que buscas: ");
gets(cadena);
printf("\n Buscando titulo... \n");
fp=abrir_fichero_b(nombre_fichero,0);
if(!(fp))
printf("\n Error de apuertura del archivo\n");
else{
while ((n=fread(&aux, sizeof(aux), 1, fp))!=0 && stricmp(aux.tit,cadena)!=0);
if (n==0)
printf("No existe el titulo: %s ",cadena);
else{
printf("\n Titulo encontrado!!!\n");
printf("Titulo: %s ",aux.tit);
printf("ISBN: %d ",aux.isbn);
printf("Autor: %s ",aux.autor);
printf("Tipo: %s\n",aux.tipo);
}
}
}
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;
}