TallinnaRakenduslikKolledž Projekti Kirjeldus

Siin on põhjalik kirjeldus, mida saad oma WordPressi portfooliosse lisada:


TallinnaRakenduslikKolledž – Õppeasutuse Veebileht

Projekti Eesmärk

TallinnaRakenduslikKolledž on ASP.NET MVC raamistikul põhinev veebileht, mis on loodud õppeasutuse haldamiseks. Projekt võimaldab hallata õpilaste andmeid, kursusi ning pakkuda ülevaadet kooli tegevusest. Peamine eesmärk on pakkuda kasutajasõbralikku platvormi, kus saab vaadata ja hallata õpilaste informatsiooni ning õppekavu.

GitHub repositoorium: https://github.com/MRfrend01/tallinnarakenduskoledz_saimon_siipan.git


MVC Struktuuri Rakendamine Projektis

Projekt järgib klassikalist Model-View-Controller (MVC) arhitektuuri mustrit, mis eraldab äriloogika (Model), kasutajaliidese (View) ja nende vahelise suhtluse (Controller).

Models (Mudelid)

Mudelid esindavad andmebaasi tabeleid ja nende omadusi. Peamised mudelid on:

Student.cs – õpilaste andmete mudel:

csharp

public class Student
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Email { get; set; }
    public DateTime EnrollmentDate { get; set; }
    public int CourseId { get; set; }
    public virtual Course Course { get; set; }
}

Course.cs – kursuste mudel:

csharp

public class Course
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public int Credits { get; set; }
    public virtual ICollection<Student> Students { get; set; }
}

Controllers (Kontrollerid)

Kontrollerid käsitlevad kasutaja päringuid ja suhtlevad mudelitega.

HomeController.cs – pealeht ja üldine informatsioon:

csharp

public class HomeController : Controller
{
    private readonly ApplicationDbContext _context;

    public HomeController(ApplicationDbContext context)
    {
        _context = context;
    }

    // GET: Home/Index
    public ActionResult Index()
    {
        var totalStudents = _context.Students.Count();
        var totalCourses = _context.Courses.Count();
        ViewBag.TotalStudents = totalStudents;
        ViewBag.TotalCourses = totalCourses;
        return View();
    }

    public ActionResult About()
    {
        return View();
    }

    public ActionResult Contact()
    {
        return View();
    }
}

Meetodite selgitus:

  • Index() – Kuvab avalehe, kasutab LINQ meetodit Count() õpilaste ja kursuste arvu leidmiseks
  • About() – Kuvab “Meist” lehe
  • Contact() – Kuvab kontaktilehe

StudentsController.cs – õpilaste haldamine:

csharp

public class StudentsController : Controller
{
    private readonly ApplicationDbContext _context;

    public StudentsController(ApplicationDbContext context)
    {
        _context = context;
    }

    // GET: Students
    public ActionResult Index()
    {
        var students = _context.Students
            .Include(s => s.Course)
            .OrderBy(s => s.LastName)
            .ThenBy(s => s.FirstName)
            .ToList();
        return View(students);
    }

    // GET: Students/Details/5
    public ActionResult Details(int id)
    {
        var student = _context.Students
            .Include(s => s.Course)
            .FirstOrDefault(s => s.Id == id);
        
        if (student == null)
        {
            return HttpNotFound();
        }
        return View(student);
    }

    // GET: Students/Create
    public ActionResult Create()
    {
        ViewBag.Courses = _context.Courses
            .OrderBy(c => c.Name)
            .ToList();
        return View();
    }

    // POST: Students/Create
    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Create(Student student)
    {
        if (ModelState.IsValid)
        {
            _context.Students.Add(student);
            _context.SaveChanges();
            return RedirectToAction("Index");
        }
        ViewBag.Courses = _context.Courses.ToList();
        return View(student);
    }

    // GET: Students/Edit/5
    public ActionResult Edit(int id)
    {
        var student = _context.Students.Find(id);
        if (student == null)
        {
            return HttpNotFound();
        }
        ViewBag.Courses = _context.Courses
            .OrderBy(c => c.Name)
            .ToList();
        return View(student);
    }

    // POST: Students/Edit/5
    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Edit(Student student)
    {
        if (ModelState.IsValid)
        {
            _context.Entry(student).State = EntityState.Modified;
            _context.SaveChanges();
            return RedirectToAction("Index");
        }
        ViewBag.Courses = _context.Courses.ToList();
        return View(student);
    }

    // GET: Students/Delete/5
    public ActionResult Delete(int id)
    {
        var student = _context.Students
            .Include(s => s.Course)
            .FirstOrDefault(s => s.Id == id);
        
        if (student == null)
        {
            return HttpNotFound();
        }
        return View(student);
    }

    // POST: Students/Delete/5
    [HttpPost, ActionName("Delete")]
    [ValidateAntiForgeryToken]
    public ActionResult DeleteConfirmed(int id)
    {
        var student = _context.Students.Find(id);
        _context.Students.Remove(student);
        _context.SaveChanges();
        return RedirectToAction("Index");
    }
}

LINQ meetodite selgitus StudentsController-is:

  • Include(s => s.Course) – laeb seotud kursuse andmed (eager loading)
  • OrderBy(s => s.LastName) – sorteerib õpilased perekonnanime järgi
  • ThenBy(s => s.FirstName) – seejärel eesnime järgi
  • ToList() – teisendab päringu tulemused nimekirjaks
  • FirstOrDefault(s => s.Id == id) – leiab esimese sobiva kirje või tagastab null
  • Find(id) – leiab kirje primaarvõtme järgi

CoursesController.cs – kursuste haldamine:

csharp

public class CoursesController : Controller
{
    private readonly ApplicationDbContext _context;

    public CoursesController(ApplicationDbContext context)
    {
        _context = context;
    }

    // GET: Courses
    public ActionResult Index()
    {
        var courses = _context.Courses
            .Include(c => c.Students)
            .OrderBy(c => c.Name)
            .ToList();
        return View(courses);
    }

    // GET: Courses/Details/5
    public ActionResult Details(int id)
    {
        var course = _context.Courses
            .Include(c => c.Students)
            .FirstOrDefault(c => c.Id == id);
        
        if (course == null)
        {
            return HttpNotFound();
        }
        return View(course);
    }

    // GET: Courses/Create
    public ActionResult Create()
    {
        return View();
    }

    // POST: Courses/Create
    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Create(Course course)
    {
        if (ModelState.IsValid)
        {
            _context.Courses.Add(course);
            _context.SaveChanges();
            return RedirectToAction("Index");
        }
        return View(course);
    }
}

LINQ meetodite selgitus CoursesController-is:

  • Include(c => c.Students) – laeb kursusega seotud õpilaste andmed
  • OrderBy(c => c.Name) – sorteerib kursused nime järgi
  • ToList() – muudab päringu tulemused nimekirjaks
  • FirstOrDefault(c => c.Id == id) – leiab kursuse ID järgi

Views (Vaated)

Views/Home/

  • Index.cshtml – Avaleht, kus kuvatakse kooli üldstatistikat (õpilaste arv, kursuste arv). Kasutab ViewBag-i andmete kuvamiseks.
  • About.cshtml – Kooli tutvustus ja missioon
  • Contact.cshtml – Kontaktinformatsioon ja kontaktvorm

Views/Students/

  • Index.cshtml – Õpilaste nimekiri tabelina, kus on kuvatud eesnimi, perekonnanimi, email ja kursus. Sisaldab linke detailidele, muutmisele ja kustutamisele.

cshtml

@model IEnumerable<TallinnaRakenduslikKolledž.Models.Student>

<h2>Õpilased</h2>

<p>
    @Html.ActionLink("Lisa uus õpilane", "Create", null, new { @class = "btn btn-primary" })
</p>

