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


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


Задание
С помощью среды Visual Studio Community 2022 и платформы ASP.NET Core разработать приложение для контроля работы IT компании, удовлетворяющее следующимтребованиям: 1. Программа содержит страницы с информацией о программистах, менеджерах,бухгалтерах и комнатах, в которых работают сотрудники. 2. Начальное количество мест в каждой комнате равняется 10.3. Для программистов, менеджеров и бухгалтеров должны быть предусмотреныоперации добавления (приема на работу), редактирования (изменения данных осотрудниках) и удаления (увольнения). 4. Программисты, менеджеры, бухгалтеры размещаются в конкретных комнатах. 5. После добавления сотрудника количество мест в комнате, в которой размещаетсясотрудник, уменьшается количество мест.
Функционал программы
- добавление, редактирование, удаление сотрудников в соответствующие комнаты
- добавление, удаление и редактирование комнат
- поиск сотрудника по имени или фамилии
- уменьшение количества свободных мест в комнате при каждом новом добавлении сотрудника в соответствующую комнату.
Фрагмент программного кода модели Accountant
using ITСompany.BusinessLayer.Models.Entities.Rooms;
using System.ComponentModel.DataAnnotations;
namespace ITСompany.BusinessLayer.Models.Entities.Accountants
{
public class Accountant
{
public int Id { get; set; } // Идентификационный номер
[MaxLength(100)]
public string Name { get; set; } // Имя бухгалтера
[MaxLength(100)]
public string LastName { get; set; } // Фамилия бухгалтера
[MaxLength(100)]
public string SurName { get; set; } // Отчество бухгалтера
public int Age { get; set; } //Возраст
public int Experience { get; set; } // Опыт
public Room Room { get; set; } // Внешний ключ к таблице Room
public int RoomId { get; set; } // Id комнаты
}
}
Фрагмент программного кода репозитория для модели Accountant
using ITСompany.BusinessLayer.Context;
using ITСompany.BusinessLayer.Models.Entities.Accountants;
using Microsoft.EntityFrameworkCore;
namespace ITСompany.BusinessLayer.Repositories
{
public class AccountantRepository : IRepository<Accountant>
{
private readonly ApplicationDbContext _context;
public AccountantRepository(ApplicationDbContext context)
{
_context = context;
}
public IEnumerable<Accountant> GetAll()
{
return _context.Accountants.Include(a => a.Room).ToList();
}
public Accountant GetById(int id)
{
return _context.Accountants.FirstOrDefault(a => a.Id == id);
}
public void Add(Accountant entity)
{
_context.Accountants.Add(entity);
_context.SaveChanges();
}
public void Update(Accountant entity)
{
_context.Entry(entity).State = EntityState.Modified;
_context.SaveChanges();
}
public void Remove(Accountant entity)
{
_context.Accountants.Remove(entity);
_context.SaveChanges();
}
}
}
Фрагмент программного кода контроллера для Accountant
using ITСompany.BusinessLayer.Context;
using ITСompany.BusinessLayer.Models.Entities.Accountants;
using ITСompany.BusinessLayer.Services;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
namespace ITСompany.WebApp.Controllers
{
public class AccountantsController : Controller
{
private readonly ApplicationDbContext _context;
private readonly IRoomService _roomService;
public AccountantsController(ApplicationDbContext context, IRoomService roomService)
{
_context = context;
_roomService = roomService;
}
public IActionResult Index()
{
var accountants = _context.Accountants.Include(a => a.Room).ToList();
return View(accountants);
}
[HttpGet]
public IActionResult Index(string searchQuery)
{
var accountants = _context.Accountants.Include(a => a.Room).AsQueryable();
if (!string.IsNullOrWhiteSpace(searchQuery))
{
accountants = accountants.Where(a => a.LastName.Contains(searchQuery) || a.Name.Contains(searchQuery));
}
return View(accountants.ToList());
}
public IActionResult Details(int? id)
{
if (id == null || _context.Accountants == null)
{
return NotFound();
}
var accountant = _context.Accountants
.FirstOrDefault(m => m.Id == id);
if (accountant == null)
{
return NotFound();
}
ViewBag.Rooms = _context.Rooms.ToList(); // Передаем список комнат снова
return View(accountant);
}
public IActionResult Create()
{
ViewBag.Rooms = _context.Rooms.ToList(); // Передаем список комнат снова
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult Create(Accountant accountant)
{
if (accountant == null)
{
return RedirectToAction(nameof(Index));
}
if (ModelState.IsValid)
{
ViewBag.Rooms = _context.Rooms.ToList(); // Передаем список комнат снова
return View(accountant);
}
// Найти комнату по идентификатору
var room = _context.Rooms.Find(accountant.RoomId);
if (room == null)
{
ModelState.AddModelError("", "Указанной комнаты не существует.");
ViewBag.Rooms = _context.Rooms.ToList(); // Передаем список комнат снова
}
// Проверить наличие свободных мест
if (room?.AvailablePlaces > 0)
{
// Добавить бухгалтера
accountant.RoomId = room.Id; // Убедитесь, что RoomId установлен
_context.Accountants.Add(accountant);
_context.SaveChanges(); // Сохраняем бухгалтера
// Уменьшить количество свободных мест
room.AvailablePlaces--;
_context.Update(room);
_context.SaveChanges(); // Сохраняем изменения в комнате
return RedirectToAction(nameof(Index));
}
else
{
ModelState.AddModelError("", "В комнате нет свободных мест.");
ViewBag.Rooms = _context.Rooms.ToList(); // Передаем список комнат снова
return View(accountant);
}
}
public IActionResult Edit(int? id)
{
var accountant = _context.Accountants.Include(a => a.Room).FirstOrDefault(a => a.Id == id);
if (accountant == null)
{
return RedirectToAction(nameof(Index));
}
ViewData["AccountantId"] = accountant.Id;
ViewBag.Rooms = _context.Rooms.ToList(); // Передаем список комнат
return View(accountant); // <-- Здесь исправлено
}
[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult Edit(Accountant accountant)
{
if (!ModelState.IsValid)
{
_context.Update(accountant);
_context.SaveChanges();
return RedirectToAction(nameof(Index));
}
ViewData["AccountantId"] = accountant.Id; // Обновляем ID для передачи
ViewBag.Rooms = _context.Rooms.ToList(); // Передаем список комнат
return View(accountant);
}
public async Task<IActionResult> Delete(int id)
{
var accountant = await _context.Accountants.FindAsync(id);
if (accountant == null)
{
return RedirectToAction(nameof(Index));
}
_context.Remove(accountant);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
}
}
Пояснения по запуску программы
в архиве с данных проектом приложена инструкция в формате Word. Внимательно читаем и в точности выполняем все действия. Инструкция несет своей целью помочь вам разобраться с запуском и рабой с приложением.
Приложения
В качестве приложений представлены: 1. схема БД и 2. Диаграмма классов




Телеграм
-