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ú

Mensajes - jaxoR

#41
Programación C/C++ / Crear registro
17 Febrero 2015, 02:17 AM
Hola, hoy tenía una duda. Quiero crear un registro dependiendo de cuantos campos escriba el usuario.

Ejemplo:

El usuario ingresa que quiere un registro de 5 enteros. Como hago para crear un registro dependiendo de lo que escribe el usuario?

Saludos
#42
Termine de editarlo y le agregue un fclose mas que me faltaba, pero sigue tirando el mismo error :S

Código (cpp) [Seleccionar]
#include <stdio.h>
#include <stdlib.h>

typedef struct
{
    int legajo;
    char CUIL[13];
    char nombre[31];
    char apellido[31];
    char sexo[3];
    char categoria[3];
    char obrasocial[51];
    float sueldo;
    char activo[2];
} registro;

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

void CargarRegistro()
{
registro reg;
    FILE *archivo;

archivo = fopen("empleados.dat", "a");
    if(archivo == NULL)
{
printf("No se pudo abrir el archivo\n");
return;
}

    printf("Ingrese CUIL (Formato xx-xxxxxxxxxx): \n");
    scanf("%s", reg.CUIL);
    printf("Ingrese Nombre: \n");
    scanf("%s", reg.nombre);
    printf("Ingrese Apellido: \n");
    scanf("%s", reg.apellido);
    printf("Ingrese sexo: \n");
    scanf("%s", reg.sexo);
    printf("Ingrese categoria: \n");
    scanf("%s", reg.categoria);
    printf("Ingrese Obra social: \n");
    scanf("%s", reg.obrasocial);
    printf("Ingrese sueldo: \n");
    scanf("%f", &reg.sueldo);
    reg.activo[0] = '1';

    fwrite(&reg, sizeof(registro), 1, archivo);

    fclose(archivo);

    return;
}

void Alta(registro datos)
{
    int legajo = 0, encontrado = 0;
    FILE *archivo;

    printf("Ingrese un numero de legajo (0 para salir): \n");
    scanf("%d", &legajo);

    while(legajo != 0)
    {
    archivo = fopen("empleados.dat", "r");
        if(archivo == NULL)
        {
            printf("No se pudo abrir el archivo\n");
            return;
        }

        fread(&datos, sizeof(registro), 1, archivo);
        while((!feof(archivo)) && (encontrado == 0))
        {
            if(datos.legajo == legajo)
            {
                encontrado = 1;
                fclose(archivo);
            }

            fread(&datos, sizeof(registro), 1, archivo);
        }

        if(encontrado == 1)
        {
            printf("El legajo ya existe\n");
            return;
        }
        else
        {
        fclose(archivo);
            CargarRegistro();
        }

        return;
    }
}

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

void Baja(registro datos)
{
    int legajo = 0;
    int confirmar = 0;
    FILE *archivo;

    printf("Ingrese un numero de legajo (0 para salir): \n");
    scanf("%d", &legajo);

    while(legajo != 0)
    {
    archivo = fopen("empleados.dat", "r+");
        if(archivo == NULL)
        {
            printf("No se pudo abrir el archivo\n");
            return;
        }

        fread(&datos, sizeof(registro), 1, archivo);
        while(!feof(archivo))
        {
            if((datos.legajo == legajo) && (datos.activo[0] == '1'))
            {
                printf("Esta seguro que desea dar de baja el registro?\n[ 1 ] - Si\n[ 2 ] - No\n");
                scanf("%d", &confirmar);
               
                while((confirmar != 0) && (confirmar != 1))
                {
                    printf("Opcion incorrecta. Esta seguro que desea dar de baja el registro?\n[ 1 ] - Si\n[ 2 ] - No\n");
                    scanf("%d", &confirmar);
                }

                switch(confirmar)
                {
                    case 1:
                        datos.activo[0] = '0';
                        fwrite(&datos, sizeof(registro), 1, archivo);
                        fclose(archivo);
                        return;
                        break;

                    case 2: return; break;
                }

            }

            fread(&datos, sizeof(registro), 1, archivo);
        }

        fclose(archivo);

    }
}

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

