def _turmas_por_professor(): professores = importar_tabela() while True: try: ord = int(input("Entre o número (ORD) do professor para impressão de relatório por turmas (0 - aborta):\n")) if ord < 0 or ord > len(professores): raise ValueError except ValueError: print("Entrada inválida :( tente novamente...") continue if ord == 0: print("Operação abortada") return break ord -= 1 while True: periodo = input("Qual período (Enter = todos)?\n") if periodo == '' or f.validar_periodo(periodo): break else: print("Entrada inválida :( formato AAAA.S A=Ano, S= Semestre") turmas = importar_turmas_professor(professores[ord][0]) if periodo != '': # filtra lista de turmas (var. turmas) incluindo só turmas do período solicitado turmas = [t for t in turmas if t[2] == periodo] else: # ordena por período, quando relatório inclui todos os períodos turmas.sort(key=lambda t: t[2]) if len(turmas) == 0: print("Não há turmas vinculadas a esse professor no(s) período(s) selecionado(s)") return turmas = [t[1:] for t in turmas] f.imprimir_tabela(cabeçalho_turmas, turmas)
def disciplinas(): # loop para input de opção de menu com bloco try-except para forçar # o usuário a entrar uma opção válida: while True: print("Cadastro de disciplinas".upper()) f.imprimir_tabela(cabeçalho, lista) # imprime o número de cada opção e sua descrição: for opção, tupla in enumerate(opções): print("%d - %s" % (opção, tupla[0])) print("") try: opção = int(input("Entre o número da opção desejada: \n")) if opção < 0 or opção >= len(opções): raise ValueError print("Opção: %s" % (opções[opção][0])) # aqui Python executa o bloco 'except' caso a opção digitada (var. opção) # não exista na lista de opções do menu (var. opções): except ValueError: print("Opção inválida :(") continue # chama a função que executa a opção desejada; opções[opção][1]() if opção == 0: break # retorna para o menu principal
def _imprimir_ata(): # imprime lista de turmas na tela e prontifica o usuário a entrar o número de ordem (ORD) da turma # cuja ata deseja imprimir _imprimir_turmas() while True: try: ord = int(input("Entre o número (ORD) da turma para impressão de ata (0 - aborta):\n")) if ord < 0 or ord > len(lista_turmas): raise ValueError except ValueError: print("Entrada inválida :( tente novamente...") continue if ord == 0: print("Operação abortada") return break ord -= 1 # pega a id da turma na lista de turmas id_turma = lista_turmas[ord][0] # pega o código da disciplina da turma codigo = lista_turmas[ord][3] # pega dados dos alunos vinculados à turma usando a lista de referência de alunos matriculados na turma # (lista_alunos) e a função acha_aluno (módulo alunos) lista = [x for aluno in lista_alunos if aluno[0] == id_turma for x in [acha_aluno(aluno[1])]] # exibe aviso e retorna caso não haja alunos matriculados nessa turma ainda if len(lista) == 0: print("Não há alunos inscritos nessa turma, nada a listar.") return # acrescenta campos para impressão relativos à nota e assinatura do aluno (último campo) for x in lista: x.insert(0, '') x.append('') # ordena lista por nome de aluno lista.sort(key=lambda aluno: aluno[2]) # imprime barra superior do relatório na tela (sequencia de caracteres '=') com largura # igual à largura da ata a ser impressa larguras = cabeçalho_ata.values() largura = sum([int(x) for x in larguras]) + 2*(len(larguras) + 1) print("="*largura) # imprime cabeçalho centrado print() print(('{:^' + str(largura) + '}').format("universidade federal rural de pernambuco".upper())) print(('{:^' + str(largura) + '}').format('Ata de Exercício')) # imprime data e hora da emissão da ata (centrados) agora = datetime.datetime.now() print() print(('{:^' + str(largura) + '}').format(agora.strftime("%d/%m/%y - %H:%M"))) # imprime informações sobre a turma e professor(es) print("Turma: %s" % (lista_turmas[ord][1])) print("Período: %s" % (lista_turmas[ord][2])) print("Código da disciplina: %s" % codigo) print("Nome da Disciplina: %s" % (acha_disciplina(codigo)[1])) print("Professor(es): %s" % (', '.join([acha_professor(x[1])[1] for x in lista_profs if x[0] == id_turma]))) # imprime ata de presença print() f.imprimir_tabela(cabeçalho_ata, lista) # imprime barra inferior do relatório print() print("="*largura)
def _imprimir_turmas(): # copia a lista de turmas lista = f.copiar_lista(lista_turmas) # prepara a cópia da lista de turmas para impressão for turma in lista: # inclui nome da disciplina na cópia # a posição 3 contém o código da disciplina na lista das turmas; # a posição 1 da lista retornada pela busca contém o nome da disciplina turma.append(acha_disciplina(turma[3])[1]) # inclui o(s) nome(s) do(s) professor(es) na listagem # lista os nomes dos professores (conteúdos na posição 1) dos resultados da busca pelos professores # e une-os com vírgula professores = ', '.join([x[1] for x in _acha_professores(turma[0])]) turma.append(professores) # elimina campo da id da turma antes de imprimir lista = [x[1:] for x in lista] # ordena lista por período da turma lista.sort(key=lambda turma: turma[1]) f.imprimir_tabela(cabeçalho_turmas, lista)
def _disciplinas_por_aluno(): # entra CPF do aluno while True: cpf = input("Entre o CPF do aluno (0 - aborta):\n") if cpf == "0": print("Operação abortada") return if f.validar_cpf(cpf): cpf = f.formatar_cpf(cpf) # busca aluno aluno = acha_aluno(cpf) if aluno is None: print("Aluno com o CPF %s não encontrado" % cpf) continue print("CPF: %s, Aluno: %s" % (aluno[0], aluno[1])) break else: print("CPF inválido (somente algarismos, 11 dígitos): tente novamente") # busca turmas do aluno turmas = turmas_do_aluno(cpf) if turmas is None: print("Esse aluno não está matriculado em nenhuma disciplina") return # entra período while True: periodo = input("Qual período (Enter = todos)?\n") if periodo == '' or f.validar_periodo(periodo): break else: print("Entrada inválida :( formato AAAA.S A=Ano, S= Semestre") # seleciona período if periodo != '': turmas = [t for t in turmas if t[2] == periodo] if len(turmas) == 0: print("Esse aluno não está matriculado em nenhuma disciplina no período %s" % periodo) return turmas = [t[1:] for t in turmas] f.imprimir_tabela(cabeçalho_turmas, turmas)
def exportar_tabela(): # função usada pelo módulo 'turmas' para composição de nova turma f.imprimir_tabela(cabeçalho, lista) # printa lista atualizada de disciplinas return f.copiar_lista(lista) # chama função auxiliar em 'ferramentas' para retornar cópia da lista
def _imprime_cadastro(): lista.sort(key=lambda cadastro: cadastro[1].lower()) f.imprimir_tabela(cabeçalho, lista)
def exportar_tabela(): f.imprimir_tabela(cabeçalho, lista) return f.copiar_lista(lista)
def _imprimir_alunos(id_turma): # imprime tabela mostrando os alunos matriculados na turma identificada por 'id_turma' lista = [x for aluno in lista_alunos if aluno[0] == id_turma for x in [acha_aluno(aluno[1])]] f.imprimir_tabela(cabeçalho_alunos, lista) return lista