16/11/2022 ; 6:15 PM
This commit is contained in:
244
8. Estructuras y uniones/Programas/Programa 8.6/Programa 8.6.c
Normal file
244
8. Estructuras y uniones/Programas/Programa 8.6/Programa 8.6.c
Normal file
@@ -0,0 +1,244 @@
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
/* Comercializadora farmacéutica.
|
||||
El programa maneja información sobre ventas, inventario, reabastecimiento y
|
||||
➥nuevos productos de una comercializadora farmacéutica. */
|
||||
|
||||
typedef struct /* Declaración de la estructura producto. */
|
||||
{
|
||||
int clave;
|
||||
char nombre[15];
|
||||
float precio;
|
||||
int existencia;
|
||||
} producto;
|
||||
|
||||
void Lectura(producto*, int); /* Prototipos de funciones. */
|
||||
void Ventas(producto*, int);
|
||||
void Reabastecimiento(producto*, int);
|
||||
void Nuevos_Productos(producto*, int*);
|
||||
void Inventario(producto*, int);
|
||||
|
||||
void main(void)
|
||||
{
|
||||
producto INV[100];
|
||||
/* Se declara un arreglo unidimensional de tipo estructura producto. */
|
||||
int TAM, OPE;
|
||||
|
||||
do
|
||||
{
|
||||
printf("Ingrese el numero de productos: ");
|
||||
scanf("%d", &TAM);
|
||||
} while (TAM > 100 || TAM < 1);
|
||||
/* Se verifica que el número de productos ingresados sea correcto. */
|
||||
|
||||
Lectura(INV, TAM);
|
||||
|
||||
printf("\nIngrese operacion a realizar. \n\t\t1 – Ventas \n\t\t 2 – Reabastecimiento \n\t\t3 - Nuevos Productos \n\t\t 4 – Inventario \n\t\t 0 - Salir: ");
|
||||
scanf("%d", &OPE);
|
||||
while (OPE)
|
||||
{
|
||||
switch (OPE)
|
||||
{
|
||||
case 1: Ventas(INV, TAM);
|
||||
break;
|
||||
|
||||
case 2: Reabastecimiento(INV, TAM);
|
||||
break;
|
||||
|
||||
case 3: Nuevos_Productos(INV, &TAM);
|
||||
/* Se pasa el parámetro por referencia, porque se puede modificar el
|
||||
➥número de elementos del arreglo en la función. */
|
||||
break;
|
||||
|
||||
case 4: Inventario(INV, TAM);
|
||||
break;
|
||||
};
|
||||
|
||||
printf("\nIngrese operacion a realizar. \n\t\t 1 – Ventas \n\t\t 2 – Reabastecimiento \n\t\t 3 - Nuevos Productos \n\t\t 4 – Inventario \n\t\t 0 - Salir: ");
|
||||
scanf("%d", &OPE);
|
||||
}
|
||||
}
|
||||
void Lectura(producto A[], int T)
|
||||
/* Esta función se utiliza para leer un arreglo unidimensional de tipo
|
||||
➥estructura producto de T elementos. */
|
||||
{
|
||||
int I;
|
||||
for (I = 0; I < T; I++)
|
||||
{
|
||||
printf("\nIngrese informacion del producto %d", I + 1);
|
||||
printf("\n\tClave: ");
|
||||
scanf("%d", &A[I].clave);
|
||||
fflush(stdin);
|
||||
|
||||
printf("\tNombre: ");
|
||||
gets(A[I].nombre);
|
||||
|
||||
printf("\tPrecio: ");
|
||||
scanf("%f", &A[I].precio);
|
||||
|
||||
printf("\tExistencia: ");
|
||||
scanf("%d", &A[I].existencia);
|
||||
}
|
||||
}
|
||||
void Ventas(producto A[], int T)
|
||||
/* Esta función se utiliza para manejar las venta a un cliente. Se ingresan
|
||||
➥productos y cantidades, el fin de datos está dado por el cero. Además de
|
||||
➥obtener el total de las ventas, se actualiza el inventario. */
|
||||
{
|
||||
int CLA, CAN, I, RES;
|
||||
float TOT, PAR;
|
||||
|
||||
printf("\nIngrese clave del producto - 0 para salir -: ");
|
||||
scanf("%d", &CLA);
|
||||
|
||||
TOT = 0.0;
|
||||
|
||||
while (CLA)
|
||||
{
|
||||
printf("\tCantidad: ");
|
||||
scanf("%d", &CAN);
|
||||
|
||||
I = 0;
|
||||
|
||||
while ((I < T) && (A[I].clave < CLA))
|
||||
/* Se realiza una búsqueda para localizar la clave del producto. */
|
||||
I++;
|
||||
|
||||
if ((I == T) || (A[I].clave > CLA))
|
||||
printf("\nLa clave del producto es incorrecta");
|
||||
|
||||
else
|
||||
if (A[I].existencia >= CAN)
|
||||
/* Se analiza si el stock es suficiente para satisfacer el pedido. */
|
||||
{
|
||||
A[I].existencia -= CAN; /* Se actualiza el stock del producto. */
|
||||
PAR = A[I].precio * CAN;
|
||||
TOT += PAR;
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("\nNo existe en inventario la cantidad solicitada. Solo hay %d", A[I].existencia);
|
||||
printf("\nLos lleva 1-Si 0–No?: ");
|
||||
scanf("%d", &RES);
|
||||
if (RES)
|
||||
{
|
||||
PAR = A[I].precio * A[I].existencia;
|
||||
A[I].existencia = 0; /* El stock queda en cero. */
|
||||
TOT += PAR;
|
||||
}
|
||||
}
|
||||
printf("\nIngrese la siguiente clave del producto - 0 para salir-: ");
|
||||
scanf("%d", &CLA);
|
||||
}
|
||||
printf("\nTotal de la venta: %f", TOT);
|
||||
}
|
||||
|
||||
void Reabastecimiento(producto A[], int T)
|
||||
/* Esta función se utiliza para reabastecer al inventario. */
|
||||
{
|
||||
int CLA, CAN, I;
|
||||
printf("\nIngrese clave del producto - 0 para salir -: ");
|
||||
scanf("%d", &CLA);
|
||||
|
||||
while (CLA)
|
||||
{
|
||||
I = 0;
|
||||
while ((I < T) && (A[I].clave < CLA))
|
||||
I++;
|
||||
if ((I == T) || (A[I].clave > CLA))
|
||||
printf("\nLa clave del producto ingresada es incorrecta");
|
||||
|
||||
else
|
||||
{
|
||||
printf("\tCantidad: ");
|
||||
scanf("%d", &CAN);
|
||||
A[I].existencia += CAN;
|
||||
}
|
||||
printf("\nIngrese otra clave del producto - 0 para salir -: ");
|
||||
scanf("%d", &CLA);
|
||||
}
|
||||
}
|
||||
|
||||
void Nuevos_Productos(producto A[], int* T)
|
||||
/* Esta función se utiliza para incorporar nuevos productos al inventario.
|
||||
➥Dado que los productos se encuentran ordenados por clave, puede suceder que
|
||||
➥al insertar un nuevo producto haya que mover los elementos del arreglo para
|
||||
➥que continúen ordenados. */
|
||||
{
|
||||
int CLA, I, J;
|
||||
printf("\nIngrese clave del producto - 0 para salir -: ");
|
||||
scanf("%d", &CLA);
|
||||
|
||||
while ((*T < 30) && (CLA))
|
||||
{
|
||||
I = 0;
|
||||
while ((I < *T) && (A[I].clave < CLA))
|
||||
/* Búsqueda de la posición que le corresponde a CLA en el arreglo. */
|
||||
I++;
|
||||
|
||||
if (I == *T) /* Se inserta el elemento en la última posición. */
|
||||
{
|
||||
A[I].clave = CLA;
|
||||
printf("\tNombre: ");
|
||||
fflush(stdin);
|
||||
gets(A[I].nombre);
|
||||
|
||||
printf("\tPrecio: ");
|
||||
scanf("%f", &A[I].precio);
|
||||
|
||||
printf("\tCantidad: ");
|
||||
scanf("%d", &A[I].existencia);
|
||||
*T = *T + 1;
|
||||
}
|
||||
|
||||
else
|
||||
if (A[I].clave == CLA)
|
||||
printf("\nEl producto ya se encuentra en el inventario.");
|
||||
|
||||
else
|
||||
{
|
||||
for (J = *T; J > I; J--)
|
||||
/* Se inserta el nuevo producto en el arreglo. Se mueven una posición
|
||||
➥a la derecha los elementos
|
||||
del arreglo que tengan una clave de producto mayor a la ingresada. */
|
||||
|
||||
A[J] = A[J - 1];
|
||||
|
||||
A[I].clave = CLA;
|
||||
|
||||
printf("\tNombre: ");
|
||||
fflush(stdin);
|
||||
gets(A[I].nombre);
|
||||
|
||||
printf("\tPrecio: ");
|
||||
scanf("%f", &A[I].precio);
|
||||
|
||||
printf("\tCantidad: ");
|
||||
scanf("%d", &A[I].existencia);
|
||||
*T = *T + 1;
|
||||
}
|
||||
printf("\nIngrese otra clave de producto - 0 para salir -: ");
|
||||
scanf("%d", &CLA);
|
||||
}
|
||||
if (*T == 30)
|
||||
printf("\nYa no hay espacio para incorporar nuevos productos.");
|
||||
}
|
||||
|
||||
void Inventario(producto A[], int T)
|
||||
/* Esta función se utiliza para escribir la información almacenada en —el
|
||||
➥inventario— un arreglo unidimensional de tipo estructura producto de T
|
||||
➥elementos. */
|
||||
{
|
||||
int I;
|
||||
for (I = 0; I < T; I++)
|
||||
{
|
||||
printf("\nClave: %d", A[I].clave);
|
||||
|
||||
printf("\tNombre: %s", A[I].nombre);
|
||||
|
||||
printf("\tPrecio: %d", A[I].precio);
|
||||
|
||||
printf("\tExistencia: %d \n", A[I].existencia);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user