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 meetoditCount()õpilaste ja kursuste arvu leidmiseksAbout()– Kuvab “Meist” leheContact()– 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ärgiThenBy(s => s.FirstName)– seejärel eesnime järgiToList()– teisendab päringu tulemused nimekirjaksFirstOrDefault(s => s.Id == id)– leiab esimese sobiva kirje või tagastab nullFind(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 andmedOrderBy(c => c.Name)– sorteerib kursused nime järgiToList()– muudab päringu tulemused nimekirjaksFirstOrDefault(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 missioonContact.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 andmetegaCreate.cshtml– Vorm uue õpilase lisamiseks koos dropdown-iga kursuse valimiseksEdit.cshtml– Vorm õpilase andmete muutmiseksDelete.cshtml– Kinnitusleht õpilase kustutamiseks
Views/Courses/
Index.cshtml– Kursuste nimekiri koos õpilaste arvugaDetails.cshtml– Kursuse detailvaade koos kõigi seal õppivate õpilaste nimekirjagaCreate.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 identifikaatorFirstName(nvarchar) – õpilase eesnimiLastName(nvarchar) – õpilase perekonnanimiEmail(nvarchar) – õpilase e-posti aadressEnrollmentDate(datetime) – sisseastumise kuupäevCourseId(int, Foreign Key) – viide kursusele
Courses tabel:
Id(int, Primary Key) – kursuse unikaalne identifikaatorName(nvarchar) – kursuse nimetusDescription(nvarchar) – kursuse kirjeldusCredits(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
CourseIdvä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
- Kasutaja avab avalehe – HomeController Index() meetod loeb andmebaasist õpilaste ja kursuste arvu ning kuvab selle avalehel
- Õpilaste nimekiri – Kui kasutaja navigeerib õpilaste lehele, StudentsController Index() meetod laeb kõik õpilased koos nende kursustega ja kuvab need tabelina
- Uue õpilase lisamine – Create() meetod kuvab vormi, kuhu saab sisestada õpilase andmed ja valida kursuse dropdown-ist. POST Create() meetod salvestab andmed andmebaasi
- Õpilase muutmine – Edit() meetod laeb olemasoleva õpilase andmed vormi ning POST Edit() meetod uuendab andmebaasi
- 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.