Buscar

exemplo TCC ( Trabalho de Conclusão de Curso)

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 46 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 46 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 46 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

�PAGE �
SUMÁRIO
31	INTRODUÇÃO	�
42	JUSTIFICATIVA	�
53	OBJETIVOS	�
53.1	OBJETIVO GERAL	�
53.2	OBJETIVOS ESPECÍFICOS	�
64	REFERENCIAL TEÓRICO	�
64.1	CONCEITOS BÁSICOS	�
64.1.1	ADMINISTRAÇÃO	�
64.1.2	INFORMAÇÃO	�
64.1.3	DADOS	�
64.1.4	INFORMAÇÃO	�
74.1.5	CONHECIMENTO	�
74.2	COMUNICAÇÃO	�
74.3	PLANEJAMENTO ESTRATÉGICO DA INFORMAÇÃO	�
74.3.1	ALINHAMENTO ESTRATÉGICO DE NEGÓCIOS E TECNOLOGIA DA INFORMAÇÃO É ALCANÇADO QUANDO:	�
95	METODOLOGIA PROPOSTA	�
116	CARACTERIZAÇÃO DA ORGANIZAÇÃO EM ESTUDO	�
137	TECNOLOGIA	�
137.1	LINGUAGEM DE PROGRAMAÇÃO	�
177.1.1	SINTAXE	�
187.1.2	CONTROLE DE FLUXO	�
197.1.3	OPERADORES LÓGICOS	�
197.1.4	LAÇOS	�
207.1.5	FOR	�
217.1.6	WHILE	�
217.2	BANCO DE DADOS	�
238	ENGENHARIA DE REQUISITOS	�
249	LISTA DE CASO DE USO	�
249.1	DIAGRAMA DE CASO DE USO	�
2510	DIAGRAMA DE CLASSES	�
2611	DIAGRAMA DE SEQUÊNCIA	�
2712	DIAGRAMA DE ATIVIDADES	�
2813	DIAGRAMA DE ENTIDADE E RELACIONAMENTO (DER)	�
2914	PROTOTIPAÇÃO DAS TELAS DO SISTEMA	�
2914.1	TELA DE LOGIN	�
3014.2	TELA DE CADASTRO DE COORDENADAS	�
3114.3	TELA DE MAPA E LOCALIZAÇÃO DO VEÍCULO	�
3215	CÓDIGO FONTE	�
4216	CRONOGRAMA	�
4317	CONCLUSÃO	�
44REFERÊNCIAS	�
��
INTRODUÇÃO
Este trabalho tem a proposta de analisar e especificar uma solução para uma montadora de veículos, onde os carros são estacionados no pátio sem qualquer tipo de gerenciamento. Por se tratar do desenvolvimento de uma solução para mapeamento e localização de veículos no pátio de uma montadora, o mesmo será realizado em uma empresa de desenvolvimento de softwares que chamou a atenção pela existência constante de idéias inovadoras. Sendo assim, a oportunidade se torna de grande valia, uma vez que o interesse pela área de desenvolvimento de softwares é notório. 
justificativa
No decorrer dos anos a indústria automobilística vem sofrendo diversas transformações o que deixa o mercado cada vez mais competitivo. Acerca disso são utilizadas diversas formas de trazer a qualidade, como metodologias e ferramentas que acirram a competitividade das empresas. 
Existe hoje a constante preocupação em aumentar a produtividade, flexibilidade de operações e reduzir os custos. Durante o estudo de caso, foi percebido que grande parte dos problemas foram gerados pelo fluxo de informação que ineficiente dentro da própria indústria.
Neste contexto o trabalho terá grande valor para melhoria do fluxo de informações, já que servirá para facilitar o trabalho das pessoas que estão responsáveis pelo gerenciamento dos automóveis que estão estacionados no pátio, melhorando a produtividade, deixando a empresa mais competitiva e terá também grande valia para o aprendizado não só na parte de desenvolvimento de sistemas, como também na parte de gerenciamento e fluxo de informações.
OBJETIVOS
Objetivo geral
	O objetivo geral será desenvolver um sistema que realize o mapeamento e localização de veículos em um pátio de uma montadora.
