Fich: Libros, actgrup

actGrupalficheros.html
#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;
}



No hay comentarios:

Publicar un comentario