Wednesday, May 1, 2019

Mini Project - MetroLab: The BTS Skytrain (ยังไม่สมบูรณ์)


MetroLab: The BTS Skytrain

1. วาดแผนภาพความสัมพันธ์
ประกอบไปด้วยเอ็นทิทีเส้นทาง (Route), สถานี (Station), สถานที่โดยรอบ (Place), เวลาในการเดินรถ (Schedule Time), ความถี่ในการเดินรถ (Service Interval) และบัตรโดยสารรถไฟฟ้า (Card)

Route Entity
ในหนึ่งเส้นทางจะมีรหัส ชื่อ สี และสถานะของเส้นทางนั้น ๆ

Station Entity
สถานีมีรหัสและชื่อประจำสถานี, ตำแหน่งละติจูดและลองจิจูด, ตัวตรวจสอบการเป็นสถานีส่วนต่อขยาย, ตัวตรวจสอบการเปิดใช้บริการของสถานี และรหัสของเส้นทางที่สถานีนั้น ๆ เชื่อมต่ออยู่

Place Entity
สถานที่โดยรอบแต่ละสถานี ประกอบด้วย ชื่อสถานี หมวดหมู่ ตำแหน่งละติจูดและลองจิจูด

Service Interval Entity
ความถี่ในการเดินรถของแต่ละเส้นทาง ประกอบด้วย เหตุการณ์ (เช่น วันธรรมดา วันหยุด เป็นต้น) เวลาเริ่มต้น เวลาสุดท้าย และระยะเวลาในการคอยขบวนรถแต่ละขบวน

Schedule Time Entity
เวลานัดหมายของแต่ละขบวนรถของแต่ละสถานีในแต่ละเส้นทาง ประกอบด้วย เที่ยว (ขาเข้า หรือ ขาออก) เวลาของรถไฟขบวนแรกและเวลาของรถไฟขบวนสุดท้ายที่เข้าออกสถานีนั้น ๆ

Card Entity
บัตรสำหรับใช้ในการเดินทางด้วยรถไฟฟ้า ประกอบด้วย ประเภทของบัตร และชื่อของบัตร

จากรายละเอียดข้างต้น สามารถวาดแผนภาพได้ดังนี้



2. Relational Mapping
Route
idnamecolorstatus

Station
idnamelatlongroute_interisExtentionisAvailableroute_id

Place
namecategorylatlongstation_id

Service Interval
eventtime_fromtime_totime_waitroute_id

Schedule Time
triptime_firsttime_lastroute_idstation_id

Card
namecategory


Website



เมื่อเข้าสู่เว็บไซต์ จะพบกับหน้าค้นหาที่จะแสดงรายชื่อของสถานีเมื่อค้นหา (ยังสามารถค้นหาสถานีโดยระบุรหัสสถานีหรือหมายเลขสถานีได้)


หน้า trip (หลังจากค้นหาสถานี)


มีทั้งหมด 5 ส่วน แบ่งได้ดังนี้
1. ชื่อสถานีต้นทางและปลายทาง พร้อมด้วยชื่อเส้นทาง


2. ราคาค่าโดยสารตามประเภทของบัตรโดยสาร


3. สถานีที่อยู่ระหว่างสถานีต้นทางและสถานีปลายทาง พร้อมแสดงสถานีที่มีการเปลี่ยนขบวนรถ
สามารถขยายเพื่อดูสถานีทั้งหมดได้


4. ตารางเวลาของรถไฟแต่ละขบวนรถที่มุ่งหน้าไปยังเส้นทางของสถานีปลายทาง นับเวลาแบบเรียลไทม์
เมื่อเวลาผ่านไปจะมีการปรับปรุงเวลาตลอดเวลา ดังรูปด้านล่าง
* เวลาดังกล่าว เป็นเวลาตามกำหนดเวลา ไม่ใช่เวลาจริงของขบวนรถ ณ ขณะนั้น
** เวลาดังกล่าวอาจมีค่าคาดเคลื่อนประมาณ 1 - 5 นาที

5. รายชื่อสถานที่โดยรอบสถานีปลายทาง พร้อมรูปภาพแผนที่จาก Google Maps (ไม่รวมสถานที่ที่ปรากฏในรายชื่อด้านล่าง)

Online Repository

เป้าหมาย
✅ ค้นหารายชื่อสถานี
✅ แสดงราคาค่าโดยสารตามประเภทของบัตรโดยสาร
✅ แสดงรายชื่อสถานีจากต้นทางไปยังปลายทาง
✅ แสดงตารางเวลาของขบวนรถที่เข้า-ออกสถานีต้นทาง
✅ แสดงรายชื่อของสถานที่รอบสถานีปลายทาง
✅ ค้นหาสถานีโดยใช้ตำแหน่งปัจจุบันของอุปกรณ์

