Relatório Projeto Multidisciplinar VI

Fazer download em pdf ou txt
Fazer download em pdf ou txt
Você está na página 1de 10

PROJETO MULTIDISCIPLINAR

Aluno: João Vitor Santos Inácio


Curso: Engenharia da computação
Polo: Recanto das Emas - DF

Empresa (Fictícia) : Dunder Mifflin


Proprietário: Michael Scott

Entrevista

Quais os dados da empresa?

- Razão Social: Dunder Mifflin Paper Company, Nome fantasia: Dunder Mifflin,
CNPJ: 99.824.777/0001-82, Instituição privada, Localizada em: Avenida
Washington, 702, Scranton.

Qual o tipo de negócio da empresa?

- Somos uma empresa de papel, vendemos papel de cartas, a4, a5, a3, papel
para fotos entre outros.

Quais são os objetivos da sua empresa?

- Nosso objetivo é inovar no sistema tecnológico, para que fique mais fácil
organizar os produtos

Quais são as métricas utilizadas para medir o sucesso da empresa? Como


saber se a empresa está indo bem? Com que frequência as métricas são
examinadas?

- Normalmente o sucesso da Dunder Mifflin é medido pela quantidade de


clientes que conseguimos renovar, basicamente fazemos contratos de exclusividade
de venda. Esses contratos são analisados a cada três meses.
Quais são os grandes desafios enfrentados? O que limita o sucesso de seu
departamento hoje?

- Certamente um grande desafio é tornar o negócio atrativo, com a


concorrência, nós temos que ter valores baixos para que os clientes venham
mas que sejam bons o suficiente para criar lucro, certamente algo que limita
muito nosso departamento de vendas é a acessibilidade.

Quantos departamentos existem na empresa?

- Temos o departamento de vendas, o de entregas e o RH.

Terá quantos banco de dados?

- Acredito que inicialmente podemos começar com um, se for necessário


podemos criar mais para os outros setores.

Na escolha do Sistema Gerenciador de Banco de Dados a empresa prefere que


seja gratuito, de baixo custo ou pode ser um valor alto, dependendo da
complexidade do projeto de banco de dados?

- Como dito antes, inicialmente podemos fazer de uma forma simples, começando
com um gratuito, e se as coisas se complicarem faremos com um banco de dados
maior.

Os dados serão estruturados e/ou semiestruturados?

- Bem, desde que funcione pode ser de qualquer forma, deixo a sua escolha.

Quais relatórios você recebe? Quais dados no relatório são importantes?


Como você utiliza esta informação?

- Nossa equipe mantém os relatório de produtos, mas eles normalmente não


são nenhum pouco intuitivos, então seria a primeira coisa que eu gostaria de
trabalhar com esse banco de dados

Qual tipo de análise você gostaria de realizar? Há aprimoramentos potenciais


nos seus métodos atuais? Quais oportunidades você visualiza para melhorar
os negócios com um aprimoramento do acesso aos dados?

- A análise de estoque certamente é um fator muito importante, gostaria que


fosse automático, pretende movimentar mais investimento para a área
tecnológica na empresa em breve, mas tenho que aprender ainda sobre as
novas tecnologias.
Descreva seus produtos (ou outras dimensões importantes como clientes,
fornecedores, ...). Como você agrupa os produtos em categorias?

- Normalmente categorizamos os produtos por nome, descrição, preço e


estoque, dessa forma podemos ter uma noção do que temos e quanto ainda
podemos faturar com os produtos que ainda não foram vendidos.

Após a entrevista com Michael Scott, definimos que iremos criar um sistema de
login, utilizaremos o nome de um dos funcionários e criaremos uma senha-base para
que possamos mostrar o projeto.

Inicialmente começamos criando o projeto utilizando o aplicativo MySQL e o MySQL


Workbench, criamos uma rede e começamos a modificar o Schema, onde definimos
que a tabela “Funcionários” seria criada, e nela, as colunas Nome, Descrição, Preço
e Estoque, como foram escolhidas por Michael.

Após isso implementamos a tabela no nosso banco de dados e criamos um código


em python utilizando as bibliotecas MySQL Connector e SQLite3, fizemos os
códigos para que fosse feita essa conexão com o banco de dados, utilizamos
também a biblioteca tkinter para poder criar janelas e caixas de texto, para deixar o
programa mais interativo.

Criamos as defs e as variáveis para poder definir o que cada coisa iria fazer no
programa, assim criando uma caixa de login, utilizamos também um código para
criar uma tabela pelo próprio código do python, essa tabela seria “Funcionários” e
teria as colunas Jim e 123, que seriam o login e a senha para a aplicação.

Após isso criamos a Janela que adicionaria produtos ao nosso banco de dados,
assim, podendo descrevê-los com nome, descrição, preço e estoque.

No final, quando rodamos o programa, a janela de login pediria a senha e o login, ao


colocar o usuário de Jim e a senha de 123, temos uma mensagem de sucesso e
seguiremos a segunda janela, que apresenta as entradas de texto para o cadastro
do novo produto.

Também, criamos um sistema simples de loja, onde utilizamos as mesmas


bibliotecas do programa anterior, nesta, nosso intuito era simular uma loja
adicionaria e reduziria os produtos automaticamente.
Utilizamos o mesmo conceito que utilizamos no programa anterior para criar esse,
utilizamos as ‘defs’ para definir as funções de cada comando, utilizamos as
conexões para podermos acessar o banco de dados e tkinter para as janelas.

O objetivo é que esse projeto possa ser implementado em um sistema existente, ou


funcionar sozinho, dessa forma, podendo ser expandido de diferentes formas e
podendo receber diferentes tabelas para armazenar e manipular os dados.

Segue os códigos em python que foram utilizados

Código do sistema de cadastro de itens:

import tkinter as tk
from tkinter import messagebox
import sqlite3
import mysql.connector

entry_nome = None
entry_descricao = None
entry_preco = None
entry_estoque = None

def login():
nome = entry_username.get()
senha = entry_password.get()

conn = sqlite3.connect('dunder.db')
cursor = conn.cursor()

cursor.execute('''SELECT count(name) FROM sqlite_master WHERE


type='table' AND name='funcionarios' ''')
if cursor.fetchone()[0] == 0:

cursor.execute('''
CREATE TABLE funcionarios (
id INTEGER PRIMARY KEY,
nome TEXT,
senha TEXT
)
''')
print("Tabela 'funcionarios' criada com sucesso!")

cursor.execute("INSERT INTO funcionarios (nome, senha) VALUES


(?, ?)", ("Jim", "123"))
conn.commit()
print("Valores 'Jim' e '123' inseridos na tabela
'funcionarios'")

cursor.execute('''
SELECT * FROM funcionarios WHERE nome = ? AND senha = ?
''', (nome, senha))

user = cursor.fetchone()

if user:
messagebox.showinfo("Login", "Login bem-sucedido!")
root.destroy()
abrir_tela_cadastro_produto()
else:
messagebox.showerror("Erro", "Usuário ou senha incorretos!")

conn.close()

def abrir_tela_cadastro_produto():
global entry_nome, entry_descricao, entry_preco, entry_estoque

janela = tk.Tk()
janela.title("Cadastro de Produto")

tk.Label(janela, text="Nome:").grid(row=0, column=0, padx=5,


pady=5)
entry_nome = tk.Entry(janela)
entry_nome.grid(row=0, column=1, padx=5, pady=5)

tk.Label(janela, text="Descrição:").grid(row=1, column=0, padx=5,


pady=5)
entry_descricao = tk.Entry(janela)
entry_descricao.grid(row=1, column=1, padx=5, pady=5)
tk.Label(janela, text="Preço:").grid(row=2, column=0, padx=5,
pady=5)
entry_preco = tk.Entry(janela)
entry_preco.grid(row=2, column=1, padx=5, pady=5)

tk.Label(janela, text="Estoque:").grid(row=3, column=0, padx=5,


pady=5)
entry_estoque = tk.Entry(janela)
entry_estoque.grid(row=3, column=1, padx=5, pady=5)

btn_salvar = tk.Button(janela, text="Salvar Produto",


command=salvar_produto)
btn_salvar.grid(row=4, column=0, columnspan=2, padx=5, pady=5)

janela.mainloop()

def salvar_produto():

conexao = mysql.connector.connect(
host="localhost",
user="root",
password="admin",
database="dunder"
)

cursor = conexao.cursor()

nome = entry_nome.get()
descricao = entry_descricao.get()
preco = float(entry_preco.get())
estoque = int(entry_estoque.get())

consulta = "INSERT INTO Produtos (Nome, Descricao, Preco, Estoque)


VALUES (%s, %s, %s, %s)"
valores = (nome, descricao, preco, estoque)
cursor.execute(consulta, valores)

conexao.commit()

cursor.close()
conexao.close()

entry_nome.delete(0, tk.END)
entry_descricao.delete(0, tk.END)
entry_preco.delete(0, tk.END)
entry_estoque.delete(0, tk.END)

messagebox.showinfo("Cadastro de Produto", "Produto cadastrado com


sucesso!")

root = tk.Tk()
root.title("Dunder Mifflin Login")

label_username = tk.Label(root, text="Username:")


label_password = tk.Label(root, text="Password:")
entry_username = tk.Entry(root)
entry_password = tk.Entry(root, show="*")
button_login = tk.Button(root, text="Login", command=login)

label_username.grid(row=0, column=0, padx=10, pady=10)


entry_username.grid(row=0, column=1, padx=10, pady=10)
label_password.grid(row=1, column=0, padx=10, pady=10)
entry_password.grid(row=1, column=1, padx=10, pady=10)
button_login.grid(row=2, columnspan=2, pady=10)

root.mainloop()
Código do sistema de compras:

import mysql.connector
import tkinter as tk
from tkinter import messagebox

class Produto:
def __init__(self, nome, preco, estoque):
self.Nome = nome
self.Preco = preco
self.Estoque = estoque

def conectar_banco_dados():
return mysql.connector.connect(
host="localhost",
user="root",
password="admin",
database="dunder"
)

def carregar_produtos():
produtos = []
try:
conexao = conectar_banco_dados()
cursor = conexao.cursor()
cursor.execute("SELECT Nome, Preco, Estoque FROM produtos")
for nome, preco, estoque in cursor:
produtos.append(Produto(nome, preco, int(estoque)))
except mysql.connector.Error as erro:
print("Erro ao carregar produtos:", erro)
finally:
if conexao.is_connected():
cursor.close()
conexao.close()
return produtos

def comprar_produto(produto, quantidade):


try:
conexao = conectar_banco_dados()
cursor = conexao.cursor()
if produto.Estoque >= quantidade:
novo_estoque = produto.Estoque - quantidade
cursor.execute("UPDATE produtos SET Estoque = %s WHERE Nome
= %s", (novo_estoque, produto.Nome))
conexao.commit()
messagebox.showinfo("Compra Efetuada", f"{quantidade}
unidades de {produto.Nome} compradas.")
global produtos
produtos = carregar_produtos()
atualizar_interface()
else:
messagebox.showwarning("Estoque Insuficiente", "Estoque
insuficiente.")
except mysql.connector.Error as erro:
print("Erro ao comprar produto:", erro)
messagebox.showerror("Erro", "Erro ao comprar produto.")
finally:
if conexao.is_connected():
cursor.close()
conexao.close()

def comprar_produto_interface():
escolha = entry_produto.get().strip().lower()
quantidade = int(entry_quantidade.get())
produto_escolhido = None
for produto in produtos:
if produto.Nome.lower() == escolha:
produto_escolhido = produto
break
if produto_escolhido:
comprar_produto(produto_escolhido, quantidade)
else:
messagebox.showwarning("Produto não encontrado", "Produto não
encontrado.")

def atualizar_interface():
text_produtos.delete(1.0, tk.END)
for produto in produtos:
text_produtos.insert(tk.END, f"{produto.Nome} -
R${produto.Preco} - Estoque: {produto.Estoque}\n")

produtos = carregar_produtos()

root = tk.Tk()
root.title("Loja")
label_instrucao = tk.Label(root, text="Digite o nome do produto e a
quantidade desejada:")
label_instrucao.pack()

frame_inputs = tk.Frame(root)
frame_inputs.pack()

label_produto = tk.Label(frame_inputs, text="Produto:")


label_produto.grid(row=0, column=0)

entry_produto = tk.Entry(frame_inputs)
entry_produto.grid(row=0, column=1)

label_quantidade = tk.Label(frame_inputs, text="Quantidade:")


label_quantidade.grid(row=1, column=0)

entry_quantidade = tk.Entry(frame_inputs)
entry_quantidade.grid(row=1, column=1)

button_comprar = tk.Button(root, text="Comprar",


command=comprar_produto_interface)
button_comprar.pack()

text_produtos = tk.Text(root, width=50, height=10)


text_produtos.pack()

atualizar_interface()

root.mainloop()

Você também pode gostar