EXES
Aproximación a C#. Programación orientada a objetos
Bases generales: introducción a la tecnología .NET y bases sintácticas de C#
Espacios de nombres, clases e indicadores. Sistema de tipos de C# (CTS de .NET Framework)
Operadores de C#
Nuestra primera aplicación en C#: "Hola mundo"
Métodos (sobrecarga, argumentos y métodos static)
Constructores, destructores y el recolector de basura
Campos y propiedades
Control de flujo condicional
Control de flujo iterativo: bucles, salto y recursividad
Arrays
Indizadores, sobrecarga de operadores y conversiones definidas
Estructuras; Herencia e Interfaces
Pistas y resolución de ejercicios
Créditos
La Compañía
 
Área de Programación y Desarrollo
  Curso de Iniciación a C#
www.exes.es
Tel: 902 360 417
 Exes   Contactar 
Resolución del Ejercicio 4 | Pistas ejercicio 4 (Propuesto en Entrega 12)

RESOLUCIÓN DEL EJERCICIO 4

 

Bien, aquí lo tienes. ¿Cómo que es largo? Bueno, puede que sí, si lo comparas con lo que hemos venido haciendo hasta ahora, pero no es nada comparado con un programa de verdad...

 

using System;

using System.Collections;

 

namespace Facturas

{

    public class Factura

    {

        private string nombre="";

        private string ape1="";

        private string ape2="";

        private string direccion="";

        private string poblacion="";

        private string provincia="";

        private string codpostal="";

        private string nif="";

        private byte iva=0;

        private Detalles detalles=new Detalles();

 

        public string Nombre

        {

            get

            {

                return this.nombre;

            }

            set

            {

                this.nombre=value;

            }

        }

        public string Ape1

        {

            get

            {

                return this.ape1;

            }

            set

            {

                this.ape1=value;

            }

        }

        public string Ape2

        {

            get

            {

                return this.ape2;

            }

            set

            {

                this.ape2=value;

            }

        }

        public string Direccion

        {

            get

            {

                return this.direccion;

            }

            set

            {

                this.direccion=value;

            }

        }

        public string Poblacion

        {

            get

            {

                return this.poblacion;

            }

            set

            {

                this.poblacion=value;

            }

        }

        public string Provincia

        {

            get

            {

                return this.provincia;

            }

            set

            {

                this.provincia=value;

            }

        }

        public string CodPostal

        {

            get

            {

                return this.codpostal;

            }

            set

            {

                this.codpostal=value;

            }

        }

        public string NIF

        {

            get

            {

                return this.nif;

            }

            set

            {

                this.nif=value;

            }

        }

 

        public byte IVA

        {

            get

            {

                return this.iva;

            }

            set

            {

                this.iva=value;

            }

        }

 

        public Detalles Detalles

        {

            get

            {

                return this.detalles;

            }

        }

 

        public static Factura operator+(Factura f, Detalle d)

        {

            Factura ret=f.Clone();

 

            ret.detalles[ret.detalles.Count]=d;

 

            return ret;

        }

 

        public decimal BaseImponible

        {

            get

            {

                decimal ret=0;

 

                for (int i=0;i<this.detalles.Count;i++)

                    ret+=this.Detalles[i].Importe;

 

                return ret;

            }

        }

 

        public decimal Cuota

        {

            get

            {

                return this.BaseImponible*this.iva/100;

            }

        }

 

        public decimal Total

        {

            get

            {

                return this.BaseImponible+this.Cuota;

            }

        }

 

        public Factura Clone()

        {

            Factura ret=new Factura();

 

            ret.nombre=this.nombre;

            ret.ape1=this.ape1;

            ret.ape2=this.ape2;

            ret.direccion=this.direccion;

            ret.poblacion=this.poblacion;

            ret.provincia=this.provincia;

            ret.codpostal=this.codpostal;

            ret.nif=this.nif;

            ret.iva=this.iva;

 

            for (int i=0; i<this.detalles.Count;i++)

                ret.detalles[i]=this.detalles[i];

 

            return ret;

        }

 

        public override string ToString()

        {

            string ln="\n";

 

            return this.nombre+" "+this.ape1+" "+this.ape2+ln+

                this.detalles.ToString()+ln+"BASE IMPONIBLE: "+ln+

                this.BaseImponible.ToString()+ln+"CUOTA: "+

                this.Cuota.ToString()+ln+"TOTAL DE LA FACTURA: "

                +this.Total.ToString()+ln;

        }

    }

 

    public class Detalles

    {

        ArrayList det=new ArrayList();

 

        public int Count

        {

            get

            {

                return det.Count;

            }

        }

 

        public Detalle this[int idx]

        {

            get

            {

                if (this.det.Count==0 || idx>=this.det.Count || idx<0)

                    throw new Exception("No se encuentra en la lista");

                else

                    return (Detalle) this.det[idx];

            }

            set

            {

                if (idx>this.det.Count || idx<0)

                    throw new Exception("No se puede asignar a este elemento");

                else

                {

                    if (value==null)

                        this.det.Remove(this.det[idx]);

                    else

                        this.det.Add(value);

                }

            }

        }

 

        public override string ToString()

        {

            string ret="";

            string ln="\n";

            

            for (int i=0;i<this.Count;i++)

                ret+=this[i].ToString()+ln;

 

            return ret;

        }

    }

 

    public class Detalle

    {

        private int cantidad;

        private string descripcion;

        private decimal precio;

 

        public Detalle(int cantidad, string descripcion, decimal precio)

        {

            this.cantidad=cantidad;

            this.descripcion=descripcion;

            this.precio=precio;

        }

 

        public int Cantidad

        {

            get

            {

                return this.cantidad;

            }

            set

            {

                this.cantidad=value;

            }

        }

 

        public string Descripcion

        {

            get

            {

                return this.descripcion;

            }

            set

            {

                this.descripcion=value;

            }

        }

 

        public decimal Precio

        {

            get

            {

                return this.precio;

            }

            set

            {

                this.precio=value;

            }

        }

 

        public decimal Importe

        {

            get

            {

                return (decimal) this.cantidad * this.precio;

            }

        }

 

        public override string ToString()

        {

            return this.cantidad.ToString()+" "+

                this.descripcion+" "+this.precio.ToString()+" "+

                this.Importe.ToString();

        }

    }

 

    public class FacturasApp

    {

        static void Main(string[] args)

        {

            byte opcion=0;

            Detalle d;

            int idx;

 

            Factura f=new Factura();

 

            Console.Write("Dame el nombre: ");

            f.Nombre=Console.ReadLine();

 

            Console.Write("Dame el primer apellido: ");

            f.Ape1=Console.ReadLine();

 

            Console.Write("Dame el segundo apellido: ");

            f.Ape2=Console.ReadLine();

 

            Console.Write("Dame la dirección: ");

            f.Direccion=Console.ReadLine();

            

            Console.Write("Dame la población: ");

            f.Poblacion=Console.ReadLine();

 

            Console.Write("Dame la provincia: ");

            f.Provincia=Console.ReadLine();

 

            Console.Write("Dame el código postal: ");

            f.CodPostal=Console.ReadLine();

 

            Console.Write("Dame el NIF/CIF: ");

            f.NIF=Console.ReadLine();

 

            do

            {

                try

                {

                    Console.Write("Dame el IVA: ");

                    f.IVA=Byte.Parse(Console.ReadLine());

                }

                catch

                {

                    continue;

                }

            } while (f.IVA<=0);

 

            while (opcion!=4)

            {

                opcion=Menu(f);

 

                switch (opcion)

                {

                    case 1:

                        Console.WriteLine();

                        d=NuevoDetalle();

                        f+=d;

                        Console.WriteLine();

                        break;

                    case 2:

                        Console.WriteLine();

                        if (f.Detalles.Count==0) continue;

 

                        Console.Write("Dame el índice a eliminar: ");

                        idx=Int32.Parse(Console.ReadLine());

 

                        f.Detalles[idx]=null;

                        Console.WriteLine();

                        break;

                    case 3:

                        Console.WriteLine();

                        Console.WriteLine(f.ToString());

                        Console.WriteLine();

                        break;

                }

            }

        }

 

        static byte Menu(Factura f)

        {

            byte opcion=0;

 

            Console.WriteLine("La factura consta de {0} líneas de detalle",f.Detalles.Count);

            Console.WriteLine("1. Añadir una línea de detalle");

            Console.WriteLine("2. Borrar una línea de detalle");

            Console.WriteLine("3. Ver factura actual");

            Console.WriteLine("4. Finalizar");

            Console.Write("Elige una opción: ");

 

            do

            {

                try

                {

                    opcion=Byte.Parse(Console.ReadLine());

                }

                catch

                {

                    continue;

                }

            } while (opcion<=0 || opcion >4);

 

            return opcion;

        }

 

        static Detalle NuevoDetalle()

        {

            Console.Write("Dame la descripción: ");

            string descripcion=Console.ReadLine();

 

            Console.Write("Dame la cantidad: ");

            int cantidad=Int32.Parse(Console.ReadLine());

 

            Console.Write("Dame el precio: ");

            decimal precio=Decimal.Parse(Console.ReadLine());

 

            Detalle d=new Detalle(cantidad,descripcion,precio);

 

            return d;

        }

    }

}






··> Ver todos los cursos
··> Si necesitas más información, contáctanos aquí
 
 
 
Sello de Calidad   Sello de Calidad
  EXES - C/ Albasanz, 14 Bis, 1-C. 28037 Madrid - Tel: 902 360 417 Fax: 902 931 305 - exes@exes.es