Sei sulla pagina 1di 106

SISTEMA DE ENSINO PRESENCIAL CONECTADO ANLISE E DESENVOLVIMENTO DE SISTEMAS DEMETRIUS SIMONASSI RESENDE WAGNER MONTEIRO DE SOUSA LIVIA MARIA

ALMEIDA DA SILVA CINTIA DE FATIMA PIRES DE ALMEIDA

PRODUO TEXTUAL INTERDISCIPLINAR


Tpicos Especiais em Desenvolvimento de Sistemas, Desenvolvimento de Aplicaes Web, Projeto de Interface Homem-Computador, Gesto de Sistemas de Informao

Castanhal 2011

DEMETRIUS SIMONASSI RESENDE WAGNER MONTEIRO DE SOUSA LIVIA MARIA ALMEIDA DA SILVA CINTIA DE FATIMA PIRES DE ALMEIDA

PRODUO TEXTUAL INTERDISCIPLINAR


Tpicos Especiais em Desenvolvimento de Sistemas, Desenvolvimento de Aplicaes Web, Projeto de Interface Homem-Computador, Gesto de Sistemas de Informao

Trabalho de Anlise e Desenvolvimento de Sistemas apresentado Universidade Norte do Paran - UNOPAR, como requisito parcial para a obteno de mdia bimestral nas disciplinas de Tpicos Especiais em Desenvolvimento de Sistemas, Desenvolvimento de Aplicaes Web, Projeto de Interface Homem-Computador, Gesto de Sistemas de Informao. Orientador: Prof. Emerson Fedechen, Prof.a Veronice Freitas, Prof. Marco Ikuro Hisatomi, Prof. Dorival Magro Jr, Prof. Celso Ferreira.

Castanhal 2011

SUMRIO 1 INTRODUO...........................................................................................................3 2 DESENVOLVIMENTO...............................................................................................4 3 CONCLUSO.........................................................................................................104 REFERNCIAS........................................................................................................105

1 INTRODUO O presente trabalho apresenta o resultado de uma visita realizada junto a 2 empresas, a Fcil Veculos e Peas Ltda e a Eurocarr Veculos, objetivando uma avaliao de aspectos de IHC (Interface Homem Computador) dos sistemas utilizados para consolidao dos conhecimentos adquiridos na disciplina Projeto de Interface Homem-Computador. A mesma visita serviu para o levantamento e classificao dos sistemas utilizadas nas empresas, de acordo com os conhecimentos adquiridos na disciplina Gesto de Sistemas de Informao. Uma determinada funcionalidade do sistema de uma das empresas foi analisada e transferida para uma aplicao para dispositivo mvel, com persistncia de dados na memria no voltil do dispositivo, para consolidao dos conhecimentos adquiridos na disciplina Tpicos Especiais em Desenvolvimento de Sistemas. Tambm neste trabalho, foi desenvolvida uma pequena aplicao web, que demonstrou uma funcionalidade utilizada nos websites: o cadastramento de produtos com persistncia em banco de dados e a posterior gerao de um relatrio dos mesmos, consolidando assim os conhecimentos adquiridos na disciplina Desenvolvimento de Aplicaes Web.

2 DESENVOLVIMENTO Foram visitadas duas empresas do ramo automotivo, a Fcil Veculos e Peas Ltda e a Eurocarr Veculos, ambas concessionrias Chevrolet da montadora General Motors. 2.1 AVALIAO DE IHC INTERFACE HOMEM-COMPUTADOR Baseado nas visitas realizadas junto s empresas, foi feita uma comparao de aspectos da avaliao de IHC das aplicaes utilizadas nas mesmas. A discusso sobre os sistemas pesquisados contemplar a comparao dos mesmos com os critrios ergonmicos definidos por Dominique e Christian Bastien, do Instituto Nacional de Pesquisa em Automao e Informtica da Frana. Esses autores propuseram, em 1993, um conjunto de oito critrios ergonmicos principais, que se subdividem em 18 subcritrios e critrios elementares. Segue abaixo a lista completa dos criterios principias, subcritrios e criterios elementares: a) Conduo, Convite; Agrupamento e distino de itens (por localizao e por formato); Legibilidade; Feedback imediato; Brevidade (conciso e aes mnimas); Densidade informacional; Aes explcitas; Controle do usurio; Flexibilidade;

b) Carga de trabalho,

c) Controle explcito,

d) Adaptabilidade,

f) -

Considerao da experincia do usurio; Proteo contra os erros; Qualidade das mensagens de erros Correo dos erros; Significado de cdigos e denominaes; Compatibilidade;

e) Gesto de erros,

Homogeneidade/consistencia;

g) Compatibilidade. A conduo visa favorecer principalmente o aprendizado e a utilizao do sistema por usurios novatos. A interface deve aconselhar, orientar, informar e conduzir o usurio na interao com o sistema. O convite o subcritrio da conduo que estabelece que a interface dever apresentar ttulos claros, informaes claras sobre o estado dos componentes do sistema, informaes sobre o preenchimento de formulrios e entradas esperadas e opes de ajuda claramente indicadas. O agrupamento ou distino de itens o subcritrio da conduo a servio da intuitividade da interface, visando facilitar o uso do sistema tanto para os usurios experientes como para os novatos. Estabelece que a compreenso de uma tela pelo usurio depende de um bom posicionamento, ordenao e forma dos objetos (imagens, textos, comandos, etc.) que so apresentados. A legibilidade o subcritrio da conduo a servio das pessoas idosas e com problemas de viso. O feedback imediato o subcritrio da conduo que atende principalmente aos novatos, embora esteja sempre a servio de todos. Um feedback de qualidade relata ao usurio as entradas por ele efetuadas, protege as entradas confidenciais (como o uso de asteriscos quando a senha digitada), avisa sobre um procedimento demorado e relata a concluso e resultado do procedimento. O critrio carga de trabalho estabelece que a interface deve buscar a reduo da carga cognitiva e perceptiva do usurio e o aumento da eficincia do dilogo. A brevidade o subcritrio da carga de trabalho que busca reduzir a carga cognitiva, perceptiva e motora de trabalho reduzida ao usurio. So subcritrios da brevidade a conciso e as aes mnimas. Uma interface concisa

apresenta ttulos, rtulos, denominaes e cdigos curtos. Fornece tambm valores default para acelerar as entradas individuais, alm do preenchimento automtico de vrgulas, pontos decimais e zeros direita da vrgula nos campos de dados. As aes mnimas limitam, tanto quanto possvel, a quantidade de telas pelas quais o usurio deve passar, diminuindo a carga de trabalho e a chance de erros. As aes mnimas evitam solicitar aos usurios dados que podem ser deduzidos pelo sistema. A densidade informacional o subcritrio da carga de trabalho que visa reduzir a carga cognitiva e perceptiva do usurio, com relao ao conjunto total de itens de informao apresentados. Uma interface com baixa densidade informacional (ou minimalista), apresenta somente a informao relacionada tarefa, no fora os usurios a transportar mentalmente dados de uma tela a outra, no fora os usurios a realizar procedimentos complexos. O controle explcito o critrio que estabelece que as aes do sistema devem estar sempre sob o controle do usurio. A interface deve ser explicitamente comandada, solicitando sempre uma ao explcita do usurio de validao global em um formulrio de entrada de dados ou parmetros, separando as aes de seleo de uma opo e de ativao dessa opo e evitando colocar o usurio diante de comandos de dupla repercusso (como saltar + fechar). A interface deve ser controlada pelo usurio, com o salto do cursor entre os campos sendo realizado com uma tecla especfica, disponibilizando ao usurio opes para comandar o avano, o recuo, a interrupo, a retomada ou a finalizao de um dilogo seqencial ou de tratamentos demorados. O critrio adaptabilidade uma qualidade particularmente esperada em sistemas em que o pblico-alvo vasto e variado. A interface deve considerar a flexibilidade e a experincia do usurio, fornecendo atalhos para os usurios mais experientes e dilogos passo a passo para os usurios menos experientes. O critrio gesto de erros diz respeito aos mecanismos para evitar ou reduzir a ocorrncia de erros. A gesto de erros trata da proteo contra erros, da qualidade das mensagens de erro e da possibilidade do usurio reverter um procedimento, corrigindo um erro. O critrio homogeneidade ou coerncia estabelece que os procedimentos, rtulos, comandos, etc. so mais facilmente reconhecidos, localizados e utilizados quando seu formato, localizao ou sintaxe so estveis de uma tela para outra, de uma seo para outra. Isso torna o sistema mais previsvel,

a aprendizagem mais generalizvel e minimiza os erros. O critrio significado dos cdigos e denominaes estabelece que em uma interface significativa, os nomes de funes e objetos so familiares para os usurios, os cdigos so representativos do contedo (como em M-masculino / FFeminino) e as abreviaes so interpretadas imediatamente. O critrio compatibilidade estabelece a necessidade de uma menor recodificao das informaes entre a interface e o sistema. Alm disso, os procedimentos e tarefas so organizados visando respeitar expectativas ou costumes do usurio. Tradues e interpretaes so minimizadas e a informao apresentada de forma diretamente utilizvel. 2.1.1 Avaliao IHC do sistema ERP da Fcil Veculos e Peas Ltda A Fcil Veculos e Peas Ltda utiliza um sistema ERP, legado, baseado em linguagem COBOL e sistema de arquivos convencionais, o Mr. Sys 21, da CNP Engenharia de Sistemas. O Mr. Sys 21 funciona sobre a plataforma Unix/Linux, rodando no servidor, com os usurios utilizando o sistema atravs de um programa emulador de terminal que conecta-se ao servidor Linux pelo protocolo SSH. A interface do Mr. Sys 21 baseia-se em uma tela de texto, com um menu de opes, onde cada item do menu refere-se a um mdulo do sistema ERP, como Peas, Veculos, Faturamento, Oficina, Fiscal, Contabilidade, etc. Ao entrar em cada opo, um submenu apresenta uma classificao das principais operaes que so realizadas no mdulo, como Cadastro, Consulta, Relatrio, etc. Dentro de cada submenu, novos submenus aparecem, at chegar ao ponto em que um ltimo submenu permite chamar os programas para as tarefas. A operao da interface dse unicamente com o uso do teclado, no sendo possvel selecionar nada atravs do mouse. Uma barra de rolagem feita com a inverso da cor de fundo e da cor de caractere da opo pode ser movimentada com as setas do teclado, As opes possuem, cada uma, uma letra com cor em destaque, mais forte, que indica que se a letra for pressionada no teclado, a opo ser selecionada. No critrio conduo presteza, os usurios encontram certa dificuldade para identificar o estado ou contexto no qual se encontram durante o uso da aplicao, condio que amenizada com o passar do tempo, medida que o

usurio adquire experincia no uso da interface. No critrio conduo agrupamento/distino de itens, h grande disparidade entre os comandos apresentados na execuo dos programas, com praticamente nenhuma padronizao. No critrio conduo feedback imediato, h ausncia praticamente total de mensagens de feedback. No critrio conduo legibilidade, o programa de terminal quem na verdade determina a legibilidade. Por apresentar tela de texto, com fundo preto e caracteres claros, e por permitir o redimensionamento da janela de terminal, possvel expandir at ocupar o tamanho total da tela, tornando-se uma tela grande e de alto contraste, facilitando a leitura. No critrio carga de trabalho brevidade as interfaces dos programas so concisas, informando e solicitando apenas o necessrio para a tarefa e limitam bastante o nmero de passos para a realizao das tarefas. No critrio carga de trabalho densidade informacional, algumas opes permite a obteno de dados adicionais, mas ao fazer isso, substituem a tela anterior que estava sendo utilizada, voltando mesma ao obter-se a informao. No entanto, se a operao realizada pelo usurio requer a utilizao de vrias entidades de dados vinculadas, o usurio obrigado a acessar mais de uma opo do menu por vez, e nesse caso o usurio precisa lembrar (e em muitos casos, at mesmo anotar) vrias informaes obtidas em vrias opes para utiliz-las em uma opo especfica, gerando uma elevada carga de trabalho mental. Nos critrios controle explcito - aes explcitas e controle do usurio, praticamente todas as aes requerem a interao e autorizao do usurio. No entanto em muitas opes no h a possibilidade do usurio cancelar. No critrio adaptabilidade flexibilidade, no h nenhuma opo para o usurio personalizar aspectos da interface. No critrio adaptabilidade considerao da experincia do usurio, a interface oferece teclas de atalho para as opes, alm da navegao pelas opes pelas teclas de setas do teclado. No h nenhuma possibilidade de utilizar o mouse na interao. No critrio gesto de erros proteo contra os erros, h poucos campos onde a entrada de dados validada, de modo que operaes erradas acontecem sem nenhuma proteo ou aviso ao usurio, sendo detectadas somente

posteriormente em relatrios e requerendo correo. No critrio gesto de erros praticamente no h gesto de erros, e nos poucos casos em que isso acontece, as mensagens de feedback so insuficientes para o usurio detectar o erro. No critrio gesto de erros correo dos erros no h absolutamente nenhuma orientao ou liberdade de ao que seja oferecida pelos programas para a correo de erros. Em muitos casos, operaes inteiras devem ser canceladas em funo de um erro. No critrio consistncia, nota-se padronizao na estrutura de menus, mas as interfaces dos programas no seguem praticamente nenhuma padronizao, exceto o fato de que devem se encaixar na tela de 80x25 caracteres do terminal. No critrio significado dos cdigos e denominaes h coerncia total entre os nomes de funes e campos de dados. Os cdigos e abreviaes tambm so totalmente coerentes com o significado, de acordo com os processos de negcio aos quais os usurios esto habituados. Ao que parece, o foco do desenvolvimento da aplicao foi total nos processos de negcio. Finalmente, no critrio compatibilidade, as informaes apresentadas na interface so diretamente utilizveis e de fcil interpretao. Os procedimentos e tarefas so coerentes com o costume do usurio, de acordo com a sua funo. 2.1.2 Avaliao IHC do sistema ERP da Eurocarr O sistema ERP da Eurocarr composto por diversos mdulos, com um programa executvel para cada mdulo, em plataforma desktop. Os mdulos so desenvolvidos em linguagem Delphi e utilizam um driver cliente instalado nos computadores para comunicao com o servidor de banco de dados Oracle. As interfaces dos mdulos baseiam-se principalmente em janelas grfica com uma consulta em grade e campos para preenchimento de mscara e boto de pesquisa, incluir, excluir, alterar registro. No critrio conduo presteza, os usurios encontram certa dificuldade para identificar o estado ou contexto no qual se encontram durante o uso

10

da aplicao, condio que amenizada com o passar do tempo, medida que o usurio adquire experincia no uso da interface. comum a confuso do usurio novato ao pesquisar, por exemplo, uma nota fiscal emitida que no aparece na grade porque o usurio est usando a aba de pr-notas ainda no emitidas, sendo necessrio clicar na aba de notas j emitidas na parte superior da janela, para ter acesso interface das notas j emitidas e assim localizar a nota na pesquisa. No critrio conduo agrupamento/distino de itens, podemos citar o fato de que os botes para as operaes CRUD (insero, alterao, excluso, consulta/pesquisa) e os botes confirmar e cancelar so sempre posicionados abaixo da tela, e mantida uma boa coerncia desse posicionamento com o significado do boto quando se muda de uma interface para outra ou de um mdulo para outro. As cores e cones utilizados nos botes tambm so padronizados, facilitando o aprendizado do usurio. No critrio conduo feedback imediato, podemos citar o fato de que mensagens de erro ou de sucesso so apresentadas logo aps a ao do usurio, e so poupadas quando a conseqncia da ao do usurio evidente. Como exemplo, durante a emisso de uma nota fiscal eletrnica a partir de uma prnota, a coluna de status da nota na grade de pesquisa atualizada a cada status, informando a assinatura, transmisso, validao, e consulta ao lote enviado at apresentar o status final de nota validada. No critrio conduo legibilidade, a relao de contraste entre a cor das fontes utilizadas (cores mais escuras) boa em relao ao fundo (normalmente azul claro, bege ou cinza). No entanto, o tamanho das fontes deixa a desejar, em muitos casos, com letras e cones muito pequenos, que podem dificultar a visualizao para usurios com limitaes de viso, alm de causar cansao se utilizada a mesma interface por perodos prolongados de tempo. No critrio carga de trabalho brevidade as interfaces so concisas, informando e solicitando apenas o necessrio para a tarefa e limitam bastante o nmero de passos para a realizao das tarefas. No critrio carga de trabalho densidade informacional, observamos que as operaes realizadas dentro de um mdulo individual apresentam uma boa densidade informacional, permitindo a obteno de dados adicionais necessrios por pesquisas acionadas por botes na interface. No entanto, se a operao realizada pelo usurio requer a utilizao de vrias entidades vinculadas, torna-se s vezes

11

necessrio acessar mais de um mdulo por vez, e nesse caso o usurio precisa lembrar a informao obtida em um mdulo para utiliza-la no outro, o que aumenta a carga de trabalho mental. Nos critrios controle explcito - aes explcitas e controle do usurio, praticamente todas as aes requerem a interao e autorizao do usurio e oferecem a possibilidade do usurio cancelar ou confirmar. No critrio adaptabilidade flexibilidade, no h absolutamente nenhuma possibilidade de o usurio personalizar qualquer aspecto das interfaces dos mdulos. No critrio adaptabilidade considerao da experincia do usurio, a interface no oferece alternativas na utilizao. No utiliza teclas de atalho. Todos os botes da interface so acionados exclusivamente pelo clique com o mouse. No critrio gesto de erros proteo contra os erros, os mdulos informam claramente operaes potencialmente destrutivas, e em alguns casos bloqueiam totalmente a ao do usurio evitando problemas. No critrio gesto de erros qualidade das mensagens de erro, embora haja mensagens de erro, as mensagens so curtas, mnimas, e geralmente insuficientes para orientar o usurio sobre como proceder para a correo do erro. Normalmente, as mensagens precisam ser interpretadas pelos analistas de suporte, mediante a abertura de um chamado de suporte no site do fabricante, para ento o analista retornar com a orientao do que deve ser feito. No critrio gesto de erros correo dos erros no h absolutamente nenhuma orientao ou liberdade de ao que seja oferecida pelos mdulos para a correo de erros. Novamente, um chamado de suporte deve ser aberto no site do fabricante, e o analista de suporte, ao retornar, deve corrigir a causa do erro no sistema e aplicar atualizaes no banco de dados para corrigir os erros que foram gravados no mesmo. No critrio consistncia, as interfaces mantm alguns componentes padronizados, mas no todos, de modo que h variao, principalmente na localizao e formato dos componentes entre uma tela de interface e outra. Os cdigos e denominaes por outro lado, conservam a homogeneidade entre as interfaces, notadamente como conseqncia da diversidade de departamentos e contextos integrados pelo sistema ERP. No critrio significado dos cdigos e denominaes h coerncia

12

total entre os nomes de funes e objetos e o significado dos mesmos para o usurio. Os cdigos e abreviaes tambm so totalmente coerentes com o significado, de acordo com os processos de negcio aos quais os usurios esto habituados. Finalmente, no critrio compatibilidade, as informaes apresentadas na interface so diretamente utilizveis e de fcil interpretao. Os procedimentos e tarefas so coerentes com o costume do usurio, de acordo com a sua funo. 2.2 IMPLENTAO DE RECURSOS UTILIZADOS PELOS WEBSITES Este tpico abrange a implementao de duas funcionalidades utilizadas pelos websites: o cadastro de produtos com upload da imagem do procuto e a gerao de uma listagem geral dos produtos cadastrados apresentando a imagem dos mesmos. As funcionalidades foram desenvolvidas em linguagem PHP, com persistncia em banco de dados MySQL, utilizando servidor Apache disponvel no software XAMPP. 2.2.1 Interface do formulrio Para abrir o formulrio de cadastro de produtos, deve-se abrir o navegador web e digitar: http://localhost/portfolio_grupo/html/produtos.html O que abrir o seguinte formulrio de cadastro de produtos:

13

2.2.2 Cdigo do script para criar a tabela no banco de dados CREATE TABLE IF NOT EXISTS `produtos` ( `codProduto` int(200) NOT NULL AUTO_INCREMENT, `descProduto` varchar(255) NOT NULL, `quantMin` int(4) NOT NULL, `infoTec` varchar(255) NOT NULL, `valorProduto` decimal(6,2) NOT NULL, `nomeImagemProduto` varchar(255) NOT NULL, `catProduto` varchar(255) NOT NULL, `tipoProduto` varchar(255) NOT NULL, PRIMARY KEY (`codProduto`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=14 ;

14

2.2.3 Cdigos referentes ao formulrio de cadastro de produtos

2.2.3.1 Cdigo html da pgina produtos.html

<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso8859-1" /> <title>CADASTRO DE PRODUTOS COM BANCO DE DADOS E PHP</title> <style type="text/css"> .style1{ color: #FF0000; font-size: x-small; } .style3 {color: #0000FF; font-size: x-small; } </style> <script type="text/javascript"> function validaCampo()

15

{ if(document.cadastroProduto.tf_descProduto.value=="") { alert("O Campo descrio obrigatrio!"); return false; } else if(document.cadastroProduto.tf_infoTec.value=="") { alert("O Campo Informao tcnica obrigatrio!"); return false; } else if(document.cadastroProduto.tf_quantMin.value=="") { alert("O Campo Quantidade mnima obrigatrio!"); return false; }

16

else if(document.cadastroProduto.tf_valorProduto.value=="") { alert("O Campo Valor do produto obrigatrio!"); return false; } else if(document.cadastroProduto.tf_catProduto.value=="") { alert("O Campo Categoria do produto obrigatrio!"); return false; } else if(document.cadastroProduto.tf_tipoProduto.value=="") { alert("O Campo Tipo do produto obrigatrio!"); return false; }

17

else if(document.cadastroProduto.tf_nomeImagemProduto.value=="") { alert("O Campo Nome da imagem do produto obrigatrio!"); return false; }

else return true; } <!-- Fim doi JavaScript que validar os campos obrigatrios! --> </script> </head>

<body> <form id="cadastroProduto" name="cadastroProduto" method="post" action="cadastroProduto.php" onsubmit="return enctype="multipart/form-data"> validaCampo(); return false;"

18

<table width="625" border="0"> <tr> <td width="112">Descri&ccedil;&atilde;o:</td> <td width="503"><input name="tf_descProduto" type="text"

id="tf_descProduto" size="70" maxlength="60"/> <span class="style1">*</span></td> </tr> <tr> <td>Inf. T&eacute;cnica::</td> <td><input name="tf_infoTec" type="text" id="tf_infoTec" size="70" maxlength="60" /> <span class="style1">*</span></td> </tr> <tr> <td>Quant. m&iacute;nima:</td> <td><input size="70" name="tf_quantMin" type="text" id="tf_quantMin"

19

maxlength="70" /> <span class="style1">*</span></td> </tr> <tr> <td>Valor:</td> <td><input name="tf_valorProduto" type="text" id="tf_valorProduto" maxlength="20" /> <span class="style1">*</span></td> </tr> <tr> <td>Categoria:</td> <td><input name="tf_catProduto" type="text" id="tf_catProduto" maxlength="20" /> <span class="style1">*</span></td> </tr> <tr> <td>Tipo:</td> <td><input name="tf_tipoProduto" type="text" id="tf_tipoProduto" maxlength="20" />

20

<span class="style1">*</span></td> </tr> <tr> <td>Selecione imagem:</td> <td> <!-<input name="tf_nomeImagemProduto" type="text" id="tf_nomeImagemProduto" maxlength="255" /> <span class="style1">*</span> --> <!-<label for="file"> Filename: </label> <input type ="file" name = "file" id="file" /> --> <input name="file" type="file" id="file" maxlength="255" /> </td> </tr> <tr> <td colspan="2">&nbsp;</td> </tr>

21

<tr> <td colspan="2"><p>

<input name="cadastrar" type="submit" id="cadastrar" value="Cadastrar Produto" /> <input name="limpar" type="reset" id="limpar" value="Limpar Campos preenchidos!" /> <span class="style1">* Campos com * so obrigatrios! </span></p> <p> </p></td> </tr> </table> </form>

</body> </html>

22

2.2.3.2 Cdigo php do formulrio cadastroProduto.php <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso8859-1" /> <title>Cadastro realizado com sucesso!</title> </head> <body> <?php // --------- FAZ O UPLOAD DO ARQUIVO - INICIO ---------// http://www.w3schools.com/PHP/php_file_upload.asp if ((($_FILES["file"]["type"] == "image/gif") || ($_FILES["file"]["type"] == "image/jpeg") || ($_FILES["file"]["type"] == "image/pjpeg")) && ($_FILES["file"]["size"] < 20000)) { if ($_FILES["file"]["error"] > 0) { echo "Return Code: ".$_FILES["file"]["error"] . "<br />"; } else

{ echo "Upload: ".$_FILES["file"]["name"]."<br />"; echo "Type: ".$_FILES["file"]["type"]."<br />"; echo "Size: ".($_FILES["file"]["size"] / 1024)." Kb<br />"; echo "Temp file: ".$_FILES["file"]["tmp_name"]."<br />"; if (file_exists("upload/".$_FILES["file"]["name"])) {

23

echo $_FILES["file"]["name"]." already exists. "; } else { move_uploaded_file($_FILES["file"]["tmp_name"], "upload/".$_FILES["file"]["name"]); echo "Stored in: "."upload/".$_FILES["file"]["name"]."<br /><br />"; } } } else { echo "Invalid file"; } //---------- FAZ O UPLOAD DO ARQUIVO - FIM ----------------

// RECEBENDO OS DADOS PREENCHIDOS DO FORMULRIO !

$descProduto= $_POST ["tf_descProduto"];//atribuio do campo "tf_descProduto" vindo do formulrio para variavel $infoTec= $_POST ["tf_infoTec"];//atribuio do campo "tf_infoTec" vindo do formulrio para variavel $quantMin= $_POST ["tf_quantMin"];//atribuio do campo "tf_quantMin" vindo do formulrio para variavel $valorProduto= $_POST ["tf_valorProduto"];//atribuio do campo "tf_catProduto" vindo do formulrio para variavel $catProduto= $_POST ["tf_catProduto"];//atribuio do campo "tf_tipoProduto" vindo do formulrio para variavel

24

$tipoProduto= $_POST ["tf_tipoProduto"];//atribuio do campo "tf_cidade" vindo do formulrio para variavel //$nomeImagemProduto= formulrio para variavel $nomeImagemProduto=$_FILES["file"]["name"]; //Gravando no banco de dados ! conectando com o localhost - mysql $conexao = mysql_connect("localhost","root",""); //localhost onde esta o banco de dados. if (!$conexao) die ("Erro de conexo com localhost, o seguinte erro ocorreu -> ".mysql_error()); $_POST ["tf_nomeImagemProduto"];//atribuio do campo "tf_nomeImagemProduto" vindo do

//conectando com a tabela do banco de dados $banco = mysql_select_db("comercioweb",$conexao); //nome da tabela que deseja que seja inserida os dados cadastrais if (!$banco) die ("Erro de conexo banco de dados, o seguinte erro ocorreu ->".mysql_error()); //Query que realiza a insero drn dados no banco de dados na tabela indicada acima

$query = "INSERT INTO `comercioweb`.`produtos` ( `descProduto`,

25

`infoTec`,

`quantMin`,

`valorProduto`,

`catProduto`,

`tipoProduto`,

`nomeImagemProduto`, `codProduto` ) VALUES ('$descProduto', '$infoTec', '$quantMin', '$valorProduto', '$catProduto', '$tipoProduto', '$nomeImagemProduto', NULL)";

mysql_query($query,$conexao); # Explicao da query #$query = nome da variavel que decide utilizar para realizar a operao #################### #produto = nome da tabela que ser salvo os dados do cadastro do produto #################### #`descProduto`, `infoTec`, `quantMin`, `valorProduto`, `catProduto`, `tipoProduto`, `nomeImagemProduto`, `codProduto` # # So apenas os nomes dos campos que constam na tabela produtos ############################### #VALUES = indica que sero inseridos os seguintes valores. ############################## #'$descProduto', # #So apenas as variveis a qual eu atribui os valores digitados no formulrio. ############################ '$infoTec', '$quantMin', '$valorProduto', '$catProduto', '$tipoProduto', '$nomeImagemProduto', NULL

26

echo "O produto foi cadastrado com sucesso."; // Mensagem que escrita quando os dados so inseridos normalmente. ?> </body> </html> 2.2.4 Interface para gerar o relatrio de produtos cadastrados Para abrir a interface do relatrio de cadastro de produtos, deve-se abrir o navegador web e digitar: http://localhost/portfolio_grupo/html/ListarProdutos.html O que abrir o seguinte formulrio, com o boto para listar os produtos cadastrados:

27

2.2.5 Cdigos referentes ao formulrio listagem de produtos

2.2.5.1 Cdigo html da pgina ListaProdutos.html <html> <head> <meta 8" /> <title> Listar Produtos </title> <head> <body> <form action="ListarProdutos.php" > <input name="ListarProdutos" type="submit" id="ListarProdutos" value="ListarProdutos" /> </form> </body> id="teste" name="teste" method="post" http-equiv="Content-Type" content="text/html;charset=utf-

</html> 2.2.5.2 Cdigo PHP referente listagem de produtos ListarProdutos.php <?php

28

include "include/cabecalho.php"; include "config/configuracoes.php"; include "conexao/conecta.php"; echo "<html><head></head>"; echo '<H3> Listagem de produtos </H3>'; echo "<body>"; $sql = "SELECT codProduto, descProduto, quantMin, infoTec, valorProduto, catProduto, tipoProduto, nomeImagemProduto FROM produtos ORDER BY codProduto"; // codProduto // descProduto // quantMin // infoTec // valorProduto // catProduto // tipoProduto // nomeImagemProduto

$resultado = mysql_query($sql) or die (mysql_error()); echo '<table border = 5>'; echo '<TR>'; echo '<TH>Cd.Prod.</TH>'; echo '<TH>Descrio</TH>'; echo '<TH>Quant.Mn.</TH>'; echo '<TH>Inf.Tcnicas</TH>';

29

echo '<TH>Valor</TH>'; echo '<TH>Categoria</TH>'; echo '<TH>Tipo</TH>'; echo '<TH>Imagem</TH>'; echo '</TR>';

$nCor = 0; while ($linha = mysql_fetch_array($resultado)) { if($nCor == 0) { $nCor = 1; $cCor= "zebraA"; } else { $nCor = 0; $cCor = "zebraB"; }

echo "<TR BGCOLOR class=\"$cCor\">"; // codProduto // descProduto // quantMin // infoTec // valorProduto // catProduto

30

// tipoProduto // nomeImagemProduto echo '<TD>'; echo $linha["codProduto"]; echo '</TD>'; echo '<TD>'; echo $linha["descProduto"]; echo '</TD>'; echo '<TD>'; echo $linha["quantMin"]; echo '</TD>'; echo '<TD>'; echo $linha["infoTec"]; echo '</TD>'; echo '<TD>'; echo $linha["valorProduto"]; echo '</TD>'; echo '<TD>'; echo $linha["catProduto"]; echo '</TD>'; echo '<TD>'; echo $linha["tipoProduto"]; echo '</TD>'; echo '<TD>'; //echo $linha["nomeImagemProduto"]; echo "<img src="."upload/".$linha["nomeImagemProduto"]." >";

31

echo '</TD>';

echo '</TR>';

} echo '</table>'; mysql_free_result($resultado); mysql_close($rCon); echo "<br><br>"; echo "</body></html> \n"; ?>

2.2.5.3 Cdigo do arquivo geral.css para formatao da listagem de produtos P.titulo { font-family: Tahoma, Verdana, sans-serif; font-size: 30px; color: #000000; text-align: center; } P.texto1 { font-family: Tahoma, Verdana, sans-serif; color: #FFFFFF;

32

font-size: 10px; text-align: left; } TH { font-family:tahoma,sans-serif; font-size:11px; background: #009ACD; color:#000066; text-decoration:none; font-weight: normal; text-indent: 4px; height:30px; } TR.zebraA { font-family:tahoma,sans-serif; font-size:11px; background: #CAE1FF; color:#000066; text-decoration: none; font-weight: normal; text-indent: 4px; height:30px; } TR.zebraB { font-family:tahoma,sans-serif; font-size:11px; background: #CAE1F0; color:#000066; text-decoration: none; font-weight:

33

normal; text-indent: 4px; height:30px; }

34

2.2.5.4 Listagem de produtos

35

36

2.3 APLICAO MVEL COM A UTILIZAO DE RMS SEGUINDO REGRAS DE IHC Este tpico abrange a escolha de uma funcionalidade de uma das empresas visitadas, e a implementao dessa funcionalidade para utilizao em dispositivo mvel, comportando a persistncia de dados em RMS. 2.3.1 Estudo do sistema local Empresa visitada: Fcil Veculos e Peas Ltda. Funcionalidade de sistema desktop escolhida: Cadastro de peas com vinculao entre o cdigo da pea, a descrio e o cdigo NCM da pea. Brasil, Argentina, Paraguai e Uruguai adotam, desde janeiro de 1995, o cdigo NCM (Nomenclatura Comum do MERCOSUL). A empresa alvo do estudo deste tpico foi a Fcil Veculos e Peas Ltda. No departamento de peas da Fcil Veculos o processo de venda de peas requer a vinculao da pea com o cdigo NCM no mdulo de peas do sistema ERP da concessionria. O cdigo da pea, a descrio da pea e o cdigo NCM so enviados em arquivo XML para os servidores da Secretaria da Fazenda na emisso da nota fiscal eletrnica, sendo o NCM essencial para a validao da nota. Na ausncia do cdigo NCM, a nota fiscal rejeitada pela Sefaz. Foi escolhido o desenvolvimento de uma aplicao mvel que replicasse essa vinculao, permitindo a manuteno em aparelho mvel celular de um pequeno cadastro de peas contendo o cdigo da pea, a descrio da pea e o cdigo NCM correspondente pea. Nesse cadastro, novas peas podem ser acrescentadas, alteradas, consultadas ou excludas, replicando as operaes CRUD do banco de dados do sistema ERP original, porm, no caso do dispositivo mvel, essa persistncia ser feita em RMS. A aplicao tambm permite a gerao de um pequeno relatrio dos itens cadastrados. 2.3.2 Persistncia dos dados utilizando RMS (Record Management System) Para um projeto mais organizado e com melhores possibilidades de

37

manuteno ou expanso futuras, foi escolhido o uso da filosofia do Design Patterns DAO. O DAO (Direct Access Object) um padro de desenvolvimento em que as classes do sistema so separadas em trs categorias: classe com a regra de negcio, classe de transferncia de dados e classe tradutora, sendo que esta ltima cria uma camada de abstrao entre a persistncia dos dados e o programa que contm a regra de negcio. O DAO pode ser utilizado para tornar o acesso s fontes de dados transparente para o programa que encerra a regra de negcio. Em sistemas desktop que utilizam banco de dados, o DAO atua como tradutor entre o banco e a aplicao. No caso do dispositivo mvel, o DAO pode ser desenvolvido utilizando os comandos RMS para persistir os dados na memria no voltil do celular. A camada de abstrao provida pelo DAO possibilita a migrao da aplicao para utilizar outros mecanismos para persistncia, caso necessrio, sendo necessria apenas a alterao das classes DAO para a adaptao. Todo o cdigo referente ao tratamento da persistncia fica concentrado nas classes DAO, o que facilita as manutenes, alteraes e correes do programa. No caso especfico do programa desenvolvido, foram criadas uma classe de regra de negcio, uma classe de transferncia, uma classe DAO e uma classe RMS para os comandos especficos de RMS, a serem utilizados pela classe DAO. 2.3.3 Recuperao das informaes persistidas As peas gravadas podem ser consultadas no menu de

gerenciamento do cadastro, mediante o fornecimento do cdigo da pea ou atravs de um relatrio, que lista todas as peas com cdigo, descrio e cdigo NCM. 2.3.4 Relatrio das caractersticas do projeto No incio da execuo do programa, apresentado um formulrio com um pequeno texto explicativo que informa a funo do programa. Um comando de menu de opes apresenta a opo de gerenciar peas cadastradas ou mostrar

38

um relatrio das peas cadastradas. Foi utilizado um formulrio com trs campos de texto para a entrada dos dados, para o cdigo da pea, descrio e cdigo NCM. As alteraes de peas esto sujeitas a uma tela de confirmao, que informa o cadastro atual da pea e como ficar aps a alterao. A excluso de pea tambm passa por uma tela de confirmao, por ser um procedimento destrutivo, e apresenta todos os dados da pea, solicitando a deciso final do usurio de consolidar a excluso. 2.3.4.1 Tecnologias utilizadas Tpicos Especiais Para o desenvolvimento da aplicao mvel proposta, foi utilizada a linguagem de programao Java ME (Micro Edition) e o ambiente de desenvolvimento Netbeans 6.9.1. 2.3.4.2 Tecnologias utilizadas Interface homem-computador Seguindo as recomendaes de IHC para dispositivos mveis, o programa foi desenvolvido para apresentar uma interface minimalista, exibindo na tela as informaes necessrias ao usurio para o entendimento da funcionalidade da aplicao, confirmaes para operaes destrutivas e aes mnimas. O fato de no ter sido usada nenhuma funcionalidade de um modelo de dispositivo especfico torna a aplicao porttil entre diversos modelos de dispositivos mveis.

39

2.3.4.3 Diagrama de Caso de Uso CadastroPecas

40

2.3.4.4 Diagrama de Classe CadastroPecas

41

2.3.4.5 Telas

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

2.3.4.6 Cdigo fonte CadastroPecas

2.3.4.6.1 Classe CadastroPecas


/* * To change this template, choose Tools | Templates * and open the template in the editor. */ import javax.microedition.midlet.*; import javax.microedition.lcdui.*; import CadastroPecas.LOGICA.PecaLOGICA; import CadastroPecas.DAO.PecaDAO; /** * @author user */ public class CadastroPecas extends MIDlet implements CommandListener { private boolean midletPaused = false; //<editor-fold defaultstate="collapsed" desc=" Generated Fields "> private java.util.Hashtable __previousDisplayables = new java.util.Hashtable(); private Form form1; private TextField textField; private TextField textField2; private TextField textField1; private StringItem stringItem; private Form form; private StringItem stringItem5; private Form form2; private StringItem stringItem1; private Spacer spacer; private StringItem stringItem2; private Form form3; private StringItem stringItem3; private Form form4; private StringItem stringItem4; private Command okCommand; private Command exitCommand; private Command okCommand1; private Command exitCommand1; private Command itemCommand1; private Command itemCommand; private Command okCommand2; private Command exitCommand2; private Command itemCommand3; private Command itemCommand2;

60
private Command itemCommand5; private Command itemCommand4; private Command itemCommand7; private Command itemCommand6; private Command okCommand3; private Command exitCommand3; private Command okCommand4; private Command itemCommand8; private Command itemCommand9; private Command exitCommand4; private Command exitCommand5; private Command backCommand; private Command okCommand5; //</editor-fold> /** * The CadastroPecas constructor. */ public CadastroPecas() { } //<editor-fold defaultstate="collapsed" desc=" Generated Methods "> /** * Switches a display to previous displayable of the current displayable. * The <code>display</code> instance is obtain from the <code>getDisplay</code> method. */ private void switchToPreviousDisplayable() { Displayable __currentDisplayable = getDisplay().getCurrent(); if (__currentDisplayable != null) { Displayable __nextDisplayable = (Displayable) __previousDisplayables.get(__currentDisplayable); if (__nextDisplayable != null) { switchDisplayable(null, __nextDisplayable); } } } //</editor-fold> //<editor-fold defaultstate="collapsed" desc=" Generated Method: initialize "> /** * Initilizes the application. * It is called only once when the MIDlet is started. The method is called before the <code>startMIDlet</code> method. */ private void initialize() { // write pre-initialize user code here // write post-initialize user code here } //</editor-fold> //<editor-fold defaultstate="collapsed" desc=" Generated Method: startMIDlet ">

61
/** * Performs an action assigned to the Mobile Device - MIDlet Started point. */ public void startMIDlet() { // write pre-action user code here switchDisplayable(null, getForm()); // write post-action user code here this.stringItem5.setText( "Este programa permite gerenciar \n" + "um cadastro de Peas, contendo: \n" +" +" +" + "" + "O cdigo NCM (ou classificao\n" + "de IPI) um dado necessrio \n" + "para a emisso da Nota Fiscal \n" + "Eletrnica verso 2.0, sem o \n" + "qual a nota rejeitada pela SEFAZ"); } //</editor-fold> //<editor-fold defaultstate="collapsed" desc=" Generated Method: resumeMIDlet "> /** * Performs an action assigned to the Mobile Device - MIDlet Resumed point. */ public void resumeMIDlet() { // write pre-action user code here // write post-action user code here } //</editor-fold> //<editor-fold defaultstate="collapsed" desc=" Generated Method: switchDisplayable "> /** * Switches a current displayable in a display. The <code>display</code> instance is taken from <code>getDisplay</code> method. This method is used by all actions in the design for switching displayable. * @param alert the Alert which is temporarily set to the display; if <code>null</code>, then <code>nextDisplayable</code> is set immediately * @param nextDisplayable the Displayable to be set */ public void switchDisplayable(Alert alert, Displayable nextDisplayable) { // write pre-switch user code here Display display = getDisplay(); Displayable __currentDisplayable = display.getCurrent(); if (__currentDisplayable != null && nextDisplayable != null) { __previousDisplayables.put(nextDisplayable, __currentDisplayable); } if (alert == null) { display.setCurrent(nextDisplayable); ---Cdigo da Pea---\n" --Descrio da Pea- \n" -----Cdigo NCM----- \n"

62
} else { display.setCurrent(alert, nextDisplayable); } // write post-switch user code here } //</editor-fold> //<editor-fold defaultstate="collapsed" desc=" Generated Method: commandAction for Displayables "> /** * Called by a system to indicated that a command has been invoked on a particular displayable. * @param command the Command that was invoked * @param displayable the Displayable where the command was invoked */ public void commandAction(Command command, Displayable displayable) { // write pre-action user code here if (displayable == form) { if (command == exitCommand2) { // write pre-action user code here exitMIDlet(); // write post-action user code here } else if (command == itemCommand2) { // write pre-action user code here switchDisplayable(null, getForm1()); // write post-action user code here } else if (command == itemCommand3) { // write pre-action user code here switchDisplayable(null, getForm4()); // write post-action user code here this.listarPecas(); } } else if (displayable == form1) { if (command == exitCommand1) { // write pre-action user code here

this.limpaCamposForm1("ESCOLHA OPERAO NO MENU"); this.desabilitaCamposForm1(); switchDisplayable(null, getForm()); // write post-action user code here } else if (command == itemCommand4) { // write pre-action user code here

this.habilitaCamposForm1();

63
this.limpaCamposForm1("--INSIRA NOVA PEA--");

// write post-action user code here

/* getStringItem().setText("Insira Nova Pea."); getTextField2().setString(""); getTextField1().setString(""); getTextField().setString(""); */

} else if (command == itemCommand5) { // write pre-action user code here // write post-action user code here if (this.validaCampos()) { this.consultaPeca(); } } else if (command == itemCommand7) { // write pre-action user code here

// write post-action user code here

if (this.validaCampos()) { this.solicitaConfirmacaoAlteraOuGravaNovaPeca(); }

64
} else if (command == itemCommand8) { // write pre-action user code here

if (this.validaCampos()) { if (this.checaSeNovaPeca()) { this.stringItem.setText("--A PEA NO CONSTA-- \n " + "--NO CADASTRO--"); } else { this.solicitaConfirmacaoExclusaoPeca(); }

// write post-action user code here } else if (command == okCommand1) { // write pre-action user code here

// write post-action user code here // getTextField().setString("Realiza cadastro."); // getTextField1().setString("Realiza cadastro."); // getTextField2().setString("Realiza cadastro."); if (this.validaCampos()) { if (this.checaSeNovaPeca()) { this.gravaNovaPeca(); } else { this.solicitaConfirmacaoAlteraOuGravaNovaPeca(); }

} } } else if (displayable == form2) { if (command == exitCommand3) { // write pre-action user code here // MISC.MISC.sim_ou_nao = false;

65

this.stringItem.setText("-A PEA NO FOI GRAVADA-"); switchToPreviousDisplayable(); // write post-action user code here } else if (command == okCommand3) { // write pre-action user code here this.efetivaAlteraOuGravaNovaPeca(); switchToPreviousDisplayable(); // write post-action user code here } } else if (displayable == form3) { if (command == exitCommand4) { // write pre-action user code here switchToPreviousDisplayable(); // write post-action user code here } else if (command == okCommand4) { // write pre-action user code here this.efetivaExclusaoPeca(); switchToPreviousDisplayable(); // write post-action user code here } } else if (displayable == form4) { if (command == exitCommand5) { // write pre-action user code here switchToPreviousDisplayable(); // write post-action user code here } } // write post-action user code here } //</editor-fold>

//<editor-fold defaultstate="collapsed" desc=" Generated Getter: form1 "> /** * Returns an initiliazed instance of form1 component. * @return the initialized component instance */ public Form getForm1() { if (form1 == null) { // write pre-init user code here form1 = new Form("Gerenciar Cadastro de Pe\u00E7as", new Item[] { getTextField(), getTextField1(), getTextField2(), getStringItem() }); form1.addCommand(getOkCommand1()); form1.addCommand(getItemCommand4());

66
form1.addCommand(getExitCommand1()); form1.addCommand(getItemCommand5()); form1.addCommand(getItemCommand7()); form1.addCommand(getItemCommand8()); form1.setCommandListener(this); // write post-init user code here } return form1; } //</editor-fold> //<editor-fold defaultstate="collapsed" desc=" Generated Getter: textField "> /** * Returns an initiliazed instance of textField component. * @return the initialized component instance */ public TextField getTextField() { if (textField == null) { // write pre-init user code here textField = new TextField("C\u00F3digo da pe\u00E7a", null, 32, TextField.ANY); // write post-init user code here } return textField; } //</editor-fold> //<editor-fold defaultstate="collapsed" desc=" Generated Getter: textField1 "> /** * Returns an initiliazed instance of textField1 component. * @return the initialized component instance */ public TextField getTextField1() { if (textField1 == null) { // write pre-init user code here textField1 = new TextField("Descri\u00E7\u00E3o da pe\u00E7a", null, 32, TextField.ANY); // write post-init user code here } return textField1; } //</editor-fold> //<editor-fold defaultstate="collapsed" desc=" Generated Getter: textField2 "> /** * Returns an initiliazed instance of textField2 component. * @return the initialized component instance */ public TextField getTextField2() { if (textField2 == null) { // write pre-init user code here textField2 = new TextField("C\u00F3digo NCM", null, 32, TextField.ANY); // write post-init user code here

67
} return textField2; } //</editor-fold> //<editor-fold defaultstate="collapsed" desc=" Generated Getter: okCommand "> /** * Returns an initiliazed instance of okCommand component. * @return the initialized component instance */ public Command getOkCommand() { if (okCommand == null) { // write pre-init user code here okCommand = new Command("Ok", Command.OK, 0); // write post-init user code here } return okCommand; } //</editor-fold> //<editor-fold defaultstate="collapsed" desc=" Generated Getter: exitCommand "> /** * Returns an initiliazed instance of exitCommand component. * @return the initialized component instance */ public Command getExitCommand() { if (exitCommand == null) { // write pre-init user code here exitCommand = new Command("Sair", Command.EXIT, 0); // write post-init user code here } return exitCommand; } //</editor-fold> //<editor-fold defaultstate="collapsed" desc=" Generated Getter: okCommand1 "> /** * Returns an initiliazed instance of okCommand1 component. * @return the initialized component instance */ public Command getOkCommand1() { if (okCommand1 == null) { // write pre-init user code here okCommand1 = new Command("Gravar Pe\u00E7a Digitada", Command.OK, 0); // write post-init user code here } return okCommand1; } //</editor-fold> //<editor-fold defaultstate="collapsed" desc=" Generated Getter: exitCommand1 ">

68
/** * Returns an initiliazed instance of exitCommand1 component. * @return the initialized component instance */ public Command getExitCommand1() { if (exitCommand1 == null) { // write pre-init user code here exitCommand1 = new Command("Sair", Command.EXIT, 0); // write post-init user code here } return exitCommand1; } //</editor-fold> //<editor-fold defaultstate="collapsed" desc=" Generated Getter: itemCommand "> /** * Returns an initiliazed instance of itemCommand component. * @return the initialized component instance */ public Command getItemCommand() { if (itemCommand == null) { // write pre-init user code here itemCommand = new Command("Item", Command.ITEM, 0); // write post-init user code here } return itemCommand; } //</editor-fold> //<editor-fold defaultstate="collapsed" desc=" Generated Getter: itemCommand1 "> /** * Returns an initiliazed instance of itemCommand1 component. * @return the initialized component instance */ public Command getItemCommand1() { if (itemCommand1 == null) { // write pre-init user code here itemCommand1 = new Command("Item", Command.ITEM, 0); // write post-init user code here } return itemCommand1; } //</editor-fold> //<editor-fold defaultstate="collapsed" desc=" Generated Getter: form "> /** * Returns an initiliazed instance of form component. * @return the initialized component instance */ public Form getForm() { if (form == null) {

69
// write pre-init user code here form = new Form("Cadastro de Pe\u00E7as com NCM", new Item[] { getStringItem5() }); form.addCommand(getExitCommand2()); form.addCommand(getItemCommand2()); form.addCommand(getItemCommand3()); form.setCommandListener(this); // write post-init user code here

this.limpaCamposForm1("ESCOLHA OPERAO NO MENU"); this.desabilitaCamposForm1();

} return form; } //</editor-fold> //<editor-fold defaultstate="collapsed" desc=" Generated Getter: okCommand2 "> /** * Returns an initiliazed instance of okCommand2 component. * @return the initialized component instance */ public Command getOkCommand2() { if (okCommand2 == null) { // write pre-init user code here okCommand2 = new Command("Ok", Command.OK, 0); // write post-init user code here } return okCommand2; } //</editor-fold> //<editor-fold defaultstate="collapsed" desc=" Generated Getter: exitCommand2 "> /** * Returns an initiliazed instance of exitCommand2 component. * @return the initialized component instance */ public Command getExitCommand2() { if (exitCommand2 == null) { // write pre-init user code here exitCommand2 = new Command("Sair", Command.EXIT, 0); // write post-init user code here } return exitCommand2; } //</editor-fold> //<editor-fold defaultstate="collapsed" desc=" Generated Getter: itemCommand2 ">

70
/** * Returns an initiliazed instance of itemCommand2 component. * @return the initialized component instance */ public Command getItemCommand2() { if (itemCommand2 == null) { // write pre-init user code here itemCommand2 = new Command("Gerenciar Cadastro de Pe\u00E7as", Command.ITEM, 0); // write post-init user code here } return itemCommand2; } //</editor-fold> //<editor-fold defaultstate="collapsed" desc=" Generated Getter: itemCommand3 "> /** * Returns an initiliazed instance of itemCommand3 component. * @return the initialized component instance */ public Command getItemCommand3() { if (itemCommand3 == null) { // write pre-init user code here itemCommand3 = new Command("Relat\u00F3rio de Pe\u00E7as Cadastradas", Command.ITEM, 0); // write post-init user code here } return itemCommand3; } //</editor-fold> //<editor-fold defaultstate="collapsed" desc=" Generated Getter: stringItem "> /** * Returns an initiliazed instance of stringItem component. * @return the initialized component instance */ public StringItem getStringItem() { if (stringItem == null) { // write pre-init user code here stringItem = new StringItem("", null); stringItem.setPreferredSize(-1, -1); // write post-init user code here } return stringItem; } //</editor-fold> //<editor-fold defaultstate="collapsed" desc=" Generated Getter: itemCommand4 "> /** * Returns an initiliazed instance of itemCommand4 component. * @return the initialized component instance */

71
public Command getItemCommand4() { if (itemCommand4 == null) { // write pre-init user code here itemCommand4 = new Command("Digitar Pe\u00E7a", Command.ITEM, 0); // write post-init user code here } return itemCommand4; } //</editor-fold> //<editor-fold defaultstate="collapsed" desc=" Generated Getter: itemCommand5 "> /** * Returns an initiliazed instance of itemCommand5 component. * @return the initialized component instance */ public Command getItemCommand5() { if (itemCommand5 == null) { // write pre-init user code here itemCommand5 = new Command("Consultar por C\u00F3d da Pe\u00E7a", Command.ITEM, 0); // write post-init user code here } return itemCommand5; } //</editor-fold> //<editor-fold defaultstate="collapsed" desc=" Generated Getter: itemCommand6 "> /** * Returns an initiliazed instance of itemCommand6 component. * @return the initialized component instance */ public Command getItemCommand6() { if (itemCommand6 == null) { // write pre-init user code here itemCommand6 = new Command("Item", Command.ITEM, 0); // write post-init user code here } return itemCommand6; } //</editor-fold> //<editor-fold defaultstate="collapsed" desc=" Generated Getter: itemCommand7 "> /** * Returns an initiliazed instance of itemCommand7 component. * @return the initialized component instance */ public Command getItemCommand7() { if (itemCommand7 == null) { // write pre-init user code here itemCommand7 = new Command("Alterar Pe\u00E7a Existente", Command.ITEM, 0); // write post-init user code here }

72
return itemCommand7; } //</editor-fold> //<editor-fold defaultstate="collapsed" desc=" Generated Getter: form2 "> /** * Returns an initiliazed instance of form2 component. * @return the initialized component instance */ public Form getForm2() { if (form2 == null) { // write pre-init user code here form2 = new Form("Confirma\u00E7\u00E3o", new Item[] { getSpacer(), getStringItem1(), getStringItem2() }); form2.addCommand(getOkCommand3()); form2.addCommand(getExitCommand3()); form2.setCommandListener(this); // write post-init user code here } return form2; } //</editor-fold> //<editor-fold defaultstate="collapsed" desc=" Generated Getter: spacer "> /** * Returns an initiliazed instance of spacer component. * @return the initialized component instance */ public Spacer getSpacer() { if (spacer == null) { // write pre-init user code here spacer = new Spacer(16, 15); // write post-init user code here } return spacer; } //</editor-fold> //<editor-fold defaultstate="collapsed" desc=" Generated Getter: stringItem1 "> /** * Returns an initiliazed instance of stringItem1 component. * @return the initialized component instance */ public StringItem getStringItem1() { if (stringItem1 == null) { // write pre-init user code here stringItem1 = new StringItem("", null); // write post-init user code here } return stringItem1; }

73
//</editor-fold> //<editor-fold defaultstate="collapsed" desc=" Generated Getter: okCommand3 "> /** * Returns an initiliazed instance of okCommand3 component. * @return the initialized component instance */ public Command getOkCommand3() { if (okCommand3 == null) { // write pre-init user code here okCommand3 = new Command("Sim", Command.OK, 0); // write post-init user code here } return okCommand3; } //</editor-fold> //<editor-fold defaultstate="collapsed" desc=" Generated Getter: exitCommand3 "> /** * Returns an initiliazed instance of exitCommand3 component. * @return the initialized component instance */ public Command getExitCommand3() { if (exitCommand3 == null) { // write pre-init user code here exitCommand3 = new Command("N\u00E3o", Command.EXIT, 0); // write post-init user code here } return exitCommand3; } //</editor-fold> //<editor-fold defaultstate="collapsed" desc=" Generated Getter: stringItem2 "> /** * Returns an initiliazed instance of stringItem2 component. * @return the initialized component instance */ public StringItem getStringItem2() { if (stringItem2 == null) { // write pre-init user code here stringItem2 = new StringItem("", null); // write post-init user code here } return stringItem2; } //</editor-fold> //<editor-fold defaultstate="collapsed" desc=" Generated Getter: itemCommand8 "> /** * Returns an initiliazed instance of itemCommand8 component. * @return the initialized component instance

74
*/ public Command getItemCommand8() { if (itemCommand8 == null) { // write pre-init user code here itemCommand8 = new Command("Excluir Pe\u00E7a", Command.ITEM, 0); // write post-init user code here } return itemCommand8; } //</editor-fold> //<editor-fold defaultstate="collapsed" desc=" Generated Getter: form3 "> /** * Returns an initiliazed instance of form3 component. * @return the initialized component instance */ public Form getForm3() { if (form3 == null) { // write pre-init user code here form3 = new Form("Confirma\u00E7\u00E3o de Exclus\u00E3o de Pe\u00E7a", new Item[] { getStringItem3() }); form3.addCommand(getOkCommand4()); form3.addCommand(getExitCommand4()); form3.setCommandListener(this); // write post-init user code here } return form3; } //</editor-fold> //<editor-fold defaultstate="collapsed" desc=" Generated Getter: stringItem3 "> /** * Returns an initiliazed instance of stringItem3 component. * @return the initialized component instance */ public StringItem getStringItem3() { if (stringItem3 == null) { // write pre-init user code here stringItem3 = new StringItem("", null); // write post-init user code here } return stringItem3; } //</editor-fold> //<editor-fold defaultstate="collapsed" desc=" Generated Getter: okCommand4 "> /** * Returns an initiliazed instance of okCommand4 component. * @return the initialized component instance */ public Command getOkCommand4() {

75
if (okCommand4 == null) { // write pre-init user code here okCommand4 = new Command("Sim", Command.OK, 0); // write post-init user code here } return okCommand4; } //</editor-fold> //<editor-fold defaultstate="collapsed" desc=" Generated Getter: exitCommand4 "> /** * Returns an initiliazed instance of exitCommand4 component. * @return the initialized component instance */ public Command getExitCommand4() { if (exitCommand4 == null) { // write pre-init user code here exitCommand4 = new Command("N\u00E3o", Command.EXIT, 0); // write post-init user code here } return exitCommand4; } //</editor-fold> //<editor-fold defaultstate="collapsed" desc=" Generated Getter: itemCommand9 "> /** * Returns an initiliazed instance of itemCommand9 component. * @return the initialized component instance */ public Command getItemCommand9() { if (itemCommand9 == null) { // write pre-init user code here itemCommand9 = new Command("Listar Pe\u00E7as", Command.ITEM, 0); // write post-init user code here } return itemCommand9; } //</editor-fold> //<editor-fold defaultstate="collapsed" desc=" Generated Getter: form4 "> /** * Returns an initiliazed instance of form4 component. * @return the initialized component instance */ public Form getForm4() { if (form4 == null) { // write pre-init user code here form4 = new Form("Listagem de Pe\u00E7as Cadastradas", new Item[] { getStringItem4() }); form4.addCommand(getExitCommand5()); form4.setCommandListener(this); // write post-init user code here

76
} return form4; } //</editor-fold> //<editor-fold defaultstate="collapsed" desc=" Generated Getter: stringItem4 "> /** * Returns an initiliazed instance of stringItem4 component. * @return the initialized component instance */ public StringItem getStringItem4() { if (stringItem4 == null) { // write pre-init user code here stringItem4 = new StringItem("", null); // write post-init user code here } return stringItem4; } //</editor-fold> //<editor-fold defaultstate="collapsed" desc=" Generated Getter: okCommand5 "> /** * Returns an initiliazed instance of okCommand5 component. * @return the initialized component instance */ public Command getOkCommand5() { if (okCommand5 == null) { // write pre-init user code here okCommand5 = new Command("Ok", Command.OK, 0); // write post-init user code here } return okCommand5; } //</editor-fold> //<editor-fold defaultstate="collapsed" desc=" Generated Getter: backCommand "> /** * Returns an initiliazed instance of backCommand component. * @return the initialized component instance */ public Command getBackCommand() { if (backCommand == null) { // write pre-init user code here backCommand = new Command("Voltar", Command.BACK, 0); // write post-init user code here } return backCommand; } //</editor-fold> //<editor-fold defaultstate="collapsed" desc=" Generated Getter: exitCommand5 ">

77
/** * Returns an initiliazed instance of exitCommand5 component. * @return the initialized component instance */ public Command getExitCommand5() { if (exitCommand5 == null) { // write pre-init user code here exitCommand5 = new Command("Sair", Command.EXIT, 0); // write post-init user code here } return exitCommand5; } //</editor-fold> //<editor-fold defaultstate="collapsed" desc=" Generated Getter: stringItem5 "> /** * Returns an initiliazed instance of stringItem5 component. * @return the initialized component instance */ public StringItem getStringItem5() { if (stringItem5 == null) { // write pre-init user code here stringItem5 = new StringItem("", null); // write post-init user code here } return stringItem5; } //</editor-fold> /** * Returns a display instance. * @return the display instance. */ public Display getDisplay() { return Display.getDisplay(this); } /** * Exits MIDlet. */ public void exitMIDlet() { switchDisplayable(null, null); destroyApp(true); notifyDestroyed(); } /** * Called when MIDlet is started. * Checks whether the MIDlet have been already started and initialize/starts or resumes the MIDlet. */ public void startApp() {

78
if (midletPaused) { resumeMIDlet(); } else { initialize(); startMIDlet(); } midletPaused = false; } /** * Called when MIDlet is paused. */ public void pauseApp() { midletPaused = true; } /** * Called to signal the MIDlet to terminate. * @param unconditional if true, then the MIDlet has to be unconditionally terminated and all resources has to be released. */ public void destroyApp(boolean unconditional) { } // ----------- Mtodos -----------public void limpaCamposForm1(String parametro_linha_status) { getStringItem().setText(parametro_linha_status); getTextField2().setString(""); getTextField1().setString(""); getTextField().setString(""); } //--------------------------------public void desabilitaCamposForm1() {

textField.setConstraints(TextField.UNEDITABLE); textField1.setConstraints(TextField.UNEDITABLE); textField2.setConstraints(TextField.UNEDITABLE); } public void habilitaCamposForm1() {

textField2.setConstraints(TextField.ANY); textField1.setConstraints(TextField.ANY);

79
textField.setConstraints(TextField.ANY);

} public void solicitaConfirmacaoAlteraOuGravaNovaPeca() { PecaLOGICA pecaLOGICA = new PecaLOGICA(); PecaDAO pecaDAO = new PecaDAO(); pecaLOGICA = pecaDAO.consulta(getTextField().getString()); switchDisplayable(null, getForm2()); if (pecaLOGICA.getCodigoPeca().equals("")) {

this.stringItem1.setText("PEA NO ENCONTRADA \n PARA ALTERAO!"); this.stringItem2.setText("Deseja gravar a pea: \n\n" + "Cdigo da Pea:\n" + getTextField().getString() + "\n" + "Descrio da Pea:\n" + getTextField1().getString() + "\n" + "Cdigo NCM: \n" + getTextField2().getString() + "\n" + " como uma nova pea? ");

} else {

this.stringItem1.setText(" Deseja substituir a pea: "); this.stringItem2.setText( "Cd Pea: " + pecaLOGICA.getCodigoPeca() + "\n" + "Desc Pea: " + pecaLOGICA.getDescricaoPeca() + "\n" + "Cd NCM: " + pecaLOGICA.getCodigoNCM() + "\n" + "\nPor esta: \n\n" + "Cd Pea: " + getTextField().getString() + "\n" + "Desc Pea: " + getTextField1().getString() + "\n" + "Cd NCM: " + getTextField2().getString() + "\n");

} public void efetivaAlteraOuGravaNovaPeca() {

80

if (this.checaSeNovaPeca()) { this.gravaNovaPeca(); } else {

this.alteraPecaExistente(); }

} public void gravaNovaPeca() { PecaLOGICA pecaLOGICA = new PecaLOGICA(); pecaLOGICA.setCodigoPeca(getTextField().getString()); pecaLOGICA.setDescricaoPeca(getTextField1().getString()); pecaLOGICA.setCodigoNCM(getTextField2().getString()); PecaDAO pecaDAO = new PecaDAO(); pecaDAO.inserir(pecaLOGICA);

// System.out.println(pecaLOGICA.getCodigoPeca() + "\n"); // System.out.println(pecaLOGICA.getDescricaoPeca() + "\n"); // System.out.println(pecaLOGICA.getCodigoNCM() + "\n");

this.limpaCamposForm1("--NOVA PEA GRAVADA--"); } public void alteraPecaExistente() { PecaLOGICA pecaLOGICA = new PecaLOGICA(); pecaLOGICA.setCodigoPeca(getTextField().getString()); pecaLOGICA.setDescricaoPeca(getTextField1().getString()); pecaLOGICA.setCodigoNCM(getTextField2().getString()); PecaDAO pecaDAO = new PecaDAO(); pecaDAO.altera(pecaLOGICA);

81
// System.out.println(pecaLOGICA.getCodigoPeca() + "\n"); // System.out.println(pecaLOGICA.getDescricaoPeca() + "\n"); // System.out.println(pecaLOGICA.getCodigoNCM() + "\n");

this.limpaCamposForm1("--PEA ALTERADA--"); } public boolean checaSeNovaPeca() { PecaLOGICA pecaLOGICA = new PecaLOGICA(); PecaDAO pecaDAO = new PecaDAO(); pecaLOGICA = pecaDAO.consulta(getTextField().getString()); if (pecaLOGICA.getCodigoPeca().equals("")) { return true; } else { return false; }

} public boolean validaCampos() { if (this.getTextField().getString().equals("")) { this.stringItem.setText("--O CDIGO DA PEA-- \n -- OBRIGATRIO--"); return false; } else { return true; } } public void consultaPeca() {

PecaLOGICA pecaLOGICA = new PecaLOGICA();

PecaDAO pecaDAO = new PecaDAO(); pecaLOGICA = pecaDAO.consulta(getTextField().getString());

if (pecaLOGICA.getCodigoPeca().equals("")) {

82

this.stringItem.setText("--PEA NO ENCONTRADA--");

} else { getTextField().setString(pecaLOGICA.getCodigoPeca()); getTextField1().setString(pecaLOGICA.getDescricaoPeca()); getTextField2().setString(pecaLOGICA.getCodigoNCM()); this.stringItem.setText("PEA ENCONTRADA"); }

} public void solicitaConfirmacaoExclusaoPeca() { PecaLOGICA pecaLOGICA = new PecaLOGICA(); PecaDAO pecaDAO = new PecaDAO(); pecaLOGICA = pecaDAO.consulta(getTextField().getString()); switchDisplayable(null, getForm3());

this.stringItem3.setText("Deseja EXCLUIR a pea abaixo? \n\n" + "Cdigo da Pea:\n" + pecaLOGICA.getCodigoPeca() + "\n" + "Descrio da Pea:\n" + pecaLOGICA.getDescricaoPeca() + "\n" + "Cdigo NCM: \n" + pecaLOGICA.getCodigoNCM() + "\n" + " ");

} public void efetivaExclusaoPeca() {

PecaLOGICA pecaLOGICA = new PecaLOGICA();

//pecaLOGICA.setCodigoPeca(getTextField().getString()); //pecaLOGICA.setDescricaoPeca(getTextField1().getString()); //pecaLOGICA.setCodigoNCM(getTextField2().getString()); PecaDAO pecaDAO = new PecaDAO(); pecaLOGICA = pecaDAO.consulta(getTextField().getString());

83

pecaDAO.exclui(pecaLOGICA);

getTextField().setString(pecaLOGICA.getCodigoPeca()); getTextField1().setString(pecaLOGICA.getDescricaoPeca()); getTextField2().setString(pecaLOGICA.getCodigoNCM());

// System.out.println(pecaLOGICA.getCodigoPeca() + "\n"); // System.out.println(pecaLOGICA.getDescricaoPeca() + "\n"); // System.out.println(pecaLOGICA.getCodigoNCM() + "\n");

this.stringItem.setText("-ESTA PEA FOI EXCLUDA-\n");

} public void listarPecas() {

PecaLOGICA vetorPecaLOGICA[]; PecaDAO pecaDAO = new PecaDAO();

vetorPecaLOGICA = pecaDAO.lista();

System.out.println("Tamanho do vetor: " + String.valueOf(vetorPecaLOGICA.length));

if (vetorPecaLOGICA.length == 0) { this.stringItem4.setText("\n\n\n\n " } else { No h peas\n" +

cadastradas.");

this.stringItem4.setText("------------------------"); for (int i = 0; i < vetorPecaLOGICA.length; i++) { System.out.println("Indice: " + String.valueOf(i)); System.out.println("Sada no formulrio: \n");

84
System.out.println(vetorPecaLOGICA[i].getCodigoPeca()); System.out.println(vetorPecaLOGICA[i].getDescricaoPeca()); System.out.println(vetorPecaLOGICA[i].getCodigoNCM());

this.stringItem4.setText(this.stringItem4.getText() + "\n" + "Cd.Pea: " + vetorPecaLOGICA[i].getCodigoPeca() + "\n" + "Desc.Pea: " + vetorPecaLOGICA[i].getDescricaoPeca() + "\n" + "Cd. NCM: " + vetorPecaLOGICA[i].getCodigoNCM() + "\n" + "------------------------"); } } } }

2.3.4.6.2 Classe PecaDAO


/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package CadastroPecas.DAO; //import RMS.RMS; import CadastroPecas.LOGICA.PecaLOGICA; import java.io.IOException; import javax.microedition.lcdui.List; /** * * @author user */ public class PecaDAO { public void PecaDAO() { } public void inserir(PecaLOGICA peca) {

RMS.RMS.RS_NAME = "CadPecas"; RMS.RMS.open(); RMS.RMS.add(peca.getCodigoPeca()); RMS.RMS.add(peca.getDescricaoPeca());

85
RMS.RMS.add(peca.getCodigoNCM());

RMS.RMS.close();

RMS.RMS.RS_NAME = "CadPecas"; RMS.RMS.open(); // System.out.println("\n---REGISTROS COM PRINTLOOP 2 --\n"); // RMS.RMS.printLoop2(); // System.out.println("\n---------------------------\n"); RMS.RMS.close();

} public PecaLOGICA consulta(String par_string_consulta) { // throw new UnsupportedOperationException("Not supported yet."); int numeroRegistro = 0; PecaLOGICA pecaLOGICA = new PecaLOGICA();

RMS.RMS.RS_NAME = "CadPecas"; RMS.RMS.open(); numeroRegistro = RMS.RMS.findIdRecord(par_string_consulta, 3); if (numeroRegistro != 0) { pecaLOGICA.setCodigoPeca(RMS.RMS.getRecord(numeroRegistro)); pecaLOGICA.setDescricaoPeca(RMS.RMS.getRecord(numeroRegistro + 1)); pecaLOGICA.setCodigoNCM(RMS.RMS.getRecord(numeroRegistro + 2)); } else { pecaLOGICA.setCodigoPeca(""); pecaLOGICA.setDescricaoPeca(""); pecaLOGICA.setCodigoNCM(""); }

return pecaLOGICA; } public void altera(PecaLOGICA peca) { //throw new UnsupportedOperationException("Not supported yet.");

86
int idRegistro;

RMS.RMS.RS_NAME = "CadPecas"; RMS.RMS.open(); idRegistro = RMS.RMS.findIdRecord(peca.getCodigoPeca(), 3); RMS.RMS.update(idRegistro, peca.getCodigoPeca()); RMS.RMS.update(idRegistro + 1, peca.getDescricaoPeca()); RMS.RMS.update(idRegistro + 2, peca.getCodigoNCM()); // RMS.RMS.printLoop(); RMS.RMS.close();

} public void exclui(PecaLOGICA peca) { // throw new UnsupportedOperationException("Not supported yet."); int idRegistro;

RMS.RMS.RS_NAME = "CadPecas"; RMS.RMS.open(); idRegistro = RMS.RMS.findIdRecord(peca.getCodigoPeca(), 3); RMS.RMS.delete(idRegistro); RMS.RMS.delete(idRegistro + 1); RMS.RMS.delete(idRegistro + 2); // RMS.RMS.printLoop(); RMS.RMS.close();

} public PecaLOGICA[] lista() { // throw new UnsupportedOperationException("Not supported yet.");

87

RMS.RMS.RS_NAME = "CadPecas"; RMS.RMS.open();

int numRecords = RMS.RMS.findNumberOfRecords(); // System.out.println("numRecords calculado: "+ String.valueOf(numRecords) + "\n");

PecaLOGICA vetorPecaLogica [] = new PecaLOGICA[numRecords/3]; // System.out.println("Tamanho vetorPecaLogica : "+ String.valueOf(vetorPecaLogica.length) + "\n");

int numLoops = numRecords; // System.out.println("numLoops : "+ String.valueOf(numLoops) + "\n"); int indexVector = 0; for (int i = 1; i <= numLoops; i = i + 3) {

if (!RMS.RMS.isItAValidRecord(i)) { numLoops = numLoops + 3; } else { // System.out.println("Registo do mtodo DAO lista() \n"); // // // System.out.println(RMS.RMS.getRecord(i) + "\n"); System.out.println(RMS.RMS.getRecord(i+1)+"\n"); System.out.println(RMS.RMS.getRecord(i+2)+"\n");

vetorPecaLogica[indexVector] = new PecaLOGICA(); vetorPecaLogica[indexVector].setCodigoPeca(RMS.RMS.getRecord(i)); vetorPecaLogica[indexVector].setDescricaoPeca(RMS.RMS.getRecord(i+1)); vetorPecaLogica[indexVector].setCodigoNCM(RMS.RMS.getRecord(i+2)); indexVector = indexVector + 1;

// System.out.println("Vetor Carregado com: \n"); // System.out.println(vetorPecaLogica[indexVector-1].getCodigoPeca());

88

} RMS.RMS.close(); return vetorPecaLogica;

} }

2.3.4.6.3 Classe PecaLOGICA


/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package CadastroPecas.LOGICA; /** * * @author user */ public class PecaLOGICA { private String codigoPeca; private String descricaoPeca; private String codigoNCM; public String getCodigoNCM() { return codigoNCM; } public void setCodigoNCM(String codigoNCM) { this.codigoNCM = codigoNCM; } public String getCodigoPeca() { return codigoPeca; } public void setCodigoPeca(String codigoPeca) { this.codigoPeca = codigoPeca; }

89

public String getDescricaoPeca() { return descricaoPeca; } public void setDescricaoPeca(String descricaoPeca) { this.descricaoPeca = descricaoPeca; }

2.3.4.6.4 Classe RMS


/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package RMS; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import javax.microedition.rms.InvalidRecordIDException; import javax.microedition.rms.RecordEnumeration; import javax.microedition.rms.RecordStore; import javax.microedition.rms.RecordStoreException; import javax.microedition.rms.RecordStoreFullException; import javax.microedition.rms.RecordStoreNotFoundException; import javax.microedition.rms.RecordStoreNotOpenException; /* import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import javax.microedition.rms.InvalidRecordIDException; import javax.microedition.rms.RecordEnumeration; import javax.microedition.rms.RecordStore; import javax.microedition.rms.RecordStoreException; import javax.microedition.rms.RecordStoreFullException; import javax.microedition.rms.RecordStoreNotFoundException; import javax.microedition.rms.RecordStoreNotOpenException;

90
*/ /** * * @author user */ public class RMS { public static RecordStore rs; public static String RS_NAME; //public RMS(String par_nome_record_store) { // throw new UnsupportedOperationException("Not yet implemented"); // // } // Entendendo RMS // MIDP possui um conjunto de classes para realizar a persistncia de dados // chamado RMS (Record Management System). O mecanismo de armazenamento do // RMS implementado como uma coleo de registros onde cada registro // organizado como um array de bytes. O tamanho do array de bytes pode // variar para cada registro e no existem limitaes para o seu contedo. // Um record store representado pela classe // javax.microedition.rms.RecordStore. Atravs do mtodo openRecordStore // possvel uma instncia, veja o cdigo a seguir: public static void open() { this.RS_NAME = par_nome_record_store;

try { // rs.deleteRecordStore(RS_NAME); rs = RecordStore.openRecordStore(RS_NAME, true); } catch (RecordStoreNotFoundException e) { System.out.println("-- RecordStore inexistente"); } catch (RecordStoreException e) { System.out.println("-- Outro erro"); }

} // Para fechar um record store execute o mtodo closeRecordStore, // veja o cdigo a seguir: public static void close() { try { rs.closeRecordStore(); } catch (RecordStoreNotOpenException e) { System.out.println("-- O Record Store esta fechado"); } catch (RecordStoreException e) { System.out.println("-- Outro erro"); }

91
} // Adicionando Registros com RMS // possvel adicionar registros ao record store aberto utilizando o // mtodo addRecord, veja o cdigo a seguir: public static void add(String nome) { try { ByteArrayOutputStream baos = new ByteArrayOutputStream(); DataOutputStream dos = new DataOutputStream(baos); dos.writeUTF(nome); dos.flush(); byte[] data = baos.toByteArray(); int id = rs.addRecord(data, 0, data.length); baos.close(); dos.close(); } catch (IOException e) { System.out.println("-- Erro de IO"); } catch (RecordStoreFullException e) { System.out.println("-- No existe espao disponvel"); } catch (RecordStoreNotOpenException e) { System.out.println("-- O Record Store esta fechado"); } catch (RecordStoreException e) { System.out.println("-- Outro erro"); } } // O valor retornado pelo mtodo addRecord um identificador nico para // o registro adicionado. Os identificadores de registros comeam em 1 e so // incrementados a cada registro adicionado. Para obter o nmero // identificador do prximo registro a ser adicionado utilize o mtodo // getNextRecordID, veja o cdigo a seguir: public static int getNextRecordId() { int toReturn = 0; try { toReturn = rs.getNextRecordID(); } catch (RecordStoreFullException e) { System.out.println("-- No existe espao disponvel"); } catch (RecordStoreNotOpenException e) { System.out.println("-- O Record Store esta fechado"); } catch (RecordStoreException e) { System.out.println("-- Outro erro"); } return toReturn; } // Excluindo Registros com RMS // Para excluir um registro do record store execute o mtodo deleteRecord, // necessrio informa o id do registro a ser excludo como parmetro para // o mtodo deleteRecord. Veja o cdigo a seguir: public static void delete(int id) { try {

92
rs.deleteRecord(id); } catch (RecordStoreFullException e) { System.out.println("-- No existe espao disponvel"); } catch (RecordStoreNotOpenException e) { System.out.println("-- O Record Store esta fechado"); } catch (RecordStoreException e) { System.out.println("-- Outro erro"); } } // Para recuperar um registro utilize o mtodo getRecord. // O primeiro parmetro o identificador do registro, o segundo parmetro // o array de bytes onde o contedo do registro ser copiado e o terceiro // parmetro o offset de onde ser iniciada a cpia. Assume-se que // o array informado para o segundo parmetro ser grande o suficiente // para armazenar o tamanho do registro. Utilize o mtodo // getRecordSize para obter o tamanho do registro e redimensionar o // array de bytes antes de chamar o mtodo getRecord. public static String getRecord(int id) { String toReturn = ""; try { int recordSize = rs.getRecordSize(id); byte[] data = new byte[recordSize]; ByteArrayInputStream bais = new ByteArrayInputStream(data); DataInputStream dis = new DataInputStream(bais); int numBytes = rs.getRecord(id, data, 0); toReturn = dis.readUTF(); bais.reset(); bais.close(); dis.close(); } catch (IOException e) { System.out.println("-- Erro de IO"); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("-- Registro muito grande"); } catch (InvalidRecordIDException e) { System.out.println("-- ID inexistente"); } catch (RecordStoreNotOpenException e) { System.out.println("-- O Record Store esta fechado"); } catch (RecordStoreException e) { System.out.println("-- Outro erro"); } return toReturn; } // Alterando Registros com RMS // Para alterar os dados de um registro utilize o mtodo setRecord. // Perceba que no possvel alterar apenas parte dos dados de um registro. // O registro substituido pelo novo registro. public static void update(int id, String nome) { try { ByteArrayOutputStream baos = new ByteArrayOutputStream();

93
DataOutputStream dos = new DataOutputStream(baos); dos.writeUTF(nome); dos.flush(); byte[] data = baos.toByteArray(); rs.setRecord(id, data, 0, data.length); } catch (IOException e) { System.out.println("-- Erro de IO"); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("-- Registro muito grande"); } catch (InvalidRecordIDException e) { System.out.println("-- ID inexistente"); } catch (RecordStoreNotOpenException e) { System.out.println("-- O Record Store esta fechado"); } catch (RecordStoreException e) { System.out.println("-- Outro erro"); } } //Navegando nos Registros com RMS //Existem duas formas de navegar nos registros de um record store. // Pode-se navegar utilizando um loop simples entre os registros ou utilizar // a classe RecordEnumeration do RMS. Veja o cdigo a seguir: // Para uma navegao simples um loop funciona perfeitamente. // No entanto, se voc deseja ordenar e/ou localizar os registros, // a classe RecordEnumeration possui recursos poderosos para // executar a navegao. O que torna a classe RecordEnumerator // to especial o fato que ela pode navegar nos registros // utilizando um RecordFilter (para localizar) ou um RecordComparator // (para ordenar). Por exemplo, utilizando a interface RecordFilter, // possvel filtrar os registros que comeam com alguma substring // ou, utilizando a interface RecordComparator, possvel ordenar // os registros na ordem alfabtica. A classe RecordEnumerator no // possui um construtor. Para obter uma instncia, execute o mtodo // enumerateRecords da classe RecordStore. Os parmetros desse // mtodo so, respectivamente, um RecordFilter, um RecordComparator // e um booleano que indica se os registros alterados por outros // MIDlets sero visualizados no enumerator. public static void printLoop() { /* try { for (int i = 1; i <= rs.getNumRecords(); i++) { System.out.println("-- getRecord = " + getRecord(i)); } } catch (RecordStoreNotOpenException ex) { System.out.println("-- O Record Store esta fechado"); }*/ printLoop2(); } public static void printLoop2() { try {

