Está en la página 1de 13

#include<iostream>

#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
#include <windows.h>

using namespace std;

struct Producto
{
string codigo;
string nombre;
float precioxuni;
float valorIva;
float stock;

Producto *sgte;
Producto *ant;
};

struct Detalle_fac
{
string codigo;
float precio;
int cantidad;
float subtotal;
float iva;

Detalle_fac *sgte;
Detalle_fac *ant;

};

struct Persona
{
string cedula;
string nombre;
string direccion;
string telefono;
string correo;

Persona *sgte;
Persona *ant;
};

struct Cab_Factura
{
string numfac;
string cedula;
string fecha_fac;
//detalle
Detalle_fac *pcabDet;
Detalle_fac *pfinDet;

//fin detalle

float subtotal_fac;
float iva_fac;
float total_fac;
Cab_Factura *sgte;
Cab_Factura *ant;

};

int Menu();
void operacion(int op,Producto *&pcab,Producto *&pfin,Cab_Factura
*&pcabFac,Cab_Factura *&pfinFac,Persona *&pcabPer,Persona *&pfinPer);
int MenuProducto();
void operacionPro(int op,Producto *&pcab,Producto *&pfin);
void fun_IngresarPro(Producto *&pcab,Producto *&pfin);
Producto *Buscarxcod(string codigo,Producto *pcab);
void listar(Producto *pcab);
void fun_Modificar(Producto *&pcab,Producto *&pfin);
void EliminarProducto(Producto *&pcab,Producto *&pfin);
void fun_Facturar(Producto *pcab,Cab_Factura *&pcabFac,Cab_Factura
*&pfinFac,Persona *&pcabPer,Persona *&pfinPer);
Cab_Factura *fun_buscarfactura(string numfac,Cab_Factura *pcabFac);
Persona *fun_buscarPersona(string cedula,Persona *pcabPer);
void MostrarPersona(Persona *nuevaPersona);
void fun_registrarPer(string cedula,Persona *&pcabPer,Persona *&pfinPer);
void CrearNuevFac(string numfac,Producto *pcab,Cab_Factura *&pcabFac,Cab_Factura
*&pfinFac,Persona *&pcabPer,Persona *&pfinPer);
void RegistrarDetalle(int x,Producto *pcab,Cab_Factura *nuevaFactura);
void mostrarFactura(Producto *pcab,Persona *pcabPer,Cab_Factura *nuevaFactura);
void mostrarDetalle(Producto *pcab, Cab_Factura *factura);
void Modificarstock(string codigo,Producto *&pcab,Detalle_fac *nuevoDetalle);
void gotoxy(int x,int y);

int main()
{
Producto *pcab=NULL;
Producto *pfin=NULL;
int op,resp;

Cab_Factura *pcabFac=NULL;
Cab_Factura *pfinFac=NULL;

Persona *pcabPer=NULL;
Persona *pfinPer=NULL;

do
{
op=Menu();
operacion(op,pcab,pfin,pcabFac,pfinFac,pcabPer,pfinPer);

gotoxy(0,32);cout<<"IR AL MENU PRINCIPAL SI(1): ";


cin>>resp;
}while(resp==1);
getch();
return 0;
}

