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

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


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

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Ayuda
« en: 27 Mayo 2020, 18:55 pm »

Alguien sabe como en el case 2 puede modificar el contacto ingresando el numero telefonico local
Código
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <string.h>
  4.  
  5. #define MAX 256
  6.  
  7. struct agenda
  8. {
  9. int Num_Contacto;
  10. char AP[20];
  11. char AM[20];
  12. char Nombre[20];
  13. double tel[8];
  14. double cel[8];
  15. char email[50];
  16. char sitio_web[50];
  17. char Notas[30];
  18. char Empresa[20];
  19. char Cargo[10];
  20. };
  21. struct agenda contactos[MAX];
  22.  
  23. int main()
  24. {
  25. int count;
  26. int i = 0;
  27. int resp, opc, opc2, opc3;
  28.  
  29. while (opc != 4){
  30. system("cls");
  31. printf("PIA\n");
  32. printf("Programa para hacer una agenda usando Archivos\n");
  33. printf("Elija una opcion.\n");
  34. printf("1. Crear Contacto\n");
  35. printf("2. Actualizar Contacto\n");
  36. printf("3. Eliminar Contacto\n");
  37. printf("4. Salir\n");
  38. scanf("%d", &opc);
  39.  
  40. switch(opc)
  41. {
  42. case 1:
  43. {
  44. system("cls");
  45. do{
  46. printf("Escriba '0' si no quiere escribir algo.\n");
  47. printf("Apellido Paterno: ");
  48. fflush(stdin);
  49. scanf("%[^\n]", &contactos[count].AP);
  50. printf("Apellido Materno: ");
  51. fflush(stdin);
  52. scanf("%[^\n]", &contactos[count].AM);
  53. printf("Nombre (usa '_' para separar nombres): ");
  54. fflush(stdin);
  55. scanf("%[^\n]", &contactos[count].Nombre);
  56. printf("Telefono fijo con lada: ");
  57. fflush(stdin);
  58. scanf("%llu", &contactos[count].tel);
  59. printf("Telefono celular: ");
  60. fflush(stdin);
  61. scanf("%llu", &contactos[count].cel);
  62. printf("Correo electronico: ");
  63. fflush(stdin);
  64. scanf("%[^\n]", &contactos[count].email);
  65. printf("Sitio web: ");
  66. fflush(stdin);
  67. scanf("%[^\n]", &contactos[count].sitio_web);
  68. printf("Notas (usa '_' para separar palabras): ");
  69. fflush(stdin);
  70. scanf("%[^\n]", &contactos[count].Notas);
  71. printf("Empresa (usa '_' para separar palabras): ");
  72. fflush(stdin);
  73. scanf("%[^\n]", &contactos[count].Empresa);
  74. printf("Cargo (usa '_' para separar palabras): ");
  75. fflush(stdin);
  76. scanf("%[^\n]", &contactos[count].Cargo);
  77. contactos[count].Num_Contacto = count;
  78. system("cls");
  79. printf( "\nEl numero de contacto guardado es: %d\n ", contactos[count].Num_Contacto);
  80. printf( "Nombre(s): %s\n ", contactos[count].Nombre);
  81. printf( "Apellido Paterno: %s\n ", contactos[count].AP);
  82. printf( "Apellido Materno: %s\n", contactos[count].AM);
  83. printf("Numero de telefono local: %llu\n ", contactos[count].tel);
  84. printf( "Numero de telefono celular: %llu\n ", contactos[count].cel);
  85. printf( "E-mail: %s\n ", contactos[count].email);
  86. printf( "Sitio web: %s\n ", contactos[count].sitio_web);
  87. printf( "Notas: %s\n ", contactos[count].Notas);
  88. printf( "Empresa: %s\n ", contactos[count].Empresa);
  89. printf( "Cargo: %s\n", contactos[count].Cargo);
  90. printf("\nContacto agregado correctamente.\n");
  91. printf("Este es el contacto numero: %d.", contactos[count].tel);
  92. getch();
  93. printf("\n¿Desea agregar otro contacto?\n SI=1   NO=0\n");
  94. scanf("%d",&resp);
  95.    }while(resp!=0);
  96.    getch();
  97. break;
  98. }
  99. case 2:
  100. {
  101. system("cls");
  102. do
  103. {
  104. printf("Inserte el numero del contacto a modificar: ");
  105. fflush(stdin);
  106. scanf("%d", &opc2);
  107. }while(opc2 < 1 || opc2 > 255);
  108.  
  109.  
  110. for(i = 1; i <= count; i++)
  111. {
  112. if(contactos[i].Num_Contacto == opc2)
  113. {
  114. printf("\nNombre: %s %s %s", contactos[opc2].Nombre, contactos[opc2].AP, contactos[opc2].AM);
  115. printf("\nTelefono fijo: %d", contactos[opc2].tel);
  116. printf("\nTelefono celular: %d", contactos[opc2].cel);
  117. printf("\nE-mail: %s", contactos[opc2].email);
  118. printf("\nSitio Web: %s", contactos[opc2].sitio_web);
  119. printf("\nNotas: %s", contactos[opc2].Notas);
  120. printf("\nEmpresa: %s", contactos[opc2].Empresa);
  121. printf("\nCargo: %s", contactos[opc2].Cargo);
  122.  
  123. do
  124. {
  125. printf("\n\nEsta seguro de que quiere modificar este contacto? (1. Si, 2. No): ");
  126. fflush(stdin);
  127. scanf("%d", &opc3);
  128. }while(opc3 < 1 || opc3 > 2);
  129.  
  130. if(opc3 == 1)
  131. {
  132. printf("Escriba '0' si no quiere escribir algo.\n");
  133. printf("Apellido Paterno: ");
  134. fflush(stdin);
  135. scanf("%[^\n]", &contactos[opc2].AP);
  136. printf("Apellido Materno: ");
  137. fflush(stdin);
  138. scanf("%[^\n]", &contactos[opc2].AM);
  139. printf("Nombre (usa '_' para separar nombres): ");
  140. fflush(stdin);
  141. scanf("%[^\n]", &contactos[opc2].Nombre);
  142. printf("Telefono fijo: ");
  143. fflush(stdin);
  144. scanf("%d", &contactos[opc2].tel);
  145. printf("Telefono celular: ");
  146. fflush(stdin);
  147. scanf("%d", &contactos[opc2].cel);
  148. printf("Correo electronico: ");
  149. fflush(stdin);
  150. scanf("%[^\n]", &contactos[opc2].email);
  151. printf("Sitio web: ");
  152. fflush(stdin);
  153. scanf("%[^\n]", &contactos[opc2].sitio_web);
  154. printf("Notas (usa '_' para separar palabras): ");
  155. fflush(stdin);
  156. scanf("%[^\n]", &contactos[opc2].Notas);
  157. printf("Empresa (usa '_' para separar palabras): ");
  158. fflush(stdin);
  159. scanf("%[^\n]", &contactos[opc2].Empresa);
  160. printf("Cargo (usa '_' para separar palabras): ");
  161. fflush(stdin);
  162. scanf("%[^\n]", &contactos[opc2].Cargo);
  163.  
  164. pf = fopen("Archivo.BIN", "wt");
  165. if(pf == NULL)
  166. {
  167. printf("\nError al abrir el archivo.");
  168. getch();
  169. return -1;
  170. }
  171. for(i = 1; i <= count; i++)
  172. {
  173. fprintf(pf, "%d ", contactos[i].Num_Contacto);
  174. fprintf(pf, "%s ", contactos[i].Nombre);
  175. fprintf(pf, "%s ", contactos[i].AP);
  176. fprintf(pf, "%s ", contactos[i].AM);
  177. fprintf(pf, "%d ", contactos[i].tel);
  178. fprintf(pf, "%d ", contactos[i].cel);
  179. fprintf(pf, "%s ", contactos[i].email);
  180. fprintf(pf, "%s ", contactos[i].sitio_web);
  181. fprintf(pf, "%s ", contactos[i].Notas);
  182. fprintf(pf, "%s ", contactos[i].Empresa);
  183. fprintf(pf, "%s\n", contactos[i].Cargo);
  184. }
  185. fclose(pf);
  186.  
  187. printf("\nContacto modificado correctamente.");
  188. getch();
  189. }
  190. break;
  191. }
  192. else
  193. {
  194. if(i == count)
  195. {
  196. printf("\nNo se encontro el contacto.");
  197. getch();
  198. break;
  199. }
  200. }
  201. }
  202. break;
  203. }
  204. case 3:
  205. {
  206. system("cls");
  207. do
  208. {
  209. printf("Inserte el numero del contacto a eliminar: ");
  210. fflush(stdin);
  211. scanf("%d", &opc2);
  212. }while(opc2 < 1 || opc2 > 255);
  213.  
  214. for(i = 1; i <= count; i++)
  215. {
  216. if(contactos[i].Num_Contacto == opc2)
  217. {
  218. printf("\nNombre: %s %s %s", contactos[opc2].Nombre, contactos[opc2].AP, contactos[opc2].AM);
  219. printf("\nTelefono fijo: %d", contactos[opc2].tel);
  220. printf("\nTelefono celular: %d", contactos[opc2].cel);
  221. printf("\nE-mail: %s", contactos[opc2].email);
  222. printf("\nSitio Web: %s", contactos[opc2].sitio_web);
  223. printf("\nNotas: %s", contactos[opc2].Notas);
  224. printf("\nEmpresa: %s", contactos[opc2].Empresa);
  225. printf("\nCargo: %s", contactos[opc2].Cargo);
  226.  
  227. do
  228. {
  229. printf("\n\nEsta seguro de que quiere eliminar este contacto? (1. Si, 2. No): ");
  230. fflush(stdin);
  231. scanf("%d", &opc3);
  232. }while(opc3 < 1 || opc3 > 2);
  233.  
  234. if(opc3 == 1)
  235. {
  236. for(i = opc2; i <= count; i++)
  237. {
  238. contactos[i].Num_Contacto = contactos[i+1].Num_Contacto;
  239. contactos[i].Num_Contacto = contactos[i].Num_Contacto - 1;
  240. strcpy(contactos[i].Nombre, contactos[i+1].Nombre);
  241. strcpy(contactos[i].AP, contactos[i+1].AP);
  242. strcpy(contactos[i].AM, contactos[i+1].AM);
  243. contactos[i].tel = contactos[i+1].tel;
  244. contactos[i].cel = contactos[i+1].cel;
  245. strcpy(contactos[i].email, contactos[i+1].email);
  246. strcpy(contactos[i].sitio_web, contactos[i+1].sitio_web);
  247. strcpy(contactos[i].Notas, contactos[i+1].Notas);
  248. strcpy(contactos[i].Empresa, contactos[i+1].Empresa);
  249. strcpy(contactos[i].Cargo, contactos[i+1].Cargo);
  250. }
  251. count = count - 1;
  252.  
  253. pf = fopen("Archivo.BIN", "wt");
  254. if(pf == NULL)
  255. {
  256. printf("\nError al abrir el archivo.");
  257. getch();
  258. return -1;
  259. }
  260. for(i = 1; i <= count; i++)
  261. {
  262. fprintf(pf, "%d ", contactos[i].Num_Contacto);
  263. fprintf(pf, "%s ", contactos[i].Nombre);
  264. fprintf(pf, "%s ", contactos[i].AP);
  265. fprintf(pf, "%s ", contactos[i].AM);
  266. fprintf(pf, "%d ", contactos[i].tel);
  267. fprintf(pf, "%d ", contactos[i].cel);
  268. fprintf(pf, "%s ", contactos[i].email);
  269. fprintf(pf, "%s ", contactos[i].sitio_web);
  270. fprintf(pf, "%s ", contactos[i].Notas);
  271. fprintf(pf, "%s ", contactos[i].Empresa);
  272. fprintf(pf, "%s\n", contactos[i].Cargo);
  273. }
  274. fclose(pf);
  275.  
  276. printf("\nContacto eliminado correctamente.");
  277. getch();
  278. break;
  279. }
  280. }
  281. else
  282. {
  283. if(i == count)
  284. {
  285. printf("\nNo se encontro el contacto.");
  286. getch();
  287. break;
  288. }
  289. }
  290. }
  291. break;
  292. }
  293. case 4:
  294. {
  295. system("cls");
  296. printf("Gracias por usar esta agenda.");
  297. getch();
  298. break;
  299. }
  300. default:
  301. {
  302. printf("Inserte otra opcion.");
  303. getch();
  304. break;
  305. }
  306. }
  307.  
  308. }while (opc != 4);
  309.  
  310. return 0;
  311. }


MOD: Código adaptado al uso de etiquetas de Código GeSHi


« Última modificación: 28 Mayo 2020, 00:15 am por YreX-DwX » En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: Ayuda
« Respuesta #1 en: 28 Mayo 2020, 03:38 am »

Si lo que quieres es buscar en tu array de Agenda, el que tenga el número telefónico igual al que introduces:
Código:
Pedir telefono
i := 0
encontrado := -1
MIENTRAS i < longitud(contactos) and encontrado = -1 HACER
  SI contactos[i].telefono = telefono ENTONCES
    encontrado = i
  FIN SI
FIN MIENTRAS
Con este pseudocódigo puedes localizar el índice del contacto que tiene el número de teléfono que buscas. Luego solo es modificar sus campos accediendo a él.
El problema que tienes es que estás mezclando los índices de los contactos con sus números de teléfono.



PD: Unas cuantas mejoras para el programa:
  • Ya que usas una constante para el tamaño de los contactos, por qué no usas también constantes para los arrays de agenda??
  • Algunos nombres de variables no ayudan. opc, opc2, opc12432454... no dice nada. Llámalas opcion_menu, telefono_buscado, indice_buscado... y verás como no tienes el problema que has tenido de confundir un índice con un teléfono.
  • La programación utiliza el principio de una única vez, es decir, no repetir fragmentos de código innecesarios. Tienes un bloque de al menos 30 líneas y otro de unas 10 líneas por lo pronto repetidos... Deberías hacer uso de funciones, no solo para esa parte sino para otras también. Saber modularizar un programa también es programar.
  • Para leer cadenas de caracteres es recomendable usar la función fgets(), no scanf().
  • La biblioteca <conio.h> no pertenece al estándar y no se recomienda su uso. La única función que le das es llamar a getch() y puedes utilizar la función getchar() perteneciente a <stdio.h> en su defecto. Así te ahorras la biblioteca <conio.h>.
  • El único uso recomendado de break es para finalizar cada case de un switch. En tu programa veo algún break con otro fin.
  • Es más seguro utilizar strncpy() para copiar cadenas que strcpy().
Y el que más me ha dolido de todos: dicen que por cada fflush(stdin) que se utiliza, muere un gatito. No hagas eso a los pobres animalitos inocentes.

Con aplicar uno o dos de los consejos de esta lista, ese código pasaría de tener 311 líneas a unas 100 o menos y sería más fácil de leer para ti y para los demás. Aunque lo suyo sería que las aplicases todas o prácticamente todas.

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:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines