exercicios csharp

64
Prof. Esp. Mauro Cafe 1 1- Criando o Banco de dados, as tabelas e definindo o relacionamento Inicie o Visual Studio e crie um novo projeto, selecionando a seguir na janela New Project o Template Windows Forms Application, e, informando o nome do projeto como Locadora de Filmes. Conforme figura abaixo: Na janela Solution Explorer clique com o botão direito do mouse sobre o nome do projeto e selecione do menu suspenso a opção Add -> New Item, e na janela Add New Item , selecione o Template Data e Service-based Database informando o nome de Locadora.mdf; a seguir clique no botão Add.

Upload: gleisnersilva

Post on 06-Nov-2015

136 views

Category:

Documents


2 download

DESCRIPTION

Exercicios Csharp

TRANSCRIPT

  • Prof. Esp. Mauro Cafe

    1

    1- Criando o Banco de dados, as tabelas e definindo o

    relacionamento

    Inicie o Visual Studio e crie um novo projeto, selecionando a seguir na janela New

    Project o Template Windows Forms Application, e, informando o nome do projeto

    como Locadora de Filmes. Conforme figura abaixo:

    Na janela Solution Explorer clique com o boto direito do mouse sobre o nome do

    projeto e selecione do menu suspenso a opo Add -> New Item, e na janela Add New

    Item , selecione o Template Data e Service-based Database informando o nome de

    Locadora.mdf; a seguir clique no boto Add.

  • Prof. Esp. Mauro Cafe

    2

    Na janela Data Source Configuration Wizard, deixe a opo Dataset selecionado e

    clique no boto Next e depois em Finish.

    Voc ver, conforme figura abaixo, o banco de dados Locadora.mdf criado e

    incorporado ao seu projeto.

    Vamos criar as tabelas do nosso projeto.

    D um duplo clique no banco Locadora.mdf que est na janela Solution Explorer

    Na janela Server Explorer d um clique com o boto direito do mouse sobre o item

    Tables, e depois selecione a opo Add New Table.

  • Prof. Esp. Mauro Cafe

    3

    Digite o nome e os tipos de dados de cada campo e a seguir salve a tabela com o nome

    de Cliente, conforme figura abaixo:

    Note que o campo CodigoCliente a chave primria da tabela . Para definir a chave

    primria para cada tabela clique com o boto direito do mouse sobre o campo que

    deseja como chave primria e selecione a opo - Set As Primary Key.

    Vamos definir o campo CodigoCliente tambm como Identity. Para isto, posicione no

    campo CodigoCliente e na janela Column Properties procure pela propriedade

    Identity Specification e defina-o como Yes ; (Is Identity) como Yes e aceite os

    valores padro para Identity Increment e Identity Seed, conforme figura abaixo:

    Repita o procedimento adotado acima e crie a tabela Filmes conforme figura abaixo:

    Defina o campo CodigoFilme como chave primria e do tipo Identity.

  • Prof. Esp. Mauro Cafe

    4

    Repita a operao para a tabela Movimento, conforme abaixo:

    Defina o campo CodigoLocacao como chave primria e do tipo Identity.

    Aps terminar voc dever ter 3 tabelas conforme abaixo:

    1. Cliente - Contm os dados dos clientes da locadora 2. Filmes - Contm os dados sobre os filmes oferecidos pela locadora 3. Movimento - Contm os dados sobre a locao dos filmes pelos clientes

    Agora vamos definir o relacionamento entre as tabelas.

    Clique com o boto direito no item Database Diagrams da janela Server Explorer e

    depois escolha a opo Add New Diagram.

  • Prof. Esp. Mauro Cafe

    5

    Se surgir a mensagem a seguir clique no boto sim

    Na janela Add Table, selecione cada uma das tabelas e clique no boto Add.

    Vamos definir os seguintes relacionamentos entre as tabelas:

    1- Cliente (CodigoCliente) --> Movimento (CodigoCliente) - Relacionamento do

    tipo UM-PARA-MUITOS.

    Ao fazer teremos um relacionamento entre a tabela Cliente e a tabela Movimento entre

    as chaves primrias CodigoCliente onde para cada Cliente da tabela Cliente poderemos

    ter infinitos Clientes na tabela Movimento.

    Para fazer o relacionamento faa:

    Posicione o ponteiro do mouse sobre o campo CodigoCliente da tabela Cliente, segure o boto e arraste at a o campo CodigoCliente da tabela Movimento e

    solte o boto

    Surgir a tela Tables and Columns. Clique no boto Ok.

  • Prof. Esp. Mauro Cafe

    6

    2- Filmes(CodigoFilme) --> Movimento (CodigoFilme) - Relacionamento do tipo

    UM-PARA-MUITOS

    Ao fazer teremos um relacionamento entre a tabela Filmes e a tabela Movimento entre

    as chaves primrias CodigoFilme onde para cada Filme da tabela Cliente eu posso ter

    infinitos Filmes na tabela Movimento.

    Para fazer o relacionamento faa:

    Posicione o ponteiro do mouse sobre o campo CodigoFilme da tabela Filmes, segure o boto e arraste at a o campo CodigoFilme da tabela Movimento e

    solte o boto

    Surgir a tela Tables and Columns. Clique no boto Ok.

    Salve o Diagrama como DiagramaLocadora

    Pronto! J temos o banco de dados criado e as tabelas Cliente, Filmes e Movimento

    tambm e com campos relacionados.

    2- Criao de uma conexo com a fonte de dados e definio dos

    DataSets

    Vamos agora criar a conexo e as fonte de dados do tipo DataSet usando o assistente.

    1- Clique no menu Data e selecione a opo - Add New DataSource; a. Na janela Data Source Configuration Wizard, selecione a opo

    DataBase e clique no boto Next.

    b. Em Database model escolha a opo Dataset e clique no boto Next.

  • Prof. Esp. Mauro Cafe

    7

    Fontes de dados

    O Visual Studio apresenta o conceito de fontes de dados em um projeto. Uma fonte de dados representa

    os dados disponveis para um aplicativo. Esses dados no esto necessariamente em um banco de

    dados, o Data Source Configuration Wizard (Assistente para Configurao de Fonte de Dados) que

    voc usa para definir a fonte de dados permite obter os dados de trs fontes diferentes:

    1. Banco de dados pode ser um banco de dados baseado no servidor, como o SQL Server ou o Oracle, ou um banco de dados baseado em arquivo, como o Access ou o SQL Server Express. O

    Visual Studio gera automaticamente os DataSets de tipos, bem como outras classes, e os adiciona ao

    projeto. 2. Objeto qualquer objeto com propriedades pblicas pode ser a fonte de dados. No necessrio

    implementar nenhuma interface especial. 3. Servio da Web criar uma fonte de dados em um servio da Web cria objetos correspondentes ao

    tipo de dados retornado por esse servio.

    A finalidade da fonte de dados dupla. Em primeiro lugar, ela torna mais fcil especificar, criar e gerar

    classes com rigidez de tipos que representam os dados do aplicativo. Em segundo lugar, fornece um

    mecanismo flexvel, porm uniforme, de criao rpida de interfaces de usurio WindowsForm e

    WebForms avanadas e altamente funcionais.

    No entanto, importante salientar estes dois pontos:

    Aps a criao de uma fonte de dados, voc a utiliza da mesma maneira, independentemente da origem dos dados. Ou seja, assim como voc pode facilmente (e graficamente) ligar uma fonte de

    dados baseada em um Database a uma grade ou a um conjunto de controles, tambm pode fazer isso

    com os dados cuja origem um servio da Web ou seus objetos comerciais personalizados. As fontes de dados so definidas da mesma maneira, independentemente de serem usadas em um aplicativo WindowsForms ou WebForms. Os diferentes provedores de dados tambm so abstratos;

    assim, se o seu acesso aos dados estiver exposto somente pelo uso de DataSets e TableAdapters,

    para alterar o banco de dados real, bastar alterar a sequncia de caracteres de conexo e gerar as

    classes novamente.

    fonte MSDN

    2- Na tela seguinte, defina a conexo com o banco de dados Locadora.mdf. Lembrando

    que podemos exibir a string de conexo. Clique no boto Next.

  • Prof. Esp. Mauro Cafe

    8

    3 - No prximo passo vamos criar uma fonte de dados do tipo DataSet para cada uma

    das tabelas.

    Poderamos criar um DataSet com mais de uma tabela se desejamos apresentar

    um relacionamento do tipo mestre-detalhes.

    Selecione ento a tabela Clientes, informe o nome ClienteDS e clique no boto

    Finish.

    Repita o procedimento acima (item 1 ao 3) e crie as fontes de dados FilmesDS e

    MovimentoDS para as tabelas Filmes e Movimento.

    Se tudo deu certo voc dever ter 3 fontes de dados do tipo DataSet em sua janela,

    conforme figura abaixo:

    Podemos navegar pelos objetos DataSet criados exibindo os campos de cada um deles e

    tambm editar o DataSet. Para isto clique com o boto direito do mouse sobre o

    DataSet ClienteDS que se encontra na janela Data Sources e selecione a opo - Edit

    DataSet with Designer.

  • Prof. Esp. Mauro Cafe

    9

    Ser exibido a representao do objeto ClienteDS, conforme figura acima, onde temos a

    tabela com seus respectivos campos e o objeto TableAdapter que permite

    alimentar, atualizar e aplicar filtros a fonte de dados.

    E chegamos ao final da primeira parte onde temos a base de dados e as entidades

    relacionadas a esta base de dados que simbolizam os nossos objetos de negcios os

    quais so representados pelas tabelas Cliente, Filmes e Movimento; temos tambm o

    adaptador que permite sincronizar essas entidades em memria com a base de dados.

    Conceito:

    O conceito de um TableAdapter.

    Voc usa o TableAdapter para se conectar a um banco de dados e executar consultas (ou

    procedimentos armazenados) nesse banco de dados, bem como para preencher com dados um

    DataTable associado. Cada par DataTable-TableAdapter indicado simplesmente como um

    TableAdapter

    O TableAdapter essencialmente um invlucro ao redor de um DataAdapter padro, que oferece

    vrios benefcios:

    A mesma classe TableAdapter pode ser usada em mais de um formulrio ou componente para que qualquer alterao em consultas/comandos seja automaticamente refletida em todas as instncias.

    Essa situao diferente da existente, na qual cada componente que acessa o banco de dados deve

    ter seu prprio DataAdapter configurado individualmente. Dessa forma, fica muito mais fcil

    garantir a sincronizao de DataTables e DataAdapters. Em vez de usar vrios DataAdapters (ou cdigo de comutao artesanal) para ter vrias consultas/comandos para um nico DataTable, um TableAdapter permite definir facilmente vrios

    comandos para um DataTable especfico. Os comandos de preenchimento tm nomes legveis ("amigveis") e o TableAdapter inclui um cdigo para preencher automaticamente as informaes de tipo e valor de todos os parmetros

    desses mtodos de comando. Voc no precisa mais se preocupar em passar tipos de dados

    especficos do provedor, como SqlInt.

    Os principais formulrios que iremos criar para a aplicao so:

    1. Principal.cs - Formulrio MDI que apresenta a aplicao com um menu de opes

    2. Clientes.cs - Formulrio usado para cadastrar os clientes

  • Prof. Esp. Mauro Cafe

    10

    3. Movimento.cs - Formulrio que gerencia as informaes sobre locaes de filmes

    4. Devolucao.cs - Formulrio que gerencia as informaes sobre a devoluo de filmes alugados.

    3 - Criando os formulrios da aplicao

    O formulrio Principal

    Vamos usar o formulrio padro form1.cs para criar o formulrio principal da nossa

    aplicao.

    Vamos alterar o nome do arquivo para Principal.cs (clique com o boto direito do

    mouse sobre o nome do arquivo e selecione Rename) e o nome do formulrio tambm

    para Principal (Name=Principal) na janela de propriedades.

    Este formulrio ser o formulrio que ir conter os demais formulrios do projeto, e,

    portanto dever ser um formulrio MDI, desta forma altere o valor da propriedade

    IsMdiContainer para True. Altere tambm as propriedades conforme abaixo na janela

    de propriedades deste formulrio:

    Propriedade Valor StartPosition CenterScreen

    Text Fac - Locadora (ou algo que mais lhe agrade)

    Vamos incluir um menu no formulrio de forma a poder gerenciar as opes referente

    as funcionalidades implementadas.

    Inclua, a partir da ToolBox um controle MenuStrip na Seo Menus & ToolBars, no

    formulrio Principal.

    Vamos aceitar o nome padro para o controle dado pelo

    Visual Studio - MenuStrip1 - mas recomendvel dar um

    nome sugestivo a cada controle que voc usar no seu

    projeto para facilitar o entendimento e a manuteno.

  • Prof. Esp. Mauro Cafe

    11

    A seguir Digite diretamente no controle os textos conforme mostrado na figura abaixo.

    Perceba que inclumos cones no menu. Fazemos isto selecionando o texto digitado e na

    janela de propriedades clicando na propriedade Image do item. Na janela Select

    Resource podemos ento selecionar a imagem como um recurso local ou como um

    recurso do projeto clicando a seguir no boto Import... e selecionando a imagem:

    A seguir vamos incluir um controle Panel na parte inferior do nosso formulrio

    diretamente da ToolBox a partir da seo Containers.

  • Prof. Esp. Mauro Cafe

    12

    Este controle do tipo Container, pois pode conter outros

    controles. Altere as seguintes propriedades do controle Panel na

    janela de propriedades:

    - Aceite o nome padro - Name = Panel1

    - BackColor = White

    A propriedade Anchor deve ser definida conforme figura abaixo,

    pois desta forma ao redimensionar o formulrio o controle ser

    redimensionado de forma adequada.

    Inclua um controle PictureBox no interior do controle Panel que voc acabou de inserir

    no formulrio. Posicione o controle no centro do controle Panel.

  • Prof. Esp. Mauro Cafe

    13

    E inclua uma imagem clicando na propriedade Image e selecionando uma imagem via

    opo Import da janela Select Resource, conforme mostrado na figura abaixo.

    Defina as seguintes propriedades do controle

    PictureBox na janela de Propriedades:

    Name = PictureBox1 (padro) Image = A imagem selecionada SizeMode = StretchImage

    A propriedade Anchor deve ser definida

    conforme figura abaixo, pois desta forma ao

    redimensionar o formulrio o controle ser

    redimensionado de forma adequada.

    4 - Criando um modelo para formulrios

    Os formulrios Clientes.cs , Movimento.cs e Devolucao.cs so formulrios que tero

    praticamente um mesmo comportamento e identidade visual por este motivo seria

    interessante que fossem criados a partir de um modelo (template) de formulrio. isto

    que iremos fazer, primeiro vamos criar um formulrio com os componentes comuns aos

    formulrios que desejamos criar para em seguida criar os formulrios a partir deste

    modelo. Chamamos este comportamento de herana visual.

    - Criando o formulrio modelo

    Inclua no novo formulrio Windows no projeto, clicando com o boto direito do

    mouse sobre o nome do projeto e selecionando a opo Add->New Item.

    Selecione a template Windows Forms e depois o item Windows Forms.

  • Prof. Esp. Mauro Cafe

    14

    Informe o nome FormularioModelo.cs , conforme figura abaixo.

    A seguir vamos incluir os componentes que achamos que sero comuns aos formulrios

    que sero criados a partir deste modelo. Para no complicar vou definir o formulrio

    modelo contendo apenas um controle Label e um controle GroupBox conforme figura

    abaixo:

    Altere as seguintes propriedades do formulrio modelo na

    janela de propriedades:

    Name = FormularioModelo BackColor = 255; 192; 128 ControlBox = True Font = Arial; 12pt; style=Bold KeyPreview = True Text = FormularioModelo

    Altere as seguintes propriedades do controle Label1 :

    Anchor = Top, Left, Right BackColor = 192; 64; 0 Font = Arial; 18pt; style=Bold ForeColor = White Modifiers = Protected AutoSize = False Size = 480; 29

    Defina a propriedade Anchor do controle GroupBox1

    como sendo igual a : Top, Bottom, Left, Right. Mude

    tambm a propriedade Modifiers para Protected

  • Prof. Esp. Mauro Cafe

    15

    Criando os formulrios a partir do Modelo

    Vou mostrar agora como voc pode criar formulrios a partir do formulrio modelo

    acima. Vou fazer isto uma nica vez para o formulrio Clientes.cs de forma que para os

    demais bastar repetir o processo.

    Inclua um novo formulrio Windows com o nome de Clientes.cs.

    O formulrio Clientes.cs, por padro, herda sua identidade visual da classe

    Windows.Forms.Form conforme mostrado na figura 1 abaixo. Para que o formulrio

    passe a herdar a identidade visual do nosso formulrio modelo altere a linha de cdigo

    public partial class Cliente: Form para public partial class Cliente:

    FormularioModelo conforme figura 2 abaixo:

    Figura 1 - Herdando de Windows.Forms.Form Figura 2 - Herdando do formulrio - FormularioModelo

    Nota: Aperte a tecla F7 para ter acesso ao cdigo do formulrio.

    Agora compile o projeto na opo Build do menu, opo Build Locadora Filmes. A

    seguir abra o formulrio Clientes.cs e altere a propriedade Text do controle Label1

    para - Cadastro de Clientes, conforme abaixo:

  • Prof. Esp. Mauro Cafe

    16

    Repita o procedimento acima para os formulrio Movimento.cs e Devolucao.cs de

    forma a obter o resultado abaixo para os respectivos formulrios:

    Vamos retornar ao formulrio MDI Principal.cs e vamos incluir as chamadas para cada

    formulrio que criamos a partir da seleo do menu do formulrio. Para isto clique na

    opo do menu desejada e inclua o cdigo para exibir cada formulrio conforme abaixo:

    private void movimentoToolStripMenuItem_Click(object sender, EventArgs e) { Movimento objMovimento = new Movimento(); objMovimento.Show(); } private void devoluoToolStripMenuItem_Click(object sender, EventArgs e) { Devolucao objDevolucao = new Devolucao(); objDevolucao.Show(); } private void clientesToolStripMenuItem_Click(object sender, EventArgs e) { Cliente objCliente = new Cliente(); objCliente.Show(); }

  • Prof. Esp. Mauro Cafe

    17

    5 - Incluindo alguns modelos prontos

    O Visual Studio vem com alguns modelos prontos de formulrios, basta, pegar e usar.

    Vou usa o seguinte modelo de formulrio j disponvel.

    Selecione About Box Nome: Sobre.cs;

    Add.

    O formulrio sobre busca informaes definido na configurao do projeto. Para alterar

    as informaes do projeto faa:

    Clique com o boto direito sobre o nome do projeto Locadora de Vdeo (Na janela Solution Explorer) e escolha a opo Properties.

    Na aba Application clique no boto Assembly Information

  • Prof. Esp. Mauro Cafe

    18

    Na tela Assembly Information posicione em Description e digite: Este produto est protegido pelas leis de CopyRight Locais e Internacionais e no pode ser

    distribudo sob qualquer forma sob pena da sanes da lei.

    Em Company digite: Anhanguera Campinas Unidade 4

    Em Product digite: Sistema de Locadora de Vdeo

    Em Copyright digite: Copyright FAC 2014

    Em Assembly version digite: 1.0.0.0

    Clique no boto Ok.

    Volte para a tela Principal.cs

    D um duplo clique no item Sobre da barra de menu.

    Crie um objeto e instancie ao formulrio Sobre, conforme mostra abaixo:

    private void sobreToolStripMenuItem_Click(object sender, EventArgs e) { Sobre objSobre = new Sobre(); objSobre.Show(); }

  • Prof. Esp. Mauro Cafe

    19

    Clique no boto Salvar e depois rode o projeto para testar.

    Volte para o form Sobre.cs:

    D um duplo clique sobre o boto Ok e faa:

    private void okButton_Click(object sender, EventArgs e) { this.Close(); }

    Clique no boto Salvar e depois rode o projeto para testar.

    6 - Tela de Splash

    Criei uma pequena imagem para inserirmos na janela splash. Caso voc queira criar a

    sua prpria imagem, no se esquea de salv-la como extenso de imagem PNG (Na

    pasta do seu projeto).

    Inclua um novo formulrio Windows com o nome de Splash.cs.

    Na propriedade do form faa:

    Backcolor: 255; 128; 0

    ControlBox: False

    FormBorderStyle: None

    Size: 608; 265

    StartPosition: CenterScreen

    Ficar assim:

    No form Splash.cs insira um Panel no form

    Na propriedade do Panel faa:

    BorderStyle marque a opo FixedSingle.

    No prprio Panel, na opo Panel Tasks, clique em Dock In Parent Container para o Panel ocupar todo o espao do form.

  • Prof. Esp. Mauro Cafe

    20

    Arraste o componente PictureBox para dentro do form e, tambm, uma ProgressBar.

    Na PictureBox Tasks escolha a imagem, que est dentro da sua solution.

    Na propriedade SizeMode da PictureBox selecione a opo StretchImage

    Ajuste a imagem de acordo com seu form.

    Clique ProgressBar, posicione no final do form e aumente a sua largura, como mostra

    a figura a seguir:

    Agora, adicione um Timer no seu form.

    Selecione o Timer e na propriedade chamada Enabled marco a opo True para

    habilitar o mesmo.

    Clique duas vezes no componente Timer e a janela de cdigos ser aberta. Adicione o

    seguinte cdigo no form:

    private void timer1_Tick(object sender, EventArgs e) { if (progressBar1.Value < 100) { progressBar1.Value = progressBar1.Value + 2; } else { timer1.Stop(); } }

  • Prof. Esp. Mauro Cafe

    21

    Retorne para o form Principal

    Aperte a tecla F7 para surgir tela de cdigo

    Inclua using System.Threading como mostra a figura abaixo:

    No mtodo public Principal() altere para:

    public Principal() { Thread t = new Thread(new ThreadStart(SplashScreen)); t.Start(); Thread.Sleep(10000); InitializeComponent(); t.Abort(); }

    Abaixo do mtodo public Principal() acrescente:

    public void SplashScreen() { Application.Run(new Splash()); }

    Salve o projeto e teste para ver o resultado.

  • Prof. Esp. Mauro Cafe

    22

    7 - Tela de Acesso (Login)

    Vamos criar uma tela de acesso, para que possamos cadastrar os usurios que podero

    acessar o sistema. Para isso crie a tabela Usuarios com os seguintes campos:

    nomeUsuario e SenhaId como mostra a imagem a seguir:

    Crie um form Acesso.cs .

    No form Acesso.cs inclua trs Labels, trs TextBoxs e dois Buttons. E deixe como

    mostra a imagem a seguir:

    D um clique no label1 e mude a propriedade Text para Nome Usurio

    D um clique no label2 e mude a propriedade Text para Senha

    D um clique no label3 e mude a propriedade Text para Confirma Senha

    D um clique no button1 e mude a propriedade Text para Registrar e a

    propriedade Name para btnRegistrar

    D um clique no button2 e mude a propriedade Text para Cancelar e a

    propriedade Name para btnCancelar

    Na propriedade BackColor do form coloque: 255; 192; 128

    D um clique no textbox1 e mude a propriedade Name para txtUsuario

    D um clique no textbox2 e mude a propriedade Name para txtSenha e a

    propriedade PasswordChar para *

    D um clique no textbox3 e mude a propriedade Name para txtConfSenha e a

    propriedade PasswordChar para *

  • Prof. Esp. Mauro Cafe

    23

    8. Criar o formulrio de Login

    Crie um form Login.cs .

    No form Login.cs inclua dois Labels, dois TextBoxs, um CheckBox, dois Buttons e

    um PictureBox. E deixe como mostra a imagem a seguir:

    D um clique no label1 e mude a propriedade Text para Nome Usurio

    D um clique no label2 e mude a propriedade Text para Senha

    D um clique no button1 e mude a propriedade Text para OK e a propriedade

    Name para btnOk

    D um clique no button2 e mude a propriedade Text para Cancelar e a

    propriedade Name para btnCancelar

    Na propriedade BackColor do form coloque: 255; 192; 128

    D um clique no textbox1 e mude a propriedade Name para txtUsuario

    D um clique no textbox2 e mude a propriedade Name para txtSenha e a

    propriedade PasswordChar para *

    D um clique no checkBox1 e mude a propriedade Name para chkRecordar e a

    propriedade Text para Recordar Usurio

    No PictureBox altere a propriedade Name para pbLogo. No PictureBox Task

    escolha a imagem. Na propriedade Anchor deixe como Top, Bottom e Left. Na

    propriedade SizeMode escolha a opo StretchImage

    No formulrio altere a propriedade StartPosition para CenterScreen

    O cdigo do evento Click do boto OK para este formulrio exibido abaixo:

    Nota: No se esquea de declarar os seguintes using: System.Data.SqlClient e

    System.Data.Sql

  • Prof. Esp. Mauro Cafe

    24

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Data.SqlClient; using System.Data.Sql; namespace Locadora_de_Video { public partial class Login : Form { public Login() { InitializeComponent(); } private void btnOk_Click(object sender, EventArgs e) { String connection = @"Data Source=.\SQLEXPRESS;AttachDbFilename=D:\sistema\Locadora de Video\Locadora de Video\Locadora.mdf;Integrated Security=True;User Instance=True"; SqlConnection cn = new SqlConnection(connection); try { cn.Open(); } catch (SqlException) { MessageBox.Show("No foi possvel se conectar", "Avio", MessageBoxButtons.OK, MessageBoxIcon.Error); } string usuario = txtUsuario.Text; string senha = txtSenha.Text; SqlCommand command = new SqlCommand("Select * from Usuario where NomeUsuario = '" + usuario + "' and SenhaID = '" + senha + "'", cn); SqlDataReader reader = null; reader = command.ExecuteReader(); if (reader.Read()) { this.Hide(); Principal objPrincipal = new Principal(); objPrincipal.Show(); } else { MessageBox.Show("Usurio ou senha invalida!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Error); txtSenha.Text = ""; txtUsuario.Text = ""; txtUsuario.Focus(); } } } }

  • Prof. Esp. Mauro Cafe

    25

    Na janela Solution Explorer d um duplo clique em: Program.cs

    Em Application.Run(new Principal()); mude para Application.Run(new Login());

    Clique no boto salvar e rode o programa para testar.

    Na tabela usuario inclua um login e uma senha, seno no ir funcionar. Lembre-se a

    tabela est vazia.

    Para incluir os dados faa:

    Na janela Solution Explorer d um duplo clique em: Locadora.mdf

    Na janela Server Explorer d um clique com o boto direito sobre a tabela Usuario

    Escolha a opo Show Table Data

    Agora s incluir os dados.

    9. Implementando o formulrio acesso

    O formulrio acesso permite o cadastramento de usurios e senhas na tabela Usuario.

    So armazenados o nome do usurio e a senha.

    Abra o form Acesso.cs com dois cliques

    Acrescente no form o componente (ToolBox) ErrorProvider. Na sua propriedade name

    digite: epErro

    Depois d um duplo clique no boto Registrar

    E acrescente o cdigo a seguir:

    private void btnRegistrar_Click(object sender, EventArgs e) { //Crio uma varivel booleana que ir verificar se os campos esto validados bool camposValidados = false; try { //Instancio a classe de conexo passando como parmetro a string de conexo ao DataBase Locadora de Video SqlConnection objConexao = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=D:\sistema\Locadora de Video\Locadora de Video\Locadora.mdf;Integrated Security=True;User Instance=True"); //Armazeno em uma varivel do tipo string minha instruo SQL referente insero do registro, //concatenando os valores parametrizados, referentes aos campos que sero preenchidos no form string strConn = @"INSERT INTO Usuario (nomeUsuario, senhaID) VALUES (@Nome, @senha)"; //Uso o objeto instanciado passando como parmetro a string criada anteriomente e o objeto de conexo ao banco SqlCommand objCommand = new SqlCommand(strConn, objConexao);

  • Prof. Esp. Mauro Cafe

    26

    //Fao a verificao: se os campos do form estiverem diferentes de nulos uso o mtodo AddWithValue passando como parmetro //o Value parametrizado do Insert acima. Se os campos estiverem vazios, chamo o ErrorProvider disparando o erro ao usurio //NomeUsuario while (true) { if (!String.IsNullOrEmpty(txtUsuario.Text)) { objCommand.Parameters.AddWithValue("@Nome", txtUsuario.Text); camposValidados = true; epErro.SetError(txtUsuario, null); } else { epErro.SetError(txtUsuario, "O campo Nome usurio obrigatrio!"); txtUsuario.Focus(); camposValidados = false; break; } //Senha if (String.IsNullOrEmpty(txtSenha.Text)) { epErro.SetError(txtSenha, "O campo senha obrigatrio!"); txtSenha.Focus(); camposValidados = false; break; } else { epErro.SetError(txtSenha, null); } //Confirma Senha if (String.IsNullOrEmpty(txtConfSenha.Text)) { epErro.SetError(txtConfSenha, "O campo confirma senha obrigatrio!"); txtConfSenha.Focus(); camposValidados = false; break; } else { epErro.SetError(txtConfSenha, null); } //compara as senhas if (txtSenha.Text != txtConfSenha.Text || String.IsNullOrEmpty(txtSenha.Text) || String.IsNullOrEmpty(txtSenha.Text)) { epErro.SetError(txtSenha, "Senhas diferentes!"); txtSenha.Text = ""; txtConfSenha.Text = ""; txtSenha.Focus(); camposValidados = false; break; } else { objCommand.Parameters.AddWithValue("@senha", txtSenha.Text);

  • Prof. Esp. Mauro Cafe

    27

    camposValidados = true; } //Verifico se o retorno de minha varivel camposValidados true if (camposValidados) { //Abro a conexo objConexao.Open(); //Uso o mtodo ExecuteNonQuery para executar os comandos e realizar o Insert no banco objCommand.ExecuteNonQuery(); //Fecho a conexo objConexao.Close(); //Exibo a mensagem ao usurio de confirmao da insero no banco MessageBox.Show("Registro inserido com sucesso!", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information); //limpo os campos txtUsuario.Text = ""; txtSenha.Text = ""; txtConfSenha.Text = ""; txtUsuario.Focus(); break; } else { //Exibo a mensagem ao usurio de erro MessageBox.Show("Ocorreram erros!\n\nPreencha os campos e tente novamente", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Error); break; } } } catch (SqlException ex) { if (ex.Number == 2627 ) MessageBox.Show("Usurio j cadastrado!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Error); else MessageBox.Show(ex.Message); txtUsuario.Text = ""; txtSenha.Text = ""; txtConfSenha.Text = ""; txtUsuario.Focus(); } }

  • Prof. Esp. Mauro Cafe

    28

    Depois d um duplo clique no boto Cancelar

    E acrescente o cdigo a seguir:

    Retorne ao formulrio Principal.cs

    D um duplo clique no item Acesso que est no menu Cadastro e digite:

    Quando executamos o formulrio e preenchemos os campos precisamos usar a tecla tab

    ou o clique do mouse para mudar de controle, certo? Bom! E se eu quiser que a tecla

    ENTER tambm faa isso! Como resolvo este problema?

    Para aperta a tecla ENTER e o foco mudar automaticamente para o prximo

    controle faa:

    Retorne ao formulrio Acesso.cs

    Altere a propriedade KeyPreview do formulrio Acesso.cs para true

    Continue posicionado no Form

    Na janela Propriedades clique no boto Events

    Surgir uma lista com vrios eventos. (Lembre-se que evento o momento que uma

    determinada programao ser executada)

    D um duplo clique no KeyPress

    Digite conforme mostra a imagem a seguir:

    private void btnCancelar_Click(object sender, EventArgs e) { this.Close(); }

    private void acessoToolStripMenuItem_Click(object sender, EventArgs e) { Acesso objAcesso = new Acesso(); objAcesso.Show(); }

  • Prof. Esp. Mauro Cafe

    29

    10. Implementando a tela Cliente

    At este momento j temos criado o dataset ClienteDS que representa a tabela Cliente e o formulrio Clientes.cs herdando os controles e caractersticas do

    FormularioModelo

    Agora precisamos implementar o form clientes.cs com os campos de acordo com a

    tabela Cliente

    Abra o form Cliente.cs (Na janela Solution Explorer com dois cliques)

    Na janela DataSource ( esquerda da tela), expanda o DataSet ClienteDS e selecione a

    tabela Cliente

    E altere a opo de exibio para Details conforme mostra a figura a seguir:

    Posicione sobre a tabela Cliente (Na janela Data Source) segure o boto e arraste para

    dentro do groupBox do formulrio Cliente.cs

    Aps soltar o boto o formulrio dever ficar assim:

    private void Acesso_KeyPress_1(object sender, KeyPressEventArgs e) {

    //verificando se a tecla digitada igual a ENTER, se for ele ter a mesma // funcionalidade que a tecla tab, ou seja, prximo controle.

    if (e.KeyChar == (char)Keys.Enter) { e.Handled = true; SendKeys.Send("{TAB}"); } }

  • Prof. Esp. Mauro Cafe

    30

    Clique no groupBox1 e mude a propriedade Text para Dados do Cliente

    Note que o tipo do campo Nascimento usa um controle DateTimePicker. Pronto!

    Acabamos de implementar o formulrio de cadastramento de cliente.

    11. Implementando o formulrio Filmes

    A implementao do formulrio Filmes idntico ao formulrio Clientes.

    Crie o formulrio Filmes.cs

    Clique com o boto direito sobre o projeto Locadora de Video (Na janela Solution

    Explorer)

    Escolha a opo Add e depois New Item

    Na janela Add New Item escolha a opo Windows Form

    Em name digite: Filmes.cs

    Para finalizar o processo clique no boto Add

  • Prof. Esp. Mauro Cafe

    31

    Com o formulrio criado aperte a tecla F7 (Para alternar entre janela de cdigo e de

    design)

    Relembrando! O formulrio Filmes.cs, por padro, herda sua identidade visual da classe

    Windows.Forms.Form. Para que o formulrio passe a herdar a identidade visual do

    nosso formulrio modelo altere a linha de cdigo public partial class Filmes: Form

    para public partial class Filmes: FormularioModelo

    Retorne ao modo Design da tela Filmes.cs

    Veja que o formulrio Filmes.cs j incorporou os controles e as caractersticas do

    Formulrio Modelo.

    Continuando! Clique no label1 e mude a propriedade Text para Cadastro de Filmes

    Clique no groupBox1 e mude a propriedade Text para Dados do Filme

    Na janela DataSource ( esquerda da tela), expanda o DataSet filmesDS e selecione a

    tabela Filmes

    Feito isso! Altere a opo de exibio para Details conforme mostra a figura a seguir:

    Posicione sobre a tabela Filmes (Na janela Data Source) segure o boto e arraste para

    dentro do groupBox1 do formulrio Filmes.cs

    Aps soltar o boto o formulrio dever ficar assim:

  • Prof. Esp. Mauro Cafe

    32

    Retorne ao formulrio Principal.cs

    D um duplo clique no item Filmes que est no menu Cadastro e digite:

    12. Implementando o formulrio Categorias

    Vamos criar uma tabela chamada Categorias que ir armazenar os dados das categorias

    dos filmes. Para isto faa:

    Na janela Solution Explorer d um duplo clique sobre o banco Locadora.mdf

    Na janela Server Explorer clique com o boto direito do mouse sobre a opo Tables

    Escolha a opo Add New Table e crie os campos conforme mostra a figura a seguir:

    Salve a tabela com o nome de Categorias

    Agora inclua um novo formulrio chamado Categorias.cs

    Clique com o boto direito sobre o projeto Locadora de Video (Na janela Solution

    Explorer)

    Escolha a opo Add e depois New Item

    Na janela Add New Item escolha a opo Windows Form

    Em name digite: Categorias.cs

    Para finalizar o processo clique no boto Add

    Agora que criamos o form Categorias.cs vamos alterar a sua identidade visual (classe

    Windows.Forms.Form) para a identidade visual FormularioModelo

    private void filmesToolStripMenuItem_Click(object sender, EventArgs e) { Filmes objFilmes = new Filmes(); objFilmes.Show(); }

  • Prof. Esp. Mauro Cafe

    33

    Com o formulrio aberto aperte a tecla F7

    Altere a linha de cdigo public partial class Categorias: Form para public partial class

    Categorias: FormularioModelo

    O prximo passo criar um novo Data Source para a tabela Categorias.

    Clique no menu Data e selecione a opo - Add New DataSource;

    Na janela Data Source Configuration Wizard, selecione a opo DataBase e clique no boto Next.

    Em Database model escolha a opo Dataset e clique no boto Next.

    Aceite a conexo que j est selecionada e Next

    Selecione a tabela Categorias e informe o nome do DataSet como: CategoriasDS

    Clique no boto Finish.

    Vamos alterar o modo de viso do Data Source CategoriasDS para Details e arrast-lo

    para o formulrio Categorias.cs. Para isto faa:

    Retorne ao modo Design da tela Categorias.cs

    Clique no label1 e mude a propriedade Text para Cadastro de Categorias

    Clique no groupBox1 e mude a propriedade Text para Dados da Categoria

    Na janela DataSource ( esquerda da tela), expanda o DataSet CategoriasDS e

    selecione a tabela Categorias

    Feito isso! Altere a opo de exibio para Details conforme mostra a figura a seguir:

  • Prof. Esp. Mauro Cafe

    34

    Posicione sobre a tabela Categorias (Na janela Data Source) segure o boto e arraste

    para dentro do groupBox1 do formulrio Categorias.cs

    Aps soltar o boto o formulrio dever ficar assim:

    Clique no checkBox e na sua propriedade Text deixe VAZIO

    Quando fazemos esta operao o assistente, alm de criar os campos no formulrio e

    incluir os objetos:

    1. CategoriaBindingSource

    2. CategoriaTableAdpater

    3. CategoriasBindingNavigator

    Cria tambm uma barra de navegao que permite, alm da navegao pelos registros,

    realizar as operaes CRUD (read, update e delete) na fonte de dados.

    No vamos usar esta barra de navegao. Para isto faa:

    Clique em CategoriasBindingNavigator e delete.

    Com a excluso o formulrio ficar assim:

  • Prof. Esp. Mauro Cafe

    35

    Se olharmos, neste momento, o cdigo do formulrio estar assim: (Aperte o F7)

    Veja que na imagem acima temos o cdigo do boto Salvar da barra de Navegao

    (categoriasBindingNavigatorSaveItem_Click) e o cdigo (Categorias_Load) que carrega

    todos as categorias na carga do formulrio. Selecione tanto um quanto o outro e exclua.

    O cdigo ficar assim:

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace Locadora_de_Video { public partial class Categorias : FormularioModelo { public Categorias() { InitializeComponent(); } private void categoriasBindingNavigatorSaveItem_Click(object sender, EventArgs e) { this.Validate(); this.categoriasBindingSource.EndEdit(); this.tableAdapterManager.UpdateAll(this.categoriasDS); } private void Categorias_Load(object sender, EventArgs e) { // TODO: This line of code loads data into the 'categoriasDS.Categorias' table. You can move, or remove it, as needed. this.categoriasTableAdapter.Fill(this.categoriasDS.Categorias); } } }

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace Locadora_de_Video { public partial class Categorias : FormularioModelo { public Categorias() { InitializeComponent(); } } }

  • Prof. Esp. Mauro Cafe

    36

    Retorne ao modo design do formulrio Categorias.cs.

    Acrescente dois botes de comando como mostra a figura a seguir:

    D um clique no button1 e mude a propriedade Text para Cancelar e a

    propriedade Name para btnCancelar

    D um clique no button2 e mude a propriedade Text para Criar e a propriedade

    Name para btnCriar

    D um clique no label1 (Titulo) e altere a propriedade Text de Cadastro de

    Categorias para Nova Categoria

    D um clique no label4 (Estado) e altere a propriedade Text de Estado para Ativo

    D um clique no textbox1 e mude a propriedade Name para txtCodigo

    D um clique no textbox2 e mude a propriedade Name para txtDescricao

    Com essas mudanas o formulrio ficar assim:

  • Prof. Esp. Mauro Cafe

    37

    No evento Load do formulrio inclua o seguinte cdigo:

    Na janela Propriedades do formulrio Categorias.cs clique no boto Events

    Procure pelo evento Load

    Ao encontrar d um duplo clique sobre o mesmo.

    Na janela de cdigo acrescente os comandos conforme mostra a figura a seguir:

    Este cdigo inclui um novo registro no Data Source.

    Inserir cdigo no evento ao clicar do boto Criar:

    Retorne ao modo design do formulrio Categorias.cs

    D um duplo clique sobre o boto Criar e digite o cdigo:

    private void btnCriar_Click(object sender, EventArgs e) { try { if (this.Validate()) { this.categoriasBindingSource.EndEdit(); this.tableAdapterManager.UpdateAll(this.categoriasDS); MessageBox.Show("Dados inseridos com Sucesso!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information); this.Close(); } } catch(Exception ex) { MessageBox.Show("Dados no includos! Verifique se o campo Ativo est ativado ou desativado.", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Error); } }

  • Prof. Esp. Mauro Cafe

    38

    Este cdigo atualiza a tabela Categorias incluindo os dados digitados. Como o campo

    Codigo da tabela Categorias Identity com incremento automtico de 1 em 1 iremos

    desabilitar este campo no formulrio. Para isto faa:

    Clique no boto Properties que fica ao lado do boto Events (raio) para voltarmos a

    visualizar todas as propriedades.

    D um clique na caixa de texto txtCodigo

    E na propriedade Enabled coloque False. (Estando em Falso o usurio no conseguir

    editar este campo)

    E para melhorar o nosso cdigo vamos validar o campo descrio utilizando o

    componente errorProvider.

    Acrescente no formulrio Categorias.cs o componente (ToolBox) ErrorProvider. Na

    sua propriedade name digite: epErro

    D um clique na caixa de texto txtDescricao

    Na janela de propriedades d um clique no boto Events (raio) para visualizarmos

    todos os eventos deste controle

    Procure pelo o evento Validating. Ao encontrar d um duplo clique.

    Acrescente o cdigo:

    Retorne ao modo design do formulrio Categorias.cs

    D um duplo clique sobre o boto Cancelar e digite:

    Retorne ao modo design do formulrio Principal.cs

    D um duplo clique no menu item Categorias e digite:

    private void txtDescricao_Validating(object sender, CancelEventArgs e) { if (String.IsNullOrEmpty(txtDescricao.Text)) { e.Cancel = true; epErro.SetError(txtDescricao, "O campo Descrio obrigatrio!"); txtDescricao.Focus(); } else { epErro.SetError(txtDescricao, null); } }

    private void btnCancelar_Click(object sender, EventArgs e) { txtDescricao.Text = " "; estadoCheckBox.Checked = false; this.Close(); }

    private void categoriasToolStripMenuItem_Click(object sender, EventArgs e) { Categorias objCategorias = new Categorias(); objCategorias.Show(); }

  • Prof. Esp. Mauro Cafe

    39

    13. Implementando o formulrio TodasCategorias

    Com esta tela poderemos exibir em uma grid (tabela) todas as categorias cadastradas.

    Para isto faa:

    Clique com o boto direito sobre o projeto Locadora de Video (Na janela Solution

    Explorer)

    Escolha a opo Add e depois New Item

    Na janela Add New Item escolha a opo Windows Form

    Em name digite: TodasCategorias.cs

    Para finalizar o processo clique no boto Add

    Agora que criamos o form TodasCategorias.cs vamos alterar a sua identidade visual

    (classe Windows.Forms.Form) para a identidade visual FormularioModelo

    Com o formulrio aberto aperte a tecla F7

    Altere a linha de cdigo public partial class TodasCategorias: Form para public partial

    class TodasCategorias: FormularioModelo

    Aperte a tecla F7 novamente, s que agora para retornar ao modo design.

    Feito isso! Vamos alterar as propriedades dos controles Label1 e groupBox1

    Clique no label1 e altere a sua propriedade Text para Todas as Categorias

    Clique no groupBox1 e altere a sua propriedade Text para VAZIO (Deixe vazio)

    Para continuar vamos alterar o modo de viso do Data Source CategoriasDS para

    DataGridView e arrast-lo para o formulrio TodasCategorias.cs. Para isto faa:

    Na janela DataSource ( esquerda da tela), expanda o DataSet CategoriasDS e

    selecione a tabela Categorias

    Feito isso! Altere a opo de exibio para DataGridView conforme mostra a figura a

    seguir:

    Posicione sobre a tabela Categorias (Na janela Data Source) segure o boto e arraste

    para dentro do groupBox do formulrio TodasCategorias.cs

  • Prof. Esp. Mauro Cafe

    40

    Aps soltar o boto o formulrio dever ficar assim:

    No rodap (Abaixo do Form) temos: categoriasBindingNavigator, clique nele e altere

    a propriedade Visible para False (Para no aparecer a barra de navegao)

    E para que o formulrio seja usado apenas para consulta faa:

    D um clique na Grid (Tabela) e altere as propriedades:

    o AllowUserToAddRows para False (para no permitir incluso de novos dados)

    o AllowUserToDeleteRows para False (para no permitir excluso de dados)

    o E ReadyOnly para True (para no permitir alterao de dados).

    Agora! Vamos retornar ao formulrio principal.cs (no modo design) para acrescentar

    mais um item na barra de menu.

    Com o form aberto d um clique no item Cadastro da barra de menu

    D um clique no subitem Categorias

    Abrir um submenu ao seu lado. Acrescente: Incluir Nova Categoria e Exibir

    Caegorias

    D um duplo clique sobre a opo Incluir Nova Categoria

    Inclua os cdigos a seguir:

  • Prof. Esp. Mauro Cafe

    41

    Retorne ao modo design do formulrio principal.cs

    D um duplo clique sobre a opo Exibir Categoria (Submenu de Categorias)

    Inclua os cdigos a seguir:

    Lembra que h um tempo associamos o cdigo abaixo no item Categoria do menu

    Cadastro?

    Ento! Como agora temos o submenu ento no precisamos mais dele. Apague as

    seguintes linhas de cdigo:

    Compile o projeto. (Build -> Build Solution)

    Devido excluso do mtodo dar um erro na janela Error List

    D um duplo clique sobre o erro.

    E apague a linha a seguir:

    Compile novamente o projeto. (Build -> Build Solution). Pronto! Agora no ter mais

    erro.

    Obs: Este erro ocorre devido excluso do mtodo. Quando inclumos o mtodo esta

    linha colocada automaticamente e quando a exclumos ela no sai automaticamente.

    Por isso que precisamos fazer manualmente.

    private void incluirNovaCategoriaToolStripMenuItem_Click(object sender, EventArgs e) { Categorias objCategorias = new Categorias(); objCategorias.Show(); }

    private void exibirCategoriasToolStripMenuItem_Click(object sender, EventArgs e) { TodasCategorias objTodasCateorias = new TodasCategorias(); objTodasCateorias.Show(); }

    Categorias objCategorias = new Categorias(); objCategorias.Show();

    private void categoriasToolStripMenuItem_Click(object sender, EventArgs e) { Categorias objCategorias = new Categorias(); objCategorias.Show(); }

    this.categoriasToolStripMenuItem.Click += new System.EventHandler(this.categoriasToolStripMenuItem_Click);

  • Prof. Esp. Mauro Cafe

    42

    14. Implementando o formulrio Movimento

    A implementao do formulrio de locao deve registrar as locaes efetuadas pelos

    clientes. No nosso caso o processo de locao funciona da seguinte forma:

    1. O cliente escolha o filme que deseja do acervo e se dirige ao funcionrio

    2. O funcionrio acessa o sistema e informa o cdigo do filme escolhido e o cdigo do

    cliente que esta efetuando a locao

    3. Como geralmente o cliente no memoriza o seu cdigo devemos implementar

    uma alternativa para selecionar o cliente pelo nome

    Vamos relembrar a estrutura da tabela Movimento para ver os dados que devemos

    registrar:

    O campo CodigoLocacao um campo autonumerado

    (Identity) e por este motivo no iremos gravar nada neste

    campo visto que seu valor incrementado

    automaticamente

    Devemos registrar valores nos seguintes campos:

    CodigoCliente - Este dado vir da tabela

    Clientes

    CodigoFilme - O valor vir da tabela Filmes

    Locacao - A data da locao

    Os campos Devoluo e Valor sero preenchidos quando

    da devoluo do filme pelo cliente (por este motivo

    aceitam valores Nulls, pois no iremos gravar nada na

    locao nestes campos).

    Abra o formulrio Movimento.cs

    Inclua duas Labels, dois TextBox e quatro botes de comando(Button),

    conforme mostra a figura abaixo:

  • Prof. Esp. Mauro Cafe

    43

    D um clique no label2 e mude a propriedade Text para Cdigo de Filme

    D um clique no label3 e mude a propriedade Text para Cdigo de Cliente

    D um clique no textbox1 e mude a propriedade Name para txtCodFilme

    D um clique no textbox2 e mude a propriedade Name para txtCodCliente

    D um clique no button1 e mude a propriedade Text para Procurar e a

    propriedade Name para btnProcurarFilme

    D um clique no button2 e mude a propriedade Text para Procurar e a

    propriedade Name para btnProcurarCliente

    D um clique no groupBox1 e mude a propriedade Text para VAZIO

    D um clique no button3 e mude a propriedade Text para Cancelar e a

    propriedade Name para btnCancelar

    D um clique no button4 e mude a propriedade Text para Registrar e a

    propriedade Name para btnRegistrar.

    Ajuste a largura e a altura dos controles de modo que fique parecido com a figura

    a seguir:

    Nesta tela quando for efetuar a locao o funcionrio ir informar o cdigo do filme e

    do cliente. Se por algum motivo estes dados no estiverem disponveis (cadastrados)

    uma busca nas tabelas Filmes e Clientes nos retornaro estes valores.

    Para implementar este recurso deveremos criar dois novos formulrios:

    SelecionaFilme.cs e SelecionaCliente.cs que atuaro basicamente de forma idntica:

    Iro exibir uma caixa de texto, onde o usurio informar o nome do filme ou do cliente,

    um boto selecionar que dever extrair os dados da respectiva tabela, e exibir o

    resultado da consulta em um DataGridview.

    A seguir os passos para implementar o recurso para o formulrio SelecionaFilme.cs

  • Prof. Esp. Mauro Cafe

    44

    Inclua um novo formulrio chamado SelecioneFilme.cs na sua aplicao herdando

    a identidade visual do formulrio FormularioModelo.cs

    Inclua no formulrio os seguintes controles: Label, TextBox , Button e

    DataGridView, conforme mostra a figura abaixo:

    D um clique no label1 e mude a propriedade Text para Seleciona Filme do acervo

    D um clique no groupBox1 e mude a propriedade Text para VAZIO

    D um clique no label2 e mude a propriedade Text para Filme

    D um clique no textbox1 e mude a propriedade Name para txtFilme

    D um clique no button1 e mude a propriedade Text para Seleciona e a

    propriedade Name para btnSelecionar

    D um clique no button2 e mude a propriedade Text para Aceitar e a propriedade

    Name para btnAceitar

    D um clique no dataGridView1e mude a propriedade Name para dgvDados.

    Ajuste a largura e a altura dos controles de modo que fique parecido com a figura

    a seguir:

  • Prof. Esp. Mauro Cafe

    45

    Clique no Smart Tags do dataGridView1

    Em Choose Data Source escolha o dataset filmesDS e depois a tabela Filmes

    Como queremos exibir somente o filme correspondente ao nome informado pelo

    funcionrio devemos incluir um filtro na nossa fonte de dados - Data Source -

    FilmesDS.

    Na janela Data Source , selecione FilmesDS e clique com o boto direito

    selecionando - Edit Data Set with Designer

    A seguir selecione o Data Set Filmes e clique com o boto direito do mouse

    selecionando Add -> Query

    Na janela - TableAdapter Configuration Wizard - vamos usar uma instruo SQL

    Select , por isto clique no boto Next

    Como vamos obter linhas de retorno, aceite a seleo do wizard e clique no boto

    Next

    Na janela a seguir vamos montar a nossa consulta, por isto clique no boto - Query

    Builder.

    Estando na janela Query Builder selecione o campo titulo e na coluna Filter

    informe o parmetro : Like @titulo

  • Prof. Esp. Mauro Cafe

    46

    Podemos testar a consulta clicando no boto Execute Query.

    Clique no boto Ok

    Clique no boto Next

    E a seguir informe o nome da consulta criada:

    A seguir clique em Next e finalmente em Finish.

    Pronto! Criamos uma consulta para selecionar o filme pelo ttulo informado.

    Podemos retornar ao formulrio SelecionaFilme.cs. Ao clicar no boto Seleciona

    devemos acionar a consulta criada, para isto inclua o seguinte cdigo no evento Click

    do boto:

  • Prof. Esp. Mauro Cafe

    47

    Neste cdigo eu estou usando do TableAdapter e a consulta FillByTitulo para extrair

    dados do dataset Filmes segundo o valor informado na caixa de texto txtFilme.Text.

    Devemos ainda configurar algumas propriedades do DataGridView pois no desejamos

    que o usurio altere o DataGridView ou inclua, exclua ou efetue uma seleo mltipla

    no mesmo. Para isto defina como False as seguintes propriedades:

    MultiSelect

    AllowUserToAddRows

    AllowUserToDeleteRows

    AllowUserToResizeRows

    AllowUserToResizeColumns.

    E vamos definir a propriedade Selection Mode como FullRowSelect para selecionar a

    linha por inteiro.

    Quando o usurio clicar na clula que exibe os dados do ttulo procurado deveram

    capturar a seleo e os dados do filme escolhido. Fazemos isto tratando o evento Click

    do boto Aceitar. Abaixo temos o cdigo que deve ser includo neste evento:

    Aqui definimos a varivel pblica codigoFilme no formulrio e obtemos o cdigo do

    filme pois este valor que vamos gravar na tabela Movimento.

    Agora voltemos ao formulrio Movimento.cs , onde tudo comeou. Aps efetuar a

    busca e selecionar o filme pelo ttulo deveremos obter o cdigo do filme e exibir na

    caixa de texto - txtCodigoFilme - do formulrio de Locaes - Movimento.cs. Para

    isto basta acrescentar o cdigo abaixo no evento Click do boto Procurar (Cdigo do

    Filme) do formulrio:

    A primeira e segunda linha abre o formulrio para selecionar o filme e a terceira obtm

    o valor da varivel codigoFilme declarada como Public no formulrio SelecionaFilme.

    private void btnSelecionar_Click(object sender, EventArgs e) { this.filmesTableAdapter.FillByTitulo(filmesDS.Filmes, "%" + txtFilme.Text + "%"); }

    private void btnAceitar_Click(object sender, EventArgs e) { codigoFilme = Convert.ToInt32(this.filmesDS.Filmes(filmesBindingSource.Position).CodigoFilme); this.Close(); }

    private void btnProcurarFilme_Click(object sender, EventArgs e) { SelecioneFilmes objSelecioneFilmes = new SelecioneFilmes(); objSelecioneFilmes.Show(); txtCodFilme.Text = Convert.ToString(objSelecioneFilmes.codigoFilme); }

  • Prof. Esp. Mauro Cafe

    48

    Todo o procedimento acima dever ser repetido para o formulrio SelecionaCliente.

    Deixo isto como tarefa para voc realizar.

    15. Implementando a classe para registrar a locao efetuada no

    formulrio Movimento.cs

    Apenas para recordar o formulrio Movimento.cs possui o seguinte layout:

    A estrutura da tabela Movimento a seguinte:

    O campo CodigoLocacao um campo autonumerado

    (Identity) e por este motivo no iremos gravar nada

    neste campo visto que seu valor incrementado

    automaticamente

    Devemos registrar valores nos seguintes campos:

    CodigoCliente - este dado vir da tabela

    Clientes CodigoFilme - o valor vir da tabela Filmes Locacao - a data de locao

    Os campos Devolucao e Valor sero preenchidos

    quando da devoluo do filme pelo cliente (por este

    motivo aceitam valores Nulls, pois no iremos gravar

    nada na locao nestes campos)

    Uma primeira pergunta que talvez possa surgir seria: Porque eu no implemento o

    cdigo de locao no prprio formulrio?

  • Prof. Esp. Mauro Cafe

    49

    Bem, primeiro porque a locao refere-se ao negcio da locadora de filmes e por este

    motivo bom separar a regra de negcio da interface do usurio.

    Para criar a classe LocaFilmes.cs faa:

    Clique com o boto direito do mouse sobre o nome do projeto

    Selecione a opo Add e a seguir New Item

    Selecione Windows Form e informe o nome: LocaFilmes.cs

    Clique no boto Add.

    claro que antes de efetuar a locao eu preciso verificar o estoque de filmes para ver

    se existe o filme disponvel. Se houver terei que diminuir uma unidade, referente

    unidade locada e acrescent-la a tabela de locaes efetuadas: Movimento.

    Antes de entrar no cdigo teremos que criar uma nova consulta relacionada com a tabela

    Filmes que nos devolva um determinado filme conforme o seu cdigo.

    Na janela Data Source vamos editar o DataSet FilmeDS e vamos incluir uma nova

    consulta para filtrar os filmes selecionados pelo cdigo do filme. Usando o Query

    Builder informamos o parmetro @codigoFilme para montar a instruo SQL.

    Na janela Data Source , selecione FilmesDS e clique com o boto direito

    selecionando - Edit Data Set with Designer

    A seguir selecione o Data Set Filmes e clique com o boto direito do mouse

    selecionando Add -> Query

    Na janela - TableAdapter Configuration Wizard - vamos usar uma instruo SQL,

    por isto mantenha a opo Use SQL statements ativado e Next

  • Prof. Esp. Mauro Cafe

    50

    Como vamos obter linhas de retorno, aceite a seleo do wizard e clique no boto

    Next

    Na janela a seguir vamos montar a nossa consulta, por isto clique no boto - Query

    Builder.

    Estando na janela Query Builder selecione o campo CodigoFilme e na coluna

    Filter informe o parmetro : =@CodigoFilme

    Podemos testar a consulta clicando no boto Execute Query.

    Clique no boto Ok

    Clique no boto Next

    E a seguir informe o nome da consulta criada:

  • Prof. Esp. Mauro Cafe

    51

    A seguir clique em Next e finalmente em Finish.

    Pronto! Criamos uma consulta para selecionar o filme pelo cdigo informado.

    Vamos precisar criar tambm uma nova consulta de incluso de dados na tabela

    Movimento usando a instruo SQL INSERT/INTO.

    Na janela Data Source , selecione movimentoDS e clique com o boto direito

    selecionando - Edit Data Set with Designer

    A seguir selecione o Data Set Movimento e clique com o boto direito do mouse

    selecionando Add -> Query

    Na janela - TableAdapter Configuration Wizard Mantenha a opo selecionada e

    Next

    Selecione a opo Insert e Next.

    Clique no boto Query Builder.

  • Prof. Esp. Mauro Cafe

    52

    Usando o Query Builder construa a instruo SQL para inserir uma linha na tabela

    Movimento, conforme figura abaixo:

    Clique no boto Ok

    A janela - TableAdapter Query Configuration Wizard - dever exibir a instruo

    INSERT INTO conforme figura abaixo:

    Clique no boto Next

    E a seguir informe o nome da consulta criada: InsertQueryMovimentoLocacao

  • Prof. Esp. Mauro Cafe

    53

    Clique no boto Next

    Clique no boto Finish

    Podemos ento partir para o cdigo da classe LocaFilmes.cs:

    Retorne ao formulrio LocaFilmes.cs

    Aperte a tecla F7

    public void alugarfilmes(int codFilme, int codCliente, DateTime datalocacao){ //verificando o estoque da locadora //cria um adatper e um dataset filmesDSTableAdapters.FilmesTableAdapter adapterfilme = new filmesDSTableAdapters.FilmesTableAdapter(); filmesDS filme = new filmesDS(); //filtra os filmes pelo codigo informado usando a consulta SQL criada - FillByCodigo adapterfilme.FillByCodigo(filme.Filmes, codFilme); // se no encontrou o filme com o codigo informado dispara exceo if (filme.Filmes.Count == 0){ MessageBox.Show("No existe o filme informado no acervo.","Mensagem",MessageBoxButtons.OK,MessageBoxIcon.Error); } // se no tem filme no estoque avisa if (Convert.ToInt32(filme.Filmes.EstoqueColumn.ToString()) == 0){ MessageBox.Show("No existem unidades cadastradas no acervo.","Mensagem",MessageBoxButtons.OK,MessageBoxIcon.Error); } //se houver filme no estoque tenho que diminuir a unidade locada do estoque //filme.Filmes.EstoqueColumn.ToString() = Convert.ToString(Convert.ToInt32(filme.Filmes.EstoqueColumn.ToString()) - 1); //atualiza o banco de dados adapterfilme.Update(filme); //registrar a locacao //cria um adapter e um dataset movimentoDSTableAdapters.MovimentoTableAdapter adapterLocacao = new movimentoDSTableAdapters.MovimentoTableAdapter(); movimentoDS movimentoLocacao = new movimentoDS(); //utiliza a instruo SQL criada para incluir dados na tabela Movimento - InsertQueryMovimentoLocacao adapterLocacao.InsertQueryMovimentoLocacao(codCliente, codFilme, datalocacao); adapterLocacao.Update(movimentoLocacao); }

  • Prof. Esp. Mauro Cafe

    54

    No cdigo da classe acima exibido estou realizando as seguintes tarefas:

    Verificando se o filme existe no acervo

    Verificando se existem filmes no estoque

    Atualizando o estoque de filmes

    Atualizando o movimento de locao

    Retorne ao formulrio Principal.

    Acrescente os itens a seguir no item Movimento da barra de menu:

    Acrescente os itens a seguir no item Movimento da barra de menu:

    Crie um novo formulrio chamado d FilmesAlugados.cs

    Com o formulrio aberto aperte a tecla F7

    Mude public partial class FilmesAlugados : Form para public partial

    class FilmesAlugados : FormularioModelo

    Retorne ao modo design

    Clique no label1 e altere a propriedade Text para Filmes Alugados

    Clique no groupBox1 e altere a propriedade Text para VAZIO

    Na janela Data Source ( esquerda da tela), expanda o DataSet MovimentoDS e

    selecione a tabela Movimento

    E altere a opo de exibio para DataGridView conforme mostra a figura a seguir:

    Posicione sobre a tabela Movimento (Na janela Data Source) segure o boto e arraste

    para dentro do groupBox1 do formulrio FilmesAlugados.cs

    Aps soltar o boto o formulrio dever ficar assim:

  • Prof. Esp. Mauro Cafe

    55

    No rodap (Abaixo do Form) temos: movimentoBindingNavigator, clique nele e

    altere a propriedade Visible para False (Para no aparecer a barra de navegao)

    E para que o formulrio seja usado apenas para consulta faa:

    D um clique na Grid (Tabela) e altere as propriedades:

    o AllowUserToAddRows para False (para no permitir incluso de novos dados)

    o AllowUserToDeleteRows para False (para no permitir excluso de dados)

    o E ReadyOnly para True (para no permitir alterao de dados).

    Com a incluso do submenus, precisamos alterar alguns cdigos e acrescentar outros.

    Retorne ao formulrio Principal.cs

    D um duplo clique sobre o menu Movimento

    Apague seu mtodo (inteiro)

    Retorne ao modo design do form Principal.cs

    D um duplo clique no submenu Locao de Filmes e digite:

    Retorne ao modo design do form Principal.cs

    D um duplo clique no submenu Filmes Alugados e digite:

    private void locaoDeFilmesToolStripMenuItem_Click(object sender, EventArgs e) { Movimento objMovimento = new Movimento(); objMovimento.Show(); }

    private void filmesAlugadosToolStripMenuItem_Click(object sender, EventArgs e) { FilmesAlugados objFilmeAlugado = new FilmesAlugados(); objFilmeAlugado.Show(); }

  • Prof. Esp. Mauro Cafe

    56

    Compile o projeto. (Build -> Build Solution)

    Devido excluso do mtodo dar um erro na janela Error List

    D um duplo clique sobre o erro.

    E apague a linha a seguir:

    Compile novamente o projeto. (Build -> Build Solution). Pronto! Agora no ter mais

    erro.

    Clicando na opo - Locao de Filmes- temos o formulrio onde iremos informar o

    cdigo do filme e o cdigo do cliente. Lembre-se que implementamos os formulrios

    SelecionaFilme.cs e SelecionaCliente.cs para podemos selecionar um cliente ou o

    filme pelo nome. Abaixo temos a exibio da tela do formulrio Movimento.cs e de

    SelecionaFilme.cs aps clicarmos em Procurar:

    D um duplo clique sobre o boto Registrar

    this.movimentoToolStripMenuItem.Click += new System.EventHandler (this.movimentoToolStripMenuItem_Click);

    private void btnRegistrar_Click(object sender, EventArgs e) { LocaFilmes locacao = new LocaFilmes(); try { locacao.alugarfilmes(Convert.ToInt32(txtCodFilme.Text), Convert.ToInt32(txtCodCliente.Text), DateTime.Now); this.Validate(); MessageBox.Show("Locao Realizada com sucesso!","Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information); } catch(Exception) { MessageBox.Show("Erro durante a locao do filme:","Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Error); } }

  • Prof. Esp. Mauro Cafe

    57

    O cdigo acima cria uma instncia da classe LocaFilmes e utiliza o mtodo

    alugarfilmes passando os parmetros esperados.

    16. Incrementando o formulrio de cadastro de filmes.

    Apenas para recordar, o formulrio Filmes.cs possui o seguinte layout:

    Vamos incrementar a interface do formulrio de cadastro de filmes. Como os dados

    que o usurio deve informar para os campos Gnero, Mdia e Classificao devem

    estar pr-cadastrados em suas respectivas tabelas (Com exceo do campo Mdia onde

    usarei um valor pr-definido). Vamos mudar os controles dos campos Gnero, Mdia e

    Classificao, do formulrio Filmes.cs, de TextBox para ComboBox e fazer a

    vinculao com as respectivas tabelas. Alm disto, vou passar a exibir o campo status

    do filme indicando se a mesmo esta disponvel, alugado ou reservado. O novo layout

    dever ficar como mostrado na figura a seguir:

  • Prof. Esp. Mauro Cafe

    58

    O campo genero dever exibir os dados da tabela Categorias

    O campo Midia dever exibir os valores DVD e Fita VHS

    O campo Classificao dever exibir os dados da tabela Precos

    O campo Status dever exibir os dados da tabela Status

    Crie as tabelas Precos e Status como mostra as figuras a seguir:

    Crie os dataSets dessas duas tabelas.

    Clique no menu Data e selecione a opo - Add New DataSource;

    Na janela Data Source Configuration Wizard, selecione a opo DataBase e clique no boto Next.

    Em Database model escolha a opo Dataset e clique no boto Next. Na tela seguinte Next.

    Ative apenas a tabela Precos e defina o nome do dataSet como: PrecosDS

  • Prof. Esp. Mauro Cafe

    59

    Clique no boto Finish

    Clique novamente no menu Data e selecione a opo - Add New DataSource;

    Na janela Data Source Configuration Wizard, selecione a opo DataBase e clique no boto Next.

    Em Database model escolha a opo Dataset e clique no boto Next. Na tela seguinte Next.

    Ative apenas a tabela Status e defina o nome do dataSet como: StatusDS

    Clique no boto Finish

    Agora vamos alterar os controles textbox para cmbobox no formulrio Filmes.cs, para

    isto faa:

    Remova os campos gnero, mdia, classificacao e status do formulrio

    Filmes.cs (Tanto o label quanto o textbox)

    Abra a janela Data Sources

    Selecione e expanda o DataSet FilmesDS

    Exiba os campos da tabela Filmes.

    Selecione o campo Genero. Clique na seta para baixo e selecione a opo

    ComboBox

    Selecione o campo Mdia. Clique na seta para baixo e selecione a opo

    ComboBox Selecione o campo Classificacao. Clique na seta para baixo e selecione a opo

    ComboBox Selecione o campo Status. Clique na seta para baixo e selecione a opo

    ComboBox Arraste os campos Genero, Midia, Classificacao e Status com as novas

    formataes para o formulrio novamente. (um de cada vez)

    Agora que alteramos os controles precisamos configurar cada combobox, para isto

    iremos usar o assistente da Smart Tag do controle:

    No form Filmes.cs selecione o controle comboBox Genero e clique na pequena seta superior direita

    Marque a opo: Use data bound items

  • Prof. Esp. Mauro Cafe

    60

    Informe o Data Source como CategoriaBindingSource

    Em Display Member selecione o campo Descrio.

    Display Member - O que vai aparecer ao abrir a lista do comboBox, neste caso, as

    descries da categoria.

    Em Value Member selecione tambm o campo Descrio.

    Value Member Qual o valor que ser armazenado no campo gnero, neste caso, tambm a descrio da categoria.

    Em Selectded Value deixe como none

  • Prof. Esp. Mauro Cafe

    61

    No form Filmes.cs selecione o controle comboBox Classificacao e clique na pequena seta superior direita

    Marque a opo: Use data bound items

    Informe o Data Source como PrecosBindingSource

  • Prof. Esp. Mauro Cafe

    62

    Em Display Member selecione o campo Descrio.

    Em Value Member selecione o campo Cdigo.

    Obs: Na lista veremos a descrio, porm ser armazenado o cdigo.

    Em Selectded Value deixe como none

    No form Filmes.cs selecione o controle comboBox Status e clique na pequena seta superior direita

    Marque a opo: Use data bound items

    Informe o Data Source como StatusBindingSource

    Em Display Member selecione o campo Descrio.

    Em Value Member selecione o campo Cdigo.

    Em Selectded Value deixe como none

    No campo Midia no marque a opo - data bound items. Clique em Edit Items e

    informe os valores na janela - String Collection Editor e clique no boto OK.

    Voc percebeu que medida que voc vai vinculando os controles, as respectivas

    instncias de cada DataSet so incorporadas na base do formulrio. Alm de

    facilitarmos a vida do usurio estamos evitando que ocorra um erro na informao

    manual que anteriormente deveria ser feita via digitao pelo usurio. Tudo isto sem

    digitar uma nica linha de cdigo.

    Agora crie os formulrio Status.cs e Precos.cs para permitir o cadastramento dos

    valores usados na locadora. Ambos herdam a aparncia do nosso formulrio modelo.

    Abaixo temos a figura destes formulrios:

  • Prof. Esp. Mauro Cafe

    63

    Agora vamos incluir estas opes na barra de menu do form Principal.cs

    Abra o form Principal.cs

    Aps o item Acesso (No menu Cadastro) acrescente Status e Preos

    D um duplo clique em Status

    Retorne ao modo design do form Principal.cs

    D um duplo clique em Preos (No menu Cadastro)

    Retorne ao modo design do form Principal.cs

    Aps o item Preos (No menu Cadastro) acrescente Sair

    Clique com o boto direito na opo Sair e escolha Insert e depois Separator

    Agora d um duplo clique em Sair

    private void statusToolStripMenuItem_Click(object sender, EventArgs e) { Status objStatus = new Status(); objStatus.Show(); }

    private void preosToolStripMenuItem_Click(object sender, EventArgs e) { Precos objPrecos = new Precos(); objPrecos.Show(); }

    private void sairToolStripMenuItem_Click(object sender, EventArgs e) { if (MessageBox.Show("Deseja encerrar a aplicao ?", "Aviso", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { Application.Exit(); } }

  • Prof. Esp. Mauro Cafe

    64