Ferramentas de Usuário

Ferramentas de Site


dev_geral:pascal:tutorial:anexos:des5

Diferenças

Esta página mostra as diferenças entre as duas revisões da página.

Links para esta vista de comparação

dev_geral:pascal:tutorial:anexos:des5 [2012/11/09 23:05]
thoga31 Page moved from dev_geral:pascal:tutorial_2010:anexos:des5 to dev_geral:pascal:tutorial:anexos:des5
dev_geral:pascal:tutorial:anexos:des5 [2018/05/14 21:37]
Linha 1: Linha 1:
-====== Desafio 5 - proposta de resolução avançada ====== 
-No âmbito [[http://www.portugal-a-programar.org/forum/index.php/topic,63958.0.html|deste desafio]] colocado junto dos utilizadores de Pascal e Delphi do P@P, o membro [[http://www.portugal-a-programar.org/forum/index.php?action=profile;u=19288|nunopicado]] propôs a seguinte proposta de resolução que respeita as normas, mas que recorre a métodos não abordados ou até ao momento em que o Desafio 5 é colocado ou em todo o Tutorial.\\ 
-\\ 
-<code pascal> 
-program Desafio5; 
  
-{$APPTYPE CONSOLE} 
- 
-uses 
-  SysUtils, IniFiles, Crt; 
- 
-type // Record DB 
-    TEuroPass = Record 
-      Pessoal:Record 
-        Nome, 
-        Morada, 
-        Telefone, 
-        Fax, 
-        Email, 
-        Nacionalidade, 
-        DataNascimento, 
-        Sexo:String; 
-      End; 
-      EmpregoPretendido:String; 
-      Experiencia:Record 
-        Datas, 
-        Cargo, 
-        Actividades, 
-        Empregador, 
-        TipoEmpresa:String; 
-      End; 
-      Formacao:Record 
-        Datas, 
-        Designacao, 
-        Disciplinas, 
-        Organizacao, 
-        Nivel:String; 
-      End; 
- 
-    End; 
- 
-var 
-   CV:TEuroPass;  // Record 
-   fCV:TIniFile;  // Ficheiro de dados 
- 
-procedure SaveCV(FileName:String); 
-// Guarda o record num ficheiro 
-begin 
-     fCV:=TIniFile.Create(FileName); 
-     try 
-        fCV.WriteString('Pessoal','Nome',CV.Pessoal.Nome); 
-        fCV.WriteString('Pessoal','Morada',CV.Pessoal.Morada); 
-        fCV.WriteString('Pessoal','Telefone',CV.Pessoal.Telefone); 
-        fCV.WriteString('Pessoal','Fax',CV.Pessoal.Fax); 
-        fCV.WriteString('Pessoal','Email',CV.Pessoal.Email); 
-        fCV.WriteString('Pessoal','Nacionalidade',CV.Pessoal.Nacionalidade); 
-        fCV.WriteString('Pessoal','DataNascimento',CV.Pessoal.DataNascimento); 
-        fCV.WriteString('Pessoal','Sexo',CV.Pessoal.Sexo); 
-        fCV.WriteString('Comum','EmpregoPretendido',CV.EmpregoPretendido); 
-        fCV.WriteString('Experiencia','Datas',CV.Experiencia.Datas); 
-        fCV.WriteString('Experiencia','Cargo',CV.Experiencia.Cargo); 
-        fCV.WriteString('Experiencia','Actividades',CV.Experiencia.Actividades); 
-        fCV.WriteString('Experiencia','Empregador',CV.Experiencia.Empregador); 
-        fCV.WriteString('Experiencia','TipoEmpresa',CV.Experiencia.TipoEmpresa); 
-        fCV.WriteString('Formacao','Datas',CV.Formacao.Datas); 
-        fCV.WriteString('Formacao','Designacao',CV.Formacao.Designacao); 
-        fCV.WriteString('Formacao','Disciplinas',CV.Formacao.Disciplinas); 
-        fCV.WriteString('Formacao','Organizacao',CV.Formacao.Organizacao); 
-        fCV.WriteString('Formacao','Nivel',CV.Formacao.Nivel); 
-     finally 
-        fCV.Free; 
-     end; 
-end; 
- 
-procedure LoadCV(FileName:String); 
-// Lê os dados de um ficheiro para o record 
-begin 
-     fCV:=TIniFile.Create(FileName); 
-     try 
-        CV.Pessoal.Nome:=fCV.ReadString('Pessoal','Nome',''); 
-        CV.Pessoal.Morada:=fCV.ReadString('Pessoal','Morada',''); 
-        CV.Pessoal.Telefone:=fCV.ReadString('Pessoal','Telefone',''); 
-        CV.Pessoal.Fax:=fCV.ReadString('Pessoal','Fax',''); 
-        CV.Pessoal.Email:=fCV.ReadString('Pessoal','Email',''); 
-        CV.Pessoal.Nacionalidade:=fCV.ReadString('Pessoal','Nacionalidade',''); 
-        CV.Pessoal.DataNascimento:=fCV.ReadString('Pessoal','DataNascimento',''); 
-        CV.Pessoal.Sexo:=fCV.ReadString('Pessoal','Sexo',''); 
-        CV.EmpregoPretendido:=fCV.ReadString('Comum','EmpregoPretendido',''); 
-        CV.Experiencia.Datas:=fCV.ReadString('Experiencia','Datas',''); 
-        CV.Experiencia.Cargo:=fCV.ReadString('Experiencia','Cargo',''); 
-        CV.Experiencia.Actividades:=fCV.ReadString('Experiencia','Actividades',''); 
-        CV.Experiencia.Empregador:=fCV.ReadString('Experiencia','Empregador',''); 
-        CV.Experiencia.TipoEmpresa:=fCV.ReadString('Experiencia','TipoEmpresa',''); 
-        CV.Formacao.Datas:=fCV.ReadString('Formacao','Datas',''); 
-        CV.Formacao.Designacao:=fCV.ReadString('Formacao','Designacao',''); 
-        CV.Formacao.Disciplinas:=fCV.ReadString('Formacao','Disciplinas',''); 
-        CV.Formacao.Organizacao:=fCV.ReadString('Formacao','Organizacao',''); 
-        CV.Formacao.Nivel:=fCV.ReadString('Formacao','Nivel',''); 
-     finally 
-        fCV.Free; 
-     end; 
-end; 
- 
-procedure WriteXY(Text:String;X,Y:Byte;Align:Char); 
-// Escreve uma string na posição indicada, alinhando conforme o estabelecido (E = Esquerda, C = Centro, D = Direita) 
-begin 
-     case Align of 
-          'C':X:=X-(Length(Text) div 2); 
-          'D':X:=X-Length(Text); 
-     end; 
-     GotoXY(X,Y); 
-     Write(Text); 
-end; 
- 
-procedure ReadXY(var Text:String;X,Y:Byte); 
-// Lê uma string numa determinada posição. Se nada for inserido, assume o valor preexistente 
-var 
-   s:String; 
-begin 
-     GotoXY(X,Y); 
-     Readln(s); 
-     if s<>'' then Text:=s; 
-     GotoXY(X,Y); 
-end; 
- 
-Procedure HLine(x1,y,x2:Byte); 
-// Desenha uma linha horizontal 
-var 
-   x:byte; 
-begin 
-     for x := x1 to x2 do 
-         WriteXY('=',x,y,'E'); 
-end; 
- 
-procedure InitCV; 
-// Inicializa o record 
-begin 
-     with CV do 
-          begin 
-              Pessoal.Nome:=''; 
-              Pessoal.Morada:=''; 
-              Pessoal.Telefone:=''; 
-              Pessoal.Fax:=''; 
-              Pessoal.Email:=''; 
-              Pessoal.Nacionalidade:=''; 
-              Pessoal.DataNascimento:=''; 
-              Pessoal.Sexo:=''; 
-              EmpregoPretendido:=''; 
-              Experiencia.Datas:=''; 
-              Experiencia.Cargo:=''; 
-              Experiencia.Actividades:=''; 
-              Experiencia.Empregador:=''; 
-              Experiencia.TipoEmpresa:=''; 
-              Formacao.Datas:=''; 
-              Formacao.Designacao:=''; 
-              Formacao.Disciplinas:=''; 
-              Formacao.Organizacao:=''; 
-              Formacao.Nivel:=''; 
-          end; 
-end; 
- 
-procedure EditaCV; 
-// Edita um CV 
-// Se encontrar um CV para o nome inserido, recolhe os valores dos restantes campos para consulta e/ou edição 
-var 
-   TitleX:Byte; 
-   SaveOP:Char; 
-begin 
-     TitleX:=17; 
-     Repeat 
-           InitCV; 
- 
-           // Desenha os campos 
-           ClrScr; 
-           TextColor(15); 
-           WriteXY('EuroPass Editor v1',2,1,'E'); 
-           WriteXY('Experiencia profissional',3,10,'E'); 
-           WriteXY('Educacao/Formacao',3,15,'E'); 
-           HLine(2,2,79); 
-           TextColor(14); 
-           WriteXY('Nome:',TitleX,3,'D'); 
-           WriteXY('Morada:',TitleX,4,'D'); 
-           WriteXY('Telefone:',TitleX,5,'D'); 
-           WriteXY('Fax:',TitleX+20,5,'D'); 
-           WriteXY('Email:',TitleX+40,5,'D'); 
-           WriteXY('Nacionalidade:',TitleX,6,'D'); 
-           WriteXY('Nascimento:',TitleX+30,6,'D'); 
-           WriteXY('Sexo (M/F):',TitleX+58,6,'D'); 
-           WriteXY('Emprego Pretendido:',TitleX+5,8,'D'); 
-           WriteXY('Datas:',TitleX,11,'D'); 
-           WriteXY('Cargo:',TitleX+40,11,'D'); 
-           WriteXY('Actividades:',TitleX,12,'D'); 
-           WriteXY('Empregador:',TitleX+40,12,'D'); 
-           WriteXY('Tipo de Empresa:',TitleX+40,13,'D'); 
-           WriteXY('Datas:',TitleX,16,'D'); 
-           WriteXY('Designacao:',TitleX+40,16,'D'); 
-           WriteXY('Disciplinas:',TitleX,17,'D'); 
-           WriteXY('Organizacao:',TitleX+40,18,'D'); 
-           WriteXY('Nível de Formacao:',TitleX+40,18,'D'); 
-           WriteXY('Guardar (S/N): ',76,25,'D'); 
-           TextColor(7); 
- 
-           // Lê o nome 
-           ReadXY(CV.Pessoal.Nome,TitleX+1,3); 
-           // Se não for inserido um nome, termina o programa 
-           if CV.Pessoal.Nome='' then break; 
- 
-           // Se existir um CV para o nome inserido... 
-           if FileExists(ExtractFilePath(ParamStr(0))+'\CV'+CV.Pessoal.Nome+'.TXT') 
-              then begin 
-                        //... faz a leitura para o record 
-                        LoadCV(ExtractFilePath(ParamStr(0))+'\CV'+CV.Pessoal.Nome+'.TXT'); 
- 
-                        // Apresenta os valores 
-                        WriteXY(CV.Pessoal.Morada,TitleX+1,4,'E'); 
-                        WriteXY(CV.Pessoal.Telefone,TitleX+1,5,'E'); 
-                        WriteXY(CV.Pessoal.Fax,TitleX+21,5,'E'); 
-                        WriteXY(CV.Pessoal.Email,TitleX+41,5,'E'); 
-                        WriteXY(CV.Pessoal.Nacionalidade,TitleX+1,6,'E'); 
-                        WriteXY(CV.Pessoal.DataNascimento,TitleX+31,6,'E'); 
-                        WriteXY(CV.Pessoal.Sexo,TitleX+59,6,'E'); 
-                        WriteXY(CV.EmpregoPretendido,TitleX+6,8,'E'); 
-                        WriteXY(CV.Experiencia.Datas,TitleX+1,11,'E'); 
-                        WriteXY(CV.Experiencia.Cargo,TitleX+41,11,'E'); 
-                        WriteXY(CV.Experiencia.Actividades,TitleX+1,12,'E'); 
-                        WriteXY(CV.Experiencia.Empregador,TitleX+41,12,'E'); 
-                        WriteXY(CV.Experiencia.TipoEmpresa,TitleX+41,13,'E'); 
-                        WriteXY(CV.Formacao.Datas,TitleX+1,16,'E'); 
-                        WriteXY(CV.Formacao.Designacao,TitleX+41,16,'E'); 
-                        WriteXY(CV.Formacao.Disciplinas,TitleX+1,17,'E'); 
-                        WriteXY(CV.Formacao.Organizacao,TitleX+41,18,'E'); 
-                        WriteXY(CV.Formacao.Nivel,TitleX+41,18,'E'); 
-                   end; 
- 
-           // Lê os novos valores para cada campo (<enter> mantém o valor inalterado) 
-           ReadXY(CV.Pessoal.Morada,TitleX+1,4); 
-           ReadXY(CV.Pessoal.Telefone,TitleX+1,5); 
-           ReadXY(CV.Pessoal.Fax,TitleX+21,5); 
-           ReadXY(CV.Pessoal.Email,TitleX+41,5); 
-           ReadXY(CV.Pessoal.Nacionalidade,TitleX+1,6); 
-           ReadXY(CV.Pessoal.DataNascimento,TitleX+31,6); 
-           ReadXY(CV.Pessoal.Sexo,TitleX+59,6); 
-           ReadXY(CV.EmpregoPretendido,TitleX+6,8); 
-           ReadXY(CV.Experiencia.Datas,TitleX+1,11); 
-           ReadXY(CV.Experiencia.Cargo,TitleX+41,11); 
-           ReadXY(CV.Experiencia.Actividades,TitleX+1,12); 
-           ReadXY(CV.Experiencia.Empregador,TitleX+41,12); 
-           ReadXY(CV.Experiencia.TipoEmpresa,TitleX+41,13); 
-           ReadXY(CV.Formacao.Datas,TitleX+1,16); 
-           ReadXY(CV.Formacao.Designacao,TitleX+41,16); 
-           ReadXY(CV.Formacao.Disciplinas,TitleX+1,17); 
-           ReadXY(CV.Formacao.Organizacao,TitleX+41,18); 
-           ReadXY(CV.Formacao.Nivel,TitleX+41,18); 
- 
-           // Confirma a gravação 
-           GotoXY(77,25); 
-           repeat 
-             SaveOp:=Upcase(readkey); 
-           until SaveOP in ['S','N']; 
-           write(SaveOP); 
-           if SaveOP = 'S' 
-              then SaveCV(ExtractFilePath(ParamStr(0))+'\CV'+CV.Pessoal.Nome+'.TXT'); // Grava o record para o ficheiro 
-     Until CV.Pessoal.Nome=''; 
-end; 
- 
-begin 
-  try 
-     EditaCV; 
-  except 
-    on E: Exception do 
-      Writeln(E.ClassName, ': ', E.Message); 
-  end; 
-end. 
-</code> 
-\\ 
-{{tag>pascal delphi}} 
dev_geral/pascal/tutorial/anexos/des5.txt · Última modificação em: 2018/05/14 21:37 (edição externa)