Помощь в написании студенческих работ
Антистрессовый сервис

Описание сценария приложения

РефератПомощь в написанииУзнать стоимостьмоей работы

У администартора есть права на поиск, удаление, редактирование, создания основных сущностей: Студент, Группа, Преподаватель, Дисциплина, ПреподавательГруппаДисциплина, Семестр. Описывать этот функционал несколько раз — безсмысленно, поэтому расмотрим его подробнее на примере Группы. Изначально преподаватель волен выбрать какие таблицы ему создать, а какие проигнорировать. Таблица журнал… Читать ещё >

Описание сценария приложения (реферат, курсовая, диплом, контрольная)

Общее описание

У нас в приложение 3 вида пользователя: Студент, Администратор, Преподаватель. Для каждого из них функционал разительно отличается.

Преподаватель:

  • · Просматривать и редактировать оценки.
  • · Может выбирать у какой группы и какой предмет введёт, создавая соответствующую связь в бд.
  • · Создавать необходимые ему таблицы с различным видом контроля знаний (журнал, экзамен, зачёт, курсовая работа, практика.

Студент:

  • · Подавать заявку на регистрацию
  • · Просматривать свои оценки.

Администратор:

  • · Удалять/редактировать/создавать основные сущности: Студент, Группа, Преподаватель, Дисциплина, ПреподавательГруппаДисциплина, Семестр.
  • · Принимать заявки на регистрацию студента.
  • · Изменять оценки в таблицах с оценками.
  • · Просматривать аналитическую информацию по успеваемости.

Реализация сценария преподавателя.

Основная страница для преподавателя где выводятся оценки для выбранной группы по выбранной дисциплине.

Заглавная страница преподавателя.

Рис. 4 Заглавная страница преподавателя

Исходный код:

[HttpGet].

public ActionResult Index (int? group, int? subject).

{.

string userName = HttpContext.User.Identity.Name;

var lecturerId = db.Teachers.Where (p => p. UserName == userName).First ().Id;

var toDaySemester = Semester. Today ();

//Формирует список групп у которых преподаватель ввёл в данном семестре.

var findGroups = (from p in db.Groups.

join b in db. TeachersGroupsSubjects on p. Id equals b.GroupId.

join c in db. TableOfGrades on b. Id equals c.TeachersGroupsSubjectId.

join d in db. Semester on c. SemesterId equals d.Id.

where b. TeacherId == lecturerId && d. Number == toDaySemester. Number &&.

d.Year == toDaySemester.Year.

select new.

{.

Id = p. Id,.

Number = p. Number,.

YearOfAdmission = p. YearOfAdmission,.

Faculty = p. Faculty,.

Degree = p. Degree,.

MonitorId = p.MonitorId.

}).ToList ();

List groups = new List ();

foreach (var group1 in findGroups).

{.

if (groups.Find (p => p. Id == group1. Id) == null).

groups.Add (new Groups.

{.

Id = group1. Id,.

Number = group1. Number,.

YearOfAdmission = group1. YearOfAdmission,.

Faculty = group1. Faculty,.

Degree = group1. Degree,.

MonitorId = group1.MonitorId.

});

}.

foreach (var b in groups).

{.

b.Number = b. GetGroupNumber (Semester.Today ());

}.

groups.OrderBy (p => p. Number);

int firstGroup;

if (group == null).

firstGroup = groups. FirstOrDefault ().Id;

else.

firstGroup = group. Value;

ViewBag.Groups = new SelectList (groups, «Id», «Number», groups. First (p => p. Id == firstGroup));

//Формируем список дисплин по одной из групп для преподавателя.

var subjects = (from p in db.Subjects.

join b in db. TeachersGroupsSubjects on p. Id equals b.SubjectId.

join f in db. Groups on b. GroupId equals f.Id.

join c in db. TableOfGrades on b. Id equals c.TeachersGroupsSubjectId.

join d in db. Semester on c. SemesterId equals d.Id.

where b. TeacherId == lecturerId && d. Number == toDaySemester. Number && d. Year == toDaySemester. Year && f. Id == firstGroup.

select new.

{.

Name = p.Name,.

Id = p.Id.

}).ToList ();

subjects = subjects. Distinct ().ToList ();

subjects.OrderBy (p => p.Name);

if (subject == null).

subject = subjects. First ().Id;

ViewBag.Subject = new SelectList (subjects, «Id», «Name», subjects. First (p => p. Id == subject));

LecturerViewModel viewModel = new LecturerViewModel ();

var toDaySemester1 = GetTodaySemester ();

int lecId = db.Teachers.Where (p => p. UserName == userName).First ().Id;

viewModel.GetAllFinalGrades (db, firstGroup, lecId, subject. Value, toDaySemester1);

//Заполнения модели представления.

//Получение название предметов для журнала.

viewModel.GetNamesOfStudents (db, firstGroup, lecId, subject. Value, toDaySemester1);

//Получение данных для заполнения области таблицы с оценками.

viewModel.GetStudentsGrades (db, firstGroup, lecId, subject. Value, toDaySemester1);

//Для строки с названиями месяцев.

viewModel.GetMounthNames ();

//С количеством дней в месяцах для для colspan.

viewModel.GetDaysMounth ();

//Для отображение строки где день месяца + день недели.

viewModel.GetDaysSemester ();

//Для формирование таблиц с итоговыми оценками.

viewModel.GetAllFinalGrades (db, firstGroup, lecId, subject. Value, toDaySemester1);

viewModel.Subject = db.Subjects.Find (subject);

viewModel.Group = db.Groups.Find (firstGroup);

return View (viewModel);

}.

[HttpPost].

public ActionResult Index (LecturerViewModel viewModel, string action).

{.

DiaryConnection db = new DiaryConnection ();

db.Database.Log = s => System.Diagnostics.Debug.WriteLine (s);

//action — параметр отправляемый из кнопки «сохранить». В зависимости от него обновляеться нужная часть модели.

if (action == «Journal»).

{.

for (int i = 0; i < viewModel.ListOfGrades.Count; i++).

{.

for (int j = 0; j < viewModel. ListOfGrades[i]. Count; j++).

{.

//Обновляем отправленные данные таблицы.

var foundTableEntry = viewModel. ListOfGrades[i][j];

var tableEntry = db.TableEntry.Where (p => p. Id == foundTableEntry. Id).First ();

tableEntry.Value = foundTableEntry. Value;

}.

}.

}.

if (action == «PassFailTest»).

{.

foreach (var b in viewModel. PassFailTestGrades).

{.

//Обновляем отправленные данные таблицы.

var tableEntry = db.TableEntry.Where (p => p. Id == b. Id).First ();

tableEntry.Value = b. Value;

}.

}.

if (action == «PracticalWork»).

{.

foreach (var b in viewModel. PracticalWorkGrades).

{.

var tableEntry = db.TableEntry.Where (p => p. Id == b. Id).First ();

tableEntry.Value = b. Value;

}.

}.

if (action == «CoursePaper»).

{.

foreach (var b in viewModel. CoursePaperGrades).

{.

var tableEntry = db.TableEntry.Where (p => p. Id == b. Id).First ();

tableEntry.Value = b. Value;

}.

}.

if (action == «Exam»).

{.

foreach (var b in viewModel. ExamGrades).

{.

var tableEntry = db.TableEntry.Where (p => p. Id == b. Id).First ();

tableEntry.Value = b. Value;

}.

}.

db.SaveChanges ();

return Redirect («/Lecturer/Index» + «/» + viewModel.Group.Id + «/» + viewModel.Subject.Id);

}.

Пояснение:

C помощью HTTP запроса GET к методу Index выводится начальное представление. А с помощью запроса POST происходит обновление страницы.

Изначально преподаватель волен выбрать какие таблицы ему создать, а какие проигнорировать. Таблица журнал образуется по тому расписанию которое укажет преподаватель. По умолчанию выводятся группы, предметы за текущий семестр. Таблицы за предыдущие семестры вынесены в Архив.

Поля в таблицах свободны для редактирования, только нужно нажать кнопку сохранить под необходимой таблицей, что вызовет метод POST который сохранит изменения и обновит страницу.

Основные методы по формирование таблиц вынесены в класс LecturerViewModel.

Выбор преподавателем тех групп и предметов по которым он выставляет оценки.

Создание связи ПреподавательГруппаПредмет.

Рис. 5 Создание связи ПреподавательГруппаПредмет

Исходный код:

[HttpGet].

public ActionResult SelectGroupAndSubject ().

{.

string userName = HttpContext.User.Identity.Name;

var groups = db.Groups.ToList ();

foreach (var b in groups).

{.

b.Number = b. GetGroupNumber (Semester.Today ());

}.

ViewBag.Lecturer = db.Teachers.Where (p => p. UserName == userName).First ();

ViewBag.Groups = new SelectList (groups, «Id», «Number»);

ViewBag.Subjects = new SelectList (db.Subjects.ToList (), «Id», «Name»);

ViewBag.TGS = db.TeachersGroupsSubjects.Where (p => p.Teachers.UserName == userName).ToList ();

return View ();

}.

[HttpPost].

public ActionResult SelectGroupAndSubject ([Bind (Include = «Id, GroupId, TeacherId, SubjectId»)]TeachersGroupsSubjects lgs, string isNewSubject, string newSubjectName, string newSubjectDepartament).

{.

if (isNewSubject == «true»).

{.

if (db.Subjects.Where (p => p.Name == newSubjectName && p. Departament == newSubjectDepartament).ToList ().Count == 0).

{.

db.Subjects.Add (new Subjects { Name = newSubjectName, Departament = newSubjectDepartament });

db.SaveChanges ();

}.

lgs.SubjectId = db.Subjects.Where (p => p.Name == newSubjectName && p. Departament == newSubjectDepartament).First ().Id;

}.

if (ModelState.IsValid).

{.

db.TeachersGroupsSubjects.Add (lgs);

db.SaveChanges ();

return Redirect («/Lecturer/Index» + «/» + lgs. GroupId + «/» + lgs. SubjectId);

}.

string userName = HttpContext.User.Identity.Name;

var lecId = db.Teachers.Where (p => p. UserName == userName).First ().Id;

var groups = db.Groups.ToList ();

foreach (var b in groups).

{.

b.Number = b. GetGroupNumber (Semester.Today ());

}.

ViewBag.Lecturer = lecId;

ViewBag.Groups = new SelectList (groups, «Id», «Number»);

ViewBag.Subjects = new SelectList (db.Subjects.ToList (), «Id», «Name»);

return View ();

}.

Пояснение:

Создавая выбирая группу и предмет, преподаватель волен выбрать: взять ему существующий предмет или создать новый. Снизу страницы отображены уже созданные связи.

Архив где выводятся проставленные оценки за прошлые семестры.

Архив у преподавателя.

Рис. 6 Архив у преподавателя

Исходный код:

public ActionResult Archive (int? group, int? subject, string year, string semesterNumber).

{.

string userName = HttpContext.User.Identity.Name;

var lecturerId = db.Teachers.Where (p => p. UserName == userName).First ().Id;

var findSemesters = (from p in db.Semester.

join c in db. TableOfGrades on p. Id equals c.SemesterId.

join g in db. TeachersGroupsSubjects on c. TeachersGroupsSubjectId equals g.Id.

join f in db. Teachers on g. TeacherId equals f.Id.

where f. Id == lecturerId.

select new.

{.

Id = p. Id,.

BeginningDate = p. BeginningDate,.

EndDate = p. EndDate,.

Number = p. Number,.

Year = p.Year.

}).Distinct ();

List semesters = new List ();

foreach (var item in findSemesters).

{.

semesters.Add (new Semester { Id = item. Id, BeginningDate = item. BeginningDate, EndDate = item. EndDate, Number = item. Number, Year = item. Year });

}.

Semester semester;

if (year == null || semesterNumber == null).

semester = semesters. FirstOrDefault ();

else.

semester = db.Semester.FirstOrDefault (p => p. Year == year && p. Number == semesterNumber);

var findGroups = (from p in db.Groups.

join b in db. TeachersGroupsSubjects on p. Id equals b.GroupId.

join c in db. TableOfGrades on b. Id equals c.TeachersGroupsSubjectId.

join d in db. Semester on c. SemesterId equals d.Id.

where b. TeacherId == lecturerId && d. Number == semester. Number &&.

d.Year == semester.Year.

select new.

{.

Id = p. Id,.

Number = p. Number,.

YearOfAdmission = p. YearOfAdmission,.

Faculty = p. Faculty,.

Degree = p. Degree,.

MonitorId = p.MonitorId.

}).ToList ();

List groups = new List ();

foreach (var group1 in findGroups).

{.

if (groups.Find (p => p. Id == group1. Id) == null).

groups.Add (new Groups.

{.

Id = group1. Id,.

Number = group1. Number,.

YearOfAdmission = group1. YearOfAdmission,.

Faculty = group1. Faculty,.

Degree = group1. Degree,.

MonitorId = group1.MonitorId.

});

}.

foreach (var b in groups).

{.

b.Number = b. GetGroupNumber (Semester.Today ());

}.

groups.OrderBy (p => p. Number);

if (group == null).

group = db.Groups.First ().Id;

var firstGroup = groups. First ();

var subjects = (from p in db.Subjects.

join b in db. TeachersGroupsSubjects on p. Id equals b.SubjectId.

join f in db. Groups on b. GroupId equals f.Id.

join c in db. TableOfGrades on b. Id equals c.TeachersGroupsSubjectId.

join d in db. Semester on c. SemesterId equals d.Id.

where b. TeacherId == lecturerId && d. Number == semester. Number && d. Year == semester. Year && f. Id == firstGroup.Id.

select new.

{.

Name = p.Name,.

Id = p.Id.

}).ToList ();

subjects = subjects. Distinct ().ToList ();

subjects.OrderBy (p => p.Name);

if (subject == null).

subject = db.Subjects.First ().Id;

//SelectList для симестров надо делать вручную. У меня на представление есть пример.

ViewBag.Semesters = semesters;

ViewBag.Groups = new SelectList (groups, «Id», «Number», groups. FirstOrDefault (p => p. Id == group));

ViewBag.Subjects = new SelectList (subjects, «Id», «Name», subjects. FirstOrDefault (p => p. Id == subject));

LecturerViewModel viewModel = new LecturerViewModel ();

viewModel.GetAllFinalGrades (db, group. Value, lecturerId, subject. Value, semester);

//Заполнения модели представления.

//Получение название предметов для журнала.

viewModel.GetNamesOfStudents (db, group. Value, lecturerId, subject. Value, semester);

//Получение данных для заполнения области таблицы с оценками.

viewModel.GetStudentsGrades (db, group. Value, lecturerId, subject. Value, semester);

//Для строки с названиями месяцев.

viewModel.GetMounthNames ();

//С количеством дней в месяцах для для colspan.

viewModel.GetDaysMounth ();

//Для отображение строки где день месяца + день недели.

viewModel.GetDaysSemester ();

//Для формирование таблиц с итоговыми оценками.

viewModel.GetAllFinalGrades (db, group. Value, lecturerId, subject. Value, semester);

viewModel.Subject = db.Subjects.Find (subject);

viewModel.Group = db.Groups.Find (group);

return View (viewModel);

}.

Пояснение:

Фактически тот же самый функционал что и у метода Index с той разницей, что добавлен функционал выбора семестра. Разделение на Index и Архив было сделано осознано, чтобы отделить таблицы с оценками текущего семестра от всех остальных.

Создание таблицы — журнал.

Создание таблицы - журнал.

Рис. 7 Создание таблицы — журнал

Исходный код:

public ActionResult CreateJournal (int groupId, int subjectId).

{.

ViewBag.GroupId = groupId;

ViewBag.SubjectId = subjectId;

return View ();

}.

[HttpPost].

public ActionResult CreateJournal (List numerator, List denominator, int groupId, int subjectId).

{.

string userName = HttpContext.User.Identity.Name;

DiaryConnection db = new DiaryConnection ();

var lecId = db.Teachers.Where (p => p. UserName == userName).First ().Id;

var tgs = db.TeachersGroupsSubjects.Where (p => p. TeacherId == lecId &&.

p.GroupId == groupId && p. SubjectId == subjectId).First ();

var semester = Semester. Today ();

if (db.TableOfGrades.Any (p => p. TeachersGroupsSubjectId == tgs. Id && p. TypeOfKnowledgeControl == «Journal»)).

return Redirect («/Lecturer/Index» + «/» + groupId + «/» + subjectId);

//var tgs = (from p in db. TeachersGroupsSubject where p. TeacherId == lecId /*&& p. GroupId == group1 && p. SubjectId == subject*/ select p).ToList ();// db.TeachersGroupsSubject.Where (p => p. TeacherId == lecId && p. GroupId ==group &&p.SubjectId == subject).ToList ().First ();

//Получаем все дни по расписанию в течении семестра.

var allDays = GetAllDaysAreOnTimetable (numerator, denominator, semester);

//Получаем всех студентов у данной группы.

var allStudents = (from p in db. Students where p. GroupId == groupId.

select new.

{ Id = p. Id }).ToList ();/*db.Students.Where (p => p. GroupId == group1)*/.

//Добавляем новую таблицу с оценками (TGSId должен быть параметром).

var newTable = new TableOfGrades {.

TeachersGroupsSubjectId = tgs. Id,.

TypeOfKnowledgeControl = «Journal» ,.

SemesterId = semester.Id.

};

db.TableOfGrades.Add (newTable);

db.SaveChanges ();

foreach (var day in allDays).

{.

foreach (var std in allStudents).

{.

if (!db.TableEntry.Any (p => (p.StudentId == std. Id) && (p.Date == day) && (p.TableOfGradeId == newTable. Id))).

db.TableEntry.Add (new TableEntry { StudentId = std. Id, Date = day, TableOfGradeId = newTable. Id, Value = «» });

}.

}.

db.SaveChanges ();

return Redirect («/Lecturer/Index» + «/» + groupId + «/» + subjectId);

}.

Пояснение:

Преподаватель с помощью галочек указывает расписание по которому формируется таблица журнал. Для таблицы типа экзамен нужно указать дату проведения экзамена. Остальные таблицы формируются подобным кодом, только не требуют ввода дополнительной информации.

Студент

Основнная страница для студента с просмотром своих оценок.

Основная страница студента.

Рис. 8 Основная страница студента

Исходный код:

public ActionResult Index (string year, string semesterNumber).

{.

string userName = HttpContext.User.Identity.Name;

var student = dbContext.Students.Where (p => p. UserName == userName).First ();

//var semester = dbContext.Semester.Where (p => p. Year == year && p. Number == semesterNumber).First ();

var semester = dbContext.Semester.Where (p => p. Year == year && p. Number == semesterNumber).First ();

if (semester==null).

HttpNotFound ();

var viewModel = new StudentJournalViewModel ();

//Заполнения модели представления.

//Получение название предметов для журнала.

viewModel.GetNamesOfSubject (dbContext, student. Id, semester);

//Получение данных для заполнения области таблицы с оценками.

viewModel.GetSubjectGrades (dbContext, student. Id, semester);

//Для строки с названиями месяцев.

viewModel.GetMounthNames ();

//С количеством дней в месяцах для для colspan.

viewModel.GetDaysMounth ();

//Для отображение строки где день месяца + день недели.

viewModel.GetDaysSemester ();

//Для отображение пропусков ввида:"3 пропуска из 24″.

viewModel.GetMissed ();

//Для формирование таблиц с итоговыми оценками.

viewModel.GetAllFinalGrades (dbContext, student. Id, semester);

//для формирования cсылок с оценками за разные семестры.

viewModel.GetRefToSemesters (dbContext, student. Id);

return View (viewModel);

}.

Пояснение:

Студент может только просматривать свои оценки, выбирая разный семестр. Студент не видит таблицу с типом журнал.

Подача заявки на регистрацию студентом.

Форма подачи заявки на регистрацию, студентом.

Рис. 9 Форма подачи заявки на регистрацию, студентом

Исходный код:

[AllowAnonymous].

public ActionResult StudentRegister ().

{.

List groups = new List ();

using (DiaryConnection db = new DiaryConnection ()).

{.

groups = db.Groups.ToList ();

foreach (var b in groups).

{.

b.Number = b. GetGroupNumber (Semester.Today ());

ViewBag.Groups = new SelectList (groups, «Id», «Number»);

}.

}.

return View ();

}.

[HttpPost].

[AllowAnonymous].

public ActionResult StudentRegister (StudentRegisterViewModel viewModel).

{.

ApplicationsForRegistration application = new ApplicationsForRegistration {FirstName = viewModel. FirstName,.

SecondName = viewModel. SecondName, MiddleName = viewModel. MiddleName,.

CardNumber = viewModel. CardNumber, DateOfBirth = viewModel. DateOfBirth,.

GroupId = viewModel. GroupId, Email = viewModel. Email, Login = viewModel. Login, Password = viewModel. Password };

using (DiaryConnection db = new DiaryConnection ()).

{.

db.ApplicationsForRegistration.Add (application);

db.SaveChanges ();

}.

return RedirectToAction («ApplicationAccepted»);

}.

[AllowAnonymous].

public ActionResult ApplicationAccepted ().

{.

return View ();

}.

Пояснение:

Студент заполняет данную форму, чтобы администратор мог его одназначно идентифицировать и принять его заявку.

Администратор

У администартора есть права на поиск, удаление, редактирование, создания основных сущностей: Студент, Группа, Преподаватель, Дисциплина, ПреподавательГруппаДисциплина, Семестр. Описывать этот функционал несколько раз — безсмысленно, поэтому расмотрим его подробнее на примере Группы.

Основная типовая страница для Группы.

Группа у администратора.

Рис. 10 Группа у администратора

Исходный код:

public ActionResult Groups ().

{.

List groups;

DiaryConnection db = new DiaryConnection ();

groups = db.Groups.ToList ();

return View (groups);

}.

public ActionResult GroupsSearch (int? number, int? yearOfAdmission, string faculty, string degree, string formOfStudy).

{.

IEnumerable foundGroups;

List groups;

using (DiaryConnection db = new DiaryConnection ()).

{.

groups = db.Groups.ToList ();

}.

foundGroups = groups;

if (number ≠ null).

foundGroups = foundGroups. Where (p => p. GetGroupNumber (Semester.Today ()) == number);

if (yearOfAdmission ≠ null).

foundGroups = foundGroups. Where (p => p. YearOfAdmission == yearOfAdmission);

if (faculty ≠ «»).

foundGroups = foundGroups. Where (p => p. Faculty == faculty);

if (degree ≠ «»).

foundGroups = foundGroups. Where (p => p. Degree == degree);

if (formOfStudy ≠ «»).

foundGroups = foundGroups. Where (p => p. FormOfStudy == formOfStudy);

return PartialView (foundGroups);

}.

Пояснение:

Сверху страницу строки для ввода данных для поиска и соответствующая кнопка.

Снизу отображаются найденные Группы с двумя кнопками — удалить и редактировать.

Создание Группы.

Создание группы.

Рис. 11 Создание группы

Исходный код:

[HttpGet].

public ActionResult AddGroups ().

{.

return View ();

}.

[HttpPost].

public ActionResult AddGroups ([Bind (Include = «Id, Number, YearOfAdmission, Faculty, Degree, FormOfStudy, MonitorId»)]Groups groups).

{.

using (DiaryConnection db = new DiaryConnection ()).

{.

if (ModelState.IsValid).

{.

db.Groups.Add (groups);

db.SaveChanges ();

return RedirectToAction («Groups»);

}.

}.

ViewBag.ErrorMessage = «Неверный ввод данных» ;

return View (groups);

}.

Пояснение:

Отображаются поля для создания новой группы с валидацией на представлении и на сервере.

Редактирование Группы.

Редактирование группы.

Рис. 12 Редактирование группы

Исходный код:

[HttpGet].

public ActionResult EditGroups (int? id).

{.

if (id == null).

{.

return HttpNotFound ();

}.

Groups group;

using (DiaryConnection db = new DiaryConnection ()).

{.

group = db.Groups.Find (id);

if (group ≠ null).

{.

var students = db.Students.Where (p => p. GroupId == group. Id).ToList ();

ViewBag.Students = new SelectList (students, «Id», «FullName», group. Students);

db.Dispose ();

return View (group);

}.

}.

return HttpNotFound ();

}.

[HttpPost].

public ActionResult EditGroups ([Bind (Include = «Id, Number, YearOfAdmission, Faculty, Degree, FormOfStudy, MonitorId»)]Groups group).

{.

using (DiaryConnection db = new DiaryConnection ()).

{.

if (ModelState.IsValid).

{.

db.Entry (group).State = EntityState. Modified;

db.SaveChanges ();

}.

else.

{.

var students = db.Students.Where (p => p. GroupId == group. Id);

ViewBag.Students = new SelectList (students, «Id», «FullName», group. Students);

db.Dispose ();

return View (group);

}.

}.

return RedirectToAction («Groups»);

}.

Пояснение:

Поля формы заполнены данными выбранной группы. При нажатие кнопки «Изменить», происходит сохранение изменений у выбранной группы.

Удаление Группы.

веб приложение скрипт фреймворк.

Удаление группы.

Рис. 13 Удаление группы

Исходный код:

[HttpGet].

public ActionResult DeleteGroups (int? id).

{.

if (id == null).

{.

return HttpNotFound ();

}.

Groups group;

using (DiaryConnection db = new DiaryConnection ()).

group = db.Groups.Find (id);

if (group == null).

{.

return HttpNotFound ();

}.

ViewBag.Id = id;

return View (group);

}.

[HttpPost, ActionName («DeleteGroups»)].

public ActionResult DeleteGroupConfirmed (int id).

{.

using (DiaryConnection db = new DiaryConnection ()).

{.

db.Database.Log = s => System.Diagnostics.Debug.WriteLine (s);

Groups group = db.Groups.Find (id);

if (group == null).

{.

return HttpNotFound ();

}.

db.Groups.Remove (group);

try.

{.

db.SaveChanges ();

}.

catch (System.Data.Entity.Infrastructure.DbUpdateException ex).

{.

string errorMessage = «Нельзя удалить так как данная группа используеться в одном из TeacherGroupSubject» ;

string url = «Groups» ;

return RedirectToAction («ErrorMessage», new { message = errorMessage, urlToRedirect = url });

}.

}.

return RedirectToAction («Groups»);

}.

Пояснение:

Процесс удаление разделён на 2 части. 1 часть выводить форма с данными о удаляемой группе, во 2 части (метод POST) происходит само удаление. Тем самым мы спрашиваем подтверждение у пользователя об удалении.

Принятие заявки на регистрацию студента.

*место для картинки*.

Исходный код:

[HttpGet].

public ActionResult ConfirmStudentRegistration (int? id).

{.

if (id == null).

return HttpNotFound ();

ApplicationsForRegistration application;

DiaryConnection db = new DiaryConnection ();

application = db.ApplicationsForRegistration.Find (id);

ViewBag.FoundStudents= db.Students.Where (p => (p.FullName.Contains (application.FirstName) && p.FullName.Contains (application.SecondName)) || p. Number == application. CardNumber).ToList ();

return View (application);

}.

[HttpPost].

public ActionResult StudentsSearchForApplication (string number, string fullName, string groupNumber, int applicationId).

{.

List foundStudents;

using (DiaryConnection db = new DiaryConnection ()).

{.

if (number == «» && fullName == «» && groupNumber == «»).

foundStudents = db.Students.ToList ();

else if (fullName == «» && groupNumber == «»).

foundStudents = db.Students.Where (p => p. Number == number).ToList ();

else if (number == «» && groupNumber == «»).

foundStudents = db.Students.Where (p => p.FullName.Contains (fullName)).ToList ();

else if (number == «» && fullName == «»).

{.

var students = db.Students.ToList ();

foundStudents = students. Where (p => p. Groups1.GetGroupNumber (Semester.Today ()) == Convert. ToInt32(groupNumber)).ToList ();

}.

else if (groupNumber == null).

foundStudents = db.Students.Where (p => p. Number == number && p.FullName.Contains (fullName)).ToList ();

else if (number == «»).

foundStudents = db.Students.Where (p => p.FullName.Contains (fullName)).ToList ().

Where (p => p. Groups1.GetGroupNumber (Semester.Today ()) == Convert. ToInt32(groupNumber)).ToList ();

else if (fullName == «»).

foundStudents = db.Students.Where (p => p. Number == number).ToList ().

Where (p => p. Groups1.GetGroupNumber (Semester.Today ()) == Convert. ToInt32(groupNumber)).ToList ();

else.

{.

foundStudents = db.Students.Where (p => p. Number == number && p.FullName.Contains (fullName)).ToList ().

Where (p => p. Groups1.GetGroupNumber (Semester.Today ()) == Convert. ToInt32(groupNumber)).ToList ();

}.

foundStudents.RemoveAll (p => p. UserName ≠ null);

}.

ViewBag.ApplicationId = applicationId;

return PartialView (foundStudents);

}.

public ActionResult CompletionStudentRegistration (int? applicationId, int? studentId).

{.

if (applicationId == null || studentId == null).

return HttpNotFound ();

DiaryConnection db = new DiaryConnection ();

var application = db.ApplicationsForRegistration.Find (applicationId);

ViewBag.FoundStudents = db.Students.Where (p => (p.FullName.Contains (application.FirstName) && p.FullName.Contains (application.SecondName)) || p. Number == application. CardNumber);

var student = db.Students.Find (studentId);

ApplicationDbContext context = new ApplicationDbContext ();

var userManager = new ApplicationUserManager (new UserStore (context));

var studentAccount = new ApplicationUser { Email = application. Email, UserName = application. Login };

var result = userManager. Create (studentAccount, application. Password);

if (result.Succeeded).

{.

userManager.AddToRole (studentAccount.Id, «student»);

student.UserName = application. Login;

db.ApplicationsForRegistration.Remove (application);

db.SaveChanges ();

}.

return RedirectToAction («ApplicationsForRegistration»);

}.

Пояснение:

Студент оставляет свою заявку на регистрацию, затем администратор должен одобрить её или отклонить. На представление админстратор видит справа выбранную заявку, а слева функционал выбора студента с которым надо связать заявку. В функционал входят: возможность поиска студента, и список найденных студентов в который изначально включены. Рядом с найденным студентом стоит кнопка которая связывает заявку со студентом т. е. создаёт аккаунт для студента (с логином и паролем указанным в заявке).

Показать весь текст
Заполнить форму текущей работой