Дипломная работа: Автоматизация процесса контроля знаний учащихся ГОУ СОШ №31

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам
98
test.QuestionsPerformedCount = test.QuestionsPerformedCount == null ? 0 :
test.QuestionsPerformedCount;
if (availableQuestions.Count() == 0 || (userQuestions.Count() != 0 &&
userQuestions.Count() == test.QuestionsPerformedCount))
return null;
int idQuestion = availableQuestions.OrderBy(item =>
item.Id).FirstOrDefault().Id;
int numberQuestion = userQuestions.Count() + 1;
UserQuestion userQuestion = new UserQuestion
{
IdUserTest = idUserTest,
IdQuestion = idQuestion,
Number = numberQuestion,
};
using (var transaction = storage.BeginTransaction())
{
try
{
await storage.GetRepository<UserQuestion>().Create(userQuestion);
transaction.Commit();
}
catch (Exception ex)
{
transaction.Rollback();
throw new Exception(ex.Message);
}
}
return await GetQuestionAnswerByIdUserQuestion(userQuestion.Id);
}
public async Task<bool> SetAnswerRunTestQuestion(QuestionAnswerDTO
questionAnswerDTO)
{
if(questionAnswerDTO.SelectedAnswer.Count() == 0)
throw new
ArgumentNullException(nameof(questionAnswerDTO.SelectedAnswer));
IEnumerable<Answer> answers = await
storage.GetRepository<Answer>().Get(item =>
item.IdQuestion == questionAnswerDTO.IdQuestion);
99
IEnumerable<int> rightAnswerIds = answers.Where(item => item.IsRight ==
true).Select(item => item.Id);
int CorrectAnswersCount = 0;
foreach (int item in rightAnswerIds)
{
if (questionAnswerDTO.SelectedAnswer.Contains(item))
CorrectAnswersCount++;
}
decimal userQuestionResult = (decimal)CorrectAnswersCount /
rightAnswerIds.Count();
using (var transaction = storage.BeginTransaction())
{
try
{
UserQuestion userQuestion = await
storage.GetRepository<UserQuestion>().FindById(questionAnswerDTO.IdUserQues
tion);
userQuestion.Result = userQuestionResult;
await storage.GetRepository<UserQuestion>().Update(userQuestion);
foreach (int item in questionAnswerDTO.SelectedAnswer)
{
UserAnswer userAnswer = new UserAnswer
{
IdUserQuestion = questionAnswerDTO.IdUserQuestion,
IdAnswer = item
};
await storage.GetRepository<UserAnswer>().Create(userAnswer);
}
transaction.Commit();
}
catch (Exception ex)
{
transaction.Rollback();
throw new Exception(ex.Message);
}
}
return true;
}
100
public async Task<UserTestAdvancedDTO> EndExecuteTest(int idUserTest)
{
IEnumerable<UserQuestion> userQuestions = await
storage.GetRepository<UserQuestion>().Get(item =>
item.IdUserTest == idUserTest);
UserTest userTest = await
storage.GetRepository<UserTest>().FindById(idUserTest);
userTest.EndDate = DateTime.Now;
userTest.PointsСount = (decimal)userQuestions.Sum(item => item.Result) /
userQuestions.Count() * 100;
using (var transaction = storage.BeginTransaction())
{
try
{
await storage.GetRepository<UserTest>().Update(userTest);
transaction.Commit();
}
catch (Exception ex)
{
transaction.Rollback();
throw new Exception(ex.Message);
}
}
Test test = await storage.GetRepository<Test>().FindById(userTest.IdTest);
IEnumerable<UserInfo> usersInfo = await
storage.GetRepository<UserInfo>().Get(item => item.IdUser == userTest.IdUser);
UserInfo userInfo = usersInfo.FirstOrDefault();
UserTestAdvancedDTO userTestAdvancedDTO = new
UserTestAdvancedDTO
{
Id = userTest.Id,
IdTest = userTest.IdTest,
IdUser = userTest.IdUser,
StartDate = userTest.StartDate,
EndDate = userTest.EndDate,
AttemptNumber = userTest.AttemptNumber,
PointsСount = userTest.PointsСount,
TestName = test.Name,
UserFIO = $"{userInfo.Surname} {userInfo.Name}
{userInfo.Patronymic}"
101
};
return userTestAdvancedDTO;
}
private async Task<QuestionAnswerDTO>
GetQuestionAnswerByIdUserQuestion(int idUserQuestion)
{
UserQuestion userQuestion = await
storage.GetRepository<UserQuestion>().FindById(idUserQuestion);
Question question = await
storage.GetRepository<Question>().FindById(userQuestion.IdQuestion);
IEnumerable<Answer> answers = await
storage.GetRepository<Answer>().Get(item =>
item.IdQuestion == userQuestion.IdQuestion &&
item.IsDeleted == false);
return new QuestionAnswerDTO
{
IdUserQuestion = userQuestion.Id,
IdUserTest = userQuestion.IdUserTest,
IdQuestion = userQuestion.IdQuestion,
Number = userQuestion.Number,
QuestionText = question.Text,
CorrectAnswersCount = answers.Where(item => item.IsRight ==
true).Count(),
Answers = mapper.Map<IEnumerable<AnswerDTO>>(answers)
};
}
}
}
@using KCS.UI.Web.Models.Test
@model List<TestViewModel>
@{
ViewData["Title"] = "Тесты";
Layout = "~/Views/Shared/_Layout.cshtml";
int rowNumber = 0;
}
<h2 style="margin-bottom: 0; padding: 5px 10px;">Тесты</h2>
102
<nav class="navbar navbar-light bg-light justify-content-between" style="padding:
5px 10px 5px 0;">
<nav class="nav">
<a id="tool-strip-create-button" class="nav-link tool-strip-button"
style="padding-right: 0;" asp-controller="Test" asp-action="Create">
<i class="fas fa-plus"></i>
<span class="d-sm-inline-block d-none">Создать</span>
</a>
<a id="tool-strip-edit-button" class="nav-link tool-strip-button disabled"
style="padding-right: 0;">
<i class="fas fa-edit"></i>
<span class="d-sm-inline-block d-none">Редактировать</span>
</a>
<a id="tool-strip-details-button" class="nav-link tool-strip-button disabled"
style="padding-right: 0;">
<i class="fas fa-address-card"></i>
<span class="d-sm-inline-block d-none">Подробнее</span>
</a>
<a id="tool-strip-delete-button" class="nav-link tool-strip-button disabled"
style="padding-right: 0;">
<i class="fas fa-minus-circle"></i>
<span class="d-sm-inline-block d-none">Удалить</span>
</a>
<a id="tool-strip-additional-button" class="nav-link tool-strip-button disabled"
style="padding-right: 0;">
<i class="fas fa-bars"></i>
<span class="d-sm-inline-block d-none">Вопросы теста</span>
</a>
</nav>
<div>
<button class="btn"><span class="fas fa-filter"></span>Фильтр</button>
</div>
</nav>
<div id="main-table" class="table">
<table class="table table-bordered table-hover">
<thead class="thead-light">
<tr>
<th scope="col" class="align-middle">#</th>
<th scope="col" class="align-middle" style="width: 65%;">Название</th>
<th scope="col" class="align-middle">Доступен для выполнения</th>
</tr>
</thead>
<tbody>
Источник: https://baza.diplomsite.ru/previewfile/2098