el código es de registro de personal aguien que me pueda explicar el funcionamiento del código, o que me pueda ayudar con otro mas sencillo gracias!!
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <string>
#include <vector>
#include <algorithm>
#include <conio.h>
#define CLEAR_SCREEN "cls"
using namespace std;
class Trabajador {
public:
int numero_de_empleado;
string apellidos;
string nombre;
int anno_de_nacimiento;
int mes_de_nacimiento;
int dia_de_nacimiento;
char sexo;
string estado_civil;
float sueldo;
string puesto;
string departamento;
Trabajador() {} // constructor
~Trabajador() {}
bool operator==(const Trabajador&trabajador) const
{
return this==&trabajador || this->numero_de_empleado==trabajador.numero_de_empleado;
}
bool operator!=(const Trabajador&trabajador) const
{
return this!=&trabajador && this->numero_de_empleado!=trabajador.numero_de_empleado;
}
bool operator<(const Trabajador&trabajador) const
{
return this->numero_de_empleado<trabajador.numero_de_empleado;
}
Trabajador &operator=(const Trabajador &trabajador)
{
if (this!=&trabajador)
{
this->numero_de_empleado = trabajador.numero_de_empleado;
this->apellidos =trabajador.apellidos;
this->nombre =trabajador.nombre;
this->anno_de_nacimiento =trabajador.anno_de_nacimiento;
this->mes_de_nacimiento =trabajador.mes_de_nacimiento;
this->dia_de_nacimiento =trabajador.dia_de_nacimiento;
this->sexo = trabajador.sexo;
this->estado_civil =trabajador.estado_civil;
this->sueldo =trabajador.sueldo;
this->puesto =trabajador.puesto;
this->departamento =trabajador.departamento;
}
return *this;
}
static void imprimir (Trabajador&trabajador, int *contador);
static void imprimir_en_archivo(Trabajador &trabajador, ostream*archivo);
};
void pausar (const char*mensaje);
string leer_cadena (const char*mensaje);
int leer_entero (const char*mensaje);
float leer_decimal (const char*mensaje);
char leer_caracter (const char*mensaje);
bool leer_campo (istream&archivo,char *campo, char delimitador);
const char *ruta = "trabajadores.tsv";
int main ()
{
vector<Trabajador> trabajadores;
vector<Trabajador>::iterator i;
Trabajador *dato, trabajador;
int contador=0, opcion, subopcion;
char campo[255];
ifstream entrada (ruta);
if (entrada!=NULL)
{
while (leer_campo (entrada,campo, '\t'))
{
trabajador.numero_de_empleado = atoi (campo); //
leer_campo (entrada, campo,'\t');
trabajador.apellidos = campo;leer_campo (entrada, campo,'\t');
trabajador.nombre = campo;
leer_campo (entrada, campo,'\t');
trabajador.anno_de_nacimiento = atoi(campo);
leer_campo (entrada, campo,'\t');
trabajador.mes_de_nacimiento = atoi(campo);
leer_campo (entrada, campo,'\t');
trabajador.dia_de_nacimiento= atoi (campo);
leer_campo (entrada, campo,'\t');
trabajador.sexo = campo[0];
leer_campo (entrada, campo,'\t');
trabajador.estado_civil =campo;
leer_campo (entrada, campo,'\t');
trabajador.sueldo = atof(campo);
leer_campo (entrada, campo,'\t');
trabajador.puesto = campo;
leer_campo (entrada, campo,'\n');
trabajador.departamento =campo;
trabajadores.push_back(trabajador);
}
entrada.close();
}
do {
system (CLEAR_SCREEN);
cout << "MENU" << endl;
cout << "1.- Altas" << endl;
cout << "2.- Consultas" << endl;
cout << "3.- Actualizaciones" <<endl;
cout << "4.- Bajas" << endl;
cout << "5.- Ordenar registros"<< endl;
cout << "6.- Listar registros" <<endl;
cout << "7.- Salir" << endl;
cout << "Seleccione una opcion:";
do
opcion = _getch ();
while (opcion<'1' || opcion>'7');
cout << (char)opcion << endl <<endl;
if (trabajadores.empty() &&opcion!='1' && opcion!='7')
{
pausar ("No hay registros.\n");
continue;
}
if (opcion<'5')
{
trabajador.numero_de_empleado = leer_entero ("Ingrese el numero deempleado del trabajador");
i = find (trabajadores.begin(),
trabajadores.end(), trabajador);
dato = i != trabajadores.end()? &trabajadores[i -trabajadores.begin()] : NULL;
if (dato!=NULL)
{
cout << endl;
Trabajador::imprimir (*dato,&contador);
}
}
if (opcion=='1' && dato!=NULL)
cout << "El registro ya existe."<< endl;
else if (opcion>='2' &&opcion<='4' && dato==NULL)
cout << endl << "Registro no encontrado." << endl;
else switch (opcion)
{
case '1':
trabajador.apellidos =leer_cadena ("Ingrese El Apellidos ");
trabajador.nombre =leer_cadena ("Ingrese El Nombre(s) ");
trabajador.anno_de_nacimiento =leer_entero ("Ingrese El año De Nacimiento (AAAA) ");
trabajador.mes_de_nacimiento =leer_entero ("Ingrese El Mes De Nacimiento (MM) ");
trabajador.dia_de_nacimiento =leer_entero ("Ingrese El Dia De Nacimiento (DD) ");
trabajador.sexo =leer_caracter ("Ingrese El Sexo H/M ");
trabajador.estado_civil =leer_cadena ("Ingrese El Estado Civil");
trabajador.sueldo =leer_decimal ("Ingrese El Sueldo ");
trabajador.puesto =leer_cadena ("Ingrese El Puesto ");
trabajador.departamento =leer_cadena ("Ingrese El Departamento ");
trabajadores.push_back(trabajador);
cout << endl << "Registro Agregado Correctamente." << endl;
break;
case '3':
cout << "Menu de modificacion de campos" <<endl;
cout << "1.- Apellidos" <<endl;
cout << "2.- Nombre(S)" <<endl;
cout << "3.- año De Nacimiento (AAAA)" << endl;
cout << "4.- Mes De Nacimiento (MM)" << endl;
cout << "5.- Dia De Nacimiento (DD)" << endl;
cout << "6.- Sexo H/M" << endl;
cout << "7.- estado civil" <<endl;
cout << "8.- sueldo" <<endl;
cout << "9.- puesto" <<endl;
cout << "10.- departamento"<< endl;
do {
subopcion = leer_entero("Seleccione un numero de campo a modificar");
if (subopcion<1 ||subopcion>10)
printf ("Opcion no valida.\n");
} while (subopcion<1 ||subopcion>10);
switch (subopcion)
{
case 1:
dato->apellidos =leer_cadena ("Ingrese el Nuevo Apellidos");
break;
case 2:
dato->nombre =leer_cadena ("Ingrese El Nuevo Nombre/s ");
break;
case 3:
dato->anno_de_nacimiento = leer_entero("Ingrese El Nuevo año Denacimiento (AAAA)");
break;
case 4:
dato->mes_de_nacimiento = leer_entero("Ingrese El Nuevo Mes De nacimiento (MM)");
break;
case 5:
dato->dia_de_nacimiento = leer_entero("Ingrese El Nuevo Dia De Nacimiento (DD)");
break;
case 6:
dato->sexo =leer_caracter ("Ingrese El Nuevo Sexo H/M");
break;
case 7:
dato->estado_civil =leer_cadena ("Ingrese El Nuevo Estado Civil ");
break;
case 8:
dato->sueldo = leer_decimal ("Ingrese El Nuevo Sueldo");
break;
case 9:
dato->puesto = leer_cadena ("Ingrese El Nuevo Puesto");
break;
case 10:
dato->departamento = leer_cadena ("Ingrese El Nuevo Departamento");
break;
}
cout << endl << "Registro Actualizado Correctamente." << endl;
break;
case '4':
trabajadores.erase (find(trabajadores.begin(),trabajadores.end(), *dato));
cout << "Registro Borrado Correctamente." << endl;
break;
case '5':
sort (trabajadores.begin(),trabajadores.end());
cout << "Registros, Ordenados Correctamente." << endl;
break;
case '6':
contador = 0;
for (i=trabajadores.begin();i!=trabajadores.end(); i++)
Trabajador::imprimir (*i,&contador);
cout << "Total De Registros: "<< contador << "." << endl;
break;
}
if (opcion!='7')
pausar ("");
} while (opcion!='7');
ofstream salida (ruta);
if (salida!=NULL)
{
for (i=trabajadores.begin(); i!=trabajadores.end(); i++)
Trabajador::imprimir_en_archivo (*i,&salida);
salida.close();
}
return EXIT_SUCCESS;
}
void Trabajador::imprimir (Trabajador&trabajador, int *contador) // funcion miembro imprimir
{
cout << "Num. De Empleado : "<< trabajador.numero_de_empleado<< endl;
cout << "Apellidos : " <<trabajador.apellidos.c_str() << endl;
cout << "Nombre(s) : " <<trabajador.nombre.c_str() << endl;
cout << "año De Nacimiento (AAAA) : " <<trabajador.anno_de_nacimiento <<endl;
cout << "Mes De Nacimiento (MM) : " <<trabajador.mes_de_nacimiento <<endl;
cout << "Dia De Nacimiento (DD) : " <<trabajador.dia_de_nacimiento <<endl;
cout << "Sexo H/M : " <<trabajador.sexo << endl;
cout << "Estado Civil : " <<trabajador.estado_civil.c_str() <<endl;
cout << "Sueldo : " <<trabajador.sueldo << endl;
cout << "Puesto : " <<trabajador.puesto.c_str() << endl;
cout << "Departamento : " <<trabajador.departamento.c_str() <<endl;
cout << endl;
(*contador)++;
}
void Trabajador::imprimir_en_archivo
(Trabajador &trabajador, ostream*archivo){
*archivo <<trabajador.numero_de_empleado <<"\t";
*archivo <<trabajador.apellidos.c_str() << "\t";
*archivo <<trabajador.nombre.c_str() << "\t";
*archivo <<trabajador.anno_de_nacimiento <<"\t";
*archivo <<trabajador.mes_de_nacimiento <<"\t";
*archivo <<trabajador.dia_de_nacimiento << "\t";
*archivo << trabajador.sexo << "\t";
*archivo <<trabajador.estado_civil.c_str() << "\t";
*archivo << trabajador.sueldo <<"\t";
*archivo << trabajador.puesto.c_str() << "\t";
*archivo <<trabajador.departamento.c_str() <<endl;
}
string leer_cadena (const char*mensaje)
{
char cadena[255];
cout << mensaje << ": ";
cin.get (cadena, sizeof (cadena),'\n');
cin.get();
string str(cadena);
return str;
}
int leer_entero (const char *mensaje)
{
int entero;
cout << mensaje << ": ";
cin >> entero;
cin.get();
return entero;
}
float leer_decimal (const char*mensaje)
{
float decimal;
cout << mensaje << ": ";
cin >> decimal;
cin.get();
return decimal;
}
char leer_caracter (const char*mensaje)
{
cout << mensaje << " : ";
char caracter = (char)cin.get();
cin.get();
return caracter;
}
bool leer_campo (istream &archivo,char *cadena, char delimitador)
{
archivo.get (cadena, 255,delimitador);
archivo.get();
return !archivo.eof();
}
void pausar (const char *mensaje)
{
cout << mensaje << endl <<"Presione Una Tecla Para Continuar . . ." << endl;
_getch ();
}
si me pueden ayudar con un código que haga lo mismo pero sea mas sencillo se los agradecería
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <string>
#include <vector>
#include <algorithm>
#include <conio.h>
#define CLEAR_SCREEN "cls"
using namespace std;
class Trabajador {
public:
int numero_de_empleado;
string apellidos;
string nombre;
int anno_de_nacimiento;
int mes_de_nacimiento;
int dia_de_nacimiento;
char sexo;
string estado_civil;
float sueldo;
string puesto;
string departamento;
Trabajador() {} // constructor
~Trabajador() {}
bool operator==(const Trabajador&trabajador) const
{
return this==&trabajador || this->numero_de_empleado==trabajador.numero_de_empleado;
}
bool operator!=(const Trabajador&trabajador) const
{
return this!=&trabajador && this->numero_de_empleado!=trabajador.numero_de_empleado;
}
bool operator<(const Trabajador&trabajador) const
{
return this->numero_de_empleado<trabajador.numero_de_empleado;
}
Trabajador &operator=(const Trabajador &trabajador)
{
if (this!=&trabajador)
{
this->numero_de_empleado = trabajador.numero_de_empleado;
this->apellidos =trabajador.apellidos;
this->nombre =trabajador.nombre;
this->anno_de_nacimiento =trabajador.anno_de_nacimiento;
this->mes_de_nacimiento =trabajador.mes_de_nacimiento;
this->dia_de_nacimiento =trabajador.dia_de_nacimiento;
this->sexo = trabajador.sexo;
this->estado_civil =trabajador.estado_civil;
this->sueldo =trabajador.sueldo;
this->puesto =trabajador.puesto;
this->departamento =trabajador.departamento;
}
return *this;
}
static void imprimir (Trabajador&trabajador, int *contador);
static void imprimir_en_archivo(Trabajador &trabajador, ostream*archivo);
};
void pausar (const char*mensaje);
string leer_cadena (const char*mensaje);
int leer_entero (const char*mensaje);
float leer_decimal (const char*mensaje);
char leer_caracter (const char*mensaje);
bool leer_campo (istream&archivo,char *campo, char delimitador);
const char *ruta = "trabajadores.tsv";
int main ()
{
vector<Trabajador> trabajadores;
vector<Trabajador>::iterator i;
Trabajador *dato, trabajador;
int contador=0, opcion, subopcion;
char campo[255];
ifstream entrada (ruta);
if (entrada!=NULL)
{
while (leer_campo (entrada,campo, '\t'))
{
trabajador.numero_de_empleado = atoi (campo); //
leer_campo (entrada, campo,'\t');
trabajador.apellidos = campo;leer_campo (entrada, campo,'\t');
trabajador.nombre = campo;
leer_campo (entrada, campo,'\t');
trabajador.anno_de_nacimiento = atoi(campo);
leer_campo (entrada, campo,'\t');
trabajador.mes_de_nacimiento = atoi(campo);
leer_campo (entrada, campo,'\t');
trabajador.dia_de_nacimiento= atoi (campo);
leer_campo (entrada, campo,'\t');
trabajador.sexo = campo[0];
leer_campo (entrada, campo,'\t');
trabajador.estado_civil =campo;
leer_campo (entrada, campo,'\t');
trabajador.sueldo = atof(campo);
leer_campo (entrada, campo,'\t');
trabajador.puesto = campo;
leer_campo (entrada, campo,'\n');
trabajador.departamento =campo;
trabajadores.push_back(trabajador);
}
entrada.close();
}
do {
system (CLEAR_SCREEN);
cout << "MENU" << endl;
cout << "1.- Altas" << endl;
cout << "2.- Consultas" << endl;
cout << "3.- Actualizaciones" <<endl;
cout << "4.- Bajas" << endl;
cout << "5.- Ordenar registros"<< endl;
cout << "6.- Listar registros" <<endl;
cout << "7.- Salir" << endl;
cout << "Seleccione una opcion:";
do
opcion = _getch ();
while (opcion<'1' || opcion>'7');
cout << (char)opcion << endl <<endl;
if (trabajadores.empty() &&opcion!='1' && opcion!='7')
{
pausar ("No hay registros.\n");
continue;
}
if (opcion<'5')
{
trabajador.numero_de_empleado = leer_entero ("Ingrese el numero deempleado del trabajador");
i = find (trabajadores.begin(),
trabajadores.end(), trabajador);
dato = i != trabajadores.end()? &trabajadores[i -trabajadores.begin()] : NULL;
if (dato!=NULL)
{
cout << endl;
Trabajador::imprimir (*dato,&contador);
}
}
if (opcion=='1' && dato!=NULL)
cout << "El registro ya existe."<< endl;
else if (opcion>='2' &&opcion<='4' && dato==NULL)
cout << endl << "Registro no encontrado." << endl;
else switch (opcion)
{
case '1':
trabajador.apellidos =leer_cadena ("Ingrese El Apellidos ");
trabajador.nombre =leer_cadena ("Ingrese El Nombre(s) ");
trabajador.anno_de_nacimiento =leer_entero ("Ingrese El año De Nacimiento (AAAA) ");
trabajador.mes_de_nacimiento =leer_entero ("Ingrese El Mes De Nacimiento (MM) ");
trabajador.dia_de_nacimiento =leer_entero ("Ingrese El Dia De Nacimiento (DD) ");
trabajador.sexo =leer_caracter ("Ingrese El Sexo H/M ");
trabajador.estado_civil =leer_cadena ("Ingrese El Estado Civil");
trabajador.sueldo =leer_decimal ("Ingrese El Sueldo ");
trabajador.puesto =leer_cadena ("Ingrese El Puesto ");
trabajador.departamento =leer_cadena ("Ingrese El Departamento ");
trabajadores.push_back(trabajador);
cout << endl << "Registro Agregado Correctamente." << endl;
break;
case '3':
cout << "Menu de modificacion de campos" <<endl;
cout << "1.- Apellidos" <<endl;
cout << "2.- Nombre(S)" <<endl;
cout << "3.- año De Nacimiento (AAAA)" << endl;
cout << "4.- Mes De Nacimiento (MM)" << endl;
cout << "5.- Dia De Nacimiento (DD)" << endl;
cout << "6.- Sexo H/M" << endl;
cout << "7.- estado civil" <<endl;
cout << "8.- sueldo" <<endl;
cout << "9.- puesto" <<endl;
cout << "10.- departamento"<< endl;
do {
subopcion = leer_entero("Seleccione un numero de campo a modificar");
if (subopcion<1 ||subopcion>10)
printf ("Opcion no valida.\n");
} while (subopcion<1 ||subopcion>10);
switch (subopcion)
{
case 1:
dato->apellidos =leer_cadena ("Ingrese el Nuevo Apellidos");
break;
case 2:
dato->nombre =leer_cadena ("Ingrese El Nuevo Nombre/s ");
break;
case 3:
dato->anno_de_nacimiento = leer_entero("Ingrese El Nuevo año Denacimiento (AAAA)");
break;
case 4:
dato->mes_de_nacimiento = leer_entero("Ingrese El Nuevo Mes De nacimiento (MM)");
break;
case 5:
dato->dia_de_nacimiento = leer_entero("Ingrese El Nuevo Dia De Nacimiento (DD)");
break;
case 6:
dato->sexo =leer_caracter ("Ingrese El Nuevo Sexo H/M");
break;
case 7:
dato->estado_civil =leer_cadena ("Ingrese El Nuevo Estado Civil ");
break;
case 8:
dato->sueldo = leer_decimal ("Ingrese El Nuevo Sueldo");
break;
case 9:
dato->puesto = leer_cadena ("Ingrese El Nuevo Puesto");
break;
case 10:
dato->departamento = leer_cadena ("Ingrese El Nuevo Departamento");
break;
}
cout << endl << "Registro Actualizado Correctamente." << endl;
break;
case '4':
trabajadores.erase (find(trabajadores.begin(),trabajadores.end(), *dato));
cout << "Registro Borrado Correctamente." << endl;
break;
case '5':
sort (trabajadores.begin(),trabajadores.end());
cout << "Registros, Ordenados Correctamente." << endl;
break;
case '6':
contador = 0;
for (i=trabajadores.begin();i!=trabajadores.end(); i++)
Trabajador::imprimir (*i,&contador);
cout << "Total De Registros: "<< contador << "." << endl;
break;
}
if (opcion!='7')
pausar ("");
} while (opcion!='7');
ofstream salida (ruta);
if (salida!=NULL)
{
for (i=trabajadores.begin(); i!=trabajadores.end(); i++)
Trabajador::imprimir_en_archivo (*i,&salida);
salida.close();
}
return EXIT_SUCCESS;
}
void Trabajador::imprimir (Trabajador&trabajador, int *contador) // funcion miembro imprimir
{
cout << "Num. De Empleado : "<< trabajador.numero_de_empleado<< endl;
cout << "Apellidos : " <<trabajador.apellidos.c_str() << endl;
cout << "Nombre(s) : " <<trabajador.nombre.c_str() << endl;
cout << "año De Nacimiento (AAAA) : " <<trabajador.anno_de_nacimiento <<endl;
cout << "Mes De Nacimiento (MM) : " <<trabajador.mes_de_nacimiento <<endl;
cout << "Dia De Nacimiento (DD) : " <<trabajador.dia_de_nacimiento <<endl;
cout << "Sexo H/M : " <<trabajador.sexo << endl;
cout << "Estado Civil : " <<trabajador.estado_civil.c_str() <<endl;
cout << "Sueldo : " <<trabajador.sueldo << endl;
cout << "Puesto : " <<trabajador.puesto.c_str() << endl;
cout << "Departamento : " <<trabajador.departamento.c_str() <<endl;
cout << endl;
(*contador)++;
}
void Trabajador::imprimir_en_archivo
(Trabajador &trabajador, ostream*archivo){
*archivo <<trabajador.numero_de_empleado <<"\t";
*archivo <<trabajador.apellidos.c_str() << "\t";
*archivo <<trabajador.nombre.c_str() << "\t";
*archivo <<trabajador.anno_de_nacimiento <<"\t";
*archivo <<trabajador.mes_de_nacimiento <<"\t";
*archivo <<trabajador.dia_de_nacimiento << "\t";
*archivo << trabajador.sexo << "\t";
*archivo <<trabajador.estado_civil.c_str() << "\t";
*archivo << trabajador.sueldo <<"\t";
*archivo << trabajador.puesto.c_str() << "\t";
*archivo <<trabajador.departamento.c_str() <<endl;
}
string leer_cadena (const char*mensaje)
{
char cadena[255];
cout << mensaje << ": ";
cin.get (cadena, sizeof (cadena),'\n');
cin.get();
string str(cadena);
return str;
}
int leer_entero (const char *mensaje)
{
int entero;
cout << mensaje << ": ";
cin >> entero;
cin.get();
return entero;
}
float leer_decimal (const char*mensaje)
{
float decimal;
cout << mensaje << ": ";
cin >> decimal;
cin.get();
return decimal;
}
char leer_caracter (const char*mensaje)
{
cout << mensaje << " : ";
char caracter = (char)cin.get();
cin.get();
return caracter;
}
bool leer_campo (istream &archivo,char *cadena, char delimitador)
{
archivo.get (cadena, 255,delimitador);
archivo.get();
return !archivo.eof();
}
void pausar (const char *mensaje)
{
cout << mensaje << endl <<"Presione Una Tecla Para Continuar . . ." << endl;
_getch ();
}
si me pueden ayudar con un código que haga lo mismo pero sea mas sencillo se los agradecería