INVENTARIO.c



// INVENTARIO VERSION 1.0
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// SECCION DE PROTOTIPOS DE FUNCION
//==========================================
void Encabezado( );
void Muestra( char MENSAJE[] );
void Ciclo( );
void CargaInv();
char *Lee(char[]);
void GuardaInv(void);
int LeeExistencia(char MENSAJE[]);
float LeePrecio(char MENSAJE[]);
void Grafica();
void Compra();
//==========================================

#define	Color	printf("\x1b[%d;%dm",31,43);
#define	Normal	printf("\x1b[%d;%dm",30,43);
#define	Titulo	printf("\x1b[%d;%dm",32,43);

struct Inventario
{
	char *Clave;
	char *Nombre_Art;
	float Precio_Compra;
	float Precio_Venta;
        int Existencia;
};
struct Inventario INV[100];
int N=0;		// LA CANTIDAD DE COMPONENTES


void Encabezado()
{
	int k=0, x;
	system("clear");
	Muestra("====================================================================\n");
	Muestra("CLAVE 	DESCRIPCION	P_COMPRA	P_VENTA		EXISTENCIA\n");
	Muestra("====================================================================\n");

	while( k < N )
	{
		printf("%s\t%s\t%f\t%f\t%i\n", INV[k].Clave, INV[k].Nombre_Art,
				INV[k].Precio_Compra, INV[k].Precio_Venta, INV[k].Existencia);
		k++;
	}
	scanf("%d", &x);
}

void Muestra( char MENSAJE[] )
{
	int k = 0;
	printf("%s", MENSAJE);
}

float LeePrecio(char MENSAJE[])
{
	float PRECIO;
	Muestra(MENSAJE);
	scanf("%f", &PRECIO);
	return PRECIO;
}

char *Lee(char MENSAJE[])
{
	char *SALIDA=(char*)malloc(sizeof(char)*6);

	Muestra(MENSAJE);
	scanf("%s", SALIDA);
	return SALIDA;
}

int LeeExistencia(char MENSAJE[])
{
	int PRECIO;
	Muestra(MENSAJE);
	scanf("%i", &PRECIO);
	return PRECIO;
}

void Compra()
{
	system("clear");
	Muestra("Introduce los datos de la nueva compra: \n");
	INV[N].Clave=(char*)malloc(sizeof(char)*10);
	INV[N].Clave = Lee("Clave del producto: ");

	INV[N].Nombre_Art = (char*)malloc(sizeof(char)*30);
	INV[N].Nombre_Art = Lee("Nombre del articulo: ");

	INV[N].Precio_Compra = LeePrecio("Precio de compra: ");
	INV[N].Precio_Venta = LeePrecio("Precio de venta: ");

	INV[N].Existencia = LeeExistencia("Cantidad: ");
	N++;
}

void GuardaInv(void)
{
	FILE *Escritura = fopen("Inventario.txt","w");
	int k =0;		// variable del ciclo

	if ( Escritura == NULL )
	{
		printf( "Problemas con los ficheros.\n" );
		exit( 1 );
	}

	while( k < N )
	{
		fprintf(Escritura, "%s:%s:%f:%f:%i\n", INV[k].Clave, INV[k].Nombre_Art,
			INV[k].Precio_Compra, INV[k].Precio_Venta, INV[k].Existencia);
		k++;
	}
	fclose( Escritura );
}

void CargaInv()
{
	int k=0;
	N = 0;
	char *CAD = (char*)malloc(sizeof(char)*80);
	char *Token;

	FILE *Lectura = fopen("Inventario.txt","r");

	if ( Lectura != NULL )
	{
		while ( feof(Lectura) == 0 )
		{
			fscanf(Lectura,"%s",CAD);
			k=1;
			//if ( strlen(CAD) > 20 )
			for ( Token = strtok(CAD,":"); Token != NULL; Token = strtok(NULL, ":") )
			{

				if (k==1)
				{
					INV[N].Clave = (char*)malloc(sizeof(char)*10);
					strcpy(INV[N].Clave, Token);
				}
				if (k==2)
				{
					INV[N].Nombre_Art = (char*)malloc(sizeof(char)*30);
					strcpy(INV[N].Nombre_Art, Token);
				}
				if (k==3) INV[N].Precio_Compra = (float) atoll(Token);
				if (k==4) INV[N].Precio_Venta = (float) atoll(Token);
				if (k==5) INV[N].Existencia = (int) atoi(Token);
				k++;
			}
			printf("\n");
			N++;
		}
	}
	if ( Lectura != NULL ) fclose( Lectura );
	if (k < 5 ) N--;		// TRUQUITO
}

void Ciclo( )
{
	char *Comando = (char*)malloc(sizeof(char)*6);

	CargaInv();
	while( 1 )
	{
		system("clear");
		if ( strcmp( (Comando = Lee("grafica o reporte o compra o venta o salir?: ")), "salir" ) == 0)
		{
			GuardaInv();
			exit(1);		// EL 1 SIGNIFICA QUE CORRIO EXITOSAMENTE
		}
		if ( strcmp( Comando, "compra" ) == 0) Compra();
		if ( strcmp( Comando, "reporte" ) == 0) {Encabezado( );}
		if ( strcmp( Comando, "venta" ) == 0);
		if ( strcmp( Comando, "grafica" ) == 0) Grafica();
	}
}

void Grafica()
{
	int x =0, y=0;

	Normal;
	system("clear");
	for(x=0; x < N; x++)
	{
		Titulo; printf("%s\t", INV[x].Clave); Normal;
		for(y=0; y< INV[x].Existencia; y++)
			{ Color; printf("."); Normal; }
		printf("\n");
	}
	printf("\n");
	scanf("%d",&y);
}

int main() { Ciclo(); }

/*
struct Inventario
{
	char *Clave;
	char *Nombre_Art;
	float Precio_Compra;
	float Precio_Venta;
       	int Existencia;
}
		CARACTERISTICAS DEL SISTEMA

	1.- LLEVAR UN INVENTARIO
	2.- REGISTRO DE VENTAS
		a.- REGISTRO DEL CLIENTE
		b.- VENTAS
		(ACTUALIZACION DEL INVENTARIO) - obvio
	3.- REGISTRO DE PROOVEDORES
		obvio ... son las compras
		a.- COMPRAS
	4.- GRAFICO ESTADISTICO			--- barras a colores
			a.- CLIENTES
				- POR PRODUCTO
				- POR PESOS
			b.- INVENTARIO
			c.- VENTAS
				- POR PRODUCTO
				- EN PESOS
			d.- VENDEDORES
	5.- REPORTES VARIOS
		TABULADO
			a.- CLIENTES
				- POR PRODUCTO
				- POR PESOS
			b.- INVENTARIO
			c.- VENTAS
				- POR PRODUCTO
				- EN PESOS
	6.- REGISTRO DE VENDEDORES		--- chalanes
		a.-	CONTRATAR VENDEDORES
		b.-	CORRER VENDEDORES
		c.-	REPORTES
			- POR PRODUCTO
			- POR PESOS
			- SALARIO (10% DE CADA VENTA)
	EJEMPLO DE USO:
		- ESTRUCTURAS
		- APUNTADORES
		- ARCHIVOS
		- GRAFICOS
*/