Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

إنشاء التقارير

جزء من قسم Logic & Flow في رحلة C# على Coddy — الدرس 44 من 66.

challenge icon

التحدي

متوسط

الآن بعد أن أصبح لدينا نظام الدرجات، لنقم بإنشاء وحدة تقارير لإنشاء تقارير منسقة حول أداء الطلاب. قم بإنشاء فئة تسمى ReportGenerator تحتوي على هذه الطرق:

  1. GenerateStudentReport(int[][] scoreGrid, int studentIndex): تعيد سلسلة نصية منسقة تقدم تقريراً عن درجات طالب معين، ومتوسطه، ودرجته الحرفية.
    • التنسيق: "Student #X | Average: YY.Y | Grade: Z\nAssignment scores: S1, S2, S3, ..." حيث S1, S2, S3, ... هي الدرجات الرقمية لكل مهمة.
    • بالنسبة للمهام غير المصنفة (درجة -1)، اعرض "N/A" بدلاً من الدرجة.
    • أعد "Invalid student index" لأي فهرس طالب غير صالح.
  2. GenerateClassSummary(int[][] scoreGrid): تعيد سلسلة نصية منسقة تلخص أداء الفصل.
    • التنسيق: "Class Summary\nTotal Students: X\nClass Average: YY.Y\nGrade Distribution: A: #, B: #, C: #, D: #, F: #"
  3. GenerateAssignmentReport(int[][] scoreGrid, int assignmentIndex): تعيد سلسلة نصية منسقة تحتوي على إحصائيات لمهمة معينة.
    • التنسيق: "Assignment #X | Average: YY.Y | Completion Rate: Z%"
    • معدل الإكمال هو النسبة المئوية للطلاب الذين لديهم درجة لهذه المهمة (ليست -1).
    • أعد "Invalid assignment index" لأي فهرس مهمة غير صالح.

جرّب بنفسك

using System; // لا تحذف هذا السطر
using System.Text;

public class ReportGenerator
{
    public static string GenerateStudentReport(int[][] scoreGrid, int studentIndex)
    {
        // اكتب الكود الخاص بك هنا
        
    }
    
    public static string GenerateClassSummary(int[][] scoreGrid)
    {
        // اكتب الكود الخاص بك هنا
        
    }
    
    public static string GenerateAssignmentReport(int[][] scoreGrid, int assignmentIndex)
    {
        // اكتب الكود الخاص بك هنا
        
    }
}

// مطلوب للاختبار - لا تقم بالتعديل
public class DataCollector
{
    public static int[][] CreateScoreGrid(int students, int assignments)
    {
        int[][] scoreGrid = new int[students][];
        for (int i = 0; i < students; i++)
        {
            scoreGrid[i] = new int[assignments];
        }
        return scoreGrid;
    }
    
    public static bool ValidateScore(int score)
    {
        return score >= 0 && score <= 100;
    }
    
    public static int[][] PopulateWithDefaultValues(int[][] scoreGrid)
    {
        for (int i = 0; i < scoreGrid.Length; i++)
        {
            for (int j = 0; j < scoreGrid[i].Length; j++)
            {
                scoreGrid[i][j] = -1;
            }
        }
        return scoreGrid;
    }
}

public class DataEntry
{
    public static int SetStudentScore(int[][] scoreGrid, int studentIndex, int assignmentIndex, int score)
    {
        // التحقق من صحة مؤشرات النطاق
        if (studentIndex < 0 || studentIndex >= scoreGrid.Length || 
            assignmentIndex < 0 || assignmentIndex >= scoreGrid[studentIndex].Length)
        {
            return -1;
        }
        
        // التحقق من صحة الدرجة
        if (!DataCollector.ValidateScore(score))
        {
            return -2;
        }
        
        // تعيين الدرجة
        scoreGrid[studentIndex][assignmentIndex] = score;
        return 0;
    }
    
    public static int UpdateAllScores(int[][] scoreGrid, int[] studentIndices, int assignmentIndex, int score)
    {
        int successCount = 0;
        
        for (int i = 0; i < studentIndices.Length; i++)
        {
            int result = SetStudentScore(scoreGrid, studentIndices[i], assignmentIndex, score);
            if (result == 0)
            {
                successCount++;
            }
        }
        
        return successCount;
    }
}

public class DataAnalyzer
{
    public static double CalculateStudentAverage(int[][] scoreGrid, int studentIndex)
    {
        // التحقق مما إذا كان مؤشر الطالب صالحاً
        if (studentIndex < 0 || studentIndex >= scoreGrid.Length)
        {
            return -1;
        }
        
        int sum = 0;
        int count = 0;
        
        // حساب مجموع الدرجات الصالحة
        for (int j = 0; j < scoreGrid[studentIndex].Length; j++)
        {
            int score = scoreGrid[studentIndex][j];
            if (score != -1)  // تجاهل التكليفات غير المصححة
            {
                sum += score;
                count++;
            }
        }
        
        // إرجاع المتوسط أو 0 إذا لم تكن هناك درجات صالحة
        return count > 0 ? (double)sum / count : 0;
    }
    
    public static double CalculateAssignmentAverage(int[][] scoreGrid, int assignmentIndex)
    {
        // التحقق مما إذا كان هناك أي طلاب
        if (scoreGrid.Length == 0)
        {
            return -1;
        }
        
        // التحقق مما إذا كان مؤشر التكليف صالحاً
        if (assignmentIndex < 0 || assignmentIndex >= scoreGrid[0].Length)
        {
            return -1;
        }
        
        int sum = 0;
        int count = 0;
        
        // حساب مجموع الدرجات الصالحة للتكليف
        for (int i = 0; i < scoreGrid.Length; i++)
        {
            if (assignmentIndex < scoreGrid[i].Length)
            {
                int score = scoreGrid[i][assignmentIndex];
                if (score != -1)  // تجاهل التكليفات غير المصححة
                {
                    sum += score;
                    count++;
                }
            }
        }
        
        // إرجاع المتوسط أو 0 إذا لم تكن هناك درجات صالحة
        return count > 0 ? (double)sum / count : 0;
    }
    
    public static int[] FindHighestScore(int[][] scoreGrid)
    {
        int highestStudentIndex = 0;
        int highestAssignmentIndex = 0;
        int highestScore = -1;
        
        // البحث عن أعلى درجة
        for (int i = 0; i < scoreGrid.Length; i++)
        {
            for (int j = 0; j < scoreGrid[i].Length; j++)
            {
                int currentScore = scoreGrid[i][j];
                if (currentScore > highestScore)
                {
                    highestScore = currentScore;
                    highestStudentIndex = i;
                    highestAssignmentIndex = j;
                }
            }
        }
        
        return new int[] { highestStudentIndex, highestAssignmentIndex, highestScore };
    }
}

public class GradingSystem
{
    public static string ConvertToLetterGrade(double score)
    {
        if (score < 0 || score > 100)
        {
            return "N/A";
        }
        else if (score >= 90)
        {
            return "A";
        }
        else if (score >= 80)
        {
            return "B";
        }
        else if (score >= 70)
        {
            return "C";
        }
        else if (score >= 60)
        {
            return "D";
        }
        else
        {
            return "F";
        }
    }
    
    public static string GetStudentGrade(int[][] scoreGrid, int studentIndex)
    {
        double average = DataAnalyzer.CalculateStudentAverage(scoreGrid, studentIndex);
        
        if (average == -1)
        {
            return "N/A";
        }
        
        return ConvertToLetterGrade(average);
    }
    
    public static int[] GetClassDistribution(int[][] scoreGrid)
    {
        int[] distribution = new int[5]; // [A, B, C, D, F]
        
        for (int i = 0; i < scoreGrid.Length; i++)
        {
            string grade = GetStudentGrade(scoreGrid, i);
            
            switch (grade)
            {
                case "A":
                    distribution[0]++;
                    break;
                case "B":
                    distribution[1]++;
                    break;
                case "C":
                    distribution[2]++;
                    break;
                case "D":
                    distribution[3]++;
                    break;
                case "F":
                    distribution[4]++;
                    break;
                // لا يتم احتساب درجات N/A في التوزيع
            }
        }
        
        return distribution;
    }
}

جميع دروس Logic & Flow