// MANEJO DE ESTRUCTURAS
// PERMITE INTRODUCIR DATOS
// - SI NO EXISTE, QUE LO GUARDE
// - SI SI EXISTE que lo borre --- MEJOR QUE NO LO BORRE
// PERMITA MOSTRAR LOS DATOS ALMACENADOS
/*
1.- Compras
2.- Ventas
3.- Mostrar inventario
0.- Salir
COMPRAS
Si se selecciona "Compras", deberá de pedir los siguientes datos:
Area
Título
Páginas
Precio
Cantidad
La clave, será generada de manera automática considerando
tamaño de 6 caracteres
las 2 primeras para el área
las 2 segundas para el título
las 2 últimas para un número progresivo
VENTAS
Si se selecciona la opción de ventas:
que pida la clave
y la cantidad que se vende
y de manera automática, se actualiza el inventario
- si la existencia es de cero, que indique el error
MOSTRAR INVENTARIO
Deberá mostrarse las existencias actuales de manera ALINEADA, por ejemplo:
==============================================================================
Clave Area Titulo Páginas Precio Existencias
==============================================================================
maca0 matematicas calculo 234 120.45 25
matr1 matematicas trigonometria 456 0.76 12
SALIR
Si es la opción cero -salir- se termina la ejecución del programa
*/
//===========================================
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
// a cada columna se le llama CAMPO
// a cada renglón (conjunto de campos) se le llama REGISTRO
struct Libros
{
char *Area;
char *Titulo;
int Paginas;
float Precio;
char *Clave; // (6)==> (2)Area(2)Titulo(2)#progresivo
};
struct Libros vector[20];
int NumProg=0;
void menu(int n, char *cad) { printf("%i.- %s\n", n, cad); }
int opcion(int a, int b)
{
int n=0;
printf("¿Opción? (%i a %i) ", a, b);
scanf("%i", &n);
return n;
}
int Existe (char *T)
{
int k=0;
int ok=0;
while ( k < NumProg )
{
if ( !strcmp(T, vector[k].Titulo) )
{
strcpy(vector[k].Area, "");
strcpy(vector[k].Titulo, "");
strcpy(vector[k].Clave, "");
vector[k].Paginas = 0;
vector[k].Precio = 0.0;
printf("\nYA EXISTIA ... SE BORRÓ\n\n");
ok = 1;
}
k++;
}
return ok;
}
char *GeneraClave(char *A, char *T)
{
char *Clave = (char*)malloc(10);
char *aux = (char*)malloc(3);
strcpy(Clave, ""); // inicializando la cadena
strncpy(Clave, A, 2); strncpy(aux, T, 2);
sprintf(Clave, "%s%s%i", Clave, aux, NumProg);
return Clave;
}
void PedirDatos()
{
int Paginas;
float Precio;
char *Area = (char*)malloc(80);
char *Titulo = (char*)malloc(80);
printf("\nIntroduzca los datos del nuevo libro ... {%i}\n", NumProg);
printf("===========================================\n");
printf("\nTítulo del libro: "); scanf("%s",Titulo);
if ( !Existe(Titulo) )
{
printf("Area a la que pertenece: "); scanf("%s", Area);
printf("\nNúmero de páginas: "); scanf("%i", &Paginas);
printf("\nPrecio: "); scanf("%f", &Precio);
// SE ALMACENA EN EL VECTOR
vector[NumProg].Area = (char*)malloc(80);
vector[NumProg].Titulo = (char*)malloc(80);
vector[NumProg].Clave = (char*)malloc(80);
strcpy(vector[NumProg].Area, Area);
strcpy(vector[NumProg].Titulo, Titulo);
strcpy(vector[NumProg].Clave, GeneraClave(Area, Titulo) );
vector[NumProg].Paginas = Paginas;
vector[NumProg].Precio = Precio;
NumProg++;
}
}
void MostrarDatos ()
{
int k=0;
printf("\n=====================================================\n");
printf("Clave\tArea\tTitulo\tPáginas\tPrecio\tExistencias\n");
printf("=====================================================\n");
while( k < NumProg )
{
printf("%s\t%s\t%s\t%i\t%f\t---\n", vector[k].Clave, vector[k].Area, vector[k].Titulo, vector[k].Paginas, vector[k].Precio);
k++;
}
printf("=====================================================\n\n\n");
}
void procesar(int n)
{ switch (n)
{ case 1: PedirDatos(); break; case 2: MostrarDatos(); }
}
void Inicio()
{
int opc=0;
while(1)
{
menu(1, "Pedir datos");
menu(2, "Mostrar datos");
menu(0, "Salir");
if ( opc = opcion(0,2) )
procesar(opc);
else break;
}
}
int main(int n, char **a)
{ Inicio(); system("clear"); }