int OpcionModif(registro reg, int x)
{
    printf("Datos del empleado a modificar:\n");
    printf("%d\n", reg.legajo);
    printf("%s\n", reg.CUIL);
    printf("%s\n", reg.nombre);
    printf("%s\n", reg.apellido);
    printf("%s\n", reg.sexo);
    printf("%s\n", reg.categoria);
    printf("%s\n", reg.obrasocial);
    printf("%f\n", reg.sueldo);
    printf("%s\n", reg.activo);

    printf("Elija que dato desea modificar\n");
    printf("[ 1 ] - Sexo\n[ 2 ] - Categoria\n[ 3 ] - Obra social\n[ 4 ] - Sueldo\nIngrese cualquier otro numero para salir\n");
    scanf("%d", &x);

    while( (x < 0) && (x > 5) )
    {
        printf("Elija que dato desea modificar\n");
        printf("[ 1 ] - Sexo\n[ 2 ] - Categoria\n[ 3 ] - Obra social\n[ 4 ] - Sueldo\nIngrese cualquier otro numero para salir\n");
        scanf("%d", &x);
    }

    return x;
}

void Modificar(registro datos)
{
    int legajo = 0, opc = 0;
    FILE *archivo;

    printf("Ingrese un numero de legajo (0 para salir): \n");
    scanf("%d", &legajo);

    while(legajo != 0)
    {
    archivo = fopen("empleados.dat", "r+");
        if(archivo == NULL)
        {
            printf("No se pudo abrir el archivo\n");
            return;
        }

        fread(&datos, sizeof(registro), 1, archivo);

        while(!feof(archivo))
        {
            if((datos.legajo == legajo) && (datos.activo[0] = '1'))
            {
                opc = OpcionModif(datos, opc);

                switch(opc)
                {
                    case 1:
                        printf("Ingrese el sexo:\n");
                        scanf("%s", datos.sexo);
                        break;
                    case 2:
                        printf("Ingrese categoria:\n");
                        scanf("%s", datos.categoria);
                        break;
                    case 3:
                        printf("Ingrese Obra Social:\n");
                        scanf("%s", datos.obrasocial);
                        break;
                    case 4:
                        printf("Ingrese sueldo:\n");
                        scanf("%f", &datos.sueldo);
                        break;
                }

                fwrite(&datos, sizeof(registro), 1, archivo);
                fclose(archivo);
                return;

            }
            fread(&datos, sizeof(registro), 1, archivo);
        }


    }
    printf("El legajo no existe\n");
    fclose(archivo);
}

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

int main()
{
    int opcmenu = 1;
    registro empleados;
    FILE *archivo;

    while((opcmenu > 0) && (opcmenu < 7))
    {
        printf("Seleccione entre una de las opciones disponibles\n");
        printf("[ 1 ] - Altas\n[ 2 ] - Bajas\n[ 3 ] - Modificacion\n[ 4 ] - Listado\n[ 5 ] - Aumentar salario\n[ 6 ] - Buscar por legajo\n[ 7 ] - Salir\n");
        scanf("%d", &opcmenu);

        switch(opcmenu)
        {
            case 1: Alta(empleados); break;
            case 2: Baja(empleados); break;
            case 3: Modificar(empleados); break;
            case 7: return -1; break;

        }
    }

    return 0;
}
#43
Muchas gracias por las respuestas. El único problema que me queda es que en bajas y en modificación no se abre el archivo, ya teniendolo creado... No logré encontrar el error, ya que en Altas me abre y carga perfecto pero en Bajas y modificación no, y esta tal cual.

Saludos
#44
Bueno, tengo un TP para la universidad de un programa de registros y archivos.  Tengo varios problemas lógicos, pero el que mas me interesa es el que al terminar un procedimiento, por ejemplo Altas, directamente va a otra opcion sin ingresar nada, y recorre todos los procedimientos sin que yo se lo indique.

Acá les dejo el código que tengo hasta ahora:

Código (cpp) [Seleccionar]
#include <stdio.h>
#include <stdlib.h>

typedef struct
{
    int legajo;
    char CUIL[13];
    char nombre[31];
    char apellido[31];
    char sexo[3];
    char categoria[3];
    char obrasocial[51];
    float sueldo;
    char activo[2];
} registro;

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

void CargarRegistro()
{
    registro reg;
    FILE *archivo;

    if((archivo = fopen("empleados.dat", "a")) == NULL)
{
printf("No se pudo abrir el archivo\n");
return;
}

    printf("Ingrese CUIL (Formato xx-xxxxxxxxxx): \n");
    scanf("%s", reg.CUIL);
    printf("Ingrese Nombre: \n");
    scanf("%s", reg.nombre);
    printf("Ingrese Apellido: \n");
    scanf("%s", reg.apellido);
    printf("Ingrese sexo: \n");
    scanf("%s", reg.sexo);
    printf("Ingrese categoria: \n");
    scanf("%s", reg.categoria);
    printf("Ingrese Obra social: \n");
    scanf("%s", reg.obrasocial);
    printf("Ingrese sueldo: \n");
    scanf("%f", &reg.sueldo);
    reg.activo[0] = '1';

    fwrite(&reg, sizeof(registro), 1, archivo);

    fclose(archivo);

    return;
}

