}
public JsonResult GetCompetencyDescription(int id)
{
var comp = db.Competencies.Find(id);
return Json(new {comp.Description});
}
public JsonResult GetFgosDescription(int id)
{
var fgos = db.Fgoses.Find(id);
return Json(new { fgos.Description });
}
protected override void Dispose(bool disposing)
{
db.Dispose();
base.Dispose(disposing);
}
}
}
Б3. Модуль формирования отчетов
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Fist.StudentKnowledge.Models;
namespace Fist.StudentKnowledge.Controllers
{
[Authorize(Roles = "Secretary, Heads")]
public class ReportController : BaseController
{
public ActionResult Index()
{
return View();
}
public ActionResult Progress(int facultyId = 0, int groupId = 0, int studentId = 0)
{
ViewBag.FacultyId = new SelectList(DbContext.Faculties, "Id", "Title", facultyId);
ViewBag.GroupId = new SelectList(DbContext.Groups.Where(g => g.FacultyId == facultyId), "Id", "Title", groupId);
ViewBag.StudentId = new SelectList(DbContext.Students.Where(s => s.GroupId == groupId), "Id", "Fio", studentId);
ViewBag.ReportType = ReportType.None;
if (facultyId != 0 && groupId == 0 && studentId == 0)
{
//Отчет по факультету
var semesters = DbContext.Semesters.OrderBy(s => s.StartDate).ToList();
var groups = DbContext.Groups.Where(g => g.FacultyId == facultyId).ToList();
ViewBag.ReportType = ReportType.Faculty;
ViewBag.Semesters = semesters;
ViewBag.Groups = groups;
var reportItems = new List<ReportItem>();
foreach (Group group in groups)
{
foreach (Semester semester in semesters)
{
var assessments = DbContext.Assessments.Where(a => a.SemesterId == semester.Id && a.Student.GroupId == group.Id).ToList();
var mark = 0d;
if (assessments.Count > 0)
{
mark = (double)assessments.ToList().Sum(a => a.Mark) / assessments.Count;
}
reportItems.Add(new ReportItem
{
GroupId = group.Id,
SemesterId = semester.Id,
Mark = Math.Round(mark, 2),
NoMark = !DbContext.SemesterSubjects.Any(s => s.GroupId == group.Id && s.SemesterId == semester.Id)
});
}
}
ViewBag.ReportItems = reportItems;
}
else if (facultyId != 0 && groupId != 0 && studentId == 0)
{
//Отчет по группе
ViewBag.ReportType = ReportType.Group;
var semesters = DbContext.Semesters.Where(s => s.GroupSubjects.Any(g => g.GroupId == groupId)).OrderBy(s => s.StartDate).ToList();
var students = DbContext.Students.Where(s => s.GroupId == groupId).ToList();
ViewBag.Semesters = semesters;
ViewBag.Students = students;
var reportItems = new List<ReportItem>();
foreach (Student student in students)
{
foreach (Semester semester in semesters)
{
var assessments = DbContext.Assessments.Where(a => a.SemesterId == semester.Id && a.StudentId == student.Id).ToList();
var mark = 0d;
if (assessments.Count > 0)
{
mark = (double)assessments.ToList().Sum(a => a.Mark) / assessments.Count;
}
reportItems.Add(new ReportItem
{
StudentId = student.Id,
SemesterId = semester.Id,
Mark = Math.Round(mark, 2)
});
}
}
ViewBag.GroupName = DbContext.Groups.Find(groupId).Title;
ViewBag.ReportItems = reportItems;
}
else if (facultyId != 0 && groupId != 0 && studentId != 0)
{
//Отчет по студенту
ViewBag.ReportType = ReportType.Student;
var semesters = DbContext.Semesters.Where(s => s.GroupSubjects.Any(g => g.GroupId == groupId)).OrderBy(s => s.StartDate).ToList();
var subjects = DbContext.Subjects.Where(s => s.GroupSubjects.Any(g => g.GroupId == groupId)).ToList();
ViewBag.Semesters = semesters;
ViewBag.Subjects = subjects;
var reportItems = new List<ReportItem>();
foreach (Subject subject in subjects)
{
foreach (Semester semester in semesters)
{
var assessment = DbContext.Assessments.FirstOrDefault(a => a.SemesterId == semester.Id && a.SubjectId == subject.Id && a.StudentId == studentId);
var mark = 0;
if (assessment != null)
{
mark = assessment.Mark;
}
var subjectsInSemesters = DbContext.SemesterSubjects.Where(s => s.GroupId == groupId && s.SubjectId == subject.Id).OrderByDescending(s => s.Semester.StartDate).ToList();
reportItems.Add(new ReportItem
{
SubjectId = subject.Id,
SemesterId = semester.Id,
Mark = mark,
IsLast = subjectsInSemesters.Count > 0 && subjectsInSemesters.First().SemesterId == semester.Id,
NoMark = !DbContext.SemesterSubjects.Any(s => s.GroupId == groupId && s.SubjectId == subject.Id && s.SemesterId == semester.Id)
});
}
}
var student = DbContext.Students.FirstOrDefault(s => s.Id == studentId);
if (student != null)
ViewBag.StudentFio = student.Fio;
ViewBag.ReportItems = reportItems;
}
return View();
}
public ActionResult Knowledge(int facultyId = 0, int groupId = 0, int studentId = 0)
{
ViewBag.FacultyId = new SelectList(DbContext.Faculties, "Id", "Title", facultyId);
ViewBag.GroupId = new SelectList(DbContext.Groups.Where(g => g.FacultyId == facultyId), "Id", "Title", groupId);
ViewBag.StudentId = new SelectList(DbContext.Students.Where(s => s.GroupId == groupId), "Id", "Fio", studentId);
ViewBag.ReportType = ReportType.None;
if (facultyId != 0 && groupId == 0 && studentId == 0)
{
//Отчет по факультету
var fgoses = DbContext.Fgoses.ToList();
var groups = DbContext.Groups.Where(g => g.FacultyId == facultyId).ToList();
ViewBag.ReportType = ReportType.Faculty;
ViewBag.Fgoses = fgoses;
ViewBag.Groups = groups;
var reportItems = new List<ReportItem>();
foreach (Group group in groups)
{
foreach (Fgos fgos in fgoses)
{
var assessments = DbContext.FgosAssessments.Where(a => a.Student.GroupId == group.Id && a.FgosId == fgos.Id).ToList();
var mark = 0d;
if (assessments.Count > 0)
{
mark = assessments.ToList().Sum(a => a.Mark) / group.Students.Count;
}
reportItems.Add(new ReportItem
{
GroupId = group.Id,
SemesterId = fgos.Id,
Mark = Math.Round(mark, 2)
});
}
}
ViewBag.ReportItems = reportItems;
}
else if (facultyId != 0 && groupId != 0 && studentId == 0)
{
//Отчет по группе
ViewBag.ReportType = ReportType.Group;
var fgoses = DbContext.Fgoses.ToList();
var students = DbContext.Students.Where(s => s.GroupId == groupId).ToList();
ViewBag.Fgoses = fgoses;
ViewBag.Students = students;
var reportItems = new List<ReportItem>();
foreach (Student student in students)
{
foreach (Fgos fgos in fgoses)
{
var assessments = DbContext.FgosAssessments.Where(a => a.FgosId == fgos.Id && a.StudentId == student.Id).ToList();
var mark = 0d;
if (assessments.Count > 0)
{
mark = assessments.ToList().Sum(a => a.Mark);
}
reportItems.Add(new ReportItem
{
StudentId = student.Id,
SemesterId = fgos.Id,
Mark = Math.Round(mark, 2)
});
}
}
ViewBag.GroupName = DbContext.Groups.Find(groupId).Title;
ViewBag.ReportItems = reportItems;
}
else if (facultyId != 0 && groupId != 0 && studentId != 0)
{
//Отчет по студенту
ViewBag.ReportType = ReportType.Student;
var fgoses = DbContext.Fgoses.ToList();
var subjects = DbContext.Subjects.Where(s => s.GroupSubjects.Any(g => g.GroupId == groupId)).ToList();
ViewBag.Fgoses = fgoses;
ViewBag.Subjects = subjects;
var reportItems = new List<ReportItem>();
foreach (Subject subject in subjects)
{
foreach (Fgos fgos in fgoses)
{
var assessment = DbContext.FgosAssessments.FirstOrDefault(a => a.FgosId == fgos.Id && a.SubjectId == subject.Id && a.StudentId == studentId);
var mark = 0d;
if (assessment != null)
{
mark = assessment.Mark;
}
reportItems.Add(new ReportItem
{
SubjectId = subject.Id,
SemesterId = fgos.Id,
Mark = Math.Round(mark, 2),
NoMark = assessment == null
});
}
}
var student = DbContext.Students.FirstOrDefault(s => s.Id == studentId);
if (student != null)
ViewBag.StudentFio = student.Fio;
ViewBag.ReportItems = reportItems;
}
return View();
}
public ActionResult Competency(int facultyId = 0, int groupId = 0, int studentId = 0)
{
ViewBag.FacultyId = new SelectList(DbContext.Faculties, "Id", "Title", facultyId);
ViewBag.GroupId = new SelectList(DbContext.Groups.Where(g => g.FacultyId == facultyId), "Id", "Title", groupId);
ViewBag.StudentId = new SelectList(DbContext.Students.Where(s => s.GroupId == groupId), "Id", "Fio", studentId);
ViewBag.ReportType = ReportType.None;
if (facultyId != 0 && groupId == 0 && studentId == 0)
{
//Отчет по факультету
var competensies = DbContext.Competencies.ToList();
var groups = DbContext.Groups.Where(g => g.FacultyId == facultyId).ToList();
ViewBag.ReportType = ReportType.Faculty;
ViewBag.Competencies = competensies;
ViewBag.Groups = groups;
var reportItems = new List<ReportItem>();
foreach (Group group in groups)
{
foreach (Competence competence in competensies)
{
var assessments = DbContext.CompetenceAssessments.Where(a => a.Student.GroupId == group.Id && a.CompetenceId == competence.Id).ToList();
var mark = 0d;
if (assessments.Count > 0)
{
mark = assessments.ToList().Sum(a => a.Mark)/group.Students.Count;
}
reportItems.Add(new ReportItem
{
GroupId = group.Id,
SemesterId = competence.Id,
Mark = Math.Round(mark, 2)
});
}
}
ViewBag.ReportItems = reportItems;
}
else if (facultyId != 0 && groupId != 0 && studentId == 0)
{
//Отчет по группе
ViewBag.ReportType = ReportType.Group;
var competencies = DbContext.Competencies.ToList();
var students = DbContext.Students.Where(s => s.GroupId == groupId).ToList();
ViewBag.Competencies = competencies;
ViewBag.Students = students;
var reportItems = new List<ReportItem>();
foreach (Student student in students)
{
foreach (Competence competence in competencies)
{
var assessments = DbContext.CompetenceAssessments.Where(a => a.CompetenceId == competence.Id && a.StudentId == student.Id).ToList();
var mark = 0d;
if (assessments.Count > 0)
{
mark = assessments.ToList().Sum(a => a.Mark);
}
reportItems.Add(new ReportItem
{
StudentId = student.Id,
SemesterId = competence.Id,
Mark = Math.Round(mark, 2)
});
}
}
ViewBag.GroupName = DbContext.Groups.Find(groupId).Title;
ViewBag.ReportItems = reportItems;
}
else if (facultyId != 0 && groupId != 0 && studentId != 0)
{
//Отчет по студенту
ViewBag.ReportType = ReportType.Student;
var competencies = DbContext.Competencies.ToList();
var subjects = DbContext.Subjects.Where(s => s.GroupSubjects.Any(g => g.GroupId == groupId)).ToList();
ViewBag.Competencies = competencies;
ViewBag.Subjects = subjects;
var reportItems = new List<ReportItem>();
foreach (Subject subject in subjects)
{
foreach (Competence competence in competencies)
{
var assessment = DbContext.CompetenceAssessments.FirstOrDefault(a => a.CompetenceId == competence.Id && a.SubjectId == subject.Id && a.StudentId == studentId);
var mark = 0d;
if (assessment != null)
{
mark = assessment.Mark;
}
reportItems.Add(new ReportItem
{
SubjectId = subject.Id,
SemesterId = competence.Id,
Mark = Math.Round(mark, 2),
NoMark = assessment == null
});
}
}
var student = DbContext.Students.FirstOrDefault(s => s.Id == studentId);
if (student != null)
ViewBag.StudentFio = student.Fio;
ViewBag.ReportItems = reportItems;
}
return View();
ПРИЛОЖЕНИЕ В
Полный набор диаграмм проекта
В.1 Полный набор диаграмм проекта
Рисунок В.2 - Диаграмма вариантов использования
Рисунок В.2 - Диаграмма сущностных классов
Рисунок В.3 - Диаграмма классов управления
Рисунок В.4 - Диаграмма граничных классов
Рисунок В.5 - Диаграмма состояний. Работа с приложением
Рисунок В.6 - Диаграмма последовательности
Рис. В.7. Диаграмма компонентов
Рисунок В.8 - Диаграмма развертывания
ПРИЛОЖЕНИЕ Г
Ответ на специальный вопрос по БЖД
Г1. Защитное заземление
Защитное заземление - это преднамеренное электрическое соединение с землей или ее эквивалентом металлических нетоковедущих частей, которые могут оказаться под напряжением (рисунок 3.10).
Защитное заземление эффективно в сетях напряжением до 1000 В с изолированной нейтралью (полюсом). Принцип действия защитного заземления заключается в том, что человек, касающийся корпуса оборудования, находящегося под напряжением за счет короткого замыкания фазы на корпус, оказывается включенным параллельно заземлителю с сопротивлением защитного заземления , имеющим значительно меньшее сопротивление, чем тело человека . В результате большая часть тока замыкания на землю пойдет через заземлитель (рисунок Г.1 )
Рисунок Г.1 - Ход тока
При отсутствии заземлителя весь ток пойдет через тело человека, что может привести к его поражению. Для уменьшения напряжения на заземлителе, сопротивление защитного заземления нормируется. В электроустановках напряжением до 1000 В оно должно быть не более 4 Ом. Значение зависит также от мощности источника питания, удельного сопротивления грунта и эксплуатируемого оборудования. Для заземления используют искусственные и естественные заземлители. Естественные заземлители - это находящиеся в соприкосновении с землей электропроводящие металлические конструкции и коммуникации зданий и сооружений, за исключением взрыво- и пожаро-опасных (нефтепроводы и др.) Использование протяженных и разветвленных заземлителей позволяет снизить и выравнять потенциалы. Искусственные заземлители представляют собой совокупность собственно заземлителей и заземляющих проводников, называемыми заземляющим устройством.
Г2. Область применения защитного заземления
- электроустановки напряжением до 1 кВ в трехфазных трехпроводных сетях переменного тока с изолированной нейтралью (IT);
- электроустановки напряжением до 1 кВ в однофазных двухпроводных сетях переменного тока изолированных от земли;
- электроустановки напряжением до 1 кВ в двухпроводных сетях постоянного тока с изолированной средней точкой обмоток источника тока (система IT);
- электроустановки в сетях напряжением выше 1 кВ переменного и постоянного тока с любым режимом нейтрали или средней точки обмоток источников тока.
Г3. Принцип действия защитного заземления
Защитное действие заземления основано на двух принципах:
Уменьшение до безопасного значения разности потенциалов между заземляемым проводящим предметом и другими проводящими предметами, имеющими естественное заземление.
Отвод тока утечки при контакте заземляемого проводящего предмета с фазным проводом. В правильно спроектированной системе появление тока утечки приводит к немедленному срабатыванию защитных устройств (устройств защитного отключения -- УЗО).
В системах с глухозаземлённой нейтралью -- инициирование срабатывания предохранителя при попадании фазного потенциала на заземлённую поверхность.
Таким образом, заземление наиболее эффективно только в комплексе с использованием устройств защитного отключения. В этом случае при большинстве нарушений изоляции потенциал на заземлённых предметах не превысит опасных величин. Более того, неисправный участок сети будет отключён в течение очень короткого времени (десятые…сотые доли секунды -- время срабатывания УЗО).