Componentes: Eduardo Pimentel
Objetivos: A ideia Inicial do projeto foi solucionar o problema que varias empresas, principalmente as em crescimento, enfrentam em relação ao gerenciamento de estoque, por meio de funções que permitem o acompanhamento geral no âmbito de armazenamento de produtos da empresa.
Metodologia de desenvolvimento: O ponto de partida para o desenvolvimento desse sistema foi a procura do tema, visto que o objetivo final do trabalho era "identificar alguma necessidade de uma empresa ou instituição da região", comecei a levantar alternativas para o trabalho, comecei a pensar em questões que eu via ao meu redor, então lembrei de uma questão muito frequente que ocorre na empresa dos meus pais, onde por eles possuírem mais de uma sala aonde eles depositam os produtos em estoque, por vezes é necessário todo um deslocamento de algum funcionário apenas para fazer a checagem de algum item, seja para algum cliente, ou simplesmente para a reposição, causando varias situações em que o funcionário tem uma "viagem perdida" por não possuir mais aquele produto no estoque. Logo me veio a ideia de fazer um sistema para regulamentação de estoque!
Como primeiro passo, defini alguns dos requisitos funcionais que gostaria que o sistema executasse, como por exemplo o cadastro de produtos, checagem de produtos de uma sala, funções como adição, exclusão e alteração dos produtos entre as salas, etc.
Importante ressaltar que primeiramente o sistema foi feita em mente com um número fixo de 3 salas de estoque, porém na versão final foram feitas algumas alterações que foram instruídas pelo professor para melhor otimizar o código e fazendo com que seja possível a adição de quantas salas forem necessárias.
Como o projeto era para ser desenvolvida utilizando o método de programação orientado a objetos, comecei pensando em como poderia utilizar as funções de classes/herança e outros elementos no meu projeto, inicialmente utilizei duas bibliotecas (pickle e os.path) que serviram para fazer um sistema de salvamento de arquivos que o professor havia utilizado já em sala, então organizei a classe "Programa" que teria como método inicial a criação de um menu, e que serviria para armazenar diversos outros métodos desse mesmo projeto.
Após isto, fiz a criação dos objetos que eu precisaria para o meu programa, uma class chamada "Produto" que carregaria os atributos ID, nome e preço, e uma subclasse "ProdutoEmEstoque" que herdaria os atributos e métodos de "Produto", com a adição do atributo quantidade e o número da sala, a class "Produto" foi principalmente utilizada no sistema para as questões de cadastro e armazenamento no catalogo, enquanto a class "ProdutoEmEstoque" foi utilizada para guarda-los na lista que conteria todas as informações do armazenamento.
após a construção das classes e de um menu que era puxado com o método innit da class programa, esse menu inicial possuiu sub-menus que contem todas as opções de interação do usuário com o sistema, em que cada opção puxa o método relacionado a ela, em relação aos métodos, alguns deles foram feitos a partir dos exemplos que o professor utilizou em sala, como por exemplo o método de adicionar ou de excluir de uma lista, sempre adaptando para o contexto do sistema.
Como foi dito anteriormente, o sistema possui agora uma versão final visto que a versão que foi apresentada em sala possuía algumas limitações, como por exemplo o número de salas, porem com algumas dicas vindo do feedback da apresentação pude reestruturar o código do sistema para que ele fique mais compacto e funcional.
# Uma classe universal 'produto' para os requisitos 'ID', 'Nome' e 'Preço'
# definir os diferentes estoques como 'sala1', 'sala2 etc..
# o sistema devera permitir que o usuario veja quais produtos estão em cada uma das salas de estoque, tal qual a quantidade
# o sistema deve permitir que o usuario adicione ou remova os produtos de cada sala
# o sistema deve permitir que o usuario cadastre novos produtos, e também permitir que os exclua
# o sistema deve apresentar um catalago geral sobre os produtos presentes
import pickle # para gravar / ler arquivo 'serializado'
import os.path # para testar se arquivo existe
from symtable import Class
class Produto:
def __init__(self, id, nome, preco):
self.__id = id
self.nome = nome
self.preco = preco
def getId(self):
return self.__id
def getNome(self):
return self.nome
def getPreco(self):
return self.preco
class ProdutoEmEstoque(Produto):
def __init__(self, id, nome, preco, quant, sala):
super().__init__(id, nome, preco)
self.quant = quant
self.sala = sala
def getQuantidade(self):
return self.quant
def getSala(self):
return self.sala
def setSala(self, Nsala):
self.sala = Nsala
class Programa: # cria objetos, insere em Listas, grava arquivo, etc..
CadastroProdutos = [] # cria Lista para cadastrar os produtos
Salas = []
def __init__(self): # apresenta Menu de opções e chama métodos correspondentes
self.lerArquivo('Cadastro.dat')
self.lerArquivoS1('SALAS.dat')
while True: # menu principal
print("================================")
print("Sistema de controle")
print("1 - Checkagem de estoque")
print("2 - Catalogo de produtos")
print("3 - Finalizar")
control = int(input("Escolha a opção: "))
if control == 1:
while True:
print("-------ESTOQUE-------")
print("1 - Checkar produtos de uma sala")
print("2 - Adicionar produtos á uma sala")
print("3 - Remover produtos de uma sala")
print("4 - transportar produtos entre salas")
print("5 - Voltar ao menu inicial")
print("================================")
opt = int(input("Escolha a opção: "))
if opt == 1:
while True:
print("--------SELEÇÃO DE SALA--------")
print("===============================")
print("Informe qual sala você deseja acessar: ")
print("Digite '0' para retornar ao menu principal")
print("================================")
opti = int(input("Escolha a opção: "))
if opti == 0:
break
if opti > 0:
self.MostrarSala(opti)
if opti < 0:
print("Valor invalido!")
if opt == 2:
while True:
print("--------SELEÇÃO DE SALA--------")
print("===============================")
print("Informe o número da sala que você deseja adicionar o item: ")
print("Digite '0' para retornar ao menu principal")
print("================================")
opti = int(input("Escolha a opção: "))
if opti == 0:
break
if opti > 0:
self.AdicionaSala(opti)
if opti < 0:
print("Valor invalido!")
if opt == 3:
print("--------SELEÇÃO DE SALA--------")
print("===============================")
print("Informe de qual sala você desejaria remover o item: ")
print("Digite '0' para retornar ao menu principal")
print("================================")
opti = int(input("Escolha a opção: "))
if opti == 0:
break
if opti > 0:
self.DeletarSala(opti)
if opti < 0:
print("Valor invalido!")
if opt == 4:
print("-----------------------------------")
SalaRem = int(input("Digite o número da sala que contem o item que você deseja realocar : "))
SalaDest = int(input("Digite o número da sala para qual o item vai: "))
print("-----------------------------------")
self.TrocaSala(SalaRem, SalaDest)
if opt == 5:
break
if control == 2:
while True:
print("-------PRODUTOS-------")
print("1 - Cadastrar produto")
print("2 - Excluir produto")
print("3 - Mostrar catalogo")
print("4 - Voltar ao menu inicial")
print("================================")
op = int(input("Escolha a opção: "))
if op == 1:
self.cadastrarProduto()
if op == 2:
self.DeletarProduto()
if op == 3:
self.MostrarCatalogo()
if op == 4:
break
if control == 3:
self.GravaArquivo('Cadastro.dat')
self.GravaArquivoS1('SALAS.dat')
break
# Metodo para o salvamento dos Dados -------------------------------------------------------------------------------------------
def lerArquivo(self, nomearq):
if os.path.isfile(nomearq):
with open(nomearq, 'rb') as file:
Programa.CadastroProdutos = pickle.load(file)
def GravaArquivo(self, nomearq):
with open(nomearq, 'wb') as file:
pickle.dump(Programa.CadastroProdutos, file)
file.close()
print("Alterções Salvas!")
print("Programa encerrado!")
def lerArquivoS1(self, S1):
if os.path.isfile(S1):
with open(S1, 'rb') as file:
Programa.Salas = pickle.load(file)
def GravaArquivoS1(self, S1):
with open(S1, 'wb') as file:
pickle.dump(Programa.Salas, file)
file.close()
# ----------------------------------------------------------------------------------------------------------------------------------
# Metodos do Menu de Estoque ----------------------------------------------------------------------------------------------------
def MostrarSala(self, Nsala):
print("- - - - - - - - - SALA %d - - - - - - - - -" %Nsala)
print("ID - - - - - Nome - - - - - Preço - - - - Quantidade(CX)")
print("----------------------------------------------------------")
for i in Programa.Salas:
if Nsala == i.getSala():
print('{0:10} | {1:10} | {2:10} | {3:10}'.format(str(i.getId()), str(i.getNome()), str(i.getPreco()),str(i.getQuantidade())))
print("- - - - - - - - - - - - - - - - ")
def AdicionaSala(self, Nsala):
while True:
print("--------------------------------")
print("Produto a adicionar (digite fim para sair)")
Id = input("ID: ")
if Id == "fim":
break
QuantS1 = int(input("Quantidade a ser adicionada a sala (Em caixas): "))
for i in Programa.CadastroProdutos:
if Id == i.getId():
print("O produto que você deseja adicionar a sala é este: " + str(i.getNome()) + "?")
sn = input(
"SIM, para confirmar a adição do item \nNAO, caso não seja o item que você deseja adicionar:")
if sn == "SIM":
name = i.getNome()
price = i.getPreco()
Quant = QuantS1
sala = Nsala
Programa.Salas.append(ProdutoEmEstoque(Id, name, price, Quant, sala))
print("-> Produto Adicionado!")
print("--------------------------------")
print("('fim'p/sair)")
def DeletarSala(self, Nsala):
while True:
print("--------------------------------")
print("Produto a excluir (digite fim para sair)")
Id = input("ID: ")
if Id == "fim":
break
for i in Programa.Salas:
if Id == i.getId():
print("O produto que você deseja excluir é este: " + str(i.getNome()) + "?")
sn = input(
"SIM, para confirmar a exclusão do item \nNAO, caso não seja o item que você deseja excluir:")
if sn == "SIM":
Programa.Salas.remove(i)
print("-> produto excluido!")
def TrocaSala(self, SalaRem, SalaDest):
while True:
print("--------------------------------")
print("Produto que você deseja mover da Sala %d (digite fim para sair)" % SalaRem)
Id = input("ID: ")
if Id == "fim":
break
for i in Programa.Salas:
if Id == i.getId():
print("O produto que você deseja mover é esse: " + str(i.getNome()) + "?")
sn = input("SIM, para confirmar a exclusão do item \nNAO, caso não seja o item que você deseja excluir:")
if sn == "SIM":
caixa = int(input("Quantas caixas você gostaria de mover?"))
if caixa > i.getQuantidade():
print("Quantidade Insuficiente nessa Sala!")
print("-----------------------------------")
break
if caixa == i.getQuantidade():
i.setSala(SalaDest)
print("Produto alterado")
print("--------------------------------")
break
if caixa < i.getQuantidade():
Programa.Salas.remove(i)
new_sala = int(i.getQuantidade()) - caixa
self.TrocaSala_extencao(SalaRem, SalaDest, i, caixa, new_sala)
break
def TrocaSala_extencao(self, SalaRem, SalaDest, i, quant, aux):
Id = i.getId()
name = i.getNome()
price = i.getPreco()
Q1 = quant
Q2 = aux
salaR = SalaRem
salaD = SalaDest
Programa.Salas.append(ProdutoEmEstoque(Id, name, price, Q2, salaR))
Programa.Salas.append(ProdutoEmEstoque(Id, name, price, Q1, salaD))
print("-> Produto Adicionado!")
print("--------------------------------")
# ----------------------------------------------------------------------------------------------------------------------------------
# Metodos do Menu de produto ----------------------------------------------------------------------------------------------------
def cadastrarProduto(self):
print("--------------------------------")
print("('fim'p/sair)")
while True:
id = input("ID do Produto:\n")
if id == 'fim':
break
nom = input("Nome: ")
price = input("Preço: ")
Programa.CadastroProdutos.append(Produto(id, nom, price))
print("-> Produto Cadastrado!")
print("--------------------------------")
print("('fim'p/sair)")
def MostrarCatalogo(self):
print("- - - - - - - - - Listagem de Estudantes - - - - - - - - -")
print("ID - - - - - Nome - - - - - Preço")
print("---------------------------------")
for i in Programa.CadastroProdutos:
print('{0:10} | {1:10} | {2:10}'.format(str(i.getId()), str(i.getNome()), str(i.getPreco())))
print("- - - - - - - - - - - - - - - - - -")
def DeletarProduto(self):
while True:
print("--------------------------------")
print("Produto a excluir (digite fim para sair)")
Id = input("ID: ")
if Id == "fim":
break
for i in Programa.CadastroProdutos:
if Id == i.getId():
print("O produto que você deseja excluir é este: " + str(i.getNome()) + "?")
sn = input(
"SIM, para confirmar a exclusão do item \nNAO, caso não seja o item que você deseja excluir:")
if sn == "SIM":
Programa.CadastroProdutos.remove(i)
print("-> produto excluido!")
# -------------------------------------------------------------------------------------------------------------------------------
C = Programa()