elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Necesito ayuda urgente
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Necesito ayuda urgente  (Leído 1,449 veces)
kayron8

Desconectado Desconectado

Mensajes: 28


¡Tú mismo con tu mecanismo!


Ver Perfil WWW
Necesito ayuda urgente
« en: 11 Junio 2013, 10:14 am »

Tengo este ejercicio y no se por donde cojerlo, tengo muy poco hecho, espero que me puedan ayudar:

Ejercicio:

STRUCTS:
1. Dados los siguientes registros:
struct departament{
char nom[30];
char capd[20];
int codi;
};

struct empleat{
char nom[30];
struct departament dept;
float sou;
int codi;
};

Escribe les funciones y el programa principal que servirán para introducir valores a cada campo de los registros y mostrar todos los campos.
Hacer un programa que permita hacer un mantenimiento de los datos de una empresa del estilo struct empleat empresa[MAXT]; Las operaciones serán las típicas de: dar de alta un empleado, dar de baja, listar, modificar los datos, consultar per código.

Lo que llevo hecho:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. struct departament{
  5. char nom[30];
  6. char capd[20];
  7. int codi;
  8. };
  9.  
  10. struct empleat{
  11. char nom[30];
  12. struct departament;
  13. float sou;
  14. int codi;
  15. };dept;
  16.  
  17. Departament omplir();
  18. void mostrar(Departament dep);
  19. int menu();
  20.  
  21. departament d;
  22. empleat e;
  23.  
  24. int res=0,num=0,codi=0,codi_mostra,num_baixa=0;
  25.  
  26. do{
  27. res=menu();
  28.  
  29. switch(res){
  30.         case 1:
  31.              codi=alta_client(&c);
  32.              break;
  33.         case 2:
  34.              num=valida_codi(codi);
  35.              break;
  36.         case 3:
  37.              codi_mostra=mostra_client(c);
  38.              break;
  39.         case 4:
  40.              num_baixa=baixa_client(&c);
  41.  
  42.              break;
  43.         case 5:
  44.  
  45.              break;
  46.         case 6:
  47.  
  48.              return 0;
  49.              break;      
  50.         }
  51.  
  52.  
  53.  }while(res != 6);
  54.  system("PAUSE");
  55.  return 0;
  56. }
  57.  
  58.  
  59. Departament omplir(){
  60.        Departament d;
  61.        printf("Introdueix el nom del departament");
  62.        scanf("%d",&d.nom);
  63.        fflush(stdin);
  64.        printf("Introdueix el cap del departament");
  65.        gets(d.capd);
  66.        fflush(stdin);
  67.        printf("Introdueix el codi");
  68.        scanf("%lf",&d.codi);
  69.        fflush(stdin);
  70.        return d;
  71.        }
  72.  
  73. int menu(){
  74.    int num;
  75.    do{
  76.    printf("1-Donar d'alta\n2-Donar de baixa\n3-Llistar\n4-Modificar dades\n5-Consultar per codi");
  77.    scanf("%d",&num);
  78.    }while(num<0 || num>5);
  79.    return num;
  80.  
  81.    }
  82.  

Muchas gracias por la ayuda :)


« Última modificación: 11 Junio 2013, 10:19 am por kayron8 » En línea

¡Salu2 a to2!
aguml


Desconectado Desconectado

Mensajes: 378



Ver Perfil
Re: Necesito ayuda urgente
« Respuesta #1 en: 11 Junio 2013, 17:39 pm »

tengo dudas con alguna que otra cosa que estáen catalan o no se que es pero intentaré ayudarte. Tengo varias preguntas para poder ayudarte. ¿Puedes usar archivos para guardar los datos o tiene que ser un array de estructuras de tamaño fijo o tiene que ser con asignacion de memoria dinamica? Dependiendo de lo que se use la cosa cambia. En el caso de usar archivos pues necesitarias tocar el tema de archivos de acceso aleatorio, para el caso de usar asignacion de memoria dinamica pues tendrias que estudiar mas el tema de punteros y el uso de malloc y free, y en el caso de usar un tamaño fijo de array de estructura pues la cosa se hace mucho mas sencilla y solo tendrias que tener claro el uso de punteros.


