unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Buttons;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    edtAplIni: TEdit;
    edtAplMes: TEdit;
    edtJrsMes: TEdit;
    edtQtdMes: TEdit;
    chkDetalhe: TCheckBox;
    lstDados: TListBox;
    btnGerar: TBitBtn;
    procedure btnGerarClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.btnGerarClick(Sender: TObject);
var
  mTotDeposito, mTotJuros, mJrs, mValorAcumulado, mJrsMes, mAplIni, mAplMes : Double;
  i, mQtdMes : integer;
begin

  lstDados.Items.Clear;

  mJrsMes   := 0;
  mAplIni   := 0;
  mAplMes   := 0;
  mQtdMes   := 0;
  mTotJuros := 0;

  if edtAplIni.Text <> '' then begin
   try
     mAplIni := StrToFloat( edtAplIni.Text );
     except
     ShowMessage( 'Informe um valor válido!' ) ;
     edtAplIni.SetFocus;
     Exit;
     end;
    end;  

  if edtAplMes.Text <> '' then begin
   try
     mAplMes := StrToFloat( edtAplMes.Text );
     except
     ShowMessage( 'Informe um valor válido!' ) ;
     edtAplMes.SetFocus;
     Exit;
     end;
    end;

  if edtJrsMes.Text <> '' then begin
   try
     mJrsMes := StrToFloat( edtJrsMes.Text );
     except
     ShowMessage( 'Informe um valor válido!' ) ;
     edtJrsMes.SetFocus;
     Exit;
     end;
    end;

  if edtQtdMes.Text <> '' then begin
   try
     mQtdMes := StrToInt( edtQtdMes.Text );
     except
     ShowMessage( 'Informe um valor válido!' ) ;
     edtQtdMes.SetFocus;
     Exit;
     end;
    end;       

  mValorAcumulado := mAplIni;
    
  with lstDados , Items do begin
    Add( 'Dados Iniciais' );
    Add( '---------------------------------------------------------' );
    Add( 'Duração da Aplicação: ' + IntToStr( mQtdMes ) + ' meses.' );
    Add( 'Aplicação Inicial: '    + FormatFloat( '#,##0.00' , mAplIni ) );
    Add( 'Aplicação Mensal: '     + FormatFloat( '#,##0.00' , mAplMes ) );
    Add( 'Juros Mensal: '         + FormatFloat( '#,##0.00' , mJrsMes ) + '%' );   

    mTotDeposito := (mQtdMes * mAplMes) + mAplIni;
    
    for i:=1 to mQtdMes do begin

      if chkDetalhe.Checked then
        Add( 'Mes: ' + IntToStr( i ) );

      if i > 1 then begin
        mJrs            := (mValorAcumulado*( mJrsMes/100 ));
        mTotJuros       := mTotJuros + mJrs;
        mValorAcumulado := mValorAcumulado + mAplMes + mJrs;
        end;
              
      if chkDetalhe.Checked then
        Add( 'Saldo no final do mes ' + IntToStr( i ) + ': ' + FormatFloat( '#,##0.00' , mValorAcumulado ) );
        
      end;
     
    Add( ' ----------------------------------------------------- ' );
    Add( 'Saldo após ' + IntToStr( mQtdMes ) + ' meses: ' + FormatFloat( '#,##0.00' , mValorAcumulado ) );

    if chkDetalhe.Checked then begin
      Add( ' ----------------------------------------------------- ' );    
      Add( 'Total de Depositos: ' + FormatFloat( '#,##0.00' , mTotDeposito ) );
      Add( 'Total de Juros: '     + FormatFloat( '#,##0.00' , mTotJuros ) );
      end;
    
    end;

end;

end.
