ข้ามไปยังเนื้อหาหลัก
ProgrammerThailand

ไอเดีย (Idea) idea booking education sme

ไอเดีย #33: ระบบจองคอร์ส/คลาสเรียนพิเศษ

“ซื้อแพ็กเกจ 20 ชั่วโมงไปแล้ว เรียนไปกี่ชั่วโมงแล้วนะ” เป็นคำถามที่ครูสอนพิเศษและเจ้าของสถาบันกวดวิชาเล็ก ๆ ได้ยินแทบทุกสัปดาห์ ผู้ปกครองจำไม่ได้ ครูก็นับจากสมุดที่เขียนด้วยมือ พอมีเลื่อนคลาส ชดเชยคลาส หรือเปลี่ยนครู ตัวเลขก็เริ่มไม่ตรงกัน ทั้งที่ธุรกิจสอนพิเศษ สอนดนตรี สอนว่ายน้ำ มีอยู่ทุกอำเภอ ระบบจองคอร์สที่เข้าใจเรื่องรอบเรียนและชั่วโมงคงเหลือจึงมีคนรอใช้อยู่จริง

ใครจะใช้

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

ฟีเจอร์ขั้นต่ำ (MVP)

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

ต่อยอดได้อีก

  • แจ้งเตือนผู้ปกครองผ่าน LINE ก่อนถึงคลาสและเมื่อชั่วโมงใกล้หมด
  • ชำระค่าแพ็กเกจผ่าน PromptPay QR แล้วแนบสลิปให้แอดมินยืนยัน
  • ระบบ waitlist เมื่อรอบเต็ม มีคนยกเลิกก็เลื่อนคิวถัดไปขึ้นมา
  • คำนวณค่าสอนครูตามจำนวนชั่วโมงที่สอนจริงในแต่ละเดือน

โครงข้อมูลตั้งต้น

  • courses — id, name, description, default_duration_min
  • sessions — id, course_id, teacher_id, room, start_at, end_at, capacity
  • packages — id, student_id, course_id, total_hours, expires_on
  • bookings — id, session_id, student_id, package_id, status, attended
  • hour_ledger — id, package_id, booking_id, delta_hours, reason, created_at

ระดับความยาก และสิ่งที่จะได้เรียนรู้

ระดับ ปานกลาง ฝั่งหลังบ้านใช้ Yii2 หรือ Laravel + PostgreSQL/MySQL ส่วนฝั่งผู้ปกครองอาจทำเป็นเว็บมือถือหรือแอป Flutter สิ่งที่จะได้ฝึก:

  • แนวคิด ledger คือไม่เก็บชั่วโมงคงเหลือเป็นตัวเลขเดียว แต่เก็บทุกการเพิ่มลดแล้วรวมเอา ทำให้ตรวจย้อนได้
  • การกันจองเกินที่นั่งด้วย transaction และ row lock
  • การแสดงปฏิทินรายสัปดาห์ด้วยไลบรารีปฏิทินฝั่ง JavaScript
  • การเขียนกติกาธุรกิจ (business rule) ให้แก้ไขได้โดยไม่ต้องแก้โค้ด

ข้อควรระวัง

  • ถ้าสองคนกดจองที่นั่งสุดท้ายพร้อมกัน ต้องมี race condition handling ไม่อย่างนั้นห้องจะเกินจำนวน
  • ผู้เรียนส่วนใหญ่เป็นเด็ก ข้อมูลชื่อ โรงเรียน เบอร์ผู้ปกครองอยู่ภายใต้ PDPA ควรขอความยินยอมให้ชัดและจำกัดสิทธิ์ครูให้เห็นเฉพาะนักเรียนของตัวเอง
  • กติกาคืนชั่วโมงและแพ็กเกจหมดอายุควรเขียนให้ผู้ปกครองเห็นก่อนซื้อ จะได้ไม่มีข้อพิพาทภายหลัง

มีใครเคยทำระบบให้โรงเรียนสอนพิเศษหรือสถาบันดนตรีบ้างไหมครับ เจอเคสชดเชยคลาสแบบไหนที่ทำให้ปวดหัวที่สุด แล้วถ้าเป็นคุณจะออกแบบแพ็กเกจแบบนับครั้งหรือนับชั่วโมง มาแลกเปลี่ยนกันในกระทู้นี้ และถ้าใครลงมือทำแล้วอย่าลืมเอามาแชร์ในบอร์ดนี้นะครับ

0 คะแนน

0 คำตอบ

ยังไม่มีคำตอบ

รู้คำตอบ? ช่วยแบ่งปันได้เลย

ตอบคำถามนี้

เข้าสู่ระบบเพื่อตอบคำถามและโหวต

เข้าสู่ระบบ สมัครสมาชิก