コード例 #1
0
        /// <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)));
                }
            }
        }
コード例 #2
0
        /// <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);
        }
コード例 #3
0
 /// <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);
 }
コード例 #4
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);
 }