Dev - C++ - Programa para Facturación de Supermercado (solo 10 articulos)

 
Vista:
sin imagen de perfil

Programa para Facturación de Supermercado (solo 10 articulos)

Publicado por Javier Mayorga (5 intervenciones) el 12/04/2015 23:04:53
Buenas tardes a todos,
Quisiera obtener ayuda en entender el tema de COLAS EN C++ y tambien del RECURSIVIDAD en c++..

Estoy trabajando en un programa den dev c++ que basicamente es la facturacion de un supermercado pero lo he creado solo con 10 articulos como maximo para llevar..

Sucede que se me ocurrio crear un inventario de los productos que tengo (aplicando COLAS) y pues de alguna manera tambien en otra funcion recursividad.. pero no tengo idea como funciona y algunos ejemplos en internet no me dicen nada. quisiera saber si alguien me puede ayudar a comprender o darme alguna idea como aplicar colas con el inventario.

se los agradeciar mucho.

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <fstream>
using namespace std;
void factura();
int main ();

struct supermercado
{

int cant;
double precio;
string nombre_p;
}



super[10];
char name[75];
ofstream entrada;
ofstream entrada1;
ifstream entrada2("ProductosSuperFeo.txt");

float totalv = 0;
double totalar = 0;
double total = 0, isv = 0;
char resp;
int j=0;
int resp2=1;
int conj=0;
void registrar()
{


float totalv = 0;
double totalar = 0;
double total = 0, isv = 0;
string nomb;
int cod;

int i=0;
int j=0;

int cant1=0;
int cant11=0;
cout << "Ingrese cuantos articulos desea comprar(que no exceda de 10 articulos): ";
cin >> resp2;
if (resp2>=11)
{
system("cls");
cout << "Error, cantidad excedida de articulos\nGracias por preferirnos";
main();
}
else
{



for(i=0; i<=resp2;i++)
{
do
{
cout << "Ingrese el codigo de articulo: " << endl;
cin>>cod;

switch(cod)
{


case 1: super[i].nombre_p="Sandia";
entrada << "Nombre producto: " <<super[i].nombre_p ;
super[i].precio=5.5;

do{

cout << "Ingrese cantidad que se vende: " << endl;
cin >> super[i].cant;


if(super[i].cant>resp2)
cout<<"Cantidad sobrepasa los articulos que lleva "<<endl;

}while(super[i].cant>resp2);

entrada << "cantidad " << super[i].cant << endl;
entrada1 << super[i].cant << " ";



break;
case 2: super[i].nombre_p="Gillete";
entrada << "Nombre producto: " <<super[i].nombre_p;
super[i].precio=6.5;
do{

cout << "Ingrese cantidad que se vende: " << endl;
cin >> super[i].cant;


if(super[i].cant>resp2)
cout<<"Cantidad sobrepasa los articulos que lleva "<<endl;

}while(super[i].cant>resp2);


break;
case 3: super[i].nombre_p="Manzana";
entrada << "Nombre producto: " <<super[i].nombre_p;
super[i].precio=5.2;
do{

cout << "Ingrese cantidad que se vende: " << endl;
cin >> super[i].cant;


if(super[i].cant>resp2)
cout<<"Cantidad sobrepasa los articulos que lleva "<<endl;

}while(super[i].cant>resp2);
break;
case 4: super[i].nombre_p=" Huevos ";
entrada << "Nombre producto: " <<super[i].nombre_p;
super[i].precio=3.8;
do{

cout << "Ingrese cantidad que se vende: " << endl;
cin >> super[i].cant;


if(super[i].cant>resp2)
cout<<"Cantidad sobrepasa los articulos que lleva "<<endl;

}while(super[i].cant>resp2);
break;
case 5: super[i].nombre_p=" Leche ";
entrada << "Nombre producto: " <<super[i].nombre_p;
super[i].precio=22.8;
do{

cout << "Ingrese cantidad que se vende: " << endl;
cin >> super[i].cant;


if(super[i].cant>resp2)
cout<<"Cantidad sobrepasa los articulos que lleva "<<endl;

}while(super[i].cant>resp2);
break;
case 6: super[i].nombre_p=" Avena";
entrada << "Nombre producto: " <<super[i].nombre_p;
super[i].precio=14.5;
do{

cout << "Ingrese cantidad que se vende: " << endl;
cin >> super[i].cant;


if(super[i].cant>resp2)
cout<<"Cantidad sobrepasa los articulos que lleva "<<endl;

}while(super[i].cant>resp2);
break;
case 7: super[i].nombre_p=" Tortillas ";

entrada << "Nombre producto: " <<super[i].nombre_p;
super[i].precio=1.5;
do{

cout << "Ingrese cantidad que se vende: " << endl;
cin >> super[i].cant;


if(super[i].cant>resp2)
cout<<"Cantidad sobrepasa los articulos que lleva "<<endl;

}while(super[i].cant>resp2);
break;
case 8: super[i].nombre_p=" Cereal ";
entrada << "Nombre producto: " <<super[i].nombre_p;
super[i].precio=50;
do{

cout << "Ingrese cantidad que se vende: " << endl;
cin >> super[i].cant;


if(super[i].cant>resp2)
cout<<"Cantidad sobrepasa los articulos que lleva "<<endl;

}while(super[i].cant>resp2);
break;
case 9: super[i].nombre_p=" Botellon de Agua ";
entrada << "Nombre producto: " <<super[i].nombre_p;
super[i].precio=36.9;
do{

cout << "Ingrese cantidad que se vende: " << endl;
cin >> super[i].cant;


if(super[i].cant>resp2)
cout<<"Cantidad sobrepasa los articulos que lleva "<<endl;

}while(super[i].cant>resp2);
break;

case 10: super[i].nombre_p=" Harina ";
entrada << "Nombre producto: " <<super[i].nombre_p;
super[i].precio=14.5;
do{

cout << "Ingrese cantidad que se vende: " << endl;
cin >> super[i].cant;


if(super[i].cant>resp2)
cout<<"Cantidad sobrepasa los articulos que lleva "<<endl;

}while(super[i].cant>resp2);
break;
default:cout<<"Solo existen articulos del 1-10"<<endl;
break;
}
}while(cod>10);




conj++;
j=super[i].cant+j;
if(j>=resp2)
{
i=11;

factura();
}
}
}
}

