#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct stFichaLibro //registro libro
{
char sTitulo[200];
char sAutor[100];
char sEditorial[50];
int iAnoEdicion;
int sIsbn;
int iNumeroPag;
};
/*Prototipos de las funciones que desarrollaremos*/
int Leer_fichero();
int Anadir_libro();
int Modificar_libro();
int Baja_libro();
void main()
{
int iOpcion=0;
do{
fflush(stdin);
system("cls");
printf("\n\n\t\t-- EJERCICIO FICHEROS: --\n\n"); //menu
printf("\t\t1. Leer fichero biblioteca\n");
printf("\t\t2. A\244adir libro a la biblioteca\n");
printf("\t\t3. Modificar libro de la biblioteca\n");
printf("\t\t4. Dar de baja libro de la biblioteca\n");
printf("\t\t5. Salir\n");
scanf("%d", &iOpcion);
switch(iOpcion){
case 1: Leer_fichero();break;
case 2: Anadir_libro();break;
case 3: Modificar_libro();break;
case 4: Baja_libro();break;
case 5: printf("Saliendo del programa...");break;
default: printf("Opci\242n no v\240lida"); getch();break;
}
}while (iOpcion!=5);
}
int Leer_fichero(){
int contador = 1;
FILE *fichero;
struct stFichaLibro libro1;
fflush(stdin);
system("cls");
printf("\n\n\t Opci\242n 1: LEER FICHERO \n\n");
/* Abrir el fichero "biblioteca.dat" en modo lectura*/
fichero = fopen("biblioteca.dat", "r");
if (fichero == NULL) {
printf("Error: No se ha podido crear el fichero biblioteca.dat");
} else {
// Leer la primera estructura libro del fichero
fread(&libro1, sizeof(libro1), 1, fichero);
/* Utilizar un bucle repetitivo WHILE mediante el cual mientras no
se llega al final del fichero se va imprimiendo por pantalla cada uno de los registros */
while (!feof(fichero)) {
printf("\t Libro %d", contador);
printf("\n\t=========");
printf("\n\tT\241tulo: %s", libro1.sTitulo);
printf("\n\tAutor: %s", libro1.sAutor);
printf("\n\tEditorial: %s", libro1.sEditorial);
printf("\n\tA\244o edici\242n: %d", libro1.iAnoEdicion);
printf("\n\tISBN: %d", libro1.sIsbn);
printf("\n\tN\243mero de p\240ginas: %d", libro1.iNumeroPag);
fread(&libro1, sizeof(libro1), 1, fichero);
printf("\n\n");
//Incrementamos el contador de libros almacenados en el fichero
contador++;
}
/* Cerrar el fichero "bibliteca.dat". */
fclose(fichero);
}
getch();
return 0;
}
int Anadir_libro( ) {
/* Declarar la variable fichero y la estructura libro*/
FILE *fichero;
struct stFichaLibro libro1;
//Abrimos el fichero "biblioteca.dat" en modo añadir.
fichero = fopen("biblioteca.dat", "a");
fflush(stdin);
system("cls");
printf("\n\n\tOpci\242n 2: A\245ADIR REGISTRO");
if (fichero == NULL) {
printf("Error: No se ha podido crear el fichero biblioteca.dat");
}
else {
/* Pedimos al usuario los datos del libro*/
fflush (stdin);
printf("\n\n\tT\241tulo: ");
scanf("%s", libro1.sTitulo);
printf("\n\tAutor: ");
scanf("%s", libro1.sAutor);
printf("\n\tEditorial: ");
scanf("%s", libro1.sEditorial);
printf("\n\tA\244o edici\242n: ");
scanf("%d", &libro1.iAnoEdicion);
printf("\n\tISBN: ");
scanf("%d", &libro1.sIsbn);
printf("\n\tN\243mero de p\240ginas: ");
scanf("%d", &libro1.iNumeroPag);
//Añadimos el registro al fichero
fwrite(&libro1, sizeof(libro1), 1, fichero);
/* Cerramos "empleados.dat". */
fclose(fichero);
printf("\n\n\tRegistro a\244adido correctamente");
}
getch();
return 0;
}
int Modificar_libro(){
/* Declaramos las variables fichero y fichero auxiliar*/
FILE *fichero;
FILE *ficheroAux;
struct stFichaLibro libro1;
int sISBN=0;
int iEncontrado=0;
//Abrir el fichero "biblioteca.dat" en modo añadir.
fichero = fopen("biblioteca.dat", "r");
//Abrir el fichero "bibliotecaAux.dat" en modo añadir.
ficheroAux = fopen("bibliotecaAux.dat", "a");
fflush(stdin);
system("cls");
fflush(stdin);
printf("\n\n\tOpci\242n 3: MODIFICAR REGISTRO");
printf("\n\n\n\tIndique el ISBN del libro a modificar: ");
scanf("%d",&sISBN);
fflush(stdin);
if (fichero == NULL) {
printf("Error: No existe el fichero biblioteca.dat");
}
else {
fread(&libro1, sizeof(libro1), 1, fichero);
/*bucle WHLE lo que hacemos es ir trasvasando todos los registros a un fichero auxiliar
hasta encontrar el que tiene el ISBN que ha indicado el usuario.
En dicho punto, se añade el nuevo fichero indicado por el usuario y se sigue trasvasando
la información hasta que se alcance el final del fichero*/
while (!feof(fichero)) {
if(libro1.sIsbn == sISBN)
{
/* Pedimos al usuario los nuevos datos del libro.*/
printf("\n\n\tT\241tulo: ");
scanf("%s", libro1.sTitulo);
printf("\n\tAutor: ");
scanf("%s", libro1.sAutor);
printf("\n\tEditorial: ");
scanf("%s", libro1.sEditorial);
printf("\n\tA\244o edici\242n: ");
scanf("%d", &libro1.iAnoEdicion);
printf("\n\tISBN: ");
scanf("%d", &libro1.sIsbn);
printf("\n\tN\243mero de p\240ginas: ");
scanf("%d", &libro1.iNumeroPag);
printf("\n\tLibro modificado correctamente");
fwrite(&libro1, sizeof(libro1), 1, ficheroAux);
iEncontrado=1;
}
else{
fwrite(&libro1, sizeof(libro1), 1, ficheroAux);
}
fread(&libro1, sizeof(libro1), 1, fichero);
}
}
//Cerrar ficheros
fclose(fichero);
fclose(ficheroAux);
if(iEncontrado==0)
{
/*En caso de no haber encontrado ningún libro coincidente con el ISBN
se muestra un mensaje al usuario y seelimina el fichero auxiliar ya que se tendrá
exactamente el mismo contenido que en el fichero normal*/
printf("No se ha encontrado ning\243n libro con el ISBN indicado.");
remove("bibliotecaAux.dat");
}
else{
/*En el caso de haber encontrado coincidencia, eliminaremos el fichero actual Biblioteca
se renombra el auxiliar de BibliotecaAux a Biblioteca ya que contendrá el total de registros
con los datos ya modificados */
remove("biblioteca.dat");
rename("bibliotecaAux.dat", "biblioteca.dat");
}
getch();
return 0;
}
int Baja_libro(){
/* Declarar las variables fichero y fichero auxiliar*/
FILE *fichero;
FILE *ficheroAux;
struct stFichaLibro libro1;
int sISBN=0;
int iEncontrado=0;
//Abrir el fichero "biblioteca.dat" en modo añadir.
fichero = fopen("biblioteca.dat", "r");
//Abrir el fichero "biblioteca.dat" en modo añadir.
ficheroAux = fopen("bibliotecaAux.dat", "a");
fflush(stdin);
system("cls");
fflush(stdin);
printf("\n\n\tOpci\242n 3: BAJA DE REGISTRO");
printf("\n\n\n\tIndique el ISBN del libro a dar de baja: ");
scanf("%d",&sISBN);
fflush(stdin);
if (fichero == NULL) {
printf("Error: No existe el fichero biblioteca.dat");
}
else {
fread(&libro1, sizeof(libro1), 1, fichero);
/*Con este bucle WHLE se trasvasan todos los registros a un fichero auxiliar
hasta encontrar el que tiene el ISBN que ha indicado el usuario. Se obvia el registro a dar de baha
y se sigue trasvasando la información hasta que se alcance el final del fichero*/
while (!feof(fichero)) {
if(libro1.sIsbn == sISBN)
{
printf("\n\tLibro dado de baja correctamente");
iEncontrado=1;
}
else{
fwrite(&libro1, sizeof(libro1), 1, ficheroAux);
}
fread(&libro1, sizeof(libro1), 1, fichero);
}
}
//Cerramos ambos ficheros
fclose(fichero);
fclose(ficheroAux);
if(iEncontrado==0)
{
/*En caso de no haber encontrado ningún libro coincidente con el ISBN
se muestra un mensaje al usuario y eliminaremos el fichero auxiliar
*/
printf("No se ha encontrado ning\243n libro con el ISBN indicado.");
remove("bibliotecaAux.dat");
}
else{
/*En el caso de haber encontrado coincidencia, eliminar el fichero actual Biblioteca y
renombrar
el auxiliar de BibliotecaAux a Biblioteca ya que contendrá el total de registros con los datos ya modificados
*/
remove("biblioteca.dat");
rename("bibliotecaAux.dat", "biblioteca.dat");
}
getch();
return 0;
}
Fich: Libros, actgrup
Suscribirse a:
Enviar comentarios (Atom)
No hay comentarios:
Publicar un comentario