• Matéria: Informática
  • Autor: aramizsilva84
  • Perguntado 5 anos atrás

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!!!!

Anexos:

fqpl059: Sim, já fiz essa parte aí.
fqpl059: Só estão dando alguns bugs, mas estou corrigindo!
fqpl059: Trabalhar com arquivos é um pouco complicado...
aramizsilva84: Sim, bastante
Anônimo: logo percebesse que esse cara joga Minecraft °^°
aramizsilva84: hahahaha
Anônimo: logo percebesse que vc tem bom gosto !!
aramizsilva84: É nois B)
fqpl059: Kssksk
fqpl059: Mas é um jogo muito bom mesmo! ;)

Respostas

respondido por: fqpl059
1

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 :|


fqpl059: O código inteiro pode ser baixado pelo Google Drive aqui:
fqpl059: https://drive.google.com/file/d/1ZfZsOZ6LmJrB9ditA35X3dHQBBJW49Y_/view?usp=sharing
aramizsilva84: Já já eu dou o veredito, mas desde já agradeço
fqpl059: Qualquer coisa diz aí :)
aramizsilva84: Trabalho excelente como sempre
aramizsilva84: Manda bem de mais
fqpl059: Nossa, valeu!
Perguntas similares