relatório programação - trabalho pratico 2

24
Instituto Superior Politécnico Gaya Escola Superior de Ciência e Tecnologia Informática de Gestão Programação 1 2009/2010 Trabalho Prático 2 Joel Ricardo Docente: Mário António da Costa Santos 09 De Janeiro de 2010

Upload: joel-correia-ricardo

Post on 18-Nov-2014

128 views

Category:

Documents


7 download

DESCRIPTION

Link: http://activewall.xtreemhost.com/Downloads/Right Click and download!

TRANSCRIPT

Page 1: Relatório Programação - Trabalho Pratico 2

Instituto Superior Politécnico Gaya Escola Superior de Ciência e Tecnologia 

Informática de Gestão 

Programação 1 2009/2010 

Trabalho Prático 2 

Joel Ricardo   

  

Docente: Mário António da Costa Santos    

09 De Janeiro de 2010 

Page 2: Relatório Programação - Trabalho Pratico 2

Instituto Superior Politécnico Gaya

Pág. 2

Índice

Introdução ....................................................................................................................... 3 Desenvolvimento ............................................................................................................. 4 •  Linguagem C# ........................................................................................................... 4 •  Desempenho Global ................................................................................................ 5 •  Fases de elaboração ................................................................................................. 6 •  Explicação do código ................................................................................................ 7 

class Program ............................................................................................................ 7 public class variaveis ................................................................................................ 9 public class add_util : Form ................................................................................... 10 public class manutencao : Form ............................................................................. 12 public class alteracao : Form .................................................................................. 16 public class entrada : Form ..................................................................................... 18 

•  Esquema de funções do programa ........................................................................ 19 Conclusões ..................................................................................................................... 20 •  Aprendizagem adquirida ....................................................................................... 20 •  Dificuldades ultrapassadas .................................................................................... 20 

Page 3: Relatório Programação - Trabalho Pratico 2

Instituto Superior Politécnico Gaya

Pág. 3

Introdução 

A  linguagem  C#  é  uma  poderosa  linguagem  de  programação  orientada  a 

objectos disponível gratuitamente para  todos os entusiastas e publico em geral que 

pretenda programar nela.  

Neste trabalho será apresentado um pequeno programa que basicamente faz a 

gestão de utilizadores. Tem a capacidade de adicionar, editar e eliminar uma conta de 

utilizador do seu sistema. 

O programa encontra‐se orientado para a simplicidade de introdução de dados 

e  para  a  facilidade  de manobra  dos mesmos.  Todas  as  validações  de  dados  estão 

incorporadas e todas as restrições de introdução estão limitadas ao mínimo. 

Este  trabalho  foi desenvolvido no âmbito da disciplina de Programação 1 e é 

todo ele direccionado para o meio académico. 

   

Page 4: Relatório Programação - Trabalho Pratico 2

Instituto Superior Politécnico Gaya

Pág. 4

Desenvolvimento  

• Linguagem C#  

Durante  o  desenvolvimento  da  plataforma  .NET,  a  Microsoft®,  em  1999, 

nomeou Anders Hejlsberg para criar uma nova  linguagem de programação designada 

por Cool. Mais tarde, em 2000, a quando da apresentação da plataforma na PDC1,  já 

terminada e pronta para  ser  implementada no mercado, a  linguagem anteriormente 

designada por Cool foi apresentada como C# e assim se começou uma nova filosofia de 

linguagens de programação.  

Esta  famosa  linguagem  de  programação  foi  desenvolvida  por  diversos 

programadores, mas o seu sucesso no meio profissional é atribuído a Anders que hoje 

é um distinto engenheiro da Microsoft. Anders é  também conhecido pela criação do 

Turbo Pascal e o Delphi. 

_________________________________________________________________ 

Curiosidade 

Muitos  pensam  que  o  #  do  C#  é  a  sobreposição  do  símbolo  +,  dando  a  ideia  que  é  uma continuação do C++, mas veio‐se a saber que esta ideia estava errada. O real sinal não era o # mas sim #.  Este  ultimo  è  um  símbolo  musical  que  aumenta  em  meio‐tom  uma  nota  musical.  Devido  a limitações de tabelas alfanuméricas, ficou normalizado pela ECMA2 ficaria C#. 

_________________________________________________________________ 

Desenvolvida  quase  do  zero,  esta  linguagem  possui  um  vasto  leque  de 

bibliotecas e a sua compatibilidade é enorme em relação aos sistemas operativos. 

Funcionando  numa  lógica  hierárquica,  o  C#  constitui  desde  as  operações 

básicas como a adição, multiplicação, subtracção e soma às mais complicadas e únicas 

como encapsulamentos e sobrecargas múltiplas. No C# não existe herança múltipla, ou 

seja cada classe só pode herdar uma e só uma classe, mantendo assim o código e a 

gestão  de  memória  organizada.  Possui  também  uma  gestão  de  memória  única 

denominada Colector de Lixo que recicla a memória e obtêm uma maior eficiência. 

No que diz  respeito a passagem de parâmetros, no C# existem dois  tipos de 

passagem,  nomeadamente,  passagem  por  valor  e  por  referência. Na  passagem  por 

1 Professional Developers Conference 2 European Computer Manufacturers Association

Page 5: Relatório Programação - Trabalho Pratico 2

Instituto Superior Politécnico Gaya

Pág. 5

valor, é feita uma cópia do argumento para o parâmetro do mesmo, assim garantimos 

que as alterações efectuadas dentro do parâmetro não alteram o valor do argumento 

externo.  Assim  mantemos  a  integridade  do  argumento  inicial  sempre  saudável. 

Falando  agora  da  passagem  por  referência,  pode‐mos  dizer  que  é  o  oposto  da 

passagem  por  valor.  Sendo  a  mais  utilizada  pelos  programadores  comuns,  na 

passagem por referência quando é alterado o valor dentro e fora do método.  

 

• Desempenho Global  

No desenvolvimento deste trabalho foram efectuadas várias pesquisas sobre o 

tema do trabalho e a  linguagem a ser utilizada.  Inicialmente ficou estabelecido que a 

construção  do  programa  simplesmente  deveria  executar  os  requisitos  pedidos,  não 

importando  a  organização,  o  design  nem  a  facilidade  de  utilização.  No  entanto, 

durante  a  rápida  evolução  do  trabalho,  foi  notado  que  era  possível  aperfeiçoar  o 

trabalho  e  facilitar  a  sua  visualização  e  manutenção.  Assim  depois  de  todos  os 

requisitos  essenciais  estarem  satisfeitos,  foi  implementado  um  design  para  boa 

interpretação e organizado todo o código para fácil leitura e percepção de como esta o 

programa elaborado. 

   

Page 6: Relatório Programação - Trabalho Pratico 2

 

 

1. P

2. D

3. E

4. Im

 

Pesquisa 

Desenho do

Esquematiza

mplementa

Instituto Su

s formulário

ação do pro

ção do cód

 

uperior Polité

os 

ograma 

igo 

écnico Gaya

• Fases de

Esquema d

e elabora

de desenvolvi

Pág. 6

ação 

mento 

Page 7: Relatório Programação - Trabalho Pratico 2

dese

prog

não 

remo

___

instr

prim

pesso

 

Todo  o 

nvolvido em

rama. A org

sejam  abe

over a ambi

 

 

________

Este  pro

uções são d

eira string 

oas. 

Segue o 

código  foi

mbora bási

ganização d

rtos  mais 

iguidade ne

_______

ograma  inic

dadas para o

que entra 

código font

Instituto Su

  desenvolv

co está mo

deste código

do  que  1 

este pequen

________

cia  pela  cla

o arranque 

por CMD. E

te documen

uperior Polité

vido  pelo  a

ontado de u

o esta tamb

formulário 

no programa

Esque

________

asse  progra

no mesmo

Esta é valid

ntado:

écnico Gaya

• E

autor  deste

uma  forma 

bém feita d

de  cada  v

a. 

ema de distrib

________

am,  ou  seja

. É na classe

dada,  tratad

Explicaçã

e  relatório.

que  limite 

e modo a q

vez.  Tentou

buição das cl

_______clas

a  é  aqui  q

e program q

do e  inserid

ão do cód

  O  código 

os “crache

que por exe

u‐se  ao  má

lasses

________ss Prog

ue  as  prim

que é atribu

da no vecto

 

Pág. 7

digo 

aqui 

s” do 

emplo 

áximo 

 

____ gram

meiras 

uída a 

or das 

Page 8: Relatório Programação - Trabalho Pratico 2

Instituto Superior Politécnico Gaya

Pág. 8

