Programación en lenguaje C
¿Está bien C++?
Espera un momento, pedir un menú significa admitir MFC.
Si no te importa, prueba esto primero, este es el único que tienes a mano.
#include
#include
#include
const int BMAX=50 //Número máximo de libros
/ /Módulo de gestión de libros
//Libro de clase
libro de clase
{
público:
int no ; // Número del libro
char name[20]; // Nombre del libro
int b_flag //1 está en el estante, 2 está en préstamo
int b_del; //1 significa existencia, 2 significa eliminación
public:
book(){} //Constructor
void setno(int n)
{
no=n; //Valor del número del libro
}
int getno()
{
return no; //Devuelve el valor del número del libro
}
void setname(char na[])
{
strcpy(nombre, na); //Copia de cadena
}
char* getname()
{
return name; //Devuelve el nombre del libro
}
void borbook()
{
b_flag=2 ; //Pedir prestado un libro Bandera
}
void delbook()
{
b_del=2; /p>
}
void addbook(int no,char na[]) //Agregar función de libro
{
setno(no);
setname(na);
b_flag=1;
b_del=1;
}
}
//Clase de base de datos de libros
clase bdatabase
{
público:
libro btarray[BMAX] ; //Colección de libros
int top;
public:
bdatabase()
{
libro b;
top=-1;
fstream file("book.txt",ios::in); //Abre el archivo
while ( 1)
{
file.read((char *)&b,sizeof(b));
if (!file) break
top++;
btarray[top] = b;
}
file.close() //Cerrar el archivo
}
~bdatabase() //Destructor, escribe btarray[] en el archivo book.txt
{
fstream file("book.txt",ios::out) <; /p>
for (int i=0;i<=top;i++)
{
if (btarray[i].b_del==1)
file.write((char *)&btarray[i],sizeof(btarray[i]));
}
file.close(); >
}
void addbooks() //Agregar libros a la base de datos de libros
{
book bk;
int no;
char bname[20];
cout<<"Por favor, introduzca el ISBN: ";
cin>>no;
cout< cin>>bname; cout< bk. b_flag=1; bk.addbook(no, bname); top++; btarray[top]=bk; return; } int findbooks(int suffix) //Buscar libros, esta función se usa para pedir prestado libros, el sufijo es el subíndice de la matriz { int no; cout<<"Por favor, introduzca el número del libro: "; cin>>no; para (int i=0; i<=top; i++) { if(btarray[i].no==no && btarray[i].b_del==1) p> { devuelve i; } } devuelve -1; } int findbooks() //Buscar libros, esta función se utiliza para el mantenimiento de libros { int no; valor char [6]; cout<<"Por favor, introduzca el número del libro: "; cin>>no; for(int i= 0; yo<= a p; i++) { if(btarray[i].no==no && btarray[i].b_del==1) { if(btarray[i].b_flag==1) strcpy(valor,"en el estante"); if(btarray[i].b_flag==2) strcpy(valor ,"Préstamo"); cout<<"Número de libro: "< devuelve i; } } devuelve -1; } void editbooks() //Editar libros { int cur cur = findbooks(); /p> if (cur==-1) { cout<<"No existe tal libro"< return; } cout<<"Número de libro: "< cout<<"Por favor modifique los datos:"< cout< cin>>btarray[ cur]. nombre; return ; } void delbooks() //Eliminar libros { int cur; cur = buscarlibros(); if (cur==-1) { return; } if(btarray[cur].b_flag==2) // Determina si el libro se toma prestado al eliminar { cout< <"El libro ha sido prestado, devuélvalo antes de eliminarlo. "< retorno; } btarray[cur].b_del=2; retorno; } void listbooks() //Mostrar todos los libros { char value[6]; for (int i=0; i<=top; i++) { if(btarray[i].b_del==1) { p> p> if(btarray[i].b_flag==1) strcpy(valor,"en el estante"); if(btarray[i].b_flag==2) strcpy( valor, "Préstamo"); cout<<"Número de libro: "< } } retorno; } } //Módulo de gestión de lectores //Clase de lector clase de lector { público:< / p> int no; char name[20]; int r_del; //1 existe, 2 se elimina int r_bor; // 1 ha pedido prestado un libro, 2 no ha pedido prestado un libro book brbook; public: void addreader(int id, char na[] )//Agregar lectores { no = id; strcpy(name, na); r_del=1; /p> } void setbrbook(book bt) //Establecer la marca de préstamo de libros { brbook = bt; } p> libro getbrbook() { return brbook; //Devolver información de préstamo de libro } }; //Clase de base de datos del lector clase rdatabase { pública: lector rdarray[BMAX] ; int top; public: rdatabase() { lector rd; p> top=-1; fstream file("reader.txt",ios::in //Abrir archivo while (1) { file.read((char *)&rd,sizeof(rd)); ) romper; arriba++ rdarray[a] p]=rd; } file.close(); //Cerrar el archivo } ~rdatabase() //Destructor { fstream file("reader.txt",ios::out for (int i=0;i< =); top;i++) { if (rdarray[i].r_del==1) file.write((char *)&rdarray[i ] ,sizeof(rdarray[i])); } file.close(); } void addreaders(); //Agregar lector { lector rd; int no; char rname[20]; cout<<"Por favor, introduce tu número de estudiante: "; cin>>no; cout< cin>>rname; cout< rd.addreader(no, rname); rd.r_bor=2; top++; rdarray[top]=rd; return; } int findreaders( int suffix) //Buscar al lector Esta función se utiliza para pedir prestado y devolver libros. El sufijo del parámetro es el subíndice de la matriz { int no; cout<<"Ingrese el número de estudiante: "; cin >>no; for(int i=0; i<=top; i++) { if(rdarray[i] .no== no && rdarray[i].r_del==1) { return i; } } return -1; } int findreaders() //Buscar lectores, esta función se utiliza para operaciones de mantenimiento del lector { int no; char value[3]; cout<<"Ingrese su número de estudiante: "; cin>>no; for(int i=0; i<=top; i++) { if(rdarray[i].no= =no && rdarray[i ].r_del==1) { if(rdarray[i].r_bor==1) strcpy(valor,"pedir prestado"); if(rdarray[i].r_bor==2) strcpy(value,"Ninguno"); cout<<"Número de estudiante: "< return i; } p> } return -1; } void editreaders() //Editar información del lector { int cur; cur = findreaders(); if (cur==-1) { cout<<"Allí no existe tal estudiante"< return; } cout<<"Por favor modifique los datos:"< cout< cin>>rdarray[cur].nombre; return ; } void delreaders() //Eliminar lectores Si los lectores toman prestados libros, deben devolverlos antes de que puedan eliminarse { int cur cur = findreaders(); if (cur==-1) { return; > } if(rdarray[cur].r_bor==1) { cout<<"Este usuario ha pedido prestado un libro, por favor devuélvalo antes de devolverlo. Eliminar"< return; } rdarray[cur].r_del=2; return; } void listreaders() //Mostrar todos los lectores { char value[3]; for(int i=0; i<=top; i++) { if(rdarray[i].r_del==1) { if(rdarray[i].r_bor==1) strcpy(valor,"pedir prestado"); if(rdarray[i].r_bor== 2) strcpy(valor, "Ninguno"); cout<<"Número de estudiante: "< } } return; } } p> void bookjiemain() //Submenú de mantenimiento de libros { cout<<"|--------- ------ ------|"< cout<<"| Mantenimiento de libros|"< cout<<"| (1) Agregar|" < cout<<"| (2)Cambiar|"< cout<<"| < cout<<"| (4) Buscar |"< cout<<"| (5) Mostrar|"< cout <<"| (6) Volver al nivel anterior|"< cout<<"|-------------- ------- |"< } void Readerjiemian() //Submenú de mantenimiento del lector { cout<<" |---------------------|"< cout<<"| Mantenimiento del lector |"< cout<<"| (1) Agregar|"< cout<<"| (2) Cambiar|"< cout<<"| (3) Eliminar|"< cout<<"| (4) Buscar|"< cout<<"| (5) Mostrar|"< cout<<"| (6) Volver al nivel anterior|"< cout < <"|---------------------|"< } void mainjiemian() / /Interfaz principal { cout<<"*************************** *** *******************"< cout<<"* Sistema de gestión de biblioteca*"< cout<<"* *"< cout<<"* (1) Préstamo de libros*"< cout<<" * *" < cout<<"* (2) Devolver el libro*"< cout<<"* *"< cout<<"* (3) Gestión de biblioteca*"< cout<<"* *"< cout<< "* (4 ) Gestión de usuarios*"< cout<<"* *"< cout<<"* (0) Salir*"< cout&l t;<"************************************************ *"< } void lendtoreturn(char br) //Función de préstamo y devolución de libros. El parámetro br se utiliza para determinar si "pedir prestado" "Libro" o "Devolver el libro". 1 es "pedir prestado el libro", 2 es "devolver el libro" { int rdid=0; p> int bkid =0; int rsuffix, bsuffix; bdatabase t_bd; rdatabase t_rd; si (br=='1' ) //Pedir prestado libros { rsuffix=t_rd.findreaders(rdid); bsuffix=t_bd.findbooks(bkid ); if (rsuffix==-1 || bsuffix==-1) return; if(t_bd.btarray[bsuffix].b_flag ==2) { cout<<"El libro ha sido prestado, seleccione otro libro"< regresar; p> } if(t_rd.rdarray[rsuffix].r_bor==1) { cout<<"Ya has pedido prestado libros, devuélvalos primero antes de pedir prestados otros libros "< return; } t_bd.btarray[bsuffix].b_flag=2; t_rd.rdarray [rsuffix].r_bor=1; t_rd.rdarray[rsuffix].brbook=t_bd.btarray[bsuffix]; retorno; } p> if(br=='2') { rsuffix=t_rd.findreaders(rdid); p> bsuffix=t_bd.findbooks (bkid); if (rsuffix==-1 || bsuffix==-1 ) return; if(t_rd.rdarray[rsuffix] .brbook.no==t_bd.btarray[bsuffix].no) { t_bd.btarray[bsuffix].b_flag=1 ; t_rd.rdarray[rsuffix].r_bor=2; t_rd.rdarray[rsuffix].brbook=t_bd.btarray[bsuffix]; } else p> { cout<<"Vuelva a ingresar, el número del libro prestado por el lector es incorrecto"< regresar; } regresar; } } void booksmange() { char in bdatabase bd; hacer{ bookjiemain(); cin>>in; cambiar (in) { caso '1': bd.addbooks(); descanso; caso '2': bd.editbooks(); pausa; caso '3': bd.delbooks(); ruptura; caso '4': bd.findbooks(); ruptura; caso '5': bd.listbooks(); ruptura; caso '6': ruptura; predeterminado :cout<<"Error de entrada, vuelva a ingresar."< } } while(in!='6'); return; } void lectoresmange() { char in; rdatabase bd hacer{ lectorjiemian(); cin>>en; cambiar (en) { caso '1': bd.addreaders(); descanso; caso '2': p > bd.editreaders(); descanso; caso '3': bd.delreaders(); ruptura; caso '4': bd.findreaders(); ruptura; caso '5': bd.listreaders(); ruptura; caso '6': ruptura; default :cout<<"Error de entrada, vuelva a ingresar. "< } }mientras(en!='6'); retorno; } p> int main(int argc, char* argv[]) { char in; do{ mainjiemian(); p> cin>>en; cambiar (en) { caso '1': prestamoreturn( en); ruptura; caso '2': prestadotoreturn(en); ruptura; caso '3': booksmange(); descanso; caso '4': lectoresmange(); break; case '0': break; default:cout<<"Error de entrada, vuelva a ingresar . "< } }mientras(en!='0'); devuelve 0; }