JABPHAP
Code.gs · 787 บรรทัด
/**
 * ═══════════════════════════════════════════════════════════════════════════
 *  ระบบประกาศผลสอบรายบุคคล  ·  Private Exam Results
 *  ระบบที่ 62/100  —  กลุ่มโรงเรียน, มหาวิทยาลัย & สถาบันกวดวิชา
 * ───────────────────────────────────────────────────────────────────────────
 *  ปัญหาที่แก้ : "ติดประกาศคะแนนเรียงลำดับหน้าห้อง — ทุกคนเห็นคะแนนของทุกคน ·
 *                ส่งไฟล์ Excel ที่มีคะแนนทั้งห้องลงไลน์กลุ่ม ·
 *                เด็กเอาคะแนนไปล้อกัน · เด็กที่ได้น้อยอับอายจนไม่อยากมาโรงเรียน ·
 *                ครูไม่รู้ว่าข้อไหนสอนแล้วเด็กไม่เข้าใจ"
 *
 *  ⭐ จุดเด่นที่ 1 = **เห็นเฉพาะของตัวเอง — บังคับที่ระดับเซิร์ฟเวอร์**
 *     ไม่ใช่ซ่อนด้วยหน้าเว็บ · API ไม่เคยส่งคะแนนของคนอื่นกลับไปเลย
 *
 *  ⭐ จุดเด่นที่ 2 = **ไม่มีระบบจัดอันดับ (ranking) โดยตั้งใจ**
🔒

กรอกอีเมลด้านขวาเพื่อดูโค้ดเต็มและคัดลอก

ฟรี ไม่มีค่าใช้จ่าย

ข้อควรรู้ก่อนใช้

แสดงในหน้าตั้งค่าของระบบด้วย • คะแนนสอบวัดได้แค่บางอย่าง — ไม่ใช่ความสามารถทั้งหมดของเด็ก — ข้อความนี้อยู่บนหน้านักเรียนด้วย • ค่าเฉลี่ยห้องต่ำ ≠ เด็กห้องนี้แย่ — มักแปลว่าข้อสอบยากเกินไปหรือสอนไม่ทัน — ดูผลรายหัวข้อประกอบเสมอ • ระบบไม่ได้ตรวจข้อสอบให้ — ครูกรอกคะแนนเอง ระบบตรวจแค่ความสอดคล้องของตัวเลข • ลิงก์นักเรียนใครมีก็เปิดได้ — เป็น token ที่เดายาก แต่ไม่ได้ล็อกด้วยรหัสผ่าน — ต้องบอกนักเรียนว่าอย่าส่งต่อ • "แก้ไขแล้ว" ไม่ได้แก้คะแนนอัตโนมัติ — ครูต้องไปแก้ในหน้ากรอกคะแนนเอง (ระบบเตือนไว้ในหน้าตอบคำขอ)

ติดตั้งยังไง (ประมาณ 10 นาที)

  1. 1 แตกไฟล์ ZIP จะได้ Code.gs · index.html · appsscript.json และคู่มือ README.md
  2. 2 เปิด script.google.comNew project → Project Settings ติ๊ก Show "appsscript.json"
  3. 3 วางเนื้อหา appsscript.json และ Code.gs แล้วกด + → HTML ตั้งชื่อ index วาง index.html
  4. 4 เลือกฟังก์ชัน setup → กด Run → อนุญาตสิทธิ์ ระบบจะสร้าง Google Sheet ให้เอง
  5. 5 Deploy → New deployment → Web app แล้วเปิดลิงก์ที่ได้ใช้งานได้เลย

📘 ขั้นตอนละเอียด การตั้งค่า (เช่น LINE Token ใน Script Properties) โครงสร้างชีต และคำถามที่พบบ่อย อยู่ในไฟล์ README.md ที่แนบใน ZIP — เปิดด้วย Notepad หรือ VS Code ได้เลย

⚠️ ตอนกด Run ครั้งแรก Google จะขึ้นเตือนว่า “แอปนี้ยังไม่ได้รับการยืนยัน” เป็นเรื่องปกติของสคริปต์ที่เราเขียนเอง กด Advanced → Go to (ชื่อโปรเจกต์) เพื่อไปต่อ · สคริปต์ทำงานในบัญชี Google ของคุณเอง เราไม่เห็นไฟล์ของคุณ

เกี่ยวกับเครื่องมือนี้

ทำไมระบบนี้ถึงต้องมี ### ติดประกาศคะแนนเรียงลำดับหน้าห้อง = การเปิดเผยข้อมูลส่วนบุคคลของเด็ก ส่งไฟล์ Excel ที่มีคะแนนทุกคนลงไลน์กลุ่ม ก็เช่นกัน สิ่งที่เกิดขึ้นจริงคือ เด็กที่อยู่ท้ายตารางถูกล้อ อับอาย และบางคนเลิกอยากมาโรงเรียน — โดยที่การประกาศแบบนั้นไม่ได้ทำให้ใครเรียนดีขึ้นเลย • ทุกคนเห็นคะแนนของทุกคน — เห็นเฉพาะของตัวเอง — บังคับที่ระดับเซิร์ฟเวอร์ • เด็กเอาคะแนนไปล้อกัน — ไม่มีอันดับ ไม่มีคะแนนของคนอื่น • ครูไม่รู้ว่าสอนเรื่องไหนแล้วเด็กไม่เข้าใจ — วิเคราะห์รายหัวข้อ เรียงจากที่ทั้งห้องทำได้ต่ำสุด • เด็กสงสัยคะแนนแต่ไม่กล้าเดินไปถาม — ขอตรวจสอบในระบบ พร้อมเหตุผล ครูตอบเป็นลายลักษณ์อักษร • ครูกรอกคะแนนผิดโดยไม่รู้ตัว — ระบบตรวจว่ารายหัวข้อรวมตรงกับคะแนนรวมไหม 4 อย่างที่ทำให้ระบบนี้ต่างจากไฟล์ Excel 1️⃣ เห็นเฉพาะของตัวเอง — บังคับที่เซิร์ฟเวอร์ ไม่ใช่ซ่อนบนหน้าเว็บ /** * ⚠️ ไม่ส่งคะแนนของคนอื่นกลับไปเลย * ส่งเฉพาะ "สถิติรวม" ที่ระบุตัวบุคคลไม่ได้ */ function api_myResults(sid, token) { ... } ลิงก์ของแต่ละคนคำนวณจาก SHA-256 + salt — เดาไม่ได้ และนักเรียนที่มีอีเมลสามารถขอลิงก์ของตัวเองได้ โดยระบบส่งไปที่อีเมลที่ลงทะเบียนไว้เท่านั้น หน้าขอลิงก์ไม่บอกว่ารหัสนักเรียนนั้นมีอยู่จริงหรือไม่ — กันการเดารหัสไล่ไปเรื่อย ๆ 2️⃣ ไม่มีระบบจัดอันดับ — เป็นการตัดสินใจ ไม่ใช่ความบกพร่อง อันดับคือการเปรียบเทียบตัวบุคคล ซึ่งไม่ได้ทำให้ใครเรียนดีขึ้น สิ่งที่ระบบให้แทน: • ค่าเฉลี่ยของห้อง — ❌ อันดับที่เท่าไร • ค่ากลาง (มัธยฐาน) — ❌ คะแนนของคนอื่น • "อยู่ในกลุ่ม 25% บนของห้อง" (ควอไทล์) — ❌ ชื่อคนที่ได้คะแนนสูง/ต่ำ • ผลรายหัวข้อของตัวเอง และแสดงเฉพาะเมื่อมีคนสอบ ≥ 5 คน — ห้องเล็กกว่านั้นจะเดาตัวบุคคลได้ if (vals.length < 5 || myScore === null) return null; // ห้องเล็กเกินไป = เดาตัวคนได้ ครูปิดการแสดงค่าเฉลี่ยรายการสอบได้ — แต่ตอนปิด ระบบเตือนว่า "นักเรียนจะไม่รู้ว่าข้อสอบยากหรือง่าย และอาจคิดว่าคะแนนต่ำเป็นความผิดของตัวเองคนเดียว" 3️⃣ 📚 วิเคราะห์รายหัวข้อ — ส่วนที่มีค่าที่สุดสำหรับครู ตอนสร้างการสอบ ครูใส่หัวข้อย่อยแบบ จำนวนและพีชคณิต:20|เรขาคณิต:15|สถิติ:15 ระบบตรวจว่ารวมแล้วเท่ากับคะแนนเต็ม และล็อกไม่ให้แก้หลังกรอกคะแนนแล้ว (ไม่งั้นคะแนนเดิมจะถูกตีความผิดทั้งหมด) จากนั้นระบบเรียงหัวข้อจากที่ทั้งห้องทำได้ต่ำที่สุด พร้อมข้อความ: หัวข้อที่ทั้งห้องทำได้ต่ำ = สอนยังไม่เข้าใจ ไม่ใช่เด็กไม่เก่ง ใช้ตัวเลขนี้วางแผนสอนซ่อมเสริม — มีประโยชน์กว่าดูคะแนนรวมมาก และเมื่อค่าเฉลี่ยห้องต่ำกว่าครึ่ง ระบบเตือนตอนบันทึกทันที: ค่าเฉลี่ยต่ำแบบนี้มักแปลว่า ข้อสอบยากเกินไป หรือสอนไม่ทัน มากกว่าจะแปลว่าเด็กห้องนี้ไม่ตั้งใจ 4️⃣ 🙋 ขอตรวจสอบคะแนนได้ในระบบ การขอตรวจสอบเป็นสิทธิ์ของนักเรียน ไม่ใช่การต่อว่าครู (ข้อความนี้อยู่ทั้งฝั่งนักเรียนและฝั่งครู) • นักเรียนกดขอได้ภายใน 7 วันหลังสอบ (ตั้งได้) พร้อมเหตุผลที่ต้องเขียนให้ชัด (≥ 10 ตัวอักษร) • ครูตอบกลับ — และระบบ บังคับให้เขียนคำตอบก่อนปิดคำขอ if (['แก้ไขแล้ว','ยืนยันคะแนนเดิม'].indexOf(status) >= 0 && !String(reply||'').trim()) throw new Error('กรุณาเขียนคำตอบให้นักเรียน\n\n' + 'การปิดคำขอโดยไม่อธิบาย ทำให้นักเรียนไม่รู้ว่าเกิดอะไรขึ้น ' + 'และจะไม่กล้าถามอีกในครั้งหน้า'); • นักเรียนที่มีอีเมลได้รับแจ้งคำตอบทันที • คำขอไม่ถูกลบ — เก็บเป็นหลักฐานว่าเด็กเคยถามและครูตอบว่าอะไร

ระบบประกาศผลสอบรายบุคคล (Private Exam Results)

นักเรียนเห็นเฉพาะคะแนนของตัวเอง · ไม่มีระบบจัดอันดับโดยตั้งใจ · วิเคราะห์รายหัวข้อให้ครู

ฟรี ไม่มีค่าใช้จ่าย
  • Web App พร้อมใช้ ข้อมูลเก็บใน Google Sheet ของคุณเอง
  • ได้ครบทุกไฟล์ + คู่มือติดตั้งภาษาไทย (README.md)
  • แก้โค้ดต่อเองได้ ไม่ล็อก ไม่มีค่ารายเดือน

กรอกอีเมลเพื่อรับลิงก์ดาวน์โหลด และรับพรีเซ็ตใหม่ก่อนใคร

ใช้ส่งลิงก์และข่าวเครื่องมือใหม่เท่านั้น ไม่ส่งต่อให้ใคร

มีคำถาม ทักแชทได้เลย
โหลดแล้ว 0 ครั้ง 34 KB
LINE