objetivos específicos
O sistema irá realizar a localização do veículo no pátio da montadora, existirá um cadastro onde o usuário informará o número do chassi e as coordenadas do veículo, a partir dessas informações o sistema irá gerar um mapa com a localização atual do mesmo. 
	Quando um veículo sair do pátio deverá ser lançada sua retirada para que seja gerado um novo mapeamento. Existirá também o recurso de relatórios, onde poderá ser impressa toda a parte de movimentação de entrada e saída de automóveis do pátio.
	Com todo esse gerenciamento haverá um maior controle da movimentação da produção, agilizará o processo de localização do automóvel solicitado, melhorará o fluxo de informação e consequentemente tornará a empresa mais competitiva.
referencial teórico
A Administração da Informação é um dos fatores mais importantes de uma empresa, a administração é baseada na tomada de decisões com base em informações das que se tem em poder, e para que uma empresa se torne competitiva ela deve sempre ter acesso às informações precisas, para se manter no mercado atual. E o profissional precisa estar atento para o surgimento de novas tecnologias.
CONCEITOS BÁSICOS
Administração
Administração é a tomada de decisão sobre recursos disponíveis, trabalhando com e através de pessoas para atingir objetivos, é o gerenciamento de uma organização, levando em conta as informações fornecidas por outros profissionais e também pensando previamente as conseqüências de suas decisões. É também a ciência social que estuda e sistematiza as práticas usadas para administrar.
 informação
Dados
Dados são observações documentadas ou resultados da medição. A disponibilidade dos dados oferece oportunidades para a obtenção de informações. Os dados podem ser obtidos pela percepção através dos sentidos (por exemplo, observação) ou pela execução de um processo de medição. 
Informação
Informação é o resultado do processamento, manipulação e organização de dados de tal forma que represente uma modificação (quantitativa ou qualitativa) no conhecimento do sistema (pessoa, animal ou máquina) que a recebe.
Conhecimento
Por sua vez, conhecimento é o que se adquire do estudo/análise da informação, da comparação entre informações. Toda e qualquer informação relevante para a empresa deve ser captada e analisada para que bem utilizada possa influir positivamente no processo decisório.
Comunicação
A comunicação ocorre quando uma informação é transmitida a alguém, sendo então compartilhada também por essa pessoa. Para que haja uma comunicação é necessário que o destinatário da informação a receba e a compreenda
planejamento estratégico da informação
Alinhamento estratégico de negócios e tecnologia da informação é alcançado quando:
O alinhamento entre negócio e TI é alcançado quando um conjunto de estratégias de TI (sistemas, objetivos, obrigações e estratégias) é derivado do conjunto estratégico organizacional (missão, objetivo e estratégias), isto é; quando ambos executam o planejamento de maneira lógica.
O alinhamento estratégico corresponde à adequação e integração funcional entre ambiente externo (mercados) e interno (estrutura administrativa e recursos financeiros, tecnológicos e humanos) para desenvolver as competências e maximizar o desempenho organizacional (Henderson e Venkatraman, 1993); e (4) o alinhamento entre PEN-PETI é a adequação da orientação estratégica do negócio com a de TI (Chan et al., 1997).
O alinhamento pode ser encontrado nas organizações em diversos estágios ou níveis, cabendo destacar dois naquelas organizações que almejam desenvolvê-lo. O primeiro nível é o de integração operacional, para o qual há a necessidade de planos operacionais de negócio e de TI. Para a sua operacionalização, o PETI é formulado seguindo as definições do PEN e, em seu próximo estágio de evolução, ambos os planos são formulados simultaneamente. Este nível é caracterizado pela especificação de requisitos e funções dos sistemas de informação (SI) e do negócio em nível operacional, abrangendo estrutura e processos organizacionais que usam a TI como suporte (Henderson e Venkatraman, 1993; Chan, 1999). Vale destacar que, os sistemas de informação integrados (SII) foram considerados os promotores do alinhamento neste nível, uma vez que estão baseados na integração dos negócios pelos dados, pelos processos, por tarefas realizadas pelas pessoas e pelo redesenho organizacional (estrutura administrativa combinada com a tecnológica), permitindo alterar as regras do negócio.(Ward e Griffiths, 1996).
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 análise de risco e sua execução é feita evolucionariamente (ou incrementalmente).A dimensão radial representa o custo acumulado atualizado e a dimensão angular representa o progresso através da espiral. Cada setor da espiral corresponde a uma tarefa (fase) do desenvolvimento. Um ciclo se inicia com a "Determinação de objetivos, alternativas e restrições "(primeira tarefa) onde ocorre o comprometimento dos envolvidos e o estabelecimento de uma estratégia para alcançar os objetivos. Na segunda tarefa "Avaliação de alternativas, identificação e solução de riscos", executa-se uma análise de risco. Prototipação é uma boa ferramenta para tratar riscos. Se o risco for considerado inaceitável, 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
A manutenção de um software utilizando este modelo de ciclo de vida é tratado da mesma forma que o desenvolvimento. 
Uma representação simplificada deste modelo esta ilustrada na Figura abaixo: 
Modelo simplificado de Boehm
A razão para se colocar em discussão este modelo está no fato dele chamar a atenção para vários pontos importantíssimos no desenvolvimento de software. 
Variações do modelo espiral consideram entre três e seis tarefas ou setores da espiral. Um exemplo são as regiões: 
Comunicação com o cliente; 
Planejamento; 
Análise de risco; 
Engenharia; 
Construção e liberação; e 
Avaliação do cliente. 
caracterização da organização em estudo
Nome da empresa: Data Access Informática Ltda.
Endereço Completo: Rua São 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: Informática – Software
Número de empregados: Três
Categoria dos profissionais que atuam na empresa: Analistas
Produtos e serviços desenvolvidos pela empresa: Empresa de software house especializada em aplicativos de automação comercial, com ampla experiência no mercado. Homologada pela Receita Estadual do Estado de Minas Gerais.
Histórico da empresa: A Data Access Informática 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 específicos em áreas públicas (IPTU/ISS) e também em áreas privadas em vários segmentos: fábrica de móveis, posto de combustíveis, hotéis, agência de veículos, mineração e carvoaria. A empresa contribui para o desenvolvimento do setor de informática, agregando valor aos negócios de nossos clientes, através da aplicação das soluções mais adequadas às suas necessidades e à sua estratégia de atuação, respeitando os princípios éticos e níveis de qualidade diferenciados, criando assim um relacionamento de longo prazo.
Organograma da empresa
�
TECNOLOGIA
Linguagem de programação
A necessidade de uma linguagem de fácil utilização 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 dinâmica, mas as linguagens dinâmicas eram vistas no passado apenas como linguagens script, usadas para automatizar pequenas tarefas, porém, com o passar do tempo, elas cresceram, amadureceram e conquistaram seu espaço no mercado, a ponto de chamar a atenção dos grandes fornecedores de tecnologia.
Vários fatores contribuíram para esta mudança, tais como a internet, o software de código aberto e as metodologias ágeis de desenvolvimento.
A internet viabilizou o compartilhamento de informações de uma forma sem precedentes na história, que tornou possível o crescimento do software de código aberto. As linguagens dinâmicas geralmente são código aberto e compartilham as mesmas funcionalidades e em alguns casos, os mesmos objetivos.
A produtividade e expressividade das linguagens dinâmicas se encaixam perfeitamente com as metodologias ágeis, que nasceram do desenvolvimento de software de código aberto e defendem um enfoque mais pragmático no processo de criação e manutenção de software do que as metodologias mais tradicionais. Entre as linguagens dinâmicas, o Python se destaca como uma das mais populares e poderosas. Existe uma comunidade movimentada de usuários da linguagem no mundo, o que se reflete em listas de discussão ativas e muitas ferramentas disponíveis em código aberto.
Aprender uma nova linguagem de programação significa aprender a pensar de outra forma. E aprender uma linguagem dinâmica representa uma mudança de paradigma ainda mais forte para aquelas pessoas que passaram anos desenvolvendo em linguagens estáticas.
Python é uma linguagem de altíssimo nível (em inglês, Very High Level Language) orientada a objetos, de tipagem dinâmica e forte, interpretada e interativa. O Python possui uma sintaxe clara e concisa, que favorece a legibilidade do código fonte, tornando a linguagem mais produtiva.
A linguagem inclui diversas estruturas de alto nível (listas, tuplas, dicionários, data / hora, complexos e outras) e uma vasta coleção de módulos prontos para uso, além de frameworks de terceiros que podem ser adicionados. Também possui recursos encontrados em outras linguagens modernas, tais como: geradores, introspecção, persistência, metaclasses e unidades de teste. Multiparadigma, a linguagem suporta programação modular e funcional, além da orientação a objetos. Mesmo os tipos básicos no Python são objetos.
A linguagem é interpretada através de bytecode pela máquina virtual Python, tornando o código portável. Com isso é possível compilar aplicações em uma plataforma e rodar em outras ou executar direto do código fonte.
Python é um software de código aberto (com licença compatível com a General Public License (GPL), porém menos restritiva, permitindo que o Python seja incorporados em produtos proprietários) e a especificação da linguagem é mantida pela Python Software Foundation2 (PSF).
Python é muito utilizado como linguagem script em vários softwares, permitindo automatizar tarefas e adicionar novas funcionalidades, entre eles: BrOffice.org, PostgreSQL, Blender e GIMP. Também é possível integrar o Python a outras linguagens, como a Linguagem C. Em termos gerais, o Python apresenta muitas similaridades com outras linguagens dinâmicas, como Perl e Ruby.
Python foi criada em 1990 por Guido van Rossum, no Instituto Nacional de Pesquisa para Matemática e Ciência da Computação da Holanda (CWI) e tinha como foco original usuários como físicos e engenheiros. O Python foi concebido a partir de outra linguagem existente na época, chamada ABC.
A implementação oficial do Python é mantida pela PSF e escrita em C, e por isso é também conhecida como CPython.
Para Windows, basta executar o instalador. Para outras plataformas, geralmente o Python já faz parte do sistema, porém em alguns casos pode ser necessário compilar e instalar a partir dos arquivos fonte. Existem também implementações de Python para .NET (IronPython) e JVM (Jython).
Python utiliza tipagem dinâmica, o que significa que o tipo de uma variável é inferido pelo interpretador em tempo de execução (isto é conhecido como Duck Typing). No momento em que uma variável é criada através de atribuição, o interpretador define um tipo para a variável, com as operações que podem ser aplicadas. O Python tem tipagem forte, ou seja, ele verifica se as operações são válidas e não faz coerções automáticas entre tipos incompatíveis3. Para realizar a operação entre tipos não compatíveis, é necessário converter explicitamente o tipo da variável ou variáveis antes da operação.
O código fonte é traduzido pelo interpretador para o formato bytecode, que é multiplataforma e pode ser executado e distribuído sem fonte original. Por padrão, o interpretador compila os fontes e armazena o bytecode em disco, para que a próxima vez que o executar, não precise compilarnovamente o programa, reduzindo o tempo de carga na execução. Se os fontes forem alterados, o interpretador se encarregará de regerar o bytecode automaticamente, mesmo utilizando o shell interativo. Quando um programa ou um módulo é evocado, o interpretador realiza a análise do código, converte para símbolos, compila (se não houver bytecode atualizado em disco) e executa na máquina virtual Python.
O bytecode é armazenado em arquivos com extensão “.pyc” (bytecode normal) ou “.pyo” (bytecode otimizado). O bytecode também pode ser empacotado junto com o interpretador em um executável, para facilitar a distribuição da aplicação. O interpretador Python pode ser usado de forma interativa, na qual as linhas de código são digitadas em um prompt (linha de comando) semelhante ao shell do sistema operacional. O modo interativo é uma característica diferencial da linguagem, pois é possível testar e modificar o código de um programa antes da inclusão do código nos programas, por exemplo. Os arquivos fonte normalmente são identificados pela extensão “.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) são pacotes de software integram várias 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 também editores de texto especializados em código de programação, que possuem funcionalidades como colorização de sintaxe, exportação para outros formatos e conversão de codificação de texto.
Esses editores suportam diversas linguagens de programação, dentre elas o Python:
 SciTE.
 Notepad++.
Shells são ambientes interativos para execução de comandos, muito úteis para testar pequenas porções de código e para atividades como data crunching (extrair informações de interessa de massas de dados ou traduzir dados de um formato para outro). Além do próprio Shell padrão do Python, existem os outros disponíveis: - PyCrust (gráfico).
 Ipython (texto).
Empacotadores são utilitários que empacotam o bytecode com o interpretador e outras dependências, em um ou mais executáveis e arquivos compactados, permitindo que o aplicativo rode em máquinas sem Python instalado.
Entre empacotadores feitos para Python, estão disponíveis:
Py2exe (apenas para Windows).
 cx_Freeze (portável).
Frameworks são coleções de componentes de software (bibliotecas, utilitários e outros) que foram projetados para serem utilizados por outros sistemas.
Alguns frameworks disponíveis mais conhecidos:
▪ Web: Django, TurboGears e Zope.
▪ Interface gráfica: 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 britânica Monty Python Flying Circus, e existem várias referências na documentação da linguagem ao programa, como, por exemplo, o repositório de pacotes oficial do Python se chamava Cheese Shop, que era o nome de um dos quadros do programa. Atualmente, o nome do repositório é Python Package Index5 (PYPI).
A comunidade de usuários de Python criou algumas expressões para se referir aos assuntos relacionados à linguagem. Neste jargão, o termo Pythonic é usado para indicar que algo é compatível com as premissas de projeto do Python, e Unpythonic significa o oposto. Já o usuário da linguagem é chamado de Pythonist. As metas do projeto foram resumidas por Tim Peters em um texto chamado Zen of Python, que está disponível no próprio Python.
Sintaxe
Um programa feito em Python é constituído de linhas, que podem continuar nas linhas seguintes, pelo uso do caractere de barra invertida (\) ao final da linha ou parênteses, colchetes ou chaves, em expressões que utilizam tais caracteres. O caractere # marca o inicio de comentário. Qualquer texto depois do # será ignorado até o fim da linha , com exceção dos comentários funcionais.
Comentários funcionais geralmente são usados para:
 alterar a codificação do arquivo fonte do programa acrescentando um comentário com o texto “#-*- coding: <encoding> -*#-” no inicio do arquivo, aonde <encoding> é a codificação do arquivo (geralmente latin1 ou utf-8). Alterar a codificação é necessário para suportar caracteres que não fazem parte da linguagem inglesa, no código fonte do programa.
 definir o interpretador que será utilizado para rodar o programa em sistemas UNIX, através de um comentário começando com “#!” no inicio do arquivo, que indica o caminho para o interpretador (geralmente a linha de comentário será algo como “#!/usr/bin/env python”).
Exemplo de comentários funcionais:
#!/usr/bin/env python
# -*- coding: latin1 -*-
# Uma linha de código 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 vírgula)
b = ['a', 'b', 'c', 'd', 'e']
# Uma chamada de função (quebrada por vírgula)
c = range(1,11)
# imprime todos na tela 
print a, b, c
O comando print coloca espaços entre as expressões que forem recebidas como parâmetro e um caractere de nova linha no final, a não ser que ele receba uma vírgula no fim da lista parâmetros.
O Python é uma linguagem orientada a objeto, sendo assim as variáveis atributos (dados) e métodos (rotinas associadas ao objeto). Tanto os atributos quanto os métodos são acessados usando ponto (.), sendo que os métodos devem ser sempre seguidos de parênteses.
Controle de fluxo
É muito comum em um programa que certos conjuntos de instruções sejam executados deforma condicional, em casos como validar entradas de dados, por exemplo. Sintaxe:
if <condição>:
<bloco de código>
elif <condição>:
<bloco de código>
elif <condição>:
<bloco de código>
else:
<bloco de código>
Aonde:
<condição>: sentença que possa ser avaliada como verdadeira ou falsa.
<bloco de código>: seqüência de linhas de comando.
As clausulas elif e else são opcionais e podem existir vários elifs para o mesmo if.
Parênteses só são necessários para evitar ambigüidades.
Exemplo:
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 código for composto de apenas uma linha, ele pode ser escrito após os dois pontos:
if temp < 0: print 'Congelando...'
A partir da versão 2.5, o Python suporta a expressão:
<variável> = <valor 1> if <condição> else <valor 2>
Aonde <variável> receberá <valor 1> se <condição> for verdadeira e <valor 2> caso contrário.
Operadores lógicos
Os operadores lógicos são: and, or, not, is e in.
and: retorna verdadeiro se e somente se receber duas expressões que forem verdadeiras.
or: retorna falso se e somente se receber duas expressões que forem falsas.
not: retorna falso se receber uma expressão verdadeira e vice-versa.
is: retorna verdadeiro se receber duas referências ao mesmo objeto e falso em caso contrário.
in: retorna verdadeiro se receber um item e uma lista e o item ocorrer uma ou mais vezes na lista e falso em caso contrário.
Com operadores lógicos é possível construir condições mais complexas para controlar desvios condicionais e laços.
Laços
Laços são estruturas de repetição, geralmente usados para processar coleções de dados, tais como linhas de um arquivo ou registros de um banco de dados, que precisam ser processados por um mesmo bloco de código.For
É a estrutura de repetição mais usada no Python. Útil para percorrer seqüências ou processar iteradores.
A instrução for aceita não só seqüências estáticas, mas também seqüências geradas por iteradores. Iterador é uma estrutura que permite iterações, ou seja, acesso aos itens de uma coleção de elementos, de forma seqüencial.
Durante a execução de um laço for, a referência aponta para um elemento da seqüência. A cada iteração, a referência é atualizada, para que o bloco de código do for processe o elemento correspondente.
A cláusula break interrompe o laço e continue passa para a próxima iteração. O código dentro do else é executado ao final do laço, a não ser que o laço tenha sido interrompido por break.
Muito útil em laços com a instrução for, a função range(m, n, p) retorna uma lista de inteiros, começando em m e menores que n, em passos de comprimento p, que podem ser usados como seqüência para o laço.
Sintaxe:
for <referência> in <sequência>:
<bloco de código>
continue
break
else:
<bloco de código>
Exemplo:
# Soma de 0 a 99
s = 0
for x in range(1, 100):
s = s + x
print s
O resultado é 4950.
�
While
Executa um bloco de código atendendo a uma condição.
Sintaxe:
while <condição>:
<bloco de código>
continue
break
else:
<bloco de código>
O bloco de código dentro do laço while é repetido enquanto a condição do laço 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 laço while é adequado quando não há como determinar quantas iterações vão ocorrer e não há uma seqüência a seguir.
banco de dados
O Banco de Dados escolhido para a implementação foi o MySQL que é um banco de dados completo, robusto e extremamente rápido, com todas as características existentes nos principais bancos de dados disponíveis no mercado. Uma de suas vantagens são suas licenças para uso gratuito, tanto para fins estudantis como para realização de negócios, possibilitando que empresas o utilizem livremente. MySQL, o mais popular sistema de gerenciamento de banco de dados SQL Open Source, é desenvolvido, distribuído e tem suporte da MySQL AB. A MySQL AB é uma empresa comercial, fundada pelos desenvolvedores do MySQL, cujos negócios é fornecer serviços relacionados ao sistema de gerenciamento de banco de dados . Ele é um sistema de gerenciamento de bancos de dados.
Um banco de dados é uma coleção de dados estruturados. Ele pode ser qualquer coisa desde uma simples lista de compras a uma galeria de imagens ou a grande quantidade de informação 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 são muito bons em lidar com
grandes quantidades de dados, o gerenciamento de bancos de dados funciona
como a engrenagem central na computação, seja como utilitários independentes
ou como partes de outras aplicações Também é 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 padrão mais comum usada para acessar banco de dados e é definida pelo Padrão ANSI/ISO SQL. (O padrão SQL está vem evoluindo desde 1986 e existem diversas versões. Neste manual, ”SQL-92” se refere ao padrão liberado em 1992, ”SQL-99” se refere ao padrão liberado em 1999, e ”SQL:2003” se refere a versão do que esperamos que seja liberado no meio de 2003. Nós usamos o termo ”o padrão SQL” indicando a versão atual do Padrão SQL em qualquer momento). O MySQL é um software Open Source. Open Source significa que é possível 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 código fonte e alterá-lo para adequá-lo as suas necessidades. O MySQL usa a GPL (GNU General Public License - Licença Pública Geral GNU) http://www.fsf.org/licenses, para definir o que você pode e não pode fazer com o software em diferentes situações. 
Resumindo o MySQL se tornou o mais popular banco de dados open source do mundo porque possui consistência, alta performance, confiabilidade e é fácil de usar. Atualmente é usado em mais de 6 milhões de instalações,  que vão desde instalações em grandes corporações a específicas aplicações embarcadas.
 Além disso, o MySQL se tornou a escolha de uma nova geração de aplicações, 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.
ENGENHARIA DE REQUISITOS
O sistema irá realizar a localização do veículo no pátio da montadora, existirá um cadastro onde o usuário informará o número do chassi e as coordenadas do veículo, a partir dessas informações o sistema irá gerar um mapa com a localização atual do mesmo. 
	Quando um veículo sair do pátio deverá ser lançada sua retirada para que seja gerado um novo mapeamento. Existirá também o recurso de relatórios, onde poderá ser impressa toda a parte de movimentação de entrada e saída de automóveis do pátio.
	Com todo esse gerenciamento haverá um maior controle da movimentação da produção, agilizará o processo de localização do automóvel solicitado, melhorará o fluxo de informação e conseqüentemente tornará a empresa mais competitiva.
LISTA DE CASO DE USO
O caso de uso consiste em o funcionário estacionar o veículo, cadastrar o chassi e suas coordenadas para a geração do mapa e após localiza o veículo com o mesmo.
DIAGRAMA DE CASO DE USO
: 
Caso de Uso
DIAGRAMA DE CLASSES
Diagrama de Classes
diagrama de sequência
Diagrama de Sequência
diagrama de atividades
Diagrama de Atividades
diagrama de entidade e RELACIONAMENTO (DER)
Diagrama de Entidade e Relacionamento
PROTOTIPAÇÃO DAS TELAS DO SISTEMA
tela de login
Abaixo a tela de login, onde o usuário deverá digitar o nome de usuário e a senha para se conectar ao sistema.
Tela de login
�
TELA DE CADASTRO DE COORDENADAS
Nesta tela o usuário deverá informar o número do chassi do veículo, a data em que foi estacionado, o responsável e as coordenadas para que seja gerado o mapa.
Tela de cadastro de coordenadas
	
