Ayuda con la comparacion de estructuras en C

Iniciado por GameX, 17 Diciembre 2016, 15:45 PM

0 Miembros y 1 Visitante están viendo este tema.

GameX

El subprograma no da error  al compilar, pero no funciona correctamente. Lo que ocure es que no se porque pero  al meter los DNI en la estructura, no da ningun problema; los guarda correctamente.
Pero para dar de baja a un socio mediante el DNI, no consigo hacer que funcione(subprograma BajaSocios) para borrar el DNI que la persona te indique.

El código es el siguiente:
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <string.h>

#define MAX_Socios 100
#define MAX_Cursos 10
#define TRUE 1
#define FALSE 0

//Declaración de estructuras

struct estructura_datos_socio
{
   char nombre[40];
   char DNI[10];
   int TipoSocio;

}datos_socio[MAX_Socios];

//Variables Globales

int opcion,opcion1,opcion2,opcion3;

int contador=1;



//Prototipos de subprogramas
int Menu();
int GestSocios();
int GestCursos();
int InformesEconomicos();
void AltaSocios(struct estructura_datos_socio *datos_socio,int contador);
void BajaSocios(struct estructura_datos_socio *datos_socio, int contador);
void ModificacionSocios();
void ConsultaSocios(struct estructura_datos_socio *datos_socio,int contador);
void PagoMensual();
void SociosNormales();
void SociosJubilados();
void SociosINfantiles();
void GeneralSocios();




int main()
{
   setlocale( LC_ALL, "Spanish" );
   Menu();
   return 0;
}

//Subprograma Menú
int Menu()
{
   do{
       printf("\n\t\tMENÚ PRINCIPAL");
       printf("\n\n1.- Gestión de Socios");
       printf("\n2.- Gestión de Cursos");
       printf("\n3.- Informes Económicos");
       printf("\n0.- Salir");
       printf("\nOpcion a escoger: ");
       scanf("%d",&opcion);
       fflush(stdin);

       switch (opcion)
{
   case 1: system("cls");
           GestSocios();
           break;

   case 2: system("cls");
           GestCursos();
           break;

   case 3: system("cls");
           InformesEconomicos();
           break;

   case 0: system("cls");
           printf("\n\n\t\tGracias por utilizar la aplicación de \"GEST-GYM\"\n\n\t\t");
           break;

   default:
       printf("\nOpcion incorrecta, introduzca otra...\n\n");
       printf("\nPulse <intro> para volver al menu\n\n");
       fflush(stdin);
       getchar();
       system("cls");
}
   }while(opcion!=0);
   return (opcion);
}
/**************************************************************************************************************

                                   Subprograma de gestión de socios

***************************************************************************************************************/

/***********************************************************************************
Subprograma: GestSocios        Tipo: void
Prerrequesitos: Opción 1 para ejecutar el subprograma
Objetivo: Presenta en la pantalla el submenú de gestión de socios
************************************************************************************/
int GestSocios()
{
   do
       {
           printf("\tSUBMENÚ \"GESTION DE SOCIOS\"");
           printf("\n\n1.- Alta");
           printf("\n2.- Baja");
           printf("\n3.- Modificación de datos de un socio");
           printf("\n4.- Consulta de datos de un socio");
           printf("\n5.- Pago Mensual");
           printf("\n6.- Listado de Socios normales");
           printf("\n7.- Listado de Socios jubilados");
           printf("\n8.- Listado de Socios infantiles");
           printf("\n9.- Listado General de Socios");
           printf("\n0.- Volver al Menú Principal");
           printf("\nOpcion a escoger: ");
           scanf("%d",&opcion1);
           fflush(stdin);


   switch (opcion1)
{

   case 1: system("cls");
           AltaSocios(datos_socio,contador);
           contador++;
           system("cls");
           break;

   case 2: system("cls");
           BajaSocios(datos_socio, contador);
           contador--;
           system("cls");
           break;

   case 3: system("cls");
           ModificacionSocios();
           system("cls");
           break;

   case 4: system("cls");
           ConsultaSocios(datos_socio,contador);
           system("cls");
           break;

   case 5: PagoMensual();
           break;

   case 6: SociosNormales();
           break;

   case 7: SociosJubilados();
           break;

   case 8: SociosInfantiles();
           break;

   case 9: GeneralSocios();
           break;

   case 0: ;
           break;

   default:
       printf("\nOpcion incorrecta, introduzca otra...\n\n");
       printf("\nPulse <intro> para volver al menu\n\n");
       fflush(stdin);
       getchar();
       system("cls");
}
   }while (opcion1!=0);

}

