Ver Mensaje Individual
  #5 (permalink)  
Antiguo 05/01/2013, 10:38
camyl1986
 
Fecha de Ingreso: enero-2013
Mensajes: 3
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Programa control de empleados

Código C++:
Ver original
  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. }

espero que así puedan ayudarme.
gracias