Upload
rodrigo-santos
View
214
Download
0
Embed Size (px)
Citation preview
Projeto de Processamento de Informação (UFABC)
2015.1
Delta Águas
Raul Fernandes Ribeiro 11018314
Rodrigo de Carvalho Santos 11000714
1- Descrição:
O programa tem como fim realizar o cadastro de clientes. Por ser desenvolvido
no intuito de cadastro de clientes, o programa pretende automatizar o processo de
cadastro e busca do cliente, retornando ao atendente as informações como endereço
completo caso o cliente já esteja cadastrado.
Além do problema principal que buscava o cadastro de clientes, foi
acrescentado ao programa o desenvolvimento de pedidos, no qual o cliente informa
ao atendente o que deseja e o programa gera o pedido com valor total resultante, e as
informações sobre endereço e nome do cliente, facilitando a cópia e a passagem de
informações a quem vai entregar o pedido.
2- Como foi “Pensado”?
Planejamento
Após a idealização do projeto, discutiu-se quais informações (dados) seriam úteis
para que pudéssemos viabilizar o cadastro de cliente. Conclui-se que com o telefone,
endereço, o complemento- quando necessário- e o nome do cliente, nesta respectiva
ordem, seriam os dados necessários capazes de individualizarem qualquer cliente.
Bastava pensar em uma maneira de guardar os dados destes clientes em uma
estrutura de dados conveniente para a situação, e um modo de acessar esses dados e
dispô-los de uma forma interessante, visando o aperfeiçoamento do atendimento ao
cliente.
Primeiramente pensou-se o tipo de estrutura de dados que poderia ser utilizado
para armazenar os clientes cadastrados; o formato arquivo.txt foi aquele que se
revelou mais adequado as demandas que tínhamos por ser um formato viável para a
quantidade de dados que o problema demandava (a loja em questão possui um
número de clientes limitado, não necessitando criar um banco de dados extenso), e
sobretudo, de simples manipulação.
Para a disposição dos dados anteriormente destacados, decidiu-se pelo uso do
JFrame, ferramenta que atendeu as expectativas quanto à disposição dos dados em
uma tela de execução e que se mostrou muito versátil no decorrer do
desenvolvimento por oferecer muitas opções de soluções para os problemas que
enfrentamos.
Construção do Algoritmo
1- Cadastrando e verificando o Cliente.
Neste seguinte passo foi pensado no modo de armazenamento das informações
dos campos de texto utilizados no JFrame e na leitura dessas informações,
posteriormente, no arquivo. Basicamente, foram utilizadas importações do Java para
gravar e ler essas informações, como FileReader, FileWriter, InputStreamReader,
PrintWriter, BufferedReader, InputStreamReader e entre outras.
No cadastro de cliente simplesmente organizamos o código para que gravasse em
um arquivo Endereço.txt, respectivamente, as informações do telefone, endereço,
complemento e nome do cliente inseridas nos campos de texto do JFrame, em uma
linha , sempre separando cada informação nova por um delimitador “_”, e sempre
separando cada cliente em uma linha diferente.
Para confrontar a existência ou não de um cadastro no arquivo Endereco.txt que
armazenaria as informações do cliente lançou-se um vetor (“string split”) para
comparar se a informação de busca de cadastro (no caso do nosso programa, o
telefone do cliente) era compatível com a informação de busca gravada em alguma
linha do arquivo e retornar as informações cadastradas no JFrame, que se
encontravam distribuídas no restante da linha, entre os marcadores delimitados.
2- Realizando o pedido e calculando o valor total comprado.
Para a realização do pedido, dado que a quantidade de produtos não era tão
extensa, optou-se pelo uso de caixas de seleção, opção do JFrame, simplificando muito
a interação com o usuário uma vez que construímos a lógica valendo-se de
condicionais, de tal modo que bastava selecionar os produtos que o cliente deseja e as
suas quantidades, que o pedido seria armazenado em um arquivo Pedido.txt
permitindo nos passos seguintes uma relativa facilidade no cálculo do total bem como
no acesso a quais produtos foram requisitados.
Para o cálculo do total, utilizou-se semelhante estratégia a aquela usada para a
confirmação da existência de um cadastro; buscar os pedidos feitos e compará-los com
os respectivos produtos da tabela de preço, igualmente armazenada em um arquivo
Tabela de Preco.txt, - a opção neste ponto preterindo uma matriz justificou-se pelo
arquivo Tabela de Preco.txt ter um acesso mais simples, de tal maneira que os
proprietários poderiam mudar os preços por conta própria- para assim acessar as
quantidades requisitadas dos produtos e multiplicá-las com os seus respectivos preços
unitários, retornando ao final, o total do pedido.
3- Mensagem de conclusão do pedido.
Com o intuito de finalizar o atendimento, discutiu-se uma forma de resumir as
informações geradas pelo pedido e atendimento como um todo de um modo que
assim que concluído a compra, o usuário tivesse acesso ao nome do cliente, o seu
endereço, quais produtos ele comprou, e o total da operação.
Selecionamos o JOptionPane como ferramenta, justamente pelas opções de
mensagens encontradas, e assim, varremos todas as informações geradas até o
instante antes da conclusão do pedido organizando –as em strings que quando
concatenadas, fornecem, em uma razoável edição, o nome do cliente, seu endereço.
Fluxograma Geral:
4- Problemas Enfrentados e como foram resolvidos
A manipulação das muitas importações necessárias na manipulação de um
arquivo.txt (BufferedReader, PrintWriter, InputStreamReader, FileWriter, etc.) foi
um grande problema no início, pois todo o projeto estava encadeado no cadastro
de clientes, e não seria possível realizar tal tarefa sem o uso de muitas das
importações mencionadas, bem como.
Todavia, com o estudo destas funções do Java, a pesquisa em sites e fóruns
focados em programação, vídeos e vídeo-aulas e o auxílio providencial do
professor, nós fomos gradualmente entendendo cada vez mais o que cada
importação faz, porque elas devem ser usadas em conjunto, e com êxito no final do
projeto estávamos já manipulando os códigos que as utilizam com sucesso.
No início do projeto, muitas vezes, ao depararmos com um problema a ser
resolvido no cadastro, começávamos a construir a solução como um único código,
e tal estratégia se mostrou muitas vezes ineficiente, pois chegávamos em um
resultado que, quando não entendíamos o porque não funcionava , continha
inúmeros erros que praticamente inutilizava o trabalho feito.
Enfrentamos essa situação começando a tratar cada novo problema parte por
parte, uma solução simples de cada vez, e dessa maneira, realizamos cerca de 10 a
15 projetos que se intitulavam rascunho ou teste, cuja única finalidade foi a de
estudar como resolver um problema simples, e a partir daí, estendê-lo para as
condições do problema que tínhamos que resolver.
Tomando essa maneira de encarar os problemas, a construção do projeto
tornou-se muito mais organizada, o planejamento muito mais fácil e a própria
concepção das soluções e códigos mais interessantes, um grande aprendizado.
Outro problema encontrado ao final do programa foi a forma como o Java faz a
leitura da acentuação como por exemplo o til(~), o qual dificultava a leitura do
pedido executado para a consulta na tabela de preços. Estes problemas foram
resolvidos com o auxílio do depurador e com a retirada dos acentos dos produtos
para não causar erro na leitura.
Em uma análise geral, a necessidade de explorar muito mais funções disponibilizadas
pelo Java, a compreensão e o discernimento de qual função seria mais apropriada para
a situação apresentada, a adaptação dos tópicos discutidos em aula no auxílio do
projeto, além dos problemas com a lógica do código, foram dificuldades enfrentadas
que novamente, sem o estudo da linguagem, a pesquisa, não seriam resolvidos.
*Informações Adicionais:
1. Clientes (aproximadamente): 500 clientes;
2. Lista de produtos:
Garrafão 20L Ret. (Bioleve);
Garrafão 20L Ret. (Olímpica);
Garrafão 20L Ret. (Estância);
Garrafão 10L Ret. (Bioleve);
Garrafão 10L Ret. (Bioleve);
Garrafão 10L Ret. (Bioleve);
Galão 6,25 L Des. (Bonafont);
Galão 6,25L Des. (Bioleve);
Galão 1,5 L (Bonafont);
Galão 1,5L (Bioleve);
Obs.: Ret. e Des. são Retornáveis e Descartáveis respectivamente.
*Layout: