elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Agenda telefonica
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Agenda telefonica  (Leído 3,376 veces)
Marsi

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Agenda telefonica
« en: 1 Junio 2020, 10:33 am »

Hola, ayudenme por favor, tengo que modificar un numero de contacto en el case 2 aportando el numero telefonico (contactos[count].tel) en el case 1 ya lo tengo pero no se como poder modificarlo en el case 2, como lo pido y lo edito si esta guarado en contactos[count].tel, he tartado pero no me sale llego asta ahí, suponiendo que tengo muchos numeros y el programa lo tiene que buscar luego modificar, en el case 1 tambien tengo que agregar si deseo poner otro contacto mas, soy nueva programando y no entiendo muy bien :(  :-(

Código
  1. int main()
  2. {
  3. int count;
  4. int i = 0;
  5. int opc, telefono;
  6.  
  7. do
  8. {
  9. system("cls");
  10. printf("PIA\n");
  11. printf("Programa para hacer una agenda usando Archivos\n");
  12. printf("Elija una opcion.\n");
  13. printf("1. Crear Contacto\n");
  14. printf("2. Actualizar Contacto\n");
  15. printf("3. Eliminar Contacto\n");
  16. printf("4. Salir\n");
  17. scanf("%d", &opc);
  18.  
  19. switch(opc)
  20. {
  21. case 1:
  22. {
  23. system("cls");
  24.  
  25. printf("Escriba '0' si no quiere escribir algo.\n");
  26. printf("Telefono : ");
  27. scanf("%d", &contactos[count].tel);
  28. printf("Apellido Paterno: ");
  29. fflush(stdin);
  30. scanf("%[^\n]", &contactos[count].AP);
  31. printf("Apellido Materno: ");
  32. fflush(stdin);
  33. scanf("%[^\n]", &contactos[count].AM);
  34. printf("Nombre (usa '_' para separar nombres): ");
  35. fflush(stdin);
  36. scanf("%[^\n]", &contactos[count].Nombre);
  37. printf("Telefono fijo: ");
  38. fflush(stdin);
  39. fflush(stdin);
  40. scanf("%[^\n]", &contactos[count].email);
  41. printf("Sitio web: ");
  42. fflush(stdin);
  43. scanf("%[^\n]", &contactos[count].sitio_web);
  44. printf("Notas (usa '_' para separar palabras): ");
  45. fflush(stdin);
  46. scanf("%[^\n]", &contactos[count].Notas);
  47. printf("Empresa (usa '_' para separar palabras): ");
  48. fflush(stdin);
  49. scanf("%[^\n]", &contactos[count].Empresa);
  50. printf("Cargo (usa '_' para separar palabras): ");
  51. fflush(stdin);
  52. scanf("%[^\n]", &contactos[count].Cargo);
  53.  
  54. pf = fopen("Archivo.BIN", "at");
  55. if(pf == NULL)
  56. {
  57. printf("\nNo se pudo abrir el archivo.");
  58. getch();
  59. return -1;
  60. }
  61.  
  62.  
  63. fprintf(pf, "%s ", contactos[count].Nombre);
  64. fprintf(pf, "%s ", contactos[count].AP);
  65. fprintf(pf, "%s ", contactos[count].AM);
  66. fprintf(pf, "%ld ", contactos[count].tel);
  67. fprintf(pf, "%s ", contactos[count].email);
  68. fprintf(pf, "%s ", contactos[count].sitio_web);
  69. fprintf(pf, "%s ", contactos[count].Notas);
  70. fprintf(pf, "%s ", contactos[count].Empresa);
  71. fprintf(pf, "%s\n", contactos[count].Cargo);
  72. fclose(pf);
  73.  
  74. printf("\nContacto agregado correctamente.\n");
  75. printf("Este es el numero de contacto guardado %d.", contactos[count].tel);
  76. getch();
  77. break;
  78. }
  79. case 2:
  80. {
  81. system("cls");
  82.  
  83. printf("Inserte el numero del contacto a modificar: ");
  84. fflush(stdin);
  85. scanf("%ld", &telefono);


MOD: Utiliza etiquetas de Código GeSHi para colocar fragmentos de código


« Última modificación: 1 Junio 2020, 11:42 am por YreX-DwX » En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: Agenda telefonica
« Respuesta #1 en: 1 Junio 2020, 11:47 am »

Visto que todas mis recomendaciones anteriores fueron ignoradas, me limitaré a decirte el procedimiento que tienes que seguir:
Código:
PEDIR telefono
indice := 0
MIENTRAS indice < contactosTotales && telefono != contactos[indice].telefono HACER
  indice := indice + 1
FIN MIENTRAS
// Si indice = contactosTotales, el numero buscado no existe
SI telefono = contactos[indice].telefono ENTONCES
  PEDIR nuevoTelefono
  contactos[indice].telefono = nuevoTelefono
FIN SI
Ahora tienes que adaptar este psedocódigo a tu problema mirando a ver cómo puedes representar las variables que aparecen.
Suerte. :-X


En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
Marsi

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: Agenda telefonica
« Respuesta #2 en: 1 Junio 2020, 23:37 pm »

depsues de mucho intentos tuve que modificar y empezar de nuevo el codigo para tenerlo mas claro, pero ahora el problema es que no se guardan los contactos, solo guarda el ultimo y en la opción dos de modificar en el listado de numeros guardados solo aparece el ultimo ingresado no los demás
Código
  1. include<stdio.h>
  2. #include<conio.h>
  3.  
  4. struct contacto
  5. {
  6. int Numero_registrado, activo;
  7. long int tel;
  8. char nom[10],AP[10],AM[10],correo[20], empresa[30],puesto[15],sito_web[30],notas[30];
  9. }contact[30];
  10. int no_reg=0;
  11.  
  12.  
  13. int main()
  14. {
  15.  
  16. }
  17. menu()
  18. {
  19. int opc;
  20.        printf("Elija una opcion.\n");
  21. printf("1. Crear Contacto\n");
  22. printf("2. Actualizar Contacto\n");
  23. printf("3. Eliminar Contacto\n");
  24. printf("4. Salir\n");
  25. scanf("%d", &opc);
  26. while(opc<1||opc>4)
  27. {
  28. printf("\a\n\t\tERROR\n");
  29. system("pause");
  30. system("cls");
  31.        printf("Elija una opcion.\n");
  32. printf("1. Crear Contacto\n");
  33. printf("2. Actualizar Contacto\n");
  34. printf("3. Eliminar Contacto\n");
  35. printf("4. Salir\n");
  36. scanf("%d", &opc);
  37. fflush(stdin);
  38. }
  39. system("cls");
  40. switch(opc)
  41. {
  42. case 1:
  43. CrearContacto();
  44. break;
  45. case 2:
  46. ActualizarContacto();
  47. break;
  48. case 3:
  49. EliminarContacto();
  50. break;
  51. case 4:
  52. return 0;
  53. break;
  54. }
  55. }
  56.  
  57. CrearContacto()
  58.  
  59.  
  60. {
  61. int crear;
  62.  
  63. printf("AGREGAR CLIENTE\n\n");
  64. contact[no_reg].activo=1;
  65. contact[no_reg].Numero_registrado= no_reg+1;
  66. printf("Ingrese el telefono (a 8 digitos): ");
  67. scanf("%ld",&contact[no_reg].tel);
  68. fflush(stdin);
  69. printf("\n\t\t*EL NUMERO DE TELEFONO HA SIDO REGISTRADO CORRECTAMENTE*\n");
  70. printf("\nIngrese el apellido paterno: ");
  71. gets(contact[no_reg].AP);
  72. fflush(stdin);
  73. strupr(contact[no_reg].AP);
  74. printf("Ingrese el appelido materno: ");
  75. gets(contact[no_reg].AM);
  76. fflush(stdin);
  77. strupr(contact[no_reg].AM);
  78. printf("Ingrese el nombre: ");
  79. gets(contact[no_reg].nom);
  80. fflush(stdin);
  81. strupr(contact[no_reg].nom);
  82. printf("Ingrese el E-mail: ");
  83. gets(contact[no_reg].correo);
  84. fflush(stdin);
  85. strupr(contact[no_reg].correo);
  86. printf("Ingrese su sitio web: ");
  87. gets(contact[no_reg].sito_web);
  88. fflush(stdin);
  89. strupr(contact[no_reg].sito_web);
  90. printf("Ingrese su puesto: ");
  91. gets(contact[no_reg].puesto);
  92. fflush(stdin);
  93. strupr(contact[no_reg].puesto);
  94. printf("Ingrese el nombre de la empresa: ");
  95. gets(contact[no_reg].empresa);
  96. fflush(stdin);
  97. strupr(contact[no_reg].empresa);
  98. printf("Ingrese alguna nota: ");
  99. gets(contact[no_reg].notas);
  100. fflush(stdin);
  101. strupr(contact[no_reg].notas);
  102.  
  103. system("cls");
  104. printf("Los Datos Registrados son: \n");
  105. printf("\n\nTelefono: ");
  106. printf("%ld",contact[no_reg].tel);
  107. printf("\nNumero de registo del cliente: %d\n",contact[no_reg].Numero_registrado);
  108. printf("Apellido paterno:");
  109. puts(contact[no_reg].AP);
  110. printf("Apellido materno:");
  111. puts(contact[no_reg].AM);
  112. printf("Nombre del cliente:");
  113. puts(contact[no_reg].nom);
  114. printf("E-mail:");
  115. puts(contact[no_reg].correo);
  116. printf("Sitio web:");
  117. puts(contact[no_reg].sito_web);
  118. printf("Nota:");
  119. puts(contact[no_reg].notas);
  120. printf("Empresa:");
  121. puts(contact[no_reg].empresa);
  122. printf("Puesto:");
  123. puts(contact[no_reg].puesto);
  124. printf("\n\n¿Desea agregar otro contacto?:    ");
  125.    printf("2)Si.");
  126. printf("1)No.\n");
  127. scanf("%d",&crear);
  128. system("cls");
  129.  
  130.  
  131. while(crear<1||crear>2)
  132. {
  133. printf("\a\t\tERROR\n");
  134. system("pause");
  135. system("cls");
  136. printf("\nEL telefono: ");
  137. printf("%ld",contact[no_reg].tel);
  138. printf("El El numero de registro del cliente es: %d\n",contact[no_reg].Numero_registrado);
  139. printf("El apellido paterno es:\n");
  140. puts(contact[no_reg].AP);
  141. printf("El apellido materno es:\n");
  142. puts(contact[no_reg].AM);
  143. printf("El nombre del cliente es:\n");
  144. puts(contact[no_reg].nom);
  145. printf("El correo es:\n");
  146. puts(contact[no_reg].correo);
  147. printf("El sitio web es:\n");
  148. puts(contact[no_reg].sito_web);
  149. printf("Nota:\n");
  150. puts(contact[no_reg].notas);
  151. printf("La empresa es:\n");
  152. puts(contact[no_reg].empresa);
  153. printf("El puesto es:\n");
  154. puts(contact[no_reg].puesto);
  155.     printf("\n\n¿Desea agregar otro contacto?:    ");
  156.        printf("2)Si.");
  157.     printf("    1)No.\n");
  158. scanf("%d",&crear);
  159. system("cls");
  160. }
  161. if(crear==1)
  162. {
  163. printf("\nLOS DATOS HAN SIDO REGISTRADOS CORRECTAMENTE");
  164. no_reg++;
  165. printf("\n");
  166. menu();
  167. }
  168. else
  169. {
  170. CrearContacto();
  171. }
  172. }
  173. ActualizarContacto()
  174. {
  175. int m,i;
  176. long int telefono;
  177. printf("\nACTUALIZAR CONTACTO\n");
  178. printf("\n\n\t\t\tCONTACTOS EXISTENTES\n\t");
  179. printf("\tTELEFONO\t\tNOMBRE\n\t\t");
  180. for(i=0;i<50;i++)
  181. {
  182. if(contact[i].activo==1)
  183. {
  184. printf("%lld",contact[i].tel);
  185. printf("\t\t%s",contact[i].nom);
  186. }
  187. }
  188. printf("\n\nIngrese el telefono del contacto a actualizar\n");
  189. scanf("%lld",&telefono);
  190. fflush(stdin);
  191. system("cls");
  192. for(i=0;i<50;i++)
  193. {
  194. m=0;
  195. if(telefono==contact[i].tel)
  196. {
  197. printf("\n\n\t\t\tCONTACTO ENCONTRADO\n\n\n\n\n\n\n");
  198. system("pause");
  199. system("cls");
  200. printf("\nEL telefono: ");
  201. printf("%lld",contact[i].tel);
  202. printf("\n\nEl Id del cliente es: %d\n",contact[no_reg].Numero_registrado);
  203. printf("\n\nEl apellido paterno es:\n");
  204. puts(contact[i].AP);
  205. printf("\n\nEl apellido materno es:\n");
  206. puts(contact[i].AM);
  207. printf("\n\nEl nombre del cliente es:\n");
  208. puts(contact[i].nom);
  209. printf("\n\nEl correo es:\n");
  210. puts(contact[i].correo);
  211. printf("\n\nEl sitio web es:\n");
  212. puts(contact[i].sito_web);
  213. printf("\n\nNota:\n");
  214. puts(contact[i].notas);
  215. printf("\n\nLa empresa es:\n");
  216. puts(contact[i].empresa);
  217. printf("\n\nEl puesto es:\n");
  218. puts(contact[i].puesto);
  219. system("pause");
  220. system("cls");
  221. ActualizarC(i);
  222. break;
  223. }
  224. else
  225. {
  226. m=1;
  227. }
  228. }
  229. if(m==1)
  230. {
  231. printf("\n\n\t\t\tTELEFONO NO ENCONTRADO\n\n\n\n\n\n\n");
  232. system("pause");
  233. system("cls");
  234. menu();
  235. }
  236. }
  237. ActualizarC(int i)
  238. {
  239. int x,y;
  240. printf("\n\n\t\t\tACTUALIZAR CLIENTE\n\n\n\n\n\n\n");
  241. system("pause");
  242. system("cls");
  243. fflush(stdin);
  244. printf("Ingrese el telefono (celular de 10 digitos o local + lada): ");
  245. scanf("%lld",&contact[i].tel);
  246. fflush(stdin);
  247. printf("\t\t\t\n\n\n\nCONTACTO REGISTRADO\n\n\n");
  248. //apellido paterno
  249. printf("Ingrese el apellido paterno: ");
  250. gets(contact[i].AP);
  251. fflush(stdin);
  252. strupr(contact[i].AP);
  253. //apellido materno
  254. printf("Ingrese el appelido materno: ");
  255. gets(contact[i].AM);
  256. fflush(stdin);
  257. strupr(contact[i].AM);
  258. //nombre
  259. printf("Ingrese el nombre: ");
  260. gets(contact[i].nom);
  261. fflush(stdin);
  262. strupr(contact[i].nom);
  263. //correo
  264. printf("Ingrese el correo: ");
  265. gets(contact[i].correo);
  266. fflush(stdin);
  267. strupr(contact[i].correo);
  268. //sitio web
  269. printf("Ingrese su sitio web: ");
  270. gets(contact[i].sito_web);
  271. fflush(stdin);
  272. strupr(contact[i].sito_web);
  273. //puesto
  274. printf("Ingrese su puesto: ");
  275. gets(contact[i].puesto);
  276. fflush(stdin);
  277. strupr(contact[i].puesto);
  278. //empresa
  279. printf("Ingrese el nombre de la empresa: ");
  280. gets(contact[i].empresa);
  281. fflush(stdin);
  282. strupr(contact[i].empresa);
  283. //notas
  284. printf("Ingrese alguna nota: ");
  285. gets(contact[i].notas);
  286. fflush(stdin);
  287. strupr(contact[no_reg].notas);
  288.  
  289. //Imprimir datos
  290. system("cls");
  291. printf("\nEL telefono: ");
  292. printf("%lld",contact[i].tel);
  293. printf("\n\nEl Id del cliente es: %d\n",contact[i].Numero_registrado);
  294. printf("\n\nEl apellido paterno es:\n");
  295. puts(contact[i].AP);
  296. printf("\n\nEl apellido materno es:\n");
  297. puts(contact[i].AM);
  298. printf("\n\nEl nombre del cliente es:\n");
  299. puts(contact[i].nom);
  300. printf("\n\nEl correo es:\n");
  301. puts(contact[i].correo);
  302. printf("\n\nEl sitio web es:\n");
  303. puts(contact[i].sito_web);
  304. printf("\n\nNota:\n");
  305. puts(contact[i].notas);
  306. printf("\n\nLa empresa es:\n");
  307. puts(contact[i].empresa);
  308. printf("\n\nEl puesto es:\n");
  309. puts(contact[i].puesto);
  310. //verificar datos
  311. printf("\n\n\t\tIngrese:\n\n\t1)Si los datos son correctos.\n\t2)Si los datos son incorrectos.");
  312. scanf("%d",&x);
  313. system("cls");
  314. while(x<1||x>2)
  315. {
  316. printf("\n\t\t\tERROR\n\n");
  317. system("pause");
  318. system("cls");
  319. printf("\n\nEL telefono:\n");
  320. printf("%lld",contact[i].tel);
  321. printf("\n\nEl Id del cliente es: %d\n",contact[i].Numero_registrado);
  322. printf("\n\nEl apellido paterno es:\n");
  323. puts(contact[i].AP);
  324. printf("\n\nEl apellido materno es:\n");
  325. puts(contact[i].AM);
  326. printf("\n\nEl nombre del cliente es:\n");
  327. puts(contact[i].nom);
  328. printf("\n\nEl correo es:\n");
  329. puts(contact[i].correo);
  330. printf("\n\nEl sitio web es:\n");
  331. puts(contact[i].sito_web);
  332. printf("\n\nNota:\n");
  333. puts(contact[i].notas);
  334. printf("\n\nLa empresa es:\n");
  335. puts(contact[i].empresa);
  336. printf("\n\nEl puesto es:\n");
  337. puts(contact[i].puesto);
  338. //verificar datos
  339. printf("\n\n\t\tIngrese:\n\n\t1)Si los datos son correctos.\n\t2)Si los datos son incorrectos.");
  340. scanf("%d",&x);
  341. system("cls");
  342. }
  343. if(x==1)
  344. {
  345. system("cls");
  346. printf("\n\t\t\tCONTACTO ACTUALIZADO");
  347. menu();
  348. }
  349. else
  350. {
  351. ActualizarC(i);
  352. }
  353. }
  354. EliminarContacto()
  355. {
  356. int x,i,m,y;
  357. long long int telefono;
  358. printf("\n\n\t\t\tELIMINAR CONTACTO\n\n\n\n\n\n\n");
  359. system("pause");
  360. system("cls");
  361. printf("\n\n\t\t\tCONTACTOS EXISTENTES\n\t");
  362. printf("\tTELEFONO\t\tNOMBRE\n\t\t");
  363. for(i=0;i<50;i++)
  364. {
  365. if(contact[i].activo==1)
  366. {
  367. printf("%lld",contact[i].tel);
  368. printf("\t\t%s",contact[i].nom);
  369. }
  370. }
  371. printf("\t\nINGRESE EL TELEFONO DEL CONTACTO A ELIMINAR\n\n");
  372. scanf("%lld",&telefono);
  373. fflush(stdin);
  374. system("cls");
  375. for(i=0;i<50;i++)
  376. {
  377. m=0;
  378. if(telefono==contact[i].tel)
  379. {
  380. printf("\n\n\t\t\tCONTACTO ENCONTRADO\n\n\n\n\n\n\n");
  381. system("pause");
  382. system("cls");
  383. printf("\n\nEL telefono:\n");
  384. printf("%lld",contact[i].tel);
  385. printf("\n\nEl Id del cliente es: %d\n",contact[i].Numero_registrado);
  386. printf("\n\nEl apellido paterno es:\n");
  387. puts(contact[i].AP);
  388. printf("\n\nEl apellido materno es:\n");
  389. puts(contact[i].AM);
  390. printf("\n\nEl nombre del cliente es:\n");
  391. puts(contact[i].nom);
  392. printf("\n\nEl correo es:\n");
  393. puts(contact[i].correo);
  394. printf("\n\nEl sitio web es:\n");
  395. puts(contact[i].sito_web);
  396. printf("\n\nNota:\n");
  397. puts(contact[i].notas);
  398. printf("\n\nLa empresa es:\n");
  399. puts(contact[i].empresa);
  400. printf("\n\nEl puesto es:\n");
  401. puts(contact[i].puesto);
  402. system("pause");
  403. system("cls");
  404. printf("\nSeguro que desea eliminar este contacto?\n1)Seguro.\n2)No estoy seguro\n");
  405. scanf("%d",&y);
  406. if(y=1)
  407. {
  408. BorrarC(i);
  409. break;
  410. }
  411. else
  412. {
  413. menu();
  414. }
  415. }
  416. else
  417. {
  418. m=1;
  419. }
  420. }
  421. if(m==1)
  422. {
  423. printf("\n\n\t\t\tTELEFONO NO ENCONTRADO\n\n\n\n\n\n\n");
  424. system("pause");
  425. system("cls");
  426. menu();
  427. }
  428. }
  429. BorrarC(int i)
  430. {
  431. printf("\n\n\t\t\tELIMINAR CLIENTE\n\n\n\n\n\n\n");
  432. system("pause");
  433. system("cls");
  434. contact[i].activo=0;
  435. printf("\n\n\t\t\tCLIENTE ELIMINADO\n\n\n\n\n\n\n");
  436. system("pause");
  437. system("cls");
  438. menu();
  439. }
  440.  
  441.  




« Última modificación: 1 Junio 2020, 23:40 pm por Marsi » En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: Agenda telefonica
« Respuesta #3 en: 4 Junio 2020, 11:17 am »

Sigue siendo un poco lío ese código... Las funciones tienen que tener un valor de retorno aunque este sea void, la función main() está vacía, es difícil seguir con precisión la ejecución si se va pasando de función en función, algunas funciones hacen demasiadas cosas...
Te pongo una estructura alternativa para que la rellenes:
Código
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdbool.h>
  4.  
  5. // Declara constantes para los numeros que vayas a usar luego. Si siguen algun patron que poner de nombre para recordarlos mejor, usalo.
  6. // Si las longitudes que utilizas estan fundamentadas en algo no dire nada pero si son aleatorias te recomiendo que utilices una para todo. O las minimas necesarias, por ejemplo: LONG_NOMBRE y LONG_OTRAS_CADENAS o lo que mas te convenza
  7. #define LONG_NOMBRE 20
  8. #define LONG_OTRAS_CADENAS 15
  9. #define MAX_CONTACTOS 30
  10.  
  11. // Crea un tipo de dato Contacto que consta de un struct. Los campos es mejor poner uno por linea.
  12. // Si no quieres usar typedef cambialo por struct Contacto {...} pero tendras que usar "struct Contacto" cada vez que quieras hacer referencia a "Contacto"
  13. typedef struct {
  14. int numeroRegistrado; // Este campo no podras relacionarlo con el numero de contactos porque al borrar uno se produciran saltos y se repetiran valores.
  15. //int activo; // Por lo que veo lo usas para determinar si el numero esta borrado o no. Para este codigo es prescindible, ya lo veras.
  16. int telefono; // Dudo que realmente necesites un long para un telefono asi que usare int durante todo el codigo
  17. char nombre[LONG_NOMBRE];
  18. char apellidoPaterno[LONG_NOMBRE]; // Que no te de miedo poner nombres un poco largos. Cuanto mejor se entienda, mejor
  19. char apellidoMaterno[LONG_NOMBRE];
  20. //...
  21. } Contacto; // No declares el array global
  22.  
  23. int main(){
  24. Contacto contactos[MAX_CONTACTOS]; // Declara el array local
  25. int contactosRegistrados = 0;
  26. int telefonoBuscado;
  27. int indiceBuscado;
  28. int opcion;
  29. do {
  30. opcion = mostrarMenu(); // Muestra el menu y devuelve la opcion. En mostrarMenu() puedes controlar que la opcion este en el rango
  31. switch(opcion){
  32. case 1:
  33. if(contactosRegistrados < MAX_CONTACTOS){
  34. contactos[contactosRegistrados] = crearContacto(); // Crea un contacto en el array contactos en la posicion contactosRegistrados
  35. ++contactosRegistrados;
  36. } else printf("Limite de contactos alcanzado\n");
  37. break;
  38.  
  39. case 2: // Cuando actualizas es como si creases un contacto nuevo en la posicion del existente
  40. printf("Introduce el numero de telefono del contacto a modificar: ");
  41. scanf("%d", &telefonoBuscado);
  42. while(getchar() != '\n');
  43. indiceBuscado = buscarPorTelefono(contactos, contactosRegistrados, telefonoBuscado); // Que devuelva el indice del contacto con ese numero o -1 si no lo encuentra
  44. if(indiceBuscado != -1){
  45. contactos[indiceBuscado] = crearContacto();
  46. } else printf("No existe ningun contacto con ese numero\n");
  47. break;
  48.  
  49. case 3: // Para borrar de un array lo que se hace es mover todos los elementos a la derecha del eliminado una posicion hacia la izquierda para no dejar huecos
  50. printf("Introduce el numero de telefono del contacto a eliminar: ");
  51. scanf("%d", &telefonoBuscado);
  52. while(getchar() != '\n');
  53. indiceBuscado = buscarPorTelefono(contactos, contactosRegistrados, telefonoBuscado); // Que devuelva el indice del contacto con ese numero o -1 si no lo encuentra
  54. if(indiceBuscado != -1){
  55. eliminarContacto(contactos, contactosRegistrados, indiceBuscado); // Que empiece en indiceBuscado y hasta el final mueva cada contactos a su izquierda
  56. --contactosRegistrados;
  57. } else printf("No existe ningun contacto con ese numero\n");
  58. break;
  59. }
  60. mostrarContactos(contactos, contactosRegistrados);
  61. } while(opcion != 4); // La opcion 4 solo sale. No es necesario hacer un case para ella.
  62. // Para hacer una pausa olvidate de getch() y de system("pause"). La mejor opcion SIEMPRE es getchar() que pertenece a <stdio.h> asi que olvidate de <conio.h>
  63. return 0;
  64. }

Como ves, la función main() tiene que dar una idea general del funcionamiento del programa. Que al mirar el main() puedas saber lo que hace el programa aunque no sepas cómo (esto corresponde a las funciones adicionales).
Crea funciones estructuradas, no que se llamen unas a otras haciendo bucles o que tengan varios return (hay casos excepcionales pero son pocos).
Ahora te queda a ti implementar las funciones que he ido llamando por ahí. Créalas de forma que cumplan las restricciones que te pongo y todo funcionará correctamente. Observa también los parámetros que tienen que tener y sus valores de retorno. Y limítate a que cada función realice su labor, no quieras mezclar. Cuanto más precisa sea una función más independiente será y más la podrás reutilizar (fíjate en buscarPorTelefono() o crearContacto() como las hemos podido usar varias veces).

Casi lo olvido: para solucionar el tema del numeroRegistro de cada contacto, puedes crear dentro de la función crearContacto() una variable static. Las variables static mantienen su existencia y su valor durante las diferentes llamadas a la función. Así cada vez que llames a la función puedes incrementar en 1 esa variable y en la siguiente llamada, se mantendrá ese valor para volver a incrementarle 1.

Ya tienes bastante trabajo. Y te aseguro si te sirve de inspiración que vas a aprender/reforzar bastantes cosas de hacer este programa. Dos consejos más para que por favor apliques y te quede ya un programa de 10, te lo aseguro:
  • Leer cadenas de texto: Para esto la función recomendada es fgets(). Por ejemplo, para guardar el nombre (que te hará falta):
Código
  1. Contacto contacto;
  2. printf("Introduce el nombre: ");
  3. fgets(contacto.nombre, LONG_NOMBRE, stdin);
Una vez guardado el nombre es importante hacer dos cosas más: eliminar el salto de línea que se habrá almacenado al pulsar ENTER y limpiar el buffer para el siguiente dato que pidamos. Para hacer ambas cosas utiliza el siguiente código justo después del fgets():
Código
  1. if(contacto.nombre[strlen(contacto.nombre)-1] == '\n') // Si antes del final de cadena hay un salto de linea...
  2.    contacto.nombre[strlen(contacto.nombre)-1] = '\0'; //... lo sustituimos por el final de cadena para eliminarlo
  3. else // sino, el salto de linea se ha quedado en el buffer ademas de que puede haber otros caracteres antes...
  4.    while(getchar() != '\n'); // ...entonces con esto limpiamos el buffer en caso de que quede algo
Como puedes ver en las funciones scanf() de más arriba también he utilizado la misma sentencia para limpiar el buffer pero en ese caso sin la comprobación del if pues el scanf() siempre deja el ENTER en el buffer.
Esta es una manera más correcta de limpiar el buffer que con fflush(stdin). Utilízalo.

Cualquier duda, problema o lo que sea que tengas, no dudes en preguntar. El objetivo es que entiendas lo que se hace y por qué.

Suerte. :-X
En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Agenda bat V1 by my
Scripting
J3FFR3Y .4 C3D3Ñ0 0 3,960 Último mensaje 17 Diciembre 2006, 21:46 pm
por J3FFR3Y .4 C3D3Ñ0
Agenda Telefónica en la Web ...???
Dudas Generales
4971231 1 2,692 Último mensaje 28 Octubre 2010, 21:13 pm
por [u]nsigned
Problema al hacer una Agenda Telefonica en C++ « 1 2 »
Programación C/C++
Y2J 10 17,909 Último mensaje 19 Agosto 2011, 18:21 pm
por Y2J
Agenda telefónica en vbs...!!!
Programación Visual Basic
user_foro 0 1,828 Último mensaje 16 Agosto 2015, 20:27 pm
por user_foro
Agenda telefonica
Programación C/C++
roma7776 1 2,266 Último mensaje 1 Septiembre 2023, 01:50 am
por Locura_23
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines