Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: kxxx en 30 Marzo 2017, 22:46 pm



Título: Disculpen la molestia alguien podria ayudarme a realizar este programa.
Publicado por: kxxx en 30 Marzo 2017, 22:46 pm
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.


Título: Re: Disculpen la molestia alguien podria ayudarme a realizar este programa.
Publicado por: engel lex en 30 Marzo 2017, 23:05 pm
que llevas hecho? que no sabes? donde tienes dudas?


Título: Re: Disculpen la molestia alguien podria ayudarme a realizar este programa.
Publicado por: kxxx en 31 Marzo 2017, 00:13 am
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
  1. #include <iostream>
  2. #include <string>
  3. #include <cstdlib>
  4. using namespace std;
  5. int const trabajador=50;
  6. int const dias=30;
  7.  
  8. struct nacimiento{
  9. int dia;
  10. int mes;
  11. int anyo;
  12. };
  13. struct datos {
  14. int id;
  15. string nombre;
  16. string domicilio;
  17. int CP;
  18. char sexo;
  19. nacimiento fecha;
  20. };
  21. void introducir (datos& reg);
  22. bool fecha (datos reg);
  23. int busca_id(datos reg[trabajador], int dni, int inicio, int final);
  24. void imprimirEmpleado (datos reg);
  25. void modificarDatos (datos& reg);
  26. void ordena_sele(datos reg[trabajador], int cont);
  27. void intercambia(int& a, int&b);
  28.  
  29. int main(void){
  30. int opc=1;
  31. datos empleados[trabajador];
  32. int contador_empleados=1;
  33. int job=0;
  34. char continua;
  35. int principio=1;
  36. while(opc!=0){
  37.  
  38. cout << "CONTROL DE PRESENCIA" << endl;
  39. cout << "1. Introducir/modificar datos de empleados " << endl;
  40. cout << "2. Horarios de entrada y salida " << endl;
  41. cout << "3. Consultar datos personal " << endl;
  42. cout << "4. Control laboral de personal " << endl;
  43. cout << "0. Salir " << endl;
  44. cout << "Seleccione una opcion: " <<endl;
  45. cin >> opc;
  46. switch(opc){
  47. case 1:
  48. {
  49. while(opc2!=0){
  50. system("cls"); //limpia la pantalla
  51. cout << "MENU DATOS" << endl;
  52. cout << "1. Introducir datos de empleados" << endl;
  53. cout << "2. Modificar datos de empleados" << endl;
  54. cout << "0. Volver a menu principal "<< endl;
  55. cout << "Seleccione una opcion: "<<endl;
  56. cin >> opc2;
  57.  
  58. switch(opc2){
  59.  
  60. case 1:
  61. {
  62. cout<<"Introduzca los datos del 1er empleado"<<endl;
  63. introducir (empleados[job]);
  64. cout<<"Si no desea introducir m·s datos pulse N"<<endl;
  65. cin>>continua;
  66. while(job<trabajador && continua!='N')
  67. { job++;
  68. contador_empleados++;
  69.  
  70. cout<<endl<<"Introduzca los datos del "<<job+1<<"o empleado"<<endl;
  71. introducir (empleados[job]);
  72. ordena_sele(empleados, contador_empleados);
  73. cout<<"Si no desea introducir mas datos pulse N"<<endl;
  74. cin>>continua;
  75. }
  76. }
  77. break;
  78.  
  79. case 2:
  80. {
  81. int dni;
  82. int pos;
  83. cout<<"Introduzca DNI del empleado que desee modificar(sin letra)"<<endl;
  84. cin>>dni;
  85.  
  86. pos = busca_id(empleados,dni, principio, contador_empleados);
  87. if (pos!=-1){
  88. cout<< "Los datos del empleado son:"<<endl;
  89. imprimirEmpleado(empleados[pos]);
  90. modificarDatos(empleados[pos]);
  91. }else{ cout <<"No existe empleado"<<endl;
  92. }
  93. }
  94. break;
  95. case 0:
  96.  
  97. break;
  98. default:
  99. cout << endl;
  100. cout << " La opcion es incorrecta, vuelva a seleccionar una opcion " << endl;
  101. cout << endl;
  102. break;
  103. }// fin switch
  104. }// fin while
  105. } // fin case 1 general
  106. break;
  107.  
  108. case 2:
  109. { int opc3=1;
  110. system("color 0C");
  111. while(opc3!=0){
  112. system("cls"); //limpia la pantalla
  113. cout << "MENU HORARIOS" << endl;
  114. cout << "Si desea introducir el horario de un trabajador pulse 1"<<endl;
  115. cout << "Si desea volver al menu principal pulse 0"<<endl;
  116. cout << "Seleccione una opcion: " <<endl;
  117. cin >> opc3;
  118.  
  119. switch(opc3){
  120. case 1:
  121.  
  122. break;
  123. case 0:
  124.  
  125. break;
  126. default:
  127. cout << endl;
  128. cout << " La opcion es incorrecta, vuelva a seleccionar una opcion " << endl;
  129. cout << endl;
  130. system ("pause");
  131. break;
  132. } //fi del switch
  133. }// fin del while
  134. } // fin case 2 general
  135. break;
  136.  
  137. case 3:
  138. {
  139. system("color 0D");
  140. char opc4='a';
  141. while(opc4!='0'){
  142. system("cls"); //limpia la pantalla
  143. cout << "CONSULTA DE DATOS" << endl;
  144. cout << "1. Un solo empleado por DNI " << endl;
  145. cout << "*. Todos los empleados (pulse ascerisco) " << endl;
  146. cout << "0. Para volver al menu principal " << endl;
  147. cout << "Seleccione una opcion: " <<endl;
  148. cin >> opc4;
  149. switch(opc4){
  150. case '1' :
  151. // buscar e introducir
  152. break;
  153. case '*':
  154. int job;
  155. for(job=0;job<=contador_empleados-1;job++){// si no relleno todos los trabajadores da error
  156. imprimirEmpleado(empleados[job]);
  157. }
  158. system ("pause");
  159. break;
  160.  
  161. case '0':
  162. break;
  163.  
  164. default:
  165. cout << endl;
  166. cout << "La opcion es incorrecta, vuelva a seleccionar una opcion " << endl;
  167. cout << endl;
  168. system ("pause");
  169. break;
  170. }//final while
  171. } //fi del switch
  172. }// fin case 3 general
  173. break;
  174.  
  175. case 4:
  176. { int opc5=1;
  177. while(opc5!=0){
  178. system("color 0E");
  179. system("cls"); //limpia la pantalla
  180. cout << "CONSULTA HORARIOS" << endl;
  181. cout << " 1. Consulta un dÌa " << endl;
  182. cout << " 2. Consulta la presencia de un empleado " << endl;
  183. cout << " 0. Volver menu pricipal " << endl;
  184. cout << "Seleccione una opcion: " <<endl;
  185. cin >> opc5;
  186.  
  187. switch(opc5){
  188. case 1:
  189. //buscar dÌa
  190.  
  191. break;
  192. case 2:
  193. //buscar dni y mostrar tabla de horarios
  194. break;
  195.  
  196. case 0:
  197. break;
  198.  
  199. default:
  200. cout << endl;
  201. cout << " La opcion es incorrecta, vuelva a seleccionar una opcion " << endl;
  202. cout << endl;
  203. system ("pause");
  204. break;
  205. } //fi del switch
  206. }// fin del while
  207. } // fin case 4 general
  208. break;
  209.  
  210. case 0:
  211. cout<<"Gracias por utilizar el servicio."<<endl;
  212. break;
  213.  
  214. default:
  215. cout << endl;
  216. cout << " La opcion es incorrecta, vuelva a seleccionar una opcion " << endl;
  217. cout << endl;
  218. system ("pause");
  219. } //fi del switch
  220. }//fin del loop general
  221. system("pause");
  222. } // fin main
  223. void introducir (datos& reg){
  224. string stub; //Para el "ignore"
  225. char stub2; //para la fecha
  226. cout<<endl <<"Introduzca DNI del trabajador (sin letra)" <<endl;
  227. cin >> reg.id;
  228. getline(cin, stub); //Esto es equivalente a cin.ignore()
  229. cout<<endl <<endl <<"Escriba el nombre y apellidos del trabajador "<<endl;
  230. getline(cin, reg.nombre);
  231. cout<<endl <<"Escriba domicilio del trabajador " <<endl;
  232. getline(cin, reg.domicilio);
  233. cout<<endl <<"Escriba codigo postal del trabajador " <<endl;
  234. cin >> reg.CP;
  235. cout<<endl<<"Introduzca fecha nacimiento del trabajador (dd/mm/aaaa)"<< endl;
  236. cin >> reg.fecha.dia;
  237. cin >> stub2 >> reg.fecha.mes;
  238. cin >> stub2 >> reg.fecha.anyo;
  239. while(!fecha(reg)){
  240. cout << "Fecha erronea. Introduzca de nuevo:" << endl;
  241. cin >> reg.fecha.dia;
  242. cin >> stub2 >> reg.fecha.mes;
  243. cin >> stub2 >> reg.fecha.anyo;
  244. }
  245. cout<<endl<<"Intruduzca el sexo del trabajador (m/h)" << endl;
  246. cin>>reg.sexo;
  247. while(reg.sexo!='m' && reg.sexo!='h')
  248. {
  249. cout<<"Letra incorrecta, introduzca m o h"<<endl;
  250. cin>>reg.sexo;
  251. }
  252. }
  253. bool fecha (datos reg){
  254. bool fecha_tra=true;
  255. if((reg.fecha.anyo>2007||reg.fecha.anyo<1947) || reg.fecha.mes>12 ){ //Los trabajadores no pueden tener menos de 16 aÒos
  256. fecha_tra=false;}
  257. else if ((reg.fecha.mes==4||reg.fecha.mes==6||reg.fecha.me s==9||reg.fecha.mes==11) && reg.fecha.dia<=30){
  258. fecha_tra=true;
  259. }else if (reg.fecha.mes==2 && reg.fecha.dia<=28){ //suponemos que los bisiestos no existen
  260. fecha_tra=true;
  261. } 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){
  262. fecha_tra=true;
  263. }else{fecha_tra=false;}
  264. return fecha_tra;
  265. }
  266. int busca_id(datos reg[trabajador], int dni, int inicio, int final){
  267. while(inicio<=final){
  268. int medio=(inicio+final)/2;
  269. if(dni<reg[medio].id){
  270. inicio=medio+1; // buscamos en la segunda mitad de la tabla
  271. }else if (dni>reg[medio].id){
  272. final=medio-1;}
  273. else
  274. return medio;
  275. }
  276. return -1;
  277. }
  278. void modificarDatos (datos& reg){
  279. string stub; //Para el "ignore"
  280. char stub2; //para la fecha
  281. int opc_acc;
  282. while(opc_acc!=0){
  283. system ("clear");
  284. cout << "MODIFICAR"<< endl;
  285. cout << "1. Nombre " << endl;
  286. cout << "2. DirecciÛn " << endl;
  287. cout << "3. Codigo postal" << endl;
  288. cout << "4. Fecha de nacimiento " << endl;
  289. cout << "5. Sexo " << endl;
  290. cout << "6. Eliminar datos trabajador"<<endl;
  291. cout << "0. Volver men? anterior" << endl;
  292. cout << "Seleccione una opcion: " <<endl;
  293. cin>>opc_acc;
  294. switch (opc_acc){
  295. case 1:{
  296. cout<<endl <<endl <<"Escriba el nombre y apellidos del trabajador "<<endl;
  297. getline(cin, reg.nombre);
  298. }
  299. break;
  300. case 2:{
  301. cout<<endl <<"Escriba domicilio del trabajador " <<endl;
  302. getline(cin, reg.domicilio);
  303. }
  304. break;
  305. case 3:{
  306. cout<<endl <<"Escriba codigo postal del trabajador " <<endl;
  307. cin >> reg.CP;
  308. }
  309. break;
  310. case 4:{
  311. cout<<endl<<"Introduzca fecha nacimiento del trabajador (dd/mm/aaaa)"<< endl;
  312. cin >> reg.fecha.dia;
  313. cin >> stub2 >> reg.fecha.mes;
  314. cin >> stub2 >> reg.fecha.anyo;
  315. while(!fecha(reg)){
  316. cout << "Fecha erronea. Introduzca de nuevo:" << endl;
  317. cin >> reg.fecha.dia;
  318. cin >> stub2 >> reg.fecha.mes;
  319. cin >> stub2 >> reg.fecha.anyo;
  320. }
  321. }
  322. break;
  323. case 5:{
  324. cout<<endl<<"Intruduzca el sexo del trabajador (m/h)" << endl;
  325. cin>>reg.sexo;
  326. while(reg.sexo!='m' && reg.sexo!='h')
  327. {
  328. cout<<"Letra incorrecta, introduzca m o h"<<endl;
  329. cin>>reg.sexo;
  330. }
  331. }break;
  332. case 6:
  333. // AcciÛn que elimine todo
  334. break;
  335. case 0:
  336. break;
  337. default:
  338. cout<<"Opcion incorrecta vuelva a elegir"<<endl;
  339. system ("pause");
  340. break;
  341. }
  342. }
  343. }
  344. void imprimirEmpleado (datos reg){
  345. cout<<"El empleado con dni "<< reg.id << " tiene los siguientes datos almacenados:"<<endl;
  346. cout<<"Nombre y apellidos: "<< reg.nombre<< endl;
  347. cout<<"Direccion: " << reg.domicilio <<" "<<reg.CP<<endl;
  348. cout<<"Fecha nacimiento: " <<reg.fecha.dia<<"/"<<reg.fecha.mes<<"/"<<reg.fecha.anyo<<endl;
  349. cout << "Sexo: "<< reg.sexo<<endl;
  350. }
  351. void ordena_sele(datos reg[trabajador], int cont){
  352. int i, j, posmin;
  353. for (i=0; i<cont-1; i++) {
  354. posmin=i;
  355. for (j=i+1; j<cont; j++) {
  356. if (reg[posmin].id>reg[j].id) posmin=j;
  357. }
  358. intercambia(reg[i].id,reg[posmin].id);
  359. }
  360. }
  361. void intercambia(int& a, int&b){
  362. int aux;
  363. aux=a; a=b; b=aux;
  364. }


· Los códigos deben ir en etiquetas GeSHi
· No se debe escribir en mayúsculas
>aquí las reglas del foro (http://foro.elhacker.net/reglas.htm)
-Engel Lex


Título: Re: Disculpen la molestia alguien podria ayudarme a realizar este programa.
Publicado por: engel lex en 31 Marzo 2017, 00:48 am
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


Título: Re: Disculpen la molestia alguien podria ayudarme a realizar este programa.
Publicado por: kxxx en 5 Abril 2017, 20:49 pm
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