Programmeerimis tunnis on meil põhiliseks projektiks olnud TallinnaRakenduslikKolledž ülessanne mille eesmärk on õpetajate ja õpilaste haldus hüpoteetilises koolis.




Projekt töötab kasutades neid Controllereid, Views ja Mudelid.
public class CoursesController : Controller
{
private readonly SchoolContext _context;
public CoursesController(SchoolContext context)
{
_context = context;
}
public async Task<IActionResult> Index()
{
var courses = _context.Courses.Include(c => c.Department);
return View(await courses.ToListAsync());
}
using System.ComponentModel.DataAnnotations;
namespace TallinnaRakenduslikKolledzKaur.Models
{
public class Student
{
[Key]
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public ICollection<Enrollment>? Enrollments { get; set; }
public DateTime EnrollmentDate { get; set; }
public int? GPA { get; set; }
public ICollection<Commendation>? Commendations { get; set; } /* Kiitused */
public ICollection<Mark>? Marks { get; set; } /* Märkused */
}
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Course>().ToTable("Course");
modelBuilder.Entity<Commendation>().ToTable("Commendation");
modelBuilder.Entity<Enrollment>().ToTable("Enrollment");
modelBuilder.Entity<Mark>().ToTable("Mark");
modelBuilder.Entity<Student>().ToTable("Student");
modelBuilder.Entity<Instructor>().ToTable("Instructor");
modelBuilder.Entity<CourseAssignment>().ToTable("CourseAssignment");
modelBuilder.Entity<OfficeAssignment>().ToTable("OfficeAssignment");
modelBuilder.Entity<Department>().ToTable("Department");
modelBuilder.Entity<Book>().ToTable("Books");
modelBuilder.Entity<Delinquent>().ToTable("Delinquents");
}
<form asp-action="Create">
<input type="hidden" asp-for="RowVersion" value="@Html.Raw("0")"/>
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group">
<label asp-for="Name" class="control-label"></label>
<input asp-for="Name" class="control-label"/>
<span asp-validation-for="Name" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Budget" class="control-label"></label>
<input asp-for="Budget" class="control-label" />
<span asp-validation-for="Budget" class="text-danger"></span>
</div>
Vaated
Iga vaade controllib erinevat osa projektist.
Books vaade controllib Books mudelit, mis pidi näitama see mis raamatud Kolledž-is oli.
Courses vaade näitab mis kursused on Kolledž-is.
Delinquents vaade näitab Kolledž-is olevad pahalased.
Departments vaade näitab Kolledž-is olevad töökohad.
Instructors vaade näitab Kolledž-is olevad töötajad
Students näitab kõik Kolledž-i õpetajad.
@model IEnumerable<TallinnaRakenduslikKolledzKaur.Models.Book>
@{
ViewData["Title"] = "Raamatud";
}
<h2>Raamatud</h2>
<p>
<a asp-action="Create">Tee uus raamat</a>
</p>
<table class="table">
<thead>
<tr>
<th>@Html.DisplayNameFor(Model => Model.BookId)</th>
<th>@Html.DisplayNameFor(Model => Model.Title)</th>
<th>@Html.DisplayNameFor(Model => Model.PageCount)</th>
<th>@Html.DisplayNameFor(Model => Model.TotalStock)</th>
<th>@Html.DisplayNameFor(Model => Model.AmountBorrowed)</th>
<th>@Html.DisplayNameFor(Model => Model.CurrentStock)</th>
<th>Tööriistad</th>
</tr>
</thead>
<tbody>
@foreach (var books in Model)
{
<tr>
<td>@Html.DisplayFor(modelItem => books.BookId)</td>
<td>@Html.DisplayFor(modelItem => books.Title)</td>
<td>@Html.DisplayFor(modelItem => books.PageCount)</td>
<td>@Html.DisplayFor(modelItem => books.TotalStock)</td>
<td>@Html.DisplayFor(modelItem => books.AmountBorrowed)</td>
<td>@Html.DisplayFor(modelItem => books.CurrentStock)</td>
<td>
<a asp-action="Delete" asp-route-id="@books.BookId">Kustuta</a>
<a asp-action="Details" asp-route-id="@books.BookId">Details</a>
<a asp-action="Edit" asp-route-id="@books.BookId">Edit</a>
</td>
</tr>
}
</tbody>
</table>
@model TallinnaRakenduslikKolledzKaur.Models.Book
@{ViewData["Title"] = "Uus Kursus";}
<h1>Tee uus kursus</h1>
<h4>Sisesta info:</h4>
<hr />
<div class="row">
<div class="col-md-4">
<form asp-action="Create">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<!--<div>
<label asp-for="CourseId" class="control-label"></label>
<input asp-for="CourseId" class="form-control" />
<span asp-validation-for="CourseId" class="text-danger"></span>
</div> -->
<div>
<label asp-for="Title" class="control-label"></label>
<input asp-for="Title" class="form-control" />
<span asp-validation-for="Title" class="text-danger"></span>
</div>
<div>
<label asp-for="PageCount" class="control-label"></label>
<input asp-for="PageCount" class="form-control" />
<span asp-validation-for="PageCount" class="text-danger"></span>
</div>
<div>
<label asp-for="TotalStock" class="control-label"></label>
<input asp-for="TotalStock" class="form-control" />
<span asp-validation-for="TotalStock" class="text-danger"></span>
</div>
<div>
<label asp-for="AmountBorrowed" class="control-label"></label>
<input asp-for="AmountBorrowed" class="form-control" />
<span asp-validation-for="AmountBorrowed" class="text-danger"></span>
</div>
<div class="form-group">
<input type="submit" value="Tee uus" class="btn btn-primary" /> | <a asp-action="Index" class="btn btn-outline-primary">Tühista</a>
</div>
</form>
</div>
</div>
odel IEnumerable<TallinnaRakenduslikKolledzKaur.Models.Department>
@{
ViewData["Title"] = "Osakonnad";
}
<h1>Osakonnad</h1>
<p>
<a asp-action="Create">Loo uus osakond</a>
</p>
<table class="table">
<thead>
<tr>
<!--<th>@Html.DisplayNameFor(Model => Model.DepartmentID)</th> -->
<th>@Html.DisplayNameFor(Model => Model.Name)</th>
<th>@Html.DisplayNameFor(Model => Model.Budget)</th>
<th>@Html.DisplayNameFor(Model => Model.StartDate)</th>
<th>@Html.DisplayNameFor(Model => Model.Administrator)</th>
<th>@Html.DisplayNameFor(Model => Model.RowVersion)</th>
<th>@Html.DisplayNameFor(Model => Model.Accomplishments)</th>
<th>@Html.DisplayNameFor(Model => Model.WastedHours)</th> <!-- woag, -->
<th>Tööriistad</th>
</tr>
</thead>
<tbody>
@foreach(var department in Model)
{
<tr>
<!--<td>@Html.DisplayFor(modelItem => department.DepartmentID)</td> -->
<td> @Html.DisplayFor(modelItem => department.Name) </td>
<td> @Html.DisplayFor(modelItem => department.Budget) </td>
<td> @Html.DisplayFor(modelItem => department.StartDate) </td>
<td> @Html.DisplayFor(modelItem => department.Administrator) </td>
<td> @Html.DisplayFor(modelItem => department.RowVersion) </td>
<td> @Html.DisplayFor(modelItem => department.Accomplishments) </td>
<td> @Html.DisplayFor(modelItem => department.WastedHours) </td>
<td>
@* /* Muuda */ *@
<a asp-action="Edit" asp-route-id="@department.DepartmentID" class="btn btn-primary">Edit</a>
@* /* Vaata */ *@
<a asp-action="Details" asp-route-id="@department.DepartmentID" class="btn btn-primary">Detail</a>
@* /* Vaata Admin */ *@
@* /* Kustuta */ *@
<a asp-action="Delete" asp-route-id="@department.DepartmentID" class="btn btn-danger">Eemalda</a>
</td>
</tr>
}
</tbody>
</table>
@model TallinnaRakenduslikKolledzKaur.Models.Student
@{
ViewData["Title"] = "Copy õpilane";
}
<h1>Copy õpilane</h1>
<hr />
<div>
<h4>Õpilane @Model.FirstName @Model.LastName</h4>
<hr />
<dl class="row">
<dt class="col-sm-2">@Html.DisplayNameFor(Model => Model.LastName)</dt>
<dd class="col-sm-10">@Html.DisplayFor(Model => Model.LastName)</dd>
</dl>
<dl class="row">
<dt class="col-sm-2">@Html.DisplayNameFor(Model => Model.FirstName)</dt>
<dd class="col-sm-10">@Html.DisplayFor(Model => Model.FirstName)</dd>
</dl>
<dl class="row">
<dt class="col-sm-2">@Html.DisplayNameFor(Model => Model.EnrollmentDate)</dt>
<dd class="col-sm-10">@Html.DisplayFor(Model => Model.EnrollmentDate)</dd>
</dl>
<dl class="row">
<dt class="col-sm-2">@Html.DisplayNameFor(Model => Model.Commendations)</dt>
<dd class="col-sm-10">@Html.DisplayFor(Model => Model.Commendations)</dd>
</dl>
<dl class="row">
<dt class="col-sm-2">@Html.DisplayNameFor(Model => Model.Enrollments)</dt>
<dd class="col-sm-10">@Html.DisplayFor(Model => Model.Enrollments)</dd>
</dl>
<dl class="row">
<dt class="col-sm-2">@Html.DisplayNameFor(Model => Model.Marks)</dt>
<dd class="col-sm-10">@Html.DisplayFor(Model => Model.Marks)</dd>
</dl>
</div>
<form asp-action="Clone">
<input type="hidden" asp-for="Id" />
<input type="submit" asp-route-id="Id"value="Clone" class="btn btn-primary" /> | <a asp-action="Index">Tühista</a>
</form>
Kontrollerid
Iga View vajab Kontrollerit et töödata ka.
public async Task<IActionResult> Delete(int? Id)
{
if (Id == null)
{
return NotFound();
}
var delinquent = await _context.Delinquents.FirstOrDefaultAsync(d => d.BreakerId == Id);
if (delinquent == null)
{
return NotFound();
}
return View(delinquent);
}
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Delete(Delinquent delinquent)
{
if (await _context.Delinquents.AnyAsync(d => d.BreakerId == delinquent.BreakerId))
{
_context.Delinquents.Remove(delinquent);
await _context.SaveChangesAsync();
}
return RedirectToAction("Index");
}
public class DepartmentsController : Controller
{
private readonly SchoolContext _context;
public DepartmentsController(SchoolContext context)
{
_context = context;
}
public async Task<IActionResult> Index()
{
var schoolContext = _context.Departments.Include(d => d.Administrator);
return View(await schoolContext.ToListAsync());
}
using TallinnaRakenduslikKolledzKaur.Data;
using Microsoft.AspNetCore.Mvc;
using TallinnaRakenduslikKolledzKaur.Models;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using System.Reflection;
namespace TallinnaRakenduslikKolledzKaur.Controllers
{
public class InstructorsController : Controller
{
private readonly SchoolContext _context;
public InstructorsController(SchoolContext context)
{
_context = context;
}
public async Task<IActionResult> Index(int? id, int? courseId)
{
var vm = new InstructorIndexData();
vm.Instructors = await _context.Instructors
.Include(i => i.OfficeAssignment)
.Include(i => i.CourseAssignments)
.ToListAsync();
return View(vm);
}
[HttpGet]
public IActionResult Create()
{
var instructor = new Instructor();
instructor.CourseAssignments = new List<CourseAssignment>();
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create(Instructor instructor, string selectedCourses)
{
if (selectedCourses == null)
{
instructor.CourseAssignments = new List<CourseAssignment>();
if (selectedCourses != null)
{
foreach (var course in selectedCourses)
{
var courseToAdd = new CourseAssignment
{
InstructorId = instructor.Id,
CourseID = course
};
instructor.CourseAssignments.Add(courseToAdd);
}
}
}
ModelState.Remove("selectedCourses");
if (ModelState.IsValid)
{
_context.Add(instructor);
await _context.SaveChangesAsync();
return RedirectToAction("Index");
}
//PopulateAssignedCourseData(instructor);
return View(instructor);
}
private void PopulateAssignedCourseData(Instructor instructor)
{
var allCourses = _context.Courses; // leiame kõik kursused
var instructorCourses = new HashSet<int>(instructor.CourseAssignments.Select(c => c.CourseID));
// valime kursused kus courseId on õpetajal olemas
var vm = new List<AssignedCourseData>();
foreach (var course in allCourses)
{
vm.Add(new AssignedCourseData
{
CourseID = course.CourseId,
Title = course.Title,
Assigned = instructorCourses.Contains(course.CourseId)
});
}
ViewData["Courses"] = vm;
}
[HttpGet]
public async Task<IActionResult> Delete(int? id, bool? saveChangesError = false)
{
if (id == null)
{
return NotFound();
}
var deletableInstructor = await _context.Instructors
.FirstOrDefaultAsync(s => s.Id == id);
if (deletableInstructor == null)
{
return NotFound();
}
return View(deletableInstructor);
}
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> DeleteConfirmed(int id)
{
Instructor deletableInstructor = await _context.Instructors
.SingleAsync(i => i.Id == id);
_context.Instructors.Remove(deletableInstructor);
await _context.SaveChangesAsync();
return RedirectToAction("Index");
}
[HttpGet]
public async Task<IActionResult> Details(int? Id)
{
if (Id == null)
{
return NotFound();
}
var instructor = await _context.Instructors.FirstOrDefaultAsync(m => m.Id == Id);
if (instructor == null)
{
return NotFound();
}
return View(instructor);
}
[HttpGet]
public async Task<IActionResult> Edit(int? Id)
{
if (Id == null)
{
return NotFound();
}
var instructor = await _context.Instructors.FirstOrDefaultAsync(m => m.Id == Id);
if (instructor == null)
{
return NotFound();
}
_context.Instructors.Update(instructor);
return View(instructor);
}
[HttpPost, ActionName("Edit")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> EditConfirmed([Bind("Id,LastName,FirstName,HireDate,CourseAssignments,OfficeAssignment,VacationDays,Comments,BirthDate,Status")] Instructor instructor)
{
_context.Instructors.Update(instructor);
await _context.SaveChangesAsync();
return RedirectToAction("Index");
}
public async Task<IActionResult> Quickedit(int? Id)
{
if (Id == null)
{
return NotFound();
}
var instructor = await _context.Instructors.FirstOrDefaultAsync(m => m.Id == Id);
if (instructor == null)
{
return NotFound();
}
_context.Instructors.Update(instructor);
return View(instructor);
}
[HttpPost, ActionName("Quickedit")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> QuickeditConfirmed([Bind("Id,LastName,FirstName,HireDate,CourseAssignments,OfficeAssignment,VacationDays,Comments,BirthDate,Status")] Instructor instructor)
{
_context.Instructors.Update(instructor);
await _context.SaveChangesAsync();
return RedirectToAction("Index");
}
}
}
Mudelid
Need on vajalikud Andmebaasi jaoks.
using System.ComponentModel.DataAnnotations;
namespace TallinnaRakenduslikKolledzKaur.Models
{
public class Book
{
[Key]
public int BookId { get; set; }
public string Title { get; set; }
public int? PageCount { get; set; }
public int TotalStock { get; set; }
public int? AmountBorrowed { get; set; }
public int? CurrentStock
{
get { return TotalStock-AmountBorrowed; }
}
}
}
using System.ComponentModel.DataAnnotations;
namespace TallinnaRakenduslikKolledzKaur.Models
{
public class Course
{
[Key]
public int CourseId { get; set; }
public string Title { get; set; }
public int Credits { get; set; }
public ICollection<Enrollment>? Enrollments { get; set; }
public Department? Department { get; set; }
public int? DepartmentID { get; set; }
public ICollection<CourseAssignment>? CourseAssignments { get; set; }
}
}
using System.ComponentModel.DataAnnotations;
namespace TallinnaRakenduslikKolledzKaur.Models
{
public class Student
{
[Key]
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public ICollection<Enrollment>? Enrollments { get; set; }
public DateTime EnrollmentDate { get; set; }
public int? GPA { get; set; }
public ICollection<Commendation>? Commendations { get; set; } /* Kiitused */
public ICollection<Mark>? Marks { get; set; } /* Märkused */
}
}