[ Foro de C++ ]
Hola, agradecería mucho su ayuda para resolver este problema que por más que intente no se porque pasa. Verán, en la parte donde esta el switch hago uso de un fichero llamado Libros.txt el case 1 es para guardar los datos de un libro porque la aplicación es para una biblioteca, entonces el usuario guarda los datos y en la variable libro guardo el nombre de libro como cadena de caracteres y el autor igual, el case 2 es para mostrar los libros que estan disponibles en la biblioteca previamente registrados, el case 3 es donde tengo el problema porque ahi lo que quiero hacer es eliminar registros del fichero, pues si una persona ingresa el codigo del libro que quiere retirar y coincide con alguno de los que fueron guardados ya no aparezca en el fichero porque la idea es que se realizo el prestamo del libro y ya no debe aparecer en el inventario de la biblioteca, cuando hago eso y quiero mostrar lo que pasa cuando el codigo introducido por el usuario coincide con el codigo de algun libro en el inventario es mostrarle el libro que prestó pero no se porque no me sale bien porque una parte de la informacion queda en el fichero y la otra mitad se muestra pero muy desordenada, por favor si pueden ayudarme.
PD: soy nuevo en esto y el programa no lo he terminado
#include<iostream>
#include<string.h>
#include<fstream>
#include<stdlib.h>
using namespace std;
int main(){
int opcion,opc1,opc2,ncedula,nbcedula,nbcodigo,ncodigo;
char nombre[20],apellido[20], cedula[20], telefono[20],bcedula[20];
char autor[50],anio[20],codigo[20],bcodigo[20], libro[50];
ofstream Guardar; //Declaramos una variable Guardar la cual guardara datos mas adelante
ifstream Leer; //Declaramos una variable en este caso de lectura para leer mas adelante
ofstream Libros; //Otra variable para guardar que trabajar especificamente con los libros
ifstream Libros_lectura; //Esta trabajo junto con la de libros para leer mas adelante
ofstream Temp;
//Guardar.open("Ficheros.txt",ios::app); //Aqui estamos abriendo
//Iniciando proceso del programa
do{
cout<<"\t\n BIENVENIDO A LA BIBLIOTECA VIRTUAL"<<endl;
cout<<"\n Somos una biblioteca publica dispuesta a ofrecerte diferentes servicios"<<endl;
cout<<"\nQuieres ingresar a nuestro sistema para ver nuestro inventario de libros?"<<endl;
cout<<"Si, ingresa 1"<<endl;
cout<<"No, ingresa 2"<<endl;
cout<<"Si ya estas registrado, ingresa 3"<<endl;
cin>>opc1;
//Entrando en las diferentes opciones
//Opcion 1. Registro de usuario
if(opc1==1){
Guardar.open("Ficheros.txt",ios::app); //Aqui estamos abriendo el fichero para guardar datos en el
cout<<"Por favor, primero formaliza tu registro"<<endl;
cout<<"1. Ingresa tu nombre"<<endl;
cin>>nombre;
cout<<"2. Ingresa tu apellido"<<endl;
cin>>apellido;
cout<<"3. Ingresa tu numero de cedula"<<endl;
cin>>cedula;
ncedula=atoi(cedula);
cout<<"4. Ingresa tu numero de telefono"<<endl;
cin>>telefono;
cout<<"\nListo! el registro se ha completado, muchas gracias por preferirnos"<<endl;
Guardar<<nombre<<" "<<apellido<<" "<<cedula<<" "<<telefono<<endl; //Aqui estamos guardando las variables en el fichero
}
//Entrando en opcion 2. Caso contrario
else if(opc1==2){
cout<<"\nVuelve cuando quieras!"<<endl;
}
//Entrando en opcion 3. Usuario ya registrado
else if(opc1==3){
//En este caso usaremos la variable de lectura para leer lo que esta guardado en ese fichero
Leer.open("Ficheros.txt"); //Abrimos el fichero pero con la variable Leer anteriormente establecido para lectura
Leer>>nombre;
bool encontrado=false;
cout<<"Ingrese su cedula para verificar, por favor: "<<endl;
cin>>bcedula;
nbcedula=atoi(bcedula);
while(!Leer.eof()){
Leer>>apellido>>ncedula>>telefono;
if(ncedula==nbcedula){
encontrado=true;
cout<<"Hola "<<nombre<<endl;
cout<<"Aqui esta tu informacion: "<<endl;
cout<<"Apellido: "<<apellido<<endl;
cout<<"Cedula: "<<ncedula<<endl;
cout<<"Telefono: "<<telefono<<endl;
cout<<endl;
}
/*cout<<"Nombre "<<nombre<<endl;
cout<<"Cedula "<<cedula<<endl;
cout<<"Apellido "<<apellido<<endl;
cout<<endl;*/
Leer>>nombre;
}
if(encontrado==false){
cout<<"Usted no esta registrado"<<endl;
cout<<"\n";
}
Leer.close();
}
else{
cout<<"El numero ingresado no corresponde a lo senialado, vuelve a intentarlo"<<endl;
cout<<"\n";
system("pause");
system("cls");
}
}while(opc1>3);
//Mostrando menu de opciones si se cumple la opcion 1 o 3
if(opc1==1 or opc1==3){
cout<<"\t\t\t\t ---------------------------------------";
cout<<"\n A continuacion tienes nuestro menu de opciones: "<<endl;
cout<<"\n1.REGISTRAR LIBRO"<<endl;
cout<<"\n";
cout<<"2.VER INVENTARIO DE LIBROS DISPONIBLE EN BIBLIOTECA"<<endl;
cout<<"\n";
cout<<"3.REALIZAR PRESTAMO DE LIBRO"<<endl;
cout<<"\n";
cout<<"4.VER ESTATUS DE PRESTAMO DE USUARIO"<<endl;
cout<<"\n";
cout<<"5.SALIR"<<endl;
cout<<"\n";
cout<<"ELIGE UNA OPCION: "<<endl;
cin>>opcion;
}
switch(opcion){
case 1: {
//Aqui vamos a registrar por lo tanto usaremos el fichero especifico para libros
Libros.open("Libros.txt",ios::app); //Abrimos el fichero con la variable libros puesta para guardar
//Libros_lectura.open("Libros.txt");
cout<<"Ingrese el codigo del libro: "<<endl;
cin>>codigo;
//ncodigo=atoi(codigo);
cout<<"Ingrese el nombre del libro: "<<endl;
cin.getline(libro,50,'\n');
cin.getline(libro,50,'\n');
cout<<"Ingrese el nombre del autor: "<<endl;
cin.getline(autor,50,'\n');
cout<<"Ingrese el anio de publicacion: "<<endl;
cin>>anio;
cout<<"\nListo, el registro se ha completado"<<endl;
//Aqui guardamos las variables en el fichero
Libros<<codigo<<" "<<libro<<" "<<autor<<" "<<anio<<endl;
}
break;
case 2: {
//En este case voy a leer el fichero donde estan registrados
//Libros_lectura.open("Libros.txt");
string texto; //Declaro una variable aqui para guardar todo lo que esta en el fichero y luego mostrarlo
cout<<"A continuacion, los libros disponibles en la biblioteca: "<<endl;
cout<<"\n";
Libros_lectura.open("Libros.txt"); //Abro el fichero en este caso para leer lo que hay dentro
while(!Libros_lectura.eof()){
getline(Libros_lectura,texto); //Intercambio lo que hay en le fichero y lo guardo en texto
cout<<texto; //Muestro lo que hay en el fichero que son los libros
cout<<"\n";
}
Libros_lectura.close(); //Ciertto el fichero
}
break;
case 3: {
ofstream Temp;
cout<<"Para realizar un prestamo debes ingresar el codigo de los libros anteriormente mostrados en el inventario"<<endl;
Libros_lectura.open("Libros.txt");
Temp.open("Temp.txt"); //Creamos otro fichero que nos permitira eliminar del resgistro los libros
Libros_lectura>>codigo;
bool encontrado2=false;
cout<<"\nIngresa el codigo del libro que solicitas: "<<endl;
cin>>bcodigo;
//nbcodigo=atoi(bcodigo);
while(!Libros_lectura.eof()){
Libros_lectura>>libro>>autor>>anio;
if(strcmp(codigo,bcodigo)){
encontrado2=true;
cout<<"Nombre: "<<libro<<endl;
cout<<"Puede realizar el retiro en nuestra sede fisica!"<<endl;
}
else{
Temp<<codigo<<" "<<libro<<" "<<autor<<" "<<anio<<endl;
}
Libros_lectura>>codigo;
}
if(encontrado2==false){
cout<<"Error en el nombre del libro"<<endl;
}
Libros_lectura.close();
Libros.close();
Temp.close();
remove("Libros.txt");
rename("Temp.txt","Libros.txt.");
}
break;
}
cout<<"\n";
system("pause");
return 0;
}
(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)