Funciones en C: Gestión de Inventario con y sin Punteros

Enviado por Chuletator online y clasificado en Informática y Telecomunicaciones

Escrito el en español con un tamaño de 8,63 KB

Funciones en C: Gestión de Inventario

A continuación, se presenta un ejemplo de código en C que implementa un sistema de gestión de inventario. Se exploran dos versiones: una que utiliza punteros y otra que no. Se detallan las funciones principales, incluyendo main, menu, salir, mostrar e insertar.

Función main (sin punteros)

La función main sin punteros gestiona el flujo principal del programa. Presenta un menú al usuario y ejecuta las acciones correspondientes según la opción seleccionada.

int main() {
    int opcion;
    do {
        limpiarPantalla(); 
        printf("\n\n MENÚ:\n\n");
        printf("\t 1. Mostrar la lista de estrellas\n\n");
        printf("\t 2. Insertar una nueva estrella\n\n");
        printf("\t 3. Consultar los datos de una estrella\n\n");
        printf("\t 4. Modificar los datos de una estrella\n\n");
        printf("\t 5. Borrar una estrella\n\n");
        printf("\t 6. Guardar en el disco\n\n");
        printf("\t 7. Recuperar los datos del inventario guardado.\n\n");
        printf("\t 8. Salir\n\n");
        printf("Elija una opción: \n\n");
        scanf("%d", &opcion);

        switch (opcion) {
            case 1:
                mostrarEstrellas();
                break;
            case 2:
                insertarEstrella();
                break;
            case 3:
                consultarEstrella();
                break;
            case 4:
                modificarEstrella();
                break;
            case 5:
                borrarEstrella();
                break;
            case 6:
                guardarEnDisco();
                break;
            case 7:
                recuperarDesdeDisco();
                break;
            case 8:
                printf("Saliendo...\n");
                break;
            default:
                printf("Opción no válida.\n");
        }
        printf("\nPresione Enter para continuar...");
        getchar(); 
        getchar(); 
    } while (opcion != 8);
    return 0;
}

Función main (con punteros)

La función main con punteros también gestiona el flujo principal, pero utiliza punteros para manipular las estructuras de datos.

void main() {
    int respuesta;
    char algomas[3];
    cabecera = NULL;
    do {
        respuesta = menu();
        switch (respuesta) {
            case 1:
                Mostrar();
                break;
            case 2:
                Insertar();
                break;
            case 3:
                Consultar();
                break;
            case 4:
                Modificacion();
                break;
            case 5:
                Guardado();
                break;
            case 6:
                Borrado();
                break;
            case 7:
                Recuperar();
                break;
            case 8:
                Salir();
                break;
            default:
                printf("La opción no es válida.\n\n");
                printf("Pulse intro para continuar.\n\n");
                gets(algomas);
                break;
        }
    } while (respuesta != 8);
}

Función menú (con punteros)

La función menú muestra las opciones disponibles al usuario y devuelve la opción seleccionada.

int menu() {
    int resp;
    system("cls");
    printf("\n\n MENÚ DE LA FERRETERÍA \n\n");
    printf("\t 1: Mostrar la lista de productos disponibles.\n\n");
    printf("\t 2: Insertar un nuevo producto.\n\n");
    printf("\t 3: Consultar el inventario.\n\n");
    printf("\t 4: Modificar algún producto.\n\n");
    printf("\t 5: Guardar en el disco.\n\n");
    printf("\t 6: Borrar algún producto del inventario.\n\n");
    printf("\t 7: Recuperar los datos del inventario guardado.\n\n");
    printf("\t 8: Salir.\n\n");
    printf("Elija una opción del menú:\n\n");
    scanf("%d", &resp);
    return (resp);
}

Función menú (sin punteros)

La función menú sin punteros tiene una estructura similar a la versión con punteros.

int menu() {
    int resp;
    return resp;
}

// Dentro de la función main:
int respuesta;
Almacen.cursor = 0;
do {
    respuesta = menu();
    switch (respuesta) {
        case 1:
            Mostrar();
            break;
        case 2:
            Insertar();
            break;
    }
} while (respuesta != 8);

