Quantcast
Channel: Comunidad Underground Hispana
Viewing all articles
Browse latest Browse all 11602

[C] Simulador Cajero Automático

$
0
0
ENUNCIADO DEL PROBLEMA

Diseñar un programa que gestione un cajero automático. Una de las funciones de un cajero automático es que puede entregar cantidades que son múltiplos de 10, suponemos que el cajero dispone de una cantidad determinada de billetes de 100, 50 y 10. Este programa no entregará billetes, pero sí mostrará las cantidades de cada tipo de billete por pantalla. Suponemos que inicialmente el cajero está cargado con 500 billetes de cada tipo.

El programa deberá permitir el ingreso de una cantidad de dinero a extraer. Mediante una función, se validará que la cantidad ingresada sea un valor (entero) positivo y múltiplo de 10. Si la cantidad solicitada supera la cantidad disponible en el cajero, se informará por pantalla “Cantidad no disponible.”

En caso contrario, el programa invocará a un subalgoritmo que recibe como parámetro la cantidad de dinero a extraer. Este subalgoritmo deberá devolver al programa principal la cantidad de billetes de 100, 50 y 10 correspondientes, pero si no es posible obtener una combinación válida de los billetes disponibles, devolverá 0 en todas las cantidades, informando de tal situación. El subalgoritmo siempre deberá obtener la menor cantidad de billetes posibles.

El programa se ejecutará en forma reiterada para que varios clientes puedan realizar distintas extracciones, preguntando “¿Continúa con otra extracción (s/n)?”, si la respuesta es negativa el programa finalizará. Pero también deberá finalizar si el importe disponible para la extracción es 0, debiendo informar de tal situación con el siguiente mensaje “Cajero sin dinero. Avise a mantenimiento.”



CODIFICACIÓN DEL PROGRAMA EN LENGUAJE C

Código:

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

int canti100,canti50,canti10;
int opcion,cant,b100,b50,b10,o;


int cantidad (int cant,int x,int y,int z)
{

int aux100, aux50, aux10, total, a;


aux100 = x*100;
aux50 = y*50;
aux10 = z*10;

total = aux100+aux50+aux10;

    if((total-cant)>=0)
        {
        a=1;
        }

    else
        {
        a=0;
        }

    return(a);
}


void cantb(int cant, int *canti100, int *canti50 , int *canti10,int *o,int *b100,int *b50,int *b10)

{

int a, b,aux1,aux2,c;


a= cant/100;
b= (cant%100)/50;
c= ((cant%100)%50)/10;


if(a>*b100)
{
    *canti100=*b100;
    a= a-*b100;
    aux1=(a*100)/50;
    *b100=0;

b=b+aux1;
}

else
{
    *canti100=a;
    *b100=*b100-*canti100;
}

        if (b>*b50)
        {
            *canti50=*b50;
            b= b-*b50;
            aux2=(b*50)/10;
            *b50=0;
            c=c+aux2;
        }
        else
        {
            *canti50=b;
            *b50=*b50-*canti50;

        }
                if (c>*b10)
                {
                    printf("\n\t\tNo hay cambio.\n");
                    *o=0;

                }
                else
                {
                    *canti10=c;
                    *b10=*b10-*canti10;
                    *o=1;
                }

}


int main()
{

char resp;

b100=500;
b50=500;
b10=500;

    while (opcion!=2)
    {


    printf("\t\t---------------MENU DEL CAJERO---------------\n");
        printf("\t\t---------------------------------------------\n");
        printf("\t\tRetirar dinero.............................(1)\n");
        printf("\t\tSalir......................................(2)\n\n");
        printf("\t\tElija la transaccion que desea realizar: ");
    scanf("%d",&opcion);

    while( opcion!=2 && opcion!=1)
    {
        printf("\n\t\tError: ingrese nuevamente la opcion que desea: ");
        scanf("%d",&opcion);
    }


switch(opcion)
{

    case 1:


            printf("\n\t\tIngrese el monto de dinero que desea retirar: ");
            scanf(" %d",&cant);


            while((cant%10)!=0||(cant<=0))
            {
                printf("\n\t\tIngrese una cifra positiva que sea multiplo de 10: ");
                scanf("%d",&cant);
            }
            if ((b100==0)&&(b50==0)&&(b10==0))
            {
                printf("\n\t\tCajero sin dinero. Avise a mantenimiento.");
                    canti100=0;
                    canti50=0;
                    canti10=0;
                    printf("\n\t\t Billetes de 100 --> %d\n\t\t Billetes de 50 --> %d\n\t\t Billetes de 10 --> %d\n\n", canti100, canti50, canti10);
                    return (0);
            }

            if((cantidad(cant,b100,b50,b10))==0)
            {
                    printf("\n\t\tCantidad no disponible.\n");
                    printf("\t\tContinua con otra extraccion?(s/n) ");
            scanf(" %c",&resp);
            while (resp!='s'&&resp!='n')
            {printf("\t\tContinua con otra extraccion?(s/n) ");
            scanf(" %c",&resp);
            }
            if (resp=='s')
            {
                opcion=1;
            }
            else
            {
                opcion=2;

            }

            }
            else
            {


            cantb(cant,&canti100,&canti50,&canti10,&o, &b100, &b50, &b10);


            if (o==1)
            {

            printf("\n\t\t Billetes de 100 --> %d\n\t\t Billetes de 50 --> %d\n\t\t Billetes de 10 --> %d\n\n", canti100, canti50, canti10);

            }

            printf("\t\tContinua con otra extraccion?(s/n) ");
            scanf(" %c",&resp);
            while (resp!='s'&&resp!='n')
            {printf("\t\tContinua con otra extraccion?(s/n) ");
            scanf(" %c",&resp);
            }
            if (resp=='s')
            {
                opcion=1;
            }
            else
            {
                opcion=2;
            }
            }


    break;


    case 2:

        printf("\n\t\tGracias por usar este cajero, vuelva pronto.");
        return 0;

    break;


}


            }

            }



IMÁGENES


Viewing all articles
Browse latest Browse all 11602

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>