Skip to content

Commit 35281ef

Browse files
authored
Merge pull request mouredev#4711 from hectorio23/hectorio23
#26 - C++
2 parents 103d36b + b691382 commit 35281ef

File tree

3 files changed

+523
-0
lines changed

3 files changed

+523
-0
lines changed
Lines changed: 200 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,200 @@
1+
// Autor: Héctor Adán
2+
// GitHub: https://github.com/hectorio23
3+
4+
#include <iostream>
5+
#include <string>
6+
#include <vector>
7+
#include <cstdlib>
8+
9+
/*
10+
* EJERCICIO:
11+
* Explora el "Principio SOLID de Responsabilidad Única (Single Responsibility
12+
* Principle, SRP)" y crea un ejemplo simple donde se muestre su funcionamiento
13+
* de forma correcta e incorrecta.
14+
*
15+
* DIFICULTAD EXTRA:
16+
* Desarrolla un sistema de gestión para una biblioteca. El sistema necesita
17+
* manejar diferentes aspectos como el registro de libros, la gestión de usuarios
18+
* y el procesamiento de préstamos de libros.
19+
* Requisitos:
20+
* 1. Registrar libros: El sistema debe permitir agregar nuevos libros con
21+
* información básica como título, autor y número de copias disponibles.
22+
* 2. Registrar usuarios: El sistema debe permitir agregar nuevos usuarios con
23+
* información básica como nombre, número de identificación y correo electrónico.
24+
* 3. Procesar préstamos de libros: El sistema debe permitir a los usuarios
25+
* tomar prestados y devolver libros.
26+
*/
27+
28+
class Book {
29+
public:
30+
std::string title;
31+
std::string author;
32+
int copies;
33+
34+
Book(const std::string& _title, const std::string& _author, int _copies) : title(_title), author(_author), copies(_copies) {}
35+
};
36+
37+
38+
class BookManager {
39+
private:
40+
std::vector<Book> books;
41+
42+
public:
43+
44+
void addBook() {
45+
std::system("clear");
46+
std::string title, author;
47+
int copies;
48+
std::cout << "Ingrese el título del libro: ";
49+
std::cin.ignore();
50+
std::getline(std::cin, title);
51+
std::cout << "Ingrese el autor del libro: ";
52+
std::getline(std::cin, author);
53+
std::cout << "Ingrese el número de copias: ";
54+
std::cin >> copies;
55+
books.push_back(Book(title, author, copies));
56+
std::cout << "Libro agregado exitosamente.\n";
57+
}
58+
59+
void listBooks() const {
60+
std::system("clear");
61+
if (books.empty()) {
62+
std::cout << "No hay libros disponibles.\n";
63+
return;
64+
}
65+
for (const auto& book : books) {
66+
std::cout << "Título: " << book.title << ", Autor: " << book.author << ", Copias: " << book.copies << std::endl;
67+
}
68+
}
69+
};
70+
71+
72+
class User {
73+
public:
74+
std::string name;
75+
long id;
76+
std::string email;
77+
78+
User(const std::string& n, long i, const std::string& e) : name(n), id(i), email(e) {}
79+
};
80+
81+
82+
class UserManager {
83+
private:
84+
std::vector<User> users;
85+
86+
public:
87+
void addUser() {
88+
std::system("clear");
89+
std::string name, email;
90+
long id;
91+
std::cout << "Ingrese el nombre del usuario: ";
92+
std::cin.ignore();
93+
std::getline(std::cin, name);
94+
std::cout << "Ingrese el ID del usuario: ";
95+
std::cin >> id;
96+
std::cout << "Ingrese el correo electrónico del usuario: ";
97+
std::cin.ignore();
98+
std::getline(std::cin, email);
99+
users.push_back(User(name, id, email));
100+
std::cout << "Usuario agregado exitosamente.\n";
101+
}
102+
103+
void listUsers() const {
104+
std::system("clear");
105+
if (users.empty()) {
106+
std::cout << "No hay usuarios registrados.\n";
107+
return;
108+
}
109+
for (const auto& user : users) {
110+
std::cout << "Nombre: " << user.name << ", ID: " << user.id << ", Correo: " << user.email << std::endl;
111+
}
112+
}
113+
};
114+
115+
116+
class LoanManager {
117+
public:
118+
void lendBook(UserManager& userManager, BookManager& bookManager) {
119+
std::system("clear");
120+
std::string bookTitle;
121+
long userId;
122+
std::cout << "Ingrese el ID del usuario: ";
123+
std::cin >> userId;
124+
std::cout << "Ingrese el título del libro a prestar: ";
125+
std::cin.ignore();
126+
std::getline(std::cin, bookTitle);
127+
128+
// Lógica de préstamo
129+
std::cout << "Libro '" << bookTitle << "' prestado al usuario ID " << userId << ".\n";
130+
}
131+
132+
void returnBook(UserManager& userManager, BookManager& bookManager) {
133+
std::system("clear");
134+
std::string bookTitle;
135+
long userId;
136+
std::cout << "Ingrese el ID del usuario: ";
137+
std::cin >> userId;
138+
std::cout << "Ingrese el título del libro a devolver: ";
139+
std::cin.ignore();
140+
std::getline(std::cin, bookTitle);
141+
142+
// Lógica de devolución
143+
std::cout << "Libro '" << bookTitle << "' devuelto por el usuario ID " << userId << ".\n";
144+
}
145+
};
146+
147+
void displayMenu() {
148+
// std::system("clear");
149+
std::cout << "******** Menú de la Biblioteca ********\n";
150+
std::cout << "[1] - Agregar un libro\n";
151+
std::cout << "[2] - Listar libros\n";
152+
std::cout << "[3] - Agregar un usuario\n";
153+
std::cout << "[4] - Listar usuarios\n";
154+
std::cout << "[5] - Prestar un libro\n";
155+
std::cout << "[6] - Devolver un libro\n";
156+
std::cout << "[7] - Salir\n";
157+
std::cout << "Seleccione una opción: ";
158+
}
159+
160+
161+
int main() {
162+
BookManager bookManager;
163+
UserManager userManager;
164+
LoanManager loanManager;
165+
int option;
166+
167+
do {
168+
displayMenu();
169+
std::cin >> option;
170+
171+
switch (option) {
172+
case 1:
173+
bookManager.addBook();
174+
break;
175+
case 2:
176+
bookManager.listBooks();
177+
break;
178+
case 3:
179+
userManager.addUser();
180+
break;
181+
case 4:
182+
userManager.listUsers();
183+
break;
184+
case 5:
185+
loanManager.lendBook(userManager, bookManager);
186+
break;
187+
case 6:
188+
loanManager.returnBook(userManager, bookManager);
189+
break;
190+
case 7:
191+
std::cout << "Saliendo del sistema...\n";
192+
break;
193+
default:
194+
std::cout << "Opción no válida. Intente de nuevo.\n";
195+
}
196+
197+
} while (option != 7);
198+
199+
return EXIT_SUCCESS;
200+
}
Lines changed: 194 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,194 @@
1+
// Autor: Héctor Adán
2+
// GitHub: https://github.com/hectorio23
3+
4+
"use strict";
5+
6+
/*
7+
* EJERCICIO:
8+
* Explora el "Principio SOLID de Responsabilidad Única (Single Responsibility
9+
* Principle, SRP)" y crea un ejemplo simple donde se muestre su funcionamiento
10+
* de forma correcta e incorrecta.
11+
*
12+
* DIFICULTAD EXTRA:
13+
* Desarrolla un sistema de gestión para una biblioteca. El sistema necesita
14+
* manejar diferentes aspectos como el registro de libros, la gestión de usuarios
15+
* y el procesamiento de préstamos de libros.
16+
* Requisitos:
17+
* 1. Registrar libros: El sistema debe permitir agregar nuevos libros con
18+
* información básica como título, autor y número de copias disponibles.
19+
* 2. Registrar usuarios: El sistema debe permitir agregar nuevos usuarios con
20+
* información básica como nombre, número de identificación y correo electrónico.
21+
* 3. Procesar préstamos de libros: El sistema debe permitir a los usuarios
22+
* tomar prestados y devolver libros.
23+
*/
24+
25+
const readline = require('readline');
26+
27+
class Book {
28+
constructor(title, author, copies) {
29+
this.title = title;
30+
this.author = author;
31+
this.copies = copies;
32+
}
33+
}
34+
35+
class BookManager {
36+
constructor() {
37+
this.books = [];
38+
}
39+
40+
addBook(rl, callback) {
41+
console.clear();
42+
rl.question('Ingrese el título del libro: ', (title) => {
43+
rl.question('Ingrese el autor del libro: ', (author) => {
44+
rl.question('Ingrese el número de copias: ', (copies) => {
45+
this.books.push(new Book(title, author, parseInt(copies)));
46+
console.log('Libro agregado exitosamente.');
47+
callback();
48+
});
49+
});
50+
});
51+
}
52+
53+
listBooks() {
54+
console.clear();
55+
if (this.books.length === 0) {
56+
console.log('No hay libros disponibles.');
57+
return;
58+
}
59+
this.books.forEach(book => {
60+
console.log(`Título: ${book.title}, Autor: ${book.author}, Copias: ${book.copies}`);
61+
});
62+
}
63+
}
64+
65+
class User {
66+
constructor(name, id, email) {
67+
this.name = name;
68+
this.id = id;
69+
this.email = email;
70+
}
71+
}
72+
73+
class UserManager {
74+
constructor() {
75+
this.users = [];
76+
}
77+
78+
addUser(rl, callback) {
79+
console.clear();
80+
rl.question('Ingrese el nombre del usuario: ', (name) => {
81+
rl.question('Ingrese el ID del usuario: ', (id) => {
82+
rl.question('Ingrese el correo electrónico del usuario: ', (email) => {
83+
this.users.push(new User(name, parseInt(id), email));
84+
console.log('Usuario agregado exitosamente.');
85+
callback();
86+
});
87+
});
88+
});
89+
}
90+
91+
listUsers() {
92+
console.clear();
93+
if (this.users.length === 0) {
94+
console.log('No hay usuarios registrados.');
95+
return;
96+
}
97+
this.users.forEach(user => {
98+
console.log(`Nombre: ${user.name}, ID: ${user.id}, Correo: ${user.email}`);
99+
});
100+
}
101+
}
102+
103+
class LoanManager {
104+
lendBook(rl, userManager, bookManager, callback) {
105+
console.clear();
106+
rl.question('Ingrese el ID del usuario: ', (userId) => {
107+
rl.question('Ingrese el título del libro a prestar: ', (bookTitle) => {
108+
// Lógica de préstamo
109+
console.log(`Libro '${bookTitle}' prestado al usuario ID ${userId}.`);
110+
callback();
111+
});
112+
});
113+
}
114+
115+
returnBook(rl, userManager, bookManager, callback) {
116+
console.clear();
117+
rl.question('Ingrese el ID del usuario: ', (userId) => {
118+
rl.question('Ingrese el título del libro a devolver: ', (bookTitle) => {
119+
// Lógica de devolución
120+
console.log(`Libro '${bookTitle}' devuelto por el usuario ID ${userId}.`);
121+
callback();
122+
});
123+
});
124+
}
125+
}
126+
127+
function displayMenu() {
128+
console.clear();
129+
console.log('******** Menú de la Biblioteca ********');
130+
console.log('[1] - Agregar un libro');
131+
console.log('[2] - Listar libros');
132+
console.log('[3] - Agregar un usuario');
133+
console.log('[4] - Listar usuarios');
134+
console.log('[5] - Prestar un libro');
135+
console.log('[6] - Devolver un libro');
136+
console.log('[7] - Salir');
137+
console.log('Seleccione una opción: ');
138+
}
139+
140+
function main() {
141+
const rl = readline.createInterface({
142+
input: process.stdin,
143+
output: process.stdout
144+
});
145+
146+
const bookManager = new BookManager();
147+
const userManager = new UserManager();
148+
const loanManager = new LoanManager();
149+
150+
function menu() {
151+
displayMenu();
152+
rl.question('', (option) => {
153+
switch (parseInt(option)) {
154+
case 1:
155+
bookManager.addBook(rl, menu);
156+
break;
157+
case 2:
158+
bookManager.listBooks();
159+
pause(menu);
160+
break;
161+
case 3:
162+
userManager.addUser(rl, menu);
163+
break;
164+
case 4:
165+
userManager.listUsers();
166+
pause(menu);
167+
break;
168+
case 5:
169+
loanManager.lendBook(rl, userManager, bookManager, menu);
170+
break;
171+
case 6:
172+
loanManager.returnBook(rl, userManager, bookManager, menu);
173+
break;
174+
case 7:
175+
console.log('Saliendo del sistema...');
176+
rl.close();
177+
break;
178+
default:
179+
console.log('Opción no válida. Intente de nuevo.');
180+
pause(menu);
181+
}
182+
});
183+
}
184+
185+
function pause(callback) {
186+
rl.question('Presione Enter para continuar...', () => {
187+
callback();
188+
});
189+
}
190+
191+
menu();
192+
}
193+
194+
main();

0 commit comments

Comments
 (0)