============
#ifndef _DATA_STRUCT_H_
#define _DATA_STRUCT_H_
/ *Estructura del libro*/
Estructura del libro
{
ID del libro largo sin firmar/*Número del libro*/
char Nombre del libro[512] ;/*Título*/
char Writer[512];/*Autor*/
int Número actual/*Cantidad existente*/
Libro * pSiguiente/ *Información del siguiente libro*/
};
/*Estructura del índice del libro*/
Índice estructural
{
ID de libro largo sin firmar/*número de libro*/
Índice * pNext/*puntero de índice siguiente*/
};
/*Estructura de información de préstamo */
Préstamo de estructura
{
ID de libro largo sin firmar/*Número de libro de préstamo*/
char BookName[512];/ *Título*/
Entero largo sin signo StuID/*Número de identificación de biblioteca*/
Tiempo de devolución de caracteres[512];/*Fecha de devolución*/
Préstamo * pNext/*próxima información de préstamo*/
};
#endif/*_DATA_STRUCT_H_*/
Archivo de implementación:
= ==============
// BookManage.cpp: define el punto de entrada para la aplicación de consola.
//
# incluir ltstdio.h gt
# incluir ltstdlib.h gt
# incluir ltstring.h gt p>
# include lttime.h gt
#Include " DataStruct.h "
/*
Diseño del curso de estructura de datos (basado en C) Sistema de gestión de libros
Puntos de bonificación: 100-14 días Hace 23 horas, la edición finalizó.
Descripción del problema
Las actividades comerciales básicas de la gestión de libros incluyen el almacenamiento, despacho, préstamo y devolución de libros. Intente diseñar un sistema de gestión de biblioteca para completar las actividades comerciales anteriores con la ayuda de un sistema informático.
Requisitos básicos
(1) El registro de cada libro incluye al menos cinco elementos: número de libro, título, cantidad disponible por el autor e inventario total.
(2) Cree una tabla de índice (tabla lineal) para el número de libro para mejorar la eficiencia de la búsqueda.
(3) Las operaciones y funciones a implementar por el sistema se definen a continuación:
1 Catalogación y almacenamiento: los libros nuevos se compran, clasifican y cuentan, para luego registrarse en la cuenta de la biblioteca. Si el libro ya está en la cuenta, sólo se incrementará el inventario total.
2 Préstamo: Si la cantidad actual de un libro es mayor que cero, se prestará un libro y se cancelará el número de tarjeta de biblioteca del prestatario y la fecha de devolución.
Devolución: cancela el registro del prestatario y cambia la cantidad de libros existente.
*/
/*Obtener la cadena de entrada*/
void GetInput(char *pInOutStr, int StrLen, bool only getnumber = false); p>
p>
/*Mostrar el menú principal y volver a la selección*/
int ShowMainMenu();
/*Para la operación de almacenamiento de libros, el parámetro Se pasa el encabezado de la lista de libros. El puntero del puntero y el puntero del encabezado de información del índice, porque el valor del puntero del encabezado puede cambiar dentro de esta función */
void PutBookInLib(Book **pHead , Index * * pIndex);
/*Consulta el inventario de la biblioteca, la consulta no cambia los datos, por lo que el puntero entrante puede ser*/
void query booklib(Book * pHead );
/*Pedir prestado un libro* /
void BorrowBook(Préstamo **pPréstamo, libro * pHead
/*Consulta y préstamo*/);
void query Préstamo(Préstamo * p Préstamo );
/*Devolución Libro*/
void DevoluciónLibro(Préstamo**pPréstamo, Libro * pHead);
/*Publicar libros, indexar y pedir prestado información de la lista enlazada*/
void eliminar lista de libros(Libro * * pHead);
void DeleteIndexList(Index * * pIndex);
void DeleteBorrowList(Borrow * * p Borrow);
int main()
{
/*Lista de libros puntero de título*/
Libro * pBookHead = NULL
/*Puntero de encabezado de índice de libro*/
Índice * pIndexHead = NULL
/*Puntero de encabezado de información de préstamo*/
Préstamo * pBorrowHead = NULL
/*Se utiliza para guardar la entrada del usuario actual*/
int elegido num =- 1;
while(true)
{
núm elegido = ShowMainMenu();
Cambiar (seleccionar menú)
{
Caso 0 :/*Salir*/
{
Regresar 0
Romper
}
Caso 1:/*Almacenamiento de libros*/
{
PutBookInLib( amp; pBookHead amp; pIndexHead
);Pausa;
}
Caso 2: /*Consultar inventario*/
{
QueryBookLib(pBookHead);
Printf("Presione Enter para continuar...");
fflush(stdin);
getchar();
sistema ("cls");
Pausa ;
}
Caso 3: /*Préstamo de libros*/
{
QueryBookLib(pBookHead);
Pedir prestados libros.
pBorrowHead, pBookHead);
Break;
}
Caso 4: /*Consultar y pedir prestado*/
{
consulta de préstamo(pBorrowHead);
Printf("Presione Enter para continuar...");
fflush(stdin);
getchar ();
Sistema ("cls");
Romper
}
Caso 5: /*Devolver el libro* /
{
consulta pedir prestado(pBorrowHead);
devolver libro(amp; pBorrowHead, pBookHead
Break; p >
}
}
}
Eliminar lista de libros (amppBookHead);
DeleteIndexList(amp; pIndexHead);
DeleteBorrowList(amp;pBorrowHead);
fflush(stdin);
getchar();
Devuelve 0;
}
/*Obtener la cadena de entrada*/
void GetInput(char *pInOutStr, int StrLen, bool OnlyGetNumber)
{ p >
memset(pInOutStr, 0x0, StrLen);
fflush(stdin);
int Count = 0
mientras (verdadero)
p>{
char TmpC = 0;
fred(ampTmpC, 1, 1, stdin
if ( 10 =); = TmpC)
{
break;
}
if(solo obtiene el número amp; ampTmpC gt= ' 0 ' amp ampTmpC lt = '9' )
{
pinout str[Count]= TmpC;
count;
}
Otros
{
pinout str[Count]= TmpC;
count;
}
}
}
/*Mostrar el menú principal y volver a la selección*/
int ShowMainMenu()
{ p>
char InPutStr[1024];
Sin entrada:
printf(" \ n \ n \ n ");
printf("); * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \ n ");
Printf("*Sistema de gestión de biblioteca* \ n ");
printf(" * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \n ");
printf("\n");
Printf("Por favor seleccione:\n");
Printf("\t1. Almacenamiento de libros\n");
p>
Printf("\t2. Comprobar inventario\n ");
Printf("\t3.Préstamo de libros\n");
Printf("\t4 . Consulta de préstamo\n");
Printf("\t5. Devolver el libro\n");
Printf("\t0.
Salir \n ");
printf(" \n ");
printf(" \t entrada: ");
GetInput(InPutStr, 1024 , verdadero);
if(strlen(input str) lt; 1)
{
System("cls");
ir a NO _ INPUT
}
Regresar atoi(input str);
}
/*Operación de almacenamiento de libros*/
void PutBookInLib(Libro * * phe head, Index **pIndex)
{
Libro * pWork = * pHead
Ninguno Símbolo length BookID = 1;
char InPutStr[1024];
/*Primero calcule el número de identificación del libro almacenado actualmente*/
if ( NULL = = pWork)
{
ID de libro = 1;
}
Otro
{
mientras(pWork- gt; pNext! = vacío)
{
p trabajo = p trabajo- gt; p>
}
BookID = pWork- gt; BookID 1;
}
Libro * pTmpNewBook = (Libro *)(malloc(sizeof(Book))
memset(pTmpNewBook, 0x0, sizeof(Book));
Índice * PTM Índice = (Índice *)(malloc(sizeof(Index))); (Índice PTM, 0x0, tamaño de (Índice));
pTmpNewBook- gt; BookID = BookID
PTM index- gt; "cls ");
Printf("Ingrese el nombre del libro: ");
GetInput(InPutStr, 1024);
strcpy(pTmpNewBook- gt; BookName); , input str);
System("cls");
printf(" lt; lt s gt gt\n ", pTmpNewBook- gt; título del libro
Printf("Autor del libro:");
GetInput(InPutStr, 1024);
strcpy(pTmpNewBook- gt;Writer, input str);
System("cls");
printf(" lt; lt s gt gt\n ", pTmpNewBook- gt; título del libro);
Printf("Autor: s\ n ", pTmpNewBook- gt; escritor);
Printf("Cantidad de recibo: ");
GetInput(InPutStr, 1024, true);
pTmpNewBook- gt; número actual =
atoi(input str);
if(pTmpNewBook- gt; número actual lt1)
{
System("cls");
Printf("¡Cantidad de compra incorrecta! (Presione Enter para continuar...) ");
fflush(stdin);
getchar(); >Sistema("cls");
Retorno;
}
if ( NULL == *pHead)
{< / p>
* pHead = pTmpNewBook
* pIndex = pTmpIndex
}
Otros
{
Libro * pWork = * pHead
mientras (pWork!=null)
{
if(strcmp(p work- gt;BookName, pTmpNewBook- gt ; BookName) = = 0 amp; ampstrcmp(p work- gt; Writer, pTmpNewBook- gt; Writer) == 0)
{
Work- gt; - gt; número actual;
Regreso
}
p trabajo = p trabajo- gt; >
pWork = * pHead
while(pWork- gt; pNext!=null)
{
p work = p work- gt;
}
Work- gt; pNext = pTmpNewBook
Índice * pWork2 = * pIndex
mientras(pwork 2- gt; pNext ! = vacío)
{
pwork 2 = pwork 2- gt;pNext
}
pwork 2- gt;pNext = pTmpIndex
}
System("cls");
Printf("Libro:
fflush(stdin);
p>
getchar();
System("cls");
}
/*Publicar lista enlazada e índice de libros lista enlazada*/ p>
void DeleteBookList(Libro **pHead)
{
Libro * pWork = * pHead
Libro * pNext = pWork
mientras (NULL! = pWork)
{
pNext = p work- gt; pNext
Gratis (pWork);
pWork = pNext p>
}
}
anular eliminar lista de índice(Índice * * pIndex)
{
Índice * pWork = * pIndex
Índice * pNext = pWork
mientras ( NULL!= pWork)
{
>
pNext = p trabajo- gt;pNext
Gratis (pWork);
pWork = pNext
}
}
void DeleteBorrowList(Préstamo * * p Préstamo)
{
Préstamo * pWork = * pPréstamo
Préstamo * pNext = pWork
mientras ( NULL!= pWork)
{
pNext = p trabajo- gt;pNext
Gratis(pWork); p>
p>
pWork = pNext
}
}
/*Consulta el inventario de la biblioteca La consulta no cambia los datos. , por lo que el puntero entrante puede ser */
void QueryBookLib(Book *pHead)
{
Book * pWork = pHead
int recuento total = 0;
mientras (NULL! = pWork)
{
recuento total;
p trabajo = p trabajo - gt; pNext
}
System("cls");
Printf("Actualmente hay ***d libros en stock, de la siguiente manera: \n = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
pWork = pHead
mientras (NULL! = pWork)
{
Printf("Número: [ d] Título:
p>
p trabajo = p trabajo- gt;pNext
}
printf(" = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = \n", recuento total);
}
/*Préstamo de libro*/
void BorrowBook(Préstamo **pPréstamo, Libro *pHead)
{
char InPutStr[1024 ];
bool HadTheBook = false
Préstamo * pTmpBorrow =(Préstamo *)(malloc(sizeof(Préstamo)));
memset(pTmpBorrow, 0x0 , sizeof(Borrow));
Printf("Ingrese el número de libros que desea pedir prestado:");
GetInput(InPutStr, 1024, verdadero);
pTmpBorrow- gt;BookID = atoi(input str);
Libro * pWorkBook = pHead
while ( pWorkBook! =nulo)
{<
/p>
if(pWorkBook- gt; BookID = = pTmpBorrow- gt; BookID)
{
HadTheBook = true
Break; p>
p>
}
p libro de trabajo = p libro de trabajo- gt; pNext
}
if (HadTheBook)
{
if(pWorkBook- gt; número actual lt1)
{
System("cls");
Printf("Libro
fflush(stdin);
getchar();
system("cls");
gratis( pTmpBorrow);
p>
Devolver;
}
}
Otros
{
System("cls ");
Printf("¡El número de libro d no existe!\n(Presione Enter para continuar...)", pTmpBorrow- gt; BookID);
fflush(stdin);
getchar();
system("cls");
gratis(pTmpBorrow);
return;
}
strcpy(pTmpBorrow- gt; BookName, pWorkBook- gt; título del libro);
Printf("Por favor); ingrese su número de tarjeta de la biblioteca: ");
GetInput(InPutStr, 1024, true);
pTmpBorrow- gt; StuID = atoi(input str);
if(0 = = pTmpBorrow- gt; StuID)
{
System("cls");
Printf("El número de tarjeta de la biblioteca no existe (ingrese un número entero para el número de tarjeta de la biblioteca)!\n(Presione la tecla Intro para continuar...) ");
fflush(stdin);
getchar();
Sistema("cls");
Gratis(pTmpBorrow);
Devolución;
}
time_t time;
struct tm * today
Time (ampltime);
ltime = 60 * 60 * 24 * 30;
hoy = hora local.
ltime);
sprintf(pTmpBorrow- gt; ReturnTime, "d año d mes d día", hoy- gt; tm_year 1900,
Hoy- gt; tm_mon 1, p>
p>
Hoy - gt;TM_mday);
if ( *pBorrow == NULL)
{
* pBorrow = pTmpBorrow p>
}
Otros
{
Préstamo * pWork = * pPréstamo
mientras ( NULL! = p trabajo- gt; pNext)
{
p trabajo = p trabajo- gt; pNext
}
Trabajo- gt; pNext = pTmpBorrow
}
pWorkBook- gt; número actual-;
System("cls"); Número de tarjeta de biblioteca: d \Préstamo de libros:
fflush(stdin);
getchar();
System("cls");
}
/*Consulta y préstamo*/
void QueryBorrow(Préstamo *pPréstamo)
{
Préstamo * pWork = pPréstamo
p>int recuento total = 0;
mientras (NULL! = pWork)
{
recuento total;
p trabajo = p trabajo- gt; pNext
}
System("cls");
Printf("Hay * **d elementos de información sobre préstamos actualmente, enumerados a continuación: \n = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
pWork = pPréstamo
mientras (NULL!= pWork)
{
Printf("Número de préstamo: [d] Nombre del préstamo:
p work = p work- gt; pNext
}
printf (" = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = \ n ", recuento total);
}
/*Devolver el libro*/
void ReturnBook(pedir prestado* *pedir prestado, libro*pHead) p >
{
char InPutStr[1024];
Préstamo TmpBorrow
bool HasFindBorrwo = false
memset( amp; TmpBorrow, 0x0, sizeof(préstamo tmp));
Printf("Ingrese el número de tarjeta de la biblioteca:
GetInpu"
t(InPutStr, 1024, verdadero);
TmpBorrow. StuID = atoi(input str);
Printf("Ingrese el número del libro devuelto: ");
GetInput(InPutStr, 1024, true);
TmpPréstamo. BookID = atoi(input str);
Préstamo * pWorkBorrow = * pPréstamo
Préstamo * pDeletePre = NULL
mientras ( NULL!= pWorkBorrow)
{
if(pWorkBorrow- gt; BookID == TmpBorrow. BookID amp amppWorkBorrow- gt; StuID == TmpBorrow. StuID)
{
HasFindBorrwo = true
Break;
}
pDeletePre = pWorkBorrow
pWorkBorrow = pWorkBorrow- gt;pNext
}
If (!HasFindBorrwo)
{
System("cls");
Printf("Lo que ingresaste ¡La información de préstamo no existe!\n(Presione Enter para continuar...) ");
fflush(stdin);
getchar();
Sistema ("cls");
Retorno;
}
if (NULL == pDeletePre)
{
* p pedir prestado = pWorkBorrow- gt; pNext
}
Otro
{
pDeletePre- gt; pWorkBorrow- gt;pNext
}
Libro * pWorkBook = pHead
mientras ( NULL!= pWorkBook)
{
if(pWorkBook- gt; BookID == pWorkBorrow- gt; BookID)
{
pWorkBook- gt; número actual
}
p libro de trabajo = p libro de trabajo- gt; pNext
}
System("cls");
Printf("Número de tarjeta de biblioteca .: d \Devolver el libro:
fflush(stdin);
getchar()
System("cls"); p>Gratis (pWorkBorrow);
}