none
Cálculo executado através de uma classe com parâmetros. RRS feed

  • Pergunta

  • Boa tarde.

    Ainda continuo desenvolvendo meu projeto Web Form, na linguagem de programação C#. Já tentei executá-lo através de uma classe com parâmetros. Mas, ao chamar o método para o txtVlrInsalubridade.Text = Converto.ToString(cs.ValorInsalubridade);, aparece um erro na sintaxe do código. Veja a imagem.

    Erro na sintaxe do código...

    Veja os códigos da classe CalcSalario.cs:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    
    namespace ACadaCentavoWeb
    {
        public class CalcSalario
        {
    //-------Criação de atributos
            private double SalBase;
    
            private int PorcInsalubridade;
    
            private double VlrInsalubridade;
    
            private double Gratificacao;
    
            private double Produtividade;
    
            private double PorcAnuenio;
    
            private double VlrAnuenio;
    
            private double VRefeicoes;
    
            private double PorcHExtra;
    
            private double VlrHExtra;
    
            private double QtdHExtra;
    
            private double TotalHExtra;
    
            private double AbFamilia;
    
            private double PorcINSS;
    
            private double DescINSS;
    
            private double PorcIPREV;
    
            private double DescIPREV;
    
            private double PorcPREVEST;
    
            private double DescPREVEST;
    
            private double ImpRenda;
    
            private double PorcSindicato;
    
            private double DescSindicato;
    
            private double PlnSaude;
    
            private double EmpConsig;
    
            private double PorcVTransporte;
    
            private double DescVTransporte;
    
            private double SalBruto;
    
            private double SalLiquido;
    
    //--------Criação de um construtor com parâmetros
            public CalcSalario(double pSalBase, Int32 pPorcInsalubridade, double pVlrInsabrudidade, double pGratificacao, double pProdutividade, double pPorcAnuenio, double pVlrAnuenio,
                                double pVRefeicoes, double pPorcHExtra, double pVlrHExtra, double pQtdHExtra, double pTotalHExtra, double pAbFamilia, double pPorcINSS, double pDescINSS,
                                double pPorcIPREV, double pDescIPREV, double pPorcPREVEST, double pDescPREVEST, double pImpRenda, double pPorcSindicato, double pDescSindicato, double pPlnSaude,
                                double pEmpConsig, double pPorVtransporte, double pDescVTransporte, double pSalBruto, double pSalLiquido)
            {
                SalBase = pSalBase;
                PorcInsalubridade = pPorcInsalubridade;
                VlrInsalubridade = pVlrInsabrudidade;
                Gratificacao = pGratificacao;
                Produtividade = pProdutividade;
                PorcAnuenio = pPorcAnuenio;
                VlrAnuenio = pVlrAnuenio;
                VRefeicoes = pVRefeicoes;
                PorcHExtra = pPorcHExtra;
                VlrHExtra = pVlrHExtra;
                QtdHExtra = pQtdHExtra;
                TotalHExtra = pTotalHExtra;
                AbFamilia = pAbFamilia;
                PorcINSS = pPorcINSS;
                PorcIPREV = pPorcIPREV;
                DescIPREV = pDescIPREV;
                PorcPREVEST = pPorcPREVEST;
                DescPREVEST = pDescPREVEST;
                ImpRenda = pImpRenda;
                PorcSindicato = pPorcSindicato;
                DescSindicato = pDescSindicato;
                PlnSaude = pPlnSaude;
                EmpConsig = pEmpConsig;
                PorcVTransporte = pPorVtransporte;
                DescVTransporte = pDescVTransporte;
                SalBruto = pSalBruto;
                SalLiquido = pSalLiquido;
            }
    //------Criação de um método para calcular o valor da insalubridade
            public void ValorInsalubridade()
            {
                VlrInsalubridade = (SalBase * PorcInsalubridade) / 100;
            }
            
    
        }
    }
     

    Este é meu Web Form:

    webForm CalcSalario.aspx

    Por favor, me apontem uma solução. Já tentei executar esse cálculo de outras formas.

    Obs.: A resposta tem que ser coerente. Já recebi respostas sem fundamento.

    Muito obrigado, e, estou no aguardo.

    sexta-feira, 19 de fevereiro de 2016 17:02

Todas as Respostas

  • Olá! Cara, o problema é o seguinte, na sua classe você tem o método "ValorInsalubridade", e ele é um método "void" logo não retorna valor.

    public void ValorInsalubridade()
    {
                VlrInsalubridade = (SalBase * PorcInsalubridade) / 100;
    }

    Altera esse método para algo do yipo:

    public double ValorInsalubridade() {

    VlrInsalubridade = (SalBase * PorcInsalubridade) / 100;

    return VlrInsalubridade;

    }

    Boa sorte!

    Danilo Chicale

    __________________________________________________________

    Não esqueça de marcar se foi útil.


    sexta-feira, 19 de fevereiro de 2016 18:20
  • Muito obrigado pela resposta. Agora dá para encarar o restante do projeto.
    sábado, 20 de fevereiro de 2016 13:17
  • Olá, boa tarde!

    Gostei da sua resposta. Ela tirou aquele erro. Realmente, o problema estava no retorno. Mas, depois apareceu outro problema na execução do meu projeto. Veja imagem:

    Erro na cadeia de caracteres.

    Como você pode ver, este erro acontece quando eu clico no botão para fazer o cálculo da insalubridade.

    Por favor, me mostre como resolver esse problema na linguagem do próprio C#. Para se ter uma ideia, nos vídeos que assisto esses tipos de problemas não aparecem. Será que com JavaScript resolve? Mesmo assim, eu prefiro que seja resolvido na linguagem do próprio C#.

    segunda-feira, 22 de fevereiro de 2016 19:19
  • Posta o código da classe CalcSalario que vejo se consigo te ajudar, mas visivelmente em um problema de conversão de tipos que provavelmente está no construtor da sua classe.

    Boa sorte!

    Danilo Chicale

    ____________________________________

    Não esqueça de marcar se a resposta foi útil :D


    segunda-feira, 22 de fevereiro de 2016 21:07
  • DesignWeb,

    Seu código está muito suscetível a erro de conversão. Você pode implementar uma função Javascript para validar a entrada de dados. Seria algo como isso:

    <HTML> <HEAD> <script type="text/Javascript"> function checkDec(el){ var ex = /^[0-9]+\.?[0-9]*$/; if(ex.test(el.value)==false){ el.value = el.value.substring(0,el.value.length - 1); } } </script> </HEAD> <BODY>

    <asp:TextBox ID="txtPorcSinidicato" onkeyup="checkDec(this);" runat="server" Width="80px"></asp:TextBox> </BODY> </HTML>


    Referência: http://forums.asp.net/t/1846158.aspx?accept+input+only+number+with+2+decimal+javascript


    Outra alternativa seria criar um validador no C# mesmo, parecido com o sugerido aqui (parseDouble):

    https://social.msdn.microsoft.com/Forums/pt-BR/784bcbd6-ab1c-4ecb-8d4d-d1ea03a44756/calculadora-simples-com-aspnet-e-c?forum=vscsharppt#784bcbd6-ab1c-4ecb-8d4d-d1ea03a44756

    terça-feira, 23 de fevereiro de 2016 01:11
  • Bom dia!

    Os códigos da classe estão um pouco acima. Por favor, dá uma olhada lá.


    Desde já, muito obrigado.

    terça-feira, 23 de fevereiro de 2016 10:29
  • using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    
    namespace ACadaCentavoWeb
    {
    //--------------Atributos-----------------------------  
      public class CalcSalario
        {
            private double SalBase;
    
            private int PorcInsalubridade;
    
            private double VlrInsalubridade;
    
            private double Gratificacao;
    
            private double Produtividade;
    
            private int PorcAnuenio;
    
            private double VlrAnuenio;
    
            private double VRefeicoes;
    
            private int PorcHExtra;
    
            private double VlrHExtra;
    
            private int QtdHExtra;
    
            private double TotalHExtra;
    
            private double AbFamilia;
    
            private int PorcINSS;
    
            private double DescINSS;
    
            private int PorcIPREV;
    
            private double DescIPREV;
    
            private int PorcPREVEST;
    
            private double DescPREVEST;
    
            private double ImpRenda;
    
            private int PorcSindicato;
    
            private double DescSindicato;
    
            private double PlnSaude;
    
            private double EmpConsig;
    
            private int PorcVTransporte;
    
            private double DescVTransporte;
    
            private double SalBruto;
    
            private double SalLiquido;
    
    //------------Construtor--------------------------
            public CalcSalario(double pSalBase, int pPorcInsalubridade, double pVlrInsabrudidade, double pGratificacao, double pProdutividade, int pPorcAnuenio, double pVlrAnuenio,
                                double pVRefeicoes, int pPorcHExtra, double pVlrHExtra, int pQtdHExtra, double pTotalHExtra, double pAbFamilia, int pPorcINSS, double pDescINSS,
                                int pPorcIPREV, double pDescIPREV, int pPorcPREVEST, double pDescPREVEST, double pImpRenda, int pPorcSindicato, double pDescSindicato, double pPlnSaude,
                                double pEmpConsig, int pPorVtransporte, double pDescVTransporte, double pSalBruto, double pSalLiquido)
            {
                SalBase = pSalBase;
                PorcInsalubridade = pPorcInsalubridade;
                VlrInsalubridade = pVlrInsabrudidade;
                Gratificacao = pGratificacao;
                Produtividade = pProdutividade;
                PorcAnuenio = pPorcAnuenio;
                VlrAnuenio = pVlrAnuenio;
                VRefeicoes = pVRefeicoes;
                PorcHExtra = pPorcHExtra;
                VlrHExtra = pVlrHExtra;
                QtdHExtra = pQtdHExtra;
                TotalHExtra = pTotalHExtra;
                AbFamilia = pAbFamilia;
                PorcINSS = pPorcINSS;
                PorcIPREV = pPorcIPREV;
                DescIPREV = pDescIPREV;
                PorcPREVEST = pPorcPREVEST;
                DescPREVEST = pDescPREVEST;
                ImpRenda = pImpRenda;
                PorcSindicato = pPorcSindicato;
                DescSindicato = pDescSindicato;
                PlnSaude = pPlnSaude;
                EmpConsig = pEmpConsig;
                PorcVTransporte = pPorVtransporte;
                DescVTransporte = pDescVTransporte;
                SalBruto = pSalBruto;
                SalLiquido = pSalLiquido;
            }
    
    //-----------------Métodos----------------------
            public double ValorInsalubridade()
            {
                VlrInsalubridade = (SalBase * PorcInsalubridade) / 100;
                return VlrInsalubridade;
            }
            
            public double ValorAnuenio()
            {
                VlrAnuenio = (SalBase * PorcAnuenio) / 100;
                return VlrAnuenio;
            }
    
            public double ValorHExtra()
            {
                VlrHExtra = ((SalBase / 180) * (PorcHExtra / 100));
                return VlrHExtra;
            }
    
            public double TotalHExtras()
            {
                TotalHExtra = (VlrHExtra * QtdHExtra);
                return TotalHExtra;
            }
        }
    }

    terça-feira, 23 de fevereiro de 2016 20:35

  • Você implemento a minha sugestão de validação via Javascript?

    Abaixo segue um exemplo do que sugeri em C#, como pode perceber eu não escrevi todo o código, mas acho que se olhar com atenção vai conseguir terminar de implementa-lo.

        try
        {
    
            double pSalBase = parseDouble(txtSalBase.Text);
            int pPorcInsalubridade = parseInt(txtSalBase.Text);
            //Faz o mesmo com o restante e depois chama o CalcSalario
            CalcSalario cs = new CalcSalario(pSalBase, pPorcInsalubridade);
        }
        catch (Exception ex)
        {
            //Aqui você notifica o erro ao usuário.
            Response.Write(ex.Message);
        }
    
    }
    
    private static double parseDouble(string valor)
    {
        double _valor;
        if (double.TryParse(valor, out _valor))
            return _valor;
        else
            throw new FormatException(string.Format("O número {0} não é um decimal válido", valor));
    
    }
    
    private static int parseInt(string valor)
    {
        int _valor;
        if (int.TryParse(valor, out _valor))
            return _valor;
        else
            throw new FormatException(string.Format("O número {0} não é válido", valor));
    
    }
    


    quarta-feira, 24 de fevereiro de 2016 02:46
  • Ainda não fiz a implementação com Java script. Hoje não vai dar para fazer isso, vou para a faculdade. Mas, amanhã farei essa implementação. Mesmo assim prefiro que tudo fique registrado no code-behind do c#, pois nos vídeos que assisti esses erros não aparecem.

    Um abraço, e até amanhã.

    quarta-feira, 24 de fevereiro de 2016 13:45
  • Pois é, nos vídeos os dados inseridos sempre estão no formato correto, mas em um ambiente real as coisas são diferentes. Na verdade os erros acontecem em ambientes reais, com pessoas reais e dados reais.

    Os vídeos editados nunca possuem erros não propositais e se você assistir eventos ou apresentações ao vivo ou até vídeos sem edição (onde alguém escreve códigos), você verá que erros acontecem.

    Sobre a validação... sim, ela sempre precisa ser feita no C#, mas fazer ela em Javascript facilita muito para o usuário, pois evita que dados inválidos possam chegar no C# e gerar um erro.

    Erros sempre vão acontecer, não importa quanta experiência você tiver, então o que você deve fazer sempre é tratá-los, já que não pode evitá-los 100%. Muitas vezes o erro nem é culpa sua, mas ele vai acontecer.

    Lei de MURPHY se aplica bem ao dia a dia de um desenvolvedor...

    quarta-feira, 24 de fevereiro de 2016 14:25
  • Boa tarde!

    Estou aqui, na faculdade. Eu fiz a implementação em JavaScript. Só que eu criei uma pasta, depois criei uma página Variavel.js, e adicionei dentro dessa pasta. Daí, eu coloquei o caminho dessa página no HEAD da página asp. Fiz também a implementação dos códigos C# no evento Click do btnInsalubridade. Coloquei todos os códigos que você escreveu aqui. Não sei para que servem essas variáveis todas que você fez. Eu clico não botão, e não acontece nada. Só poder poder enviar o que eu fiz aqui amanhã. Pois aqui na faculdade não tem Internet Wi-Fi.

    quarta-feira, 24 de fevereiro de 2016 21:14
  • Bom dia, Cesar!

    Aqui estão os códigos:

    Códigos criados no evento Click de btnInsalubridade...
    
    protected void btnInsalubridade_Click(object sender, EventArgs e)
            {
                //CalcSalario cs = new CalcSalario(Convert.ToDouble(txtSalBase.Text), Convert.ToInt32(txtPorcInsalubridade.Text), Convert.ToDouble(txtVlrInsalubridade.Text), Convert.ToDouble(txtGratificacao.Text),
                //                                 Convert.ToDouble(txtProdutividade.Text), Convert.ToInt16(txtPorcAnuenio.Text),
                //                                 Convert.ToDouble(txtVlrAnuenio.Text), Convert.ToDouble(txtVRefeicao.Text), Convert.ToInt16(txtPorcHExtra.Text),
                //                                 Convert.ToDouble(txtVlrHExtra.Text), Convert.ToInt16(txtQtdHExtra.Text), Convert.ToDouble(txtTHoraExtra.Text),
                //                                 Convert.ToDouble(txtAbFamilia.Text), Convert.ToInt16(txtPorcInss.Text), Convert.ToDouble(txtDescInss),
                //                                 Convert.ToInt16(txtPorcIprev.Text), Convert.ToDouble(txtDescIprev), Convert.ToInt16(txtPorcPrevEstado.Text),
                //                                 Convert.ToDouble(txtDescPrevEstado.Text), Convert.ToDouble(txtImpRenda.Text), Convert.ToInt16(txtPorcSinidicato.Text),
                //                                 Convert.ToDouble(txtDescSinidicato.Text), Convert.ToDouble(txtPlanoSaude.Text), Convert.ToDouble(txtEmpConsig.Text),
                //                                 Convert.ToInt16(txtPorcVTransporte.Text), Convert.ToDouble(txtVTranspotes.Text),
                //                                 Convert.ToDouble(txtSalBruto.Text), Convert.ToDouble(txtSalLiquido.Text));
    
                
                try
                {
                    double pSalBase = parseDouble(txtSalBase.Text);
                    int pPorcInsalubridade = parseInt(txtPorcInsalubridade.Text); 
                    double pVlrInsalubridade = parseDouble(txtVlrInsalubridade.Text);
    
                    CalcSalario cs = new CalcSalario(pSalBase, pPorcInsalubridade, pVlrInsalubridade);
    
                    txtVlrInsalubridade.Text = Convert.ToString(pSalBase * (pPorcInsalubridade / 100));
                    
                }
                catch(Exception ex)
                {
                    Response.Write(ex.Message);
                }
            }
    //----------------Não sei para que serve-------------------------
            private static double parseDouble(string valor)
            {
                double _valor;
                if (double.TryParse(valor, out _valor))
                    return _valor;
                else
                    throw new FormatException(string.Format("O número {0} não é um decimal válido", valor));
            }
    //-------------Não sei para que serve-------------------------------------
            private static int parseInt(string valor)
            {
                int _valor;
                if (int.TryParse(valor, out _valor))
                    return _valor;
                else
                    throw new FormatException(string.Format("O número {0} não é válido", valor));
            }

    quinta-feira, 25 de fevereiro de 2016 10:23