La Red de Conocimientos Pedagógicos - Currículum vitae - 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 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:.

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 lector

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

int bor book[max bor] //Libro prestado

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>

{

cout lt lt"Servicio de cumplimiento 1 agregar 2, corregir 3, eliminar 4, buscar 5, mostrar 6, eliminar todo 0 y salir" < ltendl

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>

}

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?