Disculpen la molestia alguien podria ayudarme a realizar este programa.

Iniciado por kxxx, 30 Marzo 2017, 22:46 PM

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

kxxx

Desarrollarlo en lenguaje C++ utilizando sistema operativo Ubuntu. El programa deberá ingresar los datos de marcaje del empleado de una oficina, la cual trabaja en un horario definido de la siguiente manera:
a.   Entrada 8:00 de la mañana
b.   Salida 16:00 de la tarde
c.   Horario de almuerzo  12:00 a 13:00 al medio día.
ii.   Información General:
   Nombre completo
   Código de empleado
   Fecha
   Hora de Ingreso a laborar
   Hora de salida de su horario de almuerzo
   Hora de entrada de su horario de almuerzo
   Hora de salida de sus labores.
iii.   Requerimiento:
1.   El programa debe contener un ABC de la información.
2.   Los datos deben guardarse en un archivo llamado "Control.txt", el que se verificará al momento de la calificación, este debe ser un archivo directo.
3.   El programa debería permitir generar consultas de los campos en forma individual, y presentar en pantalla los datos de código de empleado, nombre y fecha consultada, así como el campo elegido para su consulta.

engel lex

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

kxxx

#2
fijate que un amigo me paso este programa similar para que lo revisara, lo estuve revisando por horas y me tira unos errores que no se como solucionarlos. y esto es lo que llevo



Código (cpp) [Seleccionar]
#include <iostream>
#include <string>
#include <cstdlib>
using namespace std;
int const trabajador=50;
int const dias=30;

struct nacimiento{
int dia;
int mes;
int anyo;
};
struct datos {
int id;
string nombre;
string domicilio;
int CP;
char sexo;
nacimiento fecha;
};
void introducir (datos& reg);
bool fecha (datos reg);
int busca_id(datos reg[trabajador], int dni, int inicio, int final);
void imprimirEmpleado (datos reg);
void modificarDatos (datos& reg);
void ordena_sele(datos reg[trabajador], int cont);
void intercambia(int& a, int&b);

