Sistema de gestión de bibliotecas de diseño de cursos de lenguaje C
Programación de lenguajes avanzados (2) Diseño curricular
Un manual de instrucciones de programación
Diseño de temas Biblioteca Gestión de préstamos
Descripción del problema Libros La biblioteca es adecuado para describir con C funciones orientadas a objetos. El sistema de gestión de la biblioteca se divide en cuatro partes: préstamo de libros, devolución de libros, gestión de libros y servicios al lector. Diseñe una clase de lector, Lector, para registrar la información básica de cada lector; la clase de base de datos de lector, Rdatabase, para registrar toda la información del lector; la clase de libro, Libro, para registrar la información básica de cada libro y la clase de biblioteca de libros; Bdatabase, para registrar toda la información del libro.
Requisitos básicos
1 En la clase de biblioteca de lectura RDatabase, en su constructor, lea todo el contenido del archivo read.txt en el registro de lectura rede[]. Después del procesamiento, todos los registros no eliminados en read[] se escriben en read.txt en el destructor.
2 En la clase de biblioteca de libros BDatabase, en su constructor, todos los archivos book.txt se leen en el libro de registro de libros[]. Una vez completado el procesamiento, todos los registros no eliminados en el libro [] se escriben en book.txt en el destructor.
3 Utilice el constructor para inicializar los datos del lector y del libro y completar la asignación de memoria. Antes de que finalice el programa, el destructor completa el espacio de memoria del montón solicitado.
4 Escriba la función principal y realice una prueba exhaustiva de la clase de matriz que escribió. Se requiere que la interfaz de usuario esté basada en menús. En la prueba, los datos del lector y del libro deben leerse desde archivos de disco a través de flujos de E/S y mostrarse en la pantalla al mismo tiempo. Los datos obtenidos se escriben en el archivo del disco, se guardan a través del flujo de E/S y se muestran en la pantalla al mismo tiempo.
5 Debe haber suficientes comentarios en el programa fuente y se deben incluir diagramas de flujo detallados y materiales escritos en el informe.
Diseño de clases
El programa contiene cuatro clases, de la siguiente manera:
1.Clase Lector, que tiene funciones básicas de gestión de lectores y tiene los siguientes privados datos:
int tag; //Eliminar etiqueta 1: eliminado; 0: no eliminado
int no; //Número de lector
nombre de carácter[10] ;//Nombre del lector
int borbook[Maxbor];//Libro prestado
2. Clase de base de datos del lector Rdatabase, con los siguientes datos privados:
int top; //Puntero de registro del lector
Lector leído[Maxr]; //Registro del lector
3. La clase de biblioteca de libros Libro tiene las funciones básicas de un libro y los siguientes datos privados. :
int tag; //Eliminar etiqueta 1: eliminado; 0: no eliminado
int no; //Número de libro
char name[20]; //Título del libro
int onshelf; //Si está en el estante 1 En el estante 0 Prestado
4. La clase de biblioteca de libros BDatabase tiene los siguientes datos privados:
p>
int top; //Puntero de registro de libro
Libro de libro[Maxb]; //Registro de libro
Instrucciones de diseño para funciones especiales
Constructor
1. El constructor Reader() en la clase Reader es una función de inicialización;
2. En la clase de biblioteca del lector RDatabase, su constructor Rdatabase() lee todo en la lectura. txt en el lector Grabar en rede[].
3. El constructor Book() en la clase Book es una función de inicialización.
4. En la clase de biblioteca de libros BDatabase, en su constructor, todo el contenido del libro. El archivo txt se lee en El registro del libro está en el libro [].
Constructor de copia
El constructor de copia en la clase Lector copia el nombre del lector, el valor de retorno de getname(), a setname(), y el constructor de copia en la clase Libro copia El valor de retorno de la función getname(), el nombre del libro, se copia en la función de configuración del nombre del libro setname().
Destructor
1. En la clase de biblioteca de lectura RDatabase, su destructor ~Rdatabase() escribe todos los registros no eliminados en read[] en read.txt
2. En la clase de biblioteca de libros BDatabase, su destructor ~Bdatabase() escribe todos los registros no eliminados en book[] en book.txt.
Sobrecarga del operador
Sobrecargado "=", al comparar el número de lector y el número de libro, operadores de bits sobrecargados "〈〈" y "〉〉", etc.
Diagrama de flujo del algoritmo de función principal
Cómo utilizar el programa
1. Ingrese a la página de operación y siga las instrucciones
2. Primero, agregue información del libro y del lector, y luego podrá operar con la información existente;
3 Durante la operación, puede agregar, cambiar y eliminar libros o información del lector en cualquier momento;
4. Cuando elija salir, borre la pantalla.
II Informe de depuración del programa
Errores de sintaxis y su eliminación
1. Al escribir el programa, hubo muchos errores de ortografía. Por ejemplo, Readdata() se escribió erróneamente como Readdate() en muchos lugares; el punto y coma final se ingresó en diferentes estados del método de entrada. Estos pequeños errores fueron difíciles de encontrar al principio. con experiencia, es fácil.
2. Se produjo un error al crear un nuevo constructor. Al sobrecargar el constructor, preste atención a los permisos de acceso de la función para que no se produzcan errores.
Errores de algoritmo y su eliminación
1. En la función de operación de préstamo de libros en la clase de lector, cuando se utiliza una declaración de bucle para determinar el número de libros prestados por el lector, para ( int i=0; ilt; Maxbor; i ) se escribe erróneamente como for (int i=1; ilt; Maxbor; i ), provocando un error en el bucle.
2. El puntero se usa incorrectamente y los punteros byr se confunden, lo que genera un informe de error de compilación "error C2660: 'retbook': la función no toma 1 parámetro".
Resultados de las pruebas de tres programas
Reflexiones y experiencias
Además del aula, el diseño del curso es el lugar donde se aprende y se prueba más. Durante este período de diseño de cursos, siempre sentí que no entendía mucho y que tenía demasiado que aprender. Después del diseño de este curso, tengo una comprensión más profunda del lenguaje C y mi capacidad operativa ha mejorado. Para obtener la satisfacción de ejecutar el código que has escrito, necesitas paciencia, perseverancia y mucha fuerza física. Solo después de múltiples ediciones, múltiples compilaciones y múltiples ejecuciones podemos escribir un mejor programa. A veces se necesitan múltiples correcciones para lograr los resultados de ejecución deseados.
Para aprender a programar, debe pensar más, practicar, practicar y practicar nuevamente para mejorar sus habilidades de programación a un nivel superior. ¡Además, debe pedir consejos a más expertos!
Código fuente
//*********************
//Gestión de préstamos de bibliotecas
//Clase:
//ID de estudiante:
//Nombre:
//***** ** *************
#includelt;iostream.hgt;
#includelt;iomanip.hgt;
#includelt ; string.hgt;
#includelt; fstream.hgt;
const int Maxr=1000; //La mayoría de los lectores
const int Maxb= 10000; /La mayor cantidad de libros
const int Maxbor=8; //Cada lector puede pedir prestados hasta 8 libros
class Reader //Clase de lector
{ p>
int tag; //Eliminar etiqueta 1 eliminada; 0 no eliminada
int no; //Número de lector
char name[10];/ /Nombre del lector
int borbook[Maxbor]; //Libro prestado
public:
Reader(){}//Constructor
char *getname (){return name;}//Obtener el nombre del lector
int gettag(){return tag;}//Obtener la etiqueta de eliminación
int getno() {return no; }//Obtener el número del lector
void setname(char na[])//Establecer el nombre del lector
{
strcpy(name, na );
}
void delbook(){tag=1;}//Establecer la etiqueta de eliminación
void addreader(int n, char *na)/ / Añadir lectores
{
tag=0;
no=n;
strcpy(name, na);
for(int i=0; ilt; Maxbor; i )
borbook[i]=0;
}
void libro de préstamos(int bookid )//Operación de endeudamiento
{
for(int i=0; ilt; Maxbor; i)
{
if( borbook[i]==0)
{
borbook[i]=bookid;
}
} p>
}
int retbook(int bookid)//Operación de devolución de libro
{
for(int i=0; ilt; Maxbor; i )
{
if (borbook[i]==bookid)
{
borbook[i]=0;
devuelve 1;
}
}
devuelve 0;
}
visualización nula ()//Información del lector de salida
{
coutlt;lt;setw(5)l
t;lt;nolt;lt;setw(10)lt;lt;namelt;lt;"Número de préstamo:";
for(int i=0;i,Maxbor;i)
if(borbook[i]!=0)
coutlt;lt;borbook[i]lt;lt;endl;
}
}
clase RDatabase//Clase de biblioteca de lector
{
int top //Puntero de registro de lector
Lectura de lector[Maxr] ;//Registro del lector
public:
RDatabase()//Constructor, lea el archivo lector.txt en read[]
{ p>
Lector s;
top=-1;
fstream file("reader.txt", ios::in);
mientras (1)
{
file.read((char*)amp;s,sizeof(s));
if(!file)break
arriba;
leer[arriba]=s;
}
archivo.close(); p>
void clear()//Eliminar toda la información del lector
{
top=-1;
}
int addreader(int n, char *na)//Añadir lector, comprobar si ya existe
{
Lector *p=query(n);
if(p==NULL)
{
arriba;
leer[arriba].addreader(n, na);
return 1;
}
return 0;
}
Reader*query(int lectorid)//Presione Buscar número
{
for(int i=0;ilt;=top;i)
if(read[i].getno()== lectorid&read [i].gettag==0)
return &read[i];
return NULL;
}
void disp( )//Eliminar toda la información del lector
{
for(int i=0; ilt; =top; i)
read[i].disp( );
}
void Readerdata(); //Mantenimiento de la biblioteca del lector
~RDatabase()//Destructor, escribe read[] en el lector. archivo txt
{
archivo fstream("reader.txt", ios::out);
for (int i=0;ilt;=top ;i)
if(leer[i].gettag()==0)
file.write((char*)amp ; leer[i], tamaño de(leer[ i]));
archivo.close();
}
}
void RDatabas
e::readerdata()
{
int elección=1;
char rname[20];
int lectorid;
Lector*r;
while(choice!=0)
{
coutlt;lt;"Servicio de lector 1 agregado 2 Actualización 3 eliminar 4 buscar 5 mostrar 6 eliminar todo 0 salir "lt; lt; endl;
cingt; gt; elección;
switch(choice)
{
caso 1:
coutlt;lt;"Ingrese el ID del lector:";
cingt;gt;readerid;
coutlt;lt;"Leer el nombre del lector:";
cingt;gt;rname;
addreader(readerid, rname);
break; p>
caso 2:
coutlt;lt;"Ingrese el ID del lector:";
cingt;gt;readerid;
r= query(readerid);
if(r==NULL)
{
coutlt;lt;"El lector no existe"lt;lt;endl;
break;
}
coutlt;lt;"Por favor, introduzca el nombre del nuevo lector:";
cingt;gt ;rname;
r-gt;setname(rname);
break;
caso 3:
coutlt;lt;" Introduzca el número de lector: ";
cingt; gt; lectorid;
r=query(readerid);
if(r==NULL)
{
coutlt;lt;"El lector no existe"lt;lt;endl;
break;
}
r- gt;delbook();
break;
caso 4:
coutlt;lt;"Por favor, introduzca el número de lector:" ;
cingt; gt; id de lector;
r=query(id de lector);
if(r==NULL)
{
coutlt;lt;"El número de lector no existe"lt;lt;endl;
break;
}
case 5:
disp();
romper;
caso 6:
borrar(); descanso;
}
}
}
clase Libro//libro clase
{
int tag;/ /Marca de eliminación 1: eliminado; 0: no eliminado
int no; //Número de libro
nombre de carácter[20];
int onshelf; //Se ha tomado prestado si está en el estante 1 o en el estante 0
public:
Libro(){}
char*getname(){return name ;}//Obtener el nombre del lector
int getno(){re
turn no;}//Obtener el número del libro
int gettag(){return tag;}//Obtener la etiqueta de eliminación
void setname(char na[])//Set el nombre del libro
{
strcpy(name, na);
}
void delbook(){tag=1;} //Eliminar libro
void addbook(int n, char*na)//Agregar libro
{
tag=0;
no= n;
strcpy(nombre, na);
onshelf=1;
}
int libro de préstamo()/ /Operación Pedir prestado un libro
{
if(onshelf==1)
{
onshelf=0;
return 1;
}
return 0;
}
void retbook()//Operación de libro de devoluciones p>
{
onshelf=1;
}
void disp()//libros de salida
{ p>
coutlt;lt;setw(6)lt;lt;nolt;lt;setw(18)lt;lt;namelt;lt;setw(10)lt;lt;(onshelf==1?"En el estante ":"Ya estoy pidiendo prestado")lt;lt;endl;
}
};
clase BDatabase//Clase de biblioteca de libros
{ p>
int top; //Puntero de registro de libro
Libro de libro[Maxb] //Registro de libro
público:
BDatabase()/ /Constructor, lea book.txt en libro[]
{
Libro b;
top=-1;
fstream file("book.txt",ios::in);
mientras(1)
{
archivo.read((char* ) amp; b, tamaño de (b));
if(!archivo)
arriba
libro[arriba]=b; p >
}
file.close();
}
void clear()//Eliminar todo
{
top=-1;
}
int addbook(int n, char*na)//Agregar libro
{< / p>
Libro*p=query(n);
if(p==NULL)
{
arriba;
book[top].addbook(n, na);
return 1;
}
coutlt;lt;"¡Agregado exitosamente! "lt;lt;endl;
}
Libro*query(int bookid)//Buscar libros
{
for( int i=0;ilt;=top;i)
if(libro[i].getno()==bookidamp;amp;libro[i].ge
ttag()==0)
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, escribe el archivo book[] book.txt
{
archivo fstream("book.txt", ios::out);
for (int i=0; ilt ;=top;i )
if(libro[i].gettag()==0)
file.write((char*)amp;libro[i],sizeof (libro[i] ));
file.close();
}
};
void BDatabase::bookdata ()
{
int elección;
char bname[40];
int bookid;
Libro *b;
while(choice!=0)
{
coutlt;lt;"Gestión de libros 1 Agregar 2 Actualizar esto 3 Eliminar 4 Buscar 5 Mostrar 6 Eliminar todo 0 Salir"lt;lt;endl;
cingt;gt;choice;
cambiar(opción)
{
caso 1:
coutlt;lt;"Ingrese el número del libro: ";
cingt;gt;bookid;
coutlt;lt;"Ingrese el título del libro: ";
cingt; gt; bname;
addbook(bookid, bname);
break;
caso 2:
coutlt;lt;"Ingrese el número de libro:";
cingt;gt;bookid;
b=query(bookid);
if(b ==NULL)
{
coutlt;lt;"Este libro no existe"lt;lt;endl;
break ;
}
coutlt;lt;"Ingrese un nuevo título de libro:";
cingt;gt;bname;
b- gt;setname(bname );
coutlt;lt;"¡Cambio de nombre exitoso! "lt;lt;endl;
break;
caso 3:
coutlt;lt;"Ingrese el número de libro: ";
cingt; gt; id de libro;
b=query(id de libro);
if(b==NULL)
{
coutlt;lt;"¡Este libro no existe! "lt;lt;endl;
romper;
}
b-gt;delbook();
romper; p>
p>
caso 4:
coutlt;lt;"Por favor, introduzca el número del libro:";
cing
t; gt; id de libro;
b=query(id de libro);
if(b==NULL)
{
coutlt ;lt;"¡El libro no existe!"lt;lt;endl;
break;
}
b-gt;disp();
p>
romper;
caso 5:
disp();
romper;
caso 6:
clear();
romper
}
}
}
void main ()
{
int elección=1, bookid, lectorid;
RDatabase ReaderDB;
Lector *r;
BBase de datos BookDB;
Libro *b;
mientras(elección!=0)
{
coutlt;lt ;" 1 ¿Pedir libros? "lt; endl;
coutlt;" 2 ¿Devolver libros? "lt; ; lt;" ¿Mantener 3 libros? "lt;lt;endl;
coutlt;lt;" ¿Mantener 4 lectores? "lt;lt;endl;
coutlt;lt;" 0 ¿Salir? "lt; lt; endl;
cingt; gt; elección;
cambiar(elección)
{
caso 1:
coutlt;lt;"Para pedir prestado un libro, ingrese el ID del lector:";
cingt;gt;readerid;
coutlt;lt ;"Número de libro:";
p>cingt; bookid;
r=ReaderDB.query(readerid);
if(r== NULL)
{
coutlt;lt;"Jaja, ¡pedí prestado el libro con éxito!";
break;
} p>
b=BookDB.query(bookid );
if(b==NULL)
{
coutlt;lt;"Este libro no existe!"lt;lt;endl;
coutlt;lt;"¡Este libro no existe!"lt;lt;endl;
p>
break;
}
if(b-gt;borrowbook()==0)
{
coutlt;lt;"El libro ha sido prestado"lt;lt;endl;
break;
}
r-gt;borrowbook(b-gt; getno());
break;
coutlt;lt;"¡El préstamo del libro fue exitoso! "lt;lt;endl;
caso 2:
coutlt;lt;"Devuelva el libro, por favor introduzca el número de lector: ";
cingt; gt; lectorid;
coutlt;lt;"Ingrese el número del libro;";
cingt;gt;bookid;
r=ReaderDB.query( lectorid);
if(r==NULL)
{
coutlt;lt;"¡Este lector no existe! "lt;l
t; endl;
romper;
}
b-gt;
r-gt; -gt;getno());
break;
coutlt;lt;"¡Devuelva el libro correctamente!"lt;lt;endl;
caso 3 :
BookDB.bookdata();
romper;
caso 4:
ReaderDB.readerdata();
descanso;
}
}
}
Resultados de salida
1 Pedir prestado libros p >
2 Devolver libros
3 Gestión de biblioteca
4 Servicios de lectura
0 Salir
3
Gestión de biblioteca 1 Agregar 2 Actualizar esto 3 Eliminar 4 Buscar 5 Mostrar 6 Eliminar todo 0 Salir
1
Ingrese el número del libro: 1111
Ingrese el Nombre del libro: Wulin Gaiden
¡Añadido con éxito!
Administración de biblioteca 1 Agregar 2 Actualizar esto 3 Eliminar 4 Buscar 5 Mostrar 6 Eliminar todo 0 Salir
1
Ingrese el número de libro: 2222
Ingrese el título del libro: Sleepless Tonight
¡Agregado exitosamente!
Administración de biblioteca 1 Agregar 2 Actualizar 3 Eliminar 4 Buscar 5 Mostrar 6 Eliminar todo 0 Salir
1 Pedir prestado libros
2 Devolver libros
3 Gestión de Biblioteca
4 Servicio de Lector
0 Salir
4
Servicio de Lector 1 Añadido 2 Actualizado 3 Eliminar 4 Buscar 5 Mostrar 6 Eliminar todo 0 Salir
1
Ingrese el número de lector: 001
Lea el nombre del lector: Zhou Qiang
Servicio de lector 1 Agregar 2 Actualizar 3 Eliminar 4 Buscar 5 Mostrar 6 Eliminar todo 0 Salir
1 Pedir prestado libros
2 Devolver libros
3 Gestión de libros
4 Servicio de Lector
0 Salir
1
Para pedir prestado libros, ingrese el número de lector: 001
Número de libros: 1111
¡Jaja, el préstamo del libro fue un éxito! 1 Pedir prestado libros
2 Devolver libros
3 Gestión de libros
4 Servicios de lectura
0 Salir
2
Para devolver el libro, ingrese el número de lector: 001
Ingrese el número del libro 1111
¡Devuelva el libro con éxito!
1 Préstamo de libros
2 Devolución de libros
3 Gestión de libros
4 Servicios de lectura
0 Salir
3
Gestión de biblioteca 1 Agregar 2 Actualizar esto 3 Eliminar 4 Buscar 5 Mostrar 6 Eliminar todo 0 Salir
2
Ingresar número de libros : 2222
Ingrese el nuevo título del libro: Las obras completas de Jin Yong
¡Cambio de nombre exitoso!
Presiona cualquier tecla para continuar
¿Está bien?