biblioteca con borland c++

41
“DOCUMENTACION” “POYECTO FINAL DE PROGRAMACION” “CREACION DE UN PROGRAMA PARA MANEJO DE DATOS EN UN BIBLIOTECA” ANALISIS DEL PROYECTO: El siguiente programa trata del manejo y manipulación de registros de libros dentro de una librería, la principal función de este programa es ayudar al usuario a manejar los datos específicos de un libro y manejarlos a su gusto y conveniencia. PLANTEAMIENTO DEL PROBLEMA: Según los requerimientos de pedidos para la realización de dicho programa este debe ser capaza de ingresar datos de las cualidades del libro y datos de ubicación en la cual se almacenara el libro dentro de la biblioteca o librería. Se debe crear una función que permita mostrar los datos que almacenamos. Otra función que permita buscar, modificar, y eliminar registros de libros. Como otro requerimiento principal, el programa debe ser capaz de crear un archivo de texto en la memoria del disco duro en el cual se deben ir guardando, modificando o eliminando los datos que estamos trabajando en el programa principal. NOTA: dicho programa esta realizado en el compilador BORLAND C++. Para utilizarlo en otro compilador es necesario modificarle los requerimiento que el compilador necesite.

Transcript of biblioteca con borland c++

“DOCUMENTACION”“POYECTO FINAL DE PROGRAMACION”

“CREACION DE UN PROGRAMA PARA MANEJO DE DATOS EN UN BIBLIOTECA”

ANALISIS DEL PROYECTO:

El siguiente programa trata del manejo y manipulación de registros de libros dentro de una librería, la principal función de este programa es ayudar al usuario a manejar los datos específicos de un libro y manejarlos a su gusto y conveniencia.

PLANTEAMIENTO DEL PROBLEMA:

Según los requerimientos de pedidos para la realización de dicho programa este debe ser capaza de ingresar datos de las cualidades del libro y datos de ubicación en la cual se almacenara el libro dentro de la biblioteca o librería.

Se debe crear una función que permita mostrar los datos que almacenamos. Otra función que permita buscar, modificar, y eliminar registros de libros.

Como otro requerimiento principal, el programa debe ser capaz de crear un archivo de texto en la memoria del disco duro en el cual se deben ir guardando, modificando o eliminando los datos que estamos trabajando en el programa principal.

NOTA: dicho programa esta realizado en el compilador BORLAND C++.Para utilizarlo en otro compilador es necesario modificarle los requerimiento que el compilador necesite.

FLUJOGRAMA DEL PROGRAMA.

INICIO.

Decisión.

Declaración de la estructura

Seleccione la actividad deseada.

A. registrar datos.B. ver datos.C. buscar datos.D. modificar datos.E. eliminar datos

Fin.

DIAGRAMA DE FLUJO MENU PRINCIPAL.

A. REGISTRAR DATOS.

Ingrese el nombre del autor.

Ingrese el apellido del autor.

Ingrese el nombre del libro.

Ingrese la editorial del libro.

Ingrese la categoría del libro.

Ingrese el no. estantería a almacenar

Ingrese el no. de pasillo a almacenar

Ingrese el no. De nivel a almacenar.

¿Desea ingresar más datos?

SI

Diagrama de flujoDe la función

registrar datos.

NO

Regresar al menú principal.

B. VER DATOS

El nombre del libro autor del libro es: El apellido del autor del libro es:El nombre del libro es:La editorial del libro es:La categoría del libro es:Esta ubicado en la estantería no. :Ubicado en el pasillo no. :Ubicado en el nivel no. :

Regreso al menú.

DIAGRAMA DE FLUJO FUNCION VER DATOS

FLUJOGRAMA FUNCION BUSCAR DATOS.

C. BUSCAR DATOS.

Nombre del libro a buscar.

Si el registro existe.

NO

El libro no existe.

Regresar al menú.

El nombre del libro autor del libro es: El apellido del autor del libro es:El nombre del libro es:La editorial del libro es:La categoría del libro es:Esta ubicado en la estantería no. :Ubicado en el pasillo no. :Ubicado en el nivel no. :

SI

DIAGRAMA DE FLUJO MODIFICAR DATOS

D. MODIFICAR DATOS.

Nombre del libro a modificar

Si existe libro existe

NO

SIIngrese el nuevo nombre del libro.

Ingrese el nuevo apellido del autor.