int main(void){
int opc=1;
datos empleados[trabajador];
int contador_empleados=1;
int job=0;
char continua;
int principio=1;
while(opc!=0){

cout << "CONTROL DE PRESENCIA" << endl;
cout << "1. Introducir/modificar datos de empleados " << endl;
cout << "2. Horarios de entrada y salida " << endl;
cout << "3. Consultar datos personal " << endl;
cout << "4. Control laboral de personal " << endl;
cout << "0. Salir " << endl;
cout << "Seleccione una opcion: " <<endl;
cin >> opc;
switch(opc){
case 1:
{
while(opc2!=0){
system("cls"); //limpia la pantalla
cout << "MENU DATOS" << endl;
cout << "1. Introducir datos de empleados" << endl;
cout << "2. Modificar datos de empleados" << endl;
cout << "0. Volver a menu principal "<< endl;
cout << "Seleccione una opcion: "<<endl;
cin >> opc2;

switch(opc2){

case 1:
{
cout<<"Introduzca los datos del 1er empleado"<<endl;
introducir (empleados[job]);
cout<<"Si no desea introducir m·s datos pulse N"<<endl;
cin>>continua;
while(job<trabajador && continua!='N')
{ job++;
contador_empleados++;

cout<<endl<<"Introduzca los datos del "<<job+1<<"o empleado"<<endl;
introducir (empleados[job]);
ordena_sele(empleados, contador_empleados);
cout<<"Si no desea introducir mas datos pulse N"<<endl;
cin>>continua;
}
}
break;

case 2:
{
int dni;
int pos;
cout<<"Introduzca DNI del empleado que desee modificar(sin letra)"<<endl;
cin>>dni;

pos = busca_id(empleados,dni, principio, contador_empleados);
if (pos!=-1){
cout<< "Los datos del empleado son:"<<endl;
imprimirEmpleado(empleados[pos]);
modificarDatos(empleados[pos]);
}else{ cout <<"No existe empleado"<<endl;
}
}
break;
case 0:

break;
default:
cout << endl;
cout << " La opcion es incorrecta, vuelva a seleccionar una opcion " << endl;
cout << endl;
break;
}// fin switch
}// fin while
} // fin case 1 general
break;

case 2:
{ int opc3=1;
system("color 0C");
while(opc3!=0){
system("cls"); //limpia la pantalla
cout << "MENU HORARIOS" << endl;
cout << "Si desea introducir el horario de un trabajador pulse 1"<<endl;
cout << "Si desea volver al menu principal pulse 0"<<endl;
cout << "Seleccione una opcion: " <<endl;
cin >> opc3;

switch(opc3){
case 1:

break;
case 0:

break;
default:
cout << endl;
cout << " La opcion es incorrecta, vuelva a seleccionar una opcion " << endl;
cout << endl;
system ("pause");
break;
} //fi del switch
}// fin del while
} // fin case 2 general
break;

case 3:
{
system("color 0D");
char opc4='a';
while(opc4!='0'){
system("cls"); //limpia la pantalla
cout << "CONSULTA DE DATOS" << endl;
cout << "1. Un solo empleado por DNI " << endl;
cout << "*. Todos los empleados (pulse ascerisco) " << endl;
cout << "0. Para volver al menu principal " << endl;
cout << "Seleccione una opcion: " <<endl;
cin >> opc4;
switch(opc4){
case '1' :
// buscar e introducir
break;
case '*':
int job;
for(job=0;job<=contador_empleados-1;job++){// si no relleno todos los trabajadores da error
imprimirEmpleado(empleados[job]);
}
system ("pause");
break;

case '0':
break;

default:
cout << endl;
cout << "La opcion es incorrecta, vuelva a seleccionar una opcion " << endl;
cout << endl;
system ("pause");
break;
}//final while
} //fi del switch
}// fin case 3 general
break;

case 4:
{ int opc5=1;
while(opc5!=0){
system("color 0E");
system("cls"); //limpia la pantalla
cout << "CONSULTA HORARIOS" << endl;
cout << " 1. Consulta un dÌa " << endl;
cout << " 2. Consulta la presencia de un empleado " << endl;
cout << " 0. Volver menu pricipal " << endl;
cout << "Seleccione una opcion: " <<endl;
cin >> opc5;

switch(opc5){
case 1:
//buscar dÌa

break;
case 2:
//buscar dni y mostrar tabla de horarios
break;

case 0:
break;

default:
cout << endl;
cout << " La opcion es incorrecta, vuelva a seleccionar una opcion " << endl;
cout << endl;
system ("pause");
break;
} //fi del switch
}// fin del while
} // fin case 4 general
break;

case 0:
cout<<"Gracias por utilizar el servicio."<<endl;
break;

default:
cout << endl;
cout << " La opcion es incorrecta, vuelva a seleccionar una opcion " << endl;
cout << endl;
system ("pause");
} //fi del switch
}//fin del loop general
system("pause");
} // fin main
void introducir (datos& reg){
string stub; //Para el "ignore"
char stub2; //para la fecha
cout<<endl <<"Introduzca DNI del trabajador (sin letra)" <<endl;
cin >> reg.id;
getline(cin, stub); //Esto es equivalente a cin.ignore()
cout<<endl <<endl <<"Escriba el nombre y apellidos del trabajador "<<endl;
getline(cin, reg.nombre);
cout<<endl <<"Escriba domicilio del trabajador " <<endl;
getline(cin, reg.domicilio);
cout<<endl <<"Escriba codigo postal del trabajador " <<endl;
cin >> reg.CP;
cout<<endl<<"Introduzca fecha nacimiento del trabajador (dd/mm/aaaa)"<< endl;
cin >> reg.fecha.dia;
cin >> stub2 >> reg.fecha.mes;
cin >> stub2 >> reg.fecha.anyo;
while(!fecha(reg)){
cout << "Fecha erronea. Introduzca de nuevo:" << endl;
cin >> reg.fecha.dia;
cin >> stub2 >> reg.fecha.mes;
cin >> stub2 >> reg.fecha.anyo;
}
cout<<endl<<"Intruduzca el sexo del trabajador (m/h)" << endl;
cin>>reg.sexo;
while(reg.sexo!='m' && reg.sexo!='h')
{
cout<<"Letra incorrecta, introduzca m o h"<<endl;
cin>>reg.sexo;
}
}
bool fecha (datos reg){
bool fecha_tra=true;
if((reg.fecha.anyo>2007||reg.fecha.anyo<1947) || reg.fecha.mes>12 ){ //Los trabajadores no pueden tener menos de 16 aÒos
fecha_tra=false;}
else if ((reg.fecha.mes==4||reg.fecha.mes==6||reg.fecha.me s==9||reg.fecha.mes==11) && reg.fecha.dia<=30){
fecha_tra=true;
}else if (reg.fecha.mes==2 && reg.fecha.dia<=28){ //suponemos que los bisiestos no existen
fecha_tra=true;
} else if ((reg.fecha.mes==1||reg.fecha.mes==3||reg.fecha.me s==5||reg.fecha.mes==7||reg.fecha.mes==8||reg.fech a.mes==10||reg.fecha.mes==12) && reg.fecha.dia<=31){
fecha_tra=true;
}else{fecha_tra=false;}
return fecha_tra;
}
int busca_id(datos reg[trabajador], int dni, int inicio, int final){
while(inicio<=final){
int medio=(inicio+final)/2;
if(dni<reg[medio].id){
inicio=medio+1; // buscamos en la segunda mitad de la tabla
}else if (dni>reg[medio].id){
final=medio-1;}
else
return medio;
}
return -1;
}
void modificarDatos (datos& reg){
string stub; //Para el "ignore"
char stub2; //para la fecha
int opc_acc;
while(opc_acc!=0){
system ("clear");
cout << "MODIFICAR"<< endl;
cout << "1. Nombre " << endl;
cout << "2. DirecciÛn " << endl;
cout << "3. Codigo postal" << endl;
cout << "4. Fecha de nacimiento " << endl;
cout << "5. Sexo " << endl;
cout << "6. Eliminar datos trabajador"<<endl;
cout << "0. Volver men? anterior" << endl;
cout << "Seleccione una opcion: " <<endl;
cin>>opc_acc;
switch (opc_acc){
case 1:{
cout<<endl <<endl <<"Escriba el nombre y apellidos del trabajador "<<endl;
getline(cin, reg.nombre);
}
break;
case 2:{
cout<<endl <<"Escriba domicilio del trabajador " <<endl;
getline(cin, reg.domicilio);
}
break;
case 3:{
cout<<endl <<"Escriba codigo postal del trabajador " <<endl;
cin >> reg.CP;
}
break;
case 4:{
cout<<endl<<"Introduzca fecha nacimiento del trabajador (dd/mm/aaaa)"<< endl;
cin >> reg.fecha.dia;
cin >> stub2 >> reg.fecha.mes;
cin >> stub2 >> reg.fecha.anyo;
while(!fecha(reg)){
cout << "Fecha erronea. Introduzca de nuevo:" << endl;
cin >> reg.fecha.dia;
cin >> stub2 >> reg.fecha.mes;
cin >> stub2 >> reg.fecha.anyo;
}
}
break;
case 5:{
cout<<endl<<"Intruduzca el sexo del trabajador (m/h)" << endl;
cin>>reg.sexo;
while(reg.sexo!='m' && reg.sexo!='h')
{
cout<<"Letra incorrecta, introduzca m o h"<<endl;
cin>>reg.sexo;
}
}break;
case 6:
// AcciÛn que elimine todo
break;
case 0:
break;
default:
cout<<"Opcion incorrecta vuelva a elegir"<<endl;
system ("pause");
break;
}
}
}
void imprimirEmpleado (datos reg){
cout<<"El empleado con dni "<< reg.id << " tiene los siguientes datos almacenados:"<<endl;
cout<<"Nombre y apellidos: "<< reg.nombre<< endl;
cout<<"Direccion: " << reg.domicilio <<" "<<reg.CP<<endl;
cout<<"Fecha nacimiento: " <<reg.fecha.dia<<"/"<<reg.fecha.mes<<"/"<<reg.fecha.anyo<<endl;
cout << "Sexo: "<< reg.sexo<<endl;
}
void ordena_sele(datos reg[trabajador], int cont){
int i, j, posmin;
for (i=0; i<cont-1; i++) {
posmin=i;
for (j=i+1; j<cont; j++) {
if (reg[posmin].id>reg[j].id) posmin=j;
}
intercambia(reg[i].id,reg[posmin].id);
}
}
void intercambia(int& a, int&b){
int aux;
aux=a; a=b; b=aux;
}



· Los códigos deben ir en etiquetas GeSHi
· No se debe escribir en mayúsculas
>aquí las reglas del foro
-Engel Lex

engel lex

te explico vamos a ayudarte a resolver tus dudas... si no indicas dudas, hay poco que podamos hacer...

el programa tiene errores simples, todo lo que tienes que hacer es leer lo que te dice el compilador e ir a la linea y letra del error

el primer error que es el unico "real" a primera vista es que creaste opc2 de la nada y no está definido, ya tienes un opc definido que no usas...

de resto si hay errores de logica es poco probable que alguien por gusto se ponga a revisar un programa de 364 lineas mal identado y sin comentarios... así que indica que no sabes o que error tienes
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

kxxx

ok agradezco tu comentario, esque la verda me cuesta muchisimo programar y te soy sincero no se ni como empezar y por eso recurri a esta ayuda.... Saludos