Estatísticas de Saúde
Você está trabalhando na implementação de um sistema de monitoramento de saúde. Como parte disso, você precisa acompanhar as estatísticas de saúde dos usuários.
Você começará com algumas funções fragmentadas em um bloco impl
e também com a definição da estrutura Usuario
. Seu objetivo é implementar os métodos esboçados para a struct
Usuario
definidos no bloco impl
.
Copie o código abaixo em https://play.rust-lang.org/ e implemente os métodos que estão faltando:
// TODO: remove this when you're done with your implementation. #![allow(unused_variables, dead_code)] // ANCHOR: solution // ANCHOR: setup pub struct User { name: String, age: u32, height: f32, visit_count: usize, last_blood_pressure: Option<(u32, u32)>, } pub struct Measurements { height: f32, blood_pressure: (u32, u32), } pub struct HealthReport<'a> { patient_name: &'a str, visit_count: u32, height_change: f32, blood_pressure_change: Option<(i32, i32)>, } impl User { // ANCHOR_END: setup // ANCHOR: User_new pub fn new(name: String, age: u32, height: f32) -> Self { // ANCHOR_END: User_new Self { name, age, height, visit_count: 0, last_blood_pressure: None, } } // ANCHOR: User_name pub fn name(&self) -> &str { // ANCHOR_END: User_name &self.name } // ANCHOR: User_age pub fn age(&self) -> u32 { // ANCHOR_END: User_age self.age } // ANCHOR: User_height pub fn height(&self) -> f32 { // ANCHOR_END: User_height self.height } // ANCHOR: User_doctor_visits pub fn doctor_visits(&self) -> u32 { // ANCHOR_END: User_doctor_visits self.visit_count as u32 } // ANCHOR: User_set_age pub fn set_age(&mut self, new_age: u32) { // ANCHOR_END: User_set_age self.age = new_age } // ANCHOR: User_set_height pub fn set_height(&mut self, new_height: f32) { // ANCHOR_END: User_set_height self.height = new_height } // ANCHOR: User_visit_doctor pub fn visit_doctor(&mut self, measurements: Measurements) -> HealthReport { // ANCHOR_END: User_visit_doctor self.visit_count += 1; let bp = measurements.blood_pressure; let report = HealthReport { patient_name: &self.name, visit_count: self.visit_count as u32, height_change: measurements.height - self.height, blood_pressure_change: match self.last_blood_pressure { Some(lbp) => Some(( bp.0 as i32 - lbp.0 as i32, bp.1 as i32 - lbp.1 as i32 )), None => None, } }; self.height = measurements.height; self.last_blood_pressure = Some(bp); report } } // ANCHOR: main fn main() { let bob = User::new(String::from("Bob"), 32, 155.2); println!("I'm {} and my age is {}", bob.name(), bob.age()); } // ANCHOR_END: main // ANCHOR: tests #[test] fn test_height() { let bob = User::new(String::from("Bob"), 32, 155.2); assert_eq!(bob.height(), 155.2); } #[test] fn test_set_age() { let mut bob = User::new(String::from("Bob"), 32, 155.2); assert_eq!(bob.age(), 32); bob.set_age(33); assert_eq!(bob.age(), 33); } #[test] fn test_visit() { let mut bob = User::new(String::from("Bob"), 32, 155.2); assert_eq!(bob.doctor_visits(), 0); let report = bob.visit_doctor(Measurements { height: 156.1, blood_pressure: (120, 80), }); assert_eq!(report.patient_name, "Bob"); assert_eq!(report.visit_count, 1); assert_eq!(report.blood_pressure_change, None); let report = bob.visit_doctor(Measurements { height: 156.1, blood_pressure: (115, 76), }); assert_eq!(report.visit_count, 2); assert_eq!(report.blood_pressure_change, Some((-5, -4))); } // ANCHOR_END: tests fn main() { let bob = User::new(String::from("Bob"), 32, 155.2); println!("I'm {} and my age is {}", bob.name(), bob.age()); } #[test] fn test_height() { let bob = User::new(String::from("Bob"), 32, 155.2); assert_eq!(bob.height(), 155.2); } #[test] fn test_set_age() { let mut bob = User::new(String::from("Bob"), 32, 155.2); assert_eq!(bob.age(), 32); bob.set_age(33); assert_eq!(bob.age(), 33); } #[test] fn test_visit() { let mut bob = User::new(String::from("Bob"), 32, 155.2); assert_eq!(bob.doctor_visits(), 0); let report = bob.visit_doctor(Measurements { height: 156.1, blood_pressure: (120, 80), }); assert_eq!(report.patient_name, "Bob"); assert_eq!(report.visit_count, 1); assert_eq!(report.blood_pressure_change, None); let report = bob.visit_doctor(Measurements { height: 156.1, blood_pressure: (115, 76), }); assert_eq!(report.visit_count, 2); assert_eq!(report.blood_pressure_change, Some((-5, -4))); }