void factura()
{

float totalv = 0;
double totalar = 0;
double total = 0, isv = 0;

system("cls");
cout << "\t------------------Supermercado la mera mera---------------\t" << endl;
cout << "\t-------------------Factura---------------------------------\t" << endl;
cout << "Nombre: " << name << endl;


cout << "Cant/Arti " << "\t " << "Nom/Art" << " \t " << " Precio " << endl;

for(int i=0; i<=conj-1;i++)

{

cout << super[i].cant << " \t " << super[i].nombre_p << " \t " << super[i].precio << endl;
totalv = totalv + (super[i].precio * super[i].cant);
totalar = totalar + super[i].cant;
isv = isv + totalv*0.15;
total = totalv + isv;

}

entrada << "Total " << total << " " << endl;
entrada1 << total << " ";
entrada << "**************************" << endl;
cout << "---------------------------------------------------" << endl;
cout << "Subtotal: " << totalv << endl;
cout << "Impuesto: " << isv << endl;
cout << "Total de articulos vendidos: " << totalar << endl;
cout << "Total: " << total << endl;

system("PAUSE");
entrada.close();
do
{
system("cls");
cout<<"Desea ingresa otra compra "<<endl;
cin>>resp;
resp=toupper(resp);
if(resp=='S')
{

resp2=0;
j=0;
conj=0;
main();
}
}while(resp=='S');
}



int main()
{


entrada.open("ProductosSuper.txt", ios::out | ios::app);
entrada1.open("ProductosSuperFeo.txt", ios::out | ios::app);
if ((entrada.fail()) && (entrada1.fail()))
{
cout << "ERROR AL ABRIR EL ARCHIVO" << "\n";
}
else
{
cout << "Supermercado de programacion cientificia I " << endl;
cout << "Para finalizar ingrese 0" << endl;
cout << "Ingrese nombre: " << endl;
cin >> name;
entrada << " Nombre factura: " << name << " ";
entrada1 << name << " ";
registrar();



return 0;
}
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de vangodp
Val: 73
Ha disminuido 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Programa para Facturación de Supermercado (solo 10 articulos)

Publicado por vangodp (287 intervenciones) el 13/04/2015 03:53:14
para entender la funciones recursivas debes disponer ya de conocimientos sobre la pila o en ingles lo que se dice stack.

Te dejo un vídeo sobre lo que seria la gestión de la pila con algo de funciones recursivas. https://www.youtube.com/watch?v=vxHMsJiRmOc

Sobre lo de las colas deberías aprender memoria dinámica para poder disponer de una cola dinámica. En esta pagina tienes ejemplos de todos los tipos de listas, colas, pilas, listas... etc, tanto para C como para C++. Se trata de una introducción básica al tema. Realmente no deberías preocuparte por ese tema ya que C++ dispone de las STL que posee unos cuantos tipos de 'contenedores' que hacen el trabajo de reserva dinámica por ti, eso hace el trabajo más cómodo para el programador, pero siempre es bueno entender como funciona todo el mecanismo, por eso te insto a que lea primero la pagina para aprender sobre contenedores. http://www.conclase.net/c/edd/?cap=003#inicio

Aquí te dejo un ejemplo usando el contenedor queue de la STL de C++ para que te hagas una idea de lo potente que son plantillas STL y lo tanto que te pueden facilitar la vida con temas como el tuyo.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#include <iostream>
#include <queue>
#include <cstdlib>
using namespace std;
 
struct Iten {
    string nombre;
    string id;
    double precio;
    string medida;
};
 
 
 
 
int main () {
    //vamos a tener  3 productos, pero si quieres mas aumente NPRODUCTOS y agregalos abajo 
    const int NPRODUCTOS = 3;
    bool salir = false;
 
    Iten iten[NPRODUCTOS] = {
        {"manteguilla", "001", 07.85, " 400 gramos" }, //producto 1/3
        {"Jabon++", "002", 2.00, " 1 Kg"},             //producto 2/3
        {"Lejia", "003", 1.00, " 2 Litros"}            //producto 3/3. Tienes NPRODUCTOS(3) 
    };
 
    std::queue<Iten> cola; //COLA del tipo de Iten "INFINITA", o al menos mientras tengas memoria XD
 
    while ( !salir ) { //mientras no queremos salir
        int opcion = 0;
        string producto;
 
        system("cls");
        cout << "Etre con el nombre o ID del producto. Pulse 0 para salir" << endl; // Escriba el producto tal cual esta en la lista Iten especificada arriba.
        cin >> producto;
 
        if ( producto != "0" ) { opcion = 1; }else{ opcion = 0; }
 
        bool encontrado = false;
        switch ( opcion ) {
            case 1:
                encontrado = false;
                //miramos si el producto esta en la lista de itens antes de añadir a la cola
                for ( int i = 0; i < NPRODUCTOS; i++ ) {
                    //Si esta en la lista Padentro XD
                    if ( producto == iten[i].id || producto == iten[i].nombre ) {
                        encontrado = true;
                        cout << iten[i].nombre << " " << iten[i].precio << iten[i].medida << endl;
                        cola.push ( iten[i] );
                        break;
                    }
                }
                //Si no esta en la lista decimos que nanain XD
                if ( encontrado == false ) {
                    cout << "Producto inexistente" << endl;
                    system("pause>null");
                }
 
                break;
 
            case 0:
                cout << "Compra terminada." << endl;
                salir = true;
                break;
 
            default:
                break;
        }
 
    }
 
    //ahora en esta parte se imprime la lista completa de productos sin importar cuantos sean.
    Iten itenPrint;
    while ( !cola.empty() ) { //mientras la cola no este vacia...
        itenPrint = cola.front();
 
        cout << itenPrint.nombre << endl; //Imprimimos el producto
        cola.pop(); //Sacamos el producto de la cola.
    }
 
 
    cin.ignore();
    return 0;
}
Aquí por si no puedes copiar: http://codepad.org/4WL2Ctdv
Esta creado y compilado en windows y codeblocks.


Deberías mirar los contenedores STL ya que en C++ se trabaja con contenedores y no con tipos de datos de C como las cadenas de caracteres. XD
http://www.cplusplus.com/reference/stl/

funciones recursivas:
http://c.conclase.net/curso/?cap=024
http://www.c.conclase.net/?id=ejemplos&tema=24#temaactual

Espero que te sirva de ayuda.
PD: intenta dejar el código más claro que se agradece. Creo que no deberías hacer esas llamadas a main ya que dispones de mecanismos como los bucles for, while.. etc que son algo más claros.

Suerte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Fernando

Programa para Facturación de Supermercado (solo 10 articulos)

Publicado por Fernando (4 intervenciones) el 10/11/2016 07:56:52
Mano como le hago para sumar asi el resultado en una pila :vU Soy nuevo en esto, pero me base en tu ejemplo para desarrollar tal programa, el punto es que quiero saber como le harias para sumar esa parte de double precio o iten.precio . Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar