NÃO VENHAM COM GRACINHA!!!!!
CRIAR UM PROGRAMA EM PYTHON QUE SIMULE UMA AGENDA ELETRÔNICA DE CONTATOS, USANDO CONCEITOS DE ARQUIVOS E ORIENTAÇÃO A OBJETOS NA EXECUÇÃO DO TRABALHO!!!!
Respostas
Resposta:
O algoritmo solicitado desenvolvido usando Python 3, está abaixo!
Espero ter ajudado :)
Algoritmo:
class Contato:
def _init_(self):
self._nome = ''
self._apelido = ''
self._data_nasc = ''
self._urgente = "False"
self._telefone = ''
self._instagram = ''
def carregar(self, dados):
dado = dados.split(';')
self._nome = dado[0]
self._apelido = dado[1]
self._data_nasc = dado[2]
self._urgente = dado[3] == "True"
self._telefone = dado[4]
self._instagram = dado[5]
return self
def exportar(self):
return f"{self._nome};{self._apelido};{self._data_nasc};{self._urgente};{self._telefone};{self._instagram}"
def valid_nome(self, nome):
if len(nome) > 0:
self._nome = nome.capitalize()
return True
return False
def valid_nasc(self, data_nasc):
if len(data_nasc) == 10 and data_nasc.count('/') == 2:
dia, mes, ano = data_nasc.split('/')
if 0 < int(dia) < 32 and 0 < int(mes) < 13:
self._data_nasc = f"{dia}/{mes}/{ano}"
return True
return False
def valid_tel(self, tel):
if len(tel) == 11 and tel.isnumeric():
self._telefone = f"{tel[:2]} {tel[2:7]}-{tel[7:]}"
return True
return False
def set_instagram(self, instagram):
self._instagram = instagram.strip()
def set_urgente(self, urgente):
self._urgente = urgente.lower() == 's'
def set_apelido(self, apelido):
self._apelido = apelido.capitalize()
# =========== Funções do programa ==============================================
def novo_contato(): # >>> cria um novo contato <<< #
global contatos
novo_cont = Contato()
print("\nCompos marcado com (*) são obrigatórios!")
while True: # Valida o nome
nome = input("Nome: *")
cont = verificar_cadastro(nome)
if cont == False:
if novo_cont.valid_nome(nome): break
print("Nome inválido!")
continue
else:
print("O contato já está registrado! Alternando para Edição!")
editar_contato(cont)
return
novo_cont.set_apelido(input("Apelido: "))
while not novo_cont.valid_nasc(input("Data de Nascimento [dd/mm/aaaa]: *")):
print("Data de nascimento inválida!")
while not novo_cont.valid_tel(input("Nº de Telefone [ddxxxxxxxxx]: *")):
print("Número de telefone inválido!")
novo_cont.set_urgente(input("Urgente [S/N]: *"))
novo_cont.set_instagram(input("Usuário no Instagram: "))
contatos.append(novo_cont)
atualizar_arquivo()
print("Adicionado com sucesso!\n")
def verificar_cadastro(nome):
global contatos
# >>> verifica se um contato está cadastrado <<< #
for cont in contatos:
if nome == cont._nome: return cont
return False
def excluir_contato(contato):
global contatos
# >>> exclui um conato da agenda <<< #
if input("Tem certeza? [s/n]").lower() == "s":
contatos.remove(contato)
atualizar_arquivo()
print("Excluído com sucesso!\n")
else:
print("Operação cancelada!\n")
def editar_contato(contato): # >>> edita as informações de um contato <<< #
global contatos
print("\nDigite (=) para não alterar o campo.")
while True:
nome = input(f"Nome atual=[{contato._nome}]: ")
if nome == "=" or contato.valid_nome(nome): break
print("Nome inválido!")
apelido = input(f"Apelido [atual={contato._apelido}]: ")
if apelido != "=": contato.set_apelido(apelido)
while True:
dt_nasc = input(f"Data de Nascimento [atual={contato._data_nasc}]: ")
if dt_nasc == "=" or contato.valid_nasc(dt_nasc): break
print("Data de nascimento inválida!")
while True:
tel = input(f"Nº de Telefone [atual={contato._telefone}]: ")
if tel == "=" or contato.valid_tel(tel): break
print("Número de telefone inválido!")
urgente = input(f"Urgente [atual={'S' if contato._urgente else 'N'}]: ")
if urgente != "=": contato.set_urgente(input(urgente))
instagram = input(f"Instagram [atual={contato._instagram}]: ")
if instagram != "=": contato.set_instagram(instagram)
atualizar_arquivo()
print("Editado com sucesso!\n")
def mostrar_contato(cont): # >>> mostra o contato <<< #
print("=== Contato ===")
print(f"Nome: {cont._nome}")
if cont._apelido != "": print(f"Apelido: {cont._apelido}")
print(f"Telefone: {cont._telefone}")
print(f"Data de Nascimento: {cont._data_nasc}")
print(f"Contato Urgente: {'SIM' if cont._urgente else 'NÃO'}")
if cont._instagram != "": print(f"Instagram: {cont._instagram}")
print("===============\n")
def presquisar_nome(): # >>> realiza uma pesquisa por nome ou apelido <<< #
global estatisticas, contatos
estatisticas += 1
nome_apelido = input("Informe o nome/apelido: ")
for cont in contatos:
if cont._nome == nome_apelido or cont._apelido == nome_apelido:
mostrar_contato(cont)
opcoes_contato(cont)
return
print("O contato não foi encontrado!\n")
[...]
Não coube o código todo :|