Diseño de sistema de gestión de información de libro de formación en lenguaje C.
#include
#include
#include
# incluir
#include
#include
#define IZQUIERDA 0x4b00 /*izquierda*/
#define DERECHA 0x4d00 /*derecha*/
#define ABAJO 0x5000 /*abajo*/
#define ARRIBA 0x4800 /*superior*/ p>
p>
#define ESPACIO 0x3920 /*Espacio*/
#define ESC 0x011b /*Tecla ESC*/
#define ENTER 0x1c0d /*Enter key*/
#define Retroceso 0xe08 /*Borrar tecla*/
#define ALT_B 12288 /*Combinación de teclas ALT_B */
#define ALT_M 12800/ *Combinación de teclas ALT_M */
#define ALT_H 8960/*Combinación de teclas ALT_H */
int key;/*Clave variable*/
int textx, texty;/ *Coordenadas del cursor, fila x, columna y*/
struct menustruct/*Estructura del menú*/
{
nombre char[10] ; /*Nombre del menú principal*/
char str[10][20];/*Opciones*/
int n;/*Número de opciones*/
}ml[3];/*3 se utilizan y se pueden agregar o eliminar según sea necesario*/
typedef struct BookList/*La estructura del libro*/
{
char num[20];/*número de libro*/
char nombre[20];/*título del libro*/
precio int;/ *precio del libro* /
char person[20];/*Prestatario*/
int yes;/*Juzga si el libro existe o ha sido prestado, 1 existe, 0 tiene sido prestado*/
struct BookList *next
}Libro
typedef struct MemberList/*estructura de miembros*/
{
char name[20];/*Nombre del miembro*/
char sex[2];/*Género del miembro*/
int age;/* Edad del miembro*/
struct MemberList *next;
}Miembro;
char save[4096];/*Guardar espacio en el área de texto*/
/*char sav1[4096];*/
char c[4096];/*Espacio especial para borrar la pantalla*/
int i,j;/ *Variables de uso común*/
void Menu();/*Interfaz de inicialización*/
void Selectitem();/*Definir menú*/
void DrawSelectitem() ;/*Mostrar menú principal*/
void BlackText(
int x,int y,char *z);/*Menú seleccionado*/
void RedText(int x,int y,char *z);/*Menú normal*/
void Run();/*Proceso de operación detallado*/
void DrawMl(int n);/*Mostrar menú desplegable*/
void MoveMl(int n,int x) ;/*Control de opciones del menú*/
void Enter(int m,int n);/*Funciones específicas de las opciones del menú*/
void BookAdd();/ *Agregar libro*/
void BookConsult();/*Consulta de libro*/
void BookDel();/*Eliminar información del libro*/
void BookBorrow( );/*Pedir prestado libro*/
void BookReturn(); /*Devolver libro*/
void MemberAdd() /*Agregar miembro*/
void MemberConsult();/*Consultar miembros*/
void MemberDel(); /*Eliminar miembros*/
void MemberBook() /*Consultar información de préstamo de miembros * /
void Help(); /*Ayuda*/
void Ver() /*Información de versión*/
void ClrScr();/ * Función de borrar pantalla personalizada*/
void DrawFrame(int left,int up,int right,int down,int textcolor,int backgroundcolor);/*Dibujar borde*/
/ ***Función principal****/
void main(void)
{
Menú();/*Interfaz de inicialización*/
Ejecutar();/*Proceso de operación detallado*/
}
/*Interfaz de inicialización*/
void Menu()
{
system("cls"); /*Llamar al comando de limpieza de pantalla del sistema*/
textbackground(BLUE);/*Establecer el fondo en azul* /
window(1,1,25,80);
clrscr();
textx=3;/*Posición de inicialización del cursor*/ p >
texty=2;
gotoxy(1,2);
printf("%c",218);/*Dibuja la esquina superior izquierda*/ p >
for(i=0;i<78;i++)
printf("%c",196); /*Dibuja una línea recta horizontal*/
printf(" %c",191);/*Dibuja la esquina superior derecha*/
for(i=3;i<=23;i++)
{
gotoxy (1,i);
printf("%c",179); /*Dibujar una línea vertical*/
gotoxy(80,i);
printf("%c",179);
}
printf("%c",192); /*Dibuja la esquina inferior izquierda* /
for(i=0;i<78;i++)
printf("%c",196);
printf("%c"); ,217); /*Dibujar esquina inferior derecha*/
gotoxy(1,1
textcolo;
r(7); /*Establecer gris*/
for(i=0;i<80;i++)
cprintf("%c",219);/*Usar El símbolo realiza el dibujo del área de fondo gris del menú principal*/
Selectitem() /*Llamando a la función de opción*/
DrawSelectitem() /*Dibujando el option*/
gettext(2,3,78,23,c /*Guardar el área de texto actual*/
}
/*Definir menu*/
void Selectitem()
{
strcpy(ml[0].name,"Book");/*Las opciones específicas a continuación son lleno de espacios para que el fondo negro de cada menú sea el mismo */
strcpy(ml[0].str[0],"Add ");/*Add books*/
strcpy(ml[0].str[1] ,"Consultar ");/*Consultar libros*/
strcpy(ml[0].str[2],"Del "); /*Eliminar información del libro*/
strcpy(ml[0].str[3],"Préstamo ");/*Préstamo de libros*/
strcpy(ml[0] .str[4],"Return ");/*Devolver Libro*/
strcpy(ml[0].str[5],"Exit ");/*Salir del sistema*/ p>
ml[0].n=6; / *Guardar el número de elementos del menú*/
strcpy(ml[1].name,"Miembro"); p>strcpy(ml[1].str[0],"Agregar ");/*Agregar nuevo miembro*/
strcpy(ml[1].str[1],"Consultar "); /*Consultar información del miembro*/
strcpy( ml[1].str[2],"Del ");/*Eliminar información del miembro*/
strcpy(ml[1 ].str[3],"Miembro&libro ");
ml[1].n=4
strcpy(ml[2].name,"Ayuda");/ *Ayuda del sistema*/
strcpy(ml[ 2].str[0],"Este sistema "); Ver ");
ml[2]. n=2;
}
/*Mostrar nombre principal*/
void DrawSelectitem()
{
for(i=0;i<3;i++)
RedText(i,1,ml[i].nombre)
}
/*Mostrar menú normalmente*/
void RedText(int x; ,int y,char *z)
{
textbackground(7); /*Establece el color de fondo en gris claro*/
gotoxy(3+). x*20,y);
for(j =0;z[j];j++)
{
if(j==0)
textcolor(RED);/*primera letra Mostrar rojo*/
else
textcolor(BLACK); /*Establecer negro*/
cprintf("%c",z[j]); /*Nombre del menú de salida*/
}
}
/*Mostrar menú seleccionado */
voi
d BlackText(int x,int y,char *z)
{
textbackground(0 /*Establece el color de fondo en negro*/
textcolor (15); /*Establece el color del texto en blanco*/
gotoxy(3+20*x,y);/*Coordenadas de posicionamiento*/
cputs(z) ; / *Cadena de nombre del menú de salida*/
}
/*Proceso de operación clave*/
void Run()
{
mientras(1)
{
gotoxy(texty,textx
key=bioskey(0);/*Recibir); clave */
interruptor(tecla)
{
caso ALT_B:
caso ESC: DrawMl(0);romper; * Mostrar menú desplegable 1*/
case ALT_M: DrawMl(1);break;/*Mostrar menú desplegable 2*/
case ALT_H: DrawMl(2) ;/*Mostrar menú desplegable Menú 3*/
case UP: /*Control de operación de la tecla de cursor superior*/
{
if( textx==3)
textx=23;
textx--;
gotoxy(texty,textx); ;
case DOWN: /*Control de operación de la tecla del cursor inferior*/
{
if(textx==23)
textx=3;
textx++;
gotoxy(texty,textx);
}caso IZQUIERDA: /*Operación control de la tecla del cursor izquierdo*/ p>
{
if(texty==2)
texty=79; ;
gotoxy (texty,textx);
}break;
case Retroceso: /*Borrar configuración de clave*/
{
if(texty==2&&textx==3)
continuar
si no
{
si; (texty!=2)
texty--; /*Detalles de la tecla de borrado, primero borra la cosa y luego el cursor tiene que retroceder un espacio*/
else
if (texty==2)
{
texty=78
textx--; >}
gotoxy(texty,textx);
printf(" "
gotoxy(texty,textx);
}
}break;/*end case 0xe08*/
case RIGHT: /*Control de operación de la tecla del cursor derecho*/
{
if(texty== 79)
texty=2;
texty++;
gotoxy(texty,textx); }break;
case SPACE: /*Operación de la barra espaciadora*/
{
if(texty==79)
>continuar;
else
{
gotoxy(texty,textx); /*Operación detallada de espacios*/
printf( " ");
texty++;
gotoxy(texty,textx
}
}romper; p>case ENTER: /*Ingresar operación de control*/
{
if(textx==23)
continuar
textx++;
texty=2;
gotoxy(texty,textx);
}break; teclas sin control*/
{
if(texty==79&&textx==23)/*Ya no se genera salida al llegar al final*/
continuar
else
if(texty==79&&textx!=23) /*Hasta el final de la línea*/
{
textx++ ;
texty=2;
}
gotoxy(texty,textx);/*Resultado de salida*/
printf (" %c",clave);
if(texty==79) /*No ejecutar si texty==79*/
continuar; >else /*Si no se llega al final de la línea, continúa la ejecución y mueve el cursor una posición hacia adelante*/
texty++
}
}
}/*Tirantes para bucles grandes*/
}
/*Función de dibujo de marco*/
void DrawFrame(int l ,int u, int r,int d,int tcolor,int bcolor)
{
textbackground(bcolor /*Color de fondo*/
textcolor); (bcolor); /*Color del texto*/
for(i=l;i<=r;i++) /*Área de fondo de salida*/
{
for( j=u;j<=d;j++)
{
gotoxy(i,j);
printf("%c" ,219); /*Caracteres de fondo de salida*/
}
}
textcolor(tcolor);/*Color del borde*/
for( i=u+1;i { gotoxy(l,i); /p> cprintf("%c",179); /*línea vertical*/ gotoxy(r,i); cprintf("%c", 179); } for(i=l+1;i { gotoxi(i ,u); cprintf("%c",196); /*línea horizontal*/ gotoxy(i,d); cprintf( "%c", 196); } gotoxy(l,u cprintf("%c",218);/*superior); esquina izquierda*/ cprintf("%c",218); p> gotoxy(r,u); /p> cprintf("%c",191);/*esquina superior derecha*/ gotoxy(l,d); cprintf("%c" , 192);/*Esquina inferior izquierda*/ gotoxy(r,d); cprintf("%c",217); /p> /* gettext(l+1,u+1,r-1,d-1,save1);*//*Guardar el área dentro del borde*/ } /*Mostrar elementos de selección desplegable específicos*/ void DrawMl(int n) { gettext(1,1 ,80,25,save) ;/*Guardar el área enmascarada*/ BlackText(n,1,ml[n].name);/*Invertir la selección para mostrar el menú principal*/ DrawFrame(3+ 20*n-1,2,3+20*n+19,3+ml[n].n,0,7);/*El borde del menú desplegable */ for(i=3 ;i<3+ml[n].n;i++)/*Imprimir las opciones del menú seleccionadas*/ { if(i==3) BlackText(n,i,ml[n].str[i-3]);/*El primer elemento está seleccionado de forma predeterminada*/ else RedText(n, i,ml[n].str[i-3]);/*El primer carácter de los elementos restantes se muestra en rojo*/ } gotoxy(79,1); MoveMl(n,3);/*Control de opciones del menú*/ } /*Control de opciones del menú, n determina el elemento horizontal, x determina las opciones desplegables*/ void MoveMl(int n,int x) { int flag=1; mientras(bandera ) { gotoxy(79,1); > key=bioskey(0);/*Recibir clave*/ gotoxy(79,1); switch(key) { case ESC:/*Salir del bucle*/ puttext (1,1,80,25,save);/*Restaurar la forma en que estaba antes de abrir el menú*/ flag=0; break; case IZQUIERDA:/*Mover la opción hacia la izquierda*/ puttext(1, 1,80,25,save);/*Restaurar la forma en que estaba antes de abrir el menú*/ if( n==0)/*Si moverse hacia la izquierda está fuera de los límites, muévase a la última opción*/ DrawMl(2); else DrawMl(n- 1); flag=0; break; case DERECHA:/*Mover la opción a la derecha*/ puttext( 1,1,80,25,save);/ *Restaurar la forma en que estaba antes de abrir el menú*/ if(n==2)/*Si te mueves hacia la derecha y cruzas el límite, pasa a la primera opción*/ DrawMl(0); else DrawMl(n+1); bandera=0; case UP:/*Mover opciones específicas hacia arriba*/ RedText(n,x,ml[n].str[x-3]);/ *Salida de fuente roja* / if(x==3)/*Mover hacia arriba y presionar la tecla arriba para ir hacia abajo*/ x=3+ml [n]. n-1; else x--;/*Mover al nuevo contenido que se mostrará*/ BlackText(n,x,ml[ n ].str[x-3]);/*Fuente de salida negra*/ flag=1; break case DOWN:/* Específico; opciones moverse hacia abajo*/ RedText(n,x,ml[n].str[x-3]); .n-1))/*Mover hacia abajo y presionar la tecla para ir hacia arriba*/ x=3 else x++; ;/*Mover al nuevo contenido que se mostrará*/ BlackText(n,x,ml[n].str[x-3]); /p> break; case ENTER: puttext(1,1,80,25,save);/*Restaurar la forma en que estaba antes de abrir el menú* / Enter(n,x-3);/*Funciones específicas de las opciones del menú*/ flag=0 break } gotoxy(79,1); } } /*Funciones específicas de las opciones del menú*/ void Enter(int m,int n) { cambiar(m) { case 0:switch(n) /*Opción de menú Libro seleccionada*/ { case 0:BookAdd();break;/*Agregar libro*/ caso 1:BookConsult();break;/*Consulta de libro*/ caso 2:BookDel();break;/*Eliminar datos de un libro*/ caso 3 :BookBorrow();break;/*pedir prestado libro*/ caso 4:BookReturn();break;/*devolver libro*/ caso 5:exit(0 ); break; } break;/*Salir del sistema*/ caso 1: switch(n) /*Opción de menú de miembro seleccionada*/ { caso 0: MemberAdd();break;/*Agregar miembro*/ caso 1: MemberConsult();break;/*Consulta de miembro*/ caso 2:MemberDel();break;/*Eliminar la información de un miembro*/ caso 3:MemberBook();/*Consultar el estado de los libros prestados por un miembro*/ }break; caso 2:switch(n) /*Opción del menú Ayuda seleccionada*/ { caso 0:Help(); caso 1:Ver(); } }/*Fin del interruptor externo*/ }