Untitled

mail@pastecode.io avatar
unknown
plain_text
2 years ago
3.9 kB
7
Indexable
Never
#include <iostream>
#include <stdlib.h>
#include <string.h>
using namespace std;

struct Producto
{
    char codigo;
    int stock;
};

struct Pedido
{
    int numero;
    long numeroDeCliente;
    char codigoDeProducto;
    int cantidad;
};

void generarArchivoProductos(Producto productos[], int cant);
void generarArchivoPedidos(Pedido pedidos[], int cant);
void generarPedidosSatisfechos(FILE *productos, FILE *pedidos);
bool hayStock(Pedido pedido, FILE *productos);
void actualizarStock(Pedido pedido, FILE *productos, int posicion);
void generarPedidosInsatisfechos(FILE *productos, FILE *pedidos);

int main()
{
    int cantProductos = 5;
    int cantPedidos = 5;

    Producto productos[cantProductos] = {
        {'1', 10},
        {'2', 5},
        {'3', 20},
        {'4', 30},
        {'5', 10}};

    Pedido pedidos[cantPedidos] = {
        {1, 900, '4', 35},
        {2, 400, '1', 5},
        {3, 555, '3', 10},
        {4, 123, '3', 10},
        {5, 987, '2', 6}};

    generarArchivoProductos(productos, cantProductos);
    generarArchivoPedidos(pedidos, cantPedidos);

    FILE *fileProductos = fopen("PRODUCTOS.dat", "rb");
    FILE *filePedidos = fopen("PEDIDOS.dat", "rb");

    generarPedidosSatisfechos(fileProductos, filePedidos);
    generarPedidosInsatisfechos(fileProductos, filePedidos);

    return 0;
}

void generarArchivoProductos(Producto productos[], int cant)
{
    FILE *fileProductos = fopen("PRODUCTOS.dat", "wb");

    for (int i = 0; i < cant; i++)
    {
        fwrite(&productos[i], sizeof(Producto), 1, fileProductos);
    }

    fclose(fileProductos);
}

void generarArchivoPedidos(Pedido pedidos[], int cant)
{
    FILE *filePedidos = fopen("PEDIDOS.dat", "wb");

    for (int i = 0; i < cant; i++)
    {
        fwrite(&pedidos[i], sizeof(Pedido), 1, filePedidos);
    }

    fclose(filePedidos);
}

void generarPedidosSatisfechos(FILE *productos, FILE *pedidos)
{
    Pedido pedido;
    Producto producto;
    FILE *pedidosSatisfechos = fopen("PedidosOK.txt", "w");

    fputs("Pedidos Satisfechos\n", pedidosSatisfechos);
    fputs("Numero de pedido\tNumero de Cliente\tCodigo de Producto\tCantidad pedida\n", pedidosSatisfechos);

    fread(&pedido, sizeof(pedido), 1, pedidos);

    while (!feof(pedidos))
    {
        if (hayStock(pedido, productos))
        {
            fprintf(pedidosSatisfechos, "%d\t\t\t\t\t%d\t\t\t\t\t%d\t\t\t\t\t%d\n", pedido.numero, pedido.numeroDeCliente, pedido.codigoDeProducto, pedido.cantidad);
        }

        fread(&pedido, sizeof(pedido), 1, pedidos);
    }

    fclose(pedidosSatisfechos);
}

bool hayStock(Pedido pedido, FILE *productos)
{
    Producto producto;

    bool hayStock = false;
    int posicion = ((int)pedido.codigoDeProducto - '0') - 1;

    fseek(productos, posicion * sizeof(producto), SEEK_SET);
    fread(&producto, sizeof(producto), 1, productos);

    if (pedido.cantidad <= producto.stock)
    {
        actualizarStock(pedido, productos, posicion);
        hayStock = true;
    }

    return hayStock;
}

void actualizarStock(Pedido pedido, FILE *productos, int posicion)
{
    Producto producto;

    // Buscar producto a actualizar
    fseek(productos, posicion * sizeof(producto), SEEK_SET);
    fread(&producto, sizeof(producto), 1, productos);

    // Actualizar stock del producto
    producto.stock -= pedido.cantidad;
    fseek(productos, posicion * sizeof(producto), SEEK_SET);
    fwrite(&producto, sizeof(producto), 1, productos);
}

void generarPedidosInsatisfechos(FILE *productos, FILE *pedidos)
{
    Pedido pedido;
    Producto producto;
    FILE *pedidosInsatisfechos = fopen("PedidosNoOK.txt", "wb");

    fread(&pedido, sizeof(pedido), 1, pedidos);

    while (!feof(pedidos))
    {
        if (!hayStock(pedido, productos))
        {
            fwrite(&pedido, sizeof(pedido), 1, pedidosInsatisfechos);
        }

        fread(&pedido, sizeof(pedido), 1, pedidos);
    }

    fclose(pedidosInsatisfechos);
}