Ingrese el nuevo titulo del libro.

Ingrese la nueva editorial del libro.

Ingrese la nueva categoría del libro

Ingrese la ubicación en la estantería

Ingrese la ubicación del pasillo.

Ingrese la ubicación del nivel.

El registro no existe.

Regreso al menú.

DIAGRAMA DE FLUJO FUNCION ELIMINAR

E. ELIMINAR DATOS.

Ingrese el nombre del libro aEliminar

Si el libro existe

NO

El registro se ha eliminadoExitosamente

El registro no existe

SI

Regresar al menú principal

MANUAL DE USUARIO:

OBJETIVOS: Los objetivos específicos de esta manual es proporcional al usuario la ayuda

necesaria para el manejo de este programa.

PANTALLA DE MENSAJE DE BIENVENIDA.

1.

Esta es la pantalla de inicio en la cual encontramos un mensaje de bienvenida para el programa.

Pantalla de inicio que muestra el mensaje de bienvenida del programa.

PANTALLA DE MENU PRINCIPAL.

2.

Pantalla del menú de inicio que nos permite seleccionar las actividades que deseamos realizar, esta selección debe realizarse ingresando la letra de la función a realizar. (A=registrar datos. B=ver datos. C=buscar datos. D=eliminar datos. E=eliminar datos. F=salir del programa.)

No importa que sea letra minúscula o mayúscula siempre y cuando sean letras.

Menú principal.

PANTALLA DE INGRESO DE DATOS.

3.

Al momento de seleccionar la letra “A” nos despliega la pantalla de ingreso de datos específicos del libro. Cada vez que ingresamos el dato que nos pide presionamos “ENTER” para avanzar a la siguiente línea.

Todos estos datos deben ser ingresados con valores alfabéticos sin utilizar valores numéricos.

Mensajes de petición de datos a ingresar.

PANTALLA DE INGRESO DE DATOS DE UBICACIÓN.

4.

La pantalla de almacenamiento de los datos a almacenar el libro dentro de la biblioteca o librería, se despliega luego de ingresar la categoría del libro.

Estos datos de ubicación deben ingresarse solamente con valores numéricos a partir del cero.

Luego de ingresar el número de nivel de la estantería en la que se va a almacenar el libro nos muestra un mensaje, el cual nos pregunta si queremos seguir ingresando datos o deseamos regresar al menú de principal.

Si deseamos seguir ingresando datos presionamos la letra “S”.

Si deseamos regresar al menú principal presionamos la letra “N”.

Mensaje que nos muestra los enunciados de las ubicaciones donde queremos almacenar el libro dentro de la biblioteca.

PANTALLA QUE NOS MUESTRA LOS DATOS.

5.

Al seleccionar la opción “B” se nos despliega la pantalla que nos muestra la lista de todos los datos que vamos ingresando en forma de lista.

Para regresar al menú principal tenemos que presionar cualquier tecla.

PANTALLA DE BUSQUEDA DE DATOS.

6.

Cuando seleccionamos la opción “C” pedimos que nos muestre la pantalla que nos permite buscar datos dentro de los registros, en esta pantalla nos aparece un enunciado que nos pide ingresar el nombre del libro que deseamos consultar, esto nos sirve para poder ver las especificaciones del libro y la ubicación del mismo dentro de la biblioteca.

El nombre del libro debe ingresarse con valores alfabéticos.

Enunciado que nos pide el nombre del libro a buscar.

Aquí nos muestra los datos encontrados dentro del registro,

siempre y cuando el registro exista.

PANTALLA DE REGISTROS NO ENCONTRADOS.

7.

Cuando seleccionamos la opción “C” que nos permite buscar datos dentro de los registros, nos aparece el enunciado que nos pide ingresar el nombre del libro a buscar y dicho nombre no existe dentro de los registros nos despliega un enunciado que nos indica que el registro no existe.

Luego nos aparece un enunciado que nos permite regresar al menú principal.

Enunciado que nos indica que el registro no existe.

Opción para regresar al menú principal

Nombre del libro a buscar.

PANTALLA DE MODIFICACION DE DATOS.

8.

Esta pantalla nos aparece cuando seleccionamos la opción “D” del menú principal la cual nos permite modificar los datos de x libro.

Al momento de seleccionar esta opción nos aparece un enunciado que nos pide ingresar el nombre del libro a modificar, si el registro no existe nos muestra un mensaje en el cual nos dice que el registro no existe, y nos regresa al menú principal.

Cuando el nombre del registro es valido nos muestra una serie de enunciados los cuales debemos ir llenando dependiendo de las modificaciones que deseemos realizar.

Nombre del libro a modificar.

Enunciados en los cuales podemos modificar los datos que sean requeridos por el usuario.

PANTALLA QUE NOS MUESTRA LOS DATOS YA MODIFICADOS Y GUARDADOS.

9.

Luego de que ya modificamos los datos que considerábamos necesarios y deseamos ver si realmente se guardaron tal como queríamos podemos seleccionar en el menú principal la opción “B” del menú principal, que nos muestra los datos almacenados, y ahí podemos apreciar si los datos que se almacenaron son realmente los que queríamos almacenar, de lo contrario podemos regresar a la opción de modificar datos y realizar nuevamente las modificaciones.

Datos ya modificados a gusto del usuario.

PANTALLA QUE NOS MUESTRA LA OPCION ELIMINAR DATOS.

10.

La opción “E” del menú principal nos permite eliminar registros que queramos dar de baja dentro de la biblioteca.

Al momento de seleccionar esta opción nos aparece un enunciado que nos pide ingresar el nombre del libro a eliminar, si el nombre del libro ingresado es correcto nos y deseamos eliminarlo debemos presionar ENTER, luego de esto nos debe aparecer un enunciado que nos indica que la eliminación del registro a sido satisfactoria.

Si deseamos corroborar la eliminación podemos seleccionar la opción “C” de buscar registros y al momento de ingresar el nombre del libro que supuestamente eliminamos nos aparecerá un el mensaje “registro no encontrado”. Esto significa que ciertamente hemos eliminado el registro.

Nombre del registro a eliminar

Nos indica que se ha eliminado correctamente el registro

PANTALLA QUE NOS INDICA QUE EL DATO INGRESADO A ELIMINAR NO EXISTE.

11.

Si al momento de ingresar el nombre del registro que deseamos eliminar, dicho registro no existe, el programa nos desplegara la advertencia que el registro que deseamos eliminar no existe, y nos pide regresar al menú para realizar nuevamente la actividad.

Advertencia que nos indica que el registro a eliminar no existe.

SELECCIÓN DE SALIR DEL PROGRAMA.

12.

si al momento de decidir ya no realizar ninguna actividad y deseamos cerrar el programa tenemos a disposición seleccionar la opción “F” del menú principal la cual nos permite cerrar el programa o bien presionar alt+f4, o si consideramos mas fácil dar clic izquierdo en la esquina superior derecha de la pantalla en la sobre la “x”.

Opción que nos permite salir del programa mediante la selección

del menú.

Opción de cerrar el programa mediante clic izquierdo sobre

esta opción.

MANUAL TECNICO.

OBJETIVOS ESPECIFICOS:

Los objetivos específicos de dicho manual es proporcionar la facilidad de entendimiento para cualquier programador que se encuentre en contacto con el código de programa, es decir que sea entendible para el y que pueda interpretarlo a su gusto y conveniencia, para que el pueda realizarle los cambios que desee sin ningún tipo de complicación.

CODIGO DE PROGRAMA, CON LA ESPECIFICACIONES DE LAS DECLARACIONES UTILIZADAS DENTRO DEL PROGRAMA:

NOTA: los enunciados que se encuentran de color negro son los enunciados aceptados por el programa, y los que se encuentran de color rojo son las aclaraciones de lo que se esta realizando dentro del programa o para que nos sirve lo que estamos declarando.

#include<fstream.h> //DECLARACION DE LAS LIBRERIA.#include<conio.h>#include<stdio.h>#include<ctype.h>#include<string.h>

struct sbiblioteca{char autor[50],apellido[50],titulo[50], edicion[20]; //DECLARACION DE LA ESTRUCTURA CON LOS DATOS A ALMACENAR.char editorial[30], categoria[20];int pasillo, nivel,estanteria,publicacion;}biblioteca; //SE NOMBRA LA BIBLIOTECA.

void registrar_datos(); //DECLARACION DE LAS FUNCIONES A TRABAJAR.void ver_datos();void buscar_datos();void modificar_datos();void eliminar_datos();

void main(){

printf("\n BIENVENIDOS A LA BIBLIOTECA "); //MENSAJE DE BIENVENIDA. printf("\n ES UN GUSTO ATENDERLE "); printf("\n\n PRESIONE ENTER PARA CONTINUAR "); getch();

char dec; //SE DECLARA UNA VARIABLE LLAMADA DEC LA CUAL MANEJARA LA OPCION A SELECCIONAR EN EL MENU. do {

clrscr(); // ESTE ES UN LIMPIA PANTALLAS QUE UTILIZA LA BORLAND C++.

//AQUI SE MUESTRA EL MENU DE LAS OPCIONES DISPONIBLES A REALIZAR. printf("SELECCIONE LA ACTIVIDAD A REALIZAR"); printf("\n\nA.REGISTRAR DATOS"); printf("\nB.VER DATOS"); printf("\nC.BUSCAR DATOS"); printf("\nD.MODIFICAR DATOS"); printf("\nE.ELIMINAR DATOS"); printf("\nF.SALIR");

do {

do {

dec = toupper(getch()); //LA VARIABLE TOUPPER LEE DESDE EL TECLADO Y CONVIERTE LAS LETRAS EN MAYUSCULAS.

}while(!isalpha(dec)); //ISALPHA NO PERMITE VALIDAR LA DECICION. }while(dec<'A' || dec> 'F');

switch(dec) //EL SICLO SWITCH NOS PERMITE MOSTRAR LA FUNCION QUE QUEREMOS TRABAJAR DESPUES DE INGRESAR LA SELECCION DESDE EL TECLADO. {

case 'A': //SI SELECCINAMOS "A" NOS DESPLEGARA LA OPCION DE INGRESAR DATOS.{ registrar_datos(); break;}

case 'B': //SI SELECCINAMOS "B" NOS DESPLEGARA LA OPCION DE VER DATOS.{

ver_datos(); break;

}

case 'C': //SI SELECCINAMOS "C" NOS DESPLEGARA LA OPCION DE BUSCAR DATOS.{

buscar_datos(); break;

}case'D': //SI SELECCINAMOS "D" NOS DESPLEGARA LA OPCION DE MODIFICAR DATOS.{

modificar_datos(); break;

}case'E': //SI SELECCINAMOS "E" NOS DESPLEGARA LA OPCION DE ELIMINAR DATOS.{

eliminar_datos(); break;

} }

}while(dec!='F'); //SI SELECCINAMOS "F" NOS CIERRA EL PROGRAMA..

getch(); //GETCH() NOS IMPRIME EN LA PANTALLA LOS DATOS.}

void registrar_datos() //LA FUNCION REGISTRAR DATOS NOS PERMITE INGRESAR LOS DATOS Y LOS GUARDA EN EL ARCHIVO DE TEXTO.

{ char dec; //LA VARIABLE DEC EN ESTA FUNCION NOS PERMITE LEER SI QUEREMOS O NO SEGUIR REGISTRANDO DATOS. char *b, *c; //DECLARACION DE PUNTEROS QUE PERMITAN MANEJAR LOS DATOS.

FILE *entrada; //SE DECLARA UN ARCHIVO CON EL NOMBRE DE ENTRADA QUE NOS PERMITIRA MANIPULAR LOS DATOS. entrada=fopen("libreria.txt","a+" ); //AQUI SE ABRE EL ARCHIVO, A+ NOS PERMITE CREAR Y ESCRIBIR EN EL ARCHIVO.

if (entrada ==NULL) // LA VARIABLE NULL NOS PERMITE VALIDAR SI EXISTE O NO EL ARCHIVO. {

printf("HA OCURRIDO UN ERROR AL ABRI EL ARCHIVO"); getch();

}

else {

do {

clrscr();

// AQUI SE EMPIEZA EL INGRESO DE DATOS.printf("\n\nINGRESO DE DATOS DEL LIBRO A REGISTRAR\n");printf("\nINGRESE NOMBRE DEL AUTOR DEL LIBRO: ");scanf("%s",&biblioteca.autor); //NOS LEE EL NOMBRE DEL AUTOR DE LA VARIBLE AUTOR DECLARADA EN LAESTRUCTURA.printf("\nINGRESE EL APELLIDO DEL AUTOR DEL LIBRO: ");scanf("%s",&biblioteca.apellido); //NOS LEE EL APELLIDO DE LA VARIBLE APELLDO DECLARADA EN LA ESTRUCTURA.printf("\nINGRESE TITULO DEL LIBRO: ");scanf("%s",&biblioteca.titulo); //NOS LEE TITULO DEL LIBRO DE LA VARIBLE TITULO DECLARADA EN LA ESTRUCTURA.printf("\nINGRESE EDICION DEL LIBRO: ");scanf("%s",&biblioteca.edicion); //NOS LEE LA EDICION DEL LIBRO DE LA VARIBLE EDICION DECLARADA EN LA ESTRUCTURA.

printf("\nINGRESE EDITORIAL DEL LIBRO: ");scanf("%s",&biblioteca.editorial); //NOS LEE EL NOMBRE DE LA EDITORIAL DE LA VARIBLE EDITORIAL DECLARADA EN LA ESTURCTURA.printf("\nINGRESE LA CATEGORIA DEL LIBRO: ");scanf("%s",&biblioteca.categoria); //NOS LEE LA CATEGORIA DE LA VARIBLE CATEGORIA DECLARADA EN LA ESTRUCTURA.c=strupr(biblioteca.titulo); //ESTE PUNTERO MANEJA LOS DATOS ESPECIFICOS DEL LIBRO.clrscr();printf("\n\n\nINGRESO DE DATOS DE ALMACENAMIENTO DEL LIBRO %s",&biblioteca.titulo);printf("\n\nINGRESE ESTANTERIA ALMACENAR: ");scanf("%d",&biblioteca.estanteria); //NOS LEE LA UBICACION DE LA ESTANTERIA DE LA VARIBLE ESTANTERIA DECLARADA EN LA ESTRUCTURA.printf("\nINGRESE NUMERO DE PASILLO ALMACENAR EL LIBRO: ");scanf("%d",&biblioteca.pasillo); //NOS LEE LA UBICACION DEL PASILLO DE LA VARIBLE PASILLO DECLARADA EN LA ESTRUCTURA.printf("\nINGRESE NUMERO DE NIVEL DEL LIBRO ALMACENAR: ");scanf("%d",&biblioteca.nivel); //NOS LEE LA UBCACION DEL NIVEL DE LA VARIBLE NIVEL DECLARADA EN LA ESTRUCTURA.b=strupr(biblioteca.autor); //ESTE PUNTERO MANEJA LOS DATOS ESPECIFICOS DE LA UBICACION.

fprintf(entrada," %s %s %s %s %s %s", biblioteca.autor, biblioteca.apellido, biblioteca.titulo, biblioteca.edicion, biblioteca.editorial, biblioteca.categoria); // LA FUNCION fprintf NOS PERMITE GUARDAR LOS DATOS INGRESADOS EN EL ARCHIVO.fprintf(entrada," %d %d %d\n", biblioteca.estanteria, biblioteca.pasillo, biblioteca.nivel);printf("\nDESEA REGISTRAR OTRO LIBRO(S/N):");

do{

dec= toupper(getch());}while(!isalpha(dec));

}while(dec!='N'); //SI DECIDIMOS NO SEGUIR AGREGANDO DATOS NO REGRESA AL MENU PRINCIPAL.

fclose(entrada); //LA FUNCION Fclose NOS CIERRA EL ARCHIVO. }

} //AQUI FINALIZA LA FUNCION INGRESAR DATOS.

void ver_datos() //AQUI EMPIEZA LA FUNCION VER DATOS.{

clrscr(); FILE *salida; //SE DECLARA UN ARCHIVO DE NOMBRE SALIDA QUE NOS PERMITIRA MOSTRAR LOS DATOS DE SALIDA. salida = fopen("libreria.txt", "r"); //SE ABRE EL FICHERO DE LECTURA.

if(salida == NULL) { printf("\n NO EXISTE EL ARCHIVO! \nPOR FAVOR CREELO");

return; }

fscanf(salida, "%s", biblioteca.autor); //SE REALIZA UNA LECTURA ADELANTADA PARA PODER MOSTRAR LOS DATOS.while(!feof(salida)){

fscanf(salida,"%s %s %s %s %s",biblioteca.apellido, biblioteca.titulo, biblioteca.edicion, biblioteca.editorial, biblioteca.categoria); //LA FUNCION fscanf NOS PERMITE MOSTRAR LOS DATOS INGRESADOS EN EL ARCHIVO.fscanf(salida,"%d %d %d", &biblioteca.estanteria, &biblioteca.pasillo, &biblioteca.nivel);

printf("\n**************************************************"); //ESTOS SON LOS DATOS QUE NOS MOSTRARA EL ARCHIVO AL MOMENTO PEDIR QUE NOS MUESTRE LOS DATOS.printf("\n\n\nNOMBRE DEL AUTOR DEL LIBRO: %s",&biblioteca.autor);printf("\nAPELLIDO DEL AUTOR DEL LIBRO: %s",&biblioteca.apellido);printf("\nTITULO DEL LIBRO: %s",&biblioteca.titulo);printf("\nEDICION DEL LIBRO: %s",&biblioteca.edicion);printf("\nEDITORIAL DEL LIBRO: %s",&biblioteca.editorial);printf("\nCATEGORIA DEL LIBRO: %s",&biblioteca.categoria);printf("\nUBICADO EN LA ESTANTERIA NO.: %d",biblioteca.estanteria);printf("\nUBICADO EN EL PASILLO NO.: %d",biblioteca.pasillo);printf("\nUBICADO EN EL NIVEL NO.: %d",biblioteca.nivel);printf("\n\n**************************************************");printf("\n****************REGISTROS*************************");

fscanf(salida, "%s", biblioteca.autor);}fclose(salida); //SE CIERRA EL ARCHIVO SALIDA.

getch();} //AQUI FINALIZA LA FUNCION VER DATOS.

void buscar_datos() //AQUI EMPIEZA LA FUNCION BUSCAR DATOS.{

char nom[20]; //SE DECLARA UNA VARIABLE DE CON EL NOMBRE DE NOM. char *b; //SE DECLARA UN PUNTERO QUE NOS PERMITIRA MANEJAR LOS DATOS INGRESADOS EN EL ARCHIVO SALIDA.

FILE *salida; //EL ARCHIVO SALIDA NOS PERMITIRA BUSCAR LOS DATOS QUE DESEEMOS.

salida=fopen("libreria.txt","r"); // SE CREA EL ARCHIVO SALIDA SOLO PARA LECTURA. if(salida==NULL)

{ clrscr();printf("HA OCURRIDO UN ERROR AL ABRIR EL ARCHIVO");getch();

} else {

clrscr();fscanf(salida, "%s", biblioteca.autor); //SE REAIZA UNA LECTURA ADELANTADA QUE PERMITIRA MOSTRAR LOS DATOS.printf("\n\nINTRODUZCA EL TITULO DEL LIBRO A BUSCAR: ");//SE PIDE INGRESAR EL NOMBRE DEL LIBRO A MOSTRAR.

scanf("%s", &nom); //LEE LA VARIABLE NOM.b=strupr(nom); //GUARDA LOS DATOS EN EL PUNTERO B.

while(!feof(salida)) //VALIDA EL ARCHIVO SALIDA.

{fscanf(salida,"%s %s %s %s %s", biblioteca.apellido, biblioteca.titulo, biblioteca.edicion, biblioteca.editorial, biblioteca.categoria);fscanf(salida,"%d %d %d\n", &biblioteca.estanteria, &biblioteca.pasillo, &biblioteca.nivel);

if(strcmp(biblioteca.titulo,nom)==0) //NOS CONDICIONA EL NOMBRE DEL LIBRO INGRESADO. {//ESTOS SON LOS DATOS QUE NOS MOSTRARA SI EXISTE EL NOMBRE DEL LIBRO.

printf("\n**************************************************");printf("\n******************REGISTROS***********************");

printf("\n**************************************************");printf("\n\n\nNOMBRE DEL AUTOR DEL LIBRO: %s",&biblioteca.autor);printf("\nAPELLIDO DEL AUTOR DEL LIBRO: %s",&biblioteca.apellido);printf("\nTITULO DEL LIBRO: %s",&biblioteca.titulo);printf("\nEDICION DEL LIBRO: %s",&biblioteca.edicion);printf("\nEDITORIAL DEL LIBRO: %s",&biblioteca.editorial);printf("\nCATEGORIA DEL LIBRO: %s",&biblioteca.categoria);printf("\nUBICADO EN LA ESTANTERIA NO.: %d",biblioteca.estanteria);printf("\nUBICADO EN EL PASILLO NO.: %d",biblioteca.pasillo);printf("\nUBICADO EN EL NIVEL NO.: %d",biblioteca.nivel);

} fscanf(salida, "%s", biblioteca.autor);

}printf("\n EL REGISTRO NO EXISTE");printf("\n\n PRESIONE ENTER PARA REGRESAR AL MENU");

fclose(salida); //NOS CIERRA EL ARCHIVO SALIDA. } getch();

} //AQUI TERMINA LA FUNCION BUSCAR DATOS.

void modificar_datos() //AQUI COMIENZA LA FUNCION MODIFICAR DATOS.{

char auxnombre[30]; //SE DECLARA UNA VARIABLE CON EL NOMBRE DE AUXNOMBRE. char *b, *c; //SE DECLARAN PUNTERO PARA EL MANEJO DE INFORMACION. int band=0;

FILE *tem; //NOS SIRVE PARA CREAR UN ARCHIVO TEMPORA. FILE *salida; //NOS SIRVE PARA CREAR UN ARCHIVO DE NOMBRE SALIDA.

tem =fopen("temporal.txt","w"); //NOS PERMITE CREAR EL ARCHIVO TEMPORAL Y GUARDAR EN EL LOS DATOS MODIFICADOS. salida =fopen("libreria.txt","r"); //NOS PERMITE CREAR EL ARCHIVO SALIDA, SOLO LECTURA.

if(tem==NULL || salida==NULL) //NOS CONDICIONA LOS DOS ARCHIVOS. {

clrscr();printf("HA OCURRIDO UN ERROR AL ABRIR EL ARCHIVO");

} else {

clrscr();

printf("INTRODUZCA EL TITULO DEL LIBRO A MODIFICAR : "); //AQUI PEDIMOS INGRESAR EL NOMBRE DEL LIBRO A MODIFICARLE LOS DATOS.scanf("%s",&auxnombre);

fscanf(salida, "%s", biblioteca.autor); //SE VUELVE A REALIZAR LA LECTURA ADELANTADA.

while(!feof(salida)){fscanf(salida,"%s %s %s %s %s", biblioteca.apellido, biblioteca.titulo, biblioteca.edicion, biblioteca.editorial, biblioteca.categoria);fscanf(salida,"%d %d %d\n", &biblioteca.estanteria, &biblioteca.pasillo, &biblioteca.nivel);b=strupr(auxnombre);

if(strcmp(auxnombre,biblioteca.titulo)==0) //NOS CONDICIONA LA VARIABLE AUXNOMBRE Y EL NOMBRE DEL LIBRO. {

//ESTOS SON LOS ENUNCIADOS QUE NOS MOSTRARA PARA MODIFICAR LOS DATOS.

printf("\nINTRODUZCA EL NUEVO TITULO DEL LIBRO: "); scanf("%s",biblioteca.titulo); printf("\nINTRODUZCA EL NUEVO NOMBRE DEL AUTOR DEL LIBRO: "); scanf("%s",biblioteca.autor); printf("\nINTRODUZCA EL NUEVO APELLIDO DEL AUTOR: "); scanf("%s",biblioteca.apellido); printf("\nINTRODUZCA LA NUEVA EDICION DEL LIBRO: "); scanf("%s",&biblioteca.edicion); printf("\nINTODUZCA LA NUEVA EDITORIAL DEL LIBRO: "); scanf("%s",&biblioteca.editorial); printf("\nINTRODUZCA LA NUEVA CATEGORIA DEL LIBRO: "); scanf("%s",&biblioteca.categoria); printf("\nINTRODUZCA LA NUEVA DIRECCION DE LA ESTANTERIA A ALMACENAR: "); scanf("%d",&biblioteca.estanteria); printf("\nINTRODUZCA EL NUEVO NUMERO DE PASILLO A ALMACENAR: "); scanf("%d",&biblioteca.pasillo); printf("\nINTRODUZCA EL NUEVO NUMERO DE NIVEL A ALMACENAR: "); scanf("%d",&biblioteca.nivel);

c=strupr(biblioteca.titulo); //PUNTERO QUE NOS PERMITIRA MANEJAR LOS DATOS. band=1;

}fprintf(tem," %s %s %s %s %s %s", biblioteca.autor, biblioteca.apellido, biblioteca.titulo, biblioteca.edicion, biblioteca.editorial, biblioteca.categoria); //NOS PERMITIRA GUARDAR LOS NUEVOS DATOS EN EL ARCHIVO PRINCIPALfprintf(tem," %d %d %d\n", biblioteca.estanteria, biblioteca.pasillo, biblioteca.nivel);

fscanf(salida, "%s", biblioteca.autor);}if (band!=1){

clrscr(); printf("NO ES POSLIBLE ENCONTRAR EL REGISTRO"); //MENSAJE QUE NOS MOSTRARA SI NO EXISTE EL LIBRO A MODIFICAR. getch();

}