/**************************************************************************************************************

                                   Subprograma de gestión de cursos

***************************************************************************************************************/

/***********************************************************************************
Subprograma: GestCursos        Tipo: Submenú
Prerrequesitos: Opción 2 para ejecutar el subprograma
Objetivo: Presenta en la pantalla el submenú de gestión de cursos
************************************************************************************/
int GestCursos()
{
   printf("\tSUBMENÚ \"GESTION DE CURSOS\"");
   printf("\n\n1.- Alta");
   printf("\n2.- Baja");
   printf("\n3.- Modificación de datos de un curso");
   printf("\n4.- Consulta de datos de un curso");
   printf("\n5.- Listado General de Cursos");
   printf("\n6.- Inscripción de socios a un curso");
   printf("\n7.- Listado de socios que están apuntados a un curso");
   printf("\n0.- Volver al Menú Principal");
   printf("\nOpcion a escoger: ");
   fflush(stdin);
   scanf("%d",&opcion2);
   system("cls");
}
/**************************************************************************************************************

                                   Subprograma de infomes económicos

***************************************************************************************************************/

/***********************************************************************************
Subprograma: InformesEconomicos        Tipo: Submenú
Prerrequesitos: Opción 3 para ejecutar el subprograma
Objetivo: Presenta en la pantalla el submenú de informes económicos
************************************************************************************/
int InformesEconomicos()
{
   printf("\tSUBMENÚ \"INFORMES ECONOMICOS\"");
   printf("\n\n1.- Informe Mensual(por cuotas básicas)");
   printf("\n2.- Informe Mensual(de un curso)");
   printf("\n3.- Informe Mensual(todos los cursos)");
   printf("\n0.- Volver al Menú Principal");
   printf("\nOpcion a escoger: ");
   fflush(stdin);
   scanf("%d",&opcion3);
   system("cls");

}

