none
Ajuda em código C# RRS feed

  • Pergunta

  • Ola pessoal, sou novo no ramo da programação principalmente em C#.
    se alguem poder me dar umas dicas, ficarei grato.
    Tenho que desenvolver um programa para cadastrar pessoas, esse programa deve fica em loop enquanto o codigo for diferente de 99999, o sistema também deve gravar o dados digitados em um arquivo texto streamwriter e o campo CPF de ser validado

    Os campos são:

    Código
    Nome
    CPF deve ser validado com 11 caracteres
    Endereço:
    Bairro:
    Cidade:
    Estado deve permitir 2 caracteres
    CEP deve ser validado com 8 caracteres.
    fone:

    consegui fazer o seguinte.using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    namespace ConsoleApplication1
    {
        class Program
        {
            string Nome, Codigo, cpf, endereco, bairro, cidade, estado, cep, fone;
            int cont;              
            static void Main(string[] args)
            {
                for (int i = 0; i < 99999; i++)
                    {
                    Console.WriteLine("digite o nome");
                    String Nome = Console.ReadLine();
                    Console.WriteLine(" Digite o codigo");
                    String Codigo = Console.ReadLine();
                    Console.WriteLine("digite o CPF");
                    string cpf = Console.ReadLine();
                    Console.WriteLine("digite o Endereço");
                    string endereco = Console.ReadLine();
                    Console.WriteLine("digite o nome do bairro");
                    string bairro = Console.ReadLine();
                    Console.WriteLine("Digite o nome da cidade");
                    string cidade = Console.ReadLine();
                    Console.WriteLine("Digite o nome do estado");
                    string estado = Console.ReadLine();
                    Console.WriteLine("Digite o CEP");
                    string cep = Console.ReadLine();
                    Console.WriteLine("digite o Fone");
                    string fone = Console.ReadLine();
                    {
                        Console.WriteLine("Código: " + Codigo + "  " + Nome);
                     
                    }

                }
            }
        }
    }
    quinta-feira, 26 de novembro de 2009 20:48

Respostas

  • Basicamente o codigo acima é (vamo por em forma de algoritmo)

    Cria uma classe para manipulaçao dos dados

    Criar uma metodo para a leitura e validação de cada uma das propriedades da classe (os LerXXXXX da vida)

    Criar um metodo (no caso eu sobrescrevi o metodo ToString mesmo) para formatar a saida de dados... isso é converter a classe em uma string no formato que lhe agradar mais ....

    Criar um metodo para a gravação da classe num arquivo

    Depois criei um metodo que dispara todas as leituras.... ja aproveitei para ver se o Codigo = 99999 entao ja retorna falso para abortar a gravação e talz...

    no final é so instanciar a classe... chamar o metodo de leitura... se retornar True, grava a classe num arquivo e cadastra outra linha... falso sai do programa e nao grava...


    Agora a uns detalhes...

    " return String.Format("{0:00000};"
    usei o stringFormat... pq tenho propriedades que nao sao string.... entao para nao ter o trabalho de ficar usando o Convert.ToString... vc pode usar o StringFormat que aceita qq objeto como paramentro... e ainda pode formatar a saida dele... nesse exemplo se codigo = 1.... vai ser gravado 00001 no arquivo...

    outro detalhe ta na conversao de uma string para um outro tipo... no caso int
    // Verifica se o codigo digitado eh um numero
                    int int_codigo;
                    if (int.TryParse(codigo, out int_codigo)) {
                        this.Codigo = int_codigo;
                    } else {
                        Console.WriteLine("O Codigo nao é um numero");
                        this.LerCodigo();
                    }

    o metodo TryParse existe na maioria dos tipos simples (int, short, DateTime, double, bool) é a maneira mais segura de fazer uma conversao de dados... da uma pesquisada...

    e por fim o lance da recursividade mesmo...
    private void LerCPF() {
          Console.Write("CPF: ");
           this.CPF = Console.ReadLine();

           if (this.CPF.Length != 11) {
                 Console.WriteLine("CPF Invalido");
                 this.LerCPF(); // -> Se o CPF é invalido pede novamente o CPF ate ele digitar um CPF Valido
           }
     }

    no exemplo tem o problema de o usuario querer cancelar a operação no meio... se ele nao por um dado valido nao vai sair da funcao... (tem que sempre tomar cuidado com isso na recusrsividade... gerar um loop infinito eh facinho....

    pode ser melhorado assim
    private bool LerCPF() {
          Console.Write("CPF: ");
          this.CPF = Console.ReadLine();

           if (String.IsNullOrEmpty(this.CPF)) return false; // Informando que o usuario nao quer mais escrever o CPF

           if (this.CPF.Length != 11) {
                 Console.WriteLine("CPF Invalido");
                 return this.LerCPF(); // -> Retorna o resultado do metodo recursivamente
           } else {
                 return true; // CPF Digitado corretamente...
           }
     }

    isso vai ter uma alteração no meu metodo de leitura principal tambem... o certo é fazer a verifica de String em branco para todas propriedades...
    public bool Ler() {
         if (!this.LerCodigo()) return false; // Se não leu o codigo retorna falso
         if (this.Codigo == 99999) return false; // Se codigo é 99999 nao ah necessidade de ler as outras propriedade....
         if (!this.LerNome()) return false // Se nao leu o Nome retorna false
         // O mesmo para cada uma das propriedades
         return true; // Avisa que ja leu e validou todas as propriedades;
    }

    isso muda um pouco a logica do metodo main...
    static void Main(string[] args) {              
                Dados dados = new Dados(); // Cria a intancia da classe de controle de dados
                bool Executando = true; // Vamo criar uma variavel para manter a execucao;
                while (Executanto) {
                    if (dados.Ler()) { // Se leu e validou todas as propriedades da classe                 
                          dados.Gravar(@"C:\Teste.txt"); // Grava os dados no arquivo
                    } else { // Se nao leu todas as propriedades
                          Executando = (dados.Codigo != 99999); Continua execuntando o cadastro se Codigo <> de 99999
                    }
                }
            }


    por ai vai... qq coisa q faltou avisa ai


    What would Brian Boitano do ?
    • Marcado como Resposta ALCNET sexta-feira, 27 de novembro de 2009 02:49
    sexta-feira, 27 de novembro de 2009 01:09
    Moderador

Todas as Respostas

  • Que faculdade é essa? Outro pedindo a mesma coisa. heheh

    olhe aqui:

    att

    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    SOGI INFORMATIQUE LTÉE (http://www.sogi.com)
    quinta-feira, 26 de novembro de 2009 21:41
    Moderador
  • Talves pareça meio complicado... mas da uma olhada nisso aqui...

    qq coisa a gente vai explicando aos poucos


    using System;
    using System.IO;
    
    namespace ConsoleApplication1 {
        class Program {
            class Dados {
                public int Codigo { get; set; }
                public string Nome { get; set; }
                public string CPF { get; set; }
                public string Endereco { get; set; }
                public string Bairro { get; set; }
                public string Cidade { get; set; }
                public string Estado { get; set; }
                public string CEP { get; set; }
                public string Fone { get; set; }
    
                public bool Ler() {
                    this.LerCodigo();
                    if (this.Codigo == 99999) return false;
    
                    this.LerNome();
                    this.LerCPF();
    
                    // Continua assim com todos os campos
                    return true;
                }
                private void LerCodigo() {
                    Console.Write("Codigo: ");
                    string codigo = Console.ReadLine();
    
                    // Verifica se o codigo digitado eh um numero
                    int int_codigo;
                    if (int.TryParse(codigo, out int_codigo)) {
                        this.Codigo = int_codigo;
                    } else {
                        Console.WriteLine("O Codigo nao é um numero");
                        this.LerCodigo();
                    }
                }
                private void LerNome() {
                    Console.Write("Nome: ");
                    this.Nome = Console.ReadLine();
                }
                private void LerCPF() {
                    Console.Write("CPF: ");
                    this.CPF = Console.ReadLine();
    
                    if (this.CPF.Length != 11) {
                        Console.WriteLine("CPF Invalido");
                        this.LerCPF();
                    }
                }
    
                public void Gravar(string arquivo) {
                    using (var file = File.CreateText(arquivo)) {
                        file.WriteLine(this.ToString());
                        file.Flush();
                        file.Close();
                    }
                }
    
                // Converte a classe em uma string no formato cvs
                public override string ToString() {
                    return String.Format("{0:00000};{1};{2};{3};{4};{5};{6};{7};{8}",
                        this.Codigo,
                        this.Nome,
                        this.CPF,
                        this.Endereco,
                        this.Bairro,
                        this.Cidade,
                        this.Estado,
                        this.CEP,
                        this.Fone
                    );
                }
            }
    
            static void Main(string[] args) {
                Dados dados = new Dados();
                while (dados.Ler()) {
                    dados.Gravar(@"C:\Teste.txt");
                }
            }
        }
    
    }
    

    What would Brian Boitano do ?
    quinta-feira, 26 de novembro de 2009 21:55
    Moderador
  • Talves pareça meio complicado... mas da uma olhada nisso aqui...

    qq coisa a gente vai explicando aos poucos


    using
     System;
    using
     System.IO;
    
    namespace
     ConsoleApplication1 {
        class
     Program {
            class
     Dados {
                public
     int
     Codigo { get
    ; set
    ; }
                public
     string
     Nome { get
    ; set
    ; }
                public
     string
     CPF { get
    ; set
    ; }
                public
     string
     Endereco { get
    ; set
    ; }
                public
     string
     Bairro { get
    ; set
    ; }
                public
     string
     Cidade { get
    ; set
    ; }
                public
     string
     Estado { get
    ; set
    ; }
                public
     string
     CEP { get
    ; set
    ; }
                public
     string
     Fone { get
    ; set
    ; }
    
                public
     bool
     Ler() {
                    this
    .LerCodigo();
                    if
     (this
    .Codigo == 99999) return
     false
    ;
    
                    this
    .LerNome();
                    this
    .LerCPF();
    
                    // Continua assim com todos os campos
    
                    return
     true
    ;
                }
                private
     void
     LerCodigo() {
                    Console.Write("Codigo: "
    );
                    string
     codigo = Console.ReadLine();
    
                    // Verifica se o codigo digitado eh um numero
    
                    int
     int_codigo;
                    if
     (int
    .TryParse(codigo, out
     int_codigo)) {
                        this
    .Codigo = int_codigo;
                    } else
     {
                        Console.WriteLine("O Codigo nao é um numero"
    );
                        this
    .LerCodigo();
                    }
                }
                private
     void
     LerNome() {
                    Console.Write("Nome: "
    );
                    this
    .Nome = Console.ReadLine();
                }
                private
     void
     LerCPF() {
                    Console.Write("CPF: "
    );
                    this
    .CPF = Console.ReadLine();
    
                    if
     (this
    .CPF.Length != 11) {
                        Console.WriteLine("CPF Invalido"
    );
                        this
    .LerCPF();
                    }
                }
    
                public
     void
     Gravar(string
     arquivo) {
                    using
     (var
     file = File.CreateText(arquivo)) {
                        file.WriteLine(this
    .ToString());
                        file.Flush();
                        file.Close();
                    }
                }
    
                // Converte a classe em uma string no formato cvs
    
                public
     override
     string
     ToString() {
                    return
     String.Format("{0:00000};{1};{2};{3};{4};{5};{6};{7};{8}"
    ,
                        this
    .Codigo,
                        this
    .Nome,
                        this
    .CPF,
                        this
    .Endereco,
                        this
    .Bairro,
                        this
    .Cidade,
                        this
    .Estado,
                        this
    .CEP,
                        this
    .Fone
                    );
                }
            }
    
            static
     void
     Main(string
    [] args) {
                Dados dados = new
     Dados();
                while
     (dados.Ler()) {
                    dados.Gravar(@"C:\Teste.txt"
    );
                }
            }
        }
    
    }
    
    

    What would Brian Boitano do ?

    Olá Rui Santos !!! fico grato pela ajuda, se for possivel dar uma explicado no código só pra eu assimilar um pouco melho, te agradeço.
    no inico na declaração qual a função do { get; set; }, se poder explicar mas o código.
    desculpa pela ignorância, mas é que meu interesse é aprender mesmo.
    quinta-feira, 26 de novembro de 2009 22:58
  • também fiquei curioso pra saber q faculdade vcs fazem, estranho colocarem c# como 1ª linguagem...

    Ele é apenas um "atalho" para o seguinte código:

    private string dNome;//o nome varia
    public string Nome(){
       get{
             return dNome;
            }
       set{
            dNome=value;
            }
    }

    Ele cria uma propriedade simples com essa linha. Ele é útil caso vc queira apenas alterar a prioridade do get/set ou liberar apenas um dos dois. NO CÓDIGO ACIMA ele equivale a

    public string Nome;

    Para ver por trás desses "atalhos", baixe o ReGate .net Reflector e dê uma lida na wikipedia do c# 3.0/2.0

    Voltando ao assunto do começo, .net poderia ser deixado para o meio, já que ele tem muito mais coisas interessantes como reflection,linq,asp.net,xna, etc q com apenas um pouquinho de conhecimento iria empolgar os calouros.

    Att ...
    quinta-feira, 26 de novembro de 2009 23:18
  • também fiquei curioso pra saber q faculdade vcs fazem, estranho colocarem c# como 1ª linguagem...

    Ele é apenas um "atalho" para o seguinte código:

    private string dNome;//o nome varia
    public string Nome(){
       get{
             return dNome;
            }
       set{
            dNome=value;
            }
    }

    Ele cria uma propriedade simples com essa linha. Ele é útil caso vc queira apenas alterar a prioridade do get/set ou liberar apenas um dos dois. NO CÓDIGO ACIMA ele equivale a

    public string Nome;

    Para ver por trás desses "atalhos", baixe o ReGate .net Reflector e dê uma lida na wikipedia do c# 3.0/2.0

    Voltando ao assunto do começo, .net poderia ser deixado para o meio, já que ele tem muito mais coisas interessantes como reflection,linq,asp.net,xna, etc q com apenas um pouquinho de conhecimento iria empolgar os calouros.

    Att ...

    Afinal isso de colocarem o C# como 1ª linguagem é bom ou ruim?

    Tecnologia em Analise e Desenvolvimento de Sistemas. UNOPAR
    quinta-feira, 26 de novembro de 2009 23:48
  • Claro, é bom sim. Mas como c# tem alguns charmes, seria legal deixar ele para programadores com mais conhecimento para explorar todo o potencial da linguagem, já que é relativamente fácil fazer coisas bem legais com c#, mas isso é a minha opinião.


    Mas voltando ao assunto do post, achei um link na wikipedia mostrando um pouco do c#:
    http://en.wikipedia.org/wiki/C_Sharp_3.0
    http://en.wikipedia.org/wiki/C_Sharp_2.0

    Att ...
    sexta-feira, 27 de novembro de 2009 00:02
  • Valeu pela ajuda...

    Obrigado.
    • Sugerido como Resposta DiegoMarcosSilva sexta-feira, 9 de novembro de 2012 13:55
    sexta-feira, 27 de novembro de 2009 00:22
  • Olá Ruy

    Não tinha pensado em usar recursividade para fazer a validação do CPF. Eu fazia uma coisa parecida em Pascal em "mil novecentos e bolnhas", mas realmente tinha esquecido que dava pra fazer isso em C# tambem!

    Quanto a galera da UNOPAR, é a primeira vez que eu vejo uma faculdade usar uma linguagem realmente comercial como primeira linguagem. Boa escolha e parabens ao professor que a escolheu, mas se fosse eu, partiria já para programação com Win Forms e orientação a objeto (é mais simples do que parece)


    Quanto ao codigo abaixo, vou imprimir e mandar emuldurar! heheh

     private
     void
     LerCPF() {
    Console.Write("CPF: " );
    this .CPF = Console.ReadLine();

    if (this .CPF.Length != 11) {
    Console.WriteLine("CPF Invalido" );
    this .LerCPF();
    }
    }

    att
    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    SOGI INFORMATIQUE LTÉE (http://www.sogi.com)
    sexta-feira, 27 de novembro de 2009 00:36
    Moderador
  • oi... eu dei uma saida...

    foi mal pelo get; set;.... eu juro q tomei mo cuidado em por

    int int_codigo; ao inves de var int_codigo para nao confundir muito... mas tem certas coisas que vc acaba viciando em usar que é dificil largar o osso depois :P

    Se eu nao me engano o IBTA tmb é primeira linguangem o C#.... na minha faculdade tmb foi pascal.... mas isso pq no 3 e 4 ano o foco era em Delphi.... uma vez que hoje em dia o foco vai ser o C# mesmo... nem faz sentido começar com outra....

    Ah Wiliam... eu sou um recursivo compulsivo mesmo.... ja usei recursividade em  Stored Procedure, arquivo em lote.... ate criei um sistema de sockets asyncronos uma vez que fazia uma socket se auto sustentar recursivamente.... um troço meio doido.... kkkkk


    What would Brian Boitano do ?
    sexta-feira, 27 de novembro de 2009 00:46
    Moderador
  • Basicamente o codigo acima é (vamo por em forma de algoritmo)

    Cria uma classe para manipulaçao dos dados

    Criar uma metodo para a leitura e validação de cada uma das propriedades da classe (os LerXXXXX da vida)

    Criar um metodo (no caso eu sobrescrevi o metodo ToString mesmo) para formatar a saida de dados... isso é converter a classe em uma string no formato que lhe agradar mais ....

    Criar um metodo para a gravação da classe num arquivo

    Depois criei um metodo que dispara todas as leituras.... ja aproveitei para ver se o Codigo = 99999 entao ja retorna falso para abortar a gravação e talz...

    no final é so instanciar a classe... chamar o metodo de leitura... se retornar True, grava a classe num arquivo e cadastra outra linha... falso sai do programa e nao grava...


    Agora a uns detalhes...

    " return String.Format("{0:00000};"
    usei o stringFormat... pq tenho propriedades que nao sao string.... entao para nao ter o trabalho de ficar usando o Convert.ToString... vc pode usar o StringFormat que aceita qq objeto como paramentro... e ainda pode formatar a saida dele... nesse exemplo se codigo = 1.... vai ser gravado 00001 no arquivo...

    outro detalhe ta na conversao de uma string para um outro tipo... no caso int
    // Verifica se o codigo digitado eh um numero
                    int int_codigo;
                    if (int.TryParse(codigo, out int_codigo)) {
                        this.Codigo = int_codigo;
                    } else {
                        Console.WriteLine("O Codigo nao é um numero");
                        this.LerCodigo();
                    }

    o metodo TryParse existe na maioria dos tipos simples (int, short, DateTime, double, bool) é a maneira mais segura de fazer uma conversao de dados... da uma pesquisada...

    e por fim o lance da recursividade mesmo...
    private void LerCPF() {
          Console.Write("CPF: ");
           this.CPF = Console.ReadLine();

           if (this.CPF.Length != 11) {
                 Console.WriteLine("CPF Invalido");
                 this.LerCPF(); // -> Se o CPF é invalido pede novamente o CPF ate ele digitar um CPF Valido
           }
     }

    no exemplo tem o problema de o usuario querer cancelar a operação no meio... se ele nao por um dado valido nao vai sair da funcao... (tem que sempre tomar cuidado com isso na recusrsividade... gerar um loop infinito eh facinho....

    pode ser melhorado assim
    private bool LerCPF() {
          Console.Write("CPF: ");
          this.CPF = Console.ReadLine();

           if (String.IsNullOrEmpty(this.CPF)) return false; // Informando que o usuario nao quer mais escrever o CPF

           if (this.CPF.Length != 11) {
                 Console.WriteLine("CPF Invalido");
                 return this.LerCPF(); // -> Retorna o resultado do metodo recursivamente
           } else {
                 return true; // CPF Digitado corretamente...
           }
     }

    isso vai ter uma alteração no meu metodo de leitura principal tambem... o certo é fazer a verifica de String em branco para todas propriedades...
    public bool Ler() {
         if (!this.LerCodigo()) return false; // Se não leu o codigo retorna falso
         if (this.Codigo == 99999) return false; // Se codigo é 99999 nao ah necessidade de ler as outras propriedade....
         if (!this.LerNome()) return false // Se nao leu o Nome retorna false
         // O mesmo para cada uma das propriedades
         return true; // Avisa que ja leu e validou todas as propriedades;
    }

    isso muda um pouco a logica do metodo main...
    static void Main(string[] args) {              
                Dados dados = new Dados(); // Cria a intancia da classe de controle de dados
                bool Executando = true; // Vamo criar uma variavel para manter a execucao;
                while (Executanto) {
                    if (dados.Ler()) { // Se leu e validou todas as propriedades da classe                 
                          dados.Gravar(@"C:\Teste.txt"); // Grava os dados no arquivo
                    } else { // Se nao leu todas as propriedades
                          Executando = (dados.Codigo != 99999); Continua execuntando o cadastro se Codigo <> de 99999
                    }
                }
            }


    por ai vai... qq coisa q faltou avisa ai


    What would Brian Boitano do ?
    • Marcado como Resposta ALCNET sexta-feira, 27 de novembro de 2009 02:49
    sexta-feira, 27 de novembro de 2009 01:09
    Moderador
  • Demais

    valeu pela aula, funcionou legal, o melhor peguei muita coisa nova.

    Obrigado pela disponibilidade de passar um pouco do seu conhecimento.
    sexta-feira, 27 de novembro de 2009 02:48
  • Boa noite!

    Também preciso fazer o mesmo trabalho e não estou conseguindo, o prazo já expirou, mas eu quero consegui fazer, as validações do "código" não está funcionando pois está saíndo no arquivo .txt só o número 99999 e não todos os número do loop, parece estranho, mas pela leitura que fiz é isso que o professor quer e eu não consigo validar nem o código, o Estado (2 caracteres) e CEP, agradeço caso possam me ajudar.

    Obs: Sei que é errado mais a validação do CPF eu peguei na net eu entendi o código, mas não consegui validar CEP e Estado

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

    namespace Portfólio
    {
     
        class Program
        {
          
            [STAThread]
            static void Main(string[] args)
           {
              
                try
                {
                  

                    StreamWriter valor = new StreamWriter("E:codigo.txt", true, Encoding.ASCII);

                    int codigo;
                    codigo = 1;
                  
                   

                    while (codigo < 99999)
                    {
                        Console.WriteLine(codigo);
                        codigo++;
                    }

                    {
                        valor.WriteLine(codigo);
                    }


                    valor.Close();
                }
                catch (Exception e)
                {
                    Console.WriteLine("Exception: " + e.Message);
                }
                finally
                {
                    Console.WriteLine("Foi criado o arquivo Código");
                    Console.ReadLine();



                    string cpf;
                    int soma1 = 0;
                    int soma2 = 0;
                    int dig1 = 0;
                    int dig2 = 0;
                    int resto1 = 0;
                    int resto2 = 0;

                    Console.Write("Informe o seu CPF : ");
                    cpf = Console.ReadLine();

                    for (int i = 0; i < 9; i++)
                    {
                        soma1 += Convert.ToInt32(cpf.Substring(i, 1)) * (10 - i);
                    }
                    resto1 = soma1 % 11;
                    dig1 = 11 - resto1;
                    if (dig1 > 9) dig1 = 0;

                    for (int j = 0; j < 9; j++)
                    {
                        soma2 += Convert.ToInt32(cpf.Substring(j, 1)) * (11 - j);
                    }
                    soma2 += dig1 * 2;
                    resto2 = soma2 % 11;
                    dig2 = 11 - resto2;

                    if (dig2 > 9) dig2 = 0;

                    if (dig1 + "" + dig2 == cpf.Substring(9, 2))
                    {
                        Console.WriteLine("CPF Válido !");
                    }
                    else
                    {
                        Console.WriteLine("CPF Inválido !");
                    }

                    Console.WriteLine("O CPF Válido é : " + cpf + "-" + dig1 + "" + dig2);
                    Console.Read();

                    Console.WriteLine("Nome Completo: ");
                    Console.ReadLine();

                    Console.WriteLine("Endereço: ");
                    Console.ReadLine();

                    Console.WriteLine("Bairro: ");
                    Console.ReadLine();

                    Console.WriteLine("Cidade: ");
                    Console.ReadLine();
                   
                    Console.WriteLine("Estado: ");
                    Console.ReadLine();

                    Console.WriteLine("CEP: ");
                    Console.ReadLine();

                    Console.WriteLine("Fone: ");
                    Console.ReadLine();

                   
                }
            }
        }
    }
    quarta-feira, 9 de dezembro de 2009 02:45