ปัญหา
  • ในหน้าแสดงรายละเอียดเส้นทาง ในส่วนของรายชื่อสถานี ยังแสดงสีของเส้นทางได้ไม่ถูกต้อง ซึ่งต้องไม่เป็นสีแดง
  • ในหน้าแสดงรายละเอียดเส้นทาง ตารางเวลายังแสดงผลได้ไม่ถูกต้อง



อ้างอิง:

Saturday, February 2, 2019

SQLite - Book DB

Sunday, December 30, 2018

My GPA created by Google Sheets



My GPA




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

การแสดงตัวอย่าง จะใช้ค่าในปีการศึกษา 2017 ภาคการศึกษาที่ 1 ในการคำนวณ

การคำนวณค่าเกรดและเกรดเฉลี่ย

การคำนวณเกรดเฉลี่ย จะมีค่าเท่ากับผลรวมของผลคุณระหว่างเกรดที่ได้ในแต่ละรายวิชากับน้ำหนักหน่วยกิต แล้วหารด้วยผลรวมของน้ำหนักหน่วยกิต ซึ่งก็คือการหาค่าเฉลี่ยเลขคณิตแบบถ่วงน้ำหนักนั่นเอง

การคำนวณค่าเกรด (grade)

ใช้สูตรดังนี้

=AVERAGE.WEIGHTED(SWITCH(H22:H28, "A", 4, "B+", 3.5, "B", 3, "C+", 2.5, "C", 2, "D+", 1.5, "D", 1, "F", 0, "W", ""), D22:D28)

SWITCH จะเป็นการตรวจสอบค่าเป้าหมาย หากตรงกับเงื่อนไข จะส่งออกค่าตามเงื่อนไขที่ระบุ ในที่นี่ ให้ตรวจสอบค่าเกรดที่เป็นตัวอักษร ที่อยู่ในช่วง H22:H28 แล้วส่งออกค่าที่เป็นตัวเลขออกมา โดยจากตารางจะได้ค่าเป็น ["C", "C", D", "B", "F", "F", "A"] => [2, 2, 1, 3, 0, 0, 4]

AVERAGE.WEIGHTED เป็นการคำนวณค่าเฉลี่ยเลขคณิตแบบถ่วงน้ำหนัก โดยจะใช้ค่าที่ได้ในฟังก์ชัน SWITCH มาคำนวณกับค่าที่อยู่ในช่วง D22:D28 ซึ่งก็คือน้ำหนักหน่วยกิตนั่นเอง ในที่นี้กำหนดให้อยู่ในรูปทศนิยม 6 ตำแหน่ง

ดังนั้นจึงได้ผลลัพธ์เท่ากับ 1.578947 ในเซลล์ H21

การคำนวณค่าเกรดเฉลี่ย (GPA)

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

=ROUNDDOWN(H21, 2)

ROUNDDOWN เป็นการส่งออกค่าเป้าหมายให้จำกัดอยู่ในรูปตำแหน่งทศนิยมที่ระบุ โดยปัดเศษลงทั้งหมด ในที่นี้ ให้อยู่ในรูปทศนิยมสองตำแหน่ง

ผลลัพธ์จึงเท่ากับ 1.57 ในเซลล์ I21

การคำนวณค่าหน่วยกิตที่ลง (r_weight)

ในที่นี้ใช้สูตร

=SUM(FILTER(D22:D28, H22:H28 <> "W"))

FILTER เป็นการส่งออกค่าของแต่ละเซลล์ในแต่ละแถวที่เป็นไปตามเงื่อนไขที่อยู่ในเซลล์ที่ระบุ ในรูปของอาร์เรย์ ในที่นี้ จะส่งออกค่าในช่วง D22:D28 หากค่าในช่วง H22:H28 ไม่เท่ากับ "W" หากมีเซลล์ใดที่อยู่ในช่วงที่ระบุ ไม่เป็นไปตามเงื่อนไข ฟังก์ชันนี้จะไม่ส่งออกค่าในเซลล์นั้น ๆ ซึ่งในที่นี้ ไม่มีค่า "W" ในช่วง H22:H28 ดังนั้นจึงส่งออกค่าทุกค่าในช่วง D22:D28 => [3, 3, 3, 1, 3, 3, 3]

SUM เป็นฟังก์ชันหาผลรวมของค่าที่อยู่ในช่วงที่ระบุ ในที่นี้ จะนำค่าที่ได้จากฟังก์ชัน FILTER มาคำนวณ SUM([3, 3, 3, 1, 3, 3, 3])

ผลลัพธ์จึงเท่ากับ 19 ในเซลล์ J21

การคำนวณค่าหน่วยกิตที่ลงสะสม (cum_r_weight)

มีสูตรดังนี้

=K12+J21

จะเห็นได้ว่าเป็นผลรวมของค่าหน่วยกิตที่ลงสะสมของภาคการศึกษาก่อนหน้า (เซลล์ K12) กับค่าหน่วยกิตที่ลงของภาคการศึกษาปัจจุบัน (เซลล์ J21)

ผลลัพธ์จึงเท่ากับ 54 ในเซลล์ K21

การคำนวณค่าหน่วยกิตที่ได้ (g_weight)

มีสูตรดังนี้

=SUM(FILTER(D22:D28, H22:H28 <> "W", H22:H28 <> "F"))

สูตรข้างต้นจะมีความคล้ายคลึงกับสูตรที่ใช้ในการคำนวณค่าหน่วยกิตที่ลง แต่จะเพิ่มเงื่อนไขเข้าไปอีกเงื่อนไขหนึ่งว่า หากค่าในช่วง H22:H28 ไม่เท่ากับ "F" จะส่งออกค่าที่อยู่ในช่วง D22:D28 ออกมา จึงได้เป็น [3, 3, 3, 1, 3] แล้วนำไปหาผลรวม

ผลลัพธ์จึงเท่ากับ 13 ในเซลล์ L21

การคำนวณค่าหน่วยกิตที่ได้สะสม (cum_g_weight)

มีสูตรดังนี้

=M12+L21

จะเห็นได้ว่าเป็นผลรวมของค่าหน่วยกิตที่ได้สะสมของภาคการศึกษาก่อนหน้า (เซลล์ M12) กับค่าหน่วยกิตที่ลงของภาคการศึกษาปัจจุบัน (เซลล์ L21)

ผลลัพธ์จึงเท่ากับ 48 ในเซลล์ M21

การคำนวณค่าระดับคะแนน (score)

มีสูตรดังนี้

=H21*J21

จะเห็นได้ว่าเป็นผลคูณระหว่างเกรด (เซลล์ H21) และหน่วยกิตที่ลง (เซลล์ J21) ของภาคการศึกษาปัจจุบัน โดยการคำนวณดังกล่าวจะต้องอยู่ในรูปทศนิยมหนึ่งตำแหน่ง

ผลลัพธ์จึงเท่ากับ 30.0 ในเซลล์ N21

การคำนวณค่าระดับคะแนนสะสม (cum_score)

มีสูตรดังนี้

=O12+N21

การคำนวณค่าระดับคะแนนสะสม จะมีค่าเท่ากับ ผลรวมของค่าระดับคะแนนสะสมของภาคการศึกษาก่อนหน้า (เซลล์ O12) กับ ค่าระดับคะแนนของภาคการศึกษาปัจจุบัน (เซลล์ N21)

ผลลัพธ์จึงเท่ากับ 134.5 ในเซลล์ O21

การคำนวณค่าเกรดเฉลี่ยสะสม (GPAX)

มีสูตรดังนี้

=ROUNDDOWN(AVERAGE.WEIGHTED({H2, H12, H21}, {J2, J12, J21}), 2)

การคำนวณข้างต้นจะเป็นการคำนวณค่าเฉลี่ยเลขคณิตแบบถ่วงน้ำหนักระหว่างเกรดของภาคการศึกษาปัจจุบันลงไปถึงภาคการศึกษาแรกในอาร์เรย์ [H2, H12, H21] และค่าหน่วยกิตที่ลงของภาคการศึกษาปัจจุบันลงไปถึงภาคการศึกษาแรกในอาร์เรย์ [J2, J12, J21] แล้วตัดทศนิยมให้เหลือสองตำแหน่งแบบปัดเศษลง

ผลลัพธ์จึงเท่ากับ 2.49 ในเซลล์ P21


ผลลัพธ์

https://docs.google.com/spreadsheets/d/1-LtO-vvVxMGBK-ZNn6x_Gz3wZhqo-7bwptS_JBlu1hg/edit?usp=sharing

สิ่งที่ได้รับ


  • ได้ฝึกใช้งานฟังก์ชันต่าง ๆ
  • ได้ฝึกการเก็บและคำนวณข้อมูล

ปัญหาที่พบ

ไม่มี