упр.04 задача 1
- Краен срок:
- 05.11.2025 23:59
- Точки:
- 2
Срокът за предаване на решения е отминал
// Include the solution source in the same file, so we
// don't have to worry about item visibility.
// Please don't use `include!` in real code, this is a hack
// around the checking system.
include!{ "../src/lib.rs" }
#[test]
fn test_basic() {
let s1 = Student::new("Ivan".to_string(), 20, Spec::SI);
let s2 = Student::new("Peter".to_string(), 25, Spec::SI);
let t1 = Teacher::new(
"Dr. Petrov".to_string(),
45,
vec![Spec::SI, Spec::IS],
Title::Professor,
);
let uni = University::new("SU".to_string(), vec![s1, s2], vec![t1]);
let expected = r#"{
"name":"SU",
"students": [
{"name": "Ivan", "age": 20, "spec": "SI"},
{"name": "Peter", "age": 25, "spec": "SI"}
],
"teachers": [
{"name": "Dr. Petrov", "age": 45, "spec": ["SI", "IS"], "title": "Professor"}
]
}"#;
assert_eq!(uni.to_json().replace(char::is_whitespace, ""), expected.replace(char::is_whitespace, ""));
}
#[test]
fn test_basic2() {
let s1 = Student::new("Ivan".to_string(), 20, Spec::SI);
let s2 = Student::new("Peter".to_string(), 25, Spec::SI);
let uni = University::new("SU".to_string(), vec![s1], vec![s2]);
let expected = r#"{
"name":"SU",
"students": [
{"name": "Ivan", "age": 20, "spec": "SI"}
],
"teachers": [
{"name": "Peter", "age": 25, "spec": "SI"}
]
}"#;
assert_eq!(uni.to_json().replace(char::is_whitespace, ""), expected.replace(char::is_whitespace, ""));
}
Да се създаде програма на езика Rust, която моделира структурата на университет, включващ студенти и преподаватели.
- Да се дефинира енум специалност
Spec, описващ специалности в университета, със следните стойности:SI,IS,KN,I,M. - Да се дефинира енум титла
Title, описващ академичното звание на преподавател:Assistant,Doctor,Professor. - Да се дефинира структура студент
Student, съдържаща име , възраст и специалност. - Да се дефинира структура преподавател
Teacher, съдържаща име, възраст, списък от специалности, на които преподава и академично звание. - Да се създаде структура университет
University, която съдържа име на университета, списък от студенти и списък от преподаватели. - Да се реализират трейта
ToJson— дефиниращ метод to_json, който връща JSON представяне. - Всички изброени структури и енумерации трябва да могат да се отпечатват чрез
{:?}. - Да се реализира метод
to_jsonза структуратаUniversity, който връща цялата информация за университета в JSON формат. - В main() да се създаде примерен университет с поне един студент и един преподавател и да се отпечата резултатът от метода to_json().
Университета трябва да позволява следната употреба:
// Може преподавателите да са от тип Teacher
let s1 = Student::new("Ivan".to_string(), 20, Spec::SI);
let s2 = Student::new("Peter".to_string(), 25, Spec::SI);
let t1 = Teacher::new(
"Dr. Petrov".to_string(),
45,
vec![Spec::SI, Spec::IS],
Title::Professor,
);
let uni = University::new("SU".to_string(), vec![s1, s2], vec![t1]);
println!("{}", uni.to_json());
// {
// "name":"SU",
// "students": [
// {"name": "Ivan", "age": 20, "spec": "SI"},
// {"name": "Peter", "age": 25, "spec": "SI"}
// ],
// "teachers": [
// {"name": "Dr. Petrov", "age": 45, "spec": ["SI", "IS"], "title": "Professor"}
// ]
// }
// Може и преподавателите да са от тип Student
let s1 = Student::new("Ivan".to_string(), 20, Spec::SI);
let s2 = Student::new("Peter".to_string(), 25, Spec::SI);
let uni = University::new("SU".to_string(), vec![s1], vec![s2]);
println!("{}", uni.to_json());
// {
// "name":"SU",
// "students": [
// {"name": "Ivan", "age": 20, "spec": "SI"}
// ],
// "teachers": [
// {"name": "Peter", "age": 25, "spec": "SI"}
// ]
// }
Забележка: при сравняването ще игнорираме всякакви whitespace символи във върнатия JSON
Забележка2: "университет" е объркващо име, може би трябваше да го преименуваме на курс или нещо друго... Но променяхме задачата в последния момент
Задължително прочетете (или си припомнете): Указания за предаване на домашни
Погрижете се решението ви да се компилира с базовия тест:
// Include the solution source in the same file, so we
// don't have to worry about item visibility.
// Please don't use `include!` in real code, this is a hack
// around the checking system.
include!{ "../src/lib.rs" }
#[test]
fn test_basic() {
let s1 = Student::new("Ivan".to_string(), 20, Spec::SI);
let s2 = Student::new("Peter".to_string(), 25, Spec::SI);
let t1 = Teacher::new(
"Dr. Petrov".to_string(),
45,
vec![Spec::SI, Spec::IS],
Title::Professor,
);
let uni = University::new("SU".to_string(), vec![s1, s2], vec![t1]);
let expected = r#"{
"name":"SU",
"students": [
{"name": "Ivan", "age": 20, "spec": "SI"},
{"name": "Peter", "age": 25, "spec": "SI"}
],
"teachers": [
{"name": "Dr. Petrov", "age": 45, "spec": ["SI", "IS"], "title": "Professor"}
]
}"#;
assert_eq!(uni.to_json().replace(char::is_whitespace, ""), expected.replace(char::is_whitespace, ""));
}
#[test]
fn test_basic2() {
let s1 = Student::new("Ivan".to_string(), 20, Spec::SI);
let s2 = Student::new("Peter".to_string(), 25, Spec::SI);
let uni = University::new("SU".to_string(), vec![s1], vec![s2]);
let expected = r#"{
"name":"SU",
"students": [
{"name": "Ivan", "age": 20, "spec": "SI"}
],
"teachers": [
{"name": "Peter", "age": 25, "spec": "SI"}
]
}"#;
assert_eq!(uni.to_json().replace(char::is_whitespace, ""), expected.replace(char::is_whitespace, ""));
}
