refactor: clean up comments in student list classes for clarity and consistency

lab4
Artem-Darius Weber 2 months ago
parent da53a9c4ae
commit 82a2b663a8

@ -149,6 +149,7 @@ classDiagram
BinarySearchTree o-- Node
Node o-- Student
StudentsList o-- Student
StudentsListBase o-- Student
StudentsListDB o-- DatabaseConnection
DatabaseConnection <.. Singleton

@ -12,24 +12,23 @@ class StudentsList
@students = []
end
# Загрузка студентов через выбранную стратегию.
# Загрузка студентов через выбранную стратегию
def load
@students = @persistence_strategy.load(@filename)
self
end
# Сохранение студентов через выбранную стратегию.
# Сохранение студентов через выбранную стратегию
def save
@persistence_strategy.save(@filename, @students)
self
end
# Получить объект Student по ID.
def get_student_by_id(id)
@students.find { |s| s.id.to_s == id.to_s }
end
# Получить список из k студентов (страница n) в виде объекта DataList.
# Получить список из k студентов (страница n) в виде объекта DataList
def get_k_n_student_short_list(k, n, data_list = nil)
start_index = (n - 1) * k
sorted_students = @students.sort_by { |s| s.surname_initials }
@ -48,12 +47,11 @@ class StudentsList
end
end
# Сортировка студентов по фамилии и инициалам.
# Сортировка студентов по фамилии и инициалам
def sort_students!
@students.sort_by! { |s| s.surname_initials }
end
# Добавление студента с автоматическим присвоением нового ID.
def add_student(student)
new_id = if @students.empty?
1
@ -66,7 +64,6 @@ class StudentsList
student
end
# Обновление студента по ID.
def update_student_by_id(id, new_student)
index = @students.find_index { |s| s.id.to_s == id.to_s }
if index
@ -78,14 +75,12 @@ class StudentsList
end
end
# Удаление студента по ID.
def delete_student_by_id(id)
initial_count = @students.size
@students.reject! { |s| s.id.to_s == id.to_s }
initial_count != @students.size
end
# Получить количество студентов.
def get_student_short_count
@students.size
end

@ -11,22 +11,21 @@ class StudentsListBase
@students = []
end
# Абстрактный метод для загрузки данных.
# Абстрактный метод
def load_from_file
raise NotImplementedError, "Метод load_from_file должен быть реализован в подклассе"
end
# Абстрактный метод для сохранения данных.
# Абстрактный метод
def save_to_file
raise NotImplementedError, "Метод save_to_file должен быть реализован в подклассе"
end
# Получить объект Student по ID.
def get_student_by_id(id)
@students.find { |s| s.id.to_s == id.to_s }
end
# Получить список из k студентов (страница n) в виде объекта DataList.
# Получить список из k студентов (страница n) в виде объекта DataList
def get_k_n_student_short_list(k, n, data_list = nil)
start_index = (n - 1) * k
sorted_students = @students.sort_by { |s| s.surname_initials }
@ -45,12 +44,11 @@ class StudentsListBase
end
end
# Сортировать список студентов по ФамилияИнициалы.
# Сортировать список студентов по ФамилияИнициалы
def sort_students!
@students.sort_by! { |s| s.surname_initials }
end
# Добавить объект Student в список (формирование нового ID).
def add_student(student)
new_id = if @students.empty?
1
@ -63,7 +61,6 @@ class StudentsListBase
student
end
# Обновить студента по ID.
def update_student_by_id(id, new_student)
index = @students.find_index { |s| s.id.to_s == id.to_s }
if index
@ -75,14 +72,12 @@ class StudentsListBase
end
end
# Удалить студента по ID.
def delete_student_by_id(id)
initial_count = @students.size
@students.reject! { |s| s.id.to_s == id.to_s }
initial_count != @students.size
end
# Получить количество студентов.
def get_student_short_count
@students.size
end

@ -9,14 +9,12 @@ class StudentsListDB
@db = DatabaseConnection.instance
end
# Получить объект Student по ID.
def get_student_by_id(id)
result = @db.query("SELECT * FROM student WHERE id = #{id} LIMIT 1")
row = result.first
row ? row_to_student(row) : nil
end
# Получить список из k студентов (страница n) в виде объекта DataList.
def get_k_n_student_short_list(k, n)
offset = (n - 1) * k
results = @db.query("SELECT * FROM student ORDER BY surname, name, patronymic LIMIT #{k} OFFSET #{offset}")
@ -24,7 +22,6 @@ class StudentsListDB
DataListStudentShort.new(student_shorts)
end
# Добавить объект Student в БД (ID формируется автоматически).
def add_student(student)
sql = <<~SQL
INSERT INTO student (git, surname, name, patronymic, birth_date, phone, telegram, email)
@ -46,7 +43,6 @@ class StudentsListDB
student
end
# Обновить студента по ID.
def update_student_by_id(id, new_student)
sql = <<~SQL
UPDATE student SET
@ -65,13 +61,11 @@ class StudentsListDB
@db.client.affected_rows > 0
end
# Удалить студента по ID.
def delete_student_by_id(id)
@db.query("DELETE FROM student WHERE id = #{id}")
@db.client.affected_rows > 0
end
# Получить количество студентов.
def get_student_short_count
result = @db.query("SELECT COUNT(*) as count FROM student")
result.first['count']
@ -79,7 +73,8 @@ class StudentsListDB
private
# Преобразование строки результата в объект Student.
# Преобразование строки результата в объект Student
def row_to_student(row)
Student.new(
id: row['id'].to_s,
@ -94,7 +89,7 @@ class StudentsListDB
)
end
# Простой метод для экранирования строк (на практике лучше использовать подготовленные выражения).
# Метод для экранирования строк
def escape(value)
@db.client.escape(value.to_s)
end

@ -3,11 +3,11 @@ require_relative '../providers/students_list_db'
students_db = StudentsListDB.new
# Пример: получение студента с ID = 1
# получение студента с ID = 1
student = students_db.get_student_by_id(1)
puts student ? student.get_info : "Студент не найден"
# Пример: получение второй страницы по 2 записи (если записей достаточно)
# получение второй страницы по 2 записи (если записей достаточно)
data_list = students_db.get_k_n_student_short_list(2, 2)
puts "Количество студентов: #{students_db.get_student_short_count}"
data_table = data_list.get_data

Loading…
Cancel
Save