void Alta(registro datos)
{
    int legajo = 0, encontrado = 0;
    FILE *archivo;

    printf("Ingrese un numero de legajo (0 para salir): \n");
    scanf("%d", &legajo);

    while(legajo != 0)
    {
        if((archivo = fopen("empleados.dat", "r")) == NULL)
        {
            printf("No se pudo abrir el archivo\n");
            return;
        }

        fread(&datos, sizeof(registro), 1, archivo);
        while((!feof(archivo)) && (encontrado == 0))
        {
            if(datos.legajo == legajo)
            {
                encontrado = 1;
                fclose(archivo);
            }

            fread(&datos, sizeof(registro), 1, archivo);
        }

        if(encontrado == 1)
        {
            printf("El legajo ya existe\n");
            return;
        }
        else
        {
            CargarRegistro();
        }

        return;
    }
}

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

void Baja(registro datos)
{
    int legajo = 0;
    int confirmar = 0;
    FILE *archivo;

    printf("Ingrese un numero de legajo (0 para salir): \n");
    scanf("%d", &legajo);

    while(legajo != 0)
    {
        if((archivo = fopen("empleados.dat", "rt")) == NULL)
        {
            printf("No se pudo abrir el archivo\n");
            return;
        }

        fread(&datos, sizeof(registro), 1, archivo);
        while(!feof(archivo))
        {
            if((datos.legajo == legajo) && (datos.activo[0] == '1'))
            {
                printf("Esta seguro que desea dar de baja el registro?\n[ 1 ] - Si\n[ 2 ] - No\n");
                scanf("%d", &confirmar);
                while((confirmar != 0) && (confirmar != 1))
                {
                    printf("Opcion incorrecta. Esta seguro que desea dar de baja el registro?\n[ 1 ] - Si\n[ 2 ] - No\n");
                    scanf("%d", &confirmar);
                }

                switch(confirmar)
                {
                    case 1:
                        datos.activo[0] = '0';
                        fwrite(&datos, sizeof(registro), 1, archivo);
                        fclose(archivo);
                        return;

                    case 2: return;
                }

            }

            fread(&datos, sizeof(registro), 1, archivo);
        }

        fclose(archivo);

    }
}

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

int OpcionModif(registro reg, int x)
{
    printf("Datos del empleado a modificar:\n");
    printf("%d\n", reg.legajo);
    printf("%s\n", reg.CUIL);
    printf("%s\n", reg.nombre);
    printf("%s\n", reg.apellido);
    printf("%s\n", reg.sexo);
    printf("%s\n", reg.categoria);
    printf("%s\n", reg.obrasocial);
    printf("%f\n", reg.sueldo);
    printf("%s\n", reg.activo);

    printf("Elija que dato desea modificar\n");
    printf("[ 1 ] - Sexo\n[ 2 ] - Categoria\n[ 3 ] - Obra social\n[ 4 ] - Sueldo\nIngrese cualquier otro numero para salir\n");
    scanf("%d", &x);

    while( (x < 0) && (x > 5) )
    {
        printf("Elija que dato desea modificar\n");
        printf("[ 1 ] - Sexo\n[ 2 ] - Categoria\n[ 3 ] - Obra social\n[ 4 ] - Sueldo\nIngrese cualquier otro numero para salir\n");
        scanf("%d", &x);
    }

    return x;
}

void Modificar(registro datos)
{
    int legajo = 0, opc = 0;
    FILE *archivo;

    printf("Ingrese un numero de legajo (0 para salir): \n");
    scanf("%d", &legajo);

    while(legajo != 0)
    {
        if((archivo = fopen("empleados.dat", "r")) == NULL)
        {
            printf("No se pudo abrir el archivo\n");
            return;
        }

        fread(&datos, sizeof(registro), 1, archivo);

        while(!feof(archivo))
        {
            if((datos.legajo == legajo) && (datos.activo[0] = '1'))
            {
                opc = OpcionModif(datos, opc);

                switch(opc)
                {
                    case 1:
                        printf("Ingrese el sexo:\n");
                        scanf("%s", datos.sexo);
                    case 2:
                        printf("Ingrese categoria:\n");
                        scanf("%s", datos.categoria);
                    case 3:
                        printf("Ingrese Obra Social:\n");
                        scanf("%s", datos.obrasocial);
                    case 4:
                        printf("Ingrese sueldo:\n");
                        scanf("%f", &datos.sueldo);
                }

                fwrite(&datos, sizeof(registro), 1, archivo);
                fclose(archivo);
                return;

            }
            fread(&datos, sizeof(registro), 1, archivo);
        }


    }
    printf("El legajo no existe\n");
}

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

int main()
{
    int opcmenu = 1;
    registro empleados;

    while((opcmenu > 0) && (opcmenu < 7))
    {
        printf("Seleccione entre una de las opciones disponibles\n");
        printf("[ 1 ] - Altas\n[ 2 ] - Bajas\n[ 3 ] - Modificacion\n[ 4 ] - Listado\n[ 5 ] - Aumentar salario\n[ 6 ] - Buscar por legajo\n[ 7 ] - Salir\n");
        scanf("%d", &opcmenu);

        switch(opcmenu)
        {
            case 1: Alta(empleados);
            case 2: Baja(empleados);
            case 3: Modificar(empleados);
            case 7: return -1;

        }
    }

    return 0;
}
#45
Sí, no lo quise poner en Foro Libre por eso. Gracias por el artículo, era la info que estaba buscando. Gracias!
#46
Eso mismo, me surgió esta duda escuchando sobre un secuestro en el que los secuestradores dicen que "interfirieron" el numero del celular del hijo, osea las victimas llamaban al celular del secuestrado y lo atendían ellos (Cuando en realidad el hijo no estaba secuestrado). Es posible interferir una señal sin ayuda de alguien interno en una empresa de telefonía?
#47
Programación C/C++ / Re: Problema con registros
4 Septiembre 2014, 22:50 PM
rir, gracias como siempre. Resolví todos los errores pero no entendí lo siguiente:

* En ambas funciones utilizas la notación "(*variable).campo" cuando puedes acortar evitando los paréntesis con "variable->campo".

No entiendo a que te refieres con: variable->campo

Y lo otro que no entendí es lo siguiente:

Código (cpp) [Seleccionar]
while (feof(*db) == 0){
   fgets((*clientes).apellido, 30, *db);
   printf("%s\n", (*clientes).nombre);

   /* ... */

   fscanf(*db, "%d", &(*clientes).edad);
   printf("%d\n", (*clientes).edad);

   {
      int ch;

      while ((ch = fgetc(*db)) != EOF && ch != '\n')
         ;
   }
}


No entiendo que hace el segundo while y cuando entraría adentro de esas llaves
#48
Programación C/C++ / Problema con registros
4 Septiembre 2014, 01:54 AM
Hola, tengo un problema al leer un archivo en el que guardo un registro. El problema es que me muestra varios signos y numeros que yo no ingrese. Les paso a dejar las funciones en donde escribo y leo el fichero (Paso el fichero y el archivo por referencia):

Código (cpp) [Seleccionar]
void DarDeAlta(registro *clientes, int n, FILE **db)
{
   int a = 1;

   while (a == 1)
   {
       printf("Ingrese un nombre: ");
       scanf("%s", ((*clientes).nombre));
       fprintf(*db, "%s\n", (*clientes).nombre);

       printf("Ingrese su apellido: ");
       scanf("%s", ((*clientes).apellido));
       fprintf(*db, "%s\n", (*clientes).apellido);

       printf("Ingrese el telefono: ");
       scanf("%d", &(*clientes).telefono);
       fprintf(*db, "%d\n", (*clientes).telefono);

       printf("Ingrese la edad: ");
       scanf("%d", &(*clientes).edad);
       fprintf(*db, "%d\n", (*clientes).edad);

       Seguir(&a);
   }

   fclose(*db);
   return;
}

void MostrarClientes(registro *clientes, int n, FILE **db)
{
   *db = fopen("clientes.dat", "r");
   if(*db == NULL)
   {
       printf("El archivo no existe\n");
   }
   else{
       while(feof(*db) == 0)
       {
           fgets((*clientes).apellido, 30, *db);
           printf("%s\n", (*clientes).nombre);

           fgets((*clientes).apellido, 30, *db);
           printf("%s\n", (*clientes).apellido);

           fscanf(*db, "%d", &(*clientes).telefono);
           printf("%d\n", (*clientes).telefono);

           fscanf(*db, "%d", &(*clientes).edad);
           printf("%d\n", (*clientes).edad);
       }
   }

   fclose(*db);
   return;
}
#49
Code::Blocks + MinGW