Скриншот архива с проектом




Структура проекта

Задание
Разработайте на языке C# и ASP.NET Core MVC NET 7.0 простое веб-приложение для для учета посещений и пропусков занятий, приложение должно носить название - Учёт посещений и пропусков занятий. Для работы с базой данных рекомендуется использовать EF Core и SQL Server Management Studio 20.
Функционал программы
- добавление студентов
- редактирование студентов
- удаление студентов
- поиск по студенту
- поиск по группе
- поиск по преподавателю
Фрагмент программного кода (класс - Student)
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace AttendanceTrackingMVC.Models
{
[Table("Students")]
public class Student
{
/// <summary>
/// id студента
/// </summary>
public int Id { get; set; }
/// <summary>
/// Студент
/// </summary>
[MaxLength(100)]
public string StudentName { get; set; } = string.Empty;
/// <summary>
/// Фото студента
/// </summary>
[MaxLength(100)]
public string ImageFileName { get; set; } = string.Empty;
/// <summary>
/// Количество прогулов и пропусков по уважительным и неуважительным причинам
/// </summary>
[MaxLength(50)]
public string NumberPasses { get; set; } = string.Empty;
/// <summary>
/// Количество посещенных занятий
/// </summary>
[MaxLength(50)]
public string NumberVisits { get; set; } = string.Empty;
/// <summary>
/// Причина пропуска занятий
/// </summary>
[MaxLength(255)]
public string Reason { get; set; } = string.Empty;
/// <summary>
/// Статус причины
/// </summary>
[MaxLength(255)]
public string StatusReason { get; set; } = string.Empty;
/// <summary>
/// Группа
/// </summary>
[MaxLength(100)]
public string Group { get; set; } = string.Empty;
/// <summary>
/// Преподаватель
/// </summary>
[MaxLength(100)]
public string Teacher { get; set; } = string.Empty;
/// <summary>
/// Дата внесения сведений
/// </summary>
public DateTime CreatedAt { get; set; }
}
}
Фрагмент программного кода (контроллер - StudentsController)
using AttendanceTrackingMVC.Models;
using Microsoft.AspNetCore.Mvc;
namespace AttendanceTrackingMVC.Controllers
{
public class StudentsController : Controller
{
private readonly AppDbContext context;
private readonly IWebHostEnvironment environment;
public StudentsController(AppDbContext context, IWebHostEnvironment environment)
{
this.context = context;
this.environment = environment;
}
public IActionResult Index()
{
var students = context.Students.OrderByDescending(b => b.Id).ToList();
return View(students);
}
[HttpGet]
public IActionResult Index(string studentName, string group, string teacher)
{
var students = context.Students.AsQueryable();
if (!string.IsNullOrEmpty(studentName))
{
students = students.Where(c => c.StudentName.Contains(studentName));
}
if (!string.IsNullOrEmpty(group))
{
students = students.Where(c => c.Group.Contains(group));
}
if (!string.IsNullOrEmpty(teacher))
{
students = students.Where(c => c.Teacher.Contains(teacher));
}
var result = students.OrderByDescending(c => c.Id).ToList(); // Получаем список студентов
return View(result); // Возвращаем представление с результатами
}
public IActionResult Create()
{
return View();
}
[HttpPost]
public IActionResult Create(StudentDto studentDto)
{
if (studentDto.ImageFile == null)
{
ModelState.AddModelError("ImageFile", "The image file is required");
}
if (!ModelState.IsValid)
{
return View(studentDto);
}
// save the image file
string newFileName = DateTime.Now.ToString("yyyyMMddHHmmssfff");
newFileName += Path.GetExtension(studentDto.ImageFile!.FileName);
string imageFullPath = environment.WebRootPath + "/images/" + newFileName;
using (var stream = System.IO.File.Create(imageFullPath))
{
studentDto.ImageFile.CopyTo(stream);
}
// save the new student in the database
Student student = new Student()
{
StudentName = studentDto.StudentName,
ImageFileName = newFileName,
NumberPasses = studentDto.NumberPasses,
NumberVisits = studentDto.NumberVisits,
Reason = studentDto.Reason,
StatusReason = studentDto.StatusReason,
Group = studentDto.Group,
Teacher = studentDto.Teacher,
CreatedAt = studentDto.CreatedAt
};
context.Students.Add(student);
context.SaveChanges();
return RedirectToAction("Index", "Students");
}
public IActionResult Edit(int id)
{
var student = context.Students.Find(id);
if (student == null)
{
return RedirectToAction(nameof(Index));
}
// create studentDto from student
var studentDto = new StudentDto()
{
StudentName = student.StudentName,
NumberPasses = student.NumberPasses,
NumberVisits = student.NumberVisits,
Reason= student.Reason,
StatusReason = student.StatusReason,
Group = student.Group,
Teacher = student.Teacher,
CreatedAt = student.CreatedAt
};
ViewData["StudentId"] = student.Id;
ViewData["ImageFileName"] = student.ImageFileName;
return View(studentDto);
}
[HttpPost]
public IActionResult Edit(int id, StudentDto studentDto)
{
var student = context.Students.Find(id);
if (student == null)
{
return RedirectToAction(nameof(Index));
}
if (!ModelState.IsValid)
{
ViewData["StudentId"] = student.Id;
ViewData["ImageFileName"] = student.ImageFileName;
return View(studentDto);
}
// update the image file if we have a new image file
string newFileName = student.ImageFileName;
if (studentDto.ImageFile != null)
{
newFileName = DateTime.Now.ToString("yyyyMMddHHmmssfff");
newFileName += Path.GetExtension(studentDto.ImageFile!.FileName);
string imageFullPath = environment.WebRootPath + "/images/" + newFileName;
using (var stream = System.IO.File.Create(imageFullPath))
{
studentDto.ImageFile.CopyTo(stream);
}
// delete the old image
string oldImageFullPath = environment.WebRootPath + "/images/" + student.ImageFileName;
System.IO.File.Delete(oldImageFullPath);
}
// update the student in the database
student.StudentName = studentDto.StudentName;
student.ImageFileName = newFileName;
student.NumberPasses = studentDto.NumberPasses;
student.NumberVisits = studentDto.NumberVisits;
student.Reason = studentDto.Reason;
student.StatusReason = studentDto.StatusReason;
student.Group = studentDto.Group;
student.Teacher = studentDto.Teacher;
student.CreatedAt = studentDto.CreatedAt;
context.Students.Update(student); // обновляем студента в контексте
context.SaveChanges();
return RedirectToAction(nameof(Index));
}
public async Task<IActionResult> Delete(int id)
{
var student = await context.Students.FindAsync(id);
if (student == null)
{
return RedirectToAction("Index", "Students");
}
string imageFullPath = environment.WebRootPath + "/images/" + student.ImageFileName;
System.IO.File.Create(imageFullPath);
context.Remove(student);
await context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
}
}
Пояснения по запуску программы
- Скачиваем и устанавливаем Visual Studio 2022 Community - https://visualstudio.microsoft.com/ru/vs/community/
- Выбираем все необходимые рабочие нагрузки - это разработка веб и классических приложений на C# в дополнительных параметрах проверяем что все компоненты выбраны, при необходимости доватьте то что считаете нужным.
- Скачиваем и устанавливаем Microsoft SQL Server Management Studio 20 - https://learn.microsoft.com/ru-ru/sql/ssms/download-sql-server-management-studio-ssms?view=sql-server-ver16
- Имя сервера должно быть таким - (LocalDB)\MSSQLLocalDB
- Запускаем проект через Visual Studio 2022/ Удаляем папку миграций - Migrations. Переходим в Вид - Другие окна - Консоль диспетчера пакетов и пишем команды: Add-Migration Initial и Update-Database.
- На верхней панели увидие зеленую стрелку, жмете на нее и запускаете ваш проект. Добавляете автомобили которые вам нужны.
Телеграм
-