fclose(tem); //NOS CIERRA EL ARCHIVO TEMPORAL.fclose(salida); //NOS CIERRA EL ARCHIVO SALIDA.

remove("libreria.txt"); //NOS REMUEVE LOS DATOS DE ARCHIVO PRINCIPAL.rename("temporal.txt","libreria.txt"); //NOS RENOMBRA LOS REGISTROS DEL ARCHIVO TEMPORAL Y LOS GUARDA EN EL PRINCIPAL.

}

} //AQUI FINALIZA LA OPCION MODIFICAR DATOS.

void eliminar_datos() //AQUI EMPIEZA LA OPCION ELIMINAR DATOS.{

char auxnombre[30]; char *b, *c; //SE DECLARAN DOS PUNTERO PARA EL MANEJO DE DATOS. int band=0;

FILE *tem; FILE *salida;

tem =fopen("temporal.txt","w"); //NOS ABRE EL ARCHIVO TEMPORAL. salida =fopen("libreria.txt","r"); //NOS ABRE EL ARCHIVO PRINCIPAL.

if(tem==NULL || salida==NULL) //NOS VALIDA SI EXISTEN O NO LOS ARCHIVOS. {

clrscr();printf("HA OCURRIDO UN ERROR AL ABRIR EL ARCHIVO");getch();

} else {

clrscr();

printf("INTRODUZCA EL TITULO DEL LIBRO A ELIMINAR : "); //PEDIMOS EL NOMBRE DEL LIBRO A ELIMINAR.scanf("%s",&auxnombre); //NOS LEE EL NOMBRE AUXILIAR.

fscanf(salida, "%s", biblioteca.autor); //LECTURA ADELANTADA.while(!feof(salida)){

fscanf(salida,"%s %s %s %s %s", biblioteca.apellido, biblioteca.titulo, biblioteca.edicion, biblioteca.editorial, biblioteca.categoria); //NOS LEE LOS REGISTROS.fscanf(salida," %d %d %d\n", &biblioteca.estanteria, &biblioteca.pasillo, &biblioteca.nivel);b=strupr(auxnombre); if(strcmp(auxnombre,biblioteca.titulo)==0) //NOS CONDICIONA LAS VARIABLES. {

printf("\nSE HA ELIMINADO CORRECTAMENTE EL REGISTRO: "); //MENSAJE QUE MUESTRA SI FUE EXITOSA LA ELIMINACION DEL REGISTO.

printf("\n\n PRESIONE ENTER PARA REGRESAR AL MENU");

band=1; getch();

}

else{fprintf(tem," %s %s %s %s %s %s", biblioteca.autor, biblioteca.apellido, biblioteca.titulo, biblioteca.edicion, biblioteca.editorial, biblioteca.categoria);fprintf(tem," %d %d %d\n", biblioteca.estanteria, biblioteca.pasillo, biblioteca.nivel); } fscanf(salida, "%s", biblioteca.autor);

}

if (band!=1){

clrscr(); printf("\nNO ES POSIBLE ENCONTRAR EL REGISTRO QUE DESEA ELIMINAR"); //MENSAJE QUE MUESTRA SI EL NOMBRE INGRESADO NO EXISTE. printf("\n\n PRESIONE ENTER PARA REGRESAR AL MENU"); getch();

}fclose(tem); // NOS CIERRA EL ARCHIVO TEMPORAL.fclose(salida); //NOS CIERRA EL ARCHIVO SALIDA.

remove("libreria.txt"); //NOS REMUEVE LOS DATOS DEL ARCHIVO PRINCIPAL.rename("temporal.txt","libreria.txt"); //NOS RENOMBRE LOS DATOS DEL ARCHIVO TEMPORAL Y LOS GUARDA NUEVAMENTE EN EL ARHIVO PIRNCIPAL.

}} //AQUÍ FINALIZA LA OPCION ELIMINAR DATOS.

//AQUÍ TERMINA EL CODIGO DEL PROGRAMA.