Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: ii en 8 Abril 2021, 21:22 pm



Título: Ayuda, consejo.....
Publicado por: ii en 8 Abril 2021, 21:22 pm
Hola a todos, me encuentro realizando una agenda que me permita imprimir los datos en un archivo .txt; decidí realizarla mediante listas enlazadas simples, el problema es que no se como validar los datos, por ejemplo, como saber si el nombre de una persona ya existe en otro nodo, como debería buscarlo?.
Debo crear primeramente el nodo y añadirlo a la lista para posteriormente buscar entre los demás nodos una coincidencia, y si existe alguna debo eliminarlo.
Otra manera que se me ocurrió la cual no se si sea posible es que cuando se ingresan los datos al crear el nodo, buscar dentro de los demás nodos una coincidencia del nombre, si existe alguna escribir un aviso para que ingrese otro nombre,
Este es mi código, no llevo mucho, ya que estoy aprendiendo poco a poco,
Gracias

Código
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4. #include<windows.h>
  5. #define V 35
  6.  
  7. typedef struct
  8. {
  9. int IdCliente;
  10. char *Nombre;
  11. char *ApPaterno;
  12. char *ApMaterno;
  13. char *FechaA;
  14. float credito;
  15. float deuda;
  16. struct reg *sig;
  17. }reg;
  18.  
  19. reg *primero = NULL;
  20. reg *ultimo = NULL;
  21. void menu(void);
  22. void subMenu(void);
  23. char *s2(char s[V]);
  24. void NuevoRegistro(void);
  25. void buscar();
  26.  
  27. int main()
  28. {
  29. menu();
  30.  
  31.  
  32.  
  33. return 0;
  34. }
  35.  
  36. void menu(void)
  37. {
  38. int op;
  39.  
  40. do {
  41. puts("\n|---------------------------------------|");
  42. puts("\t\tREGISTRO");
  43. puts("\n  MENU");
  44. puts(" (1) AGREGAR NUEVO REGISTRO");
  45. puts(" (2) MODIFICAR UN REGISTRO PARTICULAR");
  46. puts(" (3) BORRAR UN REGISTRO");
  47. puts(" (4) MOSTRAR REGISTROS");
  48. puts(" (5) SALIR");
  49. printf("\nDigite una opcion: ");
  50. scanf("%d",&op);
  51. if(op < 1 || op > 5) {
  52. printf("\nOPCION INVALIDA!..\n\n");
  53. system("pause");
  54. }
  55. system("cls");
  56. }while(op > 5 || op < 1);
  57.  
  58. switch(op) {
  59. case 1:
  60. NuevoRegistro();
  61. break;
  62. case 2:
  63.  
  64. break;
  65. case 3:
  66.  
  67. break;
  68. case 4:
  69. subMenu();
  70. break;
  71. default:
  72. exit(1);
  73. }
  74. }
  75.  
  76. void subMenu()
  77. {
  78. int op;
  79.  
  80. do {
  81. puts("\n|---------------------------------------|");
  82. puts("\t\tREGISTRO\n\n");
  83. puts(" (1) MOSTAR TODOS LOS REGISTROS");
  84. puts(" (2) MOSTRAR RESGISTRO ESPECIFICO");
  85. puts(" (3) MENU PRINCIPAL");
  86. printf("\n Digite una opcion: ");
  87. scanf("%d",&op);
  88. if(op < 1 || op > 5) {
  89. printf("\nOPCION INVALIDA!..\n\n");
  90. system("pause");
  91. }
  92. system("cls");
  93. }while(op > 3 || op < 1);
  94.  
  95. switch(op) {
  96. case 1:
  97.  
  98. break;
  99. case 2:
  100.  
  101. break;
  102. default:
  103. menu();
  104.  
  105. }
  106. }
  107.  
  108. void NuevoRegistro()
  109. {
  110. char s[V];
  111. reg *nuevo = (reg*)malloc(sizeof(reg));
  112.  
  113. printf("IdCliente: ");
  114. scanf("%d",&nuevo->IdCliente);
  115.  
  116. printf("Nombre: "); scanf("%s",s);
  117. strcpy((nuevo->Nombre = s2(s)),s);
  118.  
  119. printf("Apellido Paterno: "); scanf("%s",s);
  120. strcpy((nuevo->ApPaterno = s2(s)),s);
  121. /*printf("%s",s);*/
  122. printf("Apellido Materno: "); scanf("%s",s);
  123. strcpy((nuevo->ApMaterno = s2(s)),s);
  124.  
  125. printf("Fecha de Alta ""AAAA/MM/DD"": "); scanf("%d",s);
  126. strcpy((nuevo->FechaA = s2(s)),s);
  127.  
  128. do {
  129. printf("Credito: ");
  130. fflush(stdin);
  131. scanf("%.2f",&nuevo->credito);
  132. if((nuevo->credito) < 0)
  133. printf("DATO INVALIDO! CANTIDAD MENOR A CERO.");
  134. }while((nuevo->credito)<0);
  135.  
  136. do {
  137. printf("Deuda: ");
  138. fflush(stdin);
  139. scanf("%.2f",&nuevo->deuda);
  140. if(nuevo->deuda < 0){
  141. printf("DATO INVALIDO! CANTIDAD MENOR A CERO.");
  142. printf("INGRESE UN DATO VALID");
  143. }
  144. }while((nuevo->deuda)<0);
  145.  
  146.  
  147. printf("%s",nuevo->Nombre);
  148. printf("%d",strlen(nuevo->Nombre));
  149. }
  150.  
  151. char *s2(char s[V])
  152. {
  153. char *cad;
  154. cad = (char*)calloc(strlen(s)+1,sizeof(char));
  155.  
  156. return cad;
  157. }
  158.  
  159.  

MOD: El código debe estar entre etiquetas de Código GeSHi


Título: Re: Ayuda, consejo.....
Publicado por: ivancea96 en 8 Abril 2021, 23:51 pm
Buenas!

Como norma general, no te compliques, y separa los procesos lo más posible: Cuando meta el nombre, recorres la lista para ver si existe.
Si existe, se lo pones, para que ponga otro o vuelva al menú.
Si no existe, lo añades (o sigues pidiendo datos).