Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Sete Lagoas
2012
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.
Sete Lagoas
2012
SUMRIO
1
INTRODUO ..................................................................................................... 3
JUSTIFICATIVA ................................................................................................... 4
OBJETIVOS ......................................................................................................... 5
3.1
3.2
4.1
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
4.3.1
TECNOLOGIA.................................................................................................... 13
7.1
LINGUAGEM DE PROGRAMAO............................................................... 13
7.1.1
SINTAXE..................................................................................................... 17
7.1.2
7.1.3
7.1.4
LAOS ........................................................................................................ 19
7.1.5
FOR ............................................................................................................ 20
7.1.6
WHILE......................................................................................................... 21
7.2
9.1
10
11
12
13
14
14.1
14.2
14.3
15
16
CRONOGRAMA ............................................................................................. 42
17
CONCLUSO ................................................................................................. 43
REFERNCIAS ......................................................................................................... 44
1 INTRODUO
2 JUSTIFICATIVA
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.
3 OBJETIVOS
4 REFERENCIAL TERICO
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
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
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).
10
tratado
da
mesma
forma
que
desenvolvimento.
Planejamento;
Anlise de risco;
Engenharia;
Construo e liberao; e
Avaliao do cliente.
11
12
Organograma da empresa
Diretoria e
Administrao
Desenvolvimento
Relacionamento
com o Cliente
Suporte e
Implantao
13
7 TECNOLOGIA
perfeitamente
com
as
metodologias
geis,
que
nasceram
do
14
introspeco,
persistncia,
metaclasses
unidades
de
teste.
15
Eric.
Open Komodo.
16
SciTE.
Notepad++.
PyCrust (grfico).
Ipython (texto).
2D: Matplotlib.
17
18
c = range(1,11)
# imprime todos na tela
print a, b, c
Aonde:
-
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'
19
elif 26 <= temp <= 35:
print 'Quente'
else:
print 'Muito quente!'
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.
-
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 <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.
21
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>
Exemplo:
# Soma de 0 a 99
s=0
x=1
while x < 100:
s=s+x
x=x+1
print s
22
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
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
29
14.1
TELA DE LOGIN
Abaixo a tela de login, onde o usurio dever digitar o nome de
Tela de login
30
14.2
31
14.3
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
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):
def atualizar_lista_grupos(self):
CONCLUI
table_grupos = self.ui.table_grupos
if
35
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
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
if not self.usuario.supervisor:
lista
sessao.query(mapa).filter(mapa.veiculo==self.usuario.id)
else:
37
lista = sessao.query(mapa).all()
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
table_mapas.rowCount())
def novo_mapa(self):
"""
Adiciona uma nova mapa
"""
self.ui.edt_titulo.clear()
de
mapas:
%.3d'
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',
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'Selecione uma mapa na lista.')
mapa = False
return mapa
def iniciar_mapa(self):
"""
Inicia a mapa selecionada na lista
"""
u'Informao',
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',
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
44
REFERNCIAS
Engenharia de