Durante a disciplina de programação orientada a dados, vocês estão aprendendo a programar na linguagem de programação Python, que é multi-paradigma. Neste trabalho, o objetivo é avaliá-lo relativo a parte de Programação Orientada a Objetos (POO), Módulos e Manipulação de Arquivos. O trabalho também será uma forma de exercitar e aplicar os conceitos da disciplina de forma prática. Contexto Você acaba de ser contratado por uma empresa, a qual visa implementar um sistema de ensino de idiomas que permita que estudantes possam ter aulas particulares através de vídeo chamadas com professores de diferentes países. Restrições
- Está permitido o uso de todos os métodos da classe str (string).
- Apenas os módulos abc, sys, e datetime podem ser importados para implementar o sistema.
- Outros métodos como len() que são nativos e não dependem de importação de módulos estão autorizados (lista de métodos). Métodos que não foram apresentados em aula, devem ser justificados e explicados através de comentários no código.
Você precisa desenvolver um sistema de aprendizagem de idiomas que possa ser usado como um pacote do Python e também uma aplicação em Python que utilize este pacote para realizar uma sequência de operações que estarão pré-definidas em um arquivo.
-
Todo este sistema deve ser implementado como um pacote do Python chamado LearnLanguages, composto por um módulo Users. Subpacotes e submodulos são opcionais. Feito!
-
Todos os atributos das classes precisam ter seu acesso gerenciado por setters e getters. Feito!
-
Caso existam valores inválidos, o programa deve lançar exceções, as quais devem ser tratadas para que o programa não pare de funcionar na aplicação (app.py). Feito!
-
Implementar a classe Idioma, a qual armazena o nome do idioma (50 caracteres no máximo) e nível de proficiência (A1, A2, B1, B2, C1, C2, ou Nativo). Feito!
-
Implementar a classe Horario para representar os horários em que o professor está disponível para lecionar as aulas de idiomas. O pacote datetime pode ser utilizado para representar a data. Métodos são opcionais. Feito!
-
Implementar a classe TipoDeAula para identificar os diferentes tipos de aulas oferecidos pelos professores. Cada tipo de aula possui informações tais como idioma, preço, e identificador. Feito!
-
Implementar a classe Aula. Uma aula reúne informações como professor, estudante, horário, e tipo da aula. Feito!
-
Implementar a classe Carteira, a qual serve para permitir ao estudante pagar o preço das aulas aos professores. A classe Carteira deve permitir depositar, sacar, e fazer transferências de dinheiro entre carteiras. Feito!
-
Implementar a classe abstrata Usuario: Feito!
- i) Nome do usuário com no maximo 50 caracteres. Feito!
- ii) E-mail com no maximo 50 caracteres. Feito!
- iii) País de origem com no máximo 10 caracteres. Feito!
- iv) País atual com no máximo 10 caracteres. Feito!
- v) Lista de idiomas que o usuário sabe falar. Feito!
- vi) Lista de horários do usuário. Feito!
- vii) Objeto do tipo carteira, necessário para efetuar ou receber pagamentos das aulas. Feito!
- i) imprimirRelatorio: Método abstrato que deve ser implementado pelas classes que herdam a classe Usuario. O método deve imprimir um relatório completo sobre as atividades do usuário.
- ii) Demais métodos que deseja implementar.
- Implemente a classe Estudante como uma subclasse de Usuario: Feito!
- i) Lista de idiomas que o estudante deseja aprender. Feito!
- ii) Lista de professores do estudante. Feito!
- i) imprimirRelatorio:
(1) Listar Idiomas que o estudante sabe falar; Feito!
(2) Listar Idiomas que o estudante deseja aprender; Feito!
(3) Listar horários do estudante; Feito!
(4) Listar professores do estudante; Feito!
(5) Listar aulas concluídas pelo estudante; Feito!
(6) Exibir dados do professor favorito do estudante (com qual professor o
estudante teve mais aulas, e quantas foram); Feito!
(7) Exibir idioma favorito do estudante (com qual idioma o estudante teve
mais aulas, e quantas foram); Feito!
(8) Exibir saldo da carteira do estudante. Feito! - ii) agendarAula: Efetua o pedido de agendamento de uma aula com um professor. O pedido contém o horário e o tipo de aula. O estudante só pode realizar o pedido de agendamento se tiver saldo o suficiente na carteira. Feito!
- iii) confirmarQueAulaFoiConcluida: O estudante confima se a aula com o professor foi concluída. Se sim, 90% do valor do preço da aula deve ser transferido para a carteira do professor. Os 10% restantes do valor devem ser transferidos para a carteira do sistema. Caso a aula não tenha sido concluída, o dinheiro deve permanecer na carteira do estudante. Feito!
- Implementar a classe Professor como uma subclasse de Usuario: Feito!
- i) Lista de idiomas que o professor ensina. Feito!
- ii) Lista de estudantes do professor. Feito!
- i) imprimirRelatorio: Feito! (1) Listar Idiomas que o professor sabe falar; Feito!
(2) Listar Idiomas que o professor ensina; Feito!
(3) Listar horários do professor; Feito!
(4) Listar de estudantes do professor; Feito!
(5) Listar aulas concluídas pelo professor; Feito!
(6) Exibir saldo da carteira do professor. Feito!
- ii) aceitarPedidoDeAgendamento: Se o professor aceitar um pedido de agendamento, o horário do professor e do estudante devem ser marcados como não disponíveis. Usuários não podem ter duas aulas marcadas no mesmo horário. Feito!
- Fornecer um método para imprimir o relatório do sistema, o qual deve informar a quantidade de estudantes e professores cadastrados, bem como o saldo da carteira do sistema. O método também deve imprimir o relatório de cada usuário cadastrado no sistema. Feito !
-
A aplicação deve receber como argumento na linha de comando uma lista de arquivos texto (entrada_1.txt, entrada_2.txt, entrada_3.txt, ...), onde cada arquivo representa uma simulação do sistema sendo utilizado por estudantes e professores.
-
Após concluídas todas as ações contidas no arquivo de texto recebido como argumento da linha de comando, os dados do sistema precisam ser armazenados em um arquivo de saída (saida_1.txt, saida_2.txt, saida_3.txt, ...).
-
A aplicação não pode parar quando se deparar com ações não permitidas ou inválidas. Os erros devem ser armazenados em um arquivo de log (log_1.txt, log_2.txt, log_3.txt, ...). Por exemplo, se não foi possível agendar a aula de um estudante, o programa deve progredir para a próxima ação da simulação. Este arquivo de log serve para monitorar o que foi possível realizar ou não.