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 y realice 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; IltMaxborI) se escribe erróneamente como for (int I = 0; IltMaxborI). 1; i ltMaxborI ), provocando un error de bucle.
2. Error de uso del puntero, 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 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:
//****** * *******************
# incluir ltiostream.h gt
# incluir ltiomanip.h gt
# include ltstring .h gt
# include ltfstream.h gt
const int Maxr = 1000; // Lectores máximos
const int Maxb = 10000; /Libros máximos
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] //Libro prestado 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; IltMaxbori)bor book[I]= 0;
}
Libro de préstamo vacío(int bookid)// Préstamo operación
{
for(int I = 0; iltMaxbori)
{
if(borbook[i]== 0)
{
bor libro[I]= bookid;
}
}
}
Int retbook(int bookid)//operación de devolución de libro
{
for(int I = 0; IltMaxbori)
{
if (borbook[i]==bookid)
{
bor book[I]= 0
Devuelve 1; >
}
}
Devuelve 0;
}
Void disp()//genera información del dispositivo de lectura.
{
cout lt ltsetw(5) lt; ltNo lt ltsetw(10) lt; ltNamelt" Número de prestatario: "; = 0; i, Maxbori)
if(borbook[i]!=0)
cout lt ltbor libro[I] ltendl
}
};
clase RDA base//clase de biblioteca de lector
{
int top//puntero de registro de lector
Reader read[Maxr]; //Registro del lector
Público:
RDatabase()//El constructor lee Reader.txt en read[].
{
Lectores;
top =-1;
archivo fstream("reader.txt", IOs::in ) ;
mientras(1)
{
archivo leer((char *) amp;s,sizeof(s));
if(!archivo)interrumpir;
arriba;
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 lt= topi)
if (read[i].getno()= = lectorid amp; amp Leer [I].gettag==0)
Devolver amplificador a [I];
Devolver NULL
}
Pantalla nula ()//Eliminar toda la información del lector.
{
for(int I = 0; i lt= 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; ilt=topi)< / p>
si (leer [i].
gettag()==0)
archivo . write((char *) amp; leer[i], tamaño de(leer[I]);
archivo . close();
}
};
void RDatabase::readerdata()
{
int elección = 1 ;
char rname[20];
int lectorid
lector * r;
Y (select!=0) p>
p>
{
cout lt lt"Servicio de cumplimiento 1 agregar 2, corregir 3, eliminar 4, buscar 5, mostrar 6, eliminar todo 0 y salir" < ltendl p>
CIN gt; gt selección;
Interruptor (selección)
{
Caso 1:
cout lt lt "Por favor ingrese el número del lector: ";
CIN gt; gtreaderid
cout lt lt"Lea el nombre del lector: ";
CIN gt ; gtrname
addreader(readerid, rname);
Break;
Caso 2:
cout lt lt"Ingrese el lector número:";
CIN gt; gtreaderid
r = consulta(readerid);
if(r==NULL)
{
cout lt lt"El lector no existe"
Pausa;
}
cout lt ltIngrese un nuevo nombre de lector: "";
CIN gt; gtrname
r- gt; establecer nombre(rname);
Romper;
Caso 3:
cout lt lt"Ingrese el ID del lector:";
CIN gt; gtreaderid
r = query(readerid);
if(r==NULL)
{
cout lt lt"El lector no existe"
Romper
}
r- gt ;del book();
Break;
Caso 4:
cout lt lt"Por favor, introduzca el número de lector :";
CIN gt; gtreaderid
r = consulta(readerid);
if(r==NULL)
{
cout lt lt "El número del lector de tarjetas no existe"
Pausa;
}
Caso 5:
disp();
Romper;
Caso 6:
clear();
Romper;
}
}
}
Libros del aula//Libros
{
int tag; // Eliminar marca 1: Eliminado; 0: No eliminado
int number; //número de libro
char name[20] //título del libro
int onshelf // si 1 ha sido numerado 0 ¿Préstamos estantes?
Público:
Libro(){}
carácter *
getname(){ return name;}//Obtener el nombre del lector
int getno(){ return no;}//Obtener el número del libro
int gettag(){ return tag ;}/ /Obtener la marca 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; ltNolt ltsetw(18) lt; (10) lt; lt(onshelf==1? "En el estante": "prestado")< ltendl
}
};
Clase B base de datos//clase de biblioteca
{
int top//puntero de registro de libro
libro libro[Maxb] //registro de libro
Público:
BDatabase()//Constructor, lee book.txt en book[].
{
libro b;
top =-1;
archivo fstream("libro.txt", IOs::in );
mientras(1)
{
archivo leer((char *) amp; b, tamaño de(b));
si (! archivo) se rompe;
arriba;
libro[top]= b;
}
archivo. close();
}
Anular clear()//Eliminar todo
{
top =-1;
}
Int addbook(int n, char*na)//Agregar libros.
{
libro * p = consulta(n);
if(p==NULL)
{
arriba;
Libro [arriba]. addbook(n, na);
Return 1;
}
cout lt lt "¡Agregado exitosamente!"
Libro*query(int bookid)//Buscar libros.
{
for(int I = 0; i lt= topi)
if (libro[i].getno()== bookid amp; amp book[i].gettag()==0)
Devolver NULL
}
void book data() //Mantenimiento de la biblioteca
Visualización no válida()
{
for(int I = 0; i lt= 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; ilt=topi)< / p>
if(libro[i].
gettag()==0)
archivo . write((char *) & libro[i], tamañode(libro[I]);
archivo . close();
}
};
void BDatabase::bookdata()
{
int select;
p>char bname[40];
int bookid
libro* b;
y (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 gt ; gtSelect;
Cambiar (seleccionar)
{
Caso 1:
cout lt lt"Ingrese el número de libro: ";< / p>
CIN > );
Pausa;
Caso 2:
cout lt lt" Ingrese el número de libro: "
CIN gt; gtbookid
p>b =query(bookid);
if(b==NULL)
{
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!"
Caso 3:
cout lt lt" Ingrese el número de libro: "
CIN gt; bookid);
if (b==NULL)
{
cout lt lt"¡Este libro no existe!" p>Romper;
}
b- gt;del libro();
Romper;
Caso 4:
cout lt lt"Ingrese el número del libro: ";
CIN gt; gtbookid
b = consulta (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 (seleccione!=0)
{
cout lt lt"¿Tomar prestado el libro de 1?"
cout lt lt"3 mantenimiento del libro?" / p>
CIN gt; selección gt;
Interruptor (selección)
{
Caso 1:
cout lt lt "Para pedir prestado un libro, ingrese el ID del lector":
CIN gtaderid
cout lt "Número de libro:";
CIN gt; gtbookid
p>
r = lectordb consulta(readerid);
if(r==NULL)
{
cout lt lt"Jaja, pedir prestado ¡El libro fue exitoso!";
Pausa;
}
b = bookdb (bookid);
p>
if(b= =NULL)
{
cout lt lt"¡Este libro no existe!" /p>
} p>
if(b- gt;borrowbook()==0)
{
cout lt lt"El libro fue prestado "
Descanso;
}
r- gt; pedir prestado libros (b- gt; getno());
Descanso;
cout lt lt "¡El préstamo del libro fue exitoso!" lt ltendl
Caso 2:
cout lt ltPara devolver el libro, ingrese el número de lector:
CIN gt ; gtreaderid
cout lt "Ingrese el número del libro;";
CIN gtbookid
r = lectordb . query(readerid);
if(r==NULL)
{
cout lt lt "¡El lector no existe!" p>
Romper;
}
b- gt; ret libro();
r- retbook(b- gt; getno( ));
Pausa ;
cout lt lt"¡Devolución del libro exitosa! ” lt ltendl
Caso 3:
bookdb datos del libro();
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
Gestión de biblioteca 1 agregar 2, cambiar 3, eliminar 4, buscar 5, mostrar 6, eliminar todo 0, salir
1 p>
Ingrese el número de libro: 1111.
Ingrese el título del libro: "Wulin Gaiden"
¡Agregado exitosamente!
Gestión de libros 1 agregar 2, cambiar 3, eliminar 4, buscar 5, mostrar 6, eliminar todo 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 los 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
Para pedir prestado libros, introduzca el número de lector: 001.
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?