//Main do programa---------------------------------------------------------------------- class Program { public static void Main(string[] args) { //Com o try verifico se entra alguma string a partir do CMD try { //Atribuo a string vinda do CMD string[] vector1 = new string[2]; string[] vector2 = new string[2]; string[] vector3 = new string[2]; string[] vector4 = new string[2]; //Separo os cabeçalhos dos reais valores vector1 = Regex.Split(args[0], "="); vector2 = Regex.Split(args[1], "="); vector3 = Regex.Split(args[2], "="); vector4 = Regex.Split(args[3], "="); //Instancio o Vector para validar os tipos de dados int contador = 0; while (contador != 1000) { variaveis.vector[contador] = new variaveis.pessoa(); contador++; } //Adiciono a primeira linha de utilizadores aos correctos campos de pessoa //Utilizo if's para verificar em que posição estão os valores //ID if (vector1[0] == "id" || vector1[0] == "ID") { variaveis.vector[0].id = Convert.ToInt32(vector1[1]); } if (vector2[0] == "id" || vector2[0] == "ID") { variaveis.vector[0].id = Convert.ToInt32(vector2[1]); } if (vector3[0] == "id" || vector3[0] == "ID") { variaveis.vector[0].id = Convert.ToInt32(vector3[1]); } if (vector4[0] == "id" || vector4[0] == "ID") { variaveis.vector[0].id = Convert.ToInt32(vector4[1]); } //NOME if (vector1[0] == "nome" || vector1[0] == "NOME") { variaveis.vector[0].nome = vector1[1]; } if (vector2[0] == "nome" || vector2[0] == "NOME") { variaveis.vector[0].nome = vector2[1]; } if (vector3[0] == "nome" || vector3[0] == "NOME") { variaveis.vector[0].nome = vector3[1]; } if (vector4[0] == "nome" || vector4[0] == "NOME") { variaveis.vector[0].nome = vector4[1]; } //Password if (vector1[0] == "password" || vector1[0] == "PASSWORD") { variaveis.vector[0].password = vector1[1]; } if (vector2[0] == "password" || vector2[0] == "PASSWORD") { variaveis.vector[0].password = vector2[1]; } if (vector3[0] == "password" || vector3[0] == "PASSWORD") { variaveis.vector[0].password = vector3[1];

Page 9: Relatório Programação - Trabalho Pratico 2

Instituto Superior Politécnico Gaya

Pág. 9

} if (vector4[0] == "password" || vector4[0] == "PASSWORD") { variaveis.vector[0].password = vector4[1]; } //Login if (vector1[0] == "login" || vector1[0] == "LOGIN") { variaveis.vector[0].login = vector1[1]; } if (vector2[0] == "login" || vector2[0] == "LOGIN") { variaveis.vector[0].login = vector2[1]; } if (vector3[0] == "login" || vector3[0] == "LOGIN") { variaveis.vector[0].login = vector3[1]; } if (vector4[0] == "login" || vector4[0] == "LOGIN") { variaveis.vector[0].login = vector4[1]; } //Instancio e corro o formulário de abertura entrada inicio = new entrada(); Application.Run(inicio); Console.ReadKey(true); } //Se alguma linha der erros, ele executa o catch catch { MessageBox.Show("Atenção que ainda não carregou nenhum utilizador!"); int contador = 0; while (contador != 1000) { variaveis.vector[contador] = new variaveis.pessoa(); contador++; } variaveis.nr_pessoas = 0; entrada inicio = new entrada(); Application.Run(inicio); Console.ReadKey(true); } }

_____________________________________________________ public class variaveis

Nesta classe estão definidas todas as variaveis que vão ser globais ao programa 

todo,  ou  seja  todas  as  que  são  públicas.  Esta  classe  não  era  necessária  para  o 

funcionamento  do  programa,  porque mais  á  frente  vamos  ver  que  existem  outras 

variáveis  públicas  que  estão  dentro  de  outras  classes. O  intuito  da  sua  criação  era 

aglomerar as variáveis vitais do programa nesta classe, como por exemplo o vector das 

pessoas. 

Segue o código fonte devidamente documentado: 

 

//Criação da classe variaveis----------------------------------------------------------- public class variaveis { //Crio a minha variavel especial pessoa

Page 10: Relatório Programação - Trabalho Pratico 2

Instituto Superior Politécnico Gaya

Pág. 10

