Untitled
unknown
plain_text
4 years ago
3.9 kB
14
Indexable
#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);
}Editor is loading...