using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

    public class Programa
    {
        public class Conta
        {
            public string Nro_conta { get; set; }
            public double Saldo { get; set; }

            public void Depositar()
            {
                Console.Write("\tInforme o valor a ser depositado: ");
                this.Saldo += Convert.ToDouble(Console.ReadLine());
            }

            public void MostrarSaldo()
            {
                Console.WriteLine("\tO saldo da conta {0} é R$ {1}\n", this.Nro_conta, this.Saldo);
            }

            public virtual void Sacar()
            {
                double valor;
                Console.Write("\tInforme o valor a ser sacado: ");
                valor = Convert.ToDouble(Console.ReadLine());
                if (valor <= this.Saldo)
                {
                    this.Saldo -= valor;
                    Console.WriteLine("\tSaque realizado com sucesso.");
                }
                else
                    Console.WriteLine("\tSaldo insuficiente. Faltam {0} para sacar. ", valor - this.Saldo);
            }
        }
        public class Conta_Especial : Conta
        {
            public double Limite { get; set; }

            public override void Sacar()
            {
                double valor;
                Console.Write("\tInforme o valor a ser sacado: ");
                valor = Convert.ToDouble(Console.ReadLine());
                if (valor <= this.Saldo + this.Limite)
                {
                    this.Saldo -= valor;
                    Console.WriteLine("\tSaque realizado com sucesso.");
                }
                else
                    Console.WriteLine("\tSaldo insuficiente. Faltam {0} para sacar. ", valor - (this.Saldo+this.Limite));
            }
        }

            public static void Main()
            {
                string op="";
                Conta_Especial novaconta = new Conta_Especial();
                Console.Write("\tInforme o numero da conta: ");
                novaconta.Nro_conta = Console.ReadLine();
                Console.Write("\tInforme o saldo inicial da conta: ");
                novaconta.Saldo = Convert.ToDouble(Console.ReadLine());
                Console.Write("\tInforme qual o valor de limite da conta especial: ");
                novaconta.Limite = Convert.ToDouble(Console.ReadLine());
                
                do
                {
                    Console.BackgroundColor = ConsoleColor.DarkBlue;
                    Console.Clear();
                    Console.WriteLine("\n\n\t\t\tControle de conta\n\n");
                    Console.WriteLine("\t1 - Efetuar um depósito na conta");
                    Console.WriteLine("\t2 - Efetuar um saque na conta");
                    Console.WriteLine("\t3 - Mostrar o Saldo da conta");
                    Console.WriteLine("\t4 - Sair");
                    Console.Write("\n\n\tInforme sua opção: ");
                    op = Console.ReadLine();

                    switch (op)
                    {
                        case "1":
                            novaconta.Depositar();
                        break;
                        case "2":
                            novaconta.Sacar();
                            break;
                        case "3":
                            novaconta.MostrarSaldo();
                            break;
                        case "4":
                            break;
                        default:
                            Console.ForegroundColor = ConsoleColor.Red;
                            Console.WriteLine("\tOpção Inválida!\n");
                            Console.ForegroundColor = ConsoleColor.White;
                            break;
                    }
                    if (op != "4")
                    {
                        Console.WriteLine("\n\nTecle algo para continuar...");
                        Console.ReadKey();
                    }
                } while (op != "4");

                
            }
        
    }