public class pessoa { public int id = 0; public string nome = ""; public string login = ""; public string password = ""; //Construo a variavel public pessoa() { id = 0; nome = ""; login = ""; password = ""; } } //Formulários - declaração (Serve para instanciar os formulários uma unica vez) public static manutencao formulario2 = new manutencao(); public static add_util ad_utiliz = new add_util(); public static alteracao altera = new alteracao(); //Criação do contador das pessoas da base de dados public static int nr_pessoas = 1; //Criação da variaves de armazenamento dos indexes das linhas public static int index = 0; //Criação do vector de armazenagem das pessoas public static pessoa[] vector = new pessoa[1000]; //Variavel que detecta formulários abertos public static int f_aberto = 0;

____________________________________________________________ public class add_util : Form

Nesta  classe  encontra‐se  somente  o  formulário  de  adição  manual  de 

utilizadores. Ao construir uma classe do tipo formulário é obrigatório declarar todos os 

componentes  que  necessitamos  dentro  do  formulário  e  depois  criar  a  classe 

construtora para que o nosso  formulário possa ser montado. Esta classe construtora 

vai dar forma aos componentes anteriormente declarados. 

Segue em seguida então o código declarado: 

 

//Criação do formulário de adição de utilizadores--------------------------------------- public class add_util : Form { //declaração dos componentes do formulário public static Button ad = new Button(); public static Button sair = new Button(); public static Label user = new Label(); public static Label pass = new Label(); public static Label pass2 = new Label(); public static Label id = new Label(); public static Label nome = new Label(); public static Label titulo = new Label(); public static TextBox usert = new TextBox(); public static TextBox passt = new TextBox(); public static TextBox pass2t = new TextBox(); public static TextBox idt = new TextBox(); public static TextBox nomet = new TextBox(); //Compor o formulário com os componentes anteriormente inseridos public add_util() { //designações

Page 11: Relatório Programação - Trabalho Pratico 2

Instituto Superior Politécnico Gaya

Pág. 11

titulo.Text = "Adição de utilizadores"; ad.Text = "Adicionar"; sair.Text = "Sair"; user.Text = "USER:"; pass.Text = "PASS:"; pass2.Text = "RE-PASS"; nome.Text = "NOME:"; id.Text = "ID:"; //fazer aparecer os componentes Controls.Add(titulo); Controls.Add(ad); Controls.Add(sair); Controls.Add(user); Controls.Add(pass); Controls.Add(pass2); Controls.Add(nome); Controls.Add(id); Controls.Add(usert); Controls.Add(passt); Controls.Add(pass2t); Controls.Add(nomet); Controls.Add(idt); //tamanhos & costomizações Size = new Size(400, 300); titulo.Size = new Size(400, 50); titulo.Font = new Font("verdana", 14); titulo.TextAlign = ContentAlignment.BottomCenter; sair.Size = new Size(100, 50); ad.Size = new Size(100, 50); id.Font = new Font("verdana", 10); user.Font = new Font("verdana", 10); pass.Font = new Font("verdana", 10); pass2.Font = new Font("verdana", 10); nome.Font = new Font("verdana", 10); usert.Size = new Size(100, 50); idt.Size = new Size(100, 50); passt.Size = new Size(100, 50); pass2t.Size = new Size(100, 50); nomet.Size = new Size(100, 50); //Localizações sair.Location = new Point(100, 200); ad.Location = new Point(200, 200); id.Location = new Point(100, 72); nome.Location = new Point(100, 92); user.Location = new Point(100, 112); pass.Location = new Point(100, 132); pass2.Location = new Point(100, 152); idt.Location = new Point(200, 72); nomet.Location = new Point(200, 92); usert.Location = new Point(200, 112); passt.Location = new Point(200, 132); pass2t.Location = new Point(200, 152); //Funções dos botões sair.Click += new EventHandler(sair_click); ad.Click += new EventHandler(ad_click); StartPosition = FormStartPosition.Manual; Location = new Point(400, 400); ControlBox = false; } //Accções do botão sair private void sair_click(object sender, EventArgs e) { this.Hide(); } //Accções do botão adicionar //Com os if's verifico a possivel existencia de erros e reporto ao utilizador private void ad_click(object sender, EventArgs e) { if (add_util.idt.Text != "" && add_util.usert.Text != "" && add_util.nomet.Text != "" && add_util.passt.Text != "" && add_util.pass2t.Text != "") { if (add_util.passt.Text == add_util.pass2t.Text && add_util.idt.Text != "0") { try

Page 12: Relatório Programação - Trabalho Pratico 2

Instituto Superior Politécnico Gaya

Pág. 12

{ variaveis.vector[variaveis.nr_pessoas].id = Convert.ToInt32(add_util.idt.Text); variaveis.vector[variaveis.nr_pessoas].login = add_util.usert.Text; variaveis.vector[variaveis.nr_pessoas].nome = add_util.nomet.Text; variaveis.vector[variaveis.nr_pessoas].password = add_util.passt.Text; variaveis.nr_pessoas++; add_util.idt.Text = ""; add_util.usert.Text = ""; add_util.nomet.Text = ""; add_util.passt.Text = ""; add_util.pass2t.Text = ""; } catch { MessageBox.Show("O ID tem de ser um numero diferente de 0!"); } if (variaveis.f_aberto == 1) { variaveis.formulario2.lista.Items.Clear(); int a = 0; while (a != (variaveis.nr_pessoas)) { variaveis.formulario2.lista.Items.Add(variaveis.vector[a].id + " - " + variaveis.vector[a].nome + " - " + variaveis.vector[a].login + " - " + variaveis.vector[a].password); a++; } } } else { MessageBox.Show("As password's não coincidem ou o id é 0"); } } else { MessageBox.Show("É necessário inserir todos os dados!"); } }

_____________________________________________________ public class manutencao : Form

Nesta classe tal como a anterior é do tipo Form. Segue exactamente os mesmos 

padroes explicados na classe anterior e aplica‐se ao  formulário da manutenção onde 

podemos editar e eliminar os utilizadores. 

Segue o código fonte explicado: 

 

//Criação do formulário de mantençã dos utilizadores------------------------------------ public class manutencao : Form { //Crio os componentes public Button eliminar = new Button(); public Button alterar = new Button(); public Button sair = new Button(); public ListBox lista = new ListBox(); public ComboBox ord_valor = new ComboBox(); public ComboBox ord_tipo = new ComboBox(); public Button ordenar = new Button();

Page 13: Relatório Programação - Trabalho Pratico 2

Instituto Superior Politécnico Gaya

Pág. 13

//Construir o formulário public manutencao() { StartPosition = FormStartPosition.Manual; Location = new Point(100, 100); //Tamanhos Size = new Size(300, 600); eliminar.Size = new Size(145, 50); alterar.Size = new Size(145, 50); ordenar.Size = new Size(145, 50); ord_tipo.Size = new Size(145, 25); lista.Size = new Size(285, 445); ord_valor.Size = new Size(145, 25); sair.Size = new Size(290, 50); //Localizações alterar.Location = new Point(0, 485); sair.Location = new Point(0, 535); ord_tipo.Location = new Point(0, 460); ord_valor.Location = new Point(0, 435); ordenar.Location = new Point(145, 435); eliminar.Location = new Point(145, 485); //Descrições dos objectos eliminar.Text = "Eliminar"; alterar.Text = "Alterar"; sair.Text = "Sair"; ord_tipo.Text = "por ordem:"; ord_valor.Text = "por valor de:"; ordenar.Text = "Ordenar"; //Atribuição dos controlos aos botoes Controls.Add(eliminar); Controls.Add(alterar); Controls.Add(sair); Controls.Add(ord_valor); Controls.Add(ord_tipo); Controls.Add(ordenar); Controls.Add(lista); //Desactivar os botões de minimizar, maximizar e fechar ControlBox = false; //Atribuir as funções dos botões sair.Click += new EventHandler(sair_click); alterar.Click += new EventHandler(alterar_click); eliminar.Click += new EventHandler(eliminar_click); ordenar.Click += new EventHandler(ordenar_click); //Atribuir valores ás ComboBox's ord_valor.Items.Add("ID"); ord_tipo.Items.Add("Crescente"); ord_tipo.Items.Add("Decrescente"); //Variavel de contagem para controlo do while seguinte int a = 0; //Atribuo valores á Lisbox while (a != (variaveis.nr_pessoas)) { lista.Items.Add(variaveis.vector[a].id + " - " + variaveis.vector[a].nome + " - " + variaveis.vector[a].login + " - " + variaveis.vector[a].password); a++; } } //Acções do botão ordenar private void ordenar_click(object sender, EventArgs e) { //Ordenação por tipo Crescente e Valor ID if (ord_tipo.Text == "Crescente" && ord_valor.Text == "ID") { //Contadores e variaveis necessárias int a = 0; int aa = 0; int aaa = 0; string nome; string login; string pass; while (a != (variaveis.nr_pessoas)) {

Page 14: Relatório Programação - Trabalho Pratico 2

Instituto Superior Politécnico Gaya

Pág. 14

aa = a; while (aa != variaveis.nr_pessoas) { if (variaveis.vector[a].id > variaveis.vector[aa].id) { aaa = variaveis.vector[a].id; nome = variaveis.vector[a].nome; login = variaveis.vector[a].login; pass = variaveis.vector[a].password; variaveis.vector[a].id = variaveis.vector[aa].id; variaveis.vector[a].nome = variaveis.vector[aa].nome; variaveis.vector[a].password = variaveis.vector[aa].password; variaveis.vector[a].login = variaveis.vector[aa].login; variaveis.vector[aa].id = aaa; variaveis.vector[aa].nome = nome; variaveis.vector[aa].login = login; variaveis.vector[aa].password = pass; } aa++; } a++; } //Variavel de controlo do while a = 0; //Limpeza da ListBox lista.Items.Clear(); //Atribuir valores ordenados á ListBox while (a != (variaveis.nr_pessoas)) { lista.Items.Add(variaveis.vector[a].id + " - " + variaveis.vector[a].nome + " - " + variaveis.vector[a].login + " - " + variaveis.vector[a].password); a++; } } //Ordenação por tipo Decrescente e Valor ID if (ord_tipo.Text == "Decrescente" && ord_valor.Text == "ID") { //Contadores e variaveis necessárias int a = 0; int aa = 0; int aaa = 0; string nome; string login; string pass; while (a != (variaveis.nr_pessoas)) { aa = a; while (aa != variaveis.nr_pessoas) { if (variaveis.vector[a].id < variaveis.vector[aa].id) { aaa = variaveis.vector[a].id; nome = variaveis.vector[a].nome; login = variaveis.vector[a].login; pass = variaveis.vector[a].password; variaveis.vector[a].id = variaveis.vector[aa].id; variaveis.vector[a].nome = variaveis.vector[aa].nome; variaveis.vector[a].password = variaveis.vector[aa].password; variaveis.vector[a].login = variaveis.vector[aa].login; variaveis.vector[aa].id = aaa; variaveis.vector[aa].nome = nome; variaveis.vector[aa].login = login; variaveis.vector[aa].password = pass; } aa++; } a++; } //Variavel de controlo do while a = 0; //Limpar a ListBox lista.Items.Clear();

Page 15: Relatório Programação - Trabalho Pratico 2

Instituto Superior Politécnico Gaya

Pág. 15

//Atribuir os valores ordenados while (a != (variaveis.nr_pessoas)) { lista.Items.Add(variaveis.vector[a].id + " - " + variaveis.vector[a].nome + " - " + variaveis.vector[a].login + " - " + variaveis.vector[a].password); a++; } } } //Acções do botão eliminar private void eliminar_click(object sender, EventArgs e) { //Com este try, remove-se o erro de "crach" quando estou a tentar eliminar algo que ainda não foi seleccionado try { variaveis.index = variaveis.formulario2.lista.SelectedIndex; variaveis.vector[variaveis.index].id = 0; variaveis.vector[variaveis.index].nome = ""; variaveis.vector[variaveis.index].login = ""; variaveis.vector[variaveis.index].password = ""; int a = 0; while (a != 999) { if (variaveis.vector[a].id == 0 && variaveis.vector[a + 1].id != 0) { variaveis.vector[a].id = variaveis.vector[a + 1].id; variaveis.vector[a].nome = variaveis.vector[a + 1].nome; variaveis.vector[a].password = variaveis.vector[a + 1].password; variaveis.vector[a].login = variaveis.vector[a + 1].login; variaveis.vector[a + 1].id = 0; variaveis.vector[a + 1].nome = ""; variaveis.vector[a + 1].password = ""; variaveis.vector[a + 1].login = ""; } a++; } variaveis.nr_pessoas--; variaveis.formulario2.lista.Items.Clear(); a = 0; while (a != (variaveis.nr_pessoas)) { variaveis.formulario2.lista.Items.Add(variaveis.vector[a].id + " - " + variaveis.vector[a].nome + " - " + variaveis.vector[a].login + " - " + variaveis.vector[a].password); a++; } } catch { MessageBox.Show("Tem de seleccionar o item que pretende modificar ou eliminar!"); } } //Acções do botão sair private void sair_click(object sender, EventArgs e) { variaveis.f_aberto = 0; this.Hide(); } //Acções do botão aterar private void alterar_click(object sender, EventArgs e) { //Este try elimina o crach quando tentamos alterar um valor que ainda não seleccionamos try { variaveis.index = variaveis.formulario2.lista.SelectedIndex; variaveis.altera.Show(); variaveis.ad_utiliz.Hide(); variaveis.formulario2.Hide(); alteracao.idt.Text = Convert.ToString(variaveis.vector[variaveis.index].id);

Page 16: Relatório Programação - Trabalho Pratico 2

Instituto Superior Politécnico Gaya

Pág. 16

alteracao.nomet.Text = Convert.ToString(variaveis.vector[variaveis.index].nome); alteracao.usert.Text = Convert.ToString(variaveis.vector[variaveis.index].login); alteracao.pass2t.Text = Convert.ToString(variaveis.vector[variaveis.index].password); alteracao.passt.Text = Convert.ToString(variaveis.vector[variaveis.index].password); } catch { variaveis.altera.Hide(); MessageBox.Show("Tem de seleccionar o item que pretende modificar ou eliminar!"); } } } 

_____________________________________________________ public class alteracao : Form

Este  formulário  tem  a  única  função  de  alterar  os  dados  de  um  utilizador 

previamente seleccionado, ou seja, é seleccionado o utilizador a alterar e a informação 

relativa  ao  utilizador  seleccionado  aparece  neste  formulário.  Depois  dos  dados 

estarem alterados são submetidos novamente a critérios de inserção. 

Código fonte documentado: 

 

//Criação do formulário de alteração---------------------------------------------------- public class alteracao : Form { //declaração dos componentes do formulário Button ad = new Button(); Button sair = new Button(); Label user = new Label(); Label pass = new Label(); Label pass2 = new Label(); Label id = new Label(); Label nome = new Label(); Label titulo = new Label(); public static TextBox usert = new TextBox(); public static TextBox passt = new TextBox(); public static TextBox pass2t = new TextBox(); public static TextBox idt = new TextBox(); public static TextBox nomet = new TextBox(); //Compor o formulário com os componentes anteriormente inseridos public alteracao() { //designações titulo.Text = "Alteração de utilizadores"; ad.Text = "Alterar"; sair.Text = "Sair"; user.Text = "USER:"; pass.Text = "PASS:"; pass2.Text = "RE-PASS"; nome.Text = "NOME:"; id.Text = "ID:"; //fazer aparecer os componentes Controls.Add(titulo); Controls.Add(ad); Controls.Add(sair); Controls.Add(user); Controls.Add(pass);

Page 17: Relatório Programação - Trabalho Pratico 2

Instituto Superior Politécnico Gaya

Pág. 17

