Paso 1: Análisis de Requerimientos
Clases necesarias:
Jugador:
Atributos:
CI (Carnet de Identidad)
Nombre
Fecha de Nacimiento
Código de Equipo
Métodos:
Constructor
Métodos getters y setters
Equipo:
Atributos:
Código de Equipo
Nombre del Equipo
Métodos:
Constructor
Métodos getters y setters
Historial:
Atributos:
CI del Jugador
Código del Equipo
Métodos:
Constructor
Métodos getters y setters
Gestión del sistema:
Métodos:
Adicionar jugadores
Adicionar equipos
Cambiar un jugador de equipo
Mostrar historial de equipos de un jugador
Paso 2: Crear las Clases
Clase Jugador
cpp
Copiar código
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
class Jugador {
private:
int ci;
string nombre;
string fecha_nac;
int cod_equipo;
public:
Jugador() : ci(0), cod_equipo(0) {}
Jugador(int ci, string nombre, string fecha_nac, int cod_equipo)
: ci(ci), nombre(nombre), fecha_nac(fecha_nac), cod_equipo(cod_equipo) {}
int getCI() const { return ci; }
string getNombre() const { return nombre; }
string getFechaNac() const { return fecha_nac; }
int getCodEquipo() const { return cod_equipo; }
void setCodEquipo(int newCodEquipo) { cod_equipo = newCodEquipo; }
friend ostream& operator<<(ostream& os, const Jugador& jugador) {
os << "CI: " << [Link] << ", Nombre: " << [Link]
<< ", Fecha de Nac: " << jugador.fecha_nac
<< ", Cod Equipo: " << jugador.cod_equipo;
return os;
}
};
Clase Equipo
cpp
Copiar código
class Equipo {
private:
int cod_equipo;
string nombre_equipo;
public:
Equipo() : cod_equipo(0) {}
Equipo(int cod_equipo, string nombre_equipo)
: cod_equipo(cod_equipo), nombre_equipo(nombre_equipo) {}
int getCodEquipo() const { return cod_equipo; }
string getNombreEquipo() const { return nombre_equipo; }
friend ostream& operator<<(ostream& os, const Equipo& equipo) {
os << "Cod Equipo: " << equipo.cod_equipo
<< ", Nombre Equipo: " << equipo.nombre_equipo;
return os;
}
};
Clase Historial
cpp
Copiar código
class Historial {
private:
int ci;
int cod_equipo;
public:
Historial() : ci(0), cod_equipo(0) {}
Historial(int ci, int cod_equipo) : ci(ci), cod_equipo(cod_equipo) {}
int getCI() const { return ci; }
int getCodEquipo() const { return cod_equipo; }
friend ostream& operator<<(ostream& os, const Historial& historial) {
os << "CI: " << [Link] << ", Cod Equipo: " << historial.cod_equipo;
return os;
}
};
Paso 3: Funciones de Gestión
Adicionar un Jugador
cpp
Copiar código
void adicionarJugador() {
ofstream archivo("[Link]", ios::binary | ios::app);
if (!archivo) {
cerr << "Error al abrir el archivo de jugadores." << endl;
return;
}
int ci, cod_equipo;
string nombre, fecha_nac;
cout << "Ingrese CI: ";
cin >> ci;
[Link]();
cout << "Ingrese Nombre: ";
getline(cin, nombre);
cout << "Ingrese Fecha de Nacimiento (DD/MM/YYYY): ";
getline(cin, fecha_nac);
cout << "Ingrese Codigo de Equipo: ";
cin >> cod_equipo;
Jugador jugador(ci, nombre, fecha_nac, cod_equipo);
[Link](reinterpret_cast<char*>(&jugador), sizeof(Jugador));
cout << "Jugador agregado exitosamente." << endl;
[Link]();
}
Adicionar un Equipo
cpp
Copiar código
void adicionarEquipo() {
ofstream archivo("[Link]", ios::binary | ios::app);
if (!archivo) {
cerr << "Error al abrir el archivo de equipos." << endl;
return;
}
int cod_equipo;
string nombre_equipo;
cout << "Ingrese Codigo de Equipo: ";
cin >> cod_equipo;
[Link]();
cout << "Ingrese Nombre del Equipo: ";
getline(cin, nombre_equipo);
Equipo equipo(cod_equipo, nombre_equipo);
[Link](reinterpret_cast<char*>(&equipo), sizeof(Equipo));
cout << "Equipo agregado exitosamente." << endl;
[Link]();
}
Cambiar de Equipo
cpp
Copiar código
void cambiarEquipo() {
fstream archivo("[Link]", ios::binary | ios::in | ios::out);
ofstream historial("[Link]", ios::binary | ios::app);
if (!archivo || !historial) {
cerr << "Error al abrir los archivos." << endl;
return;
}
int ci, nuevo_cod_equipo;
cout << "Ingrese CI del Jugador: ";
cin >> ci;
cout << "Ingrese Nuevo Codigo de Equipo: ";
cin >> nuevo_cod_equipo;
Jugador jugador;
bool encontrado = false;
while ([Link](reinterpret_cast<char*>(&jugador), sizeof(Jugador))) {
if ([Link]() == ci) {
encontrado = true;
[Link](nuevo_cod_equipo);
[Link](-sizeof(Jugador), ios::cur);
[Link](reinterpret_cast<char*>(&jugador), sizeof(Jugador));
Historial hist(ci, nuevo_cod_equipo);
[Link](reinterpret_cast<char*>(&hist), sizeof(Historial));
break;
}
}
if (encontrado) {
cout << "Cambio de equipo realizado correctamente." << endl;
} else {
cout << "Jugador no encontrado." << endl;
}
[Link]();
[Link]();
}
Mostrar Historial de un Jugador
cpp
Copiar código
void mostrarHistorial() {
ifstream archivo("[Link]", ios::binary);
ifstream jugadores("[Link]", ios::binary);
ifstream equipos("[Link]", ios::binary);
if (!archivo || !jugadores || !equipos) {
cerr << "Error al abrir los archivos." << endl;
return;
}
int ci;
cout << "Ingrese CI del Jugador: ";
cin >> ci;
Jugador jugador;
while ([Link](reinterpret_cast<char*>(&jugador), sizeof(Jugador))) {
if ([Link]() == ci) {
cout << "Historial de " << [Link]() << ":" << endl;
break;
}
}
Historial hist;
while ([Link](reinterpret_cast<char*>(&hist), sizeof(Historial))) {
if ([Link]() == ci) {
Equipo equipo;
while ([Link](reinterpret_cast<char*>(&equipo), sizeof(Equipo)))
{
if ([Link]() == [Link]()) {
cout << [Link]() << endl;
}
}
[Link]();
[Link](0);
}
}
[Link]();
[Link]();
[Link]();
}
Este enfoque cubre todas las funcionalidades requeridas: adicionar jugadores,
equipos, gestionar el historial de cambios de equipos, y mostrar un reporte del
historial. Cada función es modular y trabaja directamente con los archivos
binarios.