« Última modificación: 11 Junio 2013, 17:46 pm por aguml » En línea

aguml


Desconectado Desconectado

Mensajes: 378



Ver Perfil
Re: Necesito ayuda urgente
« Respuesta #2 en: 12 Junio 2013, 11:10 am »

Bueno, no seria tan urgente cuando ni me contestaste  :rolleyes:
De todos modos te pongo el enlace a algo que acabo de contestar donde puedes ver un codigo que te puede servir, y mucho, de apoyo para tu tarea: http://foro.elhacker.net/programacion_cc/problema_fwrite-t391462.0.html
En línea

kayron8

Desconectado Desconectado

Mensajes: 28


¡Tú mismo con tu mecanismo!


Ver Perfil WWW
Re: Necesito ayuda urgente
« Respuesta #3 en: 12 Junio 2013, 20:09 pm »

Primero de todo pedir disculpas por mi ausencia, no quisiera dar a entender que he perdido interés y mucho menos abandonar el tema, simplemente he estado en una semana de exámenes y como buen estudiante me puse a hincar los codos jajaja

En su día sí que me urgía que me hacheáis un cable para poder ayudarme a resolver el problema, básicamente el problema que tengo con ese ejercicio es que al no usar un typedef en las estructuras no sé si como lo tengo planteado iba bien y menos aún el uso de registros dentro de otros (en clase no hicimos ningún ejercicio de esas características).

Como aclaración decirte que el ejercicio, según al tema que pertenecía no se debía de  resolver mediante la utilización de ficheros, por lo que lo suyo sería mediante el uso de vectores.

En cuanto al idioma, tal como habrás de deducido, soy catalán, sí que es verdad que parte del ejercicio lo traduje pero de la otra parte no me di cuenta, pido perdón por el despiste.

Con mucho gusto veré el link que me pasaste para que me sirva de ayuda, muchas gracias por tu tiempo y ganas.

¡Un saludo!
En línea

¡Salu2 a to2!
aguml


Desconectado Desconectado

Mensajes: 378



Ver Perfil
Re: Necesito ayuda urgente
« Respuesta #4 en: 13 Junio 2013, 00:21 am »

con array de estructuras es mas sencillo y claro que puedes anidar structs dentro de structs sin problemas. Ojalá te sirva de ayuda.
En línea

aguml


Desconectado Desconectado

Mensajes: 378



Ver Perfil
Re: Necesito ayuda urgente
« Respuesta #5 en: 13 Junio 2013, 11:16 am »

Te pongo el codigo modificado para que lo puedas ver con el uso de arrays de structuras:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. #define SIZEMAX 10 //Indicamos el numero maximo de registros
  6.  
  7. struct stRegistro {
  8.        int ID;
  9.        char nombre[25];
  10.        int cantidad;
  11. };
  12.  
  13. int Menu(void);
  14. void ChangeStock(char *operacion, struct stRegistro *reg);
  15. void MostrarCabecera(void);
  16. void MostrarProducto(long n, struct stRegistro *reg);
  17. long LeeNumero(void);
  18. int Borrar(struct stRegistro *reg, long numero);
  19. int Confirmar(char *operacion);
  20. int CountReg(struct stRegistro *reg);
  21. //--------------------------------------------------------------------------
  22.  
  23. int main()
  24. {
  25.        struct stRegistro reg[SIZEMAX];
  26.        struct stRegistro aux;
  27.        char nombre[25];
  28.        int i, opcion, nRegistros, encontrado, ID, retval;
  29.        long numero;
  30.  
  31.        memset(reg, 0, sizeof(reg));
  32.        do {
  33.                opcion = Menu();
  34.                switch(opcion) {
  35.                        case '1': // Añadir o incrementar el stock
  36.                                encontrado = 0;
  37.                                nRegistros = CountReg(reg);
  38.                                ChangeStock("Añadir al stock", &aux);
  39.                                for(i = 0; i<nRegistros; i++)
  40.                                {
  41.                                        if(strcmp(aux.nombre, reg[i].nombre) == 0 &&
  42.                                           Confirmar("incremenar la existencia del producto indicado") == 1)
  43.                                        {
  44.                                                reg[i].cantidad += aux.cantidad;
  45.                                                encontrado = 1;
  46.                                                printf("\nSe a incrementado satisfactoriamente el stockaje del producto.\n\n");
  47.                                                break;
  48.                                        }
  49.                                }
  50.                                if(encontrado == 0 && Confirmar("incorporar un nuevo producto al stock") == 1)
  51.                                {
  52.                                        if(nRegistros == 0)
  53.                                                ID = 1;
  54.                                        else
  55.                                        {
  56.                                                ID = reg[i-1].ID + 1;
  57.                                        }
  58.                                        reg[i].ID = ID;
  59.                                        strcpy(reg[i].nombre, aux.nombre);
  60.                                        reg[i].cantidad = aux.cantidad;
  61.                                        printf("\nSe ha añadido satisfactoriamente una nueva entrada al stockage.\n\n");
  62.                                }
  63.                                system("PAUSE");
  64.                                break;
  65.                        case '2': // Ventas de stockaje
  66.                                encontrado = 0;
  67.                                nRegistros = CountReg(reg);
  68.                                ChangeStock("Venta de stockaje", &aux);
  69.                                for(i = 0; i < nRegistros; i++)
  70.                                {
  71.                                        if(strcmp(aux.nombre, reg[i].nombre) == 0)
  72.                                        {
  73.                                                encontrado = 1;
  74.                                                if(aux.cantidad <= reg[i].cantidad)
  75.                                                {
  76.                                                        reg[i].cantidad -= aux.cantidad;
  77.                                                        printf("\nLa venta se ha realizado satisfactoriamente.\n\n");
  78.                                                }else{
  79.                                                        printf("\nNo hay suficiente stockaje de ese producto para esta venta.\n");
  80.                                                        MostrarCabecera();
  81.                                                        MostrarProducto(i, &reg[i]);
  82.                                                        printf("|---------|-------------------------|--------|\n\n");
  83.                                                }
  84.                                                break;
  85.                                        }
  86.                                }
  87.                                if(encontrado == 0)
  88.                                {
  89.                                        printf("\nNo se puede encontrar el producto indicado.\n\n");
  90.                                }
  91.                                system("PAUSE");
  92.                                break;
  93.                        case '3': // Mostrar stock de un producto por su ID
  94.                                encontrado = 0;
  95.                                system("cls");
  96.                                printf("Buscar stock por ID: ");
  97.                                ID = LeeNumero();
  98.                                nRegistros = CountReg(reg);
  99.                                for(i = 0; i < nRegistros; i++)
  100.                                {
  101.                                        if(ID == reg[i].ID)
  102.                                        {
  103.                                                encontrado = 1;
  104.                                                MostrarCabecera();
  105.                                                MostrarProducto(i, &reg[i]);
  106.                                                break;
  107.                                        }
  108.                                }
  109.                                if(encontrado == 0)
  110.                                {
  111.                                        printf("\nNo se puede encontrar el producto indicado.\n\n");
  112.                                }
  113.                                else
  114.                                {
  115.                                        printf("|---------|-------------------------|--------|\n\n");
  116.                                }
  117.                                system("PAUSE");
  118.                                break;
  119.                        case '4': // Mostrar stock de un producto por su nombre
  120.                                encontrado = 0;
  121.                                system("cls");
  122.                                printf("Buscar stock por nombre: ");
  123.                                fgets(nombre, 25, stdin);
  124.                                for(i = strlen(nombre) - 1; i && nombre[i] < ' '; i--)
  125.                                        nombre[i] = 0;
  126.                                nRegistros = CountReg(reg);
  127.                                for(i = 0; i < nRegistros; i++)
  128.                                {
  129.                                        if(strcmp(nombre, reg[i].nombre) == 0)
  130.                                        {
  131.                                                encontrado = 1;
  132.                                                MostrarCabecera();
  133.                                                MostrarProducto(i, &reg[i]);
  134.                                                break;
  135.                                        }
  136.                                }
  137.                                if(encontrado == 0)
  138.                                {
  139.                                        printf("\nNo se puede encontrar el producto indicado.\n\n");
  140.                                        system("PAUSE");
  141.                                }
  142.                                else
  143.                                {
  144.                                        printf("|---------|-------------------------|--------|\n\n");
  145.                                }
  146.                                system("PAUSE");
  147.                                break;
  148.                        case '5': // Mostrar todo el stockaje
  149.                                encontrado = 0;
  150.                                numero = 0;
  151.                                system("cls");
  152.                                nRegistros = CountReg(reg);
  153.                                if(nRegistros > 0)
  154.                                {
  155.                                        encontrado = 1;
  156.                                        MostrarCabecera();
  157.                                        for(i = 0; i < nRegistros; i++)
  158.                                        {
  159.                                                MostrarProducto(numero++, &reg[i]);
  160.                                        }
  161.                                        printf("|---------|-------------------------|--------|\n\n");
  162.                                }
  163.                                if(encontrado == 0)
  164.                                {
  165.                                        printf("\nNo existen entradas en el registro.\n");
  166.                                }
  167.                                system("PAUSE");
  168.                                break;
  169.                        case '6': // Eliminar del stock
  170.                                system("cls");
  171.                                printf("Eliminar del stock: ");
  172.                                numero = LeeNumero();
  173.                                retval = Borrar(reg, numero);
  174.                                if(retval == 0)
  175.                                {
  176.                                        printf("\nNo existe ese ID de producto.\n\n");
  177.                                }
  178.                                else if(retval == 1)
  179.                                {
  180.                                        printf("\nEntrada borrada satisfactoriamente.\n\n");
  181.                                }
  182.                                else if(retval == -1)
  183.                                {
  184.                                        printf("\nNo se ha realizado ningun cambio.\n\n");
  185.                                }
  186.                                system("PAUSE");
  187.                                break;
  188.                }
  189.        } while(opcion != '0');
  190.        return 0;
  191. }
  192. //--------------------------------------------------------------------------
  193.  
  194. // Muestra un menú con las opciones disponibles y captura una opción del usuario
  195. int Menu(void)
  196. {
  197.        char resp[20];
  198.        do {
  199.                system("cls");
  200.                printf("MENU PRINCIPAL\n");
  201.                printf("--------------\n\n");
  202.                printf("1- Añadir al stock\n");
  203.                printf("2- Venta\n");
  204.                printf("3- Buscar stock por su ID\n");
  205.                printf("4- Buscar stock por su nombre\n");
  206.                printf("5- Mostrar todo el stockaje\n");
  207.                printf("6- Eliminar producto del stock por su ID\n");
  208.                printf("0- Salir\n");
  209.                fgets(resp, 20, stdin);
  210.        } while(resp[0] < '0' && resp[0] > '6');
  211.        return resp[0];
  212. }
  213. //--------------------------------------------------------------------------
  214.  
  215. // Permite que el usuario introduzca un producto por pantalla
  216. void ChangeStock(char *operacion, struct stRegistro *reg)
  217. {
  218.        int i;
  219.        char numero[6];
  220.        system("cls");
  221.        printf("%s:", operacion);
  222.        printf("\n\n");
  223.        printf("Nombre: ");
  224.        fgets(reg->nombre, 25, stdin);
  225.        // la función fgets captura el retorno de línea, hay que eliminarlo:
  226.        for(i = strlen(reg->nombre) - 1; i && reg->nombre[i] < ' '; i--)
  227.                reg->nombre[i] = 0;
  228.        printf("Cantidad: ");
  229.        fgets(numero, 6, stdin);
  230.        reg->cantidad = atoi(numero);
  231. }
  232. //--------------------------------------------------------------------------
  233.  
  234. // Muestra la cabecera de la tabla por pantalla
  235. void MostrarCabecera(void)
  236. {
  237.        printf("\n");
  238.        printf("|---------|-------------------------|--------|\n"
  239.               "|ID       |Nombre                   |Cantidad|\n"
  240.               "|---------|-------------------------|--------|\n");
  241. }
  242. //--------------------------------------------------------------------------
  243.  
  244. // Muestra un producto por pantalla
  245. void MostrarProducto(long n, struct stRegistro *reg)
  246. {
  247.        printf("|[%6ld] |%-25s| %4d   |\n", reg->ID, reg->nombre, reg->cantidad);
  248. }
  249. //--------------------------------------------------------------------------
  250.  
  251. // Lee un número suministrado por el usuario
  252. long LeeNumero()
  253. {
  254.        char numero[6];
  255.        fgets(numero, 6, stdin);
  256.        return atoi(numero);
  257. }
  258. //--------------------------------------------------------------------------
  259.  
  260. // Borra una entrada del archivo
  261. int Borrar(struct stRegistro *reg, long numero)
  262. {
  263.        struct stRegistro temp[SIZEMAX];
  264.        int nRegistros, i, j, encontrado = 0;
  265.  
  266.        nRegistros = CountReg(reg);
  267.        for(i = 0, j = 0; i < nRegistros; i++)
  268.        {
  269.                if(numero != reg[i].ID)
  270.                {
  271.                        temp[j].ID = reg[i].ID;
  272.                        strcpy(temp[j].nombre,reg[i].nombre);
  273.                        temp[j].cantidad = reg[i].cantidad;
  274.                        j++;
  275.                }
  276.                else
  277.                {
  278.                        encontrado = 1;
  279.                }
  280.        }
  281.        if(encontrado == 1)
  282.        {
  283.                if(Confirmar("eliminar la entrada indicada"))
  284.                {
  285.                        memset(reg, 0, sizeof(struct stRegistro) * nRegistros);
  286.                        for(i = 0; i < nRegistros - 1; i++)
  287.                        {
  288.                                reg[i].ID = temp[i].ID;
  289.                                strcpy(reg[i].nombre, temp[i].nombre);
  290.                                reg[i].cantidad = temp[i].cantidad;
  291.                        }
  292.                }
  293.                else
  294.                {
  295.                        encontrado = -1;
  296.                }
  297.        }
  298.        return encontrado;
  299. }
  300. //--------------------------------------------------------------------------
  301.  
  302. int Confirmar(char *operacion)
  303. {
  304.        char valor;
  305.        int salida = 0;
  306.  
  307.        printf("Esta apunto de %s. Pulse 'S' y pulse intro para confirmar: ", operacion);
  308.        valor = getchar();
  309.        if(valor == 's' || valor == 'S')
  310.        {
  311.                salida = 1;
  312.        }
  313.        return salida;
  314. }
  315. //--------------------------------------------------------------------------
  316.  
  317. int CountReg(struct stRegistro *reg)
  318. {
  319.        int i;
  320.  
  321.        for(i = 0; i < SIZEMAX; i++)
  322.                if(strcmp(reg[i].nombre, "")==0)
  323.                        break;
  324.        return i;
  325. }
  326. //--------------------------------------------------------------------------
En línea

kayron8

Desconectado Desconectado

Mensajes: 28


¡Tú mismo con tu mecanismo!


Ver Perfil WWW
Re: Necesito ayuda urgente
« Respuesta #6 en: 13 Junio 2013, 20:44 pm »

Muchas gracias por tu ayuda aguml

¡Un saludo!
En línea

¡Salu2 a to2!
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
AOE II necesito ayuda urgente!!!
Juegos y Consolas
xuko 3 1,421 Último mensaje 7 Septiembre 2004, 05:06 am
por DJ46
Necesito entregar una práctica urgente
Java
dj13 6 2,295 Último mensaje 10 Junio 2021, 00:07 am
por Danielㅤ
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines