C# - Programa para locadora de veículos


Hoje apresento um singelo programa feito na linguagem C# usando o Visual Studio 2012 Express for dekstop.

Juntando a prática com a teoria temos neste programa para locadora de veículos um exemplo de como usar os recursos da linguagem C# tais como: classes, coleções, serialização, impressão; bem como o uso dos controles de formulário como picturebox, textbox, label, listview, button.

Neste exemplo específico estamos usando a classe Dictionary.

A classe Dictionary representa uma coleção de chaves e valores. É uma coleção do tipo chave/valor e implementa  a interface IDictionary que possui duas coleções no seu interior uma para guardar a chave e outra para guardar o valor.

A aplicação não utiliza um banco de dados relacional. Os dados são persistidos em arquivos texto através da serialização.

á ouviu falar em serialização ? O que é serializar ? Como podemos fazer isto na plataforma .NET ?

De forma genérica a serialização é uma técnica usada para persistir objetos , ou seja :  gravar objetos em disco , fazer a transmissão remota de objetos via rede , armazenar os objetos em um banco de dados e/ou arquivos (binários , xml, etc.)

Serializar nada mais é do que colocar os valores que o objeto está utilizando juntamente com suas propriedades de uma forma que fique em série (sequencial) . Fazendo isto estamos tornando o objeto Serializable, e, tornando um objeto Serializable, estamos atribuindo essa qualidade a ele, e dando privilégios para que o mesmo possa ser gravado em disco ou enviado por rede.

A serialização é o processo de armazenar um objeto , incluindo todos os atributos públicos e privados para um stream.

Se você faz a serialização naturalmente vai querer fazer o processo inverso - desserialização , que seria restaurar os atributos de um objeto gravado em um stream. (Este stream pode ser um arquivo binário , xml , etc.)

Nota: Tradução de stream - fluxo (no caso de dados) . Melhor deixar stream mesmo.

Por que você iria querer usar a serialização

Primeiro por que nem tudo se pode armazenar em um banco de dados . As vezes a natureza da sua aplicação não exige um banco de dados ou usar um banco de dados pode ficar muito caro para o tamanho dos dados que se quer guardar ou ainda você pode também querer gravar os dados em disco para posterior recuperação. Enfim , se você não quer usar um banco de dados , e quer persistir seus objetos pode fazer isto de diversas maneiras mas o trabalho exigirá mais código , mais trabalho e mais tempo.

As informações da aplicação exemplo são armazenadas em uma pasta criada automaticamente pela aplicação usando o código a seguir:

FileStream stnCarros = null;

BinaryFormatter bfmCarros = new BinaryFormatter();

Directory.CreateDirectory(@"C:\JcmSoft_Carros");

string strNomeArquivo = @"C:\JcmSoft_Carros\Carros.crs";

 

O programa esta criando a pasta JcmSoft_Carros no drive C:\ da máquina local:

 

 

Os arquivos criados e usados para armazenar as informações são:

As informações são serializadas nos arquivos através dos objetos criados conforme mostra o código abaixo:

 

// Cria um carro
Carro veiculo = new Carro();

veiculo.Fabricante = txtFabricante.Text;

veiculo.Modelo = txtModelo.Text;

veiculo.Ano = int.Parse(txtAno.Text);

veiculo.Categoria = cbxCategorias.Text;

veiculo.TemCDPlayer = chkCDPlayer.Checked;

veiculo.TemDVDPlayer = chkDVDPlayer.Checked;

veiculo.EstaDisponivel = chkDisponivel.Checked;

// Chama o método Add da coleção para adicionar o carro

listaCarros.Add(txtTagNumber.Text, veiculo);

// salva a lista

stnCarros = new FileStream(strNomeArquivo, FileMode.Create, FileAccess.Write, FileShare.Write);

 

Quando do registro de pedido de locação, ao informar o número da carteira de motorista (CNH) na caixa de texto, é feita uma busca nos arquivos e a informação é recuperada e exibida nos controles de formulário conforme mostra o código abaixo:

 

Nota: Observe que estamos usando o evento Leave da caixa de texto

 

 private void txtNumeroRegistroCNH_Leave(object sender, EventArgs e)
        {
            Cliente locador = null;
            string strNumeroCNH = txtNumeroRegistroCNH.Text;
            if (strNumeroCNH.Length == 0)
            {
                MessageBox.Show("Informe o número de registro da carteira de habilitação do Cliente.");
                txtNumeroRegistroCNH.Focus();
                return;
            }
            Dictionary<string, Cliente> listaClientes = new Dictionary<string, Cliente>();

            BinaryFormatter bfmClientes = new BinaryFormatter();
            string strNomeArquivo = @"C:\JcmSoft_Carros\Clientes.crc";

            if (File.Exists(strNomeArquivo))
            {
                FileStream stmClientes = new FileStream(strNomeArquivo,
                                                         FileMode.Open,
                                                         FileAccess.Read,
                                                         FileShare.Read);
                try
                {
                   // retorna uma lista de clientes
                    listaClientes =  (Dictionary<string, Cliente>)
                    bfmClientes.Deserialize(stmClientes);

                    if (listaClientes.ContainsKey(strNumeroCNH) == true)
                    {
                        foreach (KeyValuePair<string, Cliente> cli in listaClientes)
                        {
                            if (cli.Key == strNumeroCNH)
                            {
                                locador = cli.Value;
                                txtNomeCliente.Text = locador.Nome;
                                txtEnderecoCliente.Text = locador.Endereco;
                                txtCidadeCliente.Text = locador.Cidade;
                                cboClientesEstados.Text = locador.Estado;
                                txtCepCliente.Text = locador.CodigoPostal;
                            }
                        }
                    }
                    else
                    {
                        txtNomeCliente.Text = "";
                        txtEnderecoCliente.Text = "";
                        txtCidadeCliente.Text = "";
                        cboClientesEstados.Text = "";
                        txtCepCliente.Text = "";
                        MessageBox.Show("Não existe cliente com o registro de " +
                                        " CNH informado no banco de dados");
                        return;
                    }
                }
                finally
                {
                    stmClientes.Close();
                }
            }
        }

 

A seguir vemos os principais formulários do  projeto:

1- O formulário Central apresentando as opções do sistema.  Primeiro devemos cadastrar os veículos, depois os empregados e a seguir os clientes. A opção de locação deve ser usada após esses cadastramentos.

2- O formulário para editar/cadastrar veículos

3- O formulário para cadastrar/editar empregados

4- O formulário para cadastro de clientes

5- O formulário para registrar os pedidos de locações.

Basta informar o número do empregado, o número da CNH do cliente e o número do veículo que os dados serão recuperados e exibidos nos controles de formulário.

A seguir basta definir a data de início e fim da locação. Os dias serão calculados automaticamente.

No botão Taxas é aberto o formulário com as taxas definidas conforme a categoria do veículo locado.

Informando a taxa, basta clicar no botão Calcular para obter os valores.

O botão Salvar persiste as informações da locação realizada no disco rígido. Para recuperar uma locação feita basta informar o número de registro e clicar no botão Abrir.

A seguir o relatório gerado pela aplicação com os dados da locação.

O sistema foi criado com o objetivo do mostrar a utilização das classes, coleções e da serialização usando a linguagem C#.

O programa não tem a pretensão de ser usado para gerenciar as locações de veículos. Você pode melhorar o programa ou se basear nele para criar o seu próprio sistema com mais recursos.

Pegue o projeto completo aqui:   LocadoraCarros.zip

Obs: No Super DVD .NET existem mais de 100 programas como este com o código fonte aberto para estudo.

Veja os Destaques e novidades do SUPER DVD VB (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Veja mais sistemas completos para a plataforma .NET no Super DVD .NET , confira...

Quer aprender C# ??

Chegou o Super DVD C# com exclusivo material de suporte e vídeo aulas com curso básico sobre C#.

Mat 6:25 Por isso vos digo: Não estejais ansiosos quanto à vossa vida, pelo que haveis de comer, ou pelo que haveis de beber; nem, quanto ao vosso corpo, pelo que haveis de vestir. Não é a vida mais do que o alimento, e o corpo mais do que o vestuário?
 

Mat 6:26 Olhai para as aves do céu, que não semeiam, nem ceifam, nem ajuntam em celeiros; e vosso Pai celestial as alimenta. Não valeis vós muito mais do que elas?

Referências:


José Carlos Macoratti