// Rust
use std::io;
use std::io::Write;
const CONST_SEG_SOCIAL: f64 = 0.0665;
// Declaración de función
fn deduccion(sueldo_bruto: f64) -> f64 {
sueldo_bruto * CONST_SEG_SOCIAL
}
// Función principal
fn main() {
// Declaración de variables
let mut sueldo_hora: f64;
let mut sueldo_bruto: f64;
let mut desc_seg_soc: f64;
let mut sueldo_neto: f64;
let mut horas_trab: i32;
let mut overtime: f64;
let mut repetir = 1;
let limite_horas = 50;
while repetir == 1 {
loop {
print!("Ingrese las horas trabajadas: ");
io::stdout().flush().unwrap(); // Lo escribe en consola
let mut input = String::new();
io::stdin().read_line(&mut input).unwrap();
if let Ok(horas) = input.trim().parse::<i32>() {
horas_trab = horas.abs();
} else {
horas_trab = -1;
//Valida si es decimal o entero las horas
println!("Por favor, ingrese un número entero.");
continue;
}
if horas_trab < 1 {
println!("Por favor, ingrese horas mayor a 0.");
} else if horas_trab >= limite_horas {
println!("Favor de ingresar horas mayores a 0 y menores a {}", limite_horas);
} else {
break;
}
}
loop {
print!("Ingrese el sueldo por hora: ");
io::stdout().flush().unwrap();
let mut input = String::new();
io::stdin().read_line(&mut input).unwrap();
sueldo_hora = input.trim().parse().unwrap_or(-1.0);
sueldo_hora = sueldo_hora.abs();
if sueldo_hora < 1.0 {
println!("Por favor, ingrese un sueldo por hora mayor a 0.");
} else {
break;
}
}
// Calcular horas extra
if horas_trab > 40 {
overtime = (horas_trab - 40) as f64 * 2.0 * sueldo_hora;
} else {
overtime = 0.0;
}
// Calcular sueldo bruto
sueldo_bruto = horas_trab as f64 * sueldo_hora + overtime;
sueldo_bruto = sueldo_bruto.round();
// Llamada a la función deducción
desc_seg_soc = deduccion(sueldo_bruto);
desc_seg_soc = desc_seg_soc.round();
// Calcular sueldo neto
sueldo_neto = sueldo_bruto - desc_seg_soc;
sueldo_neto = sueldo_neto.round();
println!("Las horas trabajadas son: {} horas con un overtime de {} horas, un descuento de seguro social de {:.2}, y un sueldo bruto de {:.2} y de un sueldo neto de {:.2}.",
horas_trab, overtime as i32, desc_seg_soc, sueldo_bruto, sueldo_neto);
loop {
print!("¿Desea ingresar otra persona? 1 = sí, 2 = no: ");
io::stdout().flush().unwrap();
let mut input = String::new();
io::stdin().read_line(&mut input).unwrap();
repetir = input.trim().parse().unwrap_or(-1);
if repetir != 1 && repetir != 2 {
println!("Por favor, ingresar 1 o 2.");
} else {
break;
}
}
}
}