Red de conocimiento informático - Computadora portátil - c sistema de gestión de bibliotecas de diseño de cursos de idiomas

c sistema de gestión de bibliotecas de diseño de cursos de idiomas

Programación de lenguajes avanzados (2) Diseño del curso

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:.

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 lector

Nombre del personaje [10]; //Nombre del lector

int bor book[max bor] //Préstamo de libro

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

}

};

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++)

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;

}

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;

}

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

}

};

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++)

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)

{

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

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);

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?