Untitled
unknown
plain_text
3 years ago
3.9 kB
9
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...