Controls.Add(pass2); Controls.Add(nome); Controls.Add(id); Controls.Add(usert); Controls.Add(passt); Controls.Add(pass2t); Controls.Add(nomet); Controls.Add(idt); //tamanhos & costomizações Size = new Size(400, 300); titulo.Size = new Size(400, 50); titulo.Font = new Font("verdana", 14); titulo.TextAlign = ContentAlignment.BottomCenter; sair.Size = new Size(100, 50); ad.Size = new Size(100, 50); id.Font = new Font("verdana", 10); user.Font = new Font("verdana", 10); pass.Font = new Font("verdana", 10); pass2.Font = new Font("verdana", 10); nome.Font = new Font("verdana", 10); usert.Size = new Size(100, 50); idt.Size = new Size(100, 50); passt.Size = new Size(100, 50); pass2t.Size = new Size(100, 50); nomet.Size = new Size(100, 50); //Localizações sair.Location = new Point(100, 200); ad.Location = new Point(200, 200); id.Location = new Point(100, 72); nome.Location = new Point(100, 92); user.Location = new Point(100, 112); pass.Location = new Point(100, 132); pass2.Location = new Point(100, 152); idt.Location = new Point(200, 72); nomet.Location = new Point(200, 92); usert.Location = new Point(200, 112); passt.Location = new Point(200, 132); pass2t.Location = new Point(200, 152); //Funções dos botões sair.Click += new EventHandler(sair_click); ad.Click += new EventHandler(ad_click); StartPosition = FormStartPosition.Manual; Location = new Point(400, 100); ControlBox = false; } //Acções do botão sair private void sair_click(object sender, EventArgs e) { this.Hide(); } //Acções do botão adicionar private void ad_click(object sender, EventArgs e) { if (idt.Text != "" && nomet.Text != "" && usert.Text != "" && passt.Text != "" && passt.Text == pass2t.Text) { variaveis.vector[variaveis.index].id = Convert.ToInt32(idt.Text); variaveis.vector[variaveis.index].password = passt.Text; variaveis.vector[variaveis.index].nome = nomet.Text; variaveis.vector[variaveis.index].login = usert.Text; MessageBox.Show("Dados alterados para o utilizador: " + nomet.Text); variaveis.formulario2.lista.Items.Clear(); int a = 0; while (a != (variaveis.nr_pessoas)) { variaveis.formulario2.lista.Items.Add(variaveis.vector[a].id + " - " + variaveis.vector[a].nome + " - " + variaveis.vector[a].login + " - " + variaveis.vector[a].password); a++; } this.Hide(); } else {

Page 18: Relatório Programação - Trabalho Pratico 2

Instituto Superior Politécnico Gaya

Pág. 18

if (passt.Text != pass2t.Text) { MessageBox.Show("Password's não coincidem!"); } else { MessageBox.Show("Os dados não estão todos inseridos!"); } } }

_____________________________________________________ public class entrada : Form

Este  formulário  tem  a  função  de  direccionar  as  vontades  do  utilizador. 

Contendo três botões de controlo, este formulário serve de  interface primária para a 

interacção com o programa. 

Segue o código fonte devidamente documentado: 

 

//Criação do formulario de abertura----------------------------------------------------- public class entrada : Form { //Declaração dos componentes do formulário public Button util = new Button(); public Button man = new Button(); public Button sair = new Button(); public Label titulo = new Label(); //Compor o formulário com o que queremos e o que já foi declarado public entrada() { //tamanho do formulário Size = new Size(400, 300); //fazer aparecer os componentes Controls.Add(util); Controls.Add(man); Controls.Add(titulo); Controls.Add(sair); //tamanhos & costomizações util.Size = new Size(200, 100); man.Size = new Size(185, 100); sair.Size = new Size(385, 65); //localizações util.Location = new Point(0, 120); man.Location = new Point(200, 120); sair.Location = new Point(0, 220); //descrições util.Text = "Adicionar"; sair.Text = "Fechar Aplicação"; man.Text = "Manutenção"; titulo.Text = ("Trabalho Prático 2"); titulo.Size = new Size(400, 50); titulo.Font = new Font("verdana", 14); titulo.TextAlign = ContentAlignment.BottomCenter; util.Click += new EventHandler(ad_click); man.Click += new EventHandler(man_click); sair.Click += new EventHandler(sair_click); StartPosition = FormStartPosition.Manual; Location = new Point(400, 100); ControlBox = false; } //Acções do botão adicionar private void ad_click(object sender, EventArgs e) {

Page 19: Relatório Programação - Trabalho Pratico 2

variavaria }

 

form

prog

vari } //Acções private { Appl } //Acções private {

vari vari int whil {

aveis.vectoraveis.vector } vari }

} } 

O progra

ma básica e f

rama. 

aveis.ad_ut

do botão svoid sair_c

ication.Exi

do botão mvoid man_cl

aveis.formuaveis.formua = 0; e (a != (va

variaveis.fr[a].nome + r[a].passwora++;

aveis.f_abe

ama, na vist

fácil. A ima

Instituto Su

iliz.Show();

air lick(object

t();

anutenção ick(object s

lario2.Showlario2.lista

riaveis.nr_p

ormulario2.l" - " + varid);

rto = 1;

ta do utiliza

gem a segu

uperior Polité

;

sender, Eve

sender, Even

(); a.Items.Clea

pessoas))

lista.Items.iaveis.vecto

• Esque

ador comum

uir demonst

écnico Gaya

entArgs e)

ntArgs e)

ar();

.Add(variaveor[a].login

ema de fu

m encontra

tra como o 

eis.vector[a+ " - " +

unções d

a‐se esquem

utilizador v

P

a].id + " -

do progra

matizado de

vê as funçõ

Pág. 19

" +

ama 

e uma 

es do 

 

Page 20: Relatório Programação - Trabalho Pratico 2

Instituto Superior Politécnico Gaya

Pág. 20

Conclusões  

• Aprendizagem adquirida  

O desenvolvimento deste trabalho foi rico em aprendizagem. A linguagem C# é 

muito  vasta  e  complexa,  mas  ao  progredir,  o  trabalho  requereu  uma  constante 

pesquisa de material  e  funções para  satisfazer  as dificuldades que  iam  aparecendo. 

Foram  estudadas  matérias  desde  tipos  de  variáveis  a  funções  de  separação  de 

caracteres.  

No  seu  desenvolvimento,  o  trabalho  foi  ganhando  forma  e,  como 

consequência, foi necessário cada vez mais trabalho de pesquisa. 

Contudo, o básico do C# ficou sabido e aplicado neste programa.  

 

• Dificuldades ultrapassadas  

As dificuldades  foram muitas mas, como tudo na vida,  foi possível ultrapassar 

com algum esforço.  

A  primeira  dificuldade  encontrada  foi  em  criar  a  classe  “pessoa”. Depois  de 

alguma pesquisa e de ver alguns exemplos, foi possível implementar da melhor forma 

o código de criação desta classe. Constituída por  três variáveis string e uma variável 

integer, esta classe composta permite o armazenamento de utilizadores. 

Seguidamente apareceu a dificuldade de  instanciar o vector das pessoas. Este 

vector  é  um  vector  composto  pelas  quatro  variáveis  definidas  na  classe  pessoa,  ou 

seja, cada posição tem 4 variáveis. Uma variável se não for instanciada não armazena 

dados e dá o erro de variável nula. Então para corrigir este erro, foi necessário colocar 

um ciclo a instanciar o vector desde a posição zero. 

Depois  de  ultrapassado  o  problema  das  instâncias  do  vector,  surgiram 

problemas  relativos  a  validações  de  dados  e  inserções  proibidas,  por  exemplo 

inserções de  texto em campos de valor  inteiro. Foi possível corrigir estes problemas, 

que  não  eram  poucos,  com  as  intrusões  de  decisão  IF  e  TRY.  Estas  instruções 

permitiram negar os acessos e avisar o utilizador do erro que estava a cometer. 

Page 21: Relatório Programação - Trabalho Pratico 2

Instituto Superior Politécnico Gaya

Pág. 21

Por fim surgiu o problema da inserção do primeiro registo do vector pela linha 

de  comandos.  Este  problema  foi  resolvido  em  duas  fases,  numa  primeira  fase  foi 

estudada a forma de inserir os valores pela linha de comandos para uma variável. Esta 

fase foi ultrapassada  introduzindo cada variável de entrada numa variável  interna, ou 

seja, por exemplo  id=2 era o valor de uma variável. Numa segunda e última  fase,  foi 

estudada a maneira de  tratar e  introduzir os dados os dados de  forma definitiva no 

vector das pessoas. Assim depois de alguma pesquisa, foi aplicado o Regex.Split para 

separar o cabeçalho do conteúdo (id=2) e com instruções de decisão foram tratados os 

dados para as variáveis certas. 

Ultrapassadas as dificuldades,  foi possível aperfeiçoar o  trabalho e do  código 

fonte de modo a ser o mais eficiente possível. 

 

Page 22: Relatório Programação - Trabalho Pratico 2

Instituto Superior Politécnico Gaya

Pág. 22

Referencias Bibliográficas 

1. http://pt.wikipedia.org/wiki/C_Sharp 2. http://msdn.microsoft.com/en-us/vcsharp/default.aspx 3. http://msdn.microsoft.com/en-

us/library/system.text.regularexpressions.regex.split.aspx 4. http://msdn.microsoft.com/en-us/library/aa332139(VS.71).aspx 5. http://www.devarticles.com/c/a/C-Sharp/Introduction-to-Objects-and-

Classes-in-C-Sharp-Part-2/

Page 23: Relatório Programação - Trabalho Pratico 2

Instituto Superior Politécnico Gaya

Pág. 23

Este  trabalho  é  exclusivamente  para  uso  académico  e  focalizado  para  a disciplina de Programação 1. 

Page 24: Relatório Programação - Trabalho Pratico 2

Instituto Superior Politécnico Gaya

Pág. 24