öğrenci test takip scripti

Genel Forum
Cevapla
muratca61
Site Admin
Mesajlar: 35964
Kayıt: Cmt Ara 21, 2024 7:56 am

öğrenci test takip scripti

Mesaj gönderen muratca61 »

chatgpt sorduk

Kod:Tümünü seç

selam bir php script yapalım.
veritabanı bilgileri :
veritabanı adı:testtakip
veritabanı kullanıcı adı:root
veritabanı şifre:103005ms
bu bilgilerle öncelikle veritabanında gerekli tabloları ve ilişkilendirmeleri hazırlayalım
veritabanına ders isimleri kaydedilecek
bu kaydedilen derslere ait günlük çözülen test sayılar yine kullanıcı tarafından girilecek.
örnek şu şekilde öğrenci Fen/Matematik/Türkçe gibi dersleri kaydedecek.
bu kaıtlı derslere Testler girilecek. Girilecek test ile ilgili Test Adı / Soru Sayısı / Doğru Cevap / Yanlış Cevap / Boş Cevap değerleri girişi yapılabilecek.
Bu şekilde öncelikle Dosya yapısını oluşturalım. Görsellik ve mobil uyumlukluk ön planda olacak.
muratca61
Site Admin
Mesajlar: 35964
Kayıt: Cmt Ara 21, 2024 7:56 am

Re: öğrenci test takip scripti

Mesaj gönderen muratca61 »

Dosya yapısı

Kod:Tümünü seç

/project
│
├── /config
│   └── db.php           # Veritabanı bağlantısı için ayarlar
│
├── /setup
│   └── install.php      # Tabloların oluşturulması için betik
│
├── /public
│   ├── index.php        # Ana sayfa, menü
│   ├── add_course.php   # Ders ekleme formu
│   ├── add_daily_test.php  # Günlük test sayısı girişi formu
│   └── add_test.php     # Test detaylarının girildiği form
│
└── /css
    └── style.css        # Özel stil dosyası (Bootstrap gibi kütüphaneler de eklenebilir)












muratca61
Site Admin
Mesajlar: 35964
Kayıt: Cmt Ara 21, 2024 7:56 am

Re: öğrenci test takip scripti

Mesaj gönderen muratca61 »

sormaya devam ettik

Kod:Tümünü seç


Test Detayları Gir gölümünde sadece Ders Seçimi ve Soru sayısı zorunlu olsun
ana sayfada günlük test grafiği (dairesel derslere göre)
toplam test grafiği (tüm zamanların dairesel ve derslere göre)
Günlük Soru sayısı
ortalama günlük soru sayısı
toplam soru sayısı
mobil uyumlu olsun



muratca61
Site Admin
Mesajlar: 35964
Kayıt: Cmt Ara 21, 2024 7:56 am

Re: öğrenci test takip scripti

Mesaj gönderen muratca61 »

Kod:Tümünü seç

Günlük Test Grafiği görünmüyor. 
Günlük Test Sayısı Gir butonunu kaldır işllevsiz.
Test Detayları Gir butonunu Test Gir olarak değiştir.
Ayrıca tüm girilen eski testleri tarih sırasıyla görebileceğimiz bir bağlantı ve sayfa ekleyelim
bu sayfada girilen tüm yeniden eskiye testler listelensin. Düzenleme , silme , filtreleme ve tüm verilerde arama yapılabilsin
muratca61
Site Admin
Mesajlar: 35964
Kayıt: Cmt Ara 21, 2024 7:56 am

Re: öğrenci test takip scripti

Mesaj gönderen muratca61 »

Kod:Tümünü seç

Günlük Test Grafiği (Derslere Göre)
Bugün için veri bulunamadı. bu bir hata. gün kontrolü yapacak. bugünün tarihi ile aynı test girişleri için bu grafiği oluşturmalı.
Bu web sitesi mobil ağırlıklı kullanılacağı için mobilde çok mobil uyumlu görünmüyor. bu sitesi bir mobil uygulama gibi göstersin. 
genel web site görüntüsünü de daha güzel yapalım. özel bir görüntüsü olmalı

muratca61
Site Admin
Mesajlar: 35964
Kayıt: Cmt Ara 21, 2024 7:56 am

Re: öğrenci test takip scripti

Mesaj gönderen muratca61 »

Kod:Tümünü seç

grafiklerde soru adetleri görünsün
Günlük Soru Sayısı , Ortalama Günlük , Toplam Soru gibi "Günlük Ders Soru Dağılımı" ve  "Toplam Ders Soru Dağılımı" da görünsün ama görselliği bozmadan. 
ayrıca hala mobil de herşey çok küçük görünüyor. tüm sayfaların mobil görünümünü iyileştirmen lazım. görünmüyor seçilmiyor ve yeni veri ekleme test listesi görünümü çok küçük mobil uyumlu değil gibi

muratca61
Site Admin
Mesajlar: 35964
Kayıt: Cmt Ara 21, 2024 7:56 am

Re: öğrenci test takip scripti

Mesaj gönderen muratca61 »

Kod:Tümünü seç

Günlük Test Grafiği (Derslere Göre) ve Toplam Test Grafiği (Tüm Zamanlar, Derslere Göre) grafiklerini kaldıralım.
Dğer Garifklerin Dilimleri içerisinde adetler sürekli görünür olsun.

En Alta Günlük Soru öncesine Dünkü Soru sayısını da ekleyelim. Ayrıca bu alanda Tüm Dersler için ayrı ayrı eğer doğru cevap yanlış cevap ve boş soru sayısına göre puan hesaplaması yapalım. örneğin 20 soru var ise 15 doğru var ise 100/20= 5 puan 5*15 (doğru sayısı) = 75 puan şeklinde her test için hesaplayıp o dersin başarı puanında ortalamasını alsın


muratca61
Site Admin
Mesajlar: 35964
Kayıt: Cmt Ara 21, 2024 7:56 am

Re: öğrenci test takip scripti

Mesaj gönderen muratca61 »

Kod:Tümünü seç

puan hesaplama mantığı yanlış. doğru soru sayısı girilmeyenler testler hesaplamaya hiçbir şekilde dahil edilmeyecek. 
ayrıca Test Detayları Gir SAYFASINDA opsiyonel bile olsa eğer doğru sayı değerine 
veri girilmişse doğru soru + yanlış soru + boş soru sayısı topam soru sayısından büyük olmamalı
Ortalama Başarı Puanı başlığını kısalt ayrıca bunun yanına yine doğru sayı değeri girili ise o derse ait günlük Başarı Puanı ekle
muratca61
Site Admin
Mesajlar: 35964
Kayıt: Cmt Ara 21, 2024 7:56 am

Re: öğrenci test takip scripti

Mesaj gönderen muratca61 »

Kod:Tümünü seç

ana sayfada tıpkı BA & Günlük gibi bir bölüm daha ekleyelim. bu bölümdede yine derslere ait son 10 testin başarı puanına göre her ders için kendi satırında grafik çizsin. bu grafik artan eğiliminde ise yeşil düşen eğiliminde ise kırmızı renkte olsun lütfen tüm kodu ver 
<?php
require_once '../config/db.php';

// İstatistikler için sorgular

// Bugünkü toplam soru sayısı
$stmt = $pdo->prepare("SELECT SUM(soru_sayisi) as total_questions FROM testler WHERE tarih = CURDATE()");
$stmt->execute();
$dailyQuestionResult = $stmt->fetch();
$dailyQuestions = $dailyQuestionResult ? $dailyQuestionResult['total_questions'] : 0;

// Tüm testlerdeki toplam soru sayısı
$stmt = $pdo->prepare("SELECT SUM(soru_sayisi) as total_questions FROM testler");
$stmt->execute();
$totalQuestionResult = $stmt->fetch();
$totalQuestions = $totalQuestionResult ? $totalQuestionResult['total_questions'] : 0;

// Ortalama günlük soru sayısı
$stmt = $pdo->prepare("SELECT AVG(daily_total) as avg_daily FROM (
                            SELECT tarih, SUM(soru_sayisi) as daily_total 
                            FROM testler 
                            GROUP BY tarih
                        ) as sub");
$stmt->execute();
$avgDailyResult = $stmt->fetch();
$avgDailyQuestions = $avgDailyResult ? round($avgDailyResult['avg_daily'], 2) : 0;

// Dünkü toplam soru sayısı
$stmt = $pdo->prepare("SELECT SUM(soru_sayisi) as total_questions FROM testler WHERE tarih = DATE_SUB(CURDATE(), INTERVAL 1 DAY)");
$stmt->execute();
$yesterdayResult = $stmt->fetch();
$yesterdayQuestions = $yesterdayResult ? $yesterdayResult['total_questions'] : 0;

// Günlük ve Genel Başarı Puanı Hesaplaması
// Sadece dogru değeri girilmiş testler (t.dogru IS NOT NULL) dahil ediliyor.
$stmt = $pdo->prepare("SELECT d.ders_adi, 
                           AVG((100 / t.soru_sayisi) * t.dogru) as avg_score,
                           (SELECT AVG((100 / t2.soru_sayisi) * t2.dogru)
                              FROM testler t2
                              WHERE t2.ders_id = d.id 
                                AND t2.tarih = CURDATE() 
                                AND t2.dogru > 0) as daily_score
                        FROM testler t
                        INNER JOIN dersler d ON t.ders_id = d.id
                        WHERE t.dogru > 0
                        GROUP BY t.ders_id");
$stmt->execute();
$courseScores = $stmt->fetchAll();
?>
<!DOCTYPE html>
<html lang="tr">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
  <title>Test Takip Sistemi - Ana Sayfa</title>
  <!-- Bootstrap CSS -->
  <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
  <!-- Özel Mobil CSS -->
  <link rel="stylesheet" href="../css/mobile.css">
  <!-- Chart.js ve Datalabels -->
  <script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/chartjs-plugin-datalabels"></script>
  <style>
    canvas {
      width: 100% !important;
      height: 300px !important;
    }
  </style>
</head>
<body>
<div class="container mt-3">
  <header class="app-header text-center py-3">
    <h1>Elif Test Takip</h1>
  </header>
  <main>
    <!-- Günlük Ders Soru Dağılımı -->
    <section class="my-3">
      <h3 class="section-title">Günlük Ders Soru Dağılımı</h3>
      <?php
      // Örneğin, bu bölümde daha önceki gibi doughnut grafik kullanılabilir.
      // Ancak istenen değişikliklerde yalnızca dilim içi adetler her zaman gösterilecek.
      // Aşağıda örnek sorgudan elde edilen verileri grafikle gösteriyoruz.
      
      // Bugün ders bazında toplam soru sayısı
      $stmt2 = $pdo->prepare("SELECT d.ders_adi, SUM(t.soru_sayisi) as total_questions 
                              FROM testler t 
                              INNER JOIN dersler d ON t.ders_id = d.id 
                              WHERE t.tarih = CURDATE() 
                              GROUP BY t.ders_id");
      $stmt2->execute();
      $dailyQuestionsByCourse = $stmt2->fetchAll();
      ?>
      <?php if(count($dailyQuestionsByCourse) > 0): ?>
        <canvas id="dailyQuestionChart"></canvas>
      <?php else: ?>
        <p class="text-center">Bugün için soru verisi bulunamadı.</p>
      <?php endif; ?>
    </section>

    <!-- Toplam Ders Soru Dağılımı -->
    <section class="my-3">
      <h3 class="section-title">Toplam Ders Soru Dağılımı</h3>
      <?php
      $stmt3 = $pdo->prepare("SELECT d.ders_adi, SUM(t.soru_sayisi) as total_questions 
                              FROM testler t 
                              INNER JOIN dersler d ON t.ders_id = d.id 
                              GROUP BY t.ders_id");
      $stmt3->execute();
      $totalQuestionsByCourse = $stmt3->fetchAll();
      ?>
      <?php if(count($totalQuestionsByCourse) > 0): ?>
        <canvas id="totalQuestionChart"></canvas>
      <?php else: ?>
        <p class="text-center">Henüz soru verisi girilmemiş.</p>
      <?php endif; ?>
    </section>

    <!-- İstatistik Kartları -->
    <section class="stats my-4">
      <div class="row">
        <div class="col-4 mb-3">
          <div class="card text-center">
            <div class="card-body">
              <h5 class="card-title">Dünkü Soru</h5>
              <p class="card-text"><?php echo $yesterdayQuestions; ?></p>
            </div>
          </div>
        </div>
        <div class="col-4 mb-3">
          <div class="card text-center">
            <div class="card-body">
              <h5 class="card-title">Günlük Soru</h5>
              <p class="card-text"><?php echo $dailyQuestions; ?></p>
            </div>
          </div>
        </div>
        <div class="col-4 mb-3">
          <div class="card text-center">
            <div class="card-body">
              <h5 class="card-title">Toplam Soru</h5>
              <p class="card-text"><?php echo $totalQuestions; ?></p>
            </div>
          </div>
        </div>
      </div>
    </section>

    <!-- Ders Bazında BA (Ortalama Başarı) ve Günlük Başarı -->
    <section class="stats my-4">
      <h3 class="section-title">BA &amp; Günlük</h3>
      <?php if(count($courseScores) > 0): ?>
        <div class="table-responsive">
          <table class="table table-bordered">
            <thead>
              <tr>
                <th>Ders</th>
                <th>BA</th>
                <th>Günlük</th>
              </tr>
            </thead>
            <tbody>
              <?php foreach ($courseScores as $score): ?>
                <tr>
                  <td><?php echo htmlspecialchars($score['ders_adi']); ?></td>
                  <td><?php echo $score['avg_score'] ? number_format($score['avg_score'], 2) : '-'; ?></td>
                  <td><?php echo $score['daily_score'] ? number_format($score['daily_score'], 2) : '-'; ?></td>
                </tr>
              <?php endforeach; ?>
            </tbody>
          </table>
        </div>
      <?php else: ?>
        <p class="text-center">Henüz test verisi yok.</p>
      <?php endif; ?>
    </section>

    <!-- Navigasyon Menüsü -->
    <nav class="nav-menu text-center my-4">
      <a href="add_course.php" class="btn btn-primary">Ders Ekle</a>
      <a href="add_test.php" class="btn btn-primary">Test Gir</a>
      <a href="list_tests.php" class="btn btn-primary">Test Listesi</a>
    </nav>
  </main>
</div>

<script>
<?php if(count($dailyQuestionsByCourse) > 0): ?>
  var ctxDailyQ = document.getElementById('dailyQuestionChart').getContext('2d');
  var dailyQLabels = <?php echo json_encode(array_column($dailyQuestionsByCourse, 'ders_adi')); ?>;
  var dailyQData = <?php echo json_encode(array_column($dailyQuestionsByCourse, 'total_questions')); ?>;
  new Chart(ctxDailyQ, {
    type: 'doughnut',
    data: {
      labels: dailyQLabels,
      datasets: [{
        label: 'Soru Adedi',
        data: dailyQData,
        backgroundColor: ['#8e44ad','#3498db','#e74c3c','#27ae60','#f39c12','#d35400']
      }]
    },
    options: {
      responsive: true,
      maintainAspectRatio: false,
      plugins: {
        datalabels: {
          color: '#fff',
          font: { weight: 'bold', size: 16 },
          formatter: function(value) { return value; }
        }
      }
    },
    plugins: [ChartDataLabels]
  });
<?php endif; ?>

<?php if(count($totalQuestionsByCourse) > 0): ?>
  var ctxTotalQ = document.getElementById('totalQuestionChart').getContext('2d');
  var totalQLabels = <?php echo json_encode(array_column($totalQuestionsByCourse, 'ders_adi')); ?>;
  var totalQData = <?php echo json_encode(array_column($totalQuestionsByCourse, 'total_questions')); ?>;
  new Chart(ctxTotalQ, {
    type: 'doughnut',
    data: {
      labels: totalQLabels,
      datasets: [{
        label: 'Soru Adedi',
        data: totalQData,
        backgroundColor: ['#8e44ad','#3498db','#e74c3c','#27ae60','#f39c12','#d35400']
      }]
    },
    options: {
      responsive: true,
      maintainAspectRatio: false,
      plugins: {
        datalabels: {
          color: '#fff',
          font: { weight: 'bold', size: 16 },
          formatter: function(value) { return value; }
        }
      }
    },
    plugins: [ChartDataLabels]
  });
<?php endif; ?>
</script>
</body>
</html>
/* /css/mobile.css */
@import url('https://fonts.googleapis.com/css?family=Roboto:400,500,700');

body {
  background-color: #f7f7f7;
  font-family: 'Roboto', sans-serif;
  margin: 0;
  padding: 0;
  font-size: 18px;
  line-height: 1.5;
}

.app-header {
  background-color: #007bff;
  color: #fff;
  border-bottom: 4px solid #0056b3;
  padding: 20px;
}

.app-header h1 {
  font-size: 32px;
  margin: 0;
}

.section-title {
  color: #333;
  font-weight: 700;
  margin-bottom: 15px;
  text-align: center;
  font-size: 26px;
}

.nav-menu {
  margin-top: 25px;
}

.nav-menu a {
  margin: 8px;
  border-radius: 25px;
  padding: 16px 32px;
  font-size: 20px;
  text-decoration: none;
  background-color: #007bff;
  color: #fff;
  box-shadow: 0 2px 5px rgba(0,0,0,0.15);
  display: inline-block;
  min-width: 140px;
}

.nav-menu a:hover {
  background-color: #0056b3;
}

.card {
  border: none;
  border-radius: 15px;
  box-shadow: 0 2px 8px rgba(0,0,0,0.1);
  margin-bottom: 20px;
}

.card-title {
  font-size: 20px;
  margin-bottom: 8px;
}

.card-text {
  font-size: 24px;
  font-weight: 700;
}

.container {
  padding: 20px;
}

@media (max-width: 768px) {
  body {
    font-size: 20px;
  }
  .app-header h1 {
    font-size: 36px;
  }
  .section-title {
    font-size: 28px;
  }
  .nav-menu a {
    font-size: 22px;
    padding: 18px 36px;
  }
  .card-title {
    font-size: 22px;
  }
  .card-text {
    font-size: 26px;
  }
}
 
 
muratca61
Site Admin
Mesajlar: 35964
Kayıt: Cmt Ara 21, 2024 7:56 am

Re: öğrenci test takip scripti

Mesaj gönderen muratca61 »

uygulamanın tüm dosyaları burada
Cevapla