94
int totalLoops = rs.getNumRecords(); for (int i = 1; i <= totalLoops ; i++) { if(getRecord(i).equals("")){ i = i + 2; totalLoops = totalLoops + 3; }else{ System.out.println("-- getRecord = " + getRecord(i)); } } } catch (RecordStoreNotOpenException ex) { System.out.println("-- O Record Store esta fechado"); } }

public static void printEnum() { try { RecordEnumeration re = rs.enumerateRecords(null, null, false); while (re.hasNextElement()) { System.out.println("-- getRecord = " + getRecord(re.nextRecordId())); } } catch (InvalidRecordIDException ex) { System.out.println("-- ID inexistente"); } catch (RecordStoreNotOpenException ex) { System.out.println("-- O Record Store esta fechado"); } } // Ordenando Registros com RMS // A interface RecordComparator possui um nico mtodo que compara // dois arrays de bytes. Crie uma classe que implementa essa interface, // implemente o mtodo compare e passe uma instncia da sua // classe para o RecordEnumerator. Veja o cdigo a seguir: public static void printEnumOrder() { try { ComparatorString sc = new ComparatorString(); RecordEnumeration re = rs.enumerateRecords(null, sc, false);

while (re.hasNextElement()) { System.out.println("-- getRecord = " + getRecord(re.nextRecordId())); } } catch (InvalidRecordIDException ex) { System.out.println("-- ID inexistente"); } catch (RecordStoreNotOpenException ex) { System.out.println("-- O Record Store esta fechado"); } }

95

// Filtrando Registros com RMS // A interface RecordFilter possui um nico mtodo que recebe um array de // bytes como parmetro. Crie uma classe que implementa essa interface, // implemente o mtodo matches e passe uma instncia da sua classe // para o RecordEnumerator. // Esta classe ir filtrar todos os registros que possuem o nome igual // ao nome passado no parmetro do construtor. Utilize agora a classe // criada para filtrar os registros. // Veja o cdigo a seguir: // Esta classe ir filtrar todos os registros que possuem o nome // igual ao nome passado no parmetro do construtor. Utilize agora // a classe criada para filtrar os registros. Veja o cdigo a seguir: public static void printEnumFilter() { try { RecordFilterNome rfn = new RecordFilterNome("Zezinho"); RecordEnumeration re = rs.enumerateRecords(rfn, null, false); while (re.hasNextElement()) { System.out.println("-- getRecord = " + getRecord(re.nextRecordId())); } } catch (InvalidRecordIDException ex) { System.out.println("-- ID inexistente"); } catch (RecordStoreNotOpenException ex) { System.out.println("-- O Record Store esta fechado"); } } // Percorre os registros do record store, do id=1 at o final, saltando // "step" registros de cada vez, at encontrar o primeiro registro cujo // contedo seja igual ao parmetro stringKey. Ento retorna o id // desse registro coincidente. Se no achar nenhum registro coincidente, // retorna 0. public static int findIdRecord(String stringKey, int step) { int idFound = 0;

try { int numValidRecords = rs.getNumRecords();

for (int i = 1; i <= numValidRecords; i = i + step) { if(getRecord(i).equals("")){ numValidRecords = numValidRecords + step; } else if(stringKey.equals(getRecord(i))) { idFound = i; return idFound;

96
} //System.out.println("-- getRecord = " + getRecord(i)); } } catch (RecordStoreNotOpenException ex) { System.out.println("-- O Record Store esta fechado"); } finally { return idFound; } }

public static int findNumberOfRecords(){ int i = 0; try { i = rs.getNumRecords(); } catch (RecordStoreNotOpenException ex) { ex.printStackTrace(); } return i; }

public static boolean isItAValidRecord(int id){ if(getRecord(id).equals("")){ return false; }else{ return true; }

} }

2.4 PESQUISA DE SISTEMAS GERENCIAIS Neste tpico, tendo como base os sistemas encontrados nas empresas visitadas, ser apresentada uma classificao para cada tipo de sistema encontrado (SIO, SIG, SIE), e descrito o E-business utilizado por cada uma com os sistemas que servem para seu apoio/funcionamento.

97

2.4.1 Tipos de sistemas de informao A discusso abaixo abordar os sistemas encontrados nas empresas visitadas, Fcil Veculos e Peas Ltda e Eurocarr Veculos. A empresa Fcil Veculos e Peas Ltda dispe de um sistema ERP baseado em linguagem Cobol e plataforma Linux, chamado Mr. Sys 21, desenvolvido pela CNP Engenharia de Sistemas. O sistema ERP da Eurocarr Veculos chamado NBS, desenvolvido em linguagem Delphi e utilizando banco de dados Oracle. Fcil Veculos e Eurocarr so concessionrias da bandeira Chevrolet, da montadora General Motors. 2.4.1.1 Sistemas de Informao Operacional (SIO) Os sistemas de Informao Operacional tratam das operaes rotineiras da organizao, sendo a base de conhecimento da mesma, armazenando dados do dia a dia de todas as operaes executadas nos diversos setores. A finalidade dos SIOs a manipulao e armazenamento dos dados bsicos da organizao, para ficarem disponveis para o nvel ttico da organizao. O sistema ERP Mr. Sys 21 (Fcil Veculos) dispe dos seguintes mdulos de Sistemas de Informao Operacional: a) Master; b) Peas; c) Veculos; d) Oficina; e) Faturamento; No mdulo Master so efetuados cadastros e manuteno dos parmetros gerais de funcionamento do sistema, desce cadastramento de usurios, a formas de pagamento, cdigos fiscais de operao, e demais parametrizaes. No mdulo Peas so efetuados cadastros e manuteno do estoque de peas. No mdulo Veculos so realizadas as operaes de pedido, compra e venda de veculos novos e usados.

98

No mdulo Oficina so cadastradas as informaes referentes aos veculos que entram para manuteno, alm de serem informados os servios realizados e requisitadas as peas utilizadas nos reparos. No mdulo de faturamento, so realizados os cadastros de clientes, e a emisso de faturas e duplicatas. O sistema ERP NBS (Eurocarr) dispe dos seguintes mdulos de Sistemas de Informao Operacional: a) Clientes; b) Compras; c) Pedido; d) Nbs_os; e) Apontador; f) Entregas; g) Sisfin; h) Nbs_user; O mdulo Clientes responsvel pelo cadastro e manuteno dos dados dos clientes e fornecedores, pessoas fsicas, ou jurdicas. Toda operao de venda ou compra requer que o cliente ou fornecedor esteja cadastrado. O mdulo Compras o que permite a entrada de produtos, sejam peas ou veculos, atravs de notas fiscais de entrada. No caso de veculo usado dados como parte de pagamento de um veculo novo, o processo de entrada permite a emisso de uma nota de entrada do prprio sistema. O mdulo de Pedido onde so gerados os pedidos de peas para a montadora. Quando da chegada da pea, a mesma inserida no estoque pela nota de entrada, atravs do mdulo Compras, e esse procedimento provoca a mudana do status do pedido para atendido. O mdulo NBS_OS utilizado pelo departamento de oficina, para abertura de ordens de servio. No NBS_OS so inseridos todos os dados referentes ao veculo que entra na oficina para manuteno, como caractersticas fsicas, modelo, placa, kilometragem, tipo de ordem de servio (oramento, garantia, interna, etc), acessrios e ferramentas (estepe, macaco, chave de roda), descrio do defeito, etc. Durante o atendimento da ordem de servio, so lanados os tipos de servios, peas utilizadas no conserto, servios de terceiros, etc. O mdulo Apontador onde os mecnicos marcam seus tempos de

99

servio, indicando em que momento comeam a trabalhar em uma ordem de servio especfica, e o momento em que deixam de trabalhar nessa ordem de servio. No final da manuteno do veculo, esses apontamentos fornecem as informaes sobre os servios realizados e tempos aplicados dos mecnicos. O mdulo de Entregas contm os procedimentos para entrega de veculos vendidos, e permite inserir informaes sobre o andamento do preparo do veculo vendido para entrega, como lavagem, emplacamento, reviso mecnica de entrega, abastecimento de combustvel, etc. O veculo aparece no mdulo de Entregas no momento em que concretizada a venda, e seu status muda para entregue quando do fim dos procedimentos e retirada do veculo pelo cliente. O mdulo Sisfin concentra as operaes financeiras. Operaes de contas a pagar, contas a receber, cheques, extratos bancrios so inseridas, mantidas e controladas a partir do Sisfin. O mdulo Nbs_user de utilizao do departamento de TI, e permite o cadastramento, ativao e desativao de usurios. Alm disso, o Nbs_user o centro de controle dos acessos e permisses, sendo a ferramenta que permite TI estabelecer as restries s funes do sistema, de acordo com o usurio e a funo do mesmo na empresa. 2.4.1.2 Sistemas de Informao Gerencial (SIG) Os Sistemas de Informao Gerenciais trasformam e reagrupam os dados obtidos dos SIOs da organizao, de modo a facilitar a tomada de deciso pelo corpo gerencial. Os SIGs fornecem aos gerentes relatrios e acessos online para verificao de desempenho atual e registros histricos da empresa. No sistema ERP Mr. Sys 21 (Fcil Veculos) no h distino clara entre o que SIO e SIG, pois todos os mdulos mencionados como SIO, alm da possibilidade de insero e manuteno dos dados dirios, tambm possuem uma diversidade de relatrios relacionados ao departamento ao qual o mdulo atende, e que servem de apoio deciso para os gerentes. O sistema ERP NBS (Eurocarr) dispe dos seguintes mdulos de Sistemas de Informao Gerencial: a) Gerencia_estoque; b) Ger_veic;

