Componentes: Guilherme Cardoso
Objetivos: O objetivo deste trabalho tem como base nos altos pedidos de suporte para área de T.I em específica do Ceplan, foi pensado em um sistema para cadastro de chamados para suporte do departamento da Cinf, um programa simples, feito com os os princípios básicos de python e orientação a objetos.
Metodologia de desenvolvimento:
Classes:
Foi criado 2 classes principais sendo elas:
Usuário: Com os atributos Id, username(nome de usuário) e senha, tendo três subclasses: cliente, suporte e admin.
Chamado: Com os atributos Id(agora em específico para o chamado), cliente, status e descrição.
A subclasse cliente foi criada para criar os chamados, e utilizando a opção descrição para que sua dúvida ou problema sejam digitados e registrados, para que assim o usuário suporte possa atender os chamados.
A segunda subclasse suporte foi criada com o intuito de poder atender os chamados podendo listá-los e atendê-los.
A terceira subclasse, a admin, pode manipular a lista de usuários cadastrados, além de poder verificar e listar todos os usuários ali presentes, o administrador pode adicionar novos clientes ou suportes, ou excluir os mesmo se assim for necessário.
Já a classe chamado foi criada com o intuito para que possa ser manipulada pelo usuário suporte com as opções de poder atendê-las, listá-las e verificar seu status pelo ID, existe também a interação entre o usuário cliente e o chamado, na qual o mesmo pode criar um chamado e juntamente do atributo descrição, transcrever em detalhes seus problemas, quais sejam eles.
Operações:
Foram dois arquivos contendo seus respectivos códigos, sendo elas:
Operações de Login(Op_login): Onde se tem tudo relacionado aos usuários, a lista de usuários para armazenar os mesmos, uma função para adicionar três usuários padrões sendo um eles cliente, suporte e admin. Para login foi criada uma função para verificar se os dados inseridos são compatíveis com o de algum usuário presente na lista de usuários. Uma função para os admins terem a opção de listar os usuários presentes na lista, vale destacar a idéia de separar os usuários normais do admin em duas listas diferentes, infelizmente não obtive êxito. Foi adicionado duas funções específicas para criar usuários, sendo uma para Cliente e a outra para Suporte, ambas exclusivas para admin, vale ressaltar a tentativa de utiliza um dicionário no lugar da lista de usuários para ter um melhor entendimento sobre deletar os usuários pelo Id, porém não obtive sucesso em minhas tentativas e acabei optando por deixar o código mais simples usando a lista.
As Operações de chamados(Op_chamados): Foram criadas uma lista, para adicionar chamados e um três funções para manipular os chamados, a primeira para o usuário do tipo cliente onde o mesmo poderá criar um chamado e dar sua descrição. A segunda e a terceira para o usuário suporte onde o mesmo poderá listar os chamados e atendê-los, vale a ressalva de que havia o inclinamento para adicionar uma função para deletar chamados por parte do usuário suporte e uma para cancelar os chamados por parte do usuário cliente.
Main:
O arquivo main, é onde o sistema como um todo vai funcionar, onde a princípio, está todos os imports para utilizar as classes e as operações, os menus de opções dando as opções específicas para os usuários, um adendo para a simplicidade das mesmas, tendo em vista que havia idéias para as tornar mais dinâmicas.
Foram criadas duas opções para a opção inicial, uma dando início ao sistema onde o usuário poderá digitar seu nome de usuário e senha a outra para fechar o mesmo, após o login, o usuário irá ser redirecionado para o menu de opções específicos, de acordo com o seu tipo de usuário(cliente, suporte ou admin).
import sys
class Usuario:
def __init__(self,id, username,senha):
self.id = id
self.username = username
self.senha = senha
def __str__(self):
return f"{'_'*44}\nUsuario\nID: {self.id} \nNome de Usuário:{self.username}\n Senha:{(len(self.senha) *'*')}"
class Admin(Usuario):
def __init__(self, id, username, senha,cinf):
super().__init__(id, username, senha)
self.cinf=cinf
def __str__(self):
return f"\n{'='*44}\nAdmin\nID: {self.id}, \nNome de usuário: {self.username}, \n A senha é: {(len(self.senha) * '*')}, Cargo: {self.cinf}"
class Chamado:
def __init__(self,id,cliente,status,descricao):
self.id = id
self.cliente=cliente
self.suporte=None
self.status = status
self.descricao = descricao
def __str__(self):
return f"\n{'|'*44}\nChamado\nID:{self.id}\nCliente:{self.cliente}\nSuporte: {self.suporte}\nStatus:{self.status}\nDescrição: {self.descricao}"
class Cliente(Usuario):
def __init__(self, id, username, senha, departamento):
super().__init__(id, username, senha)
self.departamento = departamento
def __str__(self):
return f"\n{'='*44}\nCliente\nId:{self.id} \nNome de Usuario: {self.username} \nSenha:{(len(self.senha)* '*')}\nDepartamento: {self.departamento}"
class Suporte(Usuario):
def __init__(self, id, username, senha,cargo):
super().__init__(id, username, senha)
self.cargo = cargo
def __str__(self):
return f"\n{'='*44}\nSuporte\nID: {self.id}\nUsername: {self.username}\n A senha é: {(len(self.senha) * '*')}\n Cargo: {self.cargo}"
id_cont = 0
chamados = []
ch= {}
def cadastrar_chamado(cliente, descricao):
global id_cont
id_cont +=1
chamado = Chamado(id_cont, cliente, 'Aberto', descricao)
chamados.append(chamado)
ch[id_cont] = chamado
def listar_chamados():
print('####LISTA DE CHAMADOS####:')
for chamado in chamados:
print(chamado)
def atendendo_chamado(id, usuario):
ch[id].status='>>>>Em Processo....'
ch[id].suporte = usuario
return ch[id]
def criar_cliente(username, senha, departamento):
global id_cont
id_cont += 1
cliente = Cliente(id_cont, username, senha, departamento)
usuarios.append(cliente)
return cliente
def criar_suporte(username, senha, cargo):
global id_cont
id_cont += 1
suporte = Suporte(id_cont, username, senha, cargo)
usuarios.append(suporte)
return suporte
def deletar_usuario(id):
global usuarios
for usuario in usuarios:
if usuario.id == id:
usuarios.remove(usuario)
print(f"Usuário com id {id} foi excluído com sucesso.")
return usuarios
return "Usuário não encontrado"
usuarios_inicio()
while True:
opcao = input(f"\n{'_'*44}\nSistema CINFER.\nOpções:\n0-sair\n1-Login\n{'_'*44}\nDigitar a opção: ")
if opcao == '0':
print("Diga adeus ao CINFER...")
break
if opcao =="1":
print('Login de Usuário!!!')
username = input('Digite o nome de usuário: ')
senha= input('Digite a sua senha:')
usuario =login(username, senha)
if usuario == None:
print(f"\n{'_'*44}\n\nUsuario ou senha não encontrado no sistema")
else:
if type(usuario)== Cliente:
while True:
opcao = input(f"\n{'_'*44}\nMenu para o Cliente.\nOpções:\n0-Sair\n1-Cadastrar Chamado\n{'_'*44}\nDigitar a opção desejada: ")
if opcao == '0':
print('Saindo!!!!!')
break
if opcao == '1':
descricao = input('Descreva o seu problema: ')
cadastrar_chamado(usuario, descricao)
if type(usuario) == Suporte:
while True:
opcao =input(f"\n{'_'*44}\nMenu do Suporte.\nOpções\n0-Sair\n1-Listar Chamados\n2-Atender Chamados\n{'_'*44}\nDigitar a opção desejada: ")
if opcao == '0':
print('Saindo!!!!!!')
break
if opcao =='1':
listar_chamados()
if opcao =='2':
id =int(input('Digite o id do chamado: '))
chamado = atendendo_chamado(id,usuario)
print(chamado)
if type(usuario)==Admin:
while True:
opcao = input(f"\n{'_'*44}\nMenu de Admin.\nOpções\n0-Sair\n1-Listar Usuarios\n2-Criar cliente\n3-Criar suporte\n4-Deletar Usuário\n{'_'*44}\nDigitar a opção desejada: ")
if opcao == '0':
print ('Saindo!!!!!')
break
if opcao=='1':
listar_usuarios()
if opcao=='2':
novocliente=str(input("Digite nome do usuário que gostaria de cadastrar:"))
novasenha=str(input("Digite a senha que irá cadastrar: "))
novodepartamento=str(input("Digite departameno para o cadastro:"))
criar_cliente( novocliente, novasenha, novodepartamento)
if opcao=='3':
novosuporte=str(input("Digite nome do usuário que gostaria de cadastrar:"))
novasenha=str(input("Digite a senha que irá cadastrar: "))
novocargo=str(input("Digite o cargo para o cadastro:"))
criar_suporte( novosuporte, novasenha, novocargo)
if opcao== '4':
id=int(input("Digite o id do usuário que gostaria de deletar:"))
deletar_usuario(id)