<table class="table table-striped">
    <thead>
        <tr>
            <th>Eesnimi</th>
            <th>Perekonnanimi</th>
            <th>Email</th>
            <th>Kursus</th>
            <th>Toimingud</th>
        </tr>
    </thead>
    <tbody>
        @foreach (var student in Model)
        {
            <tr>
                <td>@student.FirstName</td>
                <td>@student.LastName</td>
                <td>@student.Email</td>
                <td>@student.Course.Name</td>
                <td>
                    @Html.ActionLink("Vaata", "Details", new { id = student.Id }) |
                    @Html.ActionLink("Muuda", "Edit", new { id = student.Id }) |
                    @Html.ActionLink("Kustuta", "Delete", new { id = student.Id })
                </td>
            </tr>
        }
    </tbody>
</table>
  • Details.cshtml – Üksiku õpilase detailvaade koos kõigi andmetega
  • Create.cshtml – Vorm uue õpilase lisamiseks koos dropdown-iga kursuse valimiseks
  • Edit.cshtml – Vorm õpilase andmete muutmiseks
  • Delete.cshtml – Kinnitusleht õpilase kustutamiseks

Views/Courses/

  • Index.cshtml – Kursuste nimekiri koos õpilaste arvuga
  • Details.cshtml – Kursuse detailvaade koos kõigi seal õppivate õpilaste nimekirjaga
  • Create.cshtml – Vorm uue kursuse loomiseks

Andmebaasi Tabelid ja Omadused

Projekt kasutab Entity Framework Code First lähenemist. Andmebaas genereeritakse automaatselt mudelite põhjal.

Students tabel:

  • Id (int, Primary Key) – õpilase unikaalne identifikaator
  • FirstName (nvarchar) – õpilase eesnimi
  • LastName (nvarchar) – õpilase perekonnanimi
  • Email (nvarchar) – õpilase e-posti aadress
  • EnrollmentDate (datetime) – sisseastumise kuupäev
  • CourseId (int, Foreign Key) – viide kursusele

Courses tabel:

  • Id (int, Primary Key) – kursuse unikaalne identifikaator
  • Name (nvarchar) – kursuse nimetus
  • Description (nvarchar) – kursuse kirjeldus
  • Credits (int) – ainepunktide arv

Seoste kirjeldus:

  • Üks-mitmele seos Students ja Courses vahel (üks kursus võib omada paljusid õpilasi)
  • Foreign Key seos realiseeritud läbi CourseId välja Students tabelis

ApplicationDbContext.cs:

csharp

public class ApplicationDbContext : DbContext
{
    public ApplicationDbContext() : base("DefaultConnection")
    {
    }

    public DbSet<Student> Students { get; set; }
    public DbSet<Course> Courses { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Student>()
            .HasRequired(s => s.Course)
            .WithMany(c => c.Students)
            .HasForeignKey(s => s.CourseId);
    }
}

Kuidas Projekt Töötab

  1. Kasutaja avab avalehe – HomeController Index() meetod loeb andmebaasist õpilaste ja kursuste arvu ning kuvab selle avalehel
  2. Õpilaste nimekiri – Kui kasutaja navigeerib õpilaste lehele, StudentsController Index() meetod laeb kõik õpilased koos nende kursustega ja kuvab need tabelina
  3. Uue õpilase lisamine – Create() meetod kuvab vormi, kuhu saab sisestada õpilase andmed ja valida kursuse dropdown-ist. POST Create() meetod salvestab andmed andmebaasi
  4. Õpilase muutmine – Edit() meetod laeb olemasoleva õpilase andmed vormi ning POST Edit() meetod uuendab andmebaasi
  5. Kustutamine – Delete() meetod kuvab kinnituse ning POST DeleteConfirmed() kustutab õpilase andmebaasist

Kõik andmebaasi operatsioonid käivad läbi Entity Framework-i, mis muudab SQL päringud LINQ päringuteks ja vastupidi.