LISTAS
LISTAS
LISTAS
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
#include <windows.h>
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);
int Menu()
{
int r;
do{
system("cls");
cout<<" *** MENU ***"<<endl;
cout<<"1.- INSERTAR PRODUCTOS"<<endl;
cout<<"2.- REGISTRAR LA VENTA"<<endl;
do
{
system("cls");
cout<<"**** PROCESOS PRODUCTO ****"<<endl;
resp=MenuProducto();
operacionPro(resp,pcab,pfin);
break;
case 2: //SE REALIZA EL PROCESO CON LAS VENTAS
system("cls");
cout<<"**** FACTURACION ****"<<endl;
fun_Facturar(pcab,pcabFac,pfinFac,pcabPer,pfinPer);
break;
cout<<"#FAC: ";
cin>>numfac;
nuevaFactura=fun_buscarfactura(numfac,pcabFac);
if (nuevaFactura!=NULL)
{
}
}
//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;
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;
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;
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;
}
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;
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;
}
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;
}
return prodAc;
}
prodAc=prodAc->sgte;
}
return dirProd;
proAc=proAc->sgte;
cout<<endl;
}
}
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;
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);
}