Título: Hola !!! me pueden ayudar a comentar un codigo que no entiendo en c++ Publicado por: Franck_Javi13 en 10 Diciembre 2013, 15:11 pm 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 Título: Re: Hola !!! me pueden ayudar a comentar un codigo que no entiendo en c++ Publicado por: Sputnik_ en 10 Diciembre 2013, 15:50 pm Quizá en el subforo de C++ tendrás mejor suerte, y pon el código entre etiquetas para que se pueda leer mejor.
Saludos |