�
Tela de Mapa e localização do veículo
Nesta tela mostra o mapa gerado, onde os veículos são posicionados de acordo com as coordenadas informadas. Para facilitar a visualização do veículo no mapa, existe a pesquisa pelo chassi, onde o usuário informa o chassi do veículo e é apontado a localização do mesmo, note que o veículo localizado fica na cor laranja. Também existe a opção de imprimir o mapa.
Tela de Mapa/Localização do Veículo
CÓDIGO 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'Esboço',
 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)
 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 localização e mapeamento de veículos')
 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()
 
 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
 # 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)
 
 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'Não')
 
 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:
 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()
 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'Informação', u'Informe o título 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(),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'Informação', u'Selecione uma mapa na lista.')
 mapa = False
 return mapa
 def iniciar_mapa(self):
 """
 Inicia a mapa selecionada na lista
 """
 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'Informação', 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'Informação', 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 não foi iniciada' % mapa.id
 QtGui.QMessageBox.information(self, u'Informação', msg)
 elif mapa.status in [ST_FINALIZADO]:
 msg = u'A mapa %s, já foi concluída' % mapa.id
 QtGui.QMessageBox.information(self, u'Informação', msg)
 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 localicação e geração de mapas para veículos em pátio de estacionamento - %s' % usuario.nome)
 form.showNormal()
 sys.exit(app.exec_())
 else:
 sys.exit(-1)
cRONOGRAMA
Cronograma
CONCLUSÃO
Com a implementação das melhorias propostas e descritas no presente trabalho, evidenciadas melhoram o fluxo de informação, a montadora ganhará um controle maior de sua produção e qualidade do serviço. Este trabalho trará maior conhecimento na parte de análise desenvolvimento de sistemas, e no gerenciamento de fluxo de informações.
REFERÊNCIAS
YIN, R.K. Estudo de caso: planejamento e métodos. Porto Alegre: Bookman, 2001.
Luis Cláudio Perini, Marco Ikuro Hisatomi, Wagner Luiz Beto. Engenharia de Software. São Paulo: Pearson Prentice Hall, 2009.
Denise Dias de Santana e Luis Cláudio Perini. Fundamentos da Administração da Informação. São 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/
Sistema de Ensino Presencial Conectado
curso superior de Tecnologia em análise e desenvolvimento de sistemas
marcilene ribeiro alves
sistema de mapeamento e localização de veículos em estacionamento
Sete Lagoas
2012
marcilene ribeiro alves
sistema de mapeamento e localização de veículos em estacionamento
Projeto de Estágio apresentado à UNOPAR - Universidade Norte do Paraná, como requisito parcial para a obtenção do título de Tecnologia em Análise e Desenvolvimento de Sistemas.
Tutor Orientador: Renato Moreira 
Professor Supervisor: Adriane Aparecida Loper, Marco Ikuro Hisatomi e Merris Mozer.
Sete Lagoas
2012
Diretoria e
Administração
Desenvolvimento
Relacionamento com o Cliente
Suporte e Implantação

Outros materiais