Você está na página 1de 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 
Instituto Superior Politécnico Gaya

Í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 

Pág. 2
Instituto Superior Politécnico Gaya

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. 
   

Pág. 3
Instituto Superior Politécnico Gaya

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 
2
limitações de tabelas alfanuméricas, ficou normalizado pela ECMA  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

Pág. 4
Instituto Superior Politécnico Gaya

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. 
   

Pág. 5
Instituto Suuperior Politéécnico Gaya

• Fases dee elaboraação 
 
1. Pesquisa 
P
2. Desenho do
D s formulário
os 
3. Esquematiza
E ação do pro
ograma 
4. Im
mplementação do código 
 

Esquema d
de desenvolvimento 
   

Pág. 6
Instituto Suuperior Politéécnico Gaya

• Explicaçã
E digo 
ão do cód
 
Todo  o  código  foi  desenvolvvido  pelo  autor 
a destee  relatório.  O  código  aqui 
desenvolvido em
mbora básico está mo
ontado de u
uma forma  que limite  os “craches” do 
programa. A orgganização d
deste código
o esta tamb
bém feita de modo a q
que por exe
emplo 
não  sejam  abertos  mais  do  que  1  formulário  de  cada  vez. 
v Tentou
u‐se  ao  mááximo 
remo
over a ambiiguidade neeste pequen
no programaa. 
 

Esqueema de distrib
buição das cllasses  
 

__________________________________
_______________________
____ 
clas
ss Prog
gram

Este  pro
ograma  iniccia  pela  claasse  prograam,  ou  sejaa  é  aqui  que  as  prim
meiras 
instruções são d
dadas para o
o arranque no mesmo. É na classee program q
que é atribu
uída a 
primeira  string  que  entra  por  CMD.  Esta 
E é  valid
dada,  tratad
do  e  inserid
da  no  vecto
or  das 
pesso
oas. 
Segue o código fontte documen
ntado:  

Pág. 7
Instituto Superior Politécnico Gaya

//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];

Pág. 8
Instituto Superior Politécnico Gaya

}
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

Pág. 9
Instituto Superior Politécnico Gaya

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

Pág. 10
Instituto Superior Politécnico Gaya

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

Pág. 11
Instituto Superior Politécnico Gaya

{
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();

Pág. 12
Instituto Superior Politécnico Gaya

//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))
{

Pág. 13
Instituto Superior Politécnico Gaya

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();

Pág. 14
Instituto Superior Politécnico Gaya

//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);

Pág. 15
Instituto Superior Politécnico Gaya

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);

Pág. 16
Instituto Superior Politécnico Gaya

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
{

Pág. 17
Instituto Superior Politécnico Gaya

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)
{

Pág. 18
Instituto Suuperior Politéécnico Gaya

variaveis.ad_utiliz.Show();
;
}
//Acções do botão sair
private void sair_click(object sender, Eve
entArgs e)
{
Application.Exit();
}
//Acções do botão manutenção
private void man_click(object sender,
s Even
ntArgs e)
{

variaveis.formulario2.Show();
variaveis.formulario2.listaa.Items.Clea
ar();
int a = 0;
while (a != (variaveis.nr_ppessoas))
{
variaveis.formulario2.l
lista.Items.
.Add(variave
eis.vector[a
a].id + " - " +
varia
aveis.vector
r[a].nome + " - " + variiaveis.vecto
or[a].login + " - " +
varia
aveis.vector
r[a].password);
a++;
}
variaveis.f_aberto = 1;
}
}

 
• Esqueema de fuunções ddo prograama 

O prograama, na vistta do utilizaador comum
m encontraa‐se esquem
matizado de
e uma 
form
ma básica e ffácil. A imagem a segu
uir demonsttra como o  utilizador vvê as funções do 
programa. 

Pág.
P 19
Instituto Superior Politécnico Gaya

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. 

Pág. 20
Instituto Superior Politécnico Gaya

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. 
 

Pág. 21
Instituto Superior Politécnico Gaya

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/

Pág. 22
Instituto Superior Politécnico Gaya

Este  trabalho  é  exclusivamente  para  uso  académico  e  focalizado  para  a 


disciplina de Programação 1. 

Pág. 23
Instituto Superior Politécnico Gaya

Pág. 24