Hola !!! me pueden ayudar a comentar un codigo que no entiendo en c++

Iniciado por Franck_Javi13, 10 Diciembre 2013, 15:11 PM

0 Miembros y 1 Visitante están viendo este tema.

Franck_Javi13

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

Sputnik_

Quizá en el subforo de C++ tendrás mejor suerte, y pon el código entre etiquetas para que se pueda leer mejor.

Saludos
Las personas lo suficientemente locas como para pensar que pueden cambiar el mundo son las que lo cambian.