Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - ii

#1
Programación C/C++ / Ayuda, consejo.....
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


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<windows.h>
#define V 35

typedef struct
{
int IdCliente;
char *Nombre;
char *ApPaterno;
char *ApMaterno;
char *FechaA;
float credito;
float deuda;
struct reg *sig;
}reg;

reg *primero = NULL;
reg *ultimo = NULL;
void menu(void);
void subMenu(void);
char *s2(char s[V]);
void NuevoRegistro(void);
void buscar();

int main()
{
menu();



return 0;
}

void menu(void)
{
int op;

do {
puts("\n|---------------------------------------|");
puts("\t\tREGISTRO");
puts("\n  MENU");
puts(" (1) AGREGAR NUEVO REGISTRO");
puts(" (2) MODIFICAR UN REGISTRO PARTICULAR");
puts(" (3) BORRAR UN REGISTRO");
puts(" (4) MOSTRAR REGISTROS");
puts(" (5) SALIR");
printf("\nDigite una opcion: ");
scanf("%d",&op);
if(op < 1 || op > 5) {
printf("\nOPCION INVALIDA!..\n\n");
system("pause");
}
system("cls");
}while(op > 5 || op < 1);

switch(op) {
case 1:
NuevoRegistro();
break;
case 2:

break;
case 3:

break;
case 4:
subMenu();
break;
default:
exit(1);
}
}

void subMenu()
{
int op;

do {
puts("\n|---------------------------------------|");
puts("\t\tREGISTRO\n\n");
puts(" (1) MOSTAR TODOS LOS REGISTROS");
puts(" (2) MOSTRAR RESGISTRO ESPECIFICO");
puts(" (3) MENU PRINCIPAL");
printf("\n Digite una opcion: ");
scanf("%d",&op);
if(op < 1 || op > 5) {
printf("\nOPCION INVALIDA!..\n\n");
system("pause");
}
system("cls");
}while(op > 3 || op < 1);

switch(op) {
case 1:

break;
case 2:

break;
default:
menu();

}
}

void NuevoRegistro()
{
char s[V];
reg *nuevo = (reg*)malloc(sizeof(reg));

printf("IdCliente: ");
scanf("%d",&nuevo->IdCliente);

printf("Nombre: "); scanf("%s",s);
strcpy((nuevo->Nombre = s2(s)),s);

printf("Apellido Paterno: "); scanf("%s",s);
strcpy((nuevo->ApPaterno = s2(s)),s);
/*printf("%s",s);*/
printf("Apellido Materno: "); scanf("%s",s);
strcpy((nuevo->ApMaterno = s2(s)),s);

printf("Fecha de Alta ""AAAA/MM/DD"": "); scanf("%d",s);
strcpy((nuevo->FechaA = s2(s)),s);

do {
printf("Credito: ");
fflush(stdin);
scanf("%.2f",&nuevo->credito);
if((nuevo->credito) < 0)
printf("DATO INVALIDO! CANTIDAD MENOR A CERO.");
}while((nuevo->credito)<0);

do {
printf("Deuda: ");
fflush(stdin);
scanf("%.2f",&nuevo->deuda);
if(nuevo->deuda < 0){
printf("DATO INVALIDO! CANTIDAD MENOR A CERO.");
printf("INGRESE UN DATO VALID");
}
}while((nuevo->deuda)<0);
 

printf("%s",nuevo->Nombre);
printf("%d",strlen(nuevo->Nombre));
}

char *s2(char s[V])
{
char *cad;
cad = (char*)calloc(strlen(s)+1,sizeof(char));

return cad;
}




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