/
polina_2025
/
labruby
Обзор
Документация
Войти
/
polina_2025
/
labruby
Код
Запросы
4
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
lab5
lab4/input_modules.rb
287 строк
7 KB
Polina_2025
lab4
01 июн 2026, 13:18
01 июн 2026, 13:18
88e24a4
Код
Авторство
О чём код?
require_relative 'student' module InputValidator def self.valid_student_count?(count) count.is_a?(Integer) && count > 0 end def self.valid_skill_name?(name) return false if name.empty? return false if name.length > 30 name.match?(/\A[а-яА-Яa-zA-Z0-9\-]+\z/) end def self.valid_skill_level?(level) return false if level.empty? level.length <= 100 end def self.valid_group_name?(name) return false if name.nil? || name.strip.empty? name.length >= 2 && name.length <= 20 end def self.get_skills_count skills_count_input = gets.chomp.strip if skills_count_input.empty? || skills_count_input == "0" return 0 end skills_count = skills_count_input.to_i if skills_count <= 0 puts " Ошибка: количество навыков должно быть положительным числом" return nil end skills_count end end module InputHandler def self.input_name loop do print "Имя (от #{Student::MIN_NAME_LENGTH} до #{Student::MAX_NAME_LENGTH} символов, только буквы, пробелы и дефисы): " name = gets.chomp.strip if name.empty? puts "Ошибка: имя не может быть пустым" next end temp_student = Student.new( id: 0, name: name, age: 1, gender: :male, group: "temp", email: "temp@example.com", skills: {} ) if temp_student.valid_name_length? && temp_student.valid_name_format? return name else temp_student.valid_name_length? temp_student.valid_name_format? temp_student.print_errors end end end def self.input_age loop do print "Возраст (от #{Student::MIN_AGE} до #{Student::MAX_AGE} лет): " age_input = gets.chomp if age_input.empty? puts "Ошибка: возраст не может быть пустым" next end age = age_input.to_i temp_student = Student.new( id: 0, name: "temp", age: age, gender: :male, group: "temp", email: "temp@example.com", skills: {} ) if temp_student.valid_age? return age else temp_student.valid_age? temp_student.print_errors end end end def self.input_gender loop do print "Пол (male/female): " gender_input = gets.chomp.downcase.strip if gender_input.empty? puts "Ошибка: пол не может быть пустым" next end gender = gender_input.to_sym temp_student = Student.new( id: 0, name: "temp", age: 1, gender: gender, group: "temp", email: "temp@example.com", skills: {} ) if temp_student.valid_gender? return gender else temp_student.valid_gender? temp_student.print_errors end end end def self.input_group loop do print "Группа (от 2 до 20 символов): " group = gets.chomp.strip if group.empty? puts "Ошибка: группа не может быть пустой" next end temp_student = Student.new( id: 0, name: "temp", age: 1, gender: :male, group: group, email: "temp@example.com", skills: {} ) if temp_student.valid_group? return group else temp_student.valid_group? temp_student.print_errors end end end def self.input_email loop do print "Электронная почта (должна содержать @ и .): " email = gets.chomp.strip if email.empty? puts "Ошибка: email не может быть пустым" next end temp_student = Student.new( id: 0, name: "temp", age: 1, gender: :male, group: "temp", email: email, skills: {} ) if temp_student.valid_email? return email else temp_student.valid_email? temp_student.print_errors end end end def self.input_skills skills = {} print "Сколько навыков хотите добавить? (0 или Enter - пропустить): " skills_count = InputValidator.get_skills_count if skills_count.nil? return input_skills end if skills_count == 0 puts " Навыки не добавлены" return skills end puts " Введите #{skills_count} навык(а/ов):" (1..skills_count).each do |skill_number| puts " Навык #{skill_number}:" skill_name = input_skill_name skill_level = input_skill_level(skill_name) skills[skill_name] = skill_level end skills end def self.input_group_name_for_create loop do print "Название группы: " name = gets.chomp.strip if InputValidator.valid_group_name?(name) return name else puts "Ошибка: название группы должно содержать от 2 до 20 символов" end end end def self.input_group_id loop do print "ID группы: " input = gets.chomp if input.empty? puts "Ошибка: ID не может быть пустым" next end id = input.to_i if id > 0 return id else puts "Ошибка: ID должен быть положительным числом" end end end def self.input_student_id loop do print "ID студента: " input = gets.chomp if input.empty? puts "Ошибка: ID не может быть пустым" next end id = input.to_i if id > 0 return id else puts "Ошибка: ID должен быть положительным числом" end end end def self.input_search_pattern print "Паттерн для поиска: " gets.chomp.strip end private def self.input_skill_name loop do print " Название: " skill_name_input = gets.chomp.strip if skill_name_input.empty? puts " Ошибка: название навыка не может быть пустым" elsif !InputValidator.valid_skill_name?(skill_name_input) puts " Ошибка: название навыка должно состоять из букв, цифр и дефисов (макс. 30 символов)" else return skill_name_input.to_sym end end end def self.input_skill_level(skill_name) loop do print " Уровень (описание): " skill_level = gets.chomp.strip if skill_level.empty? puts " Ошибка: уровень навыка не может быть пустым" elsif !InputValidator.valid_skill_level?(skill_level) puts " Ошибка: описание уровня не должно превышать 100 символов" else return skill_level end end end end