From 9ffe4761377a3ec5c86dcc3152b52d998a685eee Mon Sep 17 00:00:00 2001 From: Samuel Chidera Isiguzor Date: Wed, 10 Jun 2026 13:16:12 +0100 Subject: [PATCH] first commit --- rust_session/student_registry/src/grade.rs | 2 +- rust_session/student_registry/src/registry.rs | 33 +++++++++ .../student_registry/src/registry_struct.rs | 10 +-- .../student_registry/src/student_struct.rs | 1 + .../student_registry/src/uuid_registry.rs | 69 +++++++++++++++++++ 5 files changed, 109 insertions(+), 6 deletions(-) create mode 100644 rust_session/student_registry/src/uuid_registry.rs diff --git a/rust_session/student_registry/src/grade.rs b/rust_session/student_registry/src/grade.rs index 10438b1e..6070a561 100644 --- a/rust_session/student_registry/src/grade.rs +++ b/rust_session/student_registry/src/grade.rs @@ -15,7 +15,7 @@ impl Grade { } } -#[derive(Debug)] +#[derive(Debug, PartialEq)] pub enum Sex { Male, Female, diff --git a/rust_session/student_registry/src/registry.rs b/rust_session/student_registry/src/registry.rs index 146dc186..affb9cdb 100644 --- a/rust_session/student_registry/src/registry.rs +++ b/rust_session/student_registry/src/registry.rs @@ -7,6 +7,7 @@ pub struct Registry { } impl Registry { + pub fn add(&mut self, name: &str, age: u8, sex: Sex, grade: Grade, score: f32) { let id = self.next_id; let student = Student::new(id, name.to_string(), age, sex, grade, score); @@ -36,4 +37,36 @@ impl Registry { ); } } + + pub fn delete_by_id(&mut self, name: &str, age: u8, sex: Sex, grade: Grade, score: f32) { + if let Some(pos) = self.students.iter().position(|student| { + student.name == name + && student.age == age + && student.sex == sex + && student.grade == grade + && (student.score - score).abs() < f32::EPSILON + }) { + let student = self.students.remove(pos); + println!("Deleted: {} (ID {})", student.name, student.id); + } else { + println!("No matching student found to delete: {}", name); + } + } + + pub fn update_by_id(&mut self, id: u32, name: &str, age: u8, sex: Sex, grade: Grade, score: f32) { + if let Some(student) = self.students.iter_mut().find(|student| student.id == id) { + student.name = name.to_string(); + student.age = age; + student.sex = sex; + student.grade = grade; + student.score = score; + println!("Updated: {} (ID {})", student.name, student.id); + } else { + println!("No matching student found to update with ID: {}", id); + } + } + + pub fn find_id(&self, id: u32) -> Option<&Student> { + self.students.iter().find(|student| student.id == id) + } } diff --git a/rust_session/student_registry/src/registry_struct.rs b/rust_session/student_registry/src/registry_struct.rs index 8b076a03..3a1a23f4 100644 --- a/rust_session/student_registry/src/registry_struct.rs +++ b/rust_session/student_registry/src/registry_struct.rs @@ -1,6 +1,6 @@ -use crate::student_struct; +// use crate::student_struct; -pub struct Registry { - students: Vec, // Vec = "a list of Student values" - next_id: u32, // auto-increment counter for IDs -} \ No newline at end of file +// pub struct Registry { +// students: Vec, // Vec = "a list of Student values" +// next_id: u32, // auto-increment counter for IDs +// } \ No newline at end of file diff --git a/rust_session/student_registry/src/student_struct.rs b/rust_session/student_registry/src/student_struct.rs index 9e4ead64..90c948f2 100644 --- a/rust_session/student_registry/src/student_struct.rs +++ b/rust_session/student_registry/src/student_struct.rs @@ -15,6 +15,7 @@ pub struct Student { // This is the implementation of the student struct with its corresponding methods impl Student { + pub fn new(id: u32, name: String, age: u8, sex: Sex, grade: Grade, score: f32) -> Student { Student { id, diff --git a/rust_session/student_registry/src/uuid_registry.rs b/rust_session/student_registry/src/uuid_registry.rs new file mode 100644 index 00000000..9e6311ef --- /dev/null +++ b/rust_session/student_registry/src/uuid_registry.rs @@ -0,0 +1,69 @@ +use crate::grade::{Grade, Sex}; +use uuid::Uuid; + +#[derive(Debug)] +pub struct UuidStudent { + pub id: Uuid, + pub name: String, + pub age: u8, + pub sex: Sex, + pub grade: Grade, + pub score: f32, +} + +impl UuidStudent { + + + pub fn new(name: String, age: u8, sex: Sex, grade: Grade, score: f32) -> Self { + Self { + id: Uuid::new_v4(), + name, + age, + sex, + grade, + score, + } + } + } + + pub struct UuidRegistry { + pub students: Vec, + } + + impl UuidRegistry { + pub fn new() -> Self { + Self { + students: Vec::new(), + } + } + + pub fn add(&mut self, name: &str, age: u8, sex: Sex, grade: Grade, score: f32) -> Uuid { + let student = UuidStudent::new(name.to_string(), age, sex, grade, score); + let id = student.id; + println!("Added: {} (ID {})", student.name, student.id); + self.students.push(student); + id + } + + pub fn update(&mut self,id: Uuid,name: &str,age: u8,sex: Sex,grade: Grade,score: f32,) -> bool { + if let Some(student) = self.students.iter_mut().find(|student| student.id == id) { + student.name = name.to_string(); + student.age = age; + student.sex = sex; + student.grade = grade; + student.score = score; + println!("Updated: {} (ID {})", student.name, student.id); + true + } else { + println!("No student found with ID: {}", id); + false + } + } + + pub fn find_by_id(&self, id: Uuid) -> Option<&UuidStudent> { + self.students.iter().find(|student| student.id == id) + } + + + +}