-
Notifications
You must be signed in to change notification settings - Fork 11
Expand file tree
/
Copy pathsistema.js
More file actions
134 lines (124 loc) · 4.44 KB
/
sistema.js
File metadata and controls
134 lines (124 loc) · 4.44 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
//Objeto Participante
function Participante() {
this.nome = "";
this.sobrenome = "";
this.email = "";
this.idade = 0;
this.sexo = 0;
this.nota = 0;
this.aprovado = false;
}
/***********************
* Representa o sistema
* Uma vez instanciado, deve-se usar essa mesma
* instancia em todas as operações.
*/
function SistemaCadastro() {
//Onde os participantes ficarão armazenados
//O array foi excluido e o código foi todo adaptado para usar as funções do objeto armazenamento
//const armazenamento = new Armazenamento("participantes");
const armazenamento = new Armazenamento();
function adicionarParticipante(nome, sobrenome, email, idade, sexo, nota) {
var p = new Participante();
p.nome = nome;
p.sobrenome = sobrenome;
p.email = email;
p.idade = idade;
p.sexo = sexo;
p.nota = nota;
//com o objeto Participante instanciado, o sistema delega para o armazenamento a responsabilidade de guardar essas informações
return armazenamento.adicionar(p);
}
function removerParticipante(id) {
return armazenamento.remover(id);
}
function atualizarParticipante(
id,
nome,
sobrenome,
email,
idade,
sexo,
nota
) {
var participante = obterParticipante(id);
//aqui eu troco todas as informações antigas, gerando um novo objeto.
//existem outras formas mais adequadas de fazer isso, mas abstrai isso nesse momento
participante = { id, nome, sobrenome, email, idade, sexo };
//fico consistente com a regra de negocio e utilizo uma função auxiliar para processar a nota.
//Veja, hoje isso é simples mas poderia ser bem mais complexo do que uma simples comparação
processarNotaDoParticipante(participante, nota);
//pego esse objeto modificado e passo para o armazenamento substituir.
//perceba que o sistema não faz ideia de como os dados são guardados.
//ISSO É ENCAPSULAMENTO!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! \o/
//apenas passo o novo objeto e qual campo ele deve usar pra identificar.
//talvez vc tenha colocado o código no armazenamento de forma que ele sempre procure por email, não tem problema nenhum.
//eu fiz dessa forma pq achei mais legal. :)
armazenamento.atualizar(participante, "email");
}
function buscarParticipantesPorNome(nome) {
return armazenamento.obterItens("nome", nome);
}
function buscarParticipantesPorSexo(sexo) {
return armazenamento.obterItens("sexo", sexo);
}
function buscarParticipantesAprovados() {
return armazenamento.obterItens("aprovado", true);
}
function buscarParticipantesReprovados() {
return armazenamento.obterItens("aprovado", false);
}
function obterParticipante(email) {
//implemente o código necessário
return armazenamento.obterItem("email", email);
}
function obterParticipantes() {
//implemente o código necessário
return armazenamento.obterTodosOsItens();
}
function processarNotaDoParticipante(participante, nota) {
participante.nota = nota;
participante.aprovado = nota >= 70;
}
function adicionarNotaAoParticipante(email, nota) {
var participante = armazenamento.obterItem("email", email);
processarNotaDoParticipante(participante, nota);
armazenamento.atualizar(participante, "email");
}
function obterMediaDasIdadesDosParticipantes() {
var participantes = armazenamento.obterTodosOsItens();
var total = participantes.reduce(function(somaDasNotas, participante) {
return somaDasNotas + participante.nota;
}, 0);
return total / participantes.length;
}
function obterTotalDeParticipantes() {
return armazenamento.obterTodosOsItens().length;
}
function verificarSeParticipanteEstaAprovado(email) {
//implemente o código necessário
var participante = obterParticipante(email);
if (participante) return participante.aprovado;
}
function obterQuantidadeDeParticipantesPorSexo(sexo) {
//implemente o código necessário
var resultado = buscarParticipantesPorSexo(sexo);
return resultado.length;
}
return {
adicionarParticipante,
removerParticipante,
atualizarParticipante,
buscarParticipantesPorNome,
buscarParticipantesPorSexo,
buscarParticipantesAprovados,
buscarParticipantesReprovados,
obterParticipante,
obterParticipantes,
adicionarNotaAoParticipante,
obterMediaDasIdadesDosParticipantes,
obterTotalDeParticipantes,
verificarSeParticipanteEstaAprovado,
obterQuantidadeDeParticipantesPorSexo
};
}