Дипломная работа: Автоматизация процесса ведения информационной базы о должностях и вакансиях с указанием требований к уровню знаний и навыков кандидатов для ПАО Тостелеком

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам
122
private void tsbtnDeleteQuestion_Click(object sender, EventArgs e)
{
if (_CurrentQuestion != null)
{
// Номер удаляемого вопроса
int n = _CurrentQuestion.Number;
// Подтверждение удаления пользователем
if (MessageBox.Show("Подтверждаете удаление этого вопроса?", "Удалить
вопрос ?",
MessageBoxButtons.YesNo, MessageBoxIcon.Question) ==
DialogResult.Yes)
{
// Удаление вопроса
_Questions.Remove(_CurrentQuestion);
// Новое количество вопросов
int qc = _Questions.Count;
// Перенумеровка вопросов (чтобы были по порядку)
if (qc > 0)
for (int i = 0; i < qc; i++)
_Questions[i].ReAssignNumber(i + 1);
// Переход к следующему за удаленным вопросу (если есть)
if (n <= qc)
_CurrentQuestion = _Questions[n - 1];
// Переход к предыдущемы перед удаленным вопросу (если есть)
else if (n > 1)
_CurrentQuestion = _Questions[n - 2];
// Иначе - вопросов не осталось
else
_CurrentQuestion = null;
// Показать вопрос
ShowCurrentQuestion();
}
}
}
#endregion
/// -----------------------------------------------------
/// -----------------------------------------------------
/// ОБРАБОТКА КОМАНД ПОЛЬЗОВАТЕЛЯ : ОТВЕТЫ
/// -----------------------------------------------------
#region "CommandsAnswers"
/// <summary>
/// Добавить вариант ответа
/// </summary>
/// <param name="sender">Объект, вызвавший событие</param>
/// <param name="e">Параметры события</param>
private void tstrbtnAddAnswer_Click(object sender, EventArgs e)
{
// Количество вариантов ответа на текущий вопрос
int q_cnt = dgvData.Rows.Count;
// Создание нового варианта ответа
Entities.Answer na = new Entities.Answer(_test.ID, _CurrentQuestion.Number,
q_cnt + 1);
// Добавление варианта ответа в вопрос
_CurrentQuestion.Answers.Add(na);
// Добавление варианта ответа в таблицу
dgvData.Rows.Add(new object[] { tstrlblAnswerIcon.Image, na.Text, na.Score,
na.IsTrue });
}
/// <summary>
/// Удалить вариант ответа
/// </summary>
/// <param name="sender">Объект, вызвавший событие</param>
123
/// <param name="e">Параметры события</param>
private void tstrbtnDeleteAnswer_Click(object sender, EventArgs e)
{
if (dgvData.SelectedRows.Count > 0)
{
// Удаление строки из таблицы ответов
dgvData.Rows.Remove(dgvData.SelectedRows[0]);
// Сохраняем данные вопроса
_CurrentQuestion.Edit(QuestionAnswers, _QuestionText);
// Информация по тесту
_QMaxScore = _CurrentQuestion.MaxScore;
_TMaxScore = _MaxScoresForTest;
}
}
/// <summary>
/// Редактирование варианта ответа
/// </summary>
/// <param name="sender">Объект, вызвавший событие</param>
/// <param name="e">Параметры события</param>
private void dgvData_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
// Если редактировалась колонка "Балл"
if (e.ColumnIndex == 2)
{
// Корректировка значения (при необходимости)
int val = 0;
Int32.TryParse(Convert.ToString(dgvData[e.ColumnIndex,
e.RowIndex].Value), out val);
dgvData[e.ColumnIndex, e.RowIndex].Value = val;
// Сохраняем данные вопроса
_CurrentQuestion.Edit(QuestionAnswers, _QuestionText);
// Информация по тесту
_QMaxScore = _CurrentQuestion.MaxScore;
_TMaxScore = _MaxScoresForTest;
}
}
/// <summary>
/// Применение данных при выборе правильного варианта ответа
/// </summary>
/// <param name="sender">Объект, вызвавший событие</param>
/// <param name="e">Параметры события</param>
private void dgvData_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
// Колонка выбора варианта ответа
if (e.ColumnIndex == 3)
{
dgvData.CommitEdit(DataGridViewDataErrorContexts.Commit);
}
}
#endregion
/// -----------------------------------------------------
/// ОБРАБОТКА КОМАНД ПОЛЬЗОВАТЕЛЯ : МЕНЮ ДИАЛОГА
/// -----------------------------------------------------
#region "CommandsDialog"
/// <summary>
/// Сохранить тест в БД
/// </summary>
/// <param name="sender">Объект, вызвавший событие</param>
/// <param name="e">Параметры события</param>
private void tsbtnSaveTest_Click(object sender, EventArgs e)
{
// Не указаны вопросы
124
if (_Questions.Count < 1)
{
MessageBox.Show("В тесте не создано ни одного вопроса!", "Действие
невозможно",
MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
return;
}
// Не заполнено название теста
if (txtQuestionText.Text.Trim() == string.Empty)
{
MessageBox.Show("Не заполнено название теста!", "Действие невозможно",
MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
return;
}
// Сохранение текущего вопроса
if (!SaveCurrentQuestion()) return;
// Закрыть и подтвердить диалог
DialogResult = DialogResult.OK;
Close();
}
/// <summary>
/// Восстановить исходный тест
/// </summary>
/// <param name="sender">Объект, вызвавший событие</param>
/// <param name="e">Параметры события</param>
private void tsbtnRestoreTest_Click(object sender, EventArgs e)
{
// Реинициализация теста
_test = new Entities.Test(_test.ID);
// Подготовка конструктора тестов
InitTestConstructor();
}
/// <summary>
/// Отмена диалога
/// </summary>
/// <param name="sender">Объект, вызвавший событие</param>
/// <param name="e">Параметры события</param>
private void tsbtnCancel_Click(object sender, EventArgs e)
{
DialogResult = DialogResult.Cancel;
Close();
}
#endregion
}
}
Программный код глобального модуля тестирования
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Collections.Generic;
namespace VPRT
{
/// <summary>
/// Диалог конструктора теста
/// </summary>
public partial class TestingForm : Form
{
/// <summary>
/// Экземпляр теста
125
/// </summary>
Entities.Test _test = null;
/// <summary>
/// Экземпляр теста
/// </summary>
Entities.Post TesterPost = null;
/// <summary>
/// Имя тестируемого
/// </summary>
string TesterName = null;
/// <summary>
/// Телефон тестируемого
/// </summary>
string TesterPhone = null;
/// <summary>
/// Конструктор
/// </summary>
/// <param name="__name_">Имя тестируемого</param>
/// <param name="__phone_">Телефон тестируемого</param>
/// <param name="__post_">Должность, на которую тестировался</param>
public TestingForm(string __name_, string __phone_, Entities.Post __post_ = null)
{
// Создание и инициализация компонентов
InitializeComponent();
// Соотнесение начальных значений
_test = __post_?.Posttest;
TesterPost = __post_;
TesterName = __name_;
TesterPhone = __phone_;
// Установка начальных параметров
_Name = _test.Name;
_TimeElapsed = _test.TimeLimit * 60;
tstrpbrTestProgressBar.Maximum = _test.Questions.Count;
lblStudentData.Text = $"Тестируется: {TesterName}; ({TesterPhone})";
// Заголовок окна
Text = $"[Тестирование] : {TesterName} -> /{_test.Name}/";
// Создание словаря ответов
Answers = new Dictionary<int, string>();
// Активировать таймер
tmrTimerTest.Enabled = true;
// Перейти к первому вопросу
ShowQuestion(1);
}
/// <summary>
/// Текущий вопрос
/// </summary>
Entities.Question _CurrentQuestion;
/// <summary>
/// Количество секунд до завершения теста
/// </summary>
private int _timeElapsed = 0;
/// <summary>
/// Показать вопрос
/// </summary>
/// <param name="__number_">Номер вопроса</param>
private void ShowQuestion(int __number_)
{
// Строка статуса теста
_QuestionNumber = __number_;
126
// Текущий вопрос теста
_CurrentQuestion = _test.Questions[__number_ - 1];
// Вывод вопроса
_QuestionText = _CurrentQuestion.Text;
// Вывод вариантов ответа
dgvAnswers.Rows.Clear();
foreach (Entities.Answer a in _CurrentQuestion.Answers)
{
dgvAnswers.Rows.Add(new object[] { picAnswerIcon.Image, a.Number, false,
a.Text, a.Score, a.IsTrue });
}
}
/// <summary>
/// Таймер тестирования
/// </summary>
/// <param name="sender">Объект, вызвавший событие</param>
/// <param name="e">Параметры события</param>
private void tmrTimerTest_Tick(object sender, EventArgs e)
{
// Обновление даты и времени
tstrlblDateTime.Text = DateTime.Now.ToLongDateString() + " " +
DateTime.Now.ToLongTimeString();
// Обновление таймера
_TimeElapsed--;
// Если время вышло
if (_TimeElapsed <= 0)
{
// Остановить таймер
tmrTimerTest.Enabled = false;
// Сообщение пользователю
MessageBox.Show("К сожалению, отведенное время на тестирование истекло!
Тест будет завершен." + Environment.NewLine +
"________________________________" + Environment.NewLine +
"Нажмите \"OK\", чтобы просмотреть свой результат.",
"Время вышло", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
// Сохранение результатов тестирования
SaveTestResults(true);
}
}
/// -----------------------------------------------------
/// ДОСТУП К СВОЙСТВАМ ОБЪЕКТОВ ИНТЕРФЕЙСА
/// -----------------------------------------------------
#region "Properties"
/// <summary>
/// Наименование теста
/// </summary>
private string _Name { set { lblTestName.Text = $"Название теста: {value}"; } }
/// <summary>
/// Текст вопроса
/// </summary>
private string _QuestionText { set { lblQuestionText.Text = value; } }
/// <summary>
/// Номер вопроса
/// </summary>
private int _QuestionNumber { set { tstrlblCurrentQuestion.Text = $"Вопрос №
{value} из {_test.Questions.Count}"; } }
/// <summary>
/// Ограничение по времени
/// </summary>
private int _TimeElapsed
Источник: https://baza.diplomsite.ru/previewfile/2061