[C con Clase] Programa de ejemplo (control de gastos) código fuente para aprendizaje

Oscar Aparicio Holgado enigma-si en hotmail.com
Dom Sep 16 14:33:51 CEST 2012


He visto gente iniciada en C++ nueva en la lista de correo; incluyo este programa sencillo (es mi primer programa y tendrá mil maneras de mejorarlo) pero puede valer para que vean a través de ejemplos como he logrado lo que el programa básicamente hace.

Estableces un sueldo, conceptos de gastos (ejemplo : coche, luz, comida etc) y luego estableces los valores de gastos de cada cosa, luego a través del menú te ofrece un mini informe.

Espero lo disfruten, se aceptan sugerencias.

un saludo.


#include <iostream>

using namespace std;

class gastos
{
    private:

    int sueldo;
    int vgastos;
    int ng;

    struct gasto {
        char concepto[50];
        int valor;
    };

    public:

    gasto losgastos[9];

    void menu();
    void establecerg();
    void establecervg();
    void informe();
    void establecesueldo(int);
    int sueldoacero();
    int gastosacero();
};

void gastos::menu()
{
char eleccion;

cout << "Elige la opci\xa2n :" << endl;
cout << "---------------------" << endl;
cout << "1.- Establecer sueldo." << endl;
cout << "2.- Establecer conceptos de gastos." << endl;
cout << "3.- Establecer valores de gastos." << endl;
cout << "4.- Mostrar informe." << endl;
cout << "5.- Salir del programa." << endl;

cout << endl;

cin >> eleccion;

        switch (eleccion)
            {
            case '1':
                int valor;
                cout << "Introduce el valor del sueldo en euros : "; cin >> valor; cout << endl;
                establecesueldo(valor);
                menu();
                break;
            case '2':
                if(sueldo == 0)
                {
                    cout << "Error, debes establecer un sueldo primero.\n";
                    menu();
                    break;
                }
                else
                {
                    establecerg();
                    losgastos[0].valor = 1;
                    menu();
                    break;
                }

            case '3':
                if(losgastos[0].valor == 0)
                {
                    cout << "Error, debes establecer un concepto de gastos primero.\n";
                    cout << losgastos[0].valor << endl;
                    menu();
                    break;
                }
                else
                {
                    establecervg();
                    menu();
                    break;
                }

            case '4':
                if(sueldo == 0)
                {
                    if(losgastos[0].valor == 0)
                    {
                        cout << "Error, debes establecer un sueldo, conceptos y valores primero.\n";
                        menu();
                        break;
                    }
                }
                else
                {
                    if(losgastos[0].valor == 0 || losgastos[0].valor == 1)
                    {
                        cout << "Error, debes establecer un sueldo, conceptos y valores primero.\n";
                        menu();
                        break;
                    }
                    informe();
                    menu();
                    break;
                }

            case '5':
                return;
            default:
                cout << "Escoge una opci\xa2n de las que ofrece el men\xa3..." << endl;
                cout << endl;
                menu();
                break;
            }
}

void gastos::establecesueldo(int a)
{
    sueldo = a;
}

void gastos::establecerg()
{
    cout << "\xa8" << "Cu\xa0ntos gastos quieres declarar? escoje un n\xa3mero del 1 al 10 : "; cin >> ng;

    if(ng <= 10)
        {
            int i, j;
            for(i = 0, j = 1; i < ng; i++, j++)
            {
            cout << "Establece un concepto de gasto (" << j << "/10) : "; cin >> losgastos[i].concepto; cout << endl;
            }
        }
    else
    {
        cout << "Error, debes introducir un numero del 1 al 10...\n";
        establecerg();
    }
}

void gastos::establecervg()
{
    int i;
    for(i = 0; i < ng; i++)
    {
        cout << "Establece valor de gasto en euros para " << losgastos[i].concepto << " : "; cin >> losgastos[i].valor; cout << endl;
    }
    cout << endl;
}

void gastos::informe()
{
    cout << "Gastos de este mes :" << endl;
    cout << "--------------------" << endl;
    cout << endl;

    int i;
    for(i = 0; i < ng; i++)
    {
        cout << losgastos[i].concepto; cout << " : "; cout << losgastos[i].valor; cout << endl;
    }

    vgastos = 0;

    for(i = 0; i < ng; i++)
    {
        vgastos += losgastos[i].valor;
    }

    cout << endl;
    cout << "Sueldo : " << sueldo << endl;
    cout << "Gastos : " << vgastos << endl;
    cout << "Te sobra : " << (sueldo - vgastos) << endl;
    cout << endl;

}

int gastos::sueldoacero()
{
    return sueldo = 0;
    losgastos[0].valor = 0;
}

int gastos::gastosacero()
{
    return losgastos[0].valor = 0;
}

int main()
{
    gastos objetodeclase;

    objetodeclase.sueldoacero();
    objetodeclase.gastosacero();

    objetodeclase.menu();

    return 0;
}

Oscar
Administrador de sistemas Linux.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20120916/aacefa0c/attachment.html>


Más información sobre la lista de distribución Cconclase