/***********************************************************************************
Subprograma: AltaSocios        Tipo: Procedimiento
Prerrequesitos: Opción 1 para ejecutar el subprograma
Objetivo: Pedir datos generales del socio(DNI,nombre y tipo)
************************************************************************************/
void AltaSocios(struct estructura_datos_socio *datos_socio,int contador)
{
   int validacion;
   char letraDNI;

   printf("\t\"Alta de socios\"");



   printf("\nIntroduzca su nombre: ");
   fflush(stdin);
   gets(datos_socio[contador].nombre);


   do{

           printf("\nTipo de socio:");
           printf("\n\n1.- Normal");
           printf("\n2.- Jubilado");
           printf("\n3.- Infantil");
           printf("\tIntroduce el tipo de socio: ");
           scanf("%d",&datos_socio[contador].TipoSocio);
           fflush(stdin);

           if ((datos_socio[contador].TipoSocio >=1) && (datos_socio[contador].TipoSocio <=3))
           {
               validacion='v';
               printf("\nTu tipo es %d", datos_socio[contador].TipoSocio);
               getchar();
           }

           else

           {
               validacion='f';
               printf("\nEl tipo introducido no es correcto");
               getchar();
               fflush(stdin);
               system("cls");
           }

   }while(validacion=='f');


   do{

           printf("\nIntroduzca su DNI: ");
           scanf("%s",datos_socio[contador].DNI);
           fflush(stdin);

           if (strlen(datos_socio[contador].DNI)==9)

               {
               validacion='v';
               for (contador;datos_socio[contador].DNI<9;contador++)

                   printf("%c, %d\n", datos_socio[contador].DNI, isdigit(datos_socio[contador].DNI));
               }

               else
               {
               validacion='f';
               printf("\nEl DNI introducido no es correcto");
               getchar();
               fflush(stdin);
               system("cls");
               }


   }while(validacion=='f');


   printf("Su DNI es: %s",datos_socio[contador].DNI);
   printf("\nPulse <intro> para volver al menú");
   getchar();

}
/***********************************************************************************
Subprograma: BajaSocios        Tipo: Procedimiento
Prerrequesitos: Opción 2 para ejecutar el subprograma
Objetivo: Eliminar datos generales del socio(DNI,nombre y tipo)
************************************************************************************/
void BajaSocios(struct estructura_datos_socio *datos_socio, int contador)
{
   int baja_socio;
   int i=0;
   int posicion;

   printf("\n\tBaja de socios");


   printf("\n\n\tIntroduzca el DNI del socio a modificar");
   scanf("%s", &baja_socio);


   for (i=0; i>MAX_Socios; i++)
   {
       if (datos_socio[i].DNI  == baja_socio)
       {
           posicion=i;
           for (i=posicion; i<MAX_Socios; i++)
           {
               datos_socio[i]= datos_socio[i+1];
               fflush(stdin);
               printf("\nSe ha borrado el socio correctamente.");
               getchar();
               system("cls");
               break;
           }
           break;
       }

       if ((datos_socio[i].DNI!= baja_socio) && (i=MAX_Socios-1))
       {
           printf("\nEste DNI no se encuentra en nuestro registro.");
       }
   }
   fflush(stdin);
   getchar();

}
/***********************************************************************************
Subprograma: ModificacionSocios        Tipo: Procedimiento
Prerrequesitos: Opción 3 para ejecutar el subprograma
Objetivo: Modificar datos generales del socio(DNI,nombre y tipo)
************************************************************************************/
void ModificacionSocios()
{

}
/***********************************************************************************
Subprograma: ConsultaSocios        Tipo: Procedimiento
Prerrequesitos: Opción 4 para ejecutar el subprograma
Objetivo: Pedir datos generales del socio(DNI,nombre y tipo)
************************************************************************************/
void ConsultaSocios(struct estructura_datos_socio *datos_socio,int contador)
{
   for (contador=1;contador<MAX_Socios;contador++)
   {
       fflush(stdin);
       printf("Socio %i:  %s",contador,datos_socio[contador].DNI);
       getchar();
   }

}
/***********************************************************************************
Subprograma: PagoMensual        Tipo: Procedimiento
Prerrequesitos: Opción 5 para ejecutar el subprograma
Objetivo: Pedir datos generales del socio(DNI,nombre y tipo)
************************************************************************************/
void PagoMensual()
{

}
/***********************************************************************************
Subprograma: SociosNormales        Tipo: Procedimiento
Prerrequesitos: Opción 6 para ejecutar el subprograma
Objetivo: Pedir el listado de socios normales
************************************************************************************/
void SociosNormales()
{

}
/***********************************************************************************
Subprograma: PagoMensual        Tipo: Procedimiento
Prerrequesitos: Opción 7 para ejecutar el subprograma
Objetivo: Pedir el listado de socios jubilados
************************************************************************************/
void SociosJubilados()
{

}
/***********************************************************************************
Subprograma: SociosInfantiles        Tipo: Procedimiento
Prerrequesitos: Opción 8 para ejecutar el subprograma
Objetivo: Pedir el listado de socios infantiles
************************************************************************************/
void SociosInfantiles()
{

}
/***********************************************************************************
Subprograma: PagoMensual        Tipo: Procedimiento
Prerrequesitos: Opción 7 para ejecutar el subprograma
Objetivo: Pedir datos generales del socio(DNI,nombre y tipo)
************************************************************************************/
void GeneralSocios()
{

}

engel lex

usaste el debugger para ver si tienes un error logico?
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

GameX

Se puede decir que soy nuevo en programación, no tengo idea de lo que es el debugger :/

engel lex

el debugger es una de las herramientas más importantes de cualquier programador, te permite correr tu codigo paso a paso para ver el comportamiento de las variables y de la lógica, busca en google o youtube "usar debugger [nombre de tu IDE]"
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.