Lavig

EnrollmentsAdd

Apr 13th, 2026
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 7.52 KB | None | 0 0
  1. using System; // Підключення основних системних функцій
  2. using System.Data; // Робота з таблицями даних у пам'яті
  3. using System.Drawing; // Бібліотека для роботи з графікою (кольори, шрифти)
  4. using System.Windows.Forms; // Бібліотека для створення віконних форм
  5. using MySql.Data.MySqlClient; // Драйвер для взаємодії з базою даних MySQL
  6.  
  7. namespace lab8 // Простір імен проекту
  8. {
  9.     public partial class EnrollmentsAdd : Form // Клас форми для реєстрації студента на курс
  10.     {
  11.         string connectionString = "server=localhost;database=lab;uid=root;pwd=;"; // Налаштування підключення до БД
  12.  
  13.         public EnrollmentsAdd() // Конструктор форми
  14.         {
  15.             InitializeComponent(); // Ініціалізація візуальних компонентів вікна
  16.         }
  17.  
  18.         private void EnrollmentsAdd_Load(object sender, EventArgs e) // Подія при відкритті форми
  19.         {
  20.             LoadLists(); // Заповнення списків студентів та курсів
  21.         }
  22.  
  23.         private void LoadLists() // Метод для завантаження даних у випадаючі списки
  24.         {
  25.             try // Блок для обробки можливих помилок при роботі з базою
  26.             {
  27.                 MySqlConnection conn = new MySqlConnection(connectionString); // Створення об'єкта підключення
  28.                 conn.Open(); // Відкриття з'єднання з сервером БД
  29.  
  30.                 string usersQuery = "SELECT id, full_name " +
  31.                     "FROM users " +
  32.                     "WHERE role_id = 3 " + // Фільтр: вибираємо тільки користувачів з роллю "Студент"
  33.                     "AND is_active = 1 " + // Тільки активні облікові записи
  34.                     "ORDER BY full_name ASC"; // Сортування за алфавітом
  35.                 MySqlDataAdapter daUsers = new MySqlDataAdapter(usersQuery, conn); // Адаптер для завантаження користувачів
  36.                 DataTable dtUsers = new DataTable(); // Таблиця в пам'яті для списку студентів
  37.                 daUsers.Fill(dtUsers); // Заповнення таблиці даними з бази
  38.  
  39.                 Student_Input.DataSource = dtUsers; // Прив'язка даних до ComboBox студентів
  40.                 Student_Input.DisplayMember = "full_name"; // Відображення імені студента в списку
  41.                 Student_Input.ValueMember = "id"; // Використання ID як прихованого значення
  42.  
  43.                 string coursesQuery = "SELECT id, title FROM courses WHERE is_active = 1 ORDER BY title ASC"; // Запит на активні курси
  44.                 MySqlDataAdapter daCourses = new MySqlDataAdapter(coursesQuery, conn); // Адаптер для курсів
  45.                 DataTable dtCourses = new DataTable(); // Таблиця в пам'яті для списку курсів
  46.                 daCourses.Fill(dtCourses); // Заповнення таблиці курсами
  47.  
  48.                 Course_Input.DataSource = dtCourses; // Прив'язка даних до ComboBox курсів
  49.                 Course_Input.DisplayMember = "title"; // Відображення назви курсу
  50.                 Course_Input.ValueMember = "id"; // Використання ID курсу як значення
  51.  
  52.                 conn.Close(); // Закриття підключення до бази
  53.             }
  54.             catch (Exception ex) // Обробка виняткових ситуацій
  55.             {
  56.                 MessageBox.Show(ex.Message); // Виведення повідомлення про помилку
  57.             }
  58.         }
  59.  
  60.         private void Save_Click(object sender, EventArgs e) // Обробка натискання кнопки "Зберегти"
  61.         {
  62.             if (Student_Input.SelectedValue == null || Course_Input.SelectedValue == null) // Перевірка, чи вибрані значення
  63.             {
  64.                 MessageBox.Show("Будь ласка, оберіть студента та курс."); // Повідомлення про необхідність вибору
  65.                 return; // Переривання виконання методу
  66.             }
  67.  
  68.             try // Спроба виконати операцію запису в базу
  69.             {
  70.                 MySqlConnection conn = new MySqlConnection(connectionString); // Створення з'єднання
  71.                 conn.Open(); // Відкриття з'єднання
  72.  
  73.                 string checkQuery = "SELECT COUNT(*) FROM enrollments WHERE user_id = @user AND course_id = @course"; // Перевірка на дублікат
  74.                 MySqlCommand checkCmd = new MySqlCommand(checkQuery, conn); // Створення команди перевірки
  75.                 checkCmd.Parameters.AddWithValue("@user", Student_Input.SelectedValue); // Передача ID студента
  76.                 checkCmd.Parameters.AddWithValue("@course", Course_Input.SelectedValue); // Передача ID курсу
  77.  
  78.                 if (Convert.ToInt32(checkCmd.ExecuteScalar()) > 0) // Якщо такий запис уже існує в базі
  79.                 {
  80.                     MessageBox.Show("Цей студент вже записаний на цей курс."); // Попередження про дублікат
  81.                     conn.Close(); // Закриття з'єднання
  82.                     return; // Скасування операції додавання
  83.                 }
  84.  
  85.                 string query = "INSERT INTO enrollments (user_id, course_id, enrollment_date) VALUES (@user, @course, NOW())"; // Запит на додавання
  86.                 MySqlCommand cmd = new MySqlCommand(query, conn); // Створення команди вставки
  87.                 cmd.Parameters.AddWithValue("@user", Student_Input.SelectedValue); // Прив'язка параметра студента
  88.                 cmd.Parameters.AddWithValue("@course", Course_Input.SelectedValue); // Прив'язка параметра курсу
  89.  
  90.                 cmd.ExecuteNonQuery(); // Виконання команди додавання в базу
  91.                 conn.Close(); // Закриття з'єднання
  92.  
  93.                 this.DialogResult = DialogResult.OK; // Встановлення успішного результату для головної форми
  94.                 this.Close(); // Закриття вікна додавання
  95.             }
  96.             catch (Exception ex) // Обробка помилок під час виконання запитів
  97.             {
  98.                 MessageBox.Show("Помилка при записі: " + ex.Message); // Виведення детальної помилки
  99.             }
  100.         }
  101.  
  102.         private void Exit_Click(object sender, EventArgs e) // Обробка натискання кнопки скасування
  103.         {
  104.             this.Close(); // Закриття поточної форми
  105.         }
  106.     }
  107. }
Advertisement
Add Comment
Please, Sign In to add comment