/
polina_2025
/
labruby
Обзор
Документация
Войти
/
polina_2025
/
labruby
Код
Запросы
4
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
lab2
lab2.rb
200 строк
5 KB
Polina_2025
лабараторная работа 2
18 май 2026, 16:25
18 май 2026, 16:25
0c14113
Код
Авторство
О чём код?
MIN_NAME_LENGTH = 2 MAX_NAME_LENGTH = 50 MIN_AGE = 1 MAX_AGE = 119 def valid_name?(name) return false if name.nil? || name.strip.empty? return false if name.length < MIN_NAME_LENGTH || name.length > MAX_NAME_LENGTH name.match?(/\A[а-яА-Яa-zA-Z\s\-]+\z/) end def valid_age?(age) age.is_a?(Integer) && age >= MIN_AGE && age <= MAX_AGE end def valid_email?(email) return false if email.nil? || email.empty? email.include?('@') && email.include?('.') && !email.start_with?('@') && !email.end_with?('@') end def valid_gender?(gender) gender == :male || gender == :female end def valid_group?(group) return false if group.nil? || group.strip.empty? group.length >= 2 && group.length <= 20 end def input_name loop do print "Имя (от #{MIN_NAME_LENGTH} до #{MAX_NAME_LENGTH} символов, только буквы, пробелы и дефисы): " name = gets.chomp.strip if valid_name?(name) return name else puts "Ошибка: имя должно содержать от #{MIN_NAME_LENGTH} до #{MAX_NAME_LENGTH} символов" puts " и состоять только из букв, пробелов и дефисов" end end end def input_age loop do print "Возраст (от #{MIN_AGE} до #{MAX_AGE} лет): " age = gets.chomp.to_i if valid_age?(age) return age else puts "Ошибка: возраст должен быть целым числом от #{MIN_AGE} до #{MAX_AGE}" end end end def input_gender loop do print "Пол (male/female): " gender_input = gets.chomp.downcase.strip gender = gender_input.to_sym if valid_gender?(gender) return gender else puts "Ошибка: пол должен быть 'male' или 'female'" end end end def input_group loop do print "Группа (от 2 до 20 символов): " group = gets.chomp.strip if valid_group?(group) return group else puts "Ошибка: группа должна содержать от 2 до 20 символов" end end end def input_email loop do print "Электронная почта (должна содержать @ и .): " email = gets.chomp.strip if valid_email?(email) return email else puts "Ошибка: email должен содержать символы '@' и '.'" end end end def input_skills skills = {} print "Сколько навыков хотите добавить? (0 или Enter - пропустить): " skills_count_input = gets.chomp.strip if skills_count_input.empty? || skills_count_input == "0" puts " Навыки не добавлены" return skills end skills_count = skills_count_input.to_i if skills_count <= 0 puts " Навыки не добавлены" return skills end puts " Введите #{skills_count} навык(а/ов):" (1..skills_count).each do |skill_number| puts " Навык #{skill_number}:" print " Название: " skill_name_input = gets.chomp.strip skill_name = if skill_name_input.empty? "skill_#{skill_number}".to_sym else skill_name_input.to_sym end print " Уровень (описание): " skill_level = gets.chomp.strip skill_level = "не указан" if skill_level.empty? skills[skill_name] = skill_level end skills end def format_skills(skills) return "не указаны" if skills.nil? || skills.empty? skills.map { |name, level| "#{name}: #{level}" }.join(", ") end def format_gender(gender) gender == :male ? "мужской" : "женский" end def main print "Сколько студентов добавить? " count_input = gets.chomp student_count = count_input.to_i if student_count <= 0 puts "Ошибка: количество студентов должно быть положительным числом" return end students = [] (1..student_count).each do |student_number| puts "\n" + "-" * 50 puts "Ввод данных студента №#{student_number} из #{student_count}" puts "-" * 50 name = input_name age = input_age gender = input_gender group = input_group email = input_email skills = input_skills student = { name: name, age: age, gender: gender, group: group, email: email, skills: skills } students << student puts "✓ Студент '#{name}' успешно добавлен" end puts "СПИСОК СТУДЕНТОВ" students.each_with_index do |student, index| puts "#{index + 1}. [#{student[:name]}]: #{student[:age]} лет, #{format_gender(student[:gender])}, #{student[:email]}" puts " Группа: #{student[:group]}" puts " Навыки: #{format_skills(student[:skills])}" end end main if __FILE__ == $0