You are on page 1of 47

SUMRIO

1 NTRODUO.......................................................................................................3
2 JUSTFCATVA......................................................................................................4
3 OBJETVOS...........................................................................................................5
3.1 OBJETVO GERAL.............................................................................................5
3.2 OBJETVOS ESPECFCOS..............................................................................5
4 REFERENCAL TERCO.....................................................................................6
4.1 CONCETOS BSCOS.....................................................................................6
4.1.1 ADMNSTRAO..........................................................................................6
4.1.2 NFORMAO................................................................................................6
4.1.3 DADOS...........................................................................................................6
4.1.4 NFORMAO................................................................................................6
4.1.5 CONHECMENTO..........................................................................................7
4.2 COMUNCAO................................................................................................7
4.3 PLANEJAMENTO ESTRATGCO DA NFORMAO....................................7
4.3.1 ALNHAMENTO ESTRATGCO DE NEGCOS E TECNOLOGA DA
NFORMAO ALCANADO QUANDO:.................................................................7
5 METODOLOGA PROPOSTA................................................................................9
6 CARACTERZAO DA ORGANZAO EM ESTUDO....................................11
7 TECNOLOGA......................................................................................................13
7.1 LNGUAGEM DE PROGRAMAO................................................................13
7.1.1 SNTAXE.......................................................................................................17
7.1.2 CONTROLE DE FLUXO...............................................................................18
7.1.3 OPERADORES LGCOS...........................................................................19
7.1.4 LAOS..........................................................................................................19
7.1.5 FOR...............................................................................................................20
7.1.6 WHLE...........................................................................................................21
7.2 BANCO DE DADOS.........................................................................................21
8 ENGENHARA DE REQUSTOS........................................................................23
9 LSTA DE CASO DE USO....................................................................................24
9.1 DAGRAMA DE CASO DE USO......................................................................24
10 DAGRAMA DE CLASSES...............................................................................25
11 DAGRAMA DE SEQUNCA..........................................................................26
12 DAGRAMA DE ATVDADES..........................................................................27
13 DAGRAMA DE ENTDADE E RELACONAMENTO (DER)............................28
14 PROTOTPAO DAS TELAS DO SSTEMA.................................................29
14.1 TELA DE LOGN...............................................................................................29
14.2 TELA DE CADASTRO DE COORDENADAS..................................................30
14.3 TELA DE MAPA E LOCALZAO DO VECULO...........................................31
15 CDGO FONTE..............................................................................................32
16 CRONOGRAMA...............................................................................................42
17 CONCLUSO...................................................................................................43
REFERNCAS...........................................................................................................44
1 INTRODUO
Este trabalho tem a proposta de analisar e especificar uma soluo
para uma montadora de veculos, onde os carros so estacionados no ptio sem
qualquer tipo de gerenciamento. Por se tratar do desenvolvimento de uma soluo
para mapeamento e localizao de veculos no ptio de uma montadora, o mesmo
ser realizado em uma empresa de desenvolvimento de softwares que chamou a
ateno pela existncia constante de idias inovadoras. Sendo assim, a
oportunidade se torna de grande valia, uma vez que o interesse pela rea de
desenvolvimento de softwares notrio.
3
2 JUSTIFICATIVA
No decorrer dos anos a indstria automobilstica vem sofrendo
diversas transformaes o que deixa o mercado cada vez mais competitivo. Acerca
disso so utilizadas diversas formas de trazer a qualidade, como metodologias e
ferramentas que acirram a competitividade das empresas.
Existe hoje a constante preocupao em aumentar a produtividade,
flexibilidade de operaes e reduzir os custos. Durante o estudo de caso, foi
percebido que grande parte dos problemas foram gerados pelo fluxo de informao
que ineficiente dentro da prpria indstria.
Neste contexto o trabalho ter grande valor para melhoria do fluxo
de informaes, j que servir para facilitar o trabalho das pessoas que esto
responsveis pelo gerenciamento dos automveis que esto estacionados no ptio,
melhorando a produtividade, deixando a empresa mais competitiva e ter tambm
grande valia para o aprendizado no s na parte de desenvolvimento de sistemas,
como tambm na parte de gerenciamento e fluxo de informaes.
4
3 OBJETIVOS
3.1 OBJETVO GERAL
O objetivo geral ser desenvolver um sistema que realize o
mapeamento e localizao de veculos em um ptio de uma montadora.
3.2 OBJETVOS ESPECFCOS
O sistema ir realizar a localizao do veculo no ptio da
montadora, existir um cadastro onde o usurio informar o nmero do chassi e as
coordenadas do veculo, a partir dessas informaes o sistema ir gerar um mapa
com a localizao atual do mesmo.
Quando um veculo sair do ptio dever ser lanada sua retirada
para que seja gerado um novo mapeamento. Existir tambm o recurso de
relatrios, onde poder ser impressa toda a parte de movimentao de entrada e
sada de automveis do ptio.
Com todo esse gerenciamento haver um maior controle da
movimentao da produo, agilizar o processo de localizao do automvel
solicitado, melhorar o fluxo de informao e consequentemente tornar a empresa
mais competitiva.
5
4 REFERENCIAL TERICO
A Administrao da nformao um dos fatores mais importantes
de uma empresa, a administrao baseada na tomada de decises com base em
informaes das que se tem em poder, e para que uma empresa se torne
competitiva ela deve sempre ter acesso s informaes precisas, para se manter no
mercado atual. E o profissional precisa estar atento para o surgimento de novas
tecnologias.
4.1 CONCETOS BSCOS
4.1.1 Administrao
Administrao a tomada de deciso sobre recursos disponveis,
trabalhando com e atravs de pessoas para atingir objetivos, o gerenciamento de
uma organizao, levando em conta as informaes fornecidas por outros
profissionais e tambm pensando previamente as conseqncias de suas decises.
tambm a cincia social que estuda e sistematiza as prticas usadas para
administrar.
4.1.2 informao
4.1.3 Dados
Dados so observaes documentadas ou resultados da medio. A
disponibilidade dos dados oferece oportunidades para a obteno de informaes.
Os dados podem ser obtidos pela percepo atravs dos sentidos (por exemplo,
observao) ou pela execuo de um processo de medio.
4.1.4 nformao
nformao o resultado do processamento, manipulao e
6
organizao de dados de tal forma que represente uma modificao (quantitativa ou
qualitativa) no conhecimento do sistema (pessoa, animal ou mquina) que a recebe.
4.1.5 Conhecimento
Por sua vez, conhecimento o que se adquire do estudo/anlise da
informao, da comparao entre informaes. Toda e qualquer informao
relevante para a empresa deve ser captada e analisada para que bem utilizada
possa influir positivamente no processo decisrio.
4.2 COMUNCAO
A comunicao ocorre quando uma informao transmitida a
algum, sendo ento compartilhada tambm por essa pessoa. Para que haja uma
comunicao necessrio que o destinatrio da informao a receba e a
compreenda
4.3 PLANEJAMENTO ESTRATGCO DA NFORMAO
4.3.1 Alinhamento estratgico de negcios e tecnologia da informao alcanado
quando:
O alinhamento entre negcio e T alcanado quando um conjunto
de estratgias de T (sistemas, objetivos, obrigaes e estratgias) derivado do
conjunto estratgico organizacional (misso, objetivo e estratgias), isto ; quando
ambos executam o planejamento de maneira lgica.
O alinhamento estratgico corresponde adequao e integrao
funcional entre ambiente externo (mercados) e interno (estrutura administrativa e
recursos financeiros, tecnolgicos e humanos) para desenvolver as competncias e
maximizar o desempenho organizacional (Henderson e Venkatraman, 1993); e (4) o
alinhamento entre PEN-PET a adequao da orientao estratgica do negcio
com a de T (Chan et al., 1997).
7
O alinhamento pode ser encontrado nas organizaes em diversos
estgios ou nveis, cabendo destacar dois naquelas organizaes que almejam
desenvolv-lo. O primeiro nvel o de integrao operacional, para o qual h a
necessidade de planos operacionais de negcio e de T. Para a sua
operacionalizao, o PET formulado seguindo as definies do PEN e, em seu
prximo estgio de evoluo, ambos os planos so formulados simultaneamente.
Este nvel caracterizado pela especificao de requisitos e funes dos sistemas
de informao (S) e do negcio em nvel operacional, abrangendo estrutura e
processos organizacionais que usam a T como suporte (Henderson e Venkatraman,
1993; Chan, 1999). Vale destacar que, os sistemas de informao integrados (S)
foram considerados os promotores do alinhamento neste nvel, uma vez que esto
baseados na integrao dos negcios pelos dados, pelos processos, por tarefas
realizadas pelas pessoas e pelo redesenho organizacional (estrutura administrativa
combinada com a tecnolgica), permitindo alterar as regras do negcio.(Ward e
Griffiths, 1996).
8
5 METODOLOGIA PROPOSTA
A metodologia proposta para o desenvolvimento do software ser o
Espiral. Este modelo foi originalmente proposto por Boehm (1988). Uma maneira
simplista de analisar este modelo consider-lo como um modelo cascata onde
cada fase precedida por uma anlise de risco e sua execuo feita
evolucionariamente (ou incrementalmente).
A dimenso radial representa o custo acumulado atualizado e a dimenso angular
representa o progresso atravs da espiral. Cada setor da espiral corresponde a uma
tarefa (fase) do desenvolvimento. Um ciclo se inicia com a "Determinao de
objetivos, alternativas e restries "(primeira tarefa) onde ocorre o comprometimento
dos envolvidos e o estabelecimento de uma estratgia para alcanar os objetivos.
Na segunda tarefa "Avaliao de alternativas, identificao e soluo de riscos",
executa-se uma anlise de risco. Prototipao uma boa ferramenta para tratar
riscos. Se o risco for considerado inaceitvel, pode parar o projeto. Na terceira tarefa
ocorre o desenvolvimento do produto. Neste quadrante pode-se considerar o modelo
cascata. Na quarta tarefa o produto avaliado e se prepara para iniciar um novo
ciclo.
Modelo Espiral Completo
9
A manuteno de um software utilizando este modelo de ciclo de
vida tratado da mesma forma que o desenvolvimento.
Uma representao simplificada deste modelo esta ilustrada na Figura abaixo:
Modelo simplificado de Boehm
A razo para se colocar em discusso este modelo est no fato dele chamar a
ateno para vrios pontos importantssimos no desenvolvimento de software.
Variaes do modelo espiral consideram entre trs e seis tarefas ou setores da
espiral. Um exemplo so as regies:
- Comunicao com o cliente;
- Planejamento;
- Anlise de risco;
- Engenharia;
- Construo e liberao; e
- Avaliao do cliente.
10
6 CARACTERIZAO DA ORGANIZAO EM ESTUDO
N!" #$ "!%&"'$: Data Access nformtica Ltda.
E(#"&") C!%*"+: Rua So Paulo, Boa Vista, CEP 35700-094 Sete Lagoas-MG
,"- '.+": www.dataaccess.inf.br
N!" " /$&0 #$ /1"2.$ #.&"+$: Anselmo Enzo chihara, Gerente
T"*"2("3 (31) 3771-8273
R$! #" A+.4.#$#"3 nformtica Software
N5!"& #" "!%&"0$#': Trs
C$+"0&.$ #' %&2.''.($.' 67" $+7$! ($ "!%&"'$: Analistas
P&#7+' " '"&4.)' #"'"(4*4.#' %"*$ "!%&"'$3 Empresa de software house
especializada em aplicativos de automao comercial, com ampla experincia no
mercado. Homologada pela Receita Estadual do Estado de Minas Gerais.
8.'+9&./ #$ "!%&"'$3 A Data Access nformtica Ltda uma empresa de
desenvolvimento de software, fundada por Anselmo Enzo chihara e Walter Soares
Santana, no ano de 2000. Vem atuando em desenvolvimento de programas
especficos em reas pblicas (PTU/SS) e tambm em reas privadas em vrios
segmentos: fbrica de mveis, posto de combustveis, hotis, agncia de veculos,
minerao e carvoaria. A empresa contribui para o desenvolvimento do setor de
informtica, agregando valor aos negcios de nossos clientes, atravs da aplicao
das solues mais adequadas s suas necessidades e sua estratgia de atuao,
respeitando os princpios ticos e nveis de qualidade diferenciados, criando assim
um relacionamento de longo prazo.
11
O&0$(0&$!$ #$ "!%&"'$
12
: TECNOLOGIA
7.1 LNGUAGEM DE PROGRAMAO
A necessidade de uma linguagem de fcil utilizao e que funcione
nas plataformas Windows e Linux levou a escolha da linguagem Python. Agora
explicarei melhor o porqu da escolha desta linguagem.
Python uma linguagem dinmica, mas as linguagens dinmicas
eram vistas no passado apenas como linguagens script, usadas para automatizar
pequenas tarefas, porm, com o passar do tempo, elas cresceram, amadureceram e
conquistaram seu espao no mercado, a ponto de chamar a ateno dos grandes
fornecedores de tecnologia.
Vrios fatores contriburam para esta mudana, tais como a internet,
o software de cdigo aberto e as metodologias geis de desenvolvimento.
A internet viabilizou o compartilhamento de informaes de uma
forma sem precedentes na histria, que tornou possvel o crescimento do software
de cdigo aberto. As linguagens dinmicas geralmente so cdigo aberto e
compartilham as mesmas funcionalidades e em alguns casos, os mesmos objetivos.
A produtividade e expressividade das linguagens dinmicas se
encaixam perfeitamente com as metodologias geis, que nasceram do
desenvolvimento de software de cdigo aberto e defendem um enfoque mais
pragmtico no processo de criao e manuteno de software do que as
metodologias mais tradicionais. Entre as linguagens dinmicas, o Python se destaca
como uma das mais populares e poderosas. Existe uma comunidade movimentada
de usurios da linguagem no mundo, o que se reflete em listas de discusso ativas e
muitas ferramentas disponveis em cdigo aberto.
Aprender uma nova linguagem de programao significa aprender a
pensar de outra forma. E aprender uma linguagem dinmica representa uma
mudana de paradigma ainda mais forte para aquelas pessoas que passaram anos
desenvolvendo em linguagens estticas.
Python uma linguagem de altssimo nvel (em ingls, Very High
Level Language) orientada a objetos, de tipagem dinmica e forte, interpretada e
interativa. O Python possui uma sintaxe clara e concisa, que favorece a legibilidade
13
do cdigo fonte, tornando a linguagem mais produtiva.
A linguagem inclui diversas estruturas de alto nvel (listas, tuplas,
dicionrios, data / hora, complexos e outras) e uma vasta coleo de mdulos
prontos para uso, alm de frameworks de terceiros que podem ser adicionados.
Tambm possui recursos encontrados em outras linguagens modernas, tais como:
geradores, introspeco, persistncia, metaclasses e unidades de teste.
Multiparadigma, a linguagem suporta programao modular e funcional, alm da
orientao a objetos. Mesmo os tipos bsicos no Python so objetos.
A linguagem interpretada atravs de bytecode pela mquina virtual
Python, tornando o cdigo portvel. Com isso possvel compilar aplicaes em
uma plataforma e rodar em outras ou executar direto do cdigo fonte.
Python um software de cdigo aberto (com licena compatvel com
a General Public License (GPL), porm menos restritiva, permitindo que o Python
seja incorporados em produtos proprietrios) e a especificao da linguagem
mantida pela Python Software Foundation2 (PSF).
Python muito utilizado como linguagem script em vrios softwares,
permitindo automatizar tarefas e adicionar novas funcionalidades, entre eles:
BrOffice.org, PostgreSQL, Blender e GMP. Tambm possvel integrar o Python a
outras linguagens, como a Linguagem C. Em termos gerais, o Python apresenta
muitas similaridades com outras linguagens dinmicas, como Perl e Ruby.
Python foi criada em 1990 por Guido van Rossum, no nstituto
Nacional de Pesquisa para Matemtica e Cincia da Computao da Holanda (CW)
e tinha como foco original usurios como fsicos e engenheiros. O Python foi
concebido a partir de outra linguagem existente na poca, chamada ABC.
A implementao oficial do Python mantida pela PSF e escrita em
C, e por isso tambm conhecida como CPython.
Para Windows, basta executar o instalador. Para outras plataformas,
geralmente o Python j faz parte do sistema, porm em alguns casos pode ser
necessrio compilar e instalar a partir dos arquivos fonte. Existem tambm
implementaes de Python para .NET (ronPython) e JVM (Jython).
Python utiliza tipagem dinmica, o que significa que o tipo de uma
varivel inferido pelo interpretador em tempo de execuo (isto conhecido como
Duck Typing). No momento em que uma varivel criada atravs de atribuio, o
interpretador define um tipo para a varivel, com as operaes que podem ser
14
aplicadas. O Python tem tipagem forte, ou seja, ele verifica se as operaes so
vlidas e no faz coeres automticas entre tipos incompatveis3. Para realizar a
operao entre tipos no compatveis, necessrio converter explicitamente o tipo
da varivel ou variveis antes da operao.
O cdigo fonte traduzido pelo interpretador para o formato
bytecode, que multiplataforma e pode ser executado e distribudo sem fonte
original. Por padro, o interpretador compila os fontes e armazena o bytecode em
disco, para que a prxima vez que o executar, no precise compilar novamente o
programa, reduzindo o tempo de carga na execuo. Se os fontes forem alterados, o
interpretador se encarregar de regerar o bytecode automaticamente, mesmo
utilizando o shell interativo. Quando um programa ou um mdulo evocado, o
interpretador realiza a anlise do cdigo, converte para smbolos, compila (se no
houver bytecode atualizado em disco) e executa na mquina virtual Python.
O bytecode armazenado em arquivos com extenso ".pyc
(bytecode normal) ou ".pyo (bytecode otimizado). O bytecode tambm pode
ser empacotado junto com o interpretador em um executvel, para facilitar a
distribuio da aplicao. O interpretador Python pode ser usado de forma
interativa, na qual as linhas de cdigo so digitadas em um prompt (linha de
comando) semelhante ao shell do sistema operacional. O modo interativo uma
caracterstica diferencial da linguagem, pois possvel testar e modificar o cdigo de
um programa antes da incluso do cdigo nos programas, por exemplo. Os
arquivos fonte normalmente so identifcados pela extenso .py e
podem ser executados diretamente pelo interpretador. Existem muitas
ferramentas de desenvolvimento para Python, como DEs, editores e shells (que
aproveitam da capacidade interativa do Python). Integrated Development
Environments (DEs) so pacotes de software integram vrias ferramentas de
desenvolvimento em um ambiente integrado, com o objetivo de aumentar a
produtividade do desenvolvedor. Entre as DEs que suportam Python, encontram-se:
- SPE (Stani's Python Editor).
- Eric.
- Open Komodo.
- PyDev (plugin para a DE Eclipse).
Existem tambm editores de texto especializados em cdigo de
15
programao, que possuem funcionalidades como colorizao de sintaxe,
exportao para outros formatos e converso de codificao de texto.
Esses editores suportam diversas linguagens de programao,
dentre elas o Python:
- SciTE.
- Notepad++.
Shells so ambientes interativos para execuo de comandos,
muito teis para testar pequenas pores de cdigo e para atividades como data
crunching (extrair informaes de interessa de massas de dados ou traduzir dados
de um formato para outro). Alm do prprio Shell padro do Python, existem os
outros disponveis: - PyCrust (grfico).
- python (texto).
Empacotadores so utilitrios que empacotam o bytecode com o
interpretador e outras dependncias, em um ou mais executveis e arquivos
compactados, permitindo que o aplicativo rode em mquinas sem Python instalado.
Entre empacotadores feitos para Python, esto disponveis:
- Py2exe (apenas para Windows).
- cx_Freeze (portvel).
Frameworks so colees de componentes de software
(bibliotecas, utilitrios e outros) que foram projetados para serem utilizados por
outros sistemas.
Alguns frameworks disponveis mais conhecidos:
Web: Django, TurboGears e Zope.
nterface grfica: wxPython, PyGTK e PyQT.
Processamento cientifico: NumPy.
Processamento de imagens: PL.
2D: Matplotlib.
3D: Visual Python, PyOpenGL e Python Ogre.
Mapeamento objeto-relacional: SQLAlchemy e SQLObject.
O nome Python foi tirado por Guido van Rossum do programa da TV
britnica onty !ython Flying "ircus, e existem vrias referncias na
documentao da linguagem ao programa, como, por exemplo, o repositrio de
16
pacotes oficial do Python se chamava "heese Shop, que era o nome de um dos
quadros do programa. Atualmente, o nome do repositrio !ython !ackage
Inde#$ (PYP).
A comunidade de usurios de Python criou algumas expresses
para se referir aos assuntos relacionados linguagem. Neste jargo, o termo
!ythonic usado para indicar que algo compatvel com as premissas de projeto
do Python, e %npythonic significa o oposto. J o usurio da linguagem chamado
de !ythonist. As metas do projeto foram resumidas por Tim Peters em um texto
chamado &en of !ython' que est disponvel no prprio Python.
7.1.1 Sintaxe
Um programa feito em Python constitudo de linhas, que podem
continuar nas linhas seguintes, pelo uso do caractere de barra invertida (\) ao final
da linha ou parnteses, colchetes ou chaves, em expresses que utilizam tais
caracteres. O caractere ( marca o inicio de comentrio. Qualquer texto depois do #
ser ignorado at o fim da linha , com exceo dos comentrios funcionais.
Comentrios funcionais geralmente so usados para:
- alterar a codificao do arquivo fonte do programa
acrescentando um comentrio com o texto "#-*- coding:
<encoding> -*#- no inicio do arquivo, aonde <encoding> a
codificao do arquivo (geralmente latin) ou utf*+). Alterar
a codificao necessrio para suportar caracteres que no
fazem parte da linguagem inglesa, no cdigo fonte do
programa.
- definir o interpretador que ser utilizado para rodar o
programa em sistemas UNX, atravs de um comentrio
comeando com "#! no inicio do arquivo, que indica o
caminho para o interpretador (geralmente a linha de
comentrio ser algo como "#!/usr/bin/env python).
Exemplo de comentrios funcionais:
#!/usr/bin/env python
# -*- coding: latin1 -*-
# Uma linha de cdigo que mostra o resultado de 7 vezes 3
17
print 7 * 3
Exemplos de linhas quebradas:
# Uma linha quebrada por contra-barra
a = 7 * 3 + \
5 / 2
# Uma lista (quebrada por vrgula)
b = ['a', 'b', 'c', 'd', 'e']
# Uma chamada de funo (quebrada por vrgula)
c = range(1,11)
# imprime todos na tela
print a, b, c
O comando print coloca espaos entre as expresses que forem
recebidas como parmetro e um caractere de nova linha no final, a no ser que ele
receba uma vrgula no fim da lista parmetros.
O Python uma linguagem orientada a objeto, sendo assim as
variveis atributos (dados) e mtodos (rotinas associadas ao objeto). Tanto os
atributos quanto os mtodos so acessados usando ponto (.), sendo que os
mtodos devem ser sempre seguidos de parnteses.
7.1.2 Controle de fluxo
muito comum em um programa que certos conjuntos de instrues
sejam executados deforma condicional, em casos como validar entradas de dados,
por exemplo. Sintaxe:
if <condio>:
<bloco de cdigo>
elif <condio>:
<bloco de cdigo>
elif <condio>:
<bloco de cdigo>
else:
<bloco de cdigo>
Aonde:
- <condio>: sentena que possa ser avaliada como
verdadeira ou falsa.
- <bloco de cdigo>: seqncia de linhas de comando.
- As clausulas elif e else so opcionais e podem existir vrios
elifs para o mesmo if.
- Parnteses s so necessrios para evitar ambigidades.
Exemplo:
18
temp = int(raw_input('Entre com a temperatura: '))
if temp < 0:
print 'Congelando...'
elif 0 <= temp <= 20:
print 'Frio'
elif 21 <= temp <= 25:
print 'Normal'
elif 26 <= temp <= 35:
print 'Quente'
else:
print 'Muito quente!'
Se o bloco de cdigo for composto de apenas uma linha, ele pode
ser escrito aps os dois pontos:
if temp < 0: print 'Congelando...'
A partir da verso 2.5, o Python suporta a expresso:
<varivel> = <valor 1> if <condio> else <valor 2>
Aonde <varivel> receber <valor 1> se <condio> for verdadeira e <valor 2> caso
contrrio.
7.1.3 Operadores lgicos
Os operadores lgicos so: and, or, not, is e in.
- and: retorna verdadeiro se e somente se receber duas
expresses que forem verdadeiras.
- or: retorna falso se e somente se receber duas expresses
que forem falsas.
- not: retorna falso se receber uma expresso verdadeira e
vice-versa.
- is: retorna verdadeiro se receber duas referncias ao mesmo
objeto e falso em caso contrrio.
- in: retorna verdadeiro se receber um item e uma lista e o
item ocorrer uma ou mais vezes na lista e falso em caso
contrrio.
Com operadores lgicos possvel construir condies mais
complexas para controlar desvios condicionais e laos.
19
7.1.4 Laos
Laos so estruturas de repetio, geralmente usados para
processar colees de dados, tais como linhas de um arquivo ou registros de um
banco de dados, que precisam ser processados por um mesmo bloco de cdigo.
7.1.5 For
a estrutura de repetio mais usada no Python. til para percorrer
seqncias ou processar iteradores.
A instruo for aceita no s seqncias estticas, mas tambm
seqncias geradas por iteradores. terador uma estrutura que permite iteraes,
ou seja, acesso aos itens de uma coleo de elementos, de forma seqencial.
Durante a execuo de um lao for, a referncia aponta para um
elemento da seqncia. A cada iterao, a referncia atualizada, para que o bloco
de cdigo do for processe o elemento correspondente.
A clusula break interrompe o lao e continue passa para a
prxima iterao. O cdigo dentro do else executado ao final do lao, a no ser
que o lao tenha sido interrompido por break.
Muito til em laos com a instruo for, a funo range,m' n' p-
retorna uma lista de inteiros, comeando em m e menores que n, em passos de
comprimento p, que podem ser usados como seq!ncia para o la"o.
#intaxe:
for <referncia> in <sequncia>:
<bloco de cdigo>
continue
break
else:
<bloco de cdigo>
Exemplo:
# Soma de 0 a 99
s = 0
for x in range(1, 100):
s = s + x
print s
O resultado 4950.
20
7.1.6 While
Executa um bloco de cdigo atendendo a uma condio.
Sintaxe:
while <condio>:
<bloco de cdigo>
continue
break
else:
<bloco de cdigo>
O bloco de cdigo dentro do lao while repetido enquanto a
condio do lao estiver sendo avaliada como verdadeira.
Exemplo:
# Soma de 0 a 99
s = 0
x = 1
while x < 100:
s = s + x
x = x + 1
print s
O lao while adequado quando no h como determinar quantas
iteraes vo ocorrer e no h uma seqncia a seguir.
7.2 BANCO DE DADOS
O Banco de Dados escolhido para a implementao foi o MySQL
que um banco de dados completo, robusto e extremamente rpido, com todas as
caractersticas existentes nos principais bancos de dados disponveis no mercado.
Uma de suas vantagens so suas licenas para uso gratuito, tanto para fins
estudantis como para realizao de negcios, possibilitando que empresas o
utilizem livremente. $%#&', o mais popular sistema de gerenciamento de banco de
dados SQL Open #ource, desenvolvido, distribudo e tem suporte da $%#&' ().
A $%#&' () * uma empresa comercial, fundada pelos desenvolvedores do
MySQL, cujos negcios fornecer servios relacionados ao sistema de
21
gerenciamento de banco de dados . Ele um sistema de gerenciamento de bancos
de dados.
Um banco de dados uma coleo de dados estruturados. Ele pode
ser qualquer coisa desde uma simples lista de compras a uma galeria de imagens
ou a grande quantidade de informao da sua rede coorporativa. Para adicionar,
acessar, e processar dados armazenados em um banco de dados de um
computador, voc necessita de um sistema de gerenciamento de bancos de dados
como o Servidor $%#&'. Como os computadores so muito bons em lidar com
grandes quantidades de dados, o gerenciamento de bancos de dados funciona
como a engrenagem central na computao, seja como utilitrios independentes
ou como partes de outras aplicaes Tambm um banco de dados relacional.
Um banco de dados relacional armazena dados em tabelas
separadas em vez de colocar todos os dados um s local. sso proporciona
velocidade e flexibilidade. A parte #&' do "$%#&' atenda pela "#tructured &uer%
'an+ua+e ,'in+ua+em Estrutural de -onsultas. SQL linguagem padro mais
comum usada para acessar banco de dados e definida pelo Padro ANS/SO
SQL. (O padro SQL est vem evoluindo desde 1986 e existem diversas verses.
Neste manual, #&',./ se refere ao padro liberado em 1992, #&',.. se refere
ao padro liberado em 1999, e #&':/001 se refere a verso do que esperamos
que seja liberado no meio de 2003. Ns usamos o termo o padro #&' indicando
a verso atual do Padro SQL em qualquer momento). O MySQL um software
Open #ource. Open #ource significa que possvel para qualquer um usar e
modificar o programa. Qualquer pessoa pode fazer download do $%#&' pela
nternet e us-lo sem pagar nada. Se voc quiser, voc pode estudar o cdigo fonte
e alter-lo para adequ-lo as suas necessidades. O $%#&' usa a 23' (245
2eneral 3ublic 'icense , 'icen"a 36blica 2eral 245)
http:77888.fsf.or+7licenses, para definir o que voc pode e no pode fazer com o
software em diferentes situaes.
Resumindo o MySQL se tornou o mais popular banco de dados open
source do mundo porque possui consistncia, alta performance, confiabilidade e
fcil de usar. Atualmente usado em mais de 6 milhes de instalaes, que vo
desde instalaes em grandes corporaes a especficas aplicaes embarcadas.
Alm disso, o MySQL se tornou a escolha de uma nova gerao de
22
aplicaes, que utilizam o modelo LAMP ( Linux, Apache, MySQL, PHP ).
O MySQL funciona em mais de 20 plataformas, incluindo Linux,
Windows, HP-UX, AX, Netware, dando grande flexibilidade.
23
; ENGEN8ARIA DE RE<UISITOS
O sistema ir realizar a localizao do veculo no ptio da
montadora, existir um cadastro onde o usurio informar o nmero do chassi e as
coordenadas do veculo, a partir dessas informaes o sistema ir gerar um mapa
com a localizao atual do mesmo.
Quando um veculo sair do ptio dever ser lanada sua retirada
para que seja gerado um novo mapeamento. Existir tambm o recurso de
relatrios, onde poder ser impressa toda a parte de movimentao de entrada e
sada de automveis do ptio.
Com todo esse gerenciamento haver um maior controle da
movimentao da produo, agilizar o processo de localizao do automvel
solicitado, melhorar o fluxo de informao e conseqentemente tornar a empresa
mais competitiva.
24
= LISTA DE CASO DE USO
O caso de uso consiste em o funcionrio estacionar o veculo,
cadastrar o chassi e suas coordenadas para a gerao do mapa e aps localiza o
veculo com o mesmo.
9.1 DAGRAMA DE CASO DE USO
:
Caso de Uso
25
1> DIAGRAMA DE CLASSES
Diagrama de Classes
26
11 DIAGRAMA DE SE<U?NCIA
Diagrama de Sequncia
27
12 DIAGRAMA DE ATIVIDADES
Diagrama de Atividades
28
13 DIAGRAMA DE ENTIDADE E RELACIONAMENTO @DERA
Diagrama de Entidade e Relacionamento
29
14 PROTOTIPAO DAS TELAS DO SISTEMA
14.1 TELA DE LOGN
Abaixo a tela de login, onde o usurio dever digitar o nome de
usurio e a senha para se conectar ao sistema.
Tela de login
30
14.2 TELA DE CADASTRO DE COORDENADAS
Nesta tela o usurio dever informar o nmero do chassi do veculo,
a data em que foi estacionado, o responsvel e as coordenadas para que seja
gerado o mapa.
Tela de cadastro de coordenadas
31
14.3 TELA DE MAPA E LOCALZAO DO VECULO
Nesta tela mostra o mapa gerado, onde os veculos so
posicionados de acordo com as coordenadas informadas. Para facilitar a
visualizao do veculo no mapa, existe a pesquisa pelo chassi, onde o usurio
informa o chassi do veculo e apontado a localizao do mesmo, note que o
veculo localizado fica na cor laranja. Tambm existe a opo de imprimir o mapa.
Tela de Mapa/Localizao do Veculo
32
15 CDIGO FONTE
# -*- coding: utf-8 -*-
from PySide import QtGui, QtCore
from view.principal import Ui_MainWindow
from model.tables import sessao, Usuario, Grupo, mapa
from datetime import datetime
from login import LoginForm
import sys
PAGE_LSTA_mapaS, PAGE_NOVA_mapa, PAGE_USUAROS,
PAGE_GRUPOS = range(4)
ST_ESBOCO, ST_NCADA, ST_FNALZADO = range(3)
STATUS_mapa = {ST_ESBOCO: u'Esboo',
ST_NCADA: u'niciado',
ST_FNALZADO: u'Finalizado'}
class Gerenciador(QtGui.QMainWindow):
"""
"""
def __init__(self, parent=None, usuario=None):
super(Gerenciador, self).__init__()
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.usuario = usuario
# Slots
self.ui.bt_iniciar.clicked.connect(self.iniciar_mapa)
self.ui.bt_concluir.clicked.connect(self.concluir_mapa)
self.ui.bt_nova.clicked.connect(self.nova_mapa)
self.ui.bt_cancelar.clicked.connect(self.atualizar_lista_mapas)
self.ui.bt_salvar.clicked.connect(self.salvar_mapa)
self.ui.bt_novo_usuario.clicked.connect(self.novo_usuario)
33
self.ui.bt_salvar_2.clicked.connect(self.salvar_usuario)
self.ui.bt_usuario_cancela.clicked.connect(self.cancela_usuario)
self.ui.bt_novo_grupo.clicked.connect(self.novo_grupo)
self.ui.actionUsuarios.triggered.connect(self.mostrar_usuarios)
self.ui.actionGrupos.triggered.connect(self.mostrar_grupos)
self.ui.bt_grupo_voltar.clicked.connect(self.atualizar_lista_mapa
s)
self.ui.bt_usuario_voltar.clicked.connect(self.atualizar_lista_map
as)
self.ui.actionSobre_Qt.triggered.connect(self.sobre_qt)
self.ui.actionSobre.triggered.connect(self.sobre_sistema)
# Atualizar controles
self.atualizar_lista_mapas()
def sobre_sistema(self):
QtGui.QMessageBox.about(self, 'Sistema de localizao e
mapeamento de veculos')
def sobre_qt(self):
QtGui.QMessageBox.aboutQt(self)
def mostrar_usuarios(self):
self.atualizar_lista_usuarios()
self.ui.stackedWidget.setCurrentndex(PAGE_USUAROS)
def mostrar_grupos(self):
self.atualizar_lista_grupos()
self.ui.stackedWidget.setCurrentndex(PAGE_GRUPOS)
def cancela_usuario(self):
self.ui.group_novo_usuario.setEnabled(False)
self.ui.group_lista_usuarios.setEnabled(True)
self.ui.bt_novo_usuario.setFocus()
34

def salvar_usuario(self):
novo_usuario = Usuario(login=self.ui.edit_usuario.text(),
senha=self.ui.edit_senha.text(),
nome=self.ui.edit_nome.text(),
supervisor=True if
self.ui.check_super.isChecked() else False)
sessao.add(novo_usuario)
sessao.commit()
self.atualizar_lista_usuarios()
self.ui.group_novo_usuario.setEnabled(False)
self.ui.group_lista_usuarios.setEnabled(True)
self.ui.bt_novo_usuario.setFocus()
def novo_usuario(self):
self.ui.group_novo_usuario.setEnabled(True)
self.ui.group_lista_usuarios.setEnabled(False)
self.ui.edit_usuario.setFocus()
def novo_grupo(self):

text, ok = QtGui.QnputDialog.getText(self, "Novo grupo",
"Nome do grupo", QtGui.QLineEdit.Normal, '')
if ok and text != '':
novo_grupo = Grupo(nome=text)
sessao.add(novo_grupo)
sessao.commit()
self.atualizar_lista_grupos()
def atualizar_lista_grupos(self):
CONCLU
table_grupos = self.ui.table_grupos
35
# Verifica se h dados e limpa a lista
if table_grupos.rowCount():
rows = range(0, table_grupos.rowCount() + 1)
rows.reverse()
for r in rows:
table_grupos.removeRow(r)
grupos = sessao.query(Grupo).all()
for registro in grupos:
row = table_grupos.rowCount()
table_grupos.insertRow(row)
# Nome
item_nome = QtGui.QTableWidgettem(registro.nome)
table_grupos.settem(row, 0, item_nome)
table_grupos.resizeColumnsToContents()
def atualizar_lista_usuarios(self):
"""
Atualiza a lista de usuarios na tela, pegando as informacoes do
banco de dados
"""
table_usuarios = self.ui.table_usuarios
# Verifica se h dados e limpa a lista
if table_usuarios.rowCount():
rows = range(0, table_usuarios.rowCount() + 1)
rows.reverse()
for r in rows:
table_usuarios.removeRow(r)
usuarios = sessao.query(Usuario).all()
for registro in usuarios:
row = table_usuarios.rowCount()
table_usuarios.insertRow(row)

36
item_login = QtGui.QTableWidgettem(registro.login)

item_senha = QtGui.QTableWidgettem('*' *
len(registro.senha))

item_nome = QtGui.QTableWidgettem(registro.nome)

item_supervisor = QtGui.QTableWidgettem(u'Sim' if
registro.supervisor else u'No')

table_usuarios.settem(row, 0, item_login)
table_usuarios.settem(row, 1, item_senha)
table_usuarios.settem(row, 2, item_nome)
table_usuarios.settem(row, 3, item_supervisor)
table_usuarios.resizeColumnsToContents()
def atualizar_mapa(self):
self.ui.stackedWidget.setCurrentndex(PAGE_LSTA_mapaS)
table_mapas = self.ui.table_mapas
# Verifica se h dados e limpa a lista
if table_mapas.rowCount():
rows = range(0, table_mapas.rowCount() + 1)
rows.reverse()
for r in rows:
table_mapas.removeRow(r)
if not self.usuario.supervisor:
lista =
sessao.query(mapa).filter(mapa.veiculo==self.usuario.id)
else:
37
lista = sessao.query(mapa).all()
for registro in lista:

if registro.status == ST_ESBOCO:
brush = QtGui.QBrush(QtGui.QColor(170, 170, 170))
elif registro.status == ST_NCADA:
brush = QtGui.QBrush(QtGui.QColor(85, 170, 255))
elif registro.status == ST_FNALZADO:
brush = QtGui.QBrush(QtGui.QColor(0, 170, 0))
brush.setStyle(QtCore.Qt.SolidPattern)
row = table_mapas.rowCount()
table_mapas.insertRow(row)
QtGui.gerar_mapa()

table_mapas.settem(row, 0, item_id)
table_mapas.settem(row, 1, item_status)
table_mapas.settem(row, 2, item_titulo)
table_mapas.settem(row, 3, item_supervisor)
table_mapas.settem(row, 4, item_veiculo)
table_mapas.settem(row, 5, item_data_ini)
table_mapas.settem(row, 6, item_data_fim)
table_mapas.resizeColumnsToContents()
self.ui.label_total.setText('Total de mapas: %.3d' %
table_mapas.rowCount())
def novo_mapa(self):
"""
Adiciona uma nova mapa
"""
self.ui.edt_titulo.clear()
38
self.ui.text_descricao.clear()
self.ui.stackedWidget.setCurrentndex(PAGE_NOVA_mapa)
self.ui.combo_grupo.clear()
grupos = sessao.query(Grupo).all()
for g in grupos:
self.ui.combo_grupo.addtem('%.03d - %s' % (g.id, g.nome))
self.ui.combo_grupo.setCurrentndex(0)

self.ui.combo_veiculo.clear()
veiculo = sessao.query(Usuario).all()
for e in veiculo:
self.ui.combo_veiculo.addtem('%.03d - %s' % (e.id, e.nome))
self.ui.combo_veiculo.setCurrentndex(0)
# Data inicio = data atual
self.ui.date_inicio.setDateTime(QtCore.QDateTime.currentDate
Time())
def salvar_mapa(self):
"""
Salva o mapa
"""
if not self.ui.edt_titulo.text():
QtGui.QMessageBox.information(self, u'nformao',
u'nforme o ttulo da mapa.')
self.ui.edt_titulo.setFocus()
return

if retval == QtGui.QMessageBox.Yes:
nova_mapa = mapa(dt_criacao=datetime.now(),
dt_ini=self.ui.date_inicio.dateTime().toPython(),
dt_fim=None,
titulo=self.ui.edt_titulo.text(),
39
descricao=self.ui.text_descricao.toPlainText(),
grupo=int(self.ui.combo_grupo.itemText(self.ui.
combo_grupo.currentndex()).split('-')[0]),
status=ST_ESBOCO,
supervisor=self.usuario.id,
veiculo=int(self.ui.combo_veiculo.itemText(self.
ui.combo_veiculo.currentndex()).split('-')[0]),)
sessao.add(nova_mapa)
sessao.commit()
self.ui.statusbar.showMessage("mapa salva", 2000)
self.atualizar_lista_mapas()
def obter_mapa_da_lista(self):
"""
Retorna a mapa selecionada na lista de mapas
"""
table_mapas = self.ui.table_mapas
if table_mapas.selectedtems():
id_mapa =
self.ui.table_mapas.item(self.ui.table_mapas.currentRow(), 0).text()
mapa = sessao.query(mapa).filter_by(id=int(id_mapa)).one()
else:
QtGui.QMessageBox.information(self, u'nformao',
u'Selecione uma mapa na lista.')
mapa = False
return mapa
def iniciar_mapa(self):
"""
nicia a mapa selecionada na lista
"""
table_mapas = self.ui.table_mapas
40
if table_mapas.selectedtems():
id_mapa =
self.ui.table_mapas.item(self.ui.table_mapas.currentRow(), 0).text()
mapa = sessao.query(mapa).filter_by(id=int(id_mapa)).one()
if mapa.status in [ST_NCADA]:
msg = u'O mapa %s, j foi gerado' % id_mapa
QtGui.QMessageBox.information(self, u'nformao', msg)
if retval == QtGui.QMessageBox.Yes:
mapa.status = ST_NCADA
mapa.dt_ini = datetime.now()
sessao.commit()
self.ui.statusbar.showMessage("mapa iniciada", 2000)
self.atualizar_lista_mapas()
else:
QtGui.QMessageBox.information(self, u'nformao',
u'Selecione uma mapa na lista.')
def concluir_mapa(self):
"""
Conclui a mapa selecionada na lista
"""
mapa = self.obter_mapa_da_lista()
if mapa:
if mapa.status in [ST_ESBOCO]:
msg = u'A mapa %s, ainda no foi iniciada' % mapa.id
QtGui.QMessageBox.information(self, u'nformao', msg)
elif mapa.status in [ST_FNALZADO]:
msg = u'A mapa %s, j foi concluda' % mapa.id
QtGui.QMessageBox.information(self, u'nformao', msg)
else:
retval = QtGui.QMessageBox.question(self, 'Mensagem',
41
"Deseja imprimir o mapa:\n\n%.3d - %s" % (mapa.id, mapa.titulo),
QtGui.QMessageBox.Yes |
QtGui.QMessageBox.No)
if retval == QtGui.QMessageBox.Yes:
mapa.status = ST_FNALZADO
mapa.dt_fim = datetime.now()
sessao.commit()
self.ui.statusbar.showMessage("mapa FNALZADO",
2000)
self.atualizar_lista_mapas()
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
login_form = LoginForm()
if login_form.exec_():
usuario = login_form.retorno
form = Gerenciador(usuario=usuario)
form.setWindowTitle('Sistema para localicao e gerao de
mapas para veculos em ptio de estacionamento - %s' % usuario.nome)
form.showNormal()
sys.exit(app.exec_())
else:
sys.exit(-1)
42
16 CRONOGRAMA
Cronograma
43
1: CONCLUSO
Com a implementao das melhorias propostas e descritas no presente
trabalho, evidenciadas melhoram o fluxo de informao, a montadora ganhar um
controle maior de sua produo e qualidade do servio. Este trabalho trar maior
conhecimento na parte de anlise desenvolvimento de sistemas, e no gerenciamento de
fluxo de informaes.
44
REFER?NCIAS
YN, R.K. E'+7# #" /$'3 %*$("B$!"(+ " !C+#'. Porto Alegre: Bookman,
2001.
Luis Cludio Perini, Marco kuro Hisatomi, Wagner Luiz Beto. E(0"(1$&.$ #"
S2+D$&". So Paulo: Pearson Prentice Hall, 2009.
Denise Dias de Santana e Luis Cludio Perini. F7(#$!"(+' #$ A#!.(.'+&$)E #$
I(2&!$)E. So Paulo: Pearson Education do Brasil, 2009.
RAMDAS, K.; SPERKMAN, R.E., C1$.( & S1$/F*"'3 U(#"&'+$(#.(0 ,1$+ D&.4"'
S7%%*GHC1$.( P"&2&!$(/"I I(+"&2$/"', v. 30, n. 4, p.3-21, 2000.
SWEBOK S2+D$&" E(0.(""&.(0 B#G 2 J(D*"#0"I 2004.
http://python.org/
http://www.async.com.br/projects/python/pnp/
45

You might also like