c sistema de gestión de libros
#include lt;iostreamgt;
#include lt;iomanipgt;
#include lt;stringgt;
#include lt; fstreamgt; //Clase de flujo de archivos de entrada/salida
usando el espacio de nombres std;
const int Maxr=100; //Lectores máximos
const int Maxb= 100; ; //La mayor cantidad de libros
const int Maxbor=5; //Cada lector puede pedir prestados hasta cinco libros
//Clase de lector, que describe la información del lector
lector de clases
{
privado:
int tag; //Eliminar etiqueta 1: eliminado 0: no eliminado
int no; //Número de lector
char name[10]; //Nombre de lector
int borbook[Maxbor]; //Libro prestado
public:
Reader() { }
char *getname() {return name;} //Obtener el nombre
int gettag() { return tag;} //Obtener la etiqueta de eliminación
int getno() {return no;} //Obtener el número de lector
void setname(char na[]) //Establecer el nombre< / p>
{
strcpy(name, na);
}
void delbook(){ tag=1}//Establecer etiqueta de eliminación; 1: Eliminado 0: No eliminado
void addreader(int n, char *na)//Agregar lector
{
tag=0 < /p; >
no=n;
strcpy(nombre, na);
for(int i=0; ilt; Maxbor; i )
borbook [i]=0;
}
void lendbook(int bookid)//Operación de préstamo
{
for (int i =0; ilt; Maxbor; i )
{
si (borbook[i]==0)
{
borbook [i]=bookid;
return;
}}}
int retbook(int bookid)//Devolver operación de libro
{
for(int i=0;ilt;Maxbor;i)
{
if(borbook[i]==bookid)
{
borbook[i]=0
devuelve 1;
}}
devuelve 0; >
}
void disp()//Leer información del lector
{
cout lt; setw(5) lt; setw(10) lt; lt; namelt; lt; "Número de préstamo: [";
for (int i=0; ilt; Maxbor; i )
if( borbook[ i]!=0)
cout lt;lt; borbook[i] lt;lt; "|";
cout lt;lt; "]"lt;lt ;endl ;
}
};
//Biblioteca de clases de lector para crear información personal de los lectores
clase RDatabase
p >{
privado:
int top; //Puntero de registro del lector
Lector leído[Maxr] //Registro del lector
public:
RDatabase() //Constructor, lee lector.txt en lectura[]
{
Lector s;
top=-1;
fstream file("reader.txt", ios::in //Abrir un archivo de entrada
while (1)
{
file.read((char *)amp; s, sizeof(s));
if (!file)break
arriba;
leer[top]=s
}
file.close(); //Cerrar lector.txt
}
void clear()//Eliminar toda la información del lector
{
top=-1;
int addreader(int n, char *na)//Al agregar un lector, primero verifique si existe
{
Reader *p=query(n); /p>
if (p==NULL)
{
arriba;
leer[arriba].addreader(n, na); /p>
devuelve 1;
}
devuelve 0;
}
Lector *query(int id de lector) / /Buscar por número
{
for (int i=0; ilt; =top; i)
if (read[i].getno() ==readerid amp;
read[i].gettag()==0)
{
return amp; >
}
return NULL;
}
void disp() // Muestra toda la información del lector
{ p>
para (int i=0; ilt; =t
op; i )
read[i].disp();
}
void Readerdata(); //Mantenimiento de la biblioteca del lector
~RDatabase() //Destructor, escribe read[] en el archivo lector.txt
{
fstream file("reader.txt", ios:: out);
for (int i=0; ilt; =top; i )
if (read[i].gettag()==0)
archivo .write((char *)amp; leer[i], tamaño de(leer[i]));
file.close()
}
};
void RDatabase::readerdata()
{
elección de caracteres;
nombre de caracteres[20] ; p>
int lectorid;
Lector *r;
while (choice!='0')
{
cout lt;lt;"\n\n\t\t\tMantenimiento del lector\n\n\n\t\t 1 Agregar\n\n\t\t 2 Cambiar\n\n\t \t 3 Eliminar\ n\n\t\t 4 Buscar\n\n\t\t 5 Mostrar\n\n\t\t 6 Eliminar todo\n\n\t\t 0 Salir"lt;lt; endl;
cin gt; elección;
cambiar (elección)
{
caso '1':
cout lt; lt; "Ingrese el ID del lector:";
cin gt; /p>
cin gt;
addreader (readerid, rname); /p>
break;
case '2':
p>
cout lt; "Ingrese el ID del lector:"; p> cin gt; id de lector;
r=query(id de lector);
if (r==NULL)
{
cout lt;lt; "El lector no existe"lt;lt;endl;
break;
}
cout lt; Ingrese un nuevo nombre:";
cin gt; gt; rname;
r -gt; setname(rname);
break;
caso '3':
cout lt;
" Introduzca el ID del lector: ";
cin gt; gt;
r=query(readerid); /p>
{
cout lt; lt; "Este lector no existe" lt;
break; / p>
r-gt; delbook();
break;
case '4':
cout lt; Número de lector: ";
cin gt; gt; lectorid;
r=query(readerid);
if (r==NULL)
{
cout lt; lt; "Este lector no existe" lt;
break; >
r-gt; disp();
romper;
caso '5':
disp(); > romper ;
caso '6':
clear();
romper
predeterminado: coutlt;lt;"Entrada; error, vuelva a ingresar: ";break;
}
}
}
//Clase de libro, para realizar el descripción de los libros, número de libro, título, préstamo, devolución, etc.
clase Libro
{
privado:
int tag ;/ /Eliminar marca 1: Eliminado 0: No eliminado
int no; //Número de libro
char name[20] //Título del libro
int onshelf; //Si volver a colocar en el estante 1: Volver a colocar en el estante 2: Prestado
public:
Book(){}
char *getname( ) { return name }//Obtener el nombre
int getno(){ return no }//Obtener el número del libro
int gettag(){ return tag }/ /Obtener la etiqueta de eliminación
void setname(char na[])//Establecer el nombre del libro
{
strcpy(name, na); p>
}
void delbook(){ tag=1;}//Eliminar libro
void addbook(int n, char *na)//Agregar libro p>
{
etiqueta=0
no=n;
strcpy(nombre, na
en el estante); =1;
}
int lendbook()//Operación de préstamo
{
if (onshelf==1) p>
{
onshelf=0;
>
devolver 1;
}
devolver 0;
}
void retbook()//Devolver operación de libro
{
onshelf=1;
}
void disp()//Libros de salida
{
cout lt; setw(6) lt; no lt; setw(18) lt; lt; (onshelf==1? "en el estante": "prestado") lt; endl; clase de biblioteca, que implementa el mantenimiento, búsqueda, eliminación, etc. de libros
clase BDatabase
{
privada:
int top; //Puntero de registro del libro
Libro libro[Maxb]; //Registro del libro
público:
BDatabase()//Constructor, convertir libro. txt Leer en libro[]
{
Libro b;
top=-1
archivo fstream("book.txt; ",ios::in);
while (1)
{
file.read((char *)&b,sizeof(b) );
if (!file) break
arriba
libro[top]=b
}
file.close();
}
void clear()//Eliminar todo
{
top= -1
}
int addbook(int n, char *na)//Agregar libro
{
Libro *p =consulta (n);
if (NULL==p)
{
arriba ;
libro[top].addbook (n , na);
devuelve 1
}
devuelve 0
}
Reservar *consulta; (int bookid)//Buscar libros
{
for (int i=0; ilt; =top; i)
if (book[ i ].getno()==bookid amp;book[i].gettag()==0)
{
return amp;book[i];
p >}
return NULL;
}
void bookdata(); //Mantenimiento de la biblioteca de libros
void disp ( )
{
for (int i=0; ilt; =top; i )
if (libro[i
].gettag()==0)
book[i].disp();
}
~BDatabase()//Destructor, Escribir libro [] al archivo book.txt
{
fstream file("book.txt", ios::out);
for ( int i= 0; ilt; = arriba; i )
if (libro[i].gettag()==0)
file.write((char *)amp; libro[i ], tamaño de (libro[i]));
archivo.close();
}
}; ::bookdata()
{
elección de caracteres;
nombre b de char[40];
int bookid;
Libro *b;
while (elección!='0')
{
cout lt "\n\ n\n \t\t\tMantenimiento de libros"lt;lt;endllt;lt;endl;
coutlt;lt;"\t\t1 Nuevo\n \t\t2 Cambiar\n\ t\t3 Eliminar\ n\t\t4 Buscar\n\t\t5 Mostrar\n\t\t6 Eliminar todo\n\t\t0 Salir"lt;lt;endl;
cin gt; gt; elección;
cambiar (elección)
{
case '1':
cout lt; "Ingrese el número de libro: "lt; lt; endl;
cin gt;
cout lt; "Ingrese el título del libro: "lt; cout lt; p>
cin gt; bnombre;
addbook(bookid, bnombre); ':
cout lt;lt; "Ingrese el número del libro: "lt;lt;endl;
cin gt;gt;
b= query(bookid);
if (b==NULL)
{
cout lt; "El libro no existe" lt; endl;
break;
}
cout lt; "Ingrese un nuevo título de libro: "lt; p> cin gt; bnombre;
b-gt; setnombre(bnombre);
caso '3':
corte
lt;lt;" Leer el número del libro: "lt;lt;endl;
cin gt;gt; bookid;
b=query(bookid);
if (b==NULL)
{
cout lt; "Este libro no existe" lt;
}
b-gt; delbook();
descanso
caso '4':
cout lt;lt; "Lee el número del libro: "lt;lt;endl;
cin gt;gt; bookid;
b=query(bookid); p >
if (b==NULL)
{
cout lt; "El libro no existe" lt; p> romper;
}
b-gt; disp();
romper
caso '5':
p>disp();
romper;
caso '6':
borrar();
p>predeterminado: coutlt;lt;"Error de entrada, vuelva a ingresar:";
}
}
}
//implementación de la función main(), guía de la interfaz principal del programa
void main()
{
char elección;
int bookid, lectorid
RDatabase ReaderDB
Reader *r
BDatabase BookDB; p> Libro *b;
while(choice!='0')
{
cout lt;lt;endllt;lt;endllt;lt; "\t\t\ t Sistema de gestión de biblioteca\n\n\n";
cout lt;lt;"\t\t\t1 Pedir prestado libros\n\n\t\t\t2 Volver libros\n\n\ t\t\t3 Mantenimiento de libros\n\n\t\t\t4 Mantenimiento de lectores\n\n\t\t\t0 Dejar "lt;lt;endl;
cin gt;gt; elección ;
cambiar (elección)
{
caso '1':
cout lt;lt; " Número de lector prestado: ";
cin gt;gt;readerid;
cout lt;lt;" Número de libro: ";
cin gt;gt ;bookid;
cout lt;lt;" p>
r=Leer
rDB.query(readerid); //Buscar por número
if (NULL==r)
{
cout lt;lt;" no existe Los lectores no pueden pedir prestados libros "lt; lt; endl;
break;
}
b=BookDB.query(bookid);
if (b==NULL)
{
cout lt; "El libro no existe y no se puede tomar prestado" lt; >
romper;
}
if (b-gt; libro de préstamo()==0)
{
cout lt; lt; "El libro ha sido prestado y no se puede tomar prestado"lt; endl;
break
}
r-gt; (b -gt; getno());
break;
case '2':
coutlt; : ";
cin gt; gt; lectorid;
cout lt; lt; "Número de libro: ";
cin gt; gt; bookid;
r=ReaderDB.query(readerid);
if (r==NULL)
{
cout lt;lt;" no existe Los lectores no pueden devolver libros" lt; lt; endl;
break;
}
b=BookDB.query(bookid);
if (b==NULL)
{
cout lt; "El libro no existe y no se puede devolver" lt; p>
romper;
}
b-gt; retbook();
r-gt(b-gt; getno(); );
ruptura;
caso '3':
BookDB.bookdata(); p> case '4':
ReaderDB.readerdata();
break;
default: coutlt; :";
}
}
}