Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: GameX en 17 Diciembre 2016, 15:45 pm



Título: Ayuda con la comparacion de estructuras en C
Publicado por: GameX en 17 Diciembre 2016, 15:45 pm
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:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <locale.h>
  4. #include <string.h>
  5.  
  6. #define MAX_Socios 100
  7. #define MAX_Cursos 10
  8. #define TRUE 1
  9. #define FALSE 0
  10.  
  11. //Declaración de estructuras
  12.  
  13. struct estructura_datos_socio
  14. {
  15.    char nombre[40];
  16.    char DNI[10];
  17.    int TipoSocio;
  18.  
  19. }datos_socio[MAX_Socios];
  20.  
  21. //Variables Globales
  22.  
  23. int opcion,opcion1,opcion2,opcion3;
  24.  
  25. int contador=1;
  26.  
  27.  
  28.  
  29. //Prototipos de subprogramas
  30. int Menu();
  31. int GestSocios();
  32. int GestCursos();
  33. int InformesEconomicos();
  34. void AltaSocios(struct estructura_datos_socio *datos_socio,int contador);
  35. void BajaSocios(struct estructura_datos_socio *datos_socio, int contador);
  36. void ModificacionSocios();
  37. void ConsultaSocios(struct estructura_datos_socio *datos_socio,int contador);
  38. void PagoMensual();
  39. void SociosNormales();
  40. void SociosJubilados();
  41. void SociosINfantiles();
  42. void GeneralSocios();
  43.  
  44.  
  45.  
  46.  
  47. int main()
  48. {
  49.    setlocale( LC_ALL, "Spanish" );
  50.    Menu();
  51.    return 0;
  52. }
  53.  
  54. //Subprograma Menú
  55. int Menu()
  56. {
  57.    do{
  58.        printf("\n\t\tMENÚ PRINCIPAL");
  59.        printf("\n\n1.- Gestión de Socios");
  60.        printf("\n2.- Gestión de Cursos");
  61.        printf("\n3.- Informes Económicos");
  62.        printf("\n0.- Salir");
  63.        printf("\nOpcion a escoger: ");
  64.        scanf("%d",&opcion);
  65.        fflush(stdin);
  66.  
  67.        switch (opcion)
  68. {
  69.    case 1: system("cls");
  70.            GestSocios();
  71.            break;
  72.  
  73.    case 2: system("cls");
  74.            GestCursos();
  75.            break;
  76.  
  77.    case 3: system("cls");
  78.            InformesEconomicos();
  79.            break;
  80.  
  81.    case 0: system("cls");
  82.            printf("\n\n\t\tGracias por utilizar la aplicación de \"GEST-GYM\"\n\n\t\t");
  83.            break;
  84.  
  85.    default:
  86.        printf("\nOpcion incorrecta, introduzca otra...\n\n");
  87.        printf("\nPulse <intro> para volver al menu\n\n");
  88.        fflush(stdin);
  89.        getchar();
  90.        system("cls");
  91. }
  92.    }while(opcion!=0);
  93.    return (opcion);
  94. }
  95. /**************************************************************************************************************
  96.  
  97.                                     Subprograma de gestión de socios
  98.  
  99. ***************************************************************************************************************/
  100.  
  101. /***********************************************************************************
  102. Subprograma: GestSocios        Tipo: void
  103. Prerrequesitos: Opción 1 para ejecutar el subprograma
  104. Objetivo: Presenta en la pantalla el submenú de gestión de socios
  105. ************************************************************************************/
  106. int GestSocios()
  107. {
  108.    do
  109.        {
  110.            printf("\tSUBMENÚ \"GESTION DE SOCIOS\"");
  111.            printf("\n\n1.- Alta");
  112.            printf("\n2.- Baja");
  113.            printf("\n3.- Modificación de datos de un socio");
  114.            printf("\n4.- Consulta de datos de un socio");
  115.            printf("\n5.- Pago Mensual");
  116.            printf("\n6.- Listado de Socios normales");
  117.            printf("\n7.- Listado de Socios jubilados");
  118.            printf("\n8.- Listado de Socios infantiles");
  119.            printf("\n9.- Listado General de Socios");
  120.            printf("\n0.- Volver al Menú Principal");
  121.            printf("\nOpcion a escoger: ");
  122.            scanf("%d",&opcion1);
  123.            fflush(stdin);
  124.  
  125.  
  126.    switch (opcion1)
  127. {
  128.  
  129.    case 1: system("cls");
  130.            AltaSocios(datos_socio,contador);
  131.            contador++;
  132.            system("cls");
  133.            break;
  134.  
  135.    case 2: system("cls");
  136.            BajaSocios(datos_socio, contador);
  137.            contador--;
  138.            system("cls");
  139.            break;
  140.  
  141.    case 3: system("cls");
  142.            ModificacionSocios();
  143.            system("cls");
  144.            break;
  145.  
  146.    case 4: system("cls");
  147.            ConsultaSocios(datos_socio,contador);
  148.            system("cls");
  149.            break;
  150.  
  151.    case 5: PagoMensual();
  152.            break;
  153.  
  154.    case 6: SociosNormales();
  155.            break;
  156.  
  157.    case 7: SociosJubilados();
  158.            break;
  159.  
  160.    case 8: SociosInfantiles();
  161.            break;
  162.  
  163.    case 9: GeneralSocios();
  164.            break;
  165.  
  166.    case 0: ;
  167.            break;
  168.  
  169.    default:
  170.        printf("\nOpcion incorrecta, introduzca otra...\n\n");
  171.        printf("\nPulse <intro> para volver al menu\n\n");
  172.        fflush(stdin);
  173.        getchar();
  174.        system("cls");
  175. }
  176.    }while (opcion1!=0);
  177.  
  178. }
  179.  
  180. /**************************************************************************************************************
  181.  
  182.                                     Subprograma de gestión de cursos
  183.  
  184. ***************************************************************************************************************/
  185.  
  186. /***********************************************************************************
  187. Subprograma: GestCursos        Tipo: Submenú
  188. Prerrequesitos: Opción 2 para ejecutar el subprograma
  189. Objetivo: Presenta en la pantalla el submenú de gestión de cursos
  190. ************************************************************************************/
  191. int GestCursos()
  192. {
  193.    printf("\tSUBMENÚ \"GESTION DE CURSOS\"");
  194.    printf("\n\n1.- Alta");
  195.    printf("\n2.- Baja");
  196.    printf("\n3.- Modificación de datos de un curso");
  197.    printf("\n4.- Consulta de datos de un curso");
  198.    printf("\n5.- Listado General de Cursos");
  199.    printf("\n6.- Inscripción de socios a un curso");
  200.    printf("\n7.- Listado de socios que están apuntados a un curso");
  201.    printf("\n0.- Volver al Menú Principal");
  202.    printf("\nOpcion a escoger: ");
  203.    fflush(stdin);
  204.    scanf("%d",&opcion2);
  205.    system("cls");
  206. }
  207. /**************************************************************************************************************
  208.  
  209.                                     Subprograma de infomes económicos
  210.  
  211. ***************************************************************************************************************/
  212.  
  213. /***********************************************************************************
  214. Subprograma: InformesEconomicos        Tipo: Submenú
  215. Prerrequesitos: Opción 3 para ejecutar el subprograma
  216. Objetivo: Presenta en la pantalla el submenú de informes económicos
  217. ************************************************************************************/
  218. int InformesEconomicos()
  219. {
  220.    printf("\tSUBMENÚ \"INFORMES ECONOMICOS\"");
  221.    printf("\n\n1.- Informe Mensual(por cuotas básicas)");
  222.    printf("\n2.- Informe Mensual(de un curso)");
  223.    printf("\n3.- Informe Mensual(todos los cursos)");
  224.    printf("\n0.- Volver al Menú Principal");
  225.    printf("\nOpcion a escoger: ");
  226.    fflush(stdin);
  227.    scanf("%d",&opcion3);
  228.    system("cls");
  229.  
  230. }
  231.  
  232. /***********************************************************************************
  233. Subprograma: AltaSocios        Tipo: Procedimiento
  234. Prerrequesitos: Opción 1 para ejecutar el subprograma
  235. Objetivo: Pedir datos generales del socio(DNI,nombre y tipo)
  236. ************************************************************************************/
  237. void AltaSocios(struct estructura_datos_socio *datos_socio,int contador)
  238. {
  239.    int validacion;
  240.    char letraDNI;
  241.  
  242.    printf("\t\"Alta de socios\"");
  243.  
  244.  
  245.  
  246.    printf("\nIntroduzca su nombre: ");
  247.    fflush(stdin);
  248.    gets(datos_socio[contador].nombre);
  249.  
  250.  
  251.    do{
  252.  
  253.            printf("\nTipo de socio:");
  254.            printf("\n\n1.- Normal");
  255.            printf("\n2.- Jubilado");
  256.            printf("\n3.- Infantil");
  257.            printf("\tIntroduce el tipo de socio: ");
  258.            scanf("%d",&datos_socio[contador].TipoSocio);
  259.            fflush(stdin);
  260.  
  261.            if ((datos_socio[contador].TipoSocio >=1) && (datos_socio[contador].TipoSocio <=3))
  262.            {
  263.                validacion='v';
  264.                printf("\nTu tipo es %d", datos_socio[contador].TipoSocio);
  265.                getchar();
  266.            }
  267.  
  268.            else
  269.  
  270.            {
  271.                validacion='f';
  272.                printf("\nEl tipo introducido no es correcto");
  273.                getchar();
  274.                fflush(stdin);
  275.                system("cls");
  276.            }
  277.  
  278.    }while(validacion=='f');
  279.  
  280.  
  281.    do{
  282.  
  283.            printf("\nIntroduzca su DNI: ");
  284.            scanf("%s",datos_socio[contador].DNI);
  285.            fflush(stdin);
  286.  
  287.            if (strlen(datos_socio[contador].DNI)==9)
  288.  
  289.                {
  290.                validacion='v';
  291.                for (contador;datos_socio[contador].DNI<9;contador++)
  292.  
  293.                    printf("%c, %d\n", datos_socio[contador].DNI, isdigit(datos_socio[contador].DNI));
  294.                }
  295.  
  296.                else
  297.                {
  298.                validacion='f';
  299.                printf("\nEl DNI introducido no es correcto");
  300.                getchar();
  301.                fflush(stdin);
  302.                system("cls");
  303.                }
  304.  
  305.  
  306.    }while(validacion=='f');
  307.  
  308.  
  309.    printf("Su DNI es: %s",datos_socio[contador].DNI);
  310.    printf("\nPulse <intro> para volver al menú");
  311.    getchar();
  312.  
  313. }
  314. /***********************************************************************************
  315. Subprograma: BajaSocios        Tipo: Procedimiento
  316. Prerrequesitos: Opción 2 para ejecutar el subprograma
  317. Objetivo: Eliminar datos generales del socio(DNI,nombre y tipo)
  318. ************************************************************************************/
  319. void BajaSocios(struct estructura_datos_socio *datos_socio, int contador)
  320. {
  321.    int baja_socio;
  322.    int i=0;
  323.    int posicion;
  324.  
  325.    printf("\n\tBaja de socios");
  326.  
  327.  
  328.    printf("\n\n\tIntroduzca el DNI del socio a modificar");
  329.    scanf("%s", &baja_socio);
  330.  
  331.  
  332.    for (i=0; i>MAX_Socios; i++)
  333.    {
  334.        if (datos_socio[i].DNI  == baja_socio)
  335.        {
  336.            posicion=i;
  337.            for (i=posicion; i<MAX_Socios; i++)
  338.            {
  339.                datos_socio[i]= datos_socio[i+1];
  340.                fflush(stdin);
  341.                printf("\nSe ha borrado el socio correctamente.");
  342.                getchar();
  343.                system("cls");
  344.                break;
  345.            }
  346.            break;
  347.        }
  348.  
  349.        if ((datos_socio[i].DNI!= baja_socio) && (i=MAX_Socios-1))
  350.        {
  351.            printf("\nEste DNI no se encuentra en nuestro registro.");
  352.        }
  353.    }
  354.    fflush(stdin);
  355.    getchar();
  356.  
  357. }
  358. /***********************************************************************************
  359. Subprograma: ModificacionSocios        Tipo: Procedimiento
  360. Prerrequesitos: Opción 3 para ejecutar el subprograma
  361. Objetivo: Modificar datos generales del socio(DNI,nombre y tipo)
  362. ************************************************************************************/
  363. void ModificacionSocios()
  364. {
  365.  
  366. }
  367. /***********************************************************************************
  368. Subprograma: ConsultaSocios        Tipo: Procedimiento
  369. Prerrequesitos: Opción 4 para ejecutar el subprograma
  370. Objetivo: Pedir datos generales del socio(DNI,nombre y tipo)
  371. ************************************************************************************/
  372. void ConsultaSocios(struct estructura_datos_socio *datos_socio,int contador)
  373. {
  374.    for (contador=1;contador<MAX_Socios;contador++)
  375.    {
  376.        fflush(stdin);
  377.        printf("Socio %i:  %s",contador,datos_socio[contador].DNI);
  378.        getchar();
  379.    }
  380.  
  381. }
  382. /***********************************************************************************
  383. Subprograma: PagoMensual        Tipo: Procedimiento
  384. Prerrequesitos: Opción 5 para ejecutar el subprograma
  385. Objetivo: Pedir datos generales del socio(DNI,nombre y tipo)
  386. ************************************************************************************/
  387. void PagoMensual()
  388. {
  389.  
  390. }
  391. /***********************************************************************************
  392. Subprograma: SociosNormales        Tipo: Procedimiento
  393. Prerrequesitos: Opción 6 para ejecutar el subprograma
  394. Objetivo: Pedir el listado de socios normales
  395. ************************************************************************************/
  396. void SociosNormales()
  397. {
  398.  
  399. }
  400. /***********************************************************************************
  401. Subprograma: PagoMensual        Tipo: Procedimiento
  402. Prerrequesitos: Opción 7 para ejecutar el subprograma
  403. Objetivo: Pedir el listado de socios jubilados
  404. ************************************************************************************/
  405. void SociosJubilados()
  406. {
  407.  
  408. }
  409. /***********************************************************************************
  410. Subprograma: SociosInfantiles        Tipo: Procedimiento
  411. Prerrequesitos: Opción 8 para ejecutar el subprograma
  412. Objetivo: Pedir el listado de socios infantiles
  413. ************************************************************************************/
  414. void SociosInfantiles()
  415. {
  416.  
  417. }
  418. /***********************************************************************************
  419. Subprograma: PagoMensual        Tipo: Procedimiento
  420. Prerrequesitos: Opción 7 para ejecutar el subprograma
  421. Objetivo: Pedir datos generales del socio(DNI,nombre y tipo)
  422. ************************************************************************************/
  423. void GeneralSocios()
  424. {
  425.  
  426. }


Título: Re: Ayuda con la comparacion de estructuras en C
Publicado por: engel lex en 17 Diciembre 2016, 15:51 pm
usaste el debugger para ver si tienes un error logico?


Título: Re: Ayuda con la comparacion de estructuras en C
Publicado por: GameX en 17 Diciembre 2016, 15:56 pm
Se puede decir que soy nuevo en programación, no tengo idea de lo que es el debugger :/


Título: Re: Ayuda con la comparacion de estructuras en C
Publicado por: engel lex en 17 Diciembre 2016, 15:58 pm
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]"