Le pedí a un compañero de clase de Baidu que me preguntara sobre el diseño de un curso de lenguaje C y un plan para tomar prestados libros de la biblioteca.
#include
#include
#include
/ /
#define MAXSIZE 100 //Valor máximo. Definido como 100
#define LIST_INIT_SIZE 100 // El valor máximo de usuarios de tarjetas de biblioteca se define como 100
// Estructura del prestatario
typedef struct Boro // Comportamiento de préstamo
{
char BNum[20]; // El número del libro prestado
char RetDate[8] // Fecha de devolución< / p>
struct Boro *next;
}Bor;
typedef struct LinkBook
{
Bor *next; // El acto de pedir prestado esta tarjeta de biblioteca
char CNum[20]; //número de tarjeta
int Total;//número de libros prestados
} lend [LIST_INIT_SIZE];//matriz de prestatarios
//información estructural sobre el libro
typedef struct LNode
{
char CardNum [20]; //Número de tarjeta de biblioteca
struct LNode *next;
}LinkList; //Préstamos
typedef struct book
{// Es necesario registrar cada tipo de libro, incluido el ISBN, el título del libro, el autor, la editorial, el inventario total y el inventario actual.
char num[20];//número de libro
char nombre[20];//título del libro
char auth[20];//autor
char pub[20];//editor
int TotNum;//stock total
int NowNum;//stock actual
LinkList *next;//Personas que han tomado prestado este libro
}ook[MAXSIZE];
int Retotal;//Número de lectores
int total ; //Definir variables externas.
Número de tipos de libros
//
//Inicialización de estructura
void InitBo(ook &boo) //Inicializar información del libro
{
for(int i=0;i { boo[ i].NowNum=0; boo[i].TotNum=0; boo[i].next=NULL; } } void InitRe (lend &Lin) //Inicializa la información del prestatario { > for(int i=0;i Lin[i] .next=NULL; } // int mid=0;//Función externa mid, utilizada para devolver la posición encontrada bool BinarySearch(ook boo,char SearchNum[]) //Número de libro de comparación de búsqueda binaria {//Utilice la función bool, pero como la función no puede tener dos valores de retorno, se establece una variable externa mid, usado para devolver la posición encontrada int low=0,high=total- 1; int found=0; while(low<= alto) { mid=(bajo+alto)/2; //punto medio if(strcmp(boo[mid].num,SearchNum )==0)//Mismo número de libro { encontrado=1; return true; }//Buscar exitosamente if(strcmp(boo[mid].num,SearchNum)!= 0) //El ISBN es diferente high=mid-1 else bajo =medio+1; } if(found==0) return false //encontrar falló } void Buy(boo & ; boo, char BuyNum[]) {/1. Compra e inventario: compra un libro nuevo, si el libro ya existe en el cuenta de libros, entonces su inventario aumentará (incluido //inventario total e inventario actual. Si el libro no existe, agregue un libro a la cuenta de libros y se obtendrán el inventario total y el inventario actual). 1. if(BinarySearch(boo,BuyNum)) //Si el libro existe en la cuenta del libro { boo[mid].TotNum++ // Inventario total más 1 boo[mid].NowNum++; //Inventario actual más 1 printf("Inventario exitoso. \n"); printf ("Se modificó información sobre el libro en la biblioteca. Número de libro %s, el autor es %s, el editor es %s, el inventario total actual es %d, el inventario actual es %d. \n",boo[mid].num,boo[mid].name,boo[mid].auth,boo[mid].pub,boo[mid].TotNum,boo[mid].NowNum); } if(!BinarySearch(boo.BuyNum))) { for(int i=total;i>mid&&total;i --) //Insertar en la posición apropiada Mantenerlo en orden boo[i]=boo[i-1] //Vaciar la posición de inserción printf("The El libro en la biblioteca no existe. Creando un libro nuevo. Complete los detalles del libro \n"); strcpy(boo[i].num,BuyNum); printf("El número de libros comprados es:"); scanf(" %d",&boo[i].NowNum); boo[ i].TotNum =boo[i] .NowNum; printf("El nombre del libro es:"); scanf(" %s",&boo[i] .name); printf("El autor del libro es:"); scanf(" %s",&boo[i].auth); printf); ("La editorial del libro es:"); scanf(" %s",&boo[i].pub);//completando la información boo[ i].next =NULL; total++;//total+1 printf("Información agregada sobre el libro. Número de libro %s autor es %s, editor es % s, el total actual el inventario es %d, el inventario actual es %d \n",boo[i].num,boo[i].name,boo[i].auth,boo[i].pub,boo[i. ].TotNum ,boo[i].NowNum); printf("Inventario exitoso.\n"); } } } void Delete(ook &boo,char DeleteNum[]) {//2, borrar inventario: un determinado tipo de libro ya no tiene valor de retención y se eliminará de la lista. reservar cuenta Cerrar sesión. if(BinarySearch(boo,DeleteNum)==false||total==0) if(BinarySearch(boo,DeleteNum))//si es así { if(!boo[mid].next) { for(int j=mid;j boo[j]=boo[j+1]; strcpy(boo[j].num,boo[j+1].num); strcpy(boo[j].nombre,boo[j+1].nombre); strcpy(boo[j].auth,boo[j+1] .auth); strcpy(boo[j].pub,boo[j+1].pub); boo[j].TotNum=boo[j+1].TotNum; boo[j].NowNum=boo[j+1].NowNum; printf("El libro se ha eliminado correctamente.\n"); } else printf("El libro tiene prestatarios y no se puede eliminar. \n"); } } } void Borrow(ook &boo,lend &Lin,char BorrowNum[],char CaNum[]) {/3. Préstamo de libros: si el inventario actual de un determinado libro es mayor que cero, pedir prestado un libro y restar el inventario actual menos 1, //Y registrar el número de tarjeta de biblioteca del prestatario y el período de devolución. Bor *p,*q; LinkList *m,*n; if(!BinarySearch(boo,BorrowNum)||total==0 )//Si no se encuentra el libro printf("No hay ningún libro en la biblioteca.\n");//Si existe este libro if(BinarySearch( boo,BorrowNum)) //Hay en la librería { if(boo[mid].NowNum>0) //Mira si nowNum es mayor que 0 { boo[mid].NowNum--;//Hay en la librería p=(Bor *)malloc(sizeof(Boro)); //Asignar espacio Lin[i].next=p; strcpy(p->BNum,BorrowNum); printf("Ingrese la fecha de devolución:"); scanf(" %s",&p->RetDate); p->next=NULL; Retotal++ //El número total de información de BorrowNum más 1. printf("Préstamo exitoso.\n"); } } else printf("Préstamo fallido. El libro ahora está disponible en 0.\n"); } } } void Return(ook &boo,lend &Lin,char ReturnNum[],char BorrowerNum[]) {/4. Devolución: Cancelar el registro del prestatario y cambiar el inventario actual de libros. Bor *p,*q; LinkList *m,*n; int flag=0;//Establecer un parámetro if(!BinarySearch(boo,ReturnNum)||!total) //No hay libro printf("No hay ningún libro en la biblioteca.\n"); if(BinarySearch(boo,ReturnNum)) //hay un libro { m=boo[mid].next; if(!strcmp (m->CardNum,BorrowerNum)) //si el primer prestatario lo devuelve { boo[mid].NowNum++ //ahora inventario más 1 boo[mid].next=m->next; //eliminar el nodo free(m); //liberar el espacio del nodo } else { while(m->next) //encuentra el nodo Prestatario del retornado { if(!strcmp(m->next->CardNum,BorrowerNum)) //si se encuentra { n=m->next; //n es el prestatario del que regresa. node m->next=n->next; //m apunta al siguiente nodo en el nodo prestatario del que regresa free(n); //libera el espacio boo[mid].NowNum++; //ahora inventario más 1 descanso; } m=m->next; } } } //Buscar información del prestatario en la tabla de prestatarios para (int i=0;i { if(! strcmp(Lin[i].CNum,BorrowerNum)) //si encuentra prestatario { p=Lin[i].next; if(!strcmp(p->BNum,ReturnNum)) //si se devuelve es el primer libro prestado { Lin[i].next=p->next; // Señala el siguiente nodo prestado free(p); printf("El libro se devolvió correctamente.\n"); flag=1; break; }< / p> else //no puedo encontrarlo { while(p->next) //busca el nodo de préstamo que No devolví el libro { if(!strcmp(p->next->BNum,ReturnNum)) //si se encuentra { q=p->next; //q es el nodo de préstamo del libro devuelto p->next=q->next; //p apunta al siguiente nodo de préstamo p> free(q); //Espacio libre printf("El libro se devolvió exitosamente.\n"); flag=1; pausa; } p=p->siguiente; } } } p> } } for(int k=0;k if(!Lin[k] .next ) { for(int j=k;j Lin[j]=Lin[j+1]; // Avanzar todos los siguientes uno, sobrescribiendo la información actual strcpy(Lin[j].CNum, " "); //Eliminar el número de tarjeta de la biblioteca Retotal -- ; //El número de tarjetas de la biblioteca menos 1 } If (!//elimina la información del estado actual de la tarjeta de la biblioteca a la que no se le ha prestado un libro para ahorrar espacio if(flag==0) printf("No hay información en esta tarjeta. \n"); } 5. Buscar: Implementación tres Buscar con una de las condiciones de búsqueda: Buscar por número de libro, /Buscar por título de libro, Buscar por autor Nota: La búsqueda combinada, es decir, la búsqueda por múltiples condiciones, no es posible. void SearchByNum(ook &boo,char SeaNum[]) {/BY NUM Búsqueda por número de libro LinkList *p; p=boo[mid].next; if( BinarySearch(boo,SeaNum)==false)printf("Lo sentimos, no se encontró el libro que estás buscando. Número de libro┃título┃autor ┃ Editorial┃Stock actual┃Stock total┃n"); printf("̈━━━━━━━╋━━━━━━━╋━━━━━━━━╋━ ━━━━━━━╋━━━━━╋━━━━━\n"); printf("̈%14s┃%14s┃%16s┃%16s┃%10d┃ %10d┃\n",boo[mid].num,boo[mid].name,boo[mid].auth,boo[mid].pub,boo[mid].NowNum,boo[mid].TotNum); printf("┗━━━━━━━┻━━━━━ ->siguiente; } printf("兾━━━ ━━━━兾兾n"); } } mientras(p) { printf(" %s ",p->CardNum);//El número de tarjeta del prestatario también se mostrará en la función de búsqueda del número de libro p=p->next; } printf(" \n"); }//Mostrar información sobre el libro buscado } void SearchByName(ook &boo) {/BY NAME Buscar por nombre char SeaName[20]; printf("Ingrese el nombre del libro que desea buscar:\n"); scanf(" %s",&SeaName); printf("Los detalles del libro que coincide con el nombre se encontraron de la siguiente manera: \n"); printf("Los detalles del libro que coincide con el nombre se encontraron de la siguiente manera: for(int i=0;i { if(strcmp(SeaName,boo[i].name)==0)//Si los nombres de los libros son iguales { p> printf("Número de libro: %s\nTítulo:%s\nAutor:%s\nEditorial:%s\nInventario total:%d\nInventario actual:%d\n",boo[i].num ,boo[ i].name,Sh[i].auth,Sh[i].pub,Sh[i].TotNum,Sh[i].NowNum); }//Mostrar todas las coincidencias información Información del libro } } void SearchByAuth(ook &boo) {// BY AUTH Búsqueda por autor char SeaAuth [20]; printf(" Ingrese el autor del libro que desea encontrar:\n"); scanf(" %s",&SeaAuth); printf("Los detalles del libro encontrado que coincide con este autor son los siguientes:\n"); for(int i=0;i { if(strcmp(SeaAuth,boo[i].auth)==0)//si el autor es el mismo { printf( "Número de libro: %s\nTítulo: %s\nAutor: %s\nEditorial: %s\nInventario total: %d\nInventario actual: %d\n\n",boo[i].num, boo[i] .name,boo[i].auth,boo[i].pub,boo[i].TotNum,boo[i].NowNum); }//Muestra todos los libros que coinciden con la información Información } } //6. Ver: puede ver todos los libros prestados por el prestatario con un determinado número de tarjeta de biblioteca, puede ver todos Libros vencidos. void ViewCard(ook &boo,lend &Lin) {//Ver todos los libros prestados por el prestatario de un determinado número de tarjeta de biblioteca char Num[ 20]; printf("Ingrese el número de la tarjeta de la biblioteca que desea ver:\n"); scanf(" %s",&Num); p> Bor *p; int qqq=0; for(int i=0;i { if(strcmp(Lin[i].CNum,Num) ==0)//encontrar esta tarjeta { printf("Los libros prestados con esta tarjeta son:\n"); p=Lin[i].next; while(p) { printf(" %s ",p->BNum); //Número de libro p> p=p->siguiente; } printf ("\n"); qqq=1; descanso; } } } if (qqq==0) printf("El certificado no existe.\n"); } void ViewBook(ook &boo,lend &Lin) {/Ver todos los libros vencidos char date[8]; Bor *p; printf("Ingrese la fecha (ingrese en formato 20060605):\n"); scanf(" %s",&date); printf( "Todos los libros vencidos tienen:\n"); for(int i=0;i { p=Lin[ i].next; while(p)//cuando p no está vacío { if(strcmp(p->RetDate,date)< 0)//overdate { printf("El número de libro es %s Número de certificado %s Debería ser La fecha de devolución es %s \n",p->BNum,Lin [i].CNum,p->RetDate); }//Mostrar información sobre todos los libros vencidos p=p->next; } } } } void Menu() //Menú { printf("Ciudad ------- ---------- M E N U--------- ------- ┓n"); printf("│ │\n"); │\n"); printf("│ Si el libro de cuentas no existe, agregue el tipo de cuenta en el libro mayor de cuentas, │\n"); printf("│ Tanto el inventario total como el inventario actual son números ingresados. │\n"); p> printf("│ 2. Inventario vacío: Cancelar de los libros de contabilidad los libros que ya no tienen valor de reserva. │\n"); printf("│ 3. Préstamo: Si un libro Si el inventario actual es mayor que cero, preste un libro y reduzca el inventario actual en uno, │\n"); printf("│ y registre el número de tarjeta de biblioteca del prestatario y el período de devolución │\ n"); printf("│ 4. Devolución: Cancelar el registro del prestatario y cambiar el inventario actual del libro. │\n"); printf( "│ 5. Buscar por número de libro │\n"); printf("│ 6. Buscar por título de libro. │n"); printf("│ 7. Buscar por autor │n"); printf("│ 8. Ver todos los libros prestados por un prestatario con un número de tarjeta de biblioteca. │\n"); printf. ( "│ 9. Ver todos los libros vencidos. │\n"); printf("│ 0. Salga del sistema de gestión de la biblioteca. │ \n"); printf("│ │ \n"); printf(":------ ------- Seleccione su Operaciones requeridas-- ---------- \n"); } void main() { ook Bo; prestar Lin; char BNum[20]; char CNum[20]; printf ("-------- --------------- ¡Bienvenido al sistema de gestión de bibliotecas! ------------------ ---------\n\n"); int elección=10; int SearchCho=10,ViewCho=10; while(choice!=0) { Menú ();//Mostrar el menú scanf(" %d",&choice); switch(choice) { caso 1://Recopilar y editar en la biblioteca printf("Por favor, ingrese el libro número del libro a ingresar a la biblioteca:"); scanf(" %s",BNum); Buy(Bo,BNum); break; caso 2: //borrar inventario printf("Ingrese el número del libro que desea borrar:"); scanf(" %s",BNum); Eliminar(Bo,BNum); romper; caso 3: //pedir prestado printf("Ingrese el número del libro que desea pedir prestado:\n"); scanf(" %s",&BNum); printf( "Ingrese el número de libro de la tarjeta de la biblioteca.:"); scanf(" %s",&CNum); Borrow(Bo,Lin,BNum,CNum); break; case 4://Return printf("Ingrese el número del libro que desea devolver:\n"); scanf(" %s",&BNum); printf("Por favor, introduzca el número de tarjeta de la biblioteca:"); scanf(" %s" ,&CNum); Return(Bo,Lin,BNum,CNum); break; case 5://find //buscar por número de libro < /p> printf("Ingrese el número del libro: ");//ingrese el número del libro a buscar scanf(" %s",&BNum); SearchByNum( Bo,BNum); break; case 6://Buscar por título de libro SearchByName(Bo); break ; caso 7://Buscar por autor SearchByAuth(Bo); break; caso 8://Ver todos los libros tomados prestados por una determinada tarjeta de libro ViewCard(Bo,Lin); break; caso 9: //Ver todos los libros vencidos ViewBook(Bo,Lin); break; caso 0://Salir del sistema exit(0);break; predeterminado: printf("¡Error de entrada!\n");salir(0);romper; } } } }