Función salir (con punteros)

La función salir se encarga de finalizar la ejecución del programa.

void Salir() {
    char algomas[3];
    printf("Pulse intro para salir.\n");
    fflush(stdin);
    gets(algomas);
}

Función salir (sin punteros)

La función salir sin punteros se integra dentro del switch de la función main.

// En la función main, dentro del switch:
case 8:
    printf("Ha elegido la opción de salir del programa.\n\n");
    printf("Pulse una tecla para continuar");
    fflush(stdin);
    gets(algomas);
    break;

// En la función main:
char algomas[3];

Función mostrar (con punteros)

La función mostrar recorre la lista de productos y muestra sus datos en pantalla.

void Mostrar() {
    int i;
    char algomas[3];
    system("cls");
    i = 0;
    if (cabecera == NULL) {
        printf("\n No hay ningún producto guardado.\n");
    } else {
        aux = cabecera;
        while (aux != NULL) {
            printf("\n Posición del producto que se va a mostrar: %d \n", i);
            printf("Nombre del producto: %s\n", aux->datos.Nombre);
            printf("Número de cajas del producto: %d\n", aux->datos.Numero);
            printf("Número de la posición en el almacén: %d\n", aux->datos.Pos);
            printf("Letra de la posición en el almacén: %s\n", aux->datos.Letra);
            printf("Precio del producto por unidad: %3f\n", aux->datos.Precio);
            aux = aux->sig;
            i = i + 1;
        }
    }
    printf("\n Pulse intro para regresar al menú.\n");
    fflush(stdin);
    gets(algomas);
}

Función insertar (con punteros)

La función insertar permite añadir un nuevo producto al inventario.

void Insertar() {
    int opcion;
    char tecla[3];
    system("cls");
    do {
        nuevo = malloc(sizeof(struct nodo));
        nuevo->sig = NULL;
        if (cabecera == NULL) {
            cabecera = nuevo;
            ultimo = nuevo;
        } else {
            ultimo->sig = nuevo;
            ultimo = nuevo;
        }
        printf("Introduce el nombre del producto: \n");
        fflush(stdin);
        gets(nuevo->datos.Nombre);
        printf("Introduce el número de cajas: \n");
        scanf("%d", &nuevo->datos.Numero);
        printf("Introduce el número de la posición en el almacén: \n");
        scanf("%d", &nuevo->datos.Pos);
        printf("Introduce la letra de la posición en el almacén: \n");
        fflush(stdin);
        gets(nuevo->datos.Letra);
        printf("Introduce el precio unitario del producto: \n");
        scanf("%f", &nuevo->datos.Precio);
        printf("\n Si desea introducir otro producto pulse 1, sino 2: \n");
        scanf("%d", &opcion);
    } while (opcion == 1);
}

Función insertar (sin punteros)

La función insertar sin punteros también permite añadir un nuevo producto, pero utiliza una estructura de datos diferente.

void Insertar() {
    system("cls");
    char tecla[3];
    int opcion;
    do {
        printf("Introduce el nombre del producto:\n");
        fflush(stdin);
        gets(Almacen.Bloque[Almacen.cursor].Nombre);
        printf("Introduce el número de cajas:\n");
        scanf("%d", &Almacen.Bloque[Almacen.cursor].Numero);
        printf("Introduce el número de posición en el almacén:\n");
        scanf("%d", &Almacen.Bloque[Almacen.cursor].Pos);
        printf("Introduce la letra de la posición en el almacén:\n");
        fflush(stdin);
        gets(Almacen.Bloque[Almacen.cursor].Letra);
        printf("Introduce el precio unitario del producto: \n");
        scanf("%f", &Almacen.Bloque[Almacen.cursor].Precio);
        printf("El producto ha sido introducido de forma correcta. Por favor, pulse cualquier tecla.\n");
        Almacen.cursor++;
        printf("\n Si desea introducir otro producto pulse 1, sino pulse 2.\n");
        scanf("%d", &opcion);
    } while (opcion == 1);
}

Entradas relacionadas: