-
Notifications
You must be signed in to change notification settings - Fork 38
Projeto guiado 1 - Sistema reprograma - Veronica #32
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
1533d61
fcd5532
c93c971
394bfbb
9cc2749
7e8f391
662d700
aac2b0b
24d4cc7
5feba84
f9b1608
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,41 @@ | ||
|
|
||
|
|
||
| ### "Sistema da Escola Reprograma" | ||
|
|
||
| Esta é uma aplicação desenvolvida para auxiliar a escola no gerenciamento eficiente de informações sobre suas alunas. Atualmente, a escola enfrenta desafios com cálculos manuais que consomem muito tempo dos professores, portanto, o sistema foi projetado para automatizar diversas tarefas do dia-a-dia. | ||
|
|
||
| *A média simples das notas é calculada e comparada com a nota de corte da escola (6).* | ||
| *Além das notas, a aluna deve ter pelo menos 80% de presença e uma nota de participação acima de 6 para ser considerada aprovada.* | ||
|
|
||
| ## Funcionalidades Implementadas: | ||
|
|
||
| * Inclusão de uma nova aluna na base de dados: | ||
|
|
||
| - Permite a adição de uma nova aluna com dados como nome, sobrenome, turma, notas em avaliações, presença em aulas e nota de participação. (Usa operadores booleanos). | ||
| - Após a inclusão bem-sucedida, o sistema confirma a adição. | ||
| - Validações são aplicadas para garantir que os dados inseridos sejam válidos. (Usando Try e Except). | ||
|
|
||
| * Consulta da lista de alunas cadastradas: | ||
|
|
||
| - Exibe a lista de todas as alunas cadastradas, mostrando apenas os nomes. | ||
| - Consulta da quantidade de faltas de alunas. | ||
| - Permite buscar o número de faltas de uma aluna específica. | ||
| - Permite a consulta das notas de uma aluna específica. | ||
| - Permite a consulta do status de aprovação de uma aluna específica. | ||
| - Após o cálculo, o sistema exibe o status de aprovação da aluna (aprovada ou reprovada) e sua média final. | ||
|
|
||
|
|
||
| ## Metodologia: | ||
|
|
||
| O sistema foi desenvolvido seguindo uma abordagem modular, onde cada funcionalidade foi implementada separadamente, usando commits individuais para cada etapa, facilitando o controle de versões e a possibilidade de reverter mudanças se necessário. Há também comentários ao longo do código para facilitar o entendimento do sistema. | ||
|
|
||
| # Técnicas usadas | ||
|
|
||
| - Para evitar erros: Try e except | ||
| - Para conversões - listas: split, append | ||
| - Para conversões - tuplas: split | ||
| - Operadores Booleanos: True e False | ||
| - Para condições: If, elif e else. | ||
| - Para percorrer listas: For. | ||
|
|
||
|
|
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,62 @@ | ||
| dataset = { | ||
| ("Ana", "Silva"): { | ||
| "Turma": "Turma A", | ||
| "Notas": [7.5, 8.0, 9.0], | ||
| "Presença": [True, True, False, True, True], | ||
| "Participação": 8.5 | ||
| }, | ||
| ("Mariana", "Santos"): { | ||
| "Turma": "Turma B", | ||
| "Notas": [6.0, 7.5, 8.5], | ||
| "Presença": [True, True, True, False, True], | ||
| "Participação": 7.2 | ||
| }, | ||
| ("Carla", "Oliveira"): { | ||
| "Turma": "Turma A", | ||
| "Notas": [8.0, 7.5, 8.5], | ||
| "Presença": [True, True, True, True, True], | ||
| "Participação": 8.2 | ||
| }, | ||
| ("Juliana", "Ferreira"): { | ||
| "Turma": "Turma C", | ||
| "Notas": [9.0, 8.5, 7.0], | ||
| "Presença": [True, True, True, True, True], | ||
| "Participação": 8.7 | ||
| }, | ||
| ("Patrícia", "Souza"): { | ||
| "Turma": "Turma B", | ||
| "Notas": [7.0, 7.0, 7.5], | ||
| "Presença": [True, False, True, True, True], | ||
| "Participação": 7.2 | ||
| }, | ||
| ("Aline", "Martins"): { | ||
| "Turma": "Turma A", | ||
| "Notas": [8.5, 8.0, 9.0], | ||
| "Presença": [True, True, True, True, True], | ||
| "Participação": 8.5 | ||
| }, | ||
| ("Fernanda", "Costa"): { | ||
| "Turma": "Turma C", | ||
| "Notas": [6.5, 7.0, 8.0], | ||
| "Presença": [True, True, True, False, True], | ||
| "Participação": 7.2 | ||
| }, | ||
| ("Camila", "Pereira"): { | ||
| "Turma": "Turma B", | ||
| "Notas": [7.5, 8.0, 8.5], | ||
| "Presença": [True, True, True, True, True], | ||
| "Participação": 8.0 | ||
| }, | ||
| ("Luana", "Rodrigues"): { | ||
| "Turma": "Turma A", | ||
| "Notas": [9.0, 9.0, 8.5], | ||
| "Presença": [True, True, True, True, True], | ||
| "Participação": 8.8 | ||
| }, | ||
| ("Beatriz", "Lima"): { | ||
| "Turma": "Turma C", | ||
| "Notas": [8.0, 7.5, 7.0], | ||
| "Presença": [True, True, True, False, True], | ||
| "Participação": 7.5 | ||
| } | ||
| } |
| Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| @@ -0,0 +1,165 @@ | ||||||||||||||||||||||||||||||||||||||
| from dataset_alunas import dataset | ||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||
| def main(): | ||||||||||||||||||||||||||||||||||||||
| print("\n--- Seja bem vinda a Escola do Reprograma! ---") | ||||||||||||||||||||||||||||||||||||||
| print("Sistema de informações de alunas") | ||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||
| while True: | ||||||||||||||||||||||||||||||||||||||
| cod_opcao = obter_opcao() | ||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||
| if cod_opcao == 1: incluir_nova_aluna() | ||||||||||||||||||||||||||||||||||||||
| elif cod_opcao == 2: consultar_lista_alunas() | ||||||||||||||||||||||||||||||||||||||
| elif cod_opcao == 3: consultar_faltas_aluna() | ||||||||||||||||||||||||||||||||||||||
| elif cod_opcao == 4: consultar_notas_aluna() | ||||||||||||||||||||||||||||||||||||||
| elif cod_opcao == 5: consultar_status_aprovacao() | ||||||||||||||||||||||||||||||||||||||
| elif cod_opcao == 6: print("Encerrando o programa..."); break | ||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||
| def obter_opcao(): | ||||||||||||||||||||||||||||||||||||||
| codigo_opcao = 0 | ||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||
| while codigo_opcao not in [1, 2, 3, 4, 5]: | ||||||||||||||||||||||||||||||||||||||
| try: | ||||||||||||||||||||||||||||||||||||||
| codigo_opcao = int(input("\nEscolha uma opção:\n" | ||||||||||||||||||||||||||||||||||||||
| "1 - Incluir uma nova aluna\n" | ||||||||||||||||||||||||||||||||||||||
| "2 - Consultar lista de alunas\n" | ||||||||||||||||||||||||||||||||||||||
| "3 - Consultar faltas da aluna\n" | ||||||||||||||||||||||||||||||||||||||
| "4 - Consultar notas da aluna\n" | ||||||||||||||||||||||||||||||||||||||
| "5 - Consultar status de aprovação\n" | ||||||||||||||||||||||||||||||||||||||
| "6 - Sair do sistema\n" | ||||||||||||||||||||||||||||||||||||||
| "Opção: ")) | ||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||
| if codigo_opcao not in [1, 2, 3, 4, 5]: | ||||||||||||||||||||||||||||||||||||||
| print("Opção inválida. Por favor, escolha uma opção válida (1 a 5).\n") | ||||||||||||||||||||||||||||||||||||||
| except ValueError: | ||||||||||||||||||||||||||||||||||||||
| print("Entrada inválida. Por favor, digite um número inteiro.\n") | ||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||
| return codigo_opcao | ||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||
| def incluir_nova_aluna(dataset): #Pegando os dados: nome, sobrenome, turma, notas presença e participação | ||||||||||||||||||||||||||||||||||||||
| try: | ||||||||||||||||||||||||||||||||||||||
| nome = input("Digite o nome da aluna... ") | ||||||||||||||||||||||||||||||||||||||
| except ValueError: | ||||||||||||||||||||||||||||||||||||||
| print("Entrada invalida, digite apenas o nome... ") | ||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||
| try: | ||||||||||||||||||||||||||||||||||||||
| sobrenome = input("Digite o sobrenome da aluna... ") | ||||||||||||||||||||||||||||||||||||||
| except ValueError: | ||||||||||||||||||||||||||||||||||||||
| print("Entrada invalida, digite apenas o sobrenome... ") | ||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||
| try: | ||||||||||||||||||||||||||||||||||||||
| turma = input("Digite a turma que a aluna pertence...") | ||||||||||||||||||||||||||||||||||||||
| except ValueError: | ||||||||||||||||||||||||||||||||||||||
| print("Entrada invalida, digite apenas a turma... ") | ||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||
| try: | ||||||||||||||||||||||||||||||||||||||
| notas = input("Digite as notas da aluna separadas por espaço... ") | ||||||||||||||||||||||||||||||||||||||
| except ValueError: | ||||||||||||||||||||||||||||||||||||||
| print("Entrada invalida, digite as notas separadas por espaço... ") | ||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||
| try: | ||||||||||||||||||||||||||||||||||||||
| presenca = input("Indique a presença da aluna utilizando: A para ausente e P para presente separando por espaço... ") | ||||||||||||||||||||||||||||||||||||||
| except ValueError: | ||||||||||||||||||||||||||||||||||||||
| print("Entrada invalida, digite A para ausente, e P para presente... ") | ||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||
| try: | ||||||||||||||||||||||||||||||||||||||
| participacao = input("Digite a nota de participação da aluna... ") | ||||||||||||||||||||||||||||||||||||||
| except ValueError: | ||||||||||||||||||||||||||||||||||||||
| print("Entrada invalida digite apenas uma nota de participação para aluna... ") | ||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||
| #TRATAMENTO DE DADOS | ||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||
| #Pegando notas digitadas como strings e convertendo para lista de strings | ||||||||||||||||||||||||||||||||||||||
| notas = notas.split(" ") | ||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||
| #Covertendo lista str para Lista int | ||||||||||||||||||||||||||||||||||||||
| notas_int = [] | ||||||||||||||||||||||||||||||||||||||
| for nota in notas: | ||||||||||||||||||||||||||||||||||||||
| notas_int.append(int(nota)) #pegando todas as string notas do professor e convertendo para numero inteiro | ||||||||||||||||||||||||||||||||||||||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Um lembrete amigável é que nota é sempre float, pois é um valor decimal. |
||||||||||||||||||||||||||||||||||||||
| notas = notas_int | ||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||
| #Convertendo presenças A e P para booleanos | ||||||||||||||||||||||||||||||||||||||
| presenca = presenca.split(" ") | ||||||||||||||||||||||||||||||||||||||
| presenca_convertida = [] | ||||||||||||||||||||||||||||||||||||||
| for A_P in presenca: | ||||||||||||||||||||||||||||||||||||||
| if A_P == "A": | ||||||||||||||||||||||||||||||||||||||
| presenca_convertida.append(False) | ||||||||||||||||||||||||||||||||||||||
| elif A_P == "P": | ||||||||||||||||||||||||||||||||||||||
| presenca_convertida.append(True) | ||||||||||||||||||||||||||||||||||||||
| else: | ||||||||||||||||||||||||||||||||||||||
| presenca_convertida.append("Presença invalida.") | ||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||
| presenca = presenca_convertida | ||||||||||||||||||||||||||||||||||||||
|
Comment on lines
+86
to
+94
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Aqui podemos simplificar a parte do split e colocar no for, e dar um nome de variável mais intuitivo para a presença atual Sugestão:
Suggested change
|
||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||
| #Inclusão da aluna no dataset | ||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||
| dataset[nome, sobrenome] = {"Turma": turma, "Notas": notas, "Presença": presenca, "Participação": participacao} | ||||||||||||||||||||||||||||||||||||||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. No salvamento dos dados, a gente deve usar uma tupla ao invés de uma lista, se não, teremos erro no modo como tratamos os dados posteriormente, pois nosso dado no dicionário é de um tipo e estamos salvando com outro Sugestão:
Suggested change
|
||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||
| def consultar_lista_alunas(dataset): | ||||||||||||||||||||||||||||||||||||||
| chaves = list(dataset.keys()) #Pegando as chaves do dicionario | ||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||
| for aluna in chaves: | ||||||||||||||||||||||||||||||||||||||
| print("Aluna: ", aluna[0], aluna[1]) #Print aluna: (nome e sobrenome da aluna) | ||||||||||||||||||||||||||||||||||||||
|
Comment on lines
+102
to
+105
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Em vez de criar uma lista de chaves (chaves = list(dataset.keys())) e iterar sobre ela, você pode iterar diretamente sobre o dicionário dataset.keys(). Isso simplifica o código e torna o processo mais eficiente.
Sugestão:
Suggested change
|
||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||
| def consultar_faltas_aluna(dataset): | ||||||||||||||||||||||||||||||||||||||
| nome_aluna_escolhida = input("Digite o nome e o sobrenome da alunas que querira consultar as faltas: ") | ||||||||||||||||||||||||||||||||||||||
| nome_aluna = tuple(nome_aluna_escolhida.split(" ")) #Pegando a string com nome e sobrenome e convertendo em uma tupla | ||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||
| presenca = dataset[nome_aluna]["Presença"] | ||||||||||||||||||||||||||||||||||||||
| n_faltas = 0 | ||||||||||||||||||||||||||||||||||||||
| n_presencas = 0 | ||||||||||||||||||||||||||||||||||||||
|
Comment on lines
+112
to
+113
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Você poderia usar a função count do python para contar as faltas e presenças. Inicialmente é bom para treinar a lógica de programação, mas usar a função count torna seu código mais limpo e fácil de ver, em relação a um for. Sugestão:
Suggested change
|
||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||
| for pren in presenca: | ||||||||||||||||||||||||||||||||||||||
| if pren == False: n_faltas += 1 | ||||||||||||||||||||||||||||||||||||||
| else: n_presencas += 1 | ||||||||||||||||||||||||||||||||||||||
| print("A aluna", nome_aluna_escolhida, "tem", n_faltas, "faltas.") | ||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||
| porcentagem_presenca = (n_presencas / (n_faltas + n_presencas)) * 100 | ||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||
| return porcentagem_presenca | ||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||
| def consultar_notas_aluna(dataset): | ||||||||||||||||||||||||||||||||||||||
| nome_aluna_escolhida = input("Digite o nome e o sobrenome da alunas que querira consultar as faltas: ") | ||||||||||||||||||||||||||||||||||||||
| nome_aluna = tuple(nome_aluna_escolhida.split(" ")) #Pegando a string com nome e sobrenome e converte em uma tupla | ||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||
| notas = dataset[nome_aluna]["Notas"] | ||||||||||||||||||||||||||||||||||||||
| avaliacao = 1 | ||||||||||||||||||||||||||||||||||||||
| print("A aluna", nome_aluna_escolhida, "teve às seguintes notas:") | ||||||||||||||||||||||||||||||||||||||
| for nota in notas: | ||||||||||||||||||||||||||||||||||||||
| print("Avaliação:", avaliacao, "Nota:", nota) | ||||||||||||||||||||||||||||||||||||||
| avaliacao += 1 | ||||||||||||||||||||||||||||||||||||||
|
Comment on lines
+129
to
+133
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Podemos usar enumerate(notas, start=1) para iterar sobre a lista de notas (notas) começando a contagem de avaliação de 1. Isso elimina a necessidade de uma variável separada (avaliacao) para contar as avaliações manualmente. Sugestão:
Suggested change
|
||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||
| return notas | ||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||
| def consultar_status_aprovacao(): | ||||||||||||||||||||||||||||||||||||||
| nome_aluna_escolhida = input("Digite o nome e sobrenome da aluna que queira consultar o status de aprovação: ") | ||||||||||||||||||||||||||||||||||||||
| nome_aluna = tuple(nome_aluna_escolhida.split(" ")) #Pegando a string com nome e sobrenome e converte em uma tupla | ||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||
| nota_corte = 6 | ||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||
| print("Para sabermos o status de aprovação da aluna vamos ter que consultar sua nota, participação e presença em aulas") | ||||||||||||||||||||||||||||||||||||||
| print("Vamos começar pela nota.") | ||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||
| notas = consultar_notas_aluna(dataset) #Chamando a função para consultar as notas da aluna | ||||||||||||||||||||||||||||||||||||||
| media_notas = sum(notas) / len(notas) #Calculando a média: com a somas das notas, dividido pelo numero de notas | ||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||
| print("Agora sua participação.") | ||||||||||||||||||||||||||||||||||||||
| participacao = dataset[nome_aluna]["Participação"] | ||||||||||||||||||||||||||||||||||||||
| print("A aluna", nome_aluna_escolhida, "teve nota", participacao, "de participação.") | ||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||
| print("Por ultimo a presença.") | ||||||||||||||||||||||||||||||||||||||
| porcentagem_presenca = consultar_faltas_aluna(dataset) | ||||||||||||||||||||||||||||||||||||||
| print("A aluna", nome_aluna_escolhida, "teve", int(porcentagem_presenca), "% de presença.") | ||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||
| print("") | ||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||
| if media_notas >= 6 and porcentagem_presenca >= 80 and participacao >= 6: | ||||||||||||||||||||||||||||||||||||||
| print("A aluna", nome_aluna_escolhida, "esta aprovada.") | ||||||||||||||||||||||||||||||||||||||
| else: print("A aluna", nome_aluna_escolhida, "esta reprovada.") | ||||||||||||||||||||||||||||||||||||||
|
Comment on lines
+137
to
+161
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Boa implementação da função de calcular aprovação :) |
||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||
| main() | ||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
No código atual, você está usando try-except para capturar exceções de ValueError, mas o uso disso não é apropriado para capturar erros de entrada inválida como você espera. No caso de input, você não espera um ValueError diretamente, então o try-except não é necessário aqui.