46
Sete Lagoas 2012 MARCILENE RIBEIRO ALVES SISTEMA DE ENSINO PRESENCIAL CONECTADO CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS SISTEMA DE MAPEAMENTO E LOCALIZAÇÃO DE VEÍCULOS EM ESTACIONAMENTO

tcc

Embed Size (px)

DESCRIPTION

exemplo tcc

Citation preview

  • Sete Lagoas 2012

    MARCILENE RIBEIRO ALVES

    SISTEMA DE ENSINO PRESENCIAL CONECTADO CURSO SUPERIOR DE TECNOLOGIA EM ANLISE E

    DESENVOLVIMENTO DE SISTEMAS

    SISTEMA DE MAPEAMENTO E LOCALIZAO DE VECULOS EM ESTACIONAMENTO

  • Sete Lagoas 2012

    SISTEMA DE MAPEAMENTO E LOCALIZAO DE VECULOS EM ESTACIONAMENTO

    Projeto de Estgio apresentado UNOPAR - Universidade Norte do Paran, como requisito parcial para a obteno do ttulo de Tecnologia em Anlise e Desenvolvimento de Sistemas. Tutor Orientador: Renato Moreira Professor Supervisor: Adriane Aparecida Loper, Marco Ikuro Hisatomi e Merris Mozer.

    MARCILENE RIBEIRO ALVES

  • SUMRIO

    1 INTRODUO ..................................................................................................... 3

    2 JUSTIFICATIVA ................................................................................................... 4

    3 OBJETIVOS ......................................................................................................... 5

    3.1 OBJETIVO GERAL ........................................................................................... 5

    3.2 OBJETIVOS ESPECFICOS ............................................................................ 5

    4 REFERENCIAL TERICO ................................................................................... 6

    4.1 CONCEITOS BSICOS ................................................................................... 6

    4.1.1 ADMINISTRAO ........................................................................................ 6

    4.1.2 INFORMAO .............................................................................................. 6

    4.1.3 DADOS ......................................................................................................... 6

    4.1.4 INFORMAO .............................................................................................. 6

    4.1.5 CONHECIMENTO ......................................................................................... 7

    4.2 COMUNICAO .............................................................................................. 7

    4.3 PLANEJAMENTO ESTRATGICO DA INFORMAO ................................... 7

    4.3.1 ALINHAMENTO ESTRATGICO DE NEGCIOS E TECNOLOGIA DA

    INFORMAO ALCANADO QUANDO: ................................................................ 7

    5 METODOLOGIA PROPOSTA .............................................................................. 9

    6 CARACTERIZAO DA ORGANIZAO EM ESTUDO ................................... 11

    7 TECNOLOGIA .................................................................................................... 13

    7.1 LINGUAGEM DE PROGRAMAO ............................................................... 13

    7.1.1 SINTAXE ..................................................................................................... 17

    7.1.2 CONTROLE DE FLUXO ............................................................................. 18

    7.1.3 OPERADORES LGICOS ......................................................................... 19

    7.1.4 LAOS ........................................................................................................ 19

    7.1.5 FOR ............................................................................................................ 20

    7.1.6 WHILE ......................................................................................................... 21

    7.2 BANCO DE DADOS ....................................................................................... 21

    8 ENGENHARIA DE REQUISITOS ...................................................................... 23

    9 LISTA DE CASO DE USO ................................................................................. 24

    9.1 DIAGRAMA DE CASO DE USO ..................................................................... 24

    10 DIAGRAMA DE CLASSES ............................................................................. 25

    11 DIAGRAMA DE SEQUNCIA ........................................................................ 26

  • 12 DIAGRAMA DE ATIVIDADES ........................................................................ 27

    13 DIAGRAMA DE ENTIDADE E RELACIONAMENTO (DER) ........................... 28

    14 PROTOTIPAO DAS TELAS DO SISTEMA ............................................... 29

    14.1 TELA DE LOGIN ............................................................................................ 29

    14.2 TELA DE CADASTRO DE COORDENADAS ................................................. 30

    14.3 TELA DE MAPA E LOCALIZAO DO VECULO ......................................... 31

    15 CDIGO FONTE ............................................................................................ 32

    16 CRONOGRAMA ............................................................................................. 42

    17 CONCLUSO ................................................................................................. 43

    REFERNCIAS ......................................................................................................... 44

  • 3

    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.

  • 4

    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.

  • 5

    3 OBJETIVOS

    3.1 OBJETIVO GERAL

    O objetivo geral ser desenvolver um sistema que realize o

    mapeamento e localizao de veculos em um ptio de uma montadora.

    3.2 OBJETIVOS ESPECFICOS

    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.

  • 6

    4 REFERENCIAL TERICO

    A Administrao da Informao 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 CONCEITOS BSICOS

    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 Informao

    Informao o resultado do processamento, manipulao e

  • 7

    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 COMUNICAO

    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 ESTRATGICO DA INFORMAO

    4.3.1 Alinhamento estratgico de negcios e tecnologia da informao alcanado

    quando:

    O alinhamento entre negcio e TI alcanado quando um conjunto

    de estratgias de TI (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-PETI a adequao da orientao estratgica do negcio

    com a de TI (Chan et al., 1997).

  • 8

    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 TI. Para a sua

    operacionalizao, o PETI 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 (SI) e do negcio em nvel operacional, abrangendo estrutura e

    processos organizacionais que usam a TI como suporte (Henderson e Venkatraman,

    1993; Chan, 1999). Vale destacar que, os sistemas de informao integrados (SII)

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

  • 9

    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

  • 10

    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.

  • 11

    6 CARACTERIZAO DA ORGANIZAO EM ESTUDO

    Nome da empresa: Data Access Informtica Ltda.

    Endereo Completo: Rua So Paulo, Boa Vista, CEP 35700-094 Sete Lagoas-MG

    Web site: www.dataaccess.inf.br

    Nome e cargo da chefia direta: Anselmo Enzo Ichihara, Gerente

    Telefone: (31) 3771-8273

    Ramo de Atividade: Informtica Software

    Nmero de empregados: Trs

    Categoria dos profissionais que atuam na empresa: Analistas

    Produtos e servios desenvolvidos pela empresa: Empresa de software house

    especializada em aplicativos de automao comercial, com ampla experincia no

    mercado. Homologada pela Receita Estadual do Estado de Minas Gerais.

    Histrico da empresa: A Data Access Informtica Ltda uma empresa de

    desenvolvimento de software, fundada por Anselmo Enzo Ichihara e Walter Soares

    Santana, no ano de 2000. Vem atuando em desenvolvimento de programas

    especficos em reas pblicas (IPTU/ISS) 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.

  • 12

    Organograma da empresa

    Diretoria e

    Administrao

    Desenvolvimento

    Relacionamento

    com o Cliente

    Suporte e

    Implantao

  • 13

    7 TECNOLOGIA

    7.1 LINGUAGEM 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

  • 14

    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 GIMP. 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 Instituto

    Nacional de Pesquisa para Matemtica e Cincia da Computao da Holanda (CWI)

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

  • 15

    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 identificados pela extenso .py e podem ser executados diretamente pelo

    interpretador. Existem muitas ferramentas de desenvolvimento para Python, como

    IDEs, editores e shells (que aproveitam da capacidade interativa do Python).

    Integrated Development Environments (IDEs) so pacotes de software integram

    vrias ferramentas de desenvolvimento em um ambiente integrado, com o objetivo

    de aumentar a produtividade do desenvolvedor. Entre as IDEs que suportam Python,

    encontram-se:

    - SPE (Stani's Python Editor).

    - Eric.

    - Open Komodo.

    - PyDev (plugin para a IDE Eclipse).

    Existem tambm editores de texto especializados em cdigo de

    programao, que possuem funcionalidades como colorizao de sintaxe,

  • 16

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

    - Ipython (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.

    Interface grfica: wxPython, PyGTK e PyQT.

    Processamento cientifico: NumPy.

    Processamento de imagens: PIL.

    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 Monty Python Flying Circus, e existem vrias referncias na documentao

    da linguagem ao programa, como, por exemplo, o repositrio de pacotes oficial do

    Python se chamava Cheese Shop, que era o nome de um dos quadros do programa.

    Atualmente, o nome do repositrio Python Package Index5 (PYPI).

    A comunidade de usurios de Python criou algumas expresses

  • 17

    para se referir aos assuntos relacionados linguagem. Neste jargo, o termo

    Pythonic usado para indicar que algo compatvel com as premissas de projeto do

    Python, e Unpythonic significa o oposto. J o usurio da linguagem chamado de

    Pythonist. As metas do projeto foram resumidas por Tim Peters em um texto

    chamado Zen of Python, 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:

    -*#- no inicio do arquivo, aonde a

    codificao do arquivo (geralmente latin1 ou utf-8). 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 UNIX, 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 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)

  • 18

    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 : elif : elif : else:

    Aonde: - : sentena que possa ser avaliada como

    verdadeira ou falsa.

    - : 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:

    temp = int(raw_input('Entre com a temperatura: ')) if temp < 0: print 'Congelando...' elif 0

  • 19

    elif 26

  • 20

    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. Iterador 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 seqncia para o lao.

    Sintaxe:

    for in : continue break else: Exemplo: # Soma de 0 a 99 s = 0 for x in range(1, 100): s = s + x print s O resultado 4950.

  • 21

    7.1.6 While

    Executa um bloco de cdigo atendendo a uma condio.

    Sintaxe:

    while :

    continue break else:

    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. MySQL, o mais popular sistema de gerenciamento de banco de dados

    SQL Open Source, desenvolvido, distribudo e tem suporte da MySQL AB. A

    MySQL AB uma empresa comercial, fundada pelos desenvolvedores do MySQL,

    cujos negcios fornecer servios relacionados ao sistema de gerenciamento de

  • 22

    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 MySQL. 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. Isso proporciona

    velocidade e flexibilidade. A parte SQL do MySQL atenda pela Structured Query

    Language -Linguagem Estrutural de Consultas. SQL linguagem padro mais

    comum usada para acessar banco de dados e definida pelo Padro ANSI/ISO

    SQL. (O padro SQL est vem evoluindo desde 1986 e existem diversas verses.

    Neste manual, SQL-92 se refere ao padro liberado em 1992, SQL-99 se refere

    ao padro liberado em 1999, e SQL:2003 se refere a verso do que esperamos

    que seja liberado no meio de 2003. Ns usamos o termo o padro SQL indicando a

    verso atual do Padro SQL em qualquer momento). O MySQL um software Open

    Source. Open Source significa que possvel para qualquer um usar e modificar o

    programa. Qualquer pessoa pode fazer download do MySQL pela Internet 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 MySQL usa a GPL (GNU General Public

    License - Licena Pblica Geral GNU) http://www.fsf.org/licenses, 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

    aplicaes, que utilizam o modelo LAMP ( Linux, Apache, MySQL, PHP ).

    O MySQL funciona em mais de 20 plataformas, incluindo Linux,

    Windows, HP-UX, AIX, Netware, dando grande flexibilidade.

  • 23

    8 ENGENHARIA DE REQUISITOS

    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

    9 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 DIAGRAMA DE CASO DE USO

    :

    Caso de Uso

  • 25

    10 DIAGRAMA DE CLASSES

    Diagrama de Classes

  • 26

    11 DIAGRAMA DE SEQUNCIA

    Diagrama de Sequncia

  • 27

    12 DIAGRAMA DE ATIVIDADES

    Diagrama de Atividades

  • 28

    13 DIAGRAMA DE ENTIDADE E RELACIONAMENTO (DER)

    Diagrama de Entidade e Relacionamento

  • 29

    14 PROTOTIPAO DAS TELAS DO SISTEMA

    14.1 TELA DE LOGIN

    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 LOCALIZAO 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_LISTA_mapaS, PAGE_NOVA_mapa, PAGE_USUARIOS,

    PAGE_GRUPOS = range(4)

    ST_ESBOCO, ST_INICIADA, ST_FINALIZADO = range(3)

    STATUS_mapa = {ST_ESBOCO: u'Esboo',

    ST_INICIADA: u'Iniciado',

    ST_FINALIZADO: 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_mapas)

    self.ui.bt_usuario_voltar.clicked.connect(self.atualizar_lista_mapas)

    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.setCurrentIndex(PAGE_USUARIOS)

    def mostrar_grupos(self):

    self.atualizar_lista_grupos()

    self.ui.stackedWidget.setCurrentIndex(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.QInputDialog.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):

    CONCLUI

    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.QTableWidgetItem(registro.nome)

    table_grupos.setItem(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.QTableWidgetItem(registro.login)

    item_senha = QtGui.QTableWidgetItem('*' *

    len(registro.senha))

    item_nome = QtGui.QTableWidgetItem(registro.nome)

    item_supervisor = QtGui.QTableWidgetItem(u'Sim' if

    registro.supervisor else u'No')

    table_usuarios.setItem(row, 0, item_login)

    table_usuarios.setItem(row, 1, item_senha)

    table_usuarios.setItem(row, 2, item_nome)

    table_usuarios.setItem(row, 3, item_supervisor)

    table_usuarios.resizeColumnsToContents()

    def atualizar_mapa(self):

    self.ui.stackedWidget.setCurrentIndex(PAGE_LISTA_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_INICIADA:

    brush = QtGui.QBrush(QtGui.QColor(85, 170, 255))

    elif registro.status == ST_FINALIZADO:

    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.setItem(row, 0, item_id)

    table_mapas.setItem(row, 1, item_status)

    table_mapas.setItem(row, 2, item_titulo)

    table_mapas.setItem(row, 3, item_supervisor)

    table_mapas.setItem(row, 4, item_veiculo)

    table_mapas.setItem(row, 5, item_data_ini)

    table_mapas.setItem(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.setCurrentIndex(PAGE_NOVA_mapa)

    self.ui.combo_grupo.clear()

    grupos = sessao.query(Grupo).all()

    for g in grupos:

    self.ui.combo_grupo.addItem('%.03d - %s' % (g.id, g.nome))

    self.ui.combo_grupo.setCurrentIndex(0)

    self.ui.combo_veiculo.clear()

    veiculo = sessao.query(Usuario).all()

    for e in veiculo:

    self.ui.combo_veiculo.addItem('%.03d - %s' % (e.id, e.nome))

    self.ui.combo_veiculo.setCurrentIndex(0)

    # Data inicio = data atual

    self.ui.date_inicio.setDateTime(QtCore.QDateTime.currentDateTime())

    def salvar_mapa(self):

    """

    Salva o mapa

    """

    if not self.ui.edt_titulo.text():

    QtGui.QMessageBox.information(self, u'Informao',

    u'Informe 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.currentIndex()).split('-

    ')[0]),

    status=ST_ESBOCO,

    supervisor=self.usuario.id,

    veiculo=int(self.ui.combo_veiculo.itemText(self.ui.combo_veiculo.currentIndex()).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.selectedItems():

    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'Informao',

    u'Selecione uma mapa na lista.')

    mapa = False

    return mapa

    def iniciar_mapa(self):

    """

    Inicia a mapa selecionada na lista

    """

  • 40

    table_mapas = self.ui.table_mapas

    if table_mapas.selectedItems():

    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_INICIADA]:

    msg = u'O mapa %s, j foi gerado' % id_mapa

    QtGui.QMessageBox.information(self, u'Informao', msg)

    if retval == QtGui.QMessageBox.Yes:

    mapa.status = ST_INICIADA

    mapa.dt_ini = datetime.now()

    sessao.commit()

    self.ui.statusbar.showMessage("mapa iniciada", 2000)

    self.atualizar_lista_mapas()

    else:

    QtGui.QMessageBox.information(self, u'Informao',

    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'Informao', msg)

    elif mapa.status in [ST_FINALIZADO]:

    msg = u'A mapa %s, j foi concluda' % mapa.id

    QtGui.QMessageBox.information(self, u'Informao', msg)

  • 41

    else:

    retval = QtGui.QMessageBox.question(self, 'Mensagem',

    "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_FINALIZADO

    mapa.dt_fim = datetime.now()

    sessao.commit()

    self.ui.statusbar.showMessage("mapa FINALIZADO",

    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

    17 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

    REFERNCIAS

    YIN, R.K. Estudo de caso: planejamento e mtodos. Porto Alegre: Bookman, 2001.

    Luis Cludio Perini, Marco Ikuro Hisatomi, Wagner Luiz Beto. Engenharia de Software. So Paulo: Pearson Prentice Hall, 2009.

    Denise Dias de Santana e Luis Cludio Perini. Fundamentos da Administrao da Informao. So Paulo: Pearson Education do Brasil, 2009.

    RAMDAS, K.; SPERKMAN, R.E., Chain or Shackles: Understanding What Drives Supply-Chain Performance, Interfaces, v. 30, n. 4, p.3-21, 2000.

    SWEBOK Software Engineering Body of Knowledge, 2004.

    http://python.org/

    http://www.async.com.br/projects/python/pnp/