Código fuente C del sistema de gestión de asientos de biblioteca
#include lt;iostreamgt;
#include lt;iomanipgt
#include lt;stringgt;
#include lt.fstreamgt; //clase de flujo de archivos de entrada/salida
utilizando el espacio de nombres
const int Maxr=100 //lectores máximos
const int Maxb=100; // libros máximos
const int Maxbor
// Clase de lector, la realización de la descripción de la información del lector
clase Lector
{
p>p>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;}
int gettag() {return tag;} //obtener nombre < / p>
int gettag() {etiqueta de retorno;} //obtener etiqueta de eliminación
borbook[i]=0
return 1; }
}
}
}
devuelve 0; void disp()//leer la información del lector
{
cout lt;lt; setw(5) lt; no lt;lt; ; namelt; lt; "Número de libro prestado: [";
for(int i=0; ilt; Maxbor; i)
if(borbook[i]! =0)
cout lt;lt; borbook[i] lt;lt; "|";
cout lt;lt; "]"lt;lt;endl; p>
cout lt;lt; p>
}
};
Biblioteca de clases de lector, utilizada para crear información personal de los lectores
class RDatabase
{
privado:
int top; //Puntero de registro del lector
Lector leído[Maxr]; record
public:
RDatabase() //constructor que lleva el archivo lector.txt a r
ead[]
{
Lector s;
top=-1;
fstream file("reader.txt",ios ::in);//Abrir un archivo de entrada
mientras (1)
{
file.read((char *)amp;s, sizeof (s));
si (!archivo)romper
arriba
leer[arriba]=s;
file.close(); //cerrar lector.txt
}
void clear()//Eliminar toda la información del lector
{
top=-1;
}
int addreader(int n, char *na)//Para agregar un lector, primero debes saber ¿Existe
{
Lector *p=query(n
if (p==NULL)
{
arriba;
leer[arriba].addreader(n, na
return 1; p>return 0...
Return 0
}
Lector *query(int lectorid)//buscar por número
{
for (int i=0; ilt; =top; i )
if (read[i].getno()==readerid amp; amp;
leer[i].gettag()==0)
{
devolver leer[i]; >
return NULL;
}
void disp() //Información de salida sobre todos los lectores
{
for ( int i=0; ilt; = arriba; i )
read[i].disp();
}
void lector de datos(); mantenimiento de la base de datos del lector
~RDatabase() //destructor que lleva la lectura[] al archivo lector.txt
{
fstream file("reader.txt ",ios::out);
for (int i=0; ilt; =top; i)
if (leer[i].gettag()= =0)
file.write((char *)&read[i], sizeof(read[i]));
file.close()
}
};
void RDatabase::readerdata()
{
elección de caracteres
<; p>char nombre[20];int lectorid;
Lector *r;
¡elección! ='0')
{
cout lt;
cambiar (elección)
{
case '1':
cout lt; "Ingrese el número de lector: ";
cin gt; lt; "Ingrese el nombre del lector:";
cin gt;gt;
addreader (readerid, rname); >
break;
p>
case '2':
cout lt; "Ingrese el número de lector: "; gt; 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;lt; :";
cin gt ;gt; rname;
r-gt; setname(rname);
break;
caso '3':
cout lt; lt; "Ingresar ID de lector:";
cin gt;
r=query(id de lector);
if (r== NULL)
{
cout lt; "El lector no existe" lt;
romper;
}
r-gt; delbook();
romper
caso '4':
cout lt; " Leer id de lector: ";
cin gt;
r=query(id de lector); p>if (r==NULL)
{
cout lt; "Este lector no existe" lt;
}
r-gt; disp();
romper
caso '5':
disp();
romper;
caso '6':
borrar(); >
predeterminado: coutlt;lt; "Error de entrada, vuelva a ingresar: ";break; >
}
// La clase Libro implementa funciones como descripción del libro, número de libro, título del libro, pago y registro.
libro de clase
{
privado:
int tag // Eliminar etiqueta 1: Eliminado 0: Recuperado
int no; //número de libro
char name[20]; //nombre del libro
int onshelf; //si volver a colocar en el estante 1: volver a colocar en el estante 2 :prestado
público:
Libro(){}
char * getname(){ return nombre }/get 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[])
{
strcpy(nombre, na);
}
void delbook(){ tag=1;}//Eliminar libro p>
void addbook(int n, char *na)//Agregar libro
{
{
tag= 0;
no=n;
stracpy(nombre,na
onshelf=1;
int lendbook()/ / Préstamo de libros
{
if (onshelf==1)
{
en el estante =0;
retorno 1
}
retorno 0; () //devolver libro
{
onshelf=1
}
void disp()//devolver libro ; p>
{
onshelf=1;
}
void disp()//libro de salida
{
cout lt;lt; setw(6) lt;lt; no lt;lt; setw(18) lt;lt; nombre lt;lt; =1 ? "en el estante": "prestado")lt;lt;endl;
}
}.
}; // La clase de base de datos de libros implementa funciones como mantenimiento, búsqueda y eliminación de libros.
clase BDatabase
{
p>private:
int top // Puntero de registro del libro
int top.
Libro libro[Maxb]; // Registro de libro
public:
BDatabase()// Constructor para leer libro.txt en libro[ ]
{
Libro b;
top=-1;
archivo fstream("libro.txt", ios:: en);
mientras (1)
{
archivo.read((char *)&b, tamaño de(b)); p>if (!archivo) romper;
arriba
libro[top]=b
}
archivo .close ();
}
void clear()//eliminar todo
{
top=-1;
p>
}
int addbook(int n, char *na)//Agregar libro
{
Libro *p=query (n)
if (NULL==p)
{
arriba
libro[arriba].addbook(n) , na) ;
return 1
}
return 0;
}
Libro *consulta; (int bookid )//buscar libro
{
for (int i=0;ilt;=top;i)
if ( libro[i] .getno( )==bookid amp;book[i].gettag()==0)
{
return amp;book[i]; > }
return NULL;
}
void bookdata(); //mantenimiento de la biblioteca de libros
void disp() p >
{
for (int i=0; ilt; =top; i)
if (libro[i].gettag()==0) p >
book[i].disp();
}
~BDatabase()//destructor para escribir libro[] en el archivo book.txt
{
fstream file("book.txt", ios::out
for (int i=0; ilt;=top; i)
if (libro[i].gettag()==0)
file.write((char *)&libro[i], tamaño de(libro[i])); > p>
archivo.close();
}
};
void B
Base de datos::bookdata()
{
char elección;
char bname[40]
int bookid; >
Reservar *b;
mientras (choice!='0 \t5 Mostrar \n\t6 Todo Eliminar \n\t0 Salir"lt;lt;endl;
cin gt; elección;
cambiar (elección)
{
caso '1':
cout lt; "Ingrese el número del libro: "lt; lt; endl;
cin gt;
cout lt;
cin gt; bnombre;
addbook(bookid, bnombre);
caso '2':
p>
cout lt; "Ingrese el número del libro: "lt; endl;
cin gt; =query(bookid);
if (b==NULL)
{
cout lt; "El libro no existe" lt; ; endl;
break;
}
}
cout lt; "Ingrese un nuevo título de libro:" lt; lt; endl;
cin gt; bnombre;
b-gt; caso '3':
cout lt; lt; "Leer número de libro: "lt;
cin gt; b=query(bookid);
if (b==NULL)
{
cout lt; "El libro no existe" lt; lt; endl;
romper
}
b-gt; p> case '4':
cout lt;lt; "Leer número de libro:" lt;lt;
cin gt;gt; p>b=query(bookid);
if (b==NULL)
{
cout lt; lt; lt; endl;
romper;
}
.
disp();
romper;
caso '5':
disp();
romper
caso '6':
clear();
romper;
p>
romper;
predeterminado: coutlt;lt; por favor ingrese contenido nuevo:";
}
cin gt;gt ; elección;
switch (ch
oice)
{
caso '1':
cout lt; "Préstamo ReaderID: "; gt; id de lector;
cout lt;lt; "número de libro: ";
cin gt;gt; ); //buscar por número
if (NULL==r)
{
cout lt ;" El lector no existe y no puede pedir prestado; libros "lt;lt; endl;
break;
}
b=ReaderDB.
b=BookDB.query(bookid ) ;
if (b==NULL)
{
cout lt; "Este libro no existe y no se puede tomar prestado" lt; ; endl;
romper
}
if (b-gt; libro de préstamo()==0)
{ p>
cout lt;lt; "Este libro ha sido prestado y no puede ser prestado"lt;lt; endl;
cout lt;lt; go "lt;lt; endl;
break;
}
r-gt;borrowbook(b-gt;getno());
break;
case '2':
cout lt; "Devolviendo un libro \n lectorid:"
cin gt;
cout lt;lt; "bookid:";
cin gt;gt;bookid;
r=ReaderDB.query(readerid); >
if (r==NULL)
{
cout lt; "El lector no existe y el libro no se puede devolver" lt;
romper;
}
b=ReaderDB.
b=BookDB.query(bookid); >if (b ==NULL)
{
cout lt; "El libro no existe y no se puede devolver" lt; p>romper;
p>}
b=BookDB.query(bookid).
b-gt(); p>r-gt; retbook( b-gt; getno());
descanso
caso '3':
BookDB.bookdata() ;
ruptura;
caso '4':
ReaderDB.readerdata(); >predeterminado: coutlt;lt; " Error de entrada, ingrese contenido nuevo: ";