ผมจะออกแบบระบบตัดคะแนนอย่างไรดีครับ

  • warning: realpath() [function.realpath]: SAFE MODE Restriction in effect. The script whose uid is 1005 is not allowed to access /tmp owned by uid 0 in /var/www/sites/sugree/codenone.com/subdomains/www/html/includes/file.inc on line 190.
  • warning: realpath() [function.realpath]: SAFE MODE Restriction in effect. The script whose uid is 1005 is not allowed to access /tmp owned by uid 0 in /var/www/sites/sugree/codenone.com/subdomains/www/html/includes/file.inc on line 190.

ผมจะออกแบบระบบตัดคะแนนอย่างไรดีครับ
เงื่อนไข
1. ต้องตัดคะแนนแบบ FIFO
2. ตัดคะแนนแบบมีขั้นต่ำ 75 %
คือ
ผมต้องเขียนโปรแกรมตัดคะแนนของ user ที่จะมีคะแนนเข้ามาทุกเดือนคลายๆ กับบัตรเครติด
เพื่อไปแลกของรางวัล แต่ผมต้องตัดคะแนนที่มาก่อนตัดก่อนเช่น
ม.ค. มีคะแนน 120
ก.พ. มีคะแนน 50
มี.ค. มีคะแนน 100
วันที่ 1 user ต้องการแลกของ มูลค่า 150 บาท
วันที่ 2 user ต้องการแลกของ มูลค่า 100 บาท
ผมจะออกแบบโปรแกรมอย่างไรดีครับ ต้องแสดงว่าเดือนนั้นใช้ไปเท่าไหร่ และเหลือเท่าไหร่ด้วยนะครับ

sugree's picture

ทำแบบบัญชีได้เลยนี่ FIFO ของบัญชี ทำเป็น transaction มีแต่เพิ่มไม่มีลบ แนวๆ debit credit น่ะ

khao_lek's picture

ผมมองยังไม่ออกครับ
ตอนนี้ผมทำมี 3 ตารางหลัก(คราวๆนะครับ)คือ
1. ตารางคะแนน
- รหัสคะแนน
- รหัสuser
- คะแนนสะสมเดือนนั้นๆ
- วันที่ของคะแนนที่เข้ามา
- วันที่ของคะแนนที่หมดอายุ
- คะแนนที่ใช้ไป(เป็นค่าติดลบ)
- สถานะคะแนน(F =เต็ม H= ใช้ไปบางส่วน E = หมดแล้ว)
2. ตารางแลกคะแนน
- รหัสuser
- วันที่
- เลขที่แลกของ
3. ตารางรายละเอียดแลกคะแนน
- เลขที่แลกของ
- ลำดับที่
- รหัสสินค้า
- คะแนนที่ใช้
- มูลค่าที่ต้องจ่ายเพิ่ม
ก็คือผมยังคิดไม่ออกว่าจะเอาคะแนน 150 ไปทำงัยให้มันรู้ว่า
150 มาจากคะแนนเดือน ม.ค. 120 และ ก.พ. 30 แล้วทำให้
ครั้งที่ 2 รู้ว่า ก.พ. เหลือ 20นะ ต้องไปเอา ก.พ. มา 20 แล้ว
ไปเอามี.ค. มา 80 คือตอนนี้ผมใช้วนลูปหาตามสถานะของคะแนน
และเรียงตามวันหมดอายุของคะแนนนำมาตัด แต่มันก็ยังติดตรงที่เวลา
กลับไปupdate สถานะของคะแนนมันจะเพี้ยนทุกครั้งเลยอะครับ
ตอนนี้ผมก็ไม่มีคนให้ถามในบริษัทเลย ผมละมึนจริงๆ ไม่เคยเขียนแบบนี้เลย
รบกวนด้วยนะครับ

sugree's picture

เราเก็บคะแนนแต่ละเดือนพร้อมวันหมดอายุ ก็เก็บไว้อีกตารางชื่อว่า transaction ละกัน

  • timestamp
  • expire_date
  • in
  • out
  • ref
  • refdoc

ส่วนวิธี

  • แต่ละเดือนก็จะใส่ 1 บรรทัด
  • ทุกๆ วันก็จะหาว่ามีอะไรที่หมดอายุ แต่ sum(in)-sum(out) > 0 ก็สร้างบรรทัดใหม่เพื่อใส่ out ให้มูลค่ามันหมด ใช้ ref อ้างถึงบรรทัดที่โดนหัก ส่วน refdoc เอาไว้อ้างเอกสารข้างนอก
  • เวลาขอใช้ก็หาบรรทัดเก่าที่ยังไม่หมดอายุโดยจับคู่ ref แล้วสร้างบรรทัดใหม่เป็นคู่ๆ
khao_lek's picture

ขอบคุณครับผมขอไปลองทำก่อนคับ

ย้าย Codenone

ประกาศย้าย Codenone ไปใช้ Forum ของ Blognone แทนครับ ตามไปตั้งกระทู้ต่อได้ที่ Codenone Forum (รายละเอียดอ่านจากกระทู้ ย้าย Codenone ไปรวมกับ Blognone)

กระทู้เก่าๆ จะย้ายตามไปในภายหลัง ตอนนี้ปิดการโพสต์กระทู้ไว้ เหลือไว้เฉพาะอ้างอิงเท่านั้น