100

O mdulo Gerencia_estoque permite a administrao do estoque de peas, com acesso todas as informaes de entrada, sada, quantidades, valores. atravs deste mdulo que o gerente de peas gera relatrios para avaliao do movimento do departamento de peas. O mdulo Ger_veic permite ao gerente de vendas de veculos o controle sobre as informaes do estoque de veculos, a aprovao de propostas de venda, com simulao de custos e lucro, permitindo ao gerente a validao ou cancelamento de vendas, conforme a negociao e as margens de lucro calculadas com base nos custos dos veculos, custos operacionais da empresa, comisses, juros, etc. 2.4.1.3 Sistemas de Informao Estratgica (SIE) Os Sistemas de Informao Estratgica transformam os dados obtidos dos SIOs e SIGs, agrupando-os para facilitar a tomada de deciso. Os SIE s so utilizados pelo corpo diretivo da organizao, visando facilitar a tomada de deciso por pessoas que tm responsabilidade global pela organizao. Os apresentao. O sistema Mr. Sys 21 (Fcil Veculos) possui um mdulo que funciona como sistema de informao estratgica (SIE). Como o Mr. Sys 21 um sistema legado, a interface do tipo texto puro, sem possibilidade de gerar grficos. Para contornar esse problema, o fabricante desenvolveu um sistema chamado Enterprise Information System EIS desenvolvido em linguagem Delphi e que pode utilizar os arquivos do Cobol como fonte de dados, atravs de um conjunto de tabelas de traduo e um driver que utilizando essas tabelas, pode disponibilizar as entidades de dados dos arquivos do Cobol como uma fonte de dados ODBC. O EIS ento capaz de obter os dados do Mr. Sys 21, alimentados pelas funcionalidades SIO do mesmo, e processa-los gerando tabelas e grficos com os resultados da movimentao de peas, veculos, oficina, dados financeiros, etc. O NBS (Eurocarr) possui um sistema de informao estratgica, o NBS_GERENCIAL. Este mdulo permite a visualizao do movimento de peas, servios e veculos, apresentando comparativos mensais em tabelas e grfico de SIEs costumam oferecer informaes grficas e bem estruturadas, integrando fontes de dados e proporcionando flexibilidade de

101

barras. Exibe dados de custo, faturamento, margem de lucro lquida. O NBS_GERENCIAL transforma os dados provenientes dos sistemas de informao operacionais e gerenciais e permite estipular projees futuras com base nas informaes e anlises dos nmeros de meses anteriores. 2.4.1.4 Customer Relationship Management (CRM) O sistema Mr. Sys 21 (Fcil Veculos) permite o gerenciamento do relacionamento com o cliente, mais uma vez, utilizando a traduo do Cobol para ODBC, atravs de um mdulo de interface grfica desenvolvida em Delphi, chamado CAC Central de Atendimento ao Cliente. O CAC mantm uma base de dados prpria, em forma de banco de dados, das operaes de relacionamento com o cliente, combinando informaes alimentadas pelo usurio que utiliza o mdulo e informaes obtidas da base Cobol do Mr. Sys 21, via tabelas de traduo e driver ODBC, como no caso do EIS citado acima. O sistema NBS (Eurocarr) comporta o processo de CRM, atravs de duas ferramentas: o CRM_PREMIUM e o NBS_CRM. O NBS_CRM contm um fluxo de atendimento ao cliente, que utilizado pelos recepcionistas, que abordam o cliente na entrada da loja e direcionam o atendimento, conforme a agenda dos vendedores. O CRM_PREMIUM o controle dos vendedores que permite montar a agenda de atendimento e estabelecer prazos para os vendedores efetuarem contatos com seus clientes, inclusive para acompanhamento de satisfao do psvenda. 2.4.2 E-business Tanto a Fcil Veculos como a Eurocarr Veculos contam com um mesmo sistema de e-business, baseado na web, mantido pela montadora (General Motors) e intitulado GlobalConnect. O GlobalConnect site centralizador das aplicaes web que formam o e-business da General Motors com as concessionrias, e funciona sobre uma infraestrutura chamada projeto Gmconnect. O Gmconnect uma extranet que interliga a montadora com as concessionrias de veculos, atravs de links de fibra

102

tica ou conexo satlite, via Embratel, conforme a disponibilidade de servios de telecomunicao no local onde est situada a concessionria. O GlobalConnect o portal web principal e comporta operaes de e-commerce B2B, troca de informaes e relacionamento, com as seguintes funcionalidades: a) Gerenciamento de pedidos de veculos; b) Gerenciamento de sistema de venda direta de veculos; c) Administrao de estoque de peas da concessionria; d) Atualizao de software de dispositivos de diagnstico veicular da oficina; e) Prestao de contas com a montadora; f) Processos de garantia de veculos; g) Biblioteca de documentao, manuais e comunicados. O gerenciador de pedidos de veculos permite ao gerente de vendas solicitar os veculos novos para reposio de estoque. O gerenciador de venda direta permite ao gerente de vendas diretas de veculos administrar o processo de venda direta, desde a determinao da configurao do veculo at o fechamento da venda e acompanhamento de prazos de entrega. A venda direta uma modalidade que visa atender clientes especiais, como produtores rurais, taxistas, etc, que so categorias beneficiadas por incentivos fiscais do governo e com isso tm permisso para comprar veculos nessa modalidade, com iseno de impostos. O sistema de administrao de estoque de peas da concessionria chama-se Autogiro e trata-se de um projeto consolidado da montadora no qual a prpria montadora administra o estoque da concessionria, realizando os clculos necessrios para determinar os nveis de estoque e gerando pedidos automticos de reposio. O sistema Autogiro comunica-se com o sistema ERP da concessionria, mediante carga de arquivos enviados pela montadora e exportao de arquivos do sistema ERP para serem enviados montadora. A aprovao das polticas de estoque estipuladas pela montadora feita pelo gerente de peas, que pode, atravs da opo Autogiro no site de e-business GlobalConnect, alterar quantidades pedidas, dentro de certos limites, conforme deciso da concessionria. O site GlobalConnect dispe de uma aplicao chamada TISWEB, que onde a oficina carrega os programas necessrios para atualizao dos aparelhos de diagnstico veicular. O TISWEB disponibiliza aplicaes desenvolvidas

103

em Java e carregadas na modalidade Java Web Start, de modo que um novo programa baixado a cada utilizao. Isso facilita a atualizao desses programas e tambm do firmware dos dispositivos. Dois dispositivos so utilizados para diagnstico veicular, o TECH2 e o MDI. Esses dispositivos so capazes de comunicar-se com os veculos produzidos pela montadora atravs de um conector embaixo do painel, e com o computador da oficina via cabo serial (TECH2) ou wireless (MDI). Os programas executados (TIS2WEB para o TECH2 e GDS2 para o MDI) podem ento, comunicando-se com os dispositivos, obter dados do funcionamento do veculo, ler sensores, e informar os cdigos dos defeitos detectados. A prestao de contas com a montador se d atravs da aplicao FACTS, na qual o GlobalConnect permite estabelecer um relacionamento do plano de contas da concessionria com um plano de contas padro da montador. O FACTS deve ser utilizado pelos contadores mensalmente, com prazo determinado, para o envio das informaes contbeis do ms anterior para validao da montadora. A aplicao de garantia dentro do GlobalConnect permite ao garantista o tratamento de todo o processo de atendimento dos veculos que entram na oficina em garantia, desde a solicitao de peas, lanamento dos servios e tratamento dos reembolsos pagos pela montadora aos atendimentos de garantia da concessionria. A Biblioteca do GlobalConnect um acervo de todas as publicaes da montadora, com manuais, comunicados, boletins tcnicos, documentos dos procedimentos de manuteno, etc. A Biblioteca organizada por departamentos e tipos de documentos, alm de permitir a pesquisa e localizao de documentos por assunto. Os documentos so disponibilizados na sua maioria, no formato PDF. Novas publicaes da montadora so enviadas por e-mail para as concessionrias e disponibilizadas na biblioteca.

104

3 CONCLUSO Nas avaliaes de IHC realizadas junto s empresas visitadas, constatou-se que as aplicaes atendem a alguns critrios de IHC, mas no a todos. Na maioria dos casos, o foco do desenvolvimento foi o atendimento das necessidades do cliente relacionadas aos processos e regras de negcio, ficando a interface com o usurio relegada a segundo plano. Certas deficincias de ergonomia e usabilidade das interfaces so ignoradas, mesmo aps anos de manuteno dos sistemas. A dependncia das empresas para com seus sistemas de ERP e o desconhecimento das mesmas em relao aos custos indiretos provenientes do desgaste humano no uso de interfaces com ergonomia pobre parece contribuir para essa condio. No tpico implementao de recursos utilizados pelos Websites, a aplicao web desenvolvida demonstrou a possibilidade de utilizar as tecnologias da linguagem PHP e do banco de dados MySQL, para, atravs de uma pgina web, cadastrar produtos, persistindo o cadastro em banco de dados, fazendo upload da foto do produto, e em seguida gerar um relatrio dos produtos cadastrados. Uma funcionalidade de uma das empresas foi analisada e transferida com sucesso para utilizao em dispositivo mvel, utilizando a linguagem de programao Java Micro Edition, o ambiente de desenvolvimento Netbeans e as funcionalidades oferecidas pelos dispositivos mveis para persistncia de dados na memria no voltil (RMS Record Management System). Foi possvel identificar, nas empresas visitadas, a existncia de Sistemas de Informao Operacional (SIO), Sistemas de informao Gerencial (SIG), Sistemas de Informao Estratgica (SIE), todos integrados para constituir um sistema mais amplo, o ERP (Enterprise Resource Planning). Foi identificada tambm a presena de tecnologias que do suporte ao gerenciamento de relacionamento com o cliente, Costumer Relationship Management (CRM) alm de todas utilizarem E-business para relacionamento com o principal parceiro de negcios.

105

REFERNCIAS PERINI, Luis Cludio; SCARAMUZZA, Bruno Cezar; BRUNETTA, Ndia. Gesto de Sistemas de Informao.So Paulo: Pearson Prentice Hall, 2010. ROCHA, Helosa Vieira da, BARANAUSKAS, M. Ceclia C. Slides baseados no livro: Design e Avaliao de Interfaces Humano Computador.<http://www.slideshare.net/fabianodamiati/ihc-aula8-m-i-avaliacaoheuristica>.Acesso em: 29 ago. 2011 s 18:06hs. WINCKLER, Marco Antnio Alba. NEMETZ, Fbio. LIMA, Jos Valdeni de. Estudo de Caso da Aplicao do Mtodo de Avaliao Heurstica em um Projeto Multidisciplinar.<http://www.unicamp.br/~ihc99/Ihc99/AtasIHC99/AtasIHC98/Winckl er.pdf>. Acesso em: 29 ago. 2011 s 18:11hs. ANDRES, Daniele Pinto. Avaliao de Usabilidade nos Softwares Educacionais.<http://guaiba.ulbra.tche.br/pesquisa/praxis/artigos_2004/sistemas2.p df> . Acesso em: 29 ago. 2011 s 18:12hs. ALMEIDA, Jos Henrique Monteiro de. PHP com MySQL.<http://www.cin.ufpe.br/~ags/2464_php_com_mysql.pdf>. Acesso em: 29 ago. 2011. s 18:15hs. JUNIOR, Fred Cox. Programando para Web com PHP/MySQL. <http://apostilas.fok.com.br/attachments/036_programando-para-web-com-php-emysql.pdf>. Acesso em: 29 ago. 2011 s 18:22hs. Autor desconhecido.RMS Tutorial.<http://wiki.netbeans.org/RMSTutorial>. Acesso em: 29 ago. 2011 s 19:08hs. OGLIARI, Ricardo. Persistncia de dados em Java ME.< http://www.mobilidadetudo.com/2006/07/persistncia-de-dados-em-java-me.html>. Acesso em: 29 ago. 2011 s 19:34hs. CINTRA, Wesley. Cadastro de clientes com HTML PHP.<http://www.codigofonte.net/dicas/php/322_cadastro-de-clientes-com-html-php>. Acesso em: 6 set. 2011 s 16:49hs. +

Potrebbero piacerti anche