Beispiel #1
0
        public Tuple <bool, STANDING, bool> HasGraduated(int diplomaId, int studentId)
        {
            var diploma = _diplomaRepository.GetDiploma(diplomaId);
            var student = _studentRepository.GetStudent(studentId);

            if (diploma == null || student == null)
            {
                throw new NullReferenceException("Invalid input paramaters");
            }

            var  credits   = 0;
            var  average   = 0;
            bool GotCredit = false;

            //replaced nested for loops with for each loops
            foreach (var req in diploma.Requirements)       //iterate through each requirement
            {
                foreach (var studCourse in student.Courses) //iterate through each course
                {
                    var requirement = _requirementRepository.GetRequirement(req.Id);

                    //Lambda expression used(much cleaner code), removed nested for loops, it will return null in case course id is not matched
                    var course = requirement.Courses.SingleOrDefault(x => x.Id == studCourse.Id);

                    if (course != null)
                    {
                        average += studCourse.Mark;
                        if (studCourse.Mark > requirement.MinimumMark)
                        {
                            credits += requirement.Credits;
                        }
                    }
                }
            }


            average = average / student.Courses.Count();


            GotCredit = (credits >= diploma.Credits) ? true : false;

            var  standing    = Common.Common.GetStandingBasedOnAverageMarks(average);
            bool IsGraduated = Common.Common.IsGraduatedBasedOnStanding(standing);

            return(new Tuple <bool, STANDING, bool>(IsGraduated, standing, GotCredit));
        }
Beispiel #2
0
        public void CalculateStudentGrade(Diploma diploma, Student student)
        {
            var    credits      = 0; //completed Credit
            double average      = 0;
            var    totalCredits = 0;

            if (!ValidateInput(diploma, student))
            {
                student.TotalAverage     = 0;
                student.CompletedCredits = 0;
                return;
            }

            for (int i = 0; i < diploma.Requirements.Length; i++)
            {
                for (int j = 0; j < student.Courses.Length; j++)
                {
                    var requirement = _requirementRepository.GetRequirement(diploma.Requirements[i]);

                    if (requirement == null)
                    {
                        continue;
                    }

                    for (int k = 0; k < requirement.Courses.Length; k++)
                    {
                        if (requirement.Courses[k] == student.Courses[j].Id)
                        {
                            average      += student.Courses[j].Mark * requirement.Credits;
                            totalCredits += requirement.Credits;
                            //corrected to consider credit  >= min mark
                            if (student.Courses[j].Mark >= requirement.MinimumMark)
                            {
                                credits += requirement.Credits;
                            }
                        }
                    }
                }
            }

            student.TotalAverage     = Math.Round((average / totalCredits), 2);
            student.CompletedCredits = credits;
        }
        // Array type is replaced by List type
        public Tuple <bool, STANDING> HasGraduated()
        {
            var credits = 0;
            var average = 0;

            foreach (Requirement req in _diploma.Requirements)
            {
                var requirement = _reqRepo.GetRequirement(req.Id);

                foreach (Course reqCourse in requirement.Courses)
                {
                    foreach (Course stuCourse in _student.Courses)
                    {
                        if (reqCourse.CourseId == stuCourse.CourseId)
                        {
                            average += stuCourse.Mark;

                            if (stuCourse.Mark > requirement.MinimumMark)
                            {
                                credits += requirement.Credits;
                            }
                        }
                    }
                }
            }

            average = average / _student.Courses.Count;

            var standing = STANDING.None;

            if (average < 50)
            {
                standing = STANDING.Remedial;
            }
            else if (average < 80)
            {
                standing = STANDING.Average;
            }
            else if (average < 95)
            {
                standing = STANDING.MagnaCumLaude;
            }
            else
            {
                standing = STANDING.MagnaCumLaude;
            }

            switch (standing)
            {
            case STANDING.Remedial:
                return(new Tuple <bool, STANDING>(false, standing));

            case STANDING.Average:
                return(new Tuple <bool, STANDING>(true, standing));

            case STANDING.SumaCumLaude:
                return(new Tuple <bool, STANDING>(true, standing));

            case STANDING.MagnaCumLaude:
                return(new Tuple <bool, STANDING>(true, standing));

            default:
                return(new Tuple <bool, STANDING>(false, standing));
            }
        }