/
J33K77
/
cdg_ruby
Обзор
Документация
Войти
/
J33K77
/
cdg_ruby
Код
Запросы
1
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
main.rb
249 строк
8 KB
J33K77
lab4
17 май 2026, 21:32
17 май 2026, 21:32
3200765
Код
Авторство
О чём код?
require_relative 'student_collection' require_relative 'group_file_manager' require_relative 'student_file_manager' def show_main_menu puts "\n" + "=" * 50 puts "ГЛАВНОЕ МЕНЮ" puts "1. Работа с группами" puts "2. Работа со студентами в группе" puts "exit - выход из программы" print "Выберите действие: " end def show_group_menu puts "\n--- МЕНЮ ГРУПП ---" puts "create <name> - создать новую группу" puts "find <id> - найти группу по ID" puts "delete <id> - удалить группу" puts "where <pattern> - найти группы по паттерну имени" puts "index - показать все группы" puts "back - вернуться в главное меню" print "Команда: " end def show_student_menu puts "\n--- МЕНЮ СТУДЕНТОВ ---" puts "index - показать всех студентов в группе" puts "find <id> - найти студента по ID" puts "where name=<value> [age=<value>] [email=<value>] - поиск студентов" puts "update <id> - обновить данные студента" puts "delete <id> - удалить студента" puts "create - добавить нового студента" puts "back - вернуться в главное меню" print "Команда: " end def parse_where_args(args) params = {} args.each do |arg| key, value = arg.split('=') next unless key && value case key when 'name' then params[:name] = value when 'age' then params[:age] = value.to_i when 'email' then params[:email] = value when 'gender' then params[:gender] = value == 'м' ? :male : :female when 'skill' then params[:skill] = value end end params end def collect_student_data_from_input print "Имя: "; name = gets.chomp print "Возраст: "; age = gets.chomp.to_i print "Пол (м/ж): "; gender = gets.chomp == 'м' ? :male : :female print "Email: "; email = gets.chomp skills = {} puts "Введите навыки (оставьте название пустым для завершения):" loop do print "Навык: "; skill_name = gets.chomp break if skill_name.empty? print "Уровень: "; skill_level = gets.chomp break if skill_level.empty? skills[skill_name.to_sym] = skill_level end { name: name, age: age, gender: gender, email: email, skills: skills } end def collect_update_data puts "Введите новые данные (оставьте пустым, чтобы не менять):" print "Имя: "; name = gets.chomp print "Возраст: "; age_str = gets.chomp print "Пол (м/ж): "; gender_str = gets.chomp print "Email: "; email = gets.chomp update_data = {} update_data[:name] = name unless name.empty? update_data[:age] = age_str.to_i unless age_str.empty? update_data[:gender] = gender_str == 'м' ? :male : :female unless gender_str.empty? update_data[:email] = email unless email.empty? update_data end # Основная программа group_manager = GroupManager.new current_group = nil current_student_manager = nil loop do show_main_menu choice = gets.chomp.downcase break if choice == 'exit' case choice when '1' # Работа с группами loop do show_group_menu command_line = gets.chomp break if command_line == 'back' parts = command_line.split cmd = parts[0] args = parts[1..-1] case cmd when 'create' if args.empty? puts "Ошибка: укажите название группы" else group = group_manager.create(args.join(' ')) if group puts "Группа создана: #{group}" else puts "Ошибка: группа с таким именем уже существует или имя недопустимо" end end when 'find' if args.empty? puts "Ошибка: укажите ID группы" else group = group_manager.find(args[0].to_i) puts group || "Группа с ID #{args[0]} не найдена" end when 'delete' if args.empty? puts "Ошибка: укажите ID группы" else group = group_manager.delete(args[0].to_i) puts group ? "Группа удалена: #{group}" : "Группа с ID #{args[0]} не найдена" end when 'where' pattern = args.empty? ? '' : args.join(' ') groups = group_manager.where(pattern) if groups.empty? puts "Группы не найдены" else puts "Найдено групп: #{groups.count}" groups.each { |g| puts " #{g}" } end when 'index' group_manager.index else puts "Неизвестная команда: #{cmd}" end end when '2' # Работа со студентами print "Введите ID группы для работы со студентами: " group_id = gets.chomp.to_i current_group = group_manager.find(group_id) unless current_group puts "Группа с ID #{group_id} не найдена" next end puts "Работа с группой: #{current_group.name}" current_student_manager = StudentFileManager.new(current_group.file_path, group_id) loop do show_student_menu command_line = gets.chomp break if command_line == 'back' parts = command_line.split cmd = parts[0] args = parts[1..-1] case cmd when 'index' students = current_student_manager.index if students.empty? puts "В группе нет студентов" else puts "\nСтуденты группы #{current_group.name}:" puts "-" * 40 students.each { |s| puts s.to_s; puts "-" * 40 } end when 'find' if args.empty? puts "Ошибка: укажите ID студента" else student = current_student_manager.find(args[0].to_i) puts student || "Студент с ID #{args[0]} не найден" end when 'where' params = parse_where_args(args) if params.empty? puts "Ошибка: укажите параметры поиска (например: name=Иван age=20)" else students = current_student_manager.where(params) if students.empty? puts "Студенты не найдены" else puts "\nНайдено студентов: #{students.count}" puts "-" * 40 students.each { |s| puts s.to_s; puts "-" * 40 } end end when 'update' if args.empty? puts "Ошибка: укажите ID студента" else student_id = args[0].to_i update_data = collect_update_data if update_data.empty? puts "Нет данных для обновления" else student = current_student_manager.update(student_id, update_data) puts student ? "Студент обновлён:\n#{student}" : "Студент с ID #{student_id} не найден" end end when 'delete' if args.empty? puts "Ошибка: укажите ID студента" else student = current_student_manager.delete(args[0].to_i) puts student ? "Студент удалён:\n#{student}" : "Студент с ID #{args[0]} не найден" end when 'create' student_data = collect_student_data_from_input student = current_student_manager.create(student_data) puts "✓ Студент создан:\n#{student}" else puts "Неизвестная команда: #{cmd}" end end else puts "Неизвестный выбор. Попробуйте снова." end end puts "\nПрограмма завершена. Данные сохранены в папке 'groups/'"