Dalam amali ini, pensyarah BUKAN perlu menaip beratus baris kod secara manual. Sebaliknya, pensyarah akan belajar cara mengarahkan Antigravity IDE (*Agentic Prompting*) secara berfasa untuk membina sebuah sistem pentaksiran formatif (*Exit Ticket*) yang berjalan sepenuhnya di atas pelayan komputer makmal (*Localhost*).
http://10.12.30.82:8088/exitticket).Sila salin dan laksanakan arahan prompt mengikut turutan fasa di bawah di dalam tetingkap chat Antigravity IDE anda:
soalan.json yang mengandungi soalan formatif aneka pilihan (MCQ) mengikut topik TVET.soalan.json secara automatik di direktori projek anda.
index.php yang mesra telefon bimbit (responsif) untuk pelajar menjawab kuiz.index.php siap dicipta. Pelajar boleh membuka borang ini dari mana-mana pelayar web.
admin.php untuk menukar topik soalan, memantau kemasukan respon pelajar secara langsung, dan menganalisis kadar peratusan lulus soalan.admin.php siap dicipta. Pensyarah boleh melihat statistik pelajar dalam masa nyata.
*(Nota: Kod di bawah disediakan sebagai rujukan semakan. Ejen AI Antigravity anda akan menjana kod serupa secara automatik apabila anda memasukkan arahan prompt di atas).*
{
"topik_aktif": "topik_2",
"senarai_topik": {
"topik_1": {
"nama": "Topik 1: Asas Sintaks & Pembolehubah PHP",
"soalan": [
{
"id": 1,
"soalan": "Simbol manakah yang digunakan untuk mengisytiharkan pembolehubah dalam PHP?",
"pilihan": {"A": "@", "B": "$", "C": "#", "D": "&"},
"jawapan_betul": "B",
"aras": "C1"
}
]
},
"topik_2": {
"nama": "Topik 2: Operasi CRUD & Pangkalan Data MySQL",
"soalan": [
{
"id": 1,
"soalan": "Apakah fungsi utama pembolehubah $conn di dalam fail sambungan pangkalan data?",
"pilihan": {
"A": "Menyimpan objek sambungan aktif ke pelayan MySQL",
"B": "Memadam data jadual secara automatik",
"C": "Menukar nama pangkalan data",
"D": "Menghasilkan borang HTML"
},
"jawapan_betul": "A",
"aras": "C2"
},
{
"id": 2,
"soalan": "Apakah risiko utama sekiranya arahan 'DELETE FROM produk;' dijalankan tanpa klausa WHERE?",
"pilihan": {
"A": "Hanya satu baris data terpadam",
"B": "Keseluruhan rekod di dalam jadual produk akan dipadamkan",
"C": "Pangkalan data akan menghasilkan ralat sintaks",
"D": "Jadual produk akan dibuang (DROP)"
},
"jawapan_betul": "B",
"aras": "C4"
}
]
}
}
}
<?php
// Baca soalan aktif daripada soalan.json
$data = json_decode(file_get_contents('soalan.json'), true);
$topik_key = $data['topik_aktif'];
$topik = $data['senarai_topik'][$topik_key];
$mesej_skor = '';
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$nama = htmlspecialchars($_POST['nama']);
$matrik = htmlspecialchars($_POST['matrik']);
$jawapan_pelajar = $_POST['jawapan'] ?? [];
$betul = 0;
$jumlah_soalan = count($topik['soalan']);
foreach ($topik['soalan'] as $s) {
$id = $s['id'];
if (isset($jawapan_pelajar[$id]) && $jawapan_pelajar[$id] === $s['jawapan_betul']) {
$betul++;
}
}
$skor_peratus = round(($betul / $jumlah_soalan) * 100);
// Simpan respon ke fail respon_pelajar.json
$respon_file = 'respon_pelajar.json';
$senarai_respon = file_exists($respon_file) ? json_decode(file_get_contents($respon_file), true) : [];
$senarai_respon[] = [
'timestamp' => date('Y-m-d H:i:s'),
'topik' => $topik_key,
'nama' => $nama,
'matrik' => $matrik,
'skor' => $skor_peratus,
'jawapan' => $jawapan_pelajar
];
file_put_contents($respon_file, json_encode($senarai_respon, JSON_PRETTY_PRINT));
$mesej_skor = "Tahniah $nama ($matrik)! Skor anda: $betul / $jumlah_soalan ($skor_peratus%)";
}
?>