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

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам
103
@foreach (var item in Model)
{
rowNumber++;
<tr data-edit="@Url.Action("Edit", new { id = item.Id })"
data-details="@Url.Action("Edit", new { id = item.Id })"
data-delete="@Url.Action("Delete", new { id = item.Id })"
data-additional="@Url.Action("Index", "Question", new { idTest =
item.Id })">
<td>@rowNumber</td>
<td>@item.Name</td>
@if (item.IsAvailable)
{
<td>Да</td>
}
else
{
<td>Нет</td>
}
</tr>
}
</tbody>
</table>
</div>
@using KCS.Identity.Managers
@inject UserManager UserManager
@using KCS.UI.Web.Models.Test
@model TestModel
@{
ViewData["Title"] = "Создание теста";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2 style="margin-bottom: 0; padding: 5px 10px;">Создание теста</h2>
<div class="card-body" style="margin-left: 0; padding-top: 0;">
<form asp-controller="Test" asp-action="Create" asp-antiforgery="true"
method="post">
<div asp-validation-summary="All" class="text-danger"></div>
104
<input asp-for="IdUser" value="@UserManager.GetUserId(User)"
type="hidden">
<div class="form-group">
<label asp-for="Name"></label>
<input asp-for="Name" class="form-control" />
</div>
<div class="form-group">
<label asp-for="Description"></label>
<textarea asp-for="Description" class="form-control" cols="20"
rows="5"></textarea>
</div>
<div class="form-group">
<label asp-for="TimeLimit"></label>
<span style="display: block; font-size: small;">Если поле пустое, то время
не ограничено</span>
<input asp-for="TimeLimit" class="form-control" type="number" />
</div>
<div class="form-group">
<label asp-for="MaxAttemptsCount"></label>
<input asp-for="MaxAttemptsCount" class="form-control" type="number"
value="1" />
</div>
<div class="form-group">
<input asp-for="IsAvailable" type="checkbox" />
<label asp-for="IsAvailable"></label>
</div>
<div class="form-group">
<input asp-for="IsRandomQuestions" type="checkbox" />
<label asp-for="IsRandomQuestions"></label>
</div>
<div class="form-group">
<input asp-for="IsRandomAnswers" type="checkbox" />
<label asp-for="IsRandomAnswers"></label>
</div>
<div class="form-group">
<input asp-for="IsDisplayResults" type="checkbox" />
105
<label asp-for="IsDisplayResults"></label>
</div>
<div class="form-group">
<button type="submit" class="btn btn-success">Создать</button>
</div>
</form>
</div>
using Microsoft.EntityFrameworkCore;
using KCS.DataAccess.Context;
using KCS.DataAccess.Interfaces;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Linq.Expressions;
namespace KCS.DataAccess.Repositories
{
/// <summary>
/// Реализация интерфейса общего репозитория для работы с сущностями.
/// </summary>
/// <typeparam name="TEntity">Сущность базы.</typeparam>
public class GenericRepository<TEntity> : IGenericRepository<TEntity> where
TEntity : class
{
public GenericRepository(KCSContext kcsContext)
{
this.kcsContext = kcsContext;
dbSet = kcsContext.Set<TEntity>();
}
private readonly KCSContext kcsContext;
private readonly DbSet<TEntity> dbSet;
public async Task<IEnumerable<TEntity>> GetAll()
{
return await dbSet.ToListAsync();
}
public async Task<IEnumerable<TEntity>> Get(Expression<Func<TEntity,
bool>> predicate)
106
{
return await dbSet.Where(predicate).ToListAsync();
}
public async Task<TEntity> FindById(int id)
{
return await dbSet.FindAsync(id);
}
public async Task Create(TEntity item)
{
await dbSet.AddAsync(item);
await kcsContext.SaveChangesAsync();
}
public async Task Update(TEntity item)
{
kcsContext.Entry(item).State = EntityState.Modified;
await kcsContext.SaveChangesAsync();
}
public async Task Delete(TEntity item)
{
dbSet.Remove(item);
await kcsContext.SaveChangesAsync();
}
public async Task DeleteRange(IEnumerable<TEntity> items)
{
dbSet.RemoveRange(items);
await kcsContext.SaveChangesAsync();
}
}
}
using Microsoft.EntityFrameworkCore;
using KCS.DataAccess.Context;
using KCS.DataAccess.Model.Views;
using System.Collections.Generic;
using System.Threading.Tasks;
using KCS.DataAccess.Model.Tables;
using KCS.DataAccess.Model.Common;
using System.Linq;
107
namespace KCS.DataAccess.Repositories
{
/// <summary>
/// Смешанный репозиторий для работы с представлениями базы,
несколькими сущностями или со сложными запросами к сущностям.
/// </summary>
public class MixedRepository
{
public MixedRepository(KCSContext kcsContext) => this.kcsContext =
kcsContext;
private readonly KCSContext kcsContext;
public async Task<List<Question>> GetAvailableQuestionsByIdUserTest(int
idUserTest)
{
return await kcsContext.Questions.FromSqlRaw($@"select * from
KCS.Question q where
q.IsDeleted = 0 and
q.ID_Test = (select ut.ID_Test from
KCS.UserTest ut where ut.ID = {idUserTest}) and
q.ID not in (
select uq.ID_Question from KCS.UserQuestion
uq where
uq.ID_UserTest = {idUserTest}
)
").ToListAsync();
}
public async Task<List<TestResultView>> GetTestResultsByIdAuthorTest(int
idUser)
{
return await kcsContext.TestResultViews.FromSqlRaw($@"select trv.*
from KCS.TestResultView trv
inner join KCS.UserTest ut on trv.IdUserTest =
ut.ID
inner join KCS.Test t on ut.ID_Test = t.ID
where t.ID_User = {idUser}
").ToListAsync();
}
public async Task<List<UserTest>> GetPassedTestsByIdAuthorTest(int idUser)
{
Источник: https://baza.diplomsite.ru/previewfile/2098