c sistema de gestión de bibliotecas de diseño de cursos de idiomas
Especificaciones de programación
Diseño de gestión de préstamos de bibliotecas de temas especiales
La biblioteca de descripción de problemas es adecuada para usar funciones orientadas a objetos de C++ . describir. El sistema de gestión de la biblioteca se divide en cuatro partes: préstamo y devolución de libros, gestión de libros y servicios al lector. Diseñe una clase de lector para registrar la información básica de cada lector; la clase de biblioteca de lectores Rdatabase para registrar toda la información del lector; Libro para registrar la información básica de cada libro; la clase de biblioteca Bdatabase para registrar toda la información del libro.
Requisitos básicos
En la clase de biblioteca de 1 lector RDatabase, en su constructor, todo el contenido del archivo read.txt se lee en el registro del lector 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 BDatabase, en su constructor, todos los libros del archivo book.txt se leen en el libro de registro de libros []. Después del procesamiento, todos los registros no eliminados en book[] 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. El destructor completa el espacio de memoria dinámica solicitado antes de que finalice el programa.
4. Escriba la función principal para realizar una prueba exhaustiva de la clase de matriz. Requiere que la interfaz de usuario adopte el modo de menú. En la prueba, los datos del lector y del libro deben leerse desde el archivo del disco a través del flujo de E/S y mostrarse en la pantalla al mismo tiempo. Los datos obtenidos se escriben en el almacenamiento de archivos del disco a través de flujos de E/S y se muestran en la pantalla al mismo tiempo.
Debe haber suficientes comentarios en el programa fuente y en el informe se deben incluir diagramas de flujo detallados y materiales escritos.
Diseño de clases
El programa contiene las siguientes cuatro clases:
1. Clase de lector, que tiene las funciones básicas de gestión del lector y los siguientes datos privados. :
int label; //Eliminar marca 1: eliminado; 0: no eliminado
int número; //Número de lector
Nombre del personaje [10]; // Nombre del lector
int bor book[max bor]; //Libro prestado
2. La clase de biblioteca del lector Rdatabase contiene los siguientes datos privados:
int top //Puntero de registro del lector
Lector leído[Maxr]; //Registro del lector
3. Los libros de la biblioteca tienen las funciones básicas de los libros y los siguientes datos privados: p>.
int tag; //eliminar marca 1: eliminado; 0: no eliminado
int número; //número de libro
nombre de carácter[20]; /p>
int onshelf//¿Se ha tomado prestado 1 del estante 0?
4. La clase de biblioteca BDatabase tiene los siguientes datos privados:
int top//book record pointer
book book[Maxb];//book record
p>Instrucciones de diseño para funciones especiales
Constructor
El constructor Reader() en 1. Función de inicialización de la clase de lector;
2. En la clase de biblioteca de lector RDatabase, su constructor Rdatabase() lee todo el contenido del archivo read.txt en el registro de lector rede[].
3. La función de inicialización del constructor Book() en la clase Book
4. En la clase de biblioteca BDatabase, en su constructor, agregue todos los datos en el archivo book.txt. El contenido se lee en el libro de registro del libro [].
Constructor de copia
El constructor de copia en la clase Lector copia el valor de retorno de getname() a setname(), y el constructor de copia en la clase Libro copia el valor de retorno de getname () El valor se copia a 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 BDatabase, su destructor ~Bdatabase() escribe todos los registros no eliminados en book[] en book.txt
Sobrecarga del operador
Sobrecarga "=", al comparar el número de lectores. y número de libro, sobrecarga; operadores de bits de sobrecarga "" 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 la información existente;
3. Durante la operación, puede agregar, cambiar y eliminar información del libro o del lector en cualquier momento;
4. Borre la pantalla cuando elija salir.
2. Informe de depuración de programas informáticos
Errores gramaticales y su eliminación
1. Hay muchos errores ortográficos al escribir el programa. Por ejemplo, Readdata() se escribe incorrectamente como readdate() en muchos lugares. El punto y coma final se ingresa con un método de entrada diferente. Estos pequeños errores son difíciles de detectar al principio, pero con la experiencia se vuelve 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 el resultado no sea incorrecto.
Errores de algoritmo y su eliminación
1. En la función de operación de préstamo de libros de la clase lector, for (int I = 0; I & ltMaxborI++) se escribe erróneamente como for (int). I = 1 ;i<MaxborI++), provocando un error de bucle.
2. Uso incorrecto de punteros, los punteros B y R se confunden, lo que genera errores de compilación e informes de error del "Error C2660: 'Retbook': la función no toma 1 parámetro".
Resultados de las pruebas de tres programas
Realización y experiencia
Además del aula, el diseño del curso es el más estudiado y probado. Durante el proceso de diseño del curso, siempre siento que hay muchas cosas que no entiendo y que hay demasiadas cosas que aprender. Después del diseño de este curso, tengo una comprensión más profunda del lenguaje C++ y mejoré mis habilidades operativas. La satisfacción que se obtiene después de escribir el código y ejecutarlo requiere paciencia, cuidado, perseverancia y mucha fuerza física. Sólo después de múltiples ediciones, compilaciones y ejecuciones se puede escribir un mejor programa y, a veces, se necesitan múltiples modificaciones para lograr el efecto operativo deseado. Para aprender a programar, debe reflexionar, practicar, practicar y practicar nuevamente para mejorar sus habilidades de programación. ¡Además, debe consultar a expertos!
Código fuente
//*********************
//Gestión de préstamos de biblioteca
//Categoría:
//ID estudiante:
//Nombre:
//****** * *******************
#incluye & ltiostream.h & gt
#incluye & ltiomanip.h & gt
# include & ltstring.h & gt
# include & ltfstream.h & gt
const int Maxr = 1000 //Lectores máximos
const int Maxb = 10000; // La mayor cantidad de libros
const int max bor = 8; // Cada lector puede pedir prestados hasta 8 libros.
Lector de clase //Clase de lector
{
int tag; //La marca de eliminación 1 se ha eliminado 0 no se ha eliminado
<; p>int número; //Número de lectorNombre del personaje [10]; //Nombre del lector
int bor book[max bor] //Préstamo de libro p>
Público:
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 de lector
Void setname(char na [] )//Establece el nombre del lector.
{
strcpy(nombre, no aplicable);
}
void del book(){ tag = 1;}/ /Establecer indicador de eliminación
Void addreader(int n, char *na)//Agregar lector.
{
etiqueta = 0;
no = n;
strcpy(nombre, no aplicable); p>for(int I = 0; i<Maxbori++)
bor book[I]= 0;
}
Libro de préstamo vacío(int bookid)/ /borrow operación
{
for(int I = 0;i<Maxbori++)
{
if(borbook[i] ==0)
{
bor libro[I]= bookid;
}
}
}
Int retbook(int bookid)//Operación de devolución de libro
{
for(int I = 0; I & ltMaxbori++)
{
if (borbook[i]==bookid)
{
bor book[I]= 0;
Devuelve 1; /p>
}
}
Devuelve 0;
}
Void disp()// Muestra información del lector.
{
cout <<setw(5)<<No<<setw(10)<<Name<<"Número de préstamo:";
for(int I = 0; i , Maxbori++)
if(borbook[i]!=0)
cout & lt& ltbor book[I]& lt;& ltendl
} p>
};
clase RDA base//clase de biblioteca de lector
{
int top//puntero de registro de lector
Lector read[Maxr]; //Registro del lector
Público:
RDatabase()// El constructor lee Reader.txt en read[].
{
Lectores;
top =-1;
archivo fstream(" lector.txt ", IOs::in ) ;
mientras(1)
{
archivo leído((char *)&s,sizeof(s));
if(!archivo)interrumpir;
top++;
leer[top]= s;
}
archivo cerrar. ();
}
Void clear()//Eliminar toda la información del lector.
{
top =-1;
}
Int addreader(int n, char *na)//Agregar una lectura fetcher y verifique si ya existe.
{
lector * p = consulta(n);
if(p==NULL)
{
arriba++;
Leer [arriba]. addreader(n, na);
Devuelve 1;
}
Devuelve 0;
}
Lector*consulta(int lectorid)//Buscar por número.
{
for(int I = 0;i<=topi++)
if (read[i].getno()= = lectorid&& amp leer [I]. gettag==0)
Return & amp se cambia a [I];
Return NULL
}
Void disp()//Eliminar toda la información del lector.
{
for(int I = 0; i<= topi++)
Leer [i]. disp();
}
anular datos del lector();//Mantenimiento de la biblioteca del lector
~RDatabase()//Destructor, leer[ ]Escribir en el archivo lector.txt.
{
fstream file("reader.txt", IOs::out);
for(int I = 0; i<= topi++) p>
si(leer[i].
gettag()==0)
archivo . write((char *)& leer[i], tamaño de(leer[I]);
archivo . close() ;
}
};
void RDatabase::readerdata()
{
int elección = 1 ;
char rname[20];
int lectorid
lector * r;
mientras (select!=0)
p>{
cout & lt& lt"Servicio de lectura 1 agregar 2, corregir 3, eliminar 4, buscar 5, mostrar 6, eliminar todo 0 y salir" < & ltendl
CIN>>Select;
Cambiar (seleccionar)
{
Caso 1:
cout & lt& lt"Por favor, introduzca el ID del lector:";
CIN & gt;& gtreaderid
cout & lt& lt"Leer en el nombre del lector:";
CIN & gt ; & gtrname
addreader(readerid, rname);
Break;
Caso 2:
cout & lt& lt "Por favor, ingrese el ID del lector:";
CIN>& gtreaderid
r = query(readerid);
if(r==NULL)
{
cout & lt& lt"El lector no existe"
Break
}
cout & lt& ltPor favor, introduzca un nuevo nombre de lector: "";
CIN>>rname
r->set name(rname);
Break;
Caso 3:
cout & lt& lt"Ingrese el número de lector:";
CIN & gt;& gtreaderid
r = query(readerid);
if(r==NULL)
{
cout & lt& lt"El lector no existe"
Pausa; p>
}
r-& gt;del libro();
Pausa;
Caso 4:
cout & lt& lt"Ingrese el ID del lector:";
CIN & gt; & gtreaderid
r = query(readerid);
if(r= =NULL)
{
cout & lt& lt"El número del lector de tarjetas no existe"
Pausa;
} p>
Caso 5:
disp();
Romper;
Caso 6:
clear();
Descanso;
}
}
}
Libro de clase//libro
{
int label; //Eliminar marca 1: eliminado; 0: no eliminado
int número; //número de libro
char name[20] ; //Título del libro
int onshelf//¿El estante 0 ha tomado prestado el 1?
Público:
Libro(){}
char * getname(){ return name;}//Obtener el nombre del lector
int getno(){ devolver no;
}//Obtener el número del libro
int gettag(){ return tag;}//Obtener la etiqueta de eliminación
Void setname(char na[])//Establecer el título del libro .
{
strcpy(nombre, no aplicable);
}
void del book(){ tag = 1;}/ /Eliminar libro
Void addbook(int n, char*na)//Agregar libro.
{
etiqueta = 0;
no = n;
strcpy(nombre, no aplicable
<); p>on Shelf = 1;}
Int lendbook()//Operación de préstamo
{
if(on self = = 1)
{
en el estante = 0
Devuelve 1
}
Devuelve 0; ;
}
Retbook nulo()//operación de devolución de libro
{
en estante = 1;
}
Void disp()//Libros de salida
{
cout & lt& ltsetw(6)& lt;& ltNo& lt& ltsetw( 18) <<Name<& ltsetw(10)<<(onshelf==1?"En el estante":"Prestado")<<endl
} p>
};
b clase base de datos//clase de biblioteca
{
int top//puntero de registro de libro
libro libro[Maxb] //registro de libro
p>Público:
BDatabase()//Constructor, lee book.txt en book[].
{
Libro b;
arriba =-1;
archivo fstream(" libro.txt ", IOs::in );
mientras(1)
{
archivo leer((char *)&b,sizeof(b));
Si (!archivo) se rompe;
top++;
libro[top]= b;
}
archivo. close();
}
Anular clear()//Eliminar todo
{
top =-1;
p>}
Int addbook(int n, char*na)//Agregar libros.
{
libro * p = consulta(n);
if(p==NULL)
{
arriba++;
Libro [arriba]. addbook(n, na);
Regresar 1;
}
cout & lt& lt"¡Agregado exitosamente!"& lt& ltendl
}
Libro*query(int bookid)//Buscar libros.
{
for(int I = 0;i<=topi++)
if(libro[i].getno()== bookid& & libro[ i].
gettag()==0)
Devolver NULL
}
void book data(); //Mantenimiento de la biblioteca
Visualización no válida ()
{
for(int I = 0;i<=topi++)
if (libro[i].gettag()==0 )
Libro [I]. disp();
}
~BDatabase()//Destructor, escribe libro[] en el archivo book.txt.
{
fstream file("book.txt", IOs::out);
for(int I = 0; i<= topi++) p>
if(libro[i].
gettag()==0)
archivo . write((char *)& libro[i], tamaño de(libro[I]);
archivo . close() ;
}
};
void BDatabase::bookdata()
{
int selección <; /p>
char bname[40];
int bookid
libro* b;
mientras (select!=0)
{
cout & lt& lt"Gestión de biblioteca 1 agregar 2, cambiar 3, eliminar 4, buscar 5, mostrar 6, eliminar todo 0 y salir"< & ltendl
CIN>>Select;
Cambiar (Seleccionar)
{
Caso 1:
cout & lt& lt” Ingrese el número de libro: ";
CIN & gt;& gtbookid
cout & lt& lt"Ingrese el título del libro: ";
CIN & gt;& gtbname
addbook(bookid, bname);
Break;
Caso 2:
cout & lt& lt"Ingrese el número de libro: ";< / p>
CIN>& gtbookid
b =query(bookid);
if(b==NULL)
{ p>
cout & lt& lt"Este libro no existe"
Pausa;
}
cout & lt& lt"Ingrese el nuevo título del libro: ";
CIN & gt;& gtbname
b-& gt;set name(bname);
cout & lt& lt"¡Cambio de nombre exitoso!" /p>
Pausa;
Caso 3:
cout & lt& lt"Ingrese ISBN:";
CIN & gtbookid p>
b =query(bookid);
if(b==NULL)
{
cout & lt& lt" Este libro no ¡existen!"& lt& ltendl
break;
}
b-& gt;del libro();
Break;
Caso 4:
cout & lt& lt"Ingrese el número de libro:";
CIN & gt;& gtbookid
b =query(bookid);
if(b==NULL)
{
cout & lt& lt"¡Este libro no existe! "& lt& ltendl
Romper;
}
b-& gt; disp();
Romper;
Caso 5:
disp();
Romper;
Caso 6:
clear();
Romper;
}
}
}
void main()
{
int elección=1, bookid, lectorid
RDatabase ReaderDB
lector * r;
b base de datos BookDB
Libro* b;
Y (select!=0)
{
cout & lt& lt" ¿Pedir prestado el libro de 1? ”& lt& ltendl
>cout & lt& lt"¿Devolver el libro?"& lt& ltendl
cout & lt& lt"3 ¿Mantenimiento del libro?"& lt& ltendl
cout & lt& lt"4 ¿Mantenimiento del lector? ”& lt& ltendl
cout & lt& lt“0 dejar ”& lt& ltendl
CIN & gt;& gtSelect;
Cambiar(Seleccionar)
p>
{
Caso 1:
cout & lt& lt"Para pedir prestado libros, introduzca el número de lector":
CIN & gt; & gtreaderid
cout & lt& lt"Número de libro:";
CIN & gt;& gtbookid
r = lectordb consulta(readerid); p >
if(r==NULL)
{
cout & lt& lt"¡Jaja, el préstamo del libro fue exitoso!";
Pausa ;
}
b = bookdb . >
cout & lt& lt"¡Este libro no existe!"& lt& ltendl
Break;
}
if(b-& gt; libro de préstamo( )==0)
{
cout & lt& lt"El libro fue prestado"
Roto
}< / p>
r-& gt;Préstamo de libro(b-& gt;getno());
Break;
cout & lt& lt"¡Préstamo de libro con éxito!" & lt& ltendl
Caso 2:
cout & lt& ltSi deseas devolver el libro, introduce el número de lector:
CIN & gt;& gtreaderid
cout & lt& lt"Ingrese el número del libro;";
CIN & gt;& gtbookid
r = lectordb query(readerid);
if(r==NULL)
{
cout & lt& lt"¡El lector no existe!"& lt& ltendl
Romper ;
}
b-& gt;retbook();
r-& gt;retbook(b-& gt;getno());
Pausa;
cout & lt& lt"¡Devolución del libro exitosa! "& lt& ltendl
Caso 3:
bookdb . book data();
Pausa;
Caso 4:
reader db .reader data();
Romper;
}
}
}
Resultados de salida
1 Préstamo de libros
Devolución de libros
3 Gestión de libros
4 Servicios de lectura
0 Salir
Tres
Administración de biblioteca 1 Agregar 2, Cambiar 3, Eliminar 4, Buscar 5, Mostrar 6, Eliminar todo 0, Salir /p>
Ingresar número de libro. : 1111.
Ingrese el título del libro: "Wulin Gaiden"
¡Agregado con éxito!
Gestión de libros 1 agregado 2, modificado 3. Elimine 4, encuentre 5. , mostrar 6, borrar todos los 0, salir.
1
Ingrese el número del libro: 2222
Ingrese el título del libro: "Sleepless Tonight"
¡Agregado exitosamente!
Gestión de libros 1 agregar 2, cambiar 3, eliminar 4, buscar 5, mostrar 6, eliminar todo 0, salir.
1Préstamo de libros
Devolución de libros
3Gestión de libros
4Servicios de lectura
0Salir
p>
Cuatro
El servicio de cumplimiento 1 agrega 2, corrige 3, elimina 4, busca 5, muestra 6, elimina todos 0 y sale.
1
Por favor introduzca el número de lector: 001.
Lea el nombre del lector: Zhou Qiang
El servicio de lectura 1 agrega 2, corrige 3, elimina 4, busca 5, muestra 6, elimina todos los 0 y sale.
1Préstamo de libros
Devolución de libros
3Gestión de libros
4Servicios de lectura
0Salir
p>
1
Por favor, introduzca el número de lector: 001 para pedir prestado libros.
Número de libro: 1111
Jaja, ¡el préstamo del libro fue un éxito! 1 Pedir prestado libros
Devolver libros
3 Gestión de libros
4 Servicios de lectura
0 Salir
2
Por favor, introduce el número de lector: 001 para devolver el libro.
Ingrese el número del libro; 1111
¡El libro fue devuelto exitosamente!
1Préstamo de libros
Devolución de libros
3Gestión de libros
4Servicios de lectura
0Salir
p>
Tres
Gestión de biblioteca 1 agregar 2, cambiar 3, eliminar 4, buscar 5, mostrar 6, eliminar todo 0, salir.
2
Ingrese el número del libro: 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?