int Menu()
{
int r;
do{
system("cls");
cout<<" *** MENU ***"<<endl;
cout<<"1.- INSERTAR PRODUCTOS"<<endl;
cout<<"2.- REGISTRAR LA VENTA"<<endl;

cout<<"Digite Respuesta...: ";


cin>>r;
}while(r>5 || r<=0);
return r;

void operacion(int op,Producto *&pcab,Producto *&pfin,Cab_Factura


*&pcabFac,Cab_Factura *&pfinFac,Persona *&pcabPer,Persona *&pfinPer)
{
int resp,r;
switch(op)
{
case 1://SE REALIZA EL PROCESO CON LOS PRODUCTOS

do
{

system("cls");
cout<<"**** PROCESOS PRODUCTO ****"<<endl;
resp=MenuProducto();
operacionPro(resp,pcab,pfin);

cout<<"DESEA REALIZAR OTRA OPERACION DE PRODUCTO SI(1): ";


cin>>r;
}while(r==1);

break;
case 2: //SE REALIZA EL PROCESO CON LAS VENTAS
system("cls");
cout<<"**** FACTURACION ****"<<endl;
fun_Facturar(pcab,pcabFac,pfinFac,pcabPer,pfinPer);

break;

void fun_Facturar(Producto *pcab,Cab_Factura *&pcabFac,Cab_Factura


*&pfinFac,Persona *&pcabPer,Persona *&pfinPer)
{
string numfac,cedula,cod;
Cab_Factura *nuevaFactura;
Persona *nuevaPersona;
Producto *nuevoProducto;

cout<<"#FAC: ";
cin>>numfac;
nuevaFactura=fun_buscarfactura(numfac,pcabFac);
if (nuevaFactura!=NULL)
{

cout<<endl<<" **** REGISTRADA ****"<<endl;


mostrarFactura(pcab,pcabPer,nuevaFactura);
}
else
{
CrearNuevFac(numfac,pcab,pcabFac,pfinFac,pcabPer,pfinPer);

}
}

//DEBER
void mostrarFactura(Producto *pcab,Persona *pcabPer,Cab_Factura *nuevaFactura)
{

cout<<"#FACTURA: "<<nuevaFactura->numfac<<endl;
cout<<"CEDULA: "<<nuevaFactura->cedula<<endl;
MostrarPersona(fun_buscarPersona(nuevaFactura->cedula,pcabPer));
cout<<"FECHA: "<<nuevaFactura->fecha_fac<<endl;

cout<<endl<<" **** DETALLE PRODUCTOS **** "<<endl;


cout<<"CODIGO DESCRIPCION CANTIDAD P/U SUBTOTAL"<<endl;
//DETALLE
mostrarDetalle(pcab,nuevaFactura);
//FINDETALLE
cout<<endl;
}
//
void mostrarDetalle(Producto *pcab, Cab_Factura *factura)
{
int x=14;
Producto *dirProducto;
Detalle_fac *nodoAct=factura->pcabDet;
while(nodoAct!=NULL)
{

gotoxy(2,x);cout<<nodoAct->codigo;
dirProducto=Buscarxcod(nodoAct->codigo,pcab);
gotoxy(12,x);cout<<dirProducto->nombre;
gotoxy(31,x);cout<<nodoAct->cantidad;
gotoxy(42,x);cout<<nodoAct->precio;
gotoxy(53,x);cout<<nodoAct->subtotal;
nodoAct=nodoAct->sgte;
x=x+1;
}
gotoxy(42,x+1);cout<<"SUBTOTAL: "<<factura->subtotal_fac<<endl;
gotoxy(42,x+2);cout<<"IVA: "<<factura->iva_fac<<endl;
gotoxy(42,x+3);cout<<"TOTAL: "<<factura->total_fac<<endl;
}
//crea factura
void CrearNuevFac(string numfac,Producto *pcab,Cab_Factura *&pcabFac,Cab_Factura
*&pfinFac,Persona *&pcabPer,Persona *&pfinPer)
{
Persona *nuevaPersona;
Cab_Factura *nuevaFactura;
string cedula;
int r;
int x=11;
//se debe registrar una nueva factura
cout<<"CEDULA: ";cin>>cedula;
nuevaPersona=fun_buscarPersona(cedula,pcabPer);

if(nuevaPersona!=NULL)
{
MostrarPersona(nuevaPersona);
}
else
{
//crea un nueva persona
fun_registrarPer(cedula,pcabPer,pfinPer);
}
nuevaFactura=new(Cab_Factura);
nuevaFactura->numfac=numfac;
nuevaFactura->cedula=cedula;
cout<<"FECHA: ";
cin>>nuevaFactura->fecha_fac;fflush(stdin);
nuevaFactura->pcabDet=NULL;
nuevaFactura->pfinDet=NULL;
nuevaFactura->subtotal_fac=0;
nuevaFactura->iva_fac=0;
nuevaFactura->total_fac=0;

//PROCESO DE REGISTRO DE PRODUCTO VENDIDOS


cout<<endl<<"**** SELECCION DE PRODUCTO **** "<<endl;
cout<<"CODIGO DESCRIPCION CANTIDAD P/U
SUBTOTAL"<<endl;
do
{
RegistrarDetalle(x,pcab,nuevaFactura);
x=x+1;

gotoxy(0,30);cout<<"DESEA REGISTRAR OTRO PRODUCTO SI(1): ";


cin>>r;
}while(r==1);

gotoxy(41,x+1);printf("SUB TOTAL: $%.2f\n",nuevaFactura->subtotal_fac);


gotoxy(41,x+2);printf("IVA 12%: $%.2f\n",nuevaFactura->iva_fac);
gotoxy(41,x+3);printf("TOTAL: $%.2f\n",nuevaFactura->total_fac);

nuevaFactura->sgte=NULL;
nuevaFactura->ant=NULL;

if(pcabFac==NULL)
{
pcabFac=nuevaFactura;
pfinFac=nuevaFactura;
}
else
{
pfinFac->sgte=nuevaFactura;
nuevaFactura->ant=pfinFac;
pfinFac=nuevaFactura;
}
}

//
void RegistrarDetalle(int x,Producto *pcab,Cab_Factura *nuevaFactura)
{
Producto *dirPro;
Detalle_fac *nuevoDetalle;
string codigo;
gotoxy(2,x);cin>>codigo;

dirPro=Buscarxcod(codigo,pcab);
if(dirPro==NULL)
{
gotoxy(0,29);cout<<"EL PRODUCTO NO EXISTE"<<endl;
}
else
{
gotoxy(12,x);cout<<dirPro->nombre;
gotoxy(42,x);cout<<dirPro->precioxuni;
nuevoDetalle=new(Detalle_fac);

nuevoDetalle->codigo=dirPro->codigo;
nuevoDetalle->precio=dirPro->precioxuni;

gotoxy(31,x);cin>>nuevoDetalle->cantidad;
Modificarstock(codigo,pcab,nuevoDetalle);
nuevoDetalle->subtotal=(nuevoDetalle->precio)*(nuevoDetalle->cantidad);
nuevoDetalle->iva=nuevoDetalle->subtotal*dirPro->valorIva;

nuevaFactura->subtotal_fac=nuevaFactura->subtotal_fac+nuevoDetalle-
>subtotal;
nuevaFactura->iva_fac=nuevaFactura->iva_fac+nuevoDetalle->iva;
nuevaFactura->total_fac=nuevaFactura->subtotal_fac+nuevaFactura-
>iva_fac;

nuevoDetalle->sgte=NULL;
nuevoDetalle->ant=NULL;

if(nuevaFactura->pcabDet==NULL)
{
nuevaFactura->pcabDet=nuevoDetalle;
nuevaFactura->pfinDet=nuevoDetalle;
}
else
{
nuevaFactura->pfinDet->sgte=nuevoDetalle;
nuevoDetalle->ant=nuevaFactura->pfinDet;
nuevaFactura->pfinDet=nuevoDetalle;
}
gotoxy(53,x);cout<<nuevoDetalle->subtotal<<endl;

void Modificarstock(string codigo,Producto *&pcab,Detalle_fac *nuevoDetalle)


{

Producto *dirPro;
dirPro=Buscarxcod(codigo,pcab);

if(dirPro==NULL)
{

}
else
{
dirPro->stock=dirPro->stock-nuevoDetalle->cantidad;
}
}
//
void fun_registrarPer(string cedula,Persona *&pcabPer,Persona *&pfinPer)
{
Persona *nuevaPersona;
nuevaPersona=new(Persona);
nuevaPersona->cedula=cedula;
cout<<"NOMBRES: ";
cin>>nuevaPersona->nombre;fflush(stdin);
cout<<"DIRECCION:";
cin>>nuevaPersona->direccion;fflush(stdin);;
cout<<"TELEFONO: ";
cin>>nuevaPersona->telefono;fflush(stdin);;
cout<<"CORREO: ";
cin>>nuevaPersona->correo;fflush(stdin);;

nuevaPersona->sgte=NULL;
nuevaPersona->ant=NULL;

if(pcabPer==NULL)
{
pcabPer=nuevaPersona;
pfinPer=nuevaPersona;
}
else
{
pfinPer->sgte=nuevaPersona;
nuevaPersona=pfinPer;
pfinPer=nuevaPersona;
}

}
//BUSCAR
Persona *fun_buscarPersona(string cedula,Persona *pcabPer)
{
Persona *personaAc=pcabPer;
Persona *dirPer=NULL;
while(personaAc!=NULL)
{
if(personaAc->cedula==cedula)
{

return personaAc;
}

personaAc=personaAc->sgte;
}
return dirPer;
}

void MostrarPersona(Persona *nuevaPersona)


{
cout<<"NOMBRES: "<<nuevaPersona->nombre<<endl;
cout<<"DIRECCION: "<<nuevaPersona->direccion<<endl;
cout<<"TELEFONO: "<<nuevaPersona->telefono<<endl;
cout<<"CORREO: "<<nuevaPersona->correo<<endl;

Cab_Factura *fun_buscarfactura(string numfac,Cab_Factura *pcabFac)


{
Cab_Factura *FacturaAc=pcabFac;
Cab_Factura *dirFac=NULL;
while(FacturaAc!=NULL)
{
if(FacturaAc->numfac==numfac)
{

return FacturaAc;
}

FacturaAc=FacturaAc->sgte;
}

return dirFac;
}
//PROCESOS DE PRODUCTO

int MenuProducto()
{
int r;
do{
system("cls");
cout<<"*** MENU PRODUCTO ***"<<endl;
cout<<"1.- INGRESAR"<<endl;
cout<<"2.- MODIFICAR"<<endl;
cout<<"3.- LISTAR"<<endl;
cout<<"4.- ELIMINAR"<<endl;

cout<<"Digite Respuesta...: ";


cin>>r;
}while(r>4 || r<=0);
return r;

void operacionPro(int resp,Producto *&pcab,Producto *&pfin)


{
int codigo;
Producto *dirProducto;

switch(resp)
{
case 1:
system("cls");
//INGRESAR RRODUCTO
cout<<"**** INGRESO DE MERCADERIA ****"<<endl;
fun_IngresarPro(pcab,pfin);
break;
case 2:
system("cls");
cout<<"**** MODIFICAR MERCADERIA ****"<<endl;
fun_Modificar(pcab,pfin);
break;

case 3:
system("cls");
cout<<"**** LISTAR MERCADERIA ****"<<endl;
listar(pcab);
break;

case 4:
system("cls");
cout<<"**** ELIMINAR MERCADERIA ****"<<endl;
EliminarProducto(pcab,pfin);
break;
}

void fun_IngresarPro(Producto *&pcab,Producto *&pfin)


{
string codigo,nombre;
float precio,valorIva,stock;
Producto *nuevoProduc;
Producto *dirProd;

cout<<"INGRESE CODIGO: ";


cin>>codigo;

if(pcab==NULL)//SIGNIFICA QUE LA LISTA ESTA SIN NODOS


{

cout<<"INGRESE NOMBRE: ";


cin>>nombre;
cout<<"INGRESE PRECIO X UNI: ";
cin>>precio;
cout<<"INGRESE STOCK: ";
cin>>stock;
cout<<"INGRESE VALOR IVA: ";
cin>>valorIva;

nuevoProduc=new(Producto);
nuevoProduc->codigo=codigo;
nuevoProduc->nombre=nombre;
nuevoProduc->precioxuni=precio;
nuevoProduc->valorIva=(valorIva/100);
nuevoProduc->stock=stock;
nuevoProduc->sgte=NULL;
nuevoProduc->ant=NULL;
pcab=nuevoProduc;
pfin=nuevoProduc;
}
else
{
dirProd=Buscarxcod(codigo,pcab);

if(dirProd==NULL)
{
//INSERTA AL FINAL
cout<<"INGRESE NOMBRE: ";
cin>>nombre;
cout<<"INGRESE PRECIO X UNI: ";
cin>>precio;
cout<<"INGRESE STOCK: ";
cin>>stock;
cout<<"INGRESE VALOR IVA: ";
cin>>valorIva;

nuevoProduc=new(Producto);
nuevoProduc->codigo=codigo;
nuevoProduc->nombre=nombre;
nuevoProduc->precioxuni=precio;
nuevoProduc->valorIva=(valorIva/100);
nuevoProduc->stock=stock;
nuevoProduc->sgte=NULL;
nuevoProduc->ant=NULL;

pfin->sgte=nuevoProduc;
nuevoProduc->ant=pfin;
pfin=nuevoProduc;
}
else
{
//ACTUALIZA EL PRODUCTO
cout<<"NOMBRE: "<<dirProd->nombre<<endl;
cout<<"IVA: "<<dirProd->valorIva<<endl;
cout<<"INGRESE NUEVO PRECIO X UNI: ";
cin>>dirProd->precioxuni;
cout<<"INGRESE NUEVO STOCK: ";
cin>>stock;
dirProd->stock = dirProd->stock+stock;
}

Producto *Buscarxcod(string codigo,Producto *pcab)


{
Producto *prodAc=pcab;
Producto *dirProd=NULL;
while(prodAc!=NULL)
{
if(prodAc->codigo==codigo)
{

return prodAc;
}

prodAc=prodAc->sgte;
}

return dirProd;

void listar(Producto *pcab)


{
Producto *proAc=pcab;
while(proAc!=NULL)
{
cout<<"CODIGO: "<<proAc->codigo<<endl;
cout<<"NOMBRE: "<<proAc->nombre<<endl;
cout<<"PRECIO: "<<proAc->precioxuni<<endl;
cout<<"IVA: "<<proAc->valorIva<<endl;
cout<<"STOCK: "<<proAc->stock<<endl;

proAc=proAc->sgte;

cout<<endl;
}
}

void fun_Modificar(Producto *&pcab,Producto *&pfin)


{
string codigo;
Producto *dirProducto;

cout<<"INGRESE EL CODIDO DEL PRODUCTO A MODIFICAR: ";


cin>>codigo;
dirProducto=Buscarxcod(codigo,pcab);

if(dirProducto==NULL)
{
cout<<"EL PRODUCTO NO EXISTE"<<endl;
}
else
{
cout<<"\nMODIFCAR PRODUCTO"<<endl;
cout<<"INGRESE NOMBRE: ";
cin>>dirProducto->nombre;
cout<<"INGRESE PRECIO X UNI: ";
cin>>dirProducto->precioxuni;
cout<<"INGRESE STOCK: ";
cin>>dirProducto->stock;
cout<<"INGRESE VALOR IVA: ";
cin>>dirProducto->valorIva;

cout<<"\nPRODUCTO MODIFICADO CORRECTAMENTE"<<endl<<endl;


}
}

void EliminarProducto(Producto *&pcab,Producto *&pfin)


{
string codigo;
Producto *dirProducto;
Producto *Aux;

cout<<"INGRESE EL CODIDO DEL PRODUCTO A ELIMINAR: ";


cin>>codigo;
dirProducto=Buscarxcod(codigo,pcab);

if(pcab!=NULL)
{
Producto *Aux_borrar;
Producto *Anterior=NULL;

Aux_borrar=pcab;

while((Aux_borrar!=NULL)&&(Aux_borrar!=dirProducto))
{
Anterior=Aux_borrar;
Aux_borrar=Aux_borrar->sgte;

if(Aux_borrar==NULL)
{
cout<<"PRODUCTO NO ENCONTRADO"<<endl;
}
else
{
if(Anterior==NULL)
{
pcab=pcab->sgte;
delete Aux_borrar;
}
else
{
Anterior->sgte=Aux_borrar->sgte;
delete Aux_borrar;
}

cout<<endl;
cout<<"PRODUCTO ELIMINADO EXITOSAMENTE"<<endl;
}

//gotoxy

#include <windows.h>
void gotoxy(int x,int y){
HANDLE hcon;
hcon = GetStdHandle(STD_OUTPUT_HANDLE);
COORD dwPos;
dwPos.X = x;
dwPos.Y= y;
SetConsoleCursorPosition(hcon,dwPos);
}

También podría gustarte