TallinnaRakenduslikKolledž

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&lt;Enrollment>? Enrollments { get; set; }
        public DateTime EnrollmentDate { get; set; }

        public int? GPA { get; set; }
        public ICollection&lt;Commendation>? Commendations { get; set; } /* Kiitused */
        public ICollection&lt;Mark>? Marks { get; set; } /* Märkused */



    }
}

Rohkem Detailid: