ผลต่างระหว่างรุ่นของ "418342 ภาคปลาย 2553/การบ้าน 2"

จาก Theory Wiki
ไปยังการนำทาง ไปยังการค้นหา
(หน้าที่ถูกสร้างด้วย 'ให้เมื่อวันที่ 17 มกราคม 2554 ส่ง'''วันที่ 9 กุมภาพันธ์ 2554…')
 
แถว 1: แถว 1:
ให้เมื่อวันที่ 17 มกราคม 2554 ส่ง'''วันที่ 9 กุมภาพันธ์ 2554 เวลา 23.59 น.'''
+
ให้เมื่อวันที่ 21 มกราคม 2554 ส่ง'''วันที่ 9 กุมภาพันธ์ 2554 เวลา 23.59 น.'''
  
ในการบ้านนี้คุณจะอ่านข้อมูลจาก [http://www.freebase.com Freebase] แล้วนำมาสร้างฐานข้อมูลอย่างๆ ง่ายๆ พร้อมกับทำหน้าเว็บให้สามารถค้นหาข้อมูลเหล่านี้ได้
+
ในการบ้านนี้นิสิตจะสร้างระบบบัญชีส่วนตัว เพื่อให้นิสิตสามารถบันทึกรายรับรายจ่ายประจำวัน รวมถึงออกรายงานสรุปรายรับรายจ่ายของตนเองได้
  
== เริ่มต้น ==
+
== ข้อกำหนดเบื้องต้นเกี่ยวกับระบบบัญชีส่วนตัว ==
หา database dump ของหัวข้อที่คุณสนใจจาก http://download.freebase.com/datadumps/2010-11-14/browse/ ให้เลือกไฟล์ .tsv จากในนั้นมาหนึ่งไฟล์ ไฟล์ที่คุณเลือกควรจะมี
+
* สร้างโครงของแอพพลิเคชันขึ้นมาด้วย Rails หรือใช้แอพพลิเคชันตัวอย่างที่ใช้ Authentication ที่ดาวน์โหลดได้ที่ [[authen_app|แอพพลิเคชันตัวอย่างที่ใช้ Authentication]] เพื่อนำมาปรับใช้ในการสร้างแอพพลิเคชันนี้
* ฟีลด์ (คอลัมน์) อย่างน้อย 5 ฟีลด์
+
* ระบบจำเป็นต้องมีฐานข้อมูลที่ใช้ในการจัดเก็บข้อมูล โดยให้ใช้ SQLite เป็นระบบฐานข้อมูล
* เรคอร์ด (แถว) อย่างน้อย 500 แถว
+
* ตารางในฐานข้อมูลควรถูกออกแบบตามความเหมาะสมเพื่อใช้บันทึกข้อมูลรายรับรายจ่ายประจำวันได้
 +
* แอพพลิเคชันต้องถูกออกแบบโดยให้เป็นไปตามหลักการของ REST
 +
* สำหรับการบ้านนี้ แอพพลิเคชันต้องมีระบบ Authentication โดยสามารถใช้ขั้นตอนวิธีตามแอพพลิเคชันตัวอย่างที่ใช้ Authentication
 +
* สำหรับการบ้านนี้ แอพพลิเคชัน'''ไม่จำเป็นต้อง'''มีหน้าจอเพื่อใช้ในการเพิ่มจำนวนผู้ใช้ในระบบ  ผู้ใช้ทั้งหมดในระบบจะถูกสร้างเตรียมไว้ในฐานข้อมูลตั้งแต่ตอนติดตั้งแอพพลิเคชัน โดยข้อมูลผู้ใช้ในระบบทั้งหมดจะถูกเตรียมเก็บไว้ในไฟล์ db/seeds.rb เพื่อใช้ในการเตรียมข้อมูลผู้ใช้เข้าไปในฐานข้อมูลตอนติดตั้งแอพพลิเคชัน (สามารถดูตัวอย่างได้ที่ [[authen_app|แอพพลิเคชันตัวอย่างที่ใช้ Authentication]])
  
== สร้างแอพพลิเคชัน ==
+
== รายละเอียดเกี่ยวกับระบบบัญชีส่วนตัว ==
สร้างแอพพลิเคชันในลักษณะเดียวกันกับ [[418342 ภาคปลาย 2552/ปฏิบัติการที่ 5|ปฏิบัติการที่ 5]] โดยทำตามขั้นตอนนี้
+
* หน้าหลักของแอพพลิเคชันจะเป็นหน้าล็อกอิน เพื่อเข้าใช้ระบบ
* สร้าง scaffold ของโมเดลของหัวข้อที่คุณเลือก ยกตัวอย่างเช่น ถ้าผมเลือกหัวข้อเกี่ยวกับภาษาโปรแกรม (computer/programming_language.tsv) ผมอาจจะสร้าง scaffold ดังต่อไปนี้
+
* หลังจากที่ผู้ใช้ล็อกอินผ่านเข้าระบบไปได้แล้ว หน้าของแอพพลิเคชันจะแสดงรายการรายรับและรายจ่ายของผู้ใช้ที่ได้ล็อกอินเข้าไป โดยให้ลำดับของรายการที่เข้ามาใหม่อยู่เหนือรายการที่ถูกบันทึกมาก่อน
> rails generate scaffold programming_language name:string language_paradigms:string ...
+
* หน้าเพจต่างๆ ในแอพพลิเคชันควรมีเมนูที่ลิงค์ไปยังหน้าเพจอื่นที่สัมพันธ์กันอย่างเหมาะสม
* สร้าง migration สำหรับเพิ่มข้อมูลเข้าฐานข้อมูล เช่น
+
* ประเภทของรายการที่ปรากฏในระบบบัญชีนี้มี 2 ชนิดคือ
> rails generate migration add_programming_languages
+
*# รายการรายรับ เป็นรายการที่ทำให้บัญชีรายรับรายจ่ายมียอดสูงขึ้น อาทิเช่น ค่าเบี้ยเลี้ยง เงินเปิดบัญชี เป็นต้น
* copy ไฟล์ .tsv ที่คุณโหลดมาไปใส่ใน directory <tt>db/migrate</tt>
+
*# รายการรายจ่าย เป็นรายการที่ทำให้บัญชีรายรับรายจ่ายมียอดลดลง อาทิเช่น ค่าอาหาร ค่าเดินทาง เป็นต้น
* เติม migration ที่คุณเพิ่งสร้าง ให้ฟังก์ชัน up ทำการอ่านไฟล์ .tsv ที่คุณโหลดมา และฟังก์ชัน down ทำการลบเรคอร์ดทุกตัวออกให้หมด กล่าวคือไฟล์ migration ที่สร้างอาจจะมีหน้าตาเป็นอย่างนี้
+
* ประเภทของรายการในแอพพลิเคชันต้องถูกเก็บอยู่ในตาราง ซึ่งแยกออกมาจากตารางที่ใช้เก็บรายละเอียดของรายการรายรับและรายจ่าย และข้อมูลในตารางประเภทรายการจะถูกสร้างเตรียมไว้ล่วงหน้าโดยถูกเก็บไว้ใน db/seeds.rb โดยที่ข้อมูลส่วนนี้จะไม่ถูกเปลี่ยนแปลงหรือลบออกจากฐานข้อมูลในช่วงการทำงานของแอพพลิเคชันนี้
<geshi lang="rails">
+
* ส่วนรายการรายรับและรายจ่ายสามารถถูกเพิ่ม ลบ และแก้ไข ใน'''''ตารางรายการ''''' ผ่านหน้าเพจของแอพพลิเคชัน โดยประเภทของรายการจะถูกอ่านเพื่อนำมาแสดงจาก'''''ตารางประเภทรายการ'''''
class AddProgrammingLanguages < ActiveRecord::Migration
+
* รายการรายรับรายจ่ายควรมีรายละเอียดที่จำเป็น โดยที่อย่างน้อยควรประกอบด้วย วันและเวลาที่ทำรายการ ประเภทของรายการ รายละเอียดของรายการหากผู้ใช้ต้องการบันทึกเพิ่มเติมไว้ และจำนวนเงิน เป็นต้น
  def self.up
+
* แอพพลิเคชันมีหน้าเพจแสดงรายงานรายรับรายจ่ายประจำวัน
    ... (เติมโค้ดส่วนนี้เอาเอง)
+
*# ผู้ใช้จะป้อนวันที่เริ่มต้นและวันที่สิ้นสุดในการแสดงรายงานประจำวันนี้
  end
+
*# รายงานนี้จะแสดงรายการที่เกิดขึ้นของแต่ละวันในช่วงเวลาที่ผู้ใช้กำหนด โดยให้เรียงลำดับจากรายการที่เกิดขึ้นก่อนเหนือรายการที่เกิดตามมา
 +
*# เมื่อสิ้นสุดของแต่ละวัน รายงานต้องแสดงยอดเงินสุทธิของรายการที่เกิดขึ้นในวันนั้น
 +
*# เมื่อสิ้นสุดรายงาน รายงานต้องแสดงยอดเงินสุทธิของรายการที่เกิดขึ้นในช่วงวันที่ผู้ใช้ได้กำหนดมา
  
  def self.down
+
'''หลังจากทำการพัฒนาเสร็จแล้ว ให้ rollback migration ทั้งหมด (ให้ database ว่าง) แล้ว zip ไดเรคทอรีที่ rails สร้างทั้งหมดส่งมาที่อีเมล์ของ อ.ประมุข (pramook at gmail dot com) และ อ.ชาคริต (fscickw at ku dot ac dot th)'''
    ProgrammingLanguage.destroy_all
 
  end
 
end
 
</geshi>
 
* สร้าง action ชื่อ search ใน controller ให้รับ parameter ลักษณะเดียวกันกับหน้า search ในปฏิบัติการที่ 5 '''แต่คราวนี้ให้ผู้ใช้กำหนดค่าฟีลด์ได้อย่างน้อยสามฟีลด์ขึ้นไป'''
 
* หลังจากทำการพัฒนาเสร็จแล้ว ให้ rollback migration ทั้งหมด (ให้ database ว่าง) แล้ว zip ไดเรคทอรีที่ rails สร้างทั้งหมดส่งมาที่อีเมล์ของ อ.ประมุข (pramook at gmail dot com) และ อ.ชาคริต (fscickw at ku dot ac dot th)
 

รุ่นแก้ไขเมื่อ 10:21, 20 มกราคม 2554

ให้เมื่อวันที่ 21 มกราคม 2554 ส่งวันที่ 9 กุมภาพันธ์ 2554 เวลา 23.59 น.

ในการบ้านนี้นิสิตจะสร้างระบบบัญชีส่วนตัว เพื่อให้นิสิตสามารถบันทึกรายรับรายจ่ายประจำวัน รวมถึงออกรายงานสรุปรายรับรายจ่ายของตนเองได้

ข้อกำหนดเบื้องต้นเกี่ยวกับระบบบัญชีส่วนตัว

  • สร้างโครงของแอพพลิเคชันขึ้นมาด้วย Rails หรือใช้แอพพลิเคชันตัวอย่างที่ใช้ Authentication ที่ดาวน์โหลดได้ที่ แอพพลิเคชันตัวอย่างที่ใช้ Authentication เพื่อนำมาปรับใช้ในการสร้างแอพพลิเคชันนี้
  • ระบบจำเป็นต้องมีฐานข้อมูลที่ใช้ในการจัดเก็บข้อมูล โดยให้ใช้ SQLite เป็นระบบฐานข้อมูล
  • ตารางในฐานข้อมูลควรถูกออกแบบตามความเหมาะสมเพื่อใช้บันทึกข้อมูลรายรับรายจ่ายประจำวันได้
  • แอพพลิเคชันต้องถูกออกแบบโดยให้เป็นไปตามหลักการของ REST
  • สำหรับการบ้านนี้ แอพพลิเคชันต้องมีระบบ Authentication โดยสามารถใช้ขั้นตอนวิธีตามแอพพลิเคชันตัวอย่างที่ใช้ Authentication
  • สำหรับการบ้านนี้ แอพพลิเคชันไม่จำเป็นต้องมีหน้าจอเพื่อใช้ในการเพิ่มจำนวนผู้ใช้ในระบบ ผู้ใช้ทั้งหมดในระบบจะถูกสร้างเตรียมไว้ในฐานข้อมูลตั้งแต่ตอนติดตั้งแอพพลิเคชัน โดยข้อมูลผู้ใช้ในระบบทั้งหมดจะถูกเตรียมเก็บไว้ในไฟล์ db/seeds.rb เพื่อใช้ในการเตรียมข้อมูลผู้ใช้เข้าไปในฐานข้อมูลตอนติดตั้งแอพพลิเคชัน (สามารถดูตัวอย่างได้ที่ แอพพลิเคชันตัวอย่างที่ใช้ Authentication)

รายละเอียดเกี่ยวกับระบบบัญชีส่วนตัว

  • หน้าหลักของแอพพลิเคชันจะเป็นหน้าล็อกอิน เพื่อเข้าใช้ระบบ
  • หลังจากที่ผู้ใช้ล็อกอินผ่านเข้าระบบไปได้แล้ว หน้าของแอพพลิเคชันจะแสดงรายการรายรับและรายจ่ายของผู้ใช้ที่ได้ล็อกอินเข้าไป โดยให้ลำดับของรายการที่เข้ามาใหม่อยู่เหนือรายการที่ถูกบันทึกมาก่อน
  • หน้าเพจต่างๆ ในแอพพลิเคชันควรมีเมนูที่ลิงค์ไปยังหน้าเพจอื่นที่สัมพันธ์กันอย่างเหมาะสม
  • ประเภทของรายการที่ปรากฏในระบบบัญชีนี้มี 2 ชนิดคือ
    1. รายการรายรับ เป็นรายการที่ทำให้บัญชีรายรับรายจ่ายมียอดสูงขึ้น อาทิเช่น ค่าเบี้ยเลี้ยง เงินเปิดบัญชี เป็นต้น
    2. รายการรายจ่าย เป็นรายการที่ทำให้บัญชีรายรับรายจ่ายมียอดลดลง อาทิเช่น ค่าอาหาร ค่าเดินทาง เป็นต้น
  • ประเภทของรายการในแอพพลิเคชันต้องถูกเก็บอยู่ในตาราง ซึ่งแยกออกมาจากตารางที่ใช้เก็บรายละเอียดของรายการรายรับและรายจ่าย และข้อมูลในตารางประเภทรายการจะถูกสร้างเตรียมไว้ล่วงหน้าโดยถูกเก็บไว้ใน db/seeds.rb โดยที่ข้อมูลส่วนนี้จะไม่ถูกเปลี่ยนแปลงหรือลบออกจากฐานข้อมูลในช่วงการทำงานของแอพพลิเคชันนี้
  • ส่วนรายการรายรับและรายจ่ายสามารถถูกเพิ่ม ลบ และแก้ไข ในตารางรายการ ผ่านหน้าเพจของแอพพลิเคชัน โดยประเภทของรายการจะถูกอ่านเพื่อนำมาแสดงจากตารางประเภทรายการ
  • รายการรายรับรายจ่ายควรมีรายละเอียดที่จำเป็น โดยที่อย่างน้อยควรประกอบด้วย วันและเวลาที่ทำรายการ ประเภทของรายการ รายละเอียดของรายการหากผู้ใช้ต้องการบันทึกเพิ่มเติมไว้ และจำนวนเงิน เป็นต้น
  • แอพพลิเคชันมีหน้าเพจแสดงรายงานรายรับรายจ่ายประจำวัน
    1. ผู้ใช้จะป้อนวันที่เริ่มต้นและวันที่สิ้นสุดในการแสดงรายงานประจำวันนี้
    2. รายงานนี้จะแสดงรายการที่เกิดขึ้นของแต่ละวันในช่วงเวลาที่ผู้ใช้กำหนด โดยให้เรียงลำดับจากรายการที่เกิดขึ้นก่อนเหนือรายการที่เกิดตามมา
    3. เมื่อสิ้นสุดของแต่ละวัน รายงานต้องแสดงยอดเงินสุทธิของรายการที่เกิดขึ้นในวันนั้น
    4. เมื่อสิ้นสุดรายงาน รายงานต้องแสดงยอดเงินสุทธิของรายการที่เกิดขึ้นในช่วงวันที่ผู้ใช้ได้กำหนดมา

หลังจากทำการพัฒนาเสร็จแล้ว ให้ rollback migration ทั้งหมด (ให้ database ว่าง) แล้ว zip ไดเรคทอรีที่ rails สร้างทั้งหมดส่งมาที่อีเมล์ของ อ.ประมุข (pramook at gmail dot com) และ อ.ชาคริต (fscickw at ku dot ac dot th)