Tomé prestada una pregunta de un compañero de clase en Baidu, pidiendo un diseño de curso de lenguaje C sobre procedimientos de préstamo de bibliotecas.
Esto no lo escribí yo, pero se puede utilizar si lo modifico. Espero eso ayude. . .
#include
#include
#include
/ /
#define MAXSIZE 100 //El valor máximo se define como 100
#define LIST_INIT_SIZE 100 //El valor máximo para usuarios de tarjetas de biblioteca se define como 100
// Estructura del prestatario
typedef struct Boro//Comportamiento del préstamo
{
char BNum[20];//Número de libro del préstamo
p>char RetDate[8];//Fecha de regreso
struct Boro *next;
}Bor;
typedef struct LinkBook
{
Bor *next;//Comportamiento de préstamo de esta tarjeta de biblioteca
char CNum[20];//Número de tarjeta
int Total ;//El número de libros prestados
}lend[LIST_INIT_SIZE];//Matriz de prestatarios
//Información de estructura de los libros
typedef struct LNode
{
char CardNum[20];//Número de tarjeta de biblioteca
struct LNode *next;
}LinkList;
typedef struct book
{//Los contenidos que deben registrarse para cada libro incluyen ISBN, título del libro, autor, editorial, inventario total e inventario actual.
char num[20];//número de libro
char nombre[20];//título del libro
char auth[20];//autor
char pub[20];//editorial
int TotNum;//inventario total
int NowNum;//inventario actual
LinkList *next;//Personas que tomaron prestado el libro
}ook[MAXSIZE];
//
int Retotal;//Número de lectores
int total; //Definir variables externas
//
//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 < LIST_INIT_SIZE;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[]) //Búsqueda binaria y número de libro de comparación { //Usa la función bool , pero como la función no puede tener dos valores de retorno, se configura una variable externa mid para devolver la posición encontrada int low=0,high=total-1; int found= 0; while(bajo<=alto) { mid=(bajo+alto)/2; //punto medio if(strcmp(boo[mid].num,SearchNum)==0) //Mismo número de libro { found=1; return true; }//Buscar correctamente if(strcmp(boo[mid].num,SearchNum)!=0)//El número de libro es diferente alto=medio-1; else bajo=medio+1 } if(found==0) return false; //Encontrar error } void Buy(ook &boo, char BuyNum[]) {/1. Compre un libro nuevo si el libro ya existe en la cuenta de libros, se aumentará su inventario (incluido el inventario total y el inventario actual). Si el libro no existe, se agrega un libro a la cuenta de libros y el inventario total. y el inventario actual son ambos 1. if(BinarySearch(boo,BuyNum)) //Si este libro está en la biblioteca { boo[mid].TotNum++ //Total; inventario Agregar 1 boo[mid].NowNum++ //Agregar 1 al inventario actual printf("Almacenamiento exitoso.\n"); printf ( "La información del libro en la biblioteca ha sido cambiada. El autor del libro %s con número %s es %s, el editor es %s, el inventario total actual es %d y 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 adecuada para mantener el orden boo[i]=boo[i-1] //Desocupar la posición de inserción printf("El libro está en la biblioteca no existe Para crear un nuevo libro, complete los detalles del libro \n"); strcpy(boo[i].num,BuyNum); printf("Esta La cantidad 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 de este libro es:"); scanf(" %s",&boo[i].auth); printf ("El editor de este libro sí: "); scanf(" %s",&boo[i].pub);//Información completa boo[i]. next=NULL; p> total++;//Monto total +1 printf("La información del libro ha sido agregada. El autor del libro %s con el número %s es % s, el editor es %s y el inventario total actual es %d y 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("Almacenamiento exitoso.\n"); } p> } void Delete(ook &boo,char DeleteNum[]) {/2. Borrar inventario: si un determinado libro no tiene valor de retención, escríbalo. fuera de la cuenta del libro if(BinarySearch(boo,DeleteNum)==false||total==0) //Si no existe tal libro printf("Hay no existe tal libro en la biblioteca.\n"); if(BinarySearch(boo,DeleteNum))//si existe { 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("Eliminación exitosa del libro.\n"); } else printf("Este libro tiene un prestatario y no se puede eliminar. \n"); } } void Borrow(ook &boo,lend &Lin,char BorrowNum[],char CaNum[]) {//3. Préstamo: si el inventario actual de un libro es mayor que cero, entonces preste un libro y reduzca el inventario actual en 1, //Y registre la tarjeta de biblioteca del prestatario. número y plazo de devolución. Bor *p,*q; LinkList *m,*n; if(!BinarySearch(boo,BorrowNum)||total==0 ) //Si no se encuentra este libro printf("Este libro no está en la biblioteca.