Fiz uns códigos em Java onde ele deveria somar um salário inicial (double) juntamente com o valor de contrato referente ao mês. Porém, ele só retorna o salário inicial mesmo.
Como devia ser a entrada do programa:
Entre com o nome do departamento: Design
Digite os dados do trabalhador:
Nome: Alex
Nível: PLENO
Base salarial: 1200
Quantos contratos? 3
Contrato 1:
Data (DD/MM/YYYY): 20/08/2018
Valor por hora: 50
Duração do contrato: 20
Contrato 2:
Data (DD/MM/YYYY): 13/06/2018
Valor por hora: 30
Duração do contrato: 18
Contrato 3:
Data (DD/MM/YYYY): 25/08/2018
Valor por hora: 80
Duração do contrato: 10
Entre com mês e ano pra calcular a renda (MM/YYYY): 08/2018
Nome: Alex
Departamento: Design
Renda de 08/2018: 3000,00
Como ele é:
Entre com o nome do departamento: Design
Digite os dados do trabalhador:
Nome: Alex
Nível: PLENO
Base salarial: 1200
Quantos contratos? 3
Contrato 1:
Data (DD/MM/YYYY): 20/08/2018
Valor por hora: 50
Duração do contrato: 20
Contrato 2:
Data (DD/MM/YYYY): 13/06/2018
Valor por hora: 30
Duração do contrato: 18
Contrato 3:
Data (DD/MM/YYYY): 25/08/2018
Valor por hora: 80
Duração do contrato: 10
Entre com mês e ano pra calcular a renda (MM/YYYY): 08/2018
Nome: Alex
Departamento: Design
Renda de 08/2018: 1200,00
O método que devia retornar o salário somado com os contratos do mês: (ele se encontra na classe Trabalhador).
public double renda(int ano, int mes) {
double soma = baseSalarial;
Calendar cal = Calendar.getInstance();
for(ContratoPorHora c : contratos) {
cal.setTime(c.getData());
int cAno = cal.get(Calendar.YEAR);
int cMes = cal.get(Calendar.MONTH) + 1;
if(ano == cAno && mes == cMes) {
soma += c.valorTotal();
}
}
return soma;
}
Método que retorna o valor recebido do contrato (multiplica o valor por hora do contrato, junto com sua duração). Este método se encontra na classe ContratoPorHora.
public double valorTotal() {
return valorPorHora * horas;
}
O código inteiro. Enum Nivel:
package entidades.enums;
public enum Nivel {
JUNIOR,
PLENO,
SENIOR;
}
Classe Departamento:
package entidades;
public class Departamento {
private String name;
public Departamento() {
}
public Departamento(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Classe ContratoPorHora:
package entidades;
import java.util.Date;
public class ContratoPorHora {
private Date data;
private Double valorPorHora;
private Integer horas;
//---------------------------------------------
public ContratoPorHora() {
}
public ContratoPorHora(Date data, Double valorPorHora, Integer horas) {
this.data = data;
this.valorPorHora = valorPorHora;
this.horas = horas;
}
public Date getData() {
return data;
}
public void setData(Date data) {
this.data = data;
}
public Double getValorPorHora() {
return valorPorHora;
}
public void setValorPorHora(Double valorPorHora) {
this.valorPorHora = valorPorHora;
}
public Integer getHoras() {
return horas;
}
public void setHoras(Integer horas) {
this.horas = horas;
}
//---------------------------------------------
public double valorTotal() {
return valorPorHora * horas;
}
}
Classe Trabalhador:
package entidades;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import entidades.enums.Nivel;
public class Trabalhador {
private String nome;
private Nivel nivel;
private Double baseSalarial;
private Departamento departamento;
private List<ContratoPorHora> contratos = new ArrayList<>();
//-----------------------------------------------
public Trabalhador() {}
public Trabalhador(String nome, Nivel nivel, Double baseSalarial, Departamento departamento) {
this.nome = nome;
this.nivel = nivel;
this.baseSalarial = baseSalarial;
this.departamento = departamento;
}
//-----------------------------------------------
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public Nivel getNivel() {
return nivel;
}
public void setNivel(Nivel nivel) {
this.nivel = nivel;
}
public Double getBaseSalarial() {
return baseSalarial;
}
public void setBaseSalarial(Double baseSalarial) {
this.baseSalarial = baseSalarial;
}
public Departamento getDepartamento() {
return departamento;
}
public void setDepartamento(Departamento departamento) {
this.departamento = departamento;
}
public List<ContratoPorHora> getContratos() {
return contratos;
}
//-----------------------------------------------
public void addContrato(ContratoPorHora contrato) {
contratos.add(contrato);
}
public void removerContrato(ContratoPorHora contrato) {
contratos.remove(contrato);
}
public double renda(int ano, int mes) {
double soma = baseSalarial;
Calendar cal = Calendar.getInstance();
for(ContratoPorHora c : contratos) {
cal.setTime(c.getData());
int cAno = cal.get(Calendar.YEAR);
int cMes = cal.get(Calendar.MONTH) + 1;
if(ano == cAno && mes == cMes) {
soma += c.valorTotal();
}
}
return soma;
}
}
Classe com o método main:
package aplicando;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
import entidades.ContratoPorHora;
import entidades.Departamento;
import entidades.Trabalhador;
import entidades.enums.Nivel;
public class Programa {
public static void main(String[] args) throws ParseException {
Scanner scan = new Scanner(System.in);
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
System.out.print("Entre com o nome do departamento: ");
String nomeDepartamento = scan.nextLine();
System.out.println("Digite os dados do trabalhador:");
System.out.print("Nome: ");
String nomeTrabalhador = scan.nextLine();
System.out.print("Nível: ");
String nivel = scan.nextLine();
System.out.print("Base salarial: ");
double baseSalarial = scan.nextDouble();
Trabalhador trabalhador = new Trabalhador(nomeTrabalhador, Nivel.valueOf(nivel), baseSalarial, new Departamento(nomeDepartamento));
System.out.print("Quantos contratos? ");
int n = scan.nextInt();
for(int i = 1; i <= n; i++) {
System.out.println("Contrato " + i + ":");
System.out.print("Data (DD/MM/YYYY): ");
Date dataContrato = sdf.parse(scan.next());
System.out.print("Valor por hora: ");
double valorPorHora = scan.nextDouble();
System.out.print("Duração do contrato: ");
int horas = scan.nextInt();
ContratoPorHora contrato = new ContratoPorHora(dataContrato, valorPorHora, horas);
trabalhador.addContrato(contrato);
}
System.out.println();
System.out.print("Entre com mês e ano pra calcular a renda (MM/YYYY): ");
String mesAno = scan.next();
int mes = Integer.parseInt(mesAno.substring(0, 1));
int ano = Integer.parseInt(mesAno.substring(3, 6));
System.out.println();
System.out.println("Nome: " + trabalhador.getNome());
System.out.println("Departamento: " + trabalhador.getDepartamento().getName());
System.out.println("Renda de " + mesAno + ": " + String.format("%.2f", trabalhador.renda(ano, mes)));
scan.close();
}
}
PS: Tentei por este código no github pra ficar mais fácil, mas até lá tá dando erro