/// <summary> /// Feltétel kiértékelése. /// </summary> /// <param name="proxy">A hallgatót és kurzusokat összekötő proxy.</param> /// <returns>A kiértékelés eredménye.</returns> public Result Evaluate(StudentCourseProxy proxy) { Course course = proxy.Check(this.Code); if (course == null) { // Ha nem volt ilyen kurzusa return(new Result(this.LongName, false)); } else { if (this.Signature || !course.HasCompleted || (this.Exclusive && !proxy.Lock(this.Code))) { // Ha volt ilyen kurzusa, és // - aláírás kell csak belőle // - nem teljesítette // - kizárás miatt nem használható // Ez az eredmény nem módosítja az átlagot. return(new Result(this.LongName, this.Signature ? course.HasSignature : false)); } else { // Ha a kurzus használható és teljesített, // az eredmény módosítja az átlagot. return(new Result(course, !proxy.Use(this.Code))); } } }
/// <summary> /// Kiértékelés /// </summary> public Result Evaluate(StudentCourseProxy proxy) { Result result = new Result(this.Name); result.Semester = this.Semester > 0 ? this.Semester : null; if (this.OriginalEducationProgram != null && proxy.OriginalEducationProgram != this.OriginalEducationProgram) { // Ilyenkor nincs meg a kritérium, mégis úgy számít, mintha meglenne result.Weight = this.Weight; result.Value = false; return(result); } // Szükséges igaz feltételek száma int required = this.Requirement > 0 ? this.Requirement : this.Children.Sum(child => child.Weight) + this.Requirement; foreach (IExpression child in this.Children.OrderByDescending(c => c.Order(proxy))) { if (required <= 0 && !this.EvaluateAll) { break; } Result subresult = child.Evaluate(proxy); required -= subresult.Weight; if (subresult || child is MatchGroup) { // Az igaz feltételeket és a feltételcsoportokat őrizzük csak meg az eredményfában. result += subresult; } } // Ha elég kritérium megvolt result.Value = required <= 0; if (!result && result.Credit < this.Credit) { // Ha nem teljesül a feltétel, hiányoznak a kreditek. result.Credit = this.Credit; } // Érték továbbadás if (this.PassWeight) { result.Weight = (result && !this.EvaluateAll) ? this.Weight : this.Weight - required; } else { result.Weight = result ? 1 : 0; } return(result); }
/// <summary> /// A sorbarendezéshez a kreditsúlyozott osztályzatot használjuk. Az aláírás értéke, ahogy a nem /// teljesített tárgyé is, nulla. A kizárásos tárgyak súlyozása negatív. /// </summary> /// <param name="proxy">A hallgatókat kurzusokkal összekötő proxy.</param> /// <returns>Kreditsúlyozott átlag mint rendezőszám. [?]</returns> public double Order(StudentCourseProxy proxy) { if (!this.Signature) { Course course = proxy.Check(this.Code); if (course != null && course.HasCompleted) { return(course.Credit * course.Grade + (this.Exclusive ? -100 : 0)); } } return(0); }
/// <summary> /// A feltétel rendezőszáma. Ez valósítja meg a jegyalapú súlyozást, így mindig /// a legelőnyösebb kritériumok kerülnek befogadásra. /// </summary> /// <param name="source">A hallgatót és kurzust összekötő proxy.</param> /// <returns>Rendezőszám.</returns> public double Order(StudentCourseProxy source) { return(0); }