Menu
CoddyTech

Pembuatan Laporan

Termasuk bagian Logika dan Alur dalam perjalanan C# di Coddy. Pelajaran 44 dari 66.

challenge icon

Tantangan

Sedang

Sekarang setelah kita memiliki sistem penilaian, mari buat module pelaporan untuk menghasilkan laporan berformat tentang performa siswa. Buat class bernama ReportGenerator dengan method berikut:

  1. GenerateStudentReport(int[][] scoreGrid, int studentIndex): Mengembalikan string berformat yang melaporkan nilai, rata-rata, dan nilai huruf seorang siswa tertentu.
    • Format: "Student #X | Average: YY.Y | Grade: Z\nAssignment scores: S1, S2, S3, ..." dengan S1, S2, S3, ... sebagai nilai numerik untuk setiap tugas.
    • Untuk tugas yang belum dinilai (nilai -1), tampilkan "N/A" sebagai pengganti nilai.
    • Kembalikan "Invalid student index" jika indeks siswa tidak valid.
  2. GenerateClassSummary(int[][] scoreGrid): Mengembalikan string berformat yang merangkum performa kelas.
    • Format: "Class Summary\nTotal Students: X\nClass Average: YY.Y\nGrade Distribution: A: #, B: #, C: #, D: #, F: #"
  3. GenerateAssignmentReport(int[][] scoreGrid, int assignmentIndex): Mengembalikan string berformat yang berisi statistik untuk tugas tertentu.
    • Format: "Assignment #X | Average: YY.Y | Completion Rate: Z%"
    • Tingkat penyelesaian adalah persentase siswa yang memiliki nilai untuk tugas ini (bukan -1).
    • Kembalikan "Invalid assignment index" jika indeks tugas tidak valid.

Coba sendiri

using System; // Jangan hapus baris ini
using System.Text;

public class ReportGenerator
{
    public static string GenerateStudentReport(int[][] scoreGrid, int studentIndex)
    {
        // Tulis kodemu di sini
        
    }
    
    public static string GenerateClassSummary(int[][] scoreGrid)
    {
        // Tulis kodemu di sini
        
    }
    
    public static string GenerateAssignmentReport(int[][] scoreGrid, int assignmentIndex)
    {
        // Tulis kodemu di sini
        
    }
}

// Diperlukan untuk pengujian, jangan ubah
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)
    {
        // Periksa apakah ada indeks di luar batas
        if (studentIndex < 0 || studentIndex >= scoreGrid.Length || 
            assignmentIndex < 0 || assignmentIndex >= scoreGrid[studentIndex].Length)
        {
            return -1;
        }
        
        // Validasi nilai
        if (!DataCollector.ValidateScore(score))
        {
            return -2;
        }
        
        // Tetapkan nilai
        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)
    {
        // Periksa apakah indeks siswa valid
        if (studentIndex < 0 || studentIndex >= scoreGrid.Length)
        {
            return -1;
        }
        
        int sum = 0;
        int count = 0;
        
        // Hitung jumlah nilai yang valid
        for (int j = 0; j < scoreGrid[studentIndex].Length; j++)
        {
            int score = scoreGrid[studentIndex][j];
            if (score != -1)  // Abaikan tugas yang belum dinilai
            {
                sum += score;
                count++;
            }
        }
        
        // Kembalikan rata-rata, atau 0 jika tidak ada nilai yang valid
        return count > 0 ? (double)sum / count : 0;
    }
    
    public static double CalculateAssignmentAverage(int[][] scoreGrid, int assignmentIndex)
    {
        // Periksa apakah ada siswa
        if (scoreGrid.Length == 0)
        {
            return -1;
        }
        
        // Periksa apakah indeks tugas valid
        if (assignmentIndex < 0 || assignmentIndex >= scoreGrid[0].Length)
        {
            return -1;
        }
        
        int sum = 0;
        int count = 0;
        
        // Hitung jumlah nilai yang valid untuk tugas ini
        for (int i = 0; i < scoreGrid.Length; i++)
        {
            if (assignmentIndex < scoreGrid[i].Length)
            {
                int score = scoreGrid[i][assignmentIndex];
                if (score != -1)  // Abaikan tugas yang belum dinilai
                {
                    sum += score;
                    count++;
                }
            }
        }
        
        // Kembalikan rata-rata, atau 0 jika tidak ada nilai yang valid
        return count > 0 ? (double)sum / count : 0;
    }
    
    public static int[] FindHighestScore(int[][] scoreGrid)
    {
        int highestStudentIndex = 0;
        int highestAssignmentIndex = 0;
        int highestScore = -1;
        
        // Cari nilai tertinggi
        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;
                // Nilai N/A tidak dihitung dalam distribusi
            }
        }
        
        return distribution;
    }
}

Semua pelajaran di Logika dan Alur

Latihan sendiri: Compiler C# online