You are on page 1of 151

สำนักงำนเลขำธิกำรสภำผู้แทนรำษฎร

The Secretariat of The House of Representatives

ระบบวิเครำะห์โครงกำรพัฒนำบุคคลำกรด้ำนเทคโนโลยีสำรสนเทศและกำรสือ่ สำร
System Of Analysis Human Resource Development Project Of Information
Technology

รำยงำนฉบับสมบูรณ์

ระบบวิเครำะห์โครงกำรพัฒนำบุคลำกรด้ำนเทคโนโลยีสำรสนเทศและกำรสื่อสำร
กลุ่มงำนวิทยำกำรคอมพิวเตอร์ สำนักสำรสนเทศ
สำนักงำนเลขำธิกำรสภำผู้แทนรำษฎร

โดย
นักศึกษำฝึกงำน ระดับปริญญำตรี ชั้นปีที่สอง
คณะวิศวกรรมศำสตร์ สำขำวิศวกรรมซอฟต์แวร์ หลักสูตรนำนำชำติ สถำบันเทคโนโลยีพระจอมเกล้ำเจ้ำคุณทหำรลำดกระบัง

นำยปุณยวีร์ โพธิ์ศรี
นำยจำรุกิตต์ พัฒนพรกุล
สารบัญ
หัวข้อ หน้า
หลักการเหตุและผล 1
วัตถุประสงค์ 1
ผู้ใช้งานที่เกี่ยวข้อง 1
กิจกรรมและแผนการดาเนินการ 2
ระยะเวลาการดาเนินงาน 2
เอกสารแนบ 2
การติดตาม และ ประเมินผล 3
ผู้รับผิดชอบโครงการ 3
คณะกรรมการประเมินโครงการ 3
วงจรการพัฒนาระบบ (System Development Life Cycle :SDLC) 4
การประยุกต์ใช้ Agile กับโครงการพัฒนาระบบ 11
ความต้องการของระบบ (System Requirement) 14
การวิเคราะห์และออกแบบระบบ ( System Analysis And Design ) 17
โครงสร้างระบบ (System Architecture) 17
แผนภาพแสดงความสัมพันธ์ของผู้ใช้ระบบ (Use Case Diagram) 18
แผนภาพกิจกรรม ( Activity Diagram ) 22
การออกแบบฐานข้อมูล 23
พจนานุกรมข้อมูล ( Data Dictionary ) 24
ภาคผนวก
คู่มือการใช้งานโปรแกรม 29
Source code 44
รายชื่อคณะกรรมการ 147
ข้อมูลผู้จัดทาโครงการ 147
ระบบวิเคราะห์โครงการพัฒนาบุคลากรด้านเทคโนโลยีสารสนเทศและการสือ่ สาร
System Of Analysis Human Resource Development Project Of Information Technology
===================================
1. หลักการและเหตุผล
กลุ่มงานวิทยาการคอมพิวเตอร์ สานักสารสนเทศ สานักงานเลขาธิการสภาผู้แทนราษฎร มีหน้าที่หลักใน
การจัดการฝึกอบรมทางด้านเทคโนโลยีสารสนเทศ ให้แก่บุคลากรของสานักงานเลขาธิการสภาผู้แทนราษฎร ให้มี
ความรู้และทักษะความสามารถทางด้านไอที ซึ่งในแต่ละปีงบประมาณ ทางกลุ่มงานวิทยาการคอมพิวเตอร์ได้
จัดทาโครงการพัฒนาบุคลากรด้านเทคโนโลยีสารสนเทศและการสื่อสาร ขึ้นเป็นจานวนหลายโครงการและได้มีการ
นาโปรแกรม Microsoft Excel มาจัดเก็บข้อมูลของโครงการต่าง ๆ ซึ่งประกอบไปด้วย ชื่อโครงการ จานวนเงิน
งบประมาณ ค่าใช้จ่ายที่เกิดขึ้นจริง ผู้รับผิดชอบโครงการและข้อมูลวิทยากร
ซึ่งปัญหาจากการนา Microsoft Excel มาจัดเก็บข้อมูลนั้นเป็นการเก็บข้อมูลในรูปแบบไฟล์ ทาให้เกิด
ความผิดพลาดได้ง่าย และลักษณะของการทางานเป็นทีมนั้น ทาให้เกิดมีข้อมูลโครงการของแต่ละคนไม่ตรงกัน ทา
ให้ข้อมูลที่นาเสนอผู้บ ริหาร หรือข้อมูลที่ นามาใช้ในการวิเคราะห์โครงการเกิดความผิดพลาดขึ้น เพื่อแก้ปัญหา
ดังกล่าว จึงได้จัดทาระบบวิเคราะห์ โครงการพัฒ นาบุคลากรด้านเทคโนโลยีสารสนเทศและการสื่อสาร ให้ เป็น
รูปแบบโปรแกรมบริหารจัดการ มีการเก็บข้อมูลทั้งหมดไว้ในฐานข้อมูล ที่เดียวกัน และง่ายต่อการบริหารจัดการ
ข้อมูลดังกล่าว
2. วัตถุประสงค์
1. เพื่อใช้ในการบันทึกข้อมูลของโครงการต่างๆเข้าไปไว้ในระบบฐานข้อมูล
2. เพื่อวิเคราะห์และจัดเก็บข้อมูลในการบริหารงานโครงการให้มีประสิทธิภาพ
3. เพื่อนาข้อมูลจากการวิเคราะห์ไปดาเนินการตัดสินใจในการพิจารณาโครงการพัฒนาบุคลากรด้าน
เทคโนโลยีสารสนเทศ ในปีงบประมาณต่อไป
3. ผู้ใช้งานที่เกี่ยวข้อง
1. เจ้าหน้าทีก่ ลุ่มงานวิทยาการคอมพิวเตอร์ สานักสารสนเทศ
2. ผู้ดแู ลระบบ (System Administrator)

1
4. กิจกรรม และ แผนการดาเนินการ
เดือน/2558
รายการ
มิ.ย. ก.ค.
การวางแผนงานโครงการ ๑ ๒ ๓ ๔ ๑ ๒ ๓ ๔
1.วางแผนการจัดการ เอกสาร ประกอบโครงการ
2.จัดทาเอกสาร ประกอบโครงการ
3.ประชุม เพื่อปรับปรุง เพิ่มเติม และ แก้ไข เอกสาร
4.วางแผน และ ปรับแก้ เพิ่มเติมเอกสาร
5.สรุป และ นาเสนอเอกสาร
6.วางแผนการเขียนโปรแกรม
7.เริ่มทาการเขียนโปรแกรม
8.เริ่มนาเสนอ โปรแกรมที่ยังไม่สมบูรณ์ เพื่อรอรับการ
ปรับปรุง หรือ เพิ่มเติม
9.ปรับปรุง และ พัฒนาโปรแกรมต่อจากเดิม
10.นาเสนอโปรแกรมสาเร็จรูป พร้อมเอกสาร และ สื่อการ
นาเสนอ

5. ระยะเวลาการดาเนินงาน
ระยะดาเนินการ 46 วัน (2 มิ.ย. – 17 ก.ค.)
6. เอกสารแนบ : เพื่อใช้ประกอบการพิจารณา
1.แผนภาพ Visual Concept ของระบบงาน
2.แผนภาพ System Architecture
3.แผนภาพ Use Case Diagram
4.แผนภาพ ER Diagram
5.แผนภาพ Activity Diagram
6.รายละเอียด Requirement

2
7. การติดตามและประเมินผล
ใช้แบบสอบถามประเมิน Formative และ ประเมินผลโดยคณะกรรมการประเมินงาน

8. ผู้รับผิดชอบโครงการ
ที่ปรึกษาโครงการ :
1. นายไชยยศ สันสังวร ผู้บังคับบัญชากลุ่มงานวิทยาการคอมพิวเตอร์
2. นายชัยวัฒน์ ปันต่า นักวิชาการคอมพิวเตอร์ปฏิบัติการ
ผู้รับผิดชอบโครงการ :
1. นายปุณยวีร์ โพธิ์ศรี
2. นายจารุกิตต์ พัฒนพรกุล

9. คณะกรรมการประเมินโครงการ
1. นายไชยยศ สันต์สังวร ผู้บังคับบัญชากลุ่มงานวิทยาการคอมพิวเตอร์
2. นางณีรนุช จุลประภา นักวิชาการคอมพิวเตอร์ชานาญการพิเศษ
3. นางยุพิน พ่วงเสมา นักวิชาการคอมพิวเตอร์ชานาญการ
4. นางสุธาวี อนุญาหงษ์ นักวิชาการคอมพิวเตอร์ชานาญการ
5. นายชัยวัฒน์ ปันต่า นักวิชาการคอมพิวเตอร์ปฏิบัติการ

3
การทบทวนวรรณกรรม/การตรวจสอบเอกสาร
ในการพัฒนาระบบสารสนเทศในองค์กรจะต้องมีการวิเคราะห์กระบวนการทางานขององค์กร เราเรียกว่า
System development Life Cycle (SDLC) การ พั ฒ นาระบบในองค์ ก รเป็ น หน้ าที่ ข องนั ก วิเคราะห์ ระบบที่
จะต้องทาการติดต่อกับ หน่วยงานที่ต้องการพัฒนาระบบสารสนเทศ ว่าการทางานมีองค์ประกอบอะไรบ้าง เช่น
ขนาดขององค์กร รายละเอียดการทางานถ้าเป็นบริษัทขนาดใหญ่ นักวิเคราะห์ จะต้องเข้าใจให้ ชัดเจนเกี่ยวกับ
มาตรฐาน กระบวนการท างานการพั ฒ นาระบบงาน (System development Life Cycle : SDLC) หมายถึ ง
ขั้นตอนหรือกระบวนการในการพัฒนาระบบงาน ซึ่งมีจุดเริ่มต้นในการทางานและจุดสิ้นสุดของการปฏิบัติงานการ
การพัฒ นาซอฟต์แวร์ ตามปกติแล้ วจะประกอบไปด้วยกลุ่มกิจกรรม 3 ส่ วนหลั กๆ ด้ว ยกัน คือ การวิเคราะห์
(Analysis), การออกแบบ (Design) และการนาไปใช้ (Implementation) ซึ่ง กิจกรรมทั้งสามนี้สามารถใช้งานได้ดี
กับโครงการซอฟต์แวร์ขนาดเล็ก ในขณะที่โครงการซอฟต์แวร์ขนาดใหญ่ มักจาเป็นต้องใช้แบบแผนการพัฒ นา
ซอฟต์แวร์ตามแนวทางของ SDLC จนครบทุกกิจกรรม
1. วงจรการพัฒนาระบบ (System Development Life Cycle :SDLC)
ระบบ สารสนเทศทั้งหลายมีวงจรชีวิตที่เหมือนกันตั้งแต่เกิดจนตายวงจรนี้จะเป็นขั้น ตอน ที่เป็นลาดับ
ตั้งแต่ต้นจนเสร็จเรียบร้อย เป็นระบบที่ใช้งานได้ ซึ่งนักวิเคราะห์ระบบต้องทาความเข้าใจให้ดีว่าในแต่ละขั้นตอน
จะต้องทาอะไร และทาอย่างไร ขั้นตอนการพัฒนาระบบมีอยู่ด้วยกัน 7 ขั้น ด้วยกัน คือ
1. เข้าใจปัญหา (Problem Recognition)
2. ศึกษาความเป็นไปได้ (Feasibility Study)
3. วิเคราะห์ (Analysis)
4. ออกแบบ (Design)
5. สร้างหรือพัฒนาระบบ (Construction)
6. การปรับเปลี่ยน (Conversion)
7. บารุงรักษา (Maintenance)

ขั้นที่ 1 : เข้าใจปัญหา (Problem Recognition)

ระบบ สารสนเทศจะเกิดขึ้นได้ก็ต่อเมื่อผู้บริหารหรือผู้ใช้ตระหนักว่า ต้องการระบบสารสนเทศหรือระบบ


จัดการเดิม ได้แก่ระบบเอกสารในตู้เอกสาร ไม่มีประสิทธิภาพเพียงพอที่ตอบสนองความต้องการในปัจจุบัน ซึ่ง
ผู้บริหารตื่นตัวกันมากที่จะให้มีการพัฒนาระบบสารสนเทศมาใช้ในหน่วยงานของตน ในงานธุรกิจ อุตสาหกรรม
หรือใช้ในการผลิต ตัวอย่างเช่น บริษัทของเรา จากัด ติดต่อซื้อสินค้าจากผู้ขายหลายบริษัท ซึ่งบริษัทของเราจะมี
ระบบ MIS ที่เก็บข้อมูลเกี่ยวกับหนี้สินที่บริษัทขอเราติดค้างผู้ขายอยู่ แต่ระบบเก็บข้อมูลผู้ขายได้เพียง 1,000 ราย
เท่านั้น แต่ปัจจุบันผู้ขายมีระบบเก็บข้อมูลถึง 900 ราย และอนาคตอันใกล้นี้จะเกิน 1,000 ราย ดังนั้นฝ่ายบริหาร
จึงเรียกนักวิเคราะห์ระบบเข้ามาศึกษา แก้ไขระบบงาน ปัญหา ที่สาคัญของระบบสารสนเทศในปัจจุบัน คือ ระบบ
เขียนมานานแล้ว ส่วนใหญ่เขียนมาเพื่อติดตามเรื่องการเงิน ไม่ได้มีจุดประสงค์เพื่อให้ข้อมูลข่าวสารในการตัดสินใจ
แต่ปัจจุบันฝ่าย บริหารต้องการดูสถิติการขายเพื่อใช้ในการคาดคะเนในอนาคต หรือความต้องการอื่นๆ เช่น สินค้า

4
ที่มียอดขายสูง หรือสินค้าที่ลูกค้าต้องการสู ง หรือการแยกประเภทสินค้าต่างๆที่ทาได้ไม่ง่ายนัก การที่จะแก้ไข
ระบบเดิมที่มีอยู่แล้วไม่ใช่เรื่องที่ง่ายนัก หรือแม้แต่การสร้างระบบใหม่ ดังนั้นควรจะมีการศึกษาเสียก่อนว่า ความ
ต้องการของเราเพียงพอที่เป็นไปได้หรือไม่ ได้แก่ "การศึกษาความเป็นไปได้" (Feasibility Study)
สรุป ขั้นตอนที่ 1: เข้าใจปัญหา
หน้าที่ : ตระหนักว่ามีปัญหาในระบบ
ผลลัพธ์ : อนุมัติการศึกษาความเป็นไปได้
เครื่องมือ : ไม่มี
บุคลากรและหน้าที่ความรับผิดชอบ : ผู้ใช้หรือผู้บริหารชี้แจงปัญหาต่อนักวิเคราะห์ระบบ

ขั้นตอนที่ 2 : ศึกษาความเป็นไปได้ (Feasibility Study)


จุดประสงค์ของการศึกษาความเป็นไปได้ก็คือ การกาหนดว่าปัญหาคืออะไรและตัดสินใจว่าการพัฒ นา
สร้างระบบสารสนเทศ หรือการแก้ไขระบบสารสนเทศเดิมมีความเป็นไปได้หรือไม่โดยเสียค่าใช้จ่ายและ เวลาน้อย
ที่สุด และได้ผลเป็นที่น่าพอใจ ปัญหา ต่อไปคือ นักวิเคราะห์ระบบจะต้องกาหนดให้ได้ว่าการแก้ไขปัญหาดังกล่าวมี
ความเป็นไปได้ ทางเทคนิคและบุคลากร ปัญหาทางเทคนิคก็จะเกี่ยวข้องกับเรื่องคอมพิวเตอร์ และเครื่องมือเก่าๆ
ถ้ า มี รวมทั้ งเครื่ อ งคอมพิ ว เตอร์ ซ อฟต์ แ วร์ ด้ ว ย ตั ว อย่ า งคื อ คอมพิ ว เตอร์ ที่ ใช้ อ ยู่ ในบ ริ ษั ท เพี ย งพอหรื อ ไม่
คอมพิวเตอร์อาจจะมีเนื้อที่ของฮาร์ดดิสก์ไม่เพียงพอ รวมทั้งซอฟต์แวร์ ว่าอาจจะต้องซื้อใหม่ หรือพัฒนาขึ้นใหม่
เป็นต้น ความเป็นไปได้ทางด้านบุคลากร คือ บริษัทมีบุคคลที่เหมาะสมที่จะพัฒนาและติดตั้งระบบเพียงพอหรือไม่
ถ้าไม่มีจะหาได้หรือไม่ จากที่ ใด เป็นต้น นอกจากนั้นควรจะให้ความสนใจว่าผู้ใช้ระบบมีความคิดเห็นอย่างไรกับ
การ เปลี่ยนแปลง รวมทั้งความเห็นของผู้บริหารด้วย
หน้าที่ : กาหนดปัญหา และศึกษาว่าเป็นไปได้หรือไม่ที่จะเปลี่ยนแปลงระบบ
ผลลัพธ์ : รายงานความเป็นไปได้
เครื่องมือ : เก็บรวบรวมข้อมูลของระบบและคาดคะเนความต้องการของระบบ
บุคลากรและหน้าที่ความรับผิดชอบ : ผู้ใช้จะมีบทบาทสาคัญในการศึกษา
1. นักวิเคราะห์ระบบจะเก็บรวบรวมข้อมูลทั้งหมดที่จาเป็นทั้งหมดเกี่ยวกับปัญหา
2. นักวิเคราะห์ระบบคาดคะเนความต้องการของระบบและแนวทางการแก้ปัญหา
3. นักวิเคราะห์ระบบ กาหนดความต้องการที่แน่ชัดซึ่งจะใช้สาหรับขั้นตอนการวิเคราะห์ต่อไป
4. ผู้บริหารตัดสินใจว่าจะดาเนินโครงการต่อไปหรือไม่

5
ขั้นตอนที่ 3 การวิเคราะห์ (Analysis)
เริ่มเข้าสู่การวิเคราะห์ระบบ การวิเคราะห์ระบบเริ่มตั้งแต่การศึกษาระบบการทางานของธุรกิจนั้น ในกรณี
ที่ระบบเราศึกษานั้นเป็นระบบสารสนเทศอยู่แล้วจะต้องศึกษาว่าทางาน อย่างไร เพราะเป็นการยากที่จะออกแบบ
ระบบใหม่ โดยที่ ไม่ท ราบว่าระบบเดิม ทางานอย่างไร หรือธุรกิจด าเนิ นการอย่างไร หลั งจากนั้ นกาหนดควา ม
ต้องการของระบบใหม่ ซึ่งนักวิเคราะห์ระบบจะต้องใช้เทคนิคในการเก็บข้อมูล (Fact-Gathering Techniques)
ดังรูป ได้แก่ ศึกษาเอกสารที่มีอยู่ ตรวจสอบวิธีการทางานในปัจจุบัน สัมภาษณ์ผู้ใช้และผู้จัดการที่มีส่วนเกี่ยวข้อง
กับ ระบบ เอกสารที่ มีอยู่ ได้แก่ คู่มือการใช้งาน แผนผั งใช้งานขององค์กร รายงานต่างๆที่ห มุนเวียนใน ระบบ
การศึกษาวิธีการทางานในปัจจุบันจะทาให้นักวิเคราะห์ระบบรู้ว่าระบบจริงๆ ทางานอย่างไร ซึ่งบางครั้งค้นพบ
ข้อผิดพลาดได้ ตัวอย่าง เช่น เมื่อบริษัทได้รับใบเรียกเก็บเงินจะมีขั้นตอนอย่างไรในการจ่ายเงิน ขั้นตอนที่เสมียน
ป้อนใบเรียกเก็บเงินอย่างไร เฝ้าสังเกตการทางานของผู้เกี่ยวข้อง เพื่อให้เข้าใจและเห็นจริงๆ ว่าขั้น ตอนการทางาน
เป็นอย่างไร ซึ่งจะทาให้นักวิเคราะห์ระบบค้นพบจุดสาคัญของระบบว่าอยู่ที่ใด การสัมภาษณ์เป็นศิลปะอย่างหนึ่งที่
นักวิเคราะห์ ระบบควรจะต้องมีเพื่อเข้ากับ ผู้ ใช้ได้ง่าย และสามารถดึงสิ่งที่ต้องการจากผู้ใช้ได้ เพราะว่าความ
ต้องการของระบบคือ สิ่งสาคัญที่จะใช้ ในการออกแบบต่อไป ถ้าเราสามารถกาหนดความต้องการได้ถูกต้อง การ
พัฒนาระบบในขั้นตอนต่อไปก็จะง่ายขึ้น เมื่อเก็บรวบรวมข้อมูลแล้วจะนามาเขียนรวมเป็นรายงานการทางานของ
ระบบซึ่งควรแสดงหรือเขียนออกมาเป็นรูปแทนที่จะร่ายยาวออกมาเป็นตัวหนังสือ การแสดงแผนภาพจะทาให้เรา
เข้าใจได้ดีและง่ายขึ้น หลังจากนั้นนักวิเคราะห์ระบบ อาจจะนาข้อมูลที่รวบรวมได้นามาเขียนเป็น "แบบทดลอง"
(Prototype) หรือตัวต้น แบบ แบบทดลองจะเขียนขึ้นด้วยภาษาคอมพิวเตอร์ต่างๆ และที่ช่ว ยให้ ง่ายขึ้นได้แก่
ภาษายุคที่ 4 (Fourth Generation Language) เป็นการสร้างโปรแกรมคอมพิวเตอร์ขึ้นมาเพื่อใช้งานตามที่เรา
ต้ อ งการได้ ดั งนั้ น แบบทดลองจึ ง ช่ ว ยลดข้ อ ผิ ด พลาดที่ อ าจจะเกิ ด ขึ้ น ได้ เมื่ อ จบขั้ น ตอนการวิ เคราะห์ แ ล้ ว
นักวิเคราะห์ระบบจะต้องเขียนรายงานสรุปออกมาเป็น ข้อมูลเฉพาะของปัญหา (Problem Specification) ซึ่งมี
รายละเอียดดังนี้
รายละเอียดของระบบเดิม ซึ่งควรจะเขียนมาเป็นรูปภาพแสดงการทางานของระบบ พร้อมคาบรรยาย
กาหนดความต้องการของระบบใหม่รวมทั้งรูปภาพแสดงการทางานพร้อมคาบรรยาย, ข้อมูลและไฟล์ที่จาเป็น
คาอธิบายวิธีการทางาน และสิ่งที่จะต้องแก้ไข. รายงานข้อมูลเฉพาะของปัญหาของระบบขนาดกลางควรจะมีขนาด
ไม่เกิน 100-200 หน้ากระดาษ
สรุป ขั้นตอนที่ 3 : การวิเคราะห์ (Analysis)
หน้าที่ : กาหนดความต้องการของระบบใหม่ (ระบบใหม่ทั้งหมดหรือแก้ไขระบบเดิม)
ผลลัพธ์ : รายงานข้อมูลเฉพาะของปัญหา
เครื่องมือ : เทคนิคการเก็บรวบรวมข้อมูล, Data Dictionary, Data Flow Diagram, Process Specification,
Data Model, System Model, Prototype, system Flowcharts

6
บุคลากรและหน้าที่รับผิดชอบ : ผู้ใช้จะต้องให้ความร่วมมือเป็นอย่างดี
1. วิเคราะห์ระบบ ศึกษาเอกสารที่มีอยู่ และศึกษาระบบเดิมเพื่อให้เข้าใจถึงขั้นตอนการทางานและทราบ
ว่าจุดสาคัญของระบบอยู่ที่ไหน
2. นักวิเคราะห์ระบบ เตรียมรายงานความต้องการของระบบใหม่
3. นักวิเคราะห์ระบบ เขียนแผนภาพการทางาน (Diagram) ของระบบใหม่โดยไม่ต้องบอกว่าหน้าที่ใหม่
ในระบบจะพัฒนาขึ้นมาได้อย่างไร
4. นักวิเคราะห์ระบบ เขียนสรุปรายงานข้อมูลเฉพาะของปัญหา
5. ถ้าเป็นไปได้นักวิเคราะห์ระบบอาจจะเตรียมแบบทดลองด้วย

ขั้นตอนที่ 4 : การออกแบบ (Design)


ในระยะแรกของการออกแบบ นักวิเคราะห์ระบบจะนาการตัดสินใจ ของฝ่ายบริหารที่ได้จากขั้นตอนการ
วิเคราะห์ การเลือกซื้อคอมพิวเตอร์ ฮาร์ดแวร์และซอฟต์แวร์ด้วย (ถ้ามีห รือเป็นไปได้) หลังจากนั้นนักวิเคราะห์
ระบบจะนาแผนภาพต่างๆ ที่เขียนขึ้นในขั้นตอนการวิเคราะห์มาแปลงเป็นแผนภาพลาดับขั้น (แบบต้นไม้) ดังรูป
ข้างล่าง เพื่อให้มองเห็นภาพลักษณ์ที่แน่นอนของโปรแกรมว่ามีความสัมพันธ์กันอย่างไร และโปรแกรมอะไรบ้างที่
จะต้องเขียนในระบบ หลังจากนั้นก็เริ่มตัดสินใจว่าควรจะจัดโครงสร้างจากโปรแกรมอย่างไร การเชื่อมระหว่าง
โปรแกรมควรจะทาอย่างไร ในขั้นตอนการวิเคราะห์นักวิเคราะห์ระบบต้องหาว่า "จะต้องทาอะไร (What)" แต่ใน
ขั้นตอนการออกแบบต้องรู้ว่า " จะต้องทาอย่างไร(How)" ในการออกแบบโปรแกรมต้องคานึงถึงความปลอดภัย
(Security) ของระบบด้ ว ย เพื่ อ ป้ อ งกั น การผิ ด พลาดที่ อ าจจะเกิ ด ขึ้ น เช่ น "รหั ส " ส าหรับ ผู้ ใช้ ที่ มี สิ ท ธิ์ส ารอง
ไฟล์ข้อมูลทั้งหมด เป็นต้นนักวิเคราะห์ระบบจะต้องออกแบบฟอร์มสาหรับข้อมูลขาเข้า (Input Format) ออกแบบ
รายงาน (Report Format) และการแสดงผลบนจอภาพ (Screen Format) หลักการการออกแบบฟอร์มข้อมูลขา
เข้าคือ ง่ายต่อการใช้งาน และป้องกันข้อผิดพลาดที่อาจจะเกิดขึ้น ถัดมาระบบจะต้องออกแบบวิธีการใช้งาน เช่น
กาหนดว่าการป้อนข้อมูลจะต้องทาอย่างไร จานวนบุคลากรที่ต้องการในหน้าที่ต่างๆ แต่ถ้านักวิเคราะห์ ระบบ
ตัดสิน ใจว่าการซื้อซอฟต์แวร์ดีกว่าการเขียนโปรแกรม ขั้นตอนการออกแบบก็ไม่จาเป็นเลย เพราะสามารถนา
ซอฟต์แวร์สาเร็จรูปมาใช้งานได้ทันที สิ่งที่นักวิเคราะห์ระบบออกแบบมาทั้งหมดในขั้นตอนที่กล่าวมาทั้งหมดจะ
น ามา เขี ย นรวมเป็ น เอกสารชุ ด หนึ่ ง เรี ย กว่ า "ข้ อ มู ล เฉพาะของการออกแบบระบบ " (System Design
Specification) เมื่อสาเร็จแล้วโปรแกรมเมอร์สามารถใช้เป็นแบบในการเขียนโปรแกรม ได้ทันที่สาคัญก่อนที่จะส่ง
ถึงมือโปรแกรมเมอร์เราควรจะตรวจสอบกับผู้ใช้ว่า พอใจหรือไม่ และตรวจสอบกับทุกคนในทีมว่าถูกต้องสมบูรณ์
หรือไม่ และแน่ นอนที่สุดต้องส่งให้ฝ่ายบริหารเพื่อตัดสินใจว่าจะดาเนินการ ต่อไปหรือไม่ ถ้าอนุมัติก็ผ่านเข้าสู่
ขั้นตอนการสร้างหรือพัฒนาระบบ (Construction)

7
สรุปขั้นตอนที่ 4 : การออกแบบ (Design)
หน้าที : ออกแบบระบบใหม่เพื่อให้สอดคล้องกับความต้องการของผู้ใช้และฝ่ายบริหาร
ผลลัพธ์ : ข้อมูลเฉพาะของการออกแบบ(System Design Specification)
เครื่องมือ : พจนานุกรมข้อมูล Data Dictionary, แผนภาพการไหลของข้อมูล (Data Flow Diagram), ข้อมูล
เฉพาะการประมวลผล (Process Specification ), รูปแบบข้อมูล (Data Model), รูปแบบระบบ (System
Model), ผังงานระบบ (System Flow Charts), ผังงานโครงสร้าง (Structure Charts), ผังงาน HIPO (HIPO
Chart), แบบฟอร์มข้อมูลขาเข้าและรายงาน
บุคลากรและหน้าที่ :
1. นักวิเคราะห์ระบบ ตัดสินใจเลือกคอมพิวเตอร์ฮาร์ดแวร์และซอฟต์แวร์ (ถ้าใช้)
2. นักวิเคราะห์ระบบ เปลี่ยนแผนภาพทั้งหลายที่ได้จากขั้นตอนการวิเคราะห์มาเป็นแผนภาพลาดับขั้น
3. นักวิเคราะห์ระบบ ออกแบบความปลอดภัยของระบบ
4. นักวิเคราะห์ระบบ ออกแบบฟอร์มข้อมูลขาเข้า รายงาน และการแสดงภาพบนจอ
5. นักวิเคราะห์ระบบ กาหนดจานวนบุคลากรในหน้าที่ต่างๆและการทางานของระบบ
6. ผู้ใช้ ฝ่ายบริหาร และนักวิเคราะห์ระบบ ทบทวน เอกสารข้อมูลเฉพาะของการออกแบบเพื่อความ
ถูกต้องและสมบูรณ์แบบของระบบ
ขั้นตอนที่ 5 : การพัฒนาระบบ (Construction)
ขั้นตอนนี้โปรแกรมเมอร์จะเริ่มเขียนและทดสอบโปรแกรมว่า ทางานถูกต้องหรือไม่ ต้องมีการทดสอบกับ
ข้อมูลจริงที่เลือกแล้ว ถ้าทุกอย่างเรียบร้อย เราจะได้โปรแกรมที่พร้อมที่จะนาไปใช้งานจริงต่อไป หลังจากนั้นต้อง
เตรียมคู่มือการใช้และการฝึกอบรมผู้ใช้งานจริงของระบบ ระยะแรกในขั้นตอนนี้นักวิเคราะห์ระบบต้องเตรียม
สถานที่สาหรับ เครื่องคอมพิวเตอร์แล้วจะต้องตรวจสอบว่าคอมพิวเตอร์ทางานเรียบร้อยดี โปรแกรมเมอร์เขียน
โปรแกรมตามข้อมูลที่ได้จากเอกสารข้อมูลเฉพาะของการออกแบบ (Design Specification) ปกติแล้วนักวิเคราะห์
ระบบไม่มีหน้าที่เกี่ยวข้องในการเขียนโปรแกรม แต่ถ้าโปรแกรมเมอร์คิดว่าการเขียนอย่างอื่นดีกว่าจะต้องปรึกษา
นักวิเคราะห์ ระบบเสียก่อน เพื่อที่ว่านักวิเคราะห์จะบอกได้ว่าโปรแกรมที่จะแก้ไขนั้นมีผลกระทบกับระบบ ทั้งหมด
หรือไม่ โปรแกรมเมอร์เขียนเสร็จแล้วต้องมีการทบทวนกับนักวิเคราะห์ระบบและผู้ใช้งาน เพื่อค้นหาข้อผิดพลาด
วิธีการนี้เรียกว่า "Structure Walkthrough " การทดสอบโปรแกรมจะต้องทดสอบกับข้อมูลที่เลือกแล้วชุดหนึ่ง ซึ่ง
อาจจะเลื อกโดยผู้ ใช้ การทดสอบเป็ น หน้ าที่ของโปรแกรมเมอร์ แต่นักวิ เคราะห์ ระบบต้องแน่ใจว่า โปรแกรม
ทั้งหมดจะต้องไม่มีข้อผิดพลาด หลังจากนั้นต้องควบคุมดูแลการเขียนคู่มือซึ่งประกอบด้วยข้อมูลการใช้งานสารบัญ
การอ้างอิง "Help" บนจอภาพ เป็นต้น นอกจากข้อมูลการใช้งานแล้ว ต้องมีการฝึกอบรมพนักงานที่จะเป็นผู้ใช้งาน
จริงของระบบเพื่อให้เข้าใจ และทางานได้โดยไม่มีปัญหาอาจจะอบรมตัวต่อตัวหรือเป็นกลุ่มก็ได้
สรุปขั้นตอนที่ 5 : การพัฒนาระบบ (Construction)
หน้าที่ : เขียนและทดสอบโปรแกรม
ผลลัพธ์ : โปรแกรมที่ทดสอบเรียบร้อยแล้ว เอกสารคู่มือการใช้ และการฝึกอบรม
เครื่องมือ : เครื่องมือของโปรแกรมเมอร์ทั้งหลาย Editor, compiler,Structure Walkthrough, วิธีการทดสอบ
โปรแกรม การเขียนเอกสารประกอบการใช้งาน

8
บุคลากรและหน้าที่ :
1. นักวิเคราะห์ระบบ ดูแลการเตรียมสถานที่และติดตั้งเครื่องคอมพิวเตอร์ (ถ้าซื้อใหม่)
2. นักวิเคราะห์ระบบ วางแผนและดูแลการเขียนโปรแกรม ทดสอบโปรแกรม
3. โปรแกรมเมอร์เขียนและทดสอบโปรแกรม หรือแก้ไขโปรแกรม ถ้าซื้อโปรแกรมสาเร็จรูป
4. นักวิเคราะห์ระบบ วางแผนทดสอบโปรแกรม
5. ทีมที่ทางานร่วมกันทดสอบโปรแกรม
6. ผู้ใช้ตรวจสอบให้แน่ใจว่า โปรแกรมทางานตามต้องการ
7. นักวิเคราะห์ระบบ ดูแลการเขียนคู่มือการใช้งานและการฝึกอบรม

ขั้นตอนที่ 6 : การปรับเปลี่ยน (Construction)


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

ขั้นตอนที่ 7 : บารุงรักษา (Maintenance)

การบารุงรักษาได้แก่ การแก้ไขโปรแกรมหลังจากการใช้งานแล้ว สาเหตุที่ต้องแก้ไขโปรแกรมหลังจากใช้


งานแล้ว สาเหตุที่ต้องแก้ไขระบบส่วนใหญ่มี 2 ข้อ คือ 1. มีปัญหาในโปรแกรม (Bug) และ 2. การดาเนินงานใน
องค์กรหรือธุรกิจเปลี่ยนไป จากสถิติของระบบที่พัฒนาแล้วทั้งหมดประมาณ 40% ของค่าใช้จ่ายในการแก้ไข
โปรแกรม เนื่องจากมี "Bug" ดังนั้นนักวิเคราะห์ระบบควรให้ความสาคัญกับการบารุงรักษา ซึ่งปกติจะคิดว่าไม่มี
ความสาคัญมากนักเมื่อธุรกิจขยายตัวมากขึ้น ความต้องการของระบบอาจจะเพิ่มมากขึ้น เช่น ต้องการรายงาน
เพิ่มขึ้น ระบบที่ดีควรจะแก้ไขเพิ่มเติมสิ่งที่ต้องการได้การบารุงรักษาระบบ ควรจะอยู่ภายใต้การดูแลของ
นักวิเคราะห์ระบบ เมื่อผู้บริหารต้องการแก้ไขส่วนใดนักวิเคราะห์ระบบต้องเตรียมแผนภาพต่าง ๆ และศึกษา
ผลกระทบต่อระบบ และให้ผู้บริหารตัดสินใจต่อไปว่าควรจะแก้ไขหรือไม่

ในโครงงานพัฒนาระบบนี้ ที่ได้ทาการพัฒนาได้เลือกวิธีการของ Agile มาเพื่อเป็นขั้นตอนในการลดความเสี่ยง


ในปัญหาของโปรแกรม และ เพิ่มประสิทธิภาพในการพัฒนาโปรแกรมให้ดียิ่งๆขึ้นไป

9
2. การพัฒนาซอฟท์แวร์แบบ Agile

การพัฒนาซอฟท์แวร์แบบ Agile เป็นแนวคิดใหม่สาหรับการพัฒนาซอฟต์แวร์ที่พยายามจะแทรกตัวเข้าไป


ในวิธีการ แบบเดิม เพื่อให้งานสั้นลง ประหยัดเวลา และประหยัดงบประมาณการพัฒนาซอฟต์แวร์แบบ Agile มี
หลายวิธีซึ่ งส่ ว นใหญ่ แล้ ว จะเป็ น การพั ฒ นาในช่ ว งเวลาสั้ น ๆ ซึ่งอาจจะใช้เวลาประมาณ 1 - 4 สั ป ดาห์ โดย
โครงงานทั้งหมดจะประกอบด้วย กิจกรรมการระบุความต้องการ การวิเคราะห์ การออกแบบ การทดสอบ และ
การทาเอกสารเป็นต้น วิธี การพัฒนาซอฟท์แวร์แบบ Agile จะเน้นเรื่องการสื่อสารแบบตัวต่อตัว มากกว่าการใช้
เอกสาร ที ม งานอย่ างน้ อ ยต้ อ งประกอบด้ ว ยโปรแกรมเมอร์แ ละลู ก ค้ า ที่ จ ะก าหนดขอบเขตของ ระบบงาน
นอกจากนี้วิธีการแบบ Agile ยังเน้นให้การพัฒนาซอฟต์แวร์มีความก้าวหน้าและเป็นไปตามมาตรฐานที่ได้วางไว้
ร่วมกันกับการสื่อสารกับลูกค้า ซึ่งจะมีเอกสารที่เกี่ยวข้องไม่มากนัก

โดยภาพรวมแล้ว Agile Method มีหลักการและลักษณะที่สาคัญที่สาคัญดังนี้

1. ต้องทาให้ลูกค้าพึงพอใจกับการส่งมอบงานที่มีคุณภาพอย่างรวดเร็ว และต่อเนื่อง
2. พร้อมรับความต้องการของลูกค้าที่เปลี่ยนแปลงอยู่ตลอดเวลา ถึงแม้ว่าจะเป็นช่วงท้ายๆของการพัฒนา
ก็ตาม ทั้งนี้เพื่อให้ลูกค้ามีความได้เปรียบทางการแข่งขันมากที่สุด
3. ส่งมอบงานที่ใช้งานได้อย่างต่อเนื่องตั้งแต่ทุกๆสัปดาห์ ไปจนถึงทุกๆเดือน ทั้งนี้เวลาโดยรวมจะต้องไม่
ยาวนานเกินไป
4. บุคลากรที่เป็นผู้ใช้และบุคลากรที่พัฒนาระบบจะต้องทางานร่วมกันอย่างใกล้ชิดและต่อเนื่องจนเสร็จ
สิ้นโครงการ

5. สร้างแรงกระตุ้นให้กับบุคลากรที่เกี่ยวข้องกับโครงการ โดยสร้างสภาพแวดล้อมที่ดี และคอยสนับสนุน


ความต้องการ รวมถึงต้องเชื่อใจในตัวบุคคลว่าจะสามารถทางานที่ได้รับมอบหมายให้เสร็จ สิ้นได้โดยใช้
ศักยภาพสูงสุด
6. วิธีการแลกเปลี่ยนข้อมูลกันในทีมพัฒนาระบบที่มีประสิทธิภาพมากที่สุดคือ การ พูด คุย พบปะ และ
สนทนากันทั้งที่เป็นทางการและไม่เป็นทางการ
7. ชิ้นงาน (ซอฟท์แวร์) ที่ใช้งานได้เป็นตัววัดตัวแรกของความก้าวหน้าของโครงการ
8. เน้นการพัฒนาแบบค่อยเป็นค่อยไป ทั้งผู้สนับสนุนโครงการ ผู้พัฒนา และผู้ใช้จะ ต้องทางานร่วมกัน
ด้วยความก้าวหน้าแบบคงที่ได้โดยมีข้อจากัดน้อยที่สุดหรือ ไม่มีเลย
9. การใส่ใจและการติดตามเทคนิคที่ทันสมัยและการออกแบบที่ดีอย่างต่อเนื่องจะช่วยส่งเสริม
ประสิทธิภาพการพัฒนาระบบให้ดียิ่งขึ้น

10
Agile Method เป็ น วิธีในการพั ฒ นาซอฟท์แวร์ โดยมีห ลักการในการพัฒ นาระบบที่เน้นการทางานที่
รวดเร็ว มีการเตรี ย มพร้อมที่ จ ะตอบสนองต่อความเปลี่ ยนแปลงที่ อาจเกิดขึ้น ได้ตลอดเวลา โดยเฉพาะความ
ต้องการของผู้ใช้ วิธีพัฒนาแบบนี้ถือเป็นการพัฒนาแบบทาซ้า ที่จะต้องมีการพบปะสนทนากับผู้ใช้อยู่ตลอดเวลา
และในขณะที่พบปะกันนั้นก็จะถือเป็นช่วงระยะเวลาของการส่งงานไปในตัวด้วย การส่งงานแต่ละครั้งของวิธีการ
พัฒนาแบบนี้ โดยส่วนใหญ่จะเป็นการพัฒนาเฉพาะส่วนย่อย ๆ แล้วค่อยทยอยส่งให้กับผู้ใช้ เมื่อผู้ใช้ได้ทดสอบหรือ
ประเมิน ระบบแล้ว ถ้าต้องการปรับ เปลี่ยนตรงส่วนใดก็สามารถทาได้โดยที่ไม่ต้องรื้อระบบใหม่ทั้ง หมด ดังนั้น
นอกจากความ สามารถทางด้านพั ฒ นาระบบของทีมพัฒ นาแล้ว สมาชิกในทีมจาเป็นที่จะต้องมีทักษะเรื่องการ
ปฏิสัมพันธ์ระหว่างบุคคลที่ดี นอกจากนั้นผู้ใช้จาเป็นต้องไว้เนื้อเชื่อใจทีมที่ทาการพัฒนาระบบในระดับ หนึ่งด้วย

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

11
2.1 การประยุกต์ใช้ Agile กับโครงการพัฒนาระบบ
ในโครงการนี้ ได้ใช้ขั้นตอนกระบวนการ ของ Agile มาประยุกต์ใช้เป็นหลัก โดยได้ใช้ไปทั้งสิ้น 4 ขั้นตอน
หลัก ซึ่งแต่ละขั้นตอน ได้ดาเนินไปอย่างเป็นระบบ และ เป็นขั้นตอน อย่างต่อเนื่อง และ ซ้าไปเรื่อยๆ เพื่อลดการ
เกิดปัญหาเนื่องมาจากการพัฒนาระบบ ซึ่งเป็นไปตามวัตถุประสงค์ของ Agile นั่นเอง
1. การสร้าง(Build)
ในขัน้ ตอนการสร้างนี้ ได้เลือกใช้ภาษา Visual Basic เพื่อใช้ในการสร้าง และ พัฒนาโปรแกรม เนื่องจาก
เป็นภาษาที่เหมาะสมกับความต้องการ และ วัตถุประสงค์ของโปรแกรมที่ได้รับมอบหมาย อีกทั้งเป็นภาษา
ที่ตอบโจทย์กับตัวโปรแกรม และ ตัวโปรแกรมก็สอดคล้องกับความต้องการของลูกค้า อีกทั้งผู้ใช้โปรแกรม
อีกด้วย นอกจากนี้ ในกระบวนการสร้าง ก็ได้มีการแบ่ง ส่วนของงานชัดเจน ระหว่างสมาชิกในทีมพัฒนา
ระบบ รวมถึงการแบ่งส่วนของโปรแกรม หน้าต่าง ฟังก์ชัน และ อื่นๆ อย่างชัดเจน เพื่อไม่ให้เกิดความ
สับสน และ ง่ายต่อการดู และ กลับมาแก้ไขปรับปรุงในครั้งต่อๆไป

2. การกาหนดค่า และ การตั้งค่า(Configure)


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

12
3. การทดสอบระบบ(Test)
ขั้นตอนของการทดสอบนี้ เป็นขั้นตอนของการทดสอบว่า โค้ดที่ใช้ในการเขียน มีปัญหาอะไรหรือไม่ เป็น
เพียงการทดสอบระบบเบื้องต้นก่อนว่า การทางานของโปรแกรม ถูกต้องตรงกับความต้องการหรือเปล่า
แล้วหากโปรแกรมเป็นไปในทิศทางนี้ จะตอบโจทย์ผู้ใช้งานได้หรือยัง หากมีส่วนไหนให้ปรับปรุง เพื่อให้
ตรงความต้องการผู้ใช้งานมากขึ้น ก็สามารถติดต่อกับทีมพัฒนาได้โดยตรง เพื่อทาการปรับปรุงแก้ไข
ก่อนที่จะปล่อยให้ทดสอบระบบจริง ในข้อนี้จะใช้การประชุม และ การนาเสนอ ในที่ประชุม และ ทดสอบ
ให้เห็นโดยทั่วกันเลย และ บันทึกข้อเสนอแนะ และ สิ่งที่ควรปรับปรุงมาดาเนินการทันที

4. การปล่อยโปรแกรมให้ทดลองใช้งาน(Release)
ขั้นตอนของการปล่อยระบบ หรือ โปรแกรม ให้ได้ทาการทดสอบจริง ในขั้นตอนนี้ ถือเป็นขั้นตอนที่ มี
ประสิทธิภาพในการตรวจสอบข้อผิดพลาดของโปรแกรมสูงที่สุด เนื่องจาก เป็นการปล่อยให้ผู้ใช้งานได้ใช้
งานจริง เพื่อจะได้ทดสอบว่า หากใช้จริง โปรแกรมที่ได้ทาการพัฒนาจะมีปัญหาอยู่ส่วนใดบ้าง เพื่อทาการ
แก้ไขต่อไป หากจานวนผู้ใช้งานมีจานวนมาก จะยิ่งทาให้พบข้อผิดพลาดเร็วยิ่งขึ้น ก็จะเป็นการ
ประหยัดเวลาในการปรับปรุงโปรแกรมได้มากขึ้นไปอีก ซึ่งในช่วงแรกๆนั้น หน้าตาโปรแกรม อาจยังไม่ได้
ทาการออกแบบ แต่เป็นเพียงการทดสอบการทางานของโค้ด และ กระบวนการของโปรแกรม แต่ในช่วง
ถัดไป การออกแบบจะเริ่มขึ้น และ มีการปล่อยทั้งโปรแกรม ที่ประกอบด้วยส่วนของการออกแบบให้ได้
ทดสอบ และ หาข้อบกพร่องเพื่อใช้ในการปรับปรุงด้วย ในข้อนี้ ใช้วิธีการเขียน Formative เพื่อให้
ผู้ใช้งานได้ให้คะแนน และ เขียนข้อเสนอแนะ และ สิ่งที่ควรปรับปรุง เพื่อที่จะนารายการเหล่านั้นมาแก้ไข
ปรับปรุงต่อไป

13
5. การออกแบบ(Design)
ส่วนของการออกแบบนี้ จะเป็นการออกแบบหน้าตาโปรแกรม เป็นหลัก เพื่อให้ตอบโจทย์การใช้งานของ
ผู้ใช้ เช่น การออกแบบที่เห็นแล้วสบายตา ใช้งานได้ระยะยาว สีสันไม่แสบตาเกินไป ตัวอักษรชัดเจน เป็น
ต้น ส่วนการออกแบบอื่น ในโครงการนี้จะมีอีกส่วนคือ การออกแบบฐานข้อมูล ว่าจะต้องมีตารางใดบ้าง
ส่งเข้าส่งออกเป็นรูปแบบใด
ขั้นตอนในห้าขั้นตอนข้างต้น เป็นขั้นตอนที่ดาเนินการโดยการวนซ้า เพื่อลดปัญหาในการพัฒนาโปรแกรมให้ลดลง
ในแต่ละรอบ ตามหลักการของ Agile

14
ความต้องการของระบบ (System Requirement)
ความต้องการของระบบ จากเก็บความต้องการของผู้ใช้งานในกลุ่มงานวิทยาการคอมพิวเตอร์ และจาก
การศึกษาขั้นตอนการทางานเดิม ทาให้สามารถนามาวิเคราะห์เป็นฟังค์ชั่นการทางานของระบบใหม่ ได้ดังนี้

1 ระบบการจัดเก็บข้อมูล
Item Function Description
1.1.1 สามารถระบุตาแหน่งประเภทของผู้เข้า - ตาแหน่งเบื้องต้นมีอยู่
รับการอบรมได้ 4 ตาแหน่ง
1.1.2 สามารถแยกจานวนเป้าหมายของผู้เข้า
รับการอบรมแต่ละประเภทได้ 1. ผู้บริหาร
1.1 ผู้เข้ารับการอบรม 1.1.3 สามารถแยกจานวนผู้มาอบรมจริงของผู้ 2. อานวยการ
เข้ารับการอบรมแต่ละประเภทได้ 3. วิชาการ
1.1.4 สามารถเพิ่มตาแหน่งประเภทของผู้เข้า 4.ทั่วไป
รับการอบรมได้
1.2.1 สามารถระบุงบประมาณโครงการที่
ได้รับของแต่ละโครงการได้
1.2 งบประมาณ
1.2.2 สามารถระบุงบประมาณโครงการที่ใช้
จริงของแต่ละโครงการได้
1.3.1 สามารถระบุตัวชี้วัดต่างๆ ของแต่ละ - ตัวชี้วัดเบื้องต้นมีอยู่ 5ตัว
โครงการได้ ตามอัตราส่วน 100 % 1. วิทยากร
2.สถานที่
1.3 ภาพรวมตัวชี้วัด
1.3.2 สามารถสรุปผลรวมตัวชี้วัดของแต่ละ 3. บริการ
โครงการได้ตามอัตราส่วน100 % 4. ความเข้าใจ
5. การนาไปใช้
1.4.1 สามารถระบุจานวนวิทยากรหลัก
ของแต่ละโครงการได้
1.4 จานวนวิทยากร
1.4.2 สามารถระบุจานวนผู้ช่วยวิทยาการของ
แต่ละโครงการได้
1.5.1 สามารถระบุหัวหน้าของแต่ละโครงการ -สามารถแยกแยะได้ว่าบุค-
1.5 จานวนผู้รับผิดชอบ ได้ ลากรคนใดเป็นหัวหน้าของ
โครงการ 1.5.2 สามารถระบุบุคลากรในหน่วยงานของ หน่วยงานใด
หัวหน้าแต่ละโครงการได้

15
2 ระบบการจัดการข้อมูลผู้ใช้และจัดการโปรแกรม

Item Function Description


2.1.1 ผู้ดูแลระบบสามารถเพิ่มชื่อผู้ใช้
เข้าสู่ระบบได้
2.1.2 ผู้ดูแลระบบสามารถลบผู้ใช้ออก
จากระบบได้
2.1.3 ผู้ดูแลระบบสามารถเพิ่ม
ตาแหน่งประเภทของผู้เข้ารับ
2.1 ผู้ดูแลระบบ การอบรมของแต่ละโครงการได้
2.1.4 ผู้ดูแลระบบสามารถมอบหมายให้
บุคคลใดบุคคลหนึ่ง
หรือบุคคลหลายคนเป็นผู้แก้ไข
โครงการได้

2.2.1 ผู้แก้ไขโครงการสามารถเพิ่ม
โครงการใหม่เข้าไปในระบบได้

2.2 ผู้แก้ไขโครงการ 2.2.2 ผู้แก้ไขโครงการสามารถลบ


โครงการออกจากระบบได้
2.2.3 ผู้แก้ไขโครงการสามารถแก้ไข
โครงการที่อยู่ในระบบได้
2.3.1 ผู้ใช้งานสามารถตรวจสอบข้อมูล
ในโครงการแต่ละโครงการได้
2.3 ผู้ใช้งาน
2.3.2 ผู้ใช้งานสามารถพิมพ์ข้อมูลของ
แต่ละโครงการได้

16
3 การทางานของโปรแกรม

Item Function Description


3.1.1 โปรแกรมต้องการผู้ใช้ให้ทาการ
เข้าสู่ระบบก่อนที่จะใช้
งานโปรแกรมได้
3.1.2 โปรแกรมสามารถแยกแยะ
3.1 การเข้าสู่ระบบ
ประเภทของแต่ละบัญชีผู้ใช้ได้
3.1.3 โปรแกรมสามารถจากัดการใช้งาน
ของแต่ละบัญชีผู้ใช้ได้

3.2.1 โปรแกรมสามารถเปลี่ยนแปลง
ฐานข้อมูลที่ใช้ในการเชื่อมต่อ
ฐานข้อมูลได้

3.2 การเปลี่ยนแปลงฐานข้อมูล
3.2.2 โปรแกรมสามารถรองรับ
ข้อผิดพลาดจากการเชื่อมต่อฐานข้อมูล
ได้

17
ทาการวิเคราะห์และออกแบบระบบ ( System Analysis And Design )
จากการการวิเคราะห์ และออกแบบว่าระบบ จะต้องทางานอย่างไร เป็นขั้นตอนกระบวนการอย่างไร โดย
สามารถเขียนเป็นรูปแบบของแผนภาพได้ การวิเคราะห์และออกแบบระบบ สาหรับโครงการนี้ ประกอบด้วย 4
องค์ประกอบ ดังนี้
1. โครงสร้างระบบ (System Architecture)
2. แผนภาพแสดงความสัมพันธ์ของผู้ใช้ระบบ
3. แผนภาพกิจกรรม (Activity Diagram)
4. การออกแบบฐานข้อมูล
5. แบบจาลองความสัมพันธ์ระหว่างข้อมูล (ER-Diagram)
6. พจนานุกรมข้อมูล (Data Dictionary)

1. โครงสร้างระบบ (System Architecture)

18
2. แผนภาพแสดงความสัมพันธ์ของผู้ใช้ระบบ (Use Case Diagram)
2.1 Use Case Diagram ระบบข้อมูลผู้ใช้งาน ประกอบด้วย
- แสดงข้อมูลสมาชิก
- ค้นหาข้อมูลสมาชิก
- เพิ่มข้อมูลสมาชิก
- แก้ไขข้อมูลสมาชิก
- เพิ่มตาแหน่งผู้มาอบรม

19
2.2 Use Case Diagram บันทึกข้อมูลโครงการ ประกอบด้วย
- เพิ่มข้อมูลโครงการ
- แก้ไขข้อมูลโครงการ
- แสดงข้อมูลโครงการ
- สั่งพิมพ์ข้อมูลโครงการ ซึ่งจะเชื่อมโยงมาจากการแสดงข้อมูลโครงการ

20
2.3 Use Case Description ของระบบข้อมูลผู้ใช้งาน
ชื่อยูสเคส ระบบข้อมูลผู้ใช้งาน
รายละเอียดโดยสังเขป ใช้สาหรับจัดการข้อมูล จัดการสิทธิ์การเข้าใช้งานของผู้ใช้งาน
แอคเตอร์ ผู้ดูแลระบบ
เงื่อนไขก่อนหน้า -
ผู้เกี่ยวข้อง ผู้ดูแลระบบ
แอคเตอร์ ระบบ
1. แสดงข้อมูลสมาชิก 1.1 แสดงข้อมูลสมาชิกของสมาชิกทั้งหมด โดยย่อ
2. ค้นหาข้อมูลสมาชิก 2.1 ระบบจะทาการเคลื่อนตารางไปหาตาแหน่งที่ข้อมูล
3. เพิ่มข้อมูลสมาชิก สมาชิกตามเงื่อนไขที่แอคเตอร์ส่งมา
4. แก้ไขข้อมูลสมาชิก 3.1 เพิ่มข้อมูลสมาชิก และสิทธิ์การใช้งาน ลงในฐานข้อมูล
5. เพิ่มตาแหน่งผู้มาอบรม ในระบบ
ขั้นตอนการทางานหลัก 4.1 แก้ไขข้อมูลสมาชิกของสมาชิกที่เลือก
5.1 ตาแหน่งผู้มาอบรม ใช้ในการเพิ่มข้อมูลโครงการลงใน
ฐานข้อมูลในระบบ

1. เมื่อค้นหาข้อมูลสมาชิกไม่พบตามเงื่อนไข สามารถเลือกที่จะเพิ่มผู้ใช้งานสมาชิกได้
ขั้นตอนการทางาน 2. เมื่อค้นหาข้อมูลสมาชิกพบและข้อมูลถูกต้องตามเงื่อนไข สามารถจบการทางานได้
ทางเลือก 3. เมื่อเพิ่มข้อมูลสมาชิกที่มีอยู่แล้ว จะแจ้งให้ผู้ใช้งานทราบและให้กรอกรายละเอียดอีกครั้ง

21
2.4 Use Case Description ของระบบบันทึกข้อมูลโครงการ
ชื่อยูสเคส ระบบบันทึกข้อมูลโรงการ
รายละเอียดโดยสังเขป ใช้สาหรับการบันทึกข้อมูล และแก้ไขโครงการต่างๆ
แอคเตอร์ ผู้แก้ไขโครงการ และผู้ใช้งานทั่วไป
เงื่อนไขก่อนหน้า -
ผู้เกี่ยวข้อง ผู้แก้ไขโครงการ และผู้ใช้งานทั่วไป
แอคเตอร์ ระบบ
1. แสดงข้อมูลโครงการ 1.1 ระบบจะแสดงข้อมูลโครงการทั้งหมด และผู้ใช้สามารถ
2. เพิ่มข้อมูลโครงการ เจาะจงเลือกโครงการที่ต้องการได้
3. แก้ไขข้อมูลโครงการ 2.1 ระบบจะเพิ่มข้อมูลโครงการต่างๆ ตามเงื่อนไขลงใน
ขั้นตอนการทางานหลัก 4. สั่งพิมพ์ข้อมูลโครงการ ฐานข้อมูลในระบบ
3.1 แก้ไขข้อมูลโครงการของโครงการที่เลือกได้
4.1 สามารถสั่งพิมพ์โครงการที่เลือกได้

1. เมื่อค้นหาข้อมูลโครงการไม่พบตามเงื่อนไข สามารถเลือกที่จะเพิ่มโครงการใหม่ได้
2. เมื่อค้นหาข้อมูลโครงการพบและข้อมูลถูกต้องตามเงื่อนไข สามารถจบการทางานได้
3. เมื่อเพิ่มโครงการที่มีอยู่แล้ว จะแจ้งให้ผู้ใช้งานทราบและให้กรอกรายละเอียดอีกครั้ง
ขั้นตอนการทางาน
ทางเลือก

22
3. แผนภาพกิจกรรม (Activity Diagram)
แผนภาพกิจกรรม ( Activity Diagram ) คือขั้นตอนการทางานของระบบ โดยจะแสดงให้เห็นถึงทางเลือก
และการตัดสินใจตามเงื่อนไขโปรแกรม เพื่อให้ได้ผลลัพธ์ที่ต้องการในขั้นตอนนั้น

23
4. แบบจาลองความสัมพันธ์ของข้อมูล (ER-Diagram)

24
5. พจนานุกรมข้อมูล (Data Dictionary)
Table Name: Account_tb มีโครงสร้างดังนี้
ประเภท ค่าว่าง
ลาดับที่ คอลัมน์ คาอธิบาย อ้างอิงตาราง คีย์
ข้อมูล NULL
1 uid int(11) ลาดับรายการ PK NO
2 username varchar(255) ชื่อผู้ใช้งาน NO
3 password varchar(255) รหัสผ่านผู้ใช้งาน NO
4 status int(11) สิทธิ์การเข้าถึง NO
5 name varchar(255) ชื่อภาษาไทย NO
6 surname varchar(255) นามสกุลภาษาไทย NO
7 idcard int(11) รหัสประจาตัว NO

Table Name: Rank_tb มีโครงสร้างดังนี้


ประเภท ค่าว่าง
ลาดับที่ คอลัมน์ คาอธิบาย อ้างอิงตาราง คีย์
ข้อมูล NULL
1 rid int(11) ลาดับรายการ PK NO
2 positionName varchar(255) ชื่อตาแหน่ง Trainee_tb FK NO

Table Name: Project_tb มีโครงสร้างดังนี้


ประเภท ค่าว่าง
ลาดับที่ คอลัมน์ คาอธิบาย อ้างอิงตาราง คีย์
ข้อมูล NULL
ProjectOwner_tb
Indication_tb
1 pid int(11) ลาดับรายการ Fund_tb PK,FK NO
Lecturer_tb
Trainee_tb
2 pname varchar(255) ชื่อโครงการ NO

25
Table Name: Trainee_tb มีโครงสร้างดังนี้
ประเภท ค่าว่าง
ลาดับที่ คอลัมน์ คาอธิบาย อ้างอิงตาราง คีย์
ข้อมูล NULL
1 Project_tb.pid int(11) ลาดับรายการ PK NO
2 Rank_tb.rid int(11) รหัสตาแหน่ง NO
3 expectation int(11) เป้าหมายผู้มาอบรม NO
4 reality int(11) ผู้มาอบรมจริง NO

Table Name: Fund_tb มีโครงสร้างดังนี้


ประเภท ค่าว่าง
ลาดับที่ คอลัมน์ คาอธิบาย อ้างอิงตาราง คีย์
ข้อมูล NULL
1 Project_tb.pid int(11) ลาดับรายการ PK NO
2 pfund int(11) งบประมาณ NO
3 ppayment int(11) ใช้งานจริง NO

Table Name: Indication_tb มีโครงสร้างดังนี้


ประเภท ค่าว่าง
ลาดับที่ คอลัมน์ คาอธิบาย อ้างอิงตาราง คีย์
ข้อมูล NULL
1 Project_tb.pid int(11) ลาดับรายการ PK NO
2 lecturer int(11) ดัชนีของวิทยากร NO
3 place int(11) ดัชนีของสถานที่ NO
4 service int(11) ดัชนีของการบริการ NO
5 understand int(11) ดัชนีของความเข้าใจ NO
6 usage int(11) ดัชนีของการนาไปใช้ NO

26
Table Name: Lecturer_tb มีโครงสร้างดังนี้
ประเภท ค่าว่าง
ลาดับที่ คอลัมน์ คาอธิบาย อ้างอิงตาราง คีย์
ข้อมูล NULL
1 Project_tb.pid int(11) ลาดับรายการ PK NO
2 LectureInfo.lid int(11) รหัสของวิทยากร NO
3 HelperInfo.hid int(11) รหัสของผู้ช่วยวิทยากร NO

Table Name: LecturerInfo_tb มีโครงสร้างดังนี้


ค่าว่าง
ลาดับที่ คอลัมน์ ประเภทข้อมูล คาอธิบาย อ้างอิงตาราง คีย์
NULL
1 lid int(11) ลาดับรายการ Lecture_tb PK,FK NO
2 lname varchar(255) ชื่อของวิทยากร NO
3 lsurname varchar(255) นามสกุลของวิทยากร NO
4 lfrom varchar(255) สถาบันของวิทยากร NO

Table Name: HelperInfo_tb มีโครงสร้างดังนี้


ค่าว่าง
ลาดับที่ คอลัมน์ ประเภทข้อมูล คาอธิบาย อ้างอิงตาราง คีย์
NULL
1 hid int(11) ลาดับรายการ Lecture_tb PK,FK NO
2 hname varchar(255) ชื่อของผู้ช่วยวิทยากร NO
3 hsurname varchar(255) นามสกุลของผู้ช่วยวิทยากร NO
4 hfrom varchar(255) สถาบันของผู้ช่วยวิทยากร NO

Table Name: ProjectOwner_tb มีโครงสร้างดังนี้


ประเภท ค่าว่าง
ลาดับที่ คอลัมน์ คาอธิบาย อ้างอิงตาราง คีย์
ข้อมูล NULL
1 Project_tb.pid int(11) ลาดับรายการ PK NO
2 leader int(11) จานวนของวิทยากรหลัก NO
3 helper int(11) จานวนของผู้ช่วยวิทยากร NO

27
ภาคผนวก

28
1.คู่มือการใช้งานโปรแกรม
ในส่วนของการใช้งานโปรแกรม จะแบ่งออกเป็นสามส่วนหลัก
-User
-Editor
-Admin
1.เมื่อเปิดโปรแกรม จะพบเจอหน้าตาโปรแกรมแบบนี้ ให้สังเกตสถานะด้านล่าง หากสถานะที่พบเห็น
ด้านล่าง คือ Not Connect ให้ทาตามในข้อสอง แต่หากขึ้นว่า Connected ให้ใส่บัญชีเข้าใช้งานได้เลย

2. เมื่อสถานะคือ not connected ให้คลิกไปที่ ฐานข้อมูล และกรอกให้ครบ จากนั้น คลิก บันทึกข้อมูล

29
3. เมื่อเข้าใช้งานได้แล้ว จะพบเจอหน้าตานี้ (แต่ส่วนการทางาน จะแตกต่างกัน หากสิทธิการเข้าถึง
ต่างกัน)

User mode

Editor mode

Admin mode

30
4. ส่วนสร้างโครงการ

31
4.1 เมื่อกดเพิ่มผู้เข้ารับการอบรมแล้ว คลิกเข้าไป เพื่อใส่จานวนคาดหวัง และ อบรมจริง

32
4.2 กรอกข้อมูลให้ครบ ส่วนปฏิทิน สามารถคลิกเพื่อกดเลือกวันที่ได้ หากไม่ต้องการพิมพ์

33
5.ส่วนแก้ไขโครงการ

5.1 คลิกที่โครงการที่ต้องการจะแก้ แล้วข้อมูลเดิมจะขึ้นมา จากนั้น ปรับแก้ได้ทันที แล้วกดบันทึก

34
6.ส่วนการเปรียบเทียบข้อมูล

35
6.1 คลิกเลือก โครงการที่ต้องการเปรียบเทียบฝั่งซ้าย และ ฝั่งขวา จากนั้นเลือกชนิดที่ต้องการเทียบ
ด้านล่าง แล้วกด Compare แต่หากต้องการดูกราฟวงกลม สามารถคลิกที่ ดูกราฟวงกลม ได้เลย

36
7.ส่วนของภาพรวม

37
7.1 หากกดเข้าไปที่ ภาพรวมโครงการทั้งหมด ให้เลือกว่าอยากดูรายการย้อนหลังกี่เดือน และ รายการใด
จากนั้น กด ดูกราฟแนวโน้ม

38
7.2 หากกดเข้าไปที่ ภาพรวมแต่ละโครงการ

39
7.3 ถ้าต้องการดูรายละเอียดของกราฟ ดูได้สามกราฟด้านบน เพียงแค่คลิกไปที่กราฟ

40
8.ส่วนผู้ดูแลระบบ

8.1 ส่วนการจัดการบัญชี

41
8.1.1 หากต้องการสร้างบัญชี สามารถสร้างได้ทันที
8.1.2 หากต้องการแก้ไขข้อมูลบัญชี เพียงกดที่บัญชีที่ต้องการ และ แก้ไขได้ทันที

8.2 ส่วนการจัดการรายชื่อ เป็นการเพิ่มรายชื่อวิทยากร และ บุคลากร เพียงป้อนชื่อ จากนั้น กดเพิ่มได้


เลย

42
8.3 ส่วนการจัดการตาแหน่ง โดยการเพิ่มชื่อตาแหน่ง

43
2. Source Code

44
addProject_Panel
Imports MySql.Data.MySqlClient

Public Class addProject_Panel


Public dbconn = Login_Form.dbconn
Public sql = Login_Form.sql
Public dbcomm = Login_Form.dbcomm
Public dbread = Login_Form.dbread
Public notadd As Boolean = False
Dim positionlist As New List(Of String)
Public x, mon As New ArrayList
Public a, months As String
Public calendarFlag As Integer = 0

Public Sub back_tile_item_Click(sender As Object, e As EventArgs) Handles


back_tile_item.Click
If Me.IsOpen Then
Me.IsOpen = False
End If
clearAll()
End Sub
Private Sub trainee_list_ColumnWidthChanging(sender As Object, e As
ColumnWidthChangingEventArgs) Handles trainee_list.ColumnWidthChanging
e.Cancel = True
e.NewWidth = trainee_list.Columns(e.ColumnIndex).Width
End Sub
Private Sub team_list_ColumnWidthChanging(sender As Object, e As
ColumnWidthChangingEventArgs) Handles team_list.ColumnWidthChanging
e.Cancel = True
e.NewWidth = team_list.Columns(e.ColumnIndex).Width
End Sub
Private Sub helper_list_ColumnWidthChanging(sender As Object, e As
ColumnWidthChangingEventArgs) Handles helper_list.ColumnWidthChanging
e.Cancel = True
e.NewWidth = helper_list.Columns(e.ColumnIndex).Width
End Sub
Private Sub add_position_button_Click(sender As Object, e As EventArgs) Handles
add_position_button.Click
Dim combotext As String = position_combobox.SelectedItem.ToString
Dim item1 As ListViewItem = trainee_list.FindItemWithText(combotext)
If (item1 IsNot Nothing) Then
Else
trainee_list.Items.Add(CreateTraineetRow(combotext))
End If
End Sub
Private Sub trainee_list_MouseClick(sender As Object, e As MouseEventArgs) Handles
trainee_list.MouseClick
' show panel list and load all information
Dim index As Integer = trainee_list.SelectedIndices(0)
Dim myValue As String = InputBox("ใส่ จำนวนที่คำดหวัง", "กรุ ณำใส่ ขอ้ มูล",
trainee_list.Items(index).SubItems(1).Text)
Dim myValue2 As String = InputBox("ใส่ จำนวนที่มำอบรมจริ ง", "กรุ ณำใส่ ขอ้ มูล",
trainee_list.Items(index).SubItems(2).Text)
trainee_list.Items(index).SubItems(1).Text = myValue
trainee_list.Items(index).SubItems(2).Text = myValue2
End Sub

45
Private Function CreateTraineetRow(ByVal name As String) As
System.Windows.Forms.ListViewItem
'create row in this function and return row and add to project_list
Dim row As System.Windows.Forms.ListViewItem = New
System.Windows.Forms.ListViewItem(New String() {name, "0", "0"})
Return row
End Function
Private Sub checkTextbox(sender As Object, e As KeyPressEventArgs) Handles
fund_textbox.KeyPress
If Asc(e.KeyChar) <> 8 Then
If Asc(e.KeyChar) < 48 Or Asc(e.KeyChar) > 57 Then
e.Handled = True
End If
End If
End Sub
Private Sub checkTextbox2(sender As Object, e As KeyPressEventArgs) Handles
used_textbox.KeyPress
If Asc(e.KeyChar) <> 8 Then
If Asc(e.KeyChar) < 48 Or Asc(e.KeyChar) > 57 Then
e.Handled = True
End If
End If
End Sub
Private Sub addProject_Panel_Load(sender As Object, e As EventArgs) Handles
MyBase.Load
addData()
End Sub
Public Sub addData()
calendarFlag = 0
CalendarView1.Hide()
mon.Clear()
mon.Add("มกรำคม")
mon.Add("กุมภำพันธ์")
mon.Add("มีนำคม")
mon.Add("เมษำยน")
mon.Add("พฤษภำคม")
mon.Add("มิถุนำยน")
mon.Add("กรกฎำคม")
mon.Add("สิ งหำคม")
mon.Add("กันยำยน")
mon.Add("ตุลำคม")
mon.Add("พฤษจิกำยน")
mon.Add("ธันวำคม")

'add data to position combobox


sql = "SELECT * FROM `position`"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
While dbread.Read()
If Not (position_combobox.Items.Contains(dbread("uname"))) Then
position_combobox.Items.Add(dbread("uname"))
End If
End While
dbread.Close()
' end add data

46
'add data to main_lecturer and helper combobox
sql = "SELECT * FROM `lecturerinfo`"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
While dbread.Read()
If Not (main_lecturer_combobox.Items.Contains(dbread("lname"))) Then
main_lecturer_combobox.Items.Add(dbread("lname"))
End If
If Not (helper_lecturer_combobox.Items.Contains(dbread("lname"))) Then
helper_lecturer_combobox.Items.Add(dbread("lname"))
End If
End While
dbread.Close()
' end add data

'add data to leader and team combobox


sql = "SELECT * FROM `leaderinfo`"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
While dbread.Read()
If Not (leader_combobox.Items.Contains(dbread("leadname"))) Then
leader_combobox.Items.Add(dbread("leadname"))
End If
If Not (team_combobox.Items.Contains(dbread("leadname"))) Then
team_combobox.Items.Add(dbread("leadname"))
End If
End While
dbread.Close()
' end add data

End Sub
Private Sub add_helper_button_Click(sender As Object, e As EventArgs) Handles
add_helper_button.Click
If helper_lecturer_combobox.SelectedIndex = -1 Then
Else
Dim combotext As String = helper_lecturer_combobox.SelectedItem.ToString
Dim item1 As ListViewItem = helper_list.FindItemWithText(combotext)
If (item1 IsNot Nothing) Then
Else
If main_lecturer_combobox.SelectedIndex = -1 Then
helper_list.Items.Add(CreateTraineetRow(combotext))
ElseIf combotext <> main_lecturer_combobox.SelectedItem.ToString Then
helper_list.Items.Add(CreateTraineetRow(combotext))
End If
End If
End If
End Sub
Private Sub selected_index_changed(sender As Object, e As EventArgs) Handles
main_lecturer_combobox.SelectedIndexChanged
Dim combotext As String = main_lecturer_combobox.SelectedItem.ToString
Dim item1 As ListViewItem = helper_list.FindItemWithText(combotext)
If (item1 IsNot Nothing) Then
helper_list.Items.Remove(item1)
End If
End Sub
Private Sub add_team_button_Click(sender As Object, e As EventArgs) Handles
add_team_button.Click
If team_combobox.SelectedIndex = -1 Then

47
Else
Dim combotext As String = team_combobox.SelectedItem.ToString
Dim item1 As ListViewItem = team_list.FindItemWithText(combotext)
If (item1 IsNot Nothing) Then
Else
If leader_combobox.SelectedIndex = -1 Then
team_list.Items.Add(CreateTraineetRow(combotext))
ElseIf combotext <> leader_combobox.SelectedItem.ToString Then
team_list.Items.Add(CreateTraineetRow(combotext))
End If
End If
End If
End Sub
Private Sub select_index_change(sender As Object, e As EventArgs) Handles
leader_combobox.SelectedIndexChanged
Dim combotext As String = leader_combobox.SelectedItem.ToString
Dim item1 As ListViewItem = team_list.FindItemWithText(combotext)
If (item1 IsNot Nothing) Then
team_list.Items.Remove(item1)
End If
End Sub
Private Sub checkTextBoxi1(sender As Object, e As KeyPressEventArgs) Handles
TextBoxX1.KeyPress
Dim FullStop As Char
FullStop = "."
If e.KeyChar = FullStop And TextBoxX1.Text.IndexOf(FullStop) <> -1 Then
e.Handled = True
Return
End If
If Not Char.IsDigit(e.KeyChar) Then
If (e.KeyChar <> FullStop) And
(e.KeyChar <> Convert.ToChar(Keys.Back)) Then
e.Handled = True
Return
End If
End If
End Sub
Private Sub checkTextBoxi2(sender As Object, e As KeyPressEventArgs) Handles
TextBoxX2.KeyPress
Dim FullStop As Char
FullStop = "."
If e.KeyChar = FullStop And TextBoxX2.Text.IndexOf(FullStop) <> -1 Then
e.Handled = True
Return
End If
If Not Char.IsDigit(e.KeyChar) Then
If (e.KeyChar <> FullStop) And
(e.KeyChar <> Convert.ToChar(Keys.Back)) Then
e.Handled = True
Return
End If
End If
End Sub
Private Sub checkTextBoxi3(sender As Object, e As KeyPressEventArgs) Handles
TextBoxX3.KeyPress
Dim FullStop As Char
FullStop = "."
If e.KeyChar = FullStop And TextBoxX3.Text.IndexOf(FullStop) <> -1 Then

48
e.Handled = True
Return
End If
If Not Char.IsDigit(e.KeyChar) Then
If (e.KeyChar <> FullStop) And
(e.KeyChar <> Convert.ToChar(Keys.Back)) Then
e.Handled = True
Return
End If
End If
End Sub
Private Sub checkTextBoxi4(sender As Object, e As KeyPressEventArgs) Handles
TextBoxX4.KeyPress
Dim FullStop As Char
FullStop = "."
If e.KeyChar = FullStop And TextBoxX4.Text.IndexOf(FullStop) <> -1 Then
e.Handled = True
Return
End If
If Not Char.IsDigit(e.KeyChar) Then
If (e.KeyChar <> FullStop) And
(e.KeyChar <> Convert.ToChar(Keys.Back)) Then
e.Handled = True
Return
End If
End If
End Sub
Private Sub checkTextBoxi5(sender As Object, e As KeyPressEventArgs) Handles
TextBoxX5.KeyPress
Dim FullStop As Char
FullStop = "."
If e.KeyChar = FullStop And TextBoxX5.Text.IndexOf(FullStop) <> -1 Then
e.Handled = True
Return
End If
If Not Char.IsDigit(e.KeyChar) Then
If (e.KeyChar <> FullStop) And
(e.KeyChar <> Convert.ToChar(Keys.Back)) Then
e.Handled = True
Return
End If
End If
End Sub
Public Sub clearAll()
project_name_textbox.Clear()
position_combobox.Items.Clear()
trainee_list.Items.Clear()
fund_textbox.Clear()
used_textbox.Clear()
main_lecturer_combobox.Items.Clear()
helper_lecturer_combobox.Items.Clear()
helper_list.Items.Clear()
leader_combobox.Items.Clear()
team_combobox.Items.Clear()
team_list.Items.Clear()
TextBoxX1.Clear()
TextBoxX2.Clear()
TextBoxX3.Clear()

49
TextBoxX4.Clear()
TextBoxX5.Clear()
day_textbox.Clear()
month_combobox.SelectedIndex = -1
year_textbox.Clear()
addData()
End Sub
Public Sub ButtonX1_Click(sender As Object, e As EventArgs) Handles ButtonX1.Click
clearAll()
End Sub

Private Sub CalendarView1_ItemClick(sender As Object, e As EventArgs) Handles


CalendarView1.ItemClick

a = CalendarView1.DateSelectionStart()
MsgBox(a)
months = ""
countForSub(a)
day_textbox.Text = x(0)
months = mon(Convert.ToInt32(x(1)) - 1)
toSelectedItem(months)
year_textbox.Text = x(2)
CalendarView1.Refresh()
CalendarView1.Hide()
calendarFlag = 0
End Sub

Private Sub toSelectedItem(ByVal m As String)

Dim monthly As String = m


If monthly = "มกรำคม" Then
month_combobox.SelectedIndex = 0
ElseIf monthly = "กุมภำพันธ์" Then
month_combobox.SelectedIndex = 1
ElseIf monthly = "มีนำคม" Then
month_combobox.SelectedIndex = 2
ElseIf monthly = "เมษำยน" Then
month_combobox.SelectedIndex = 3
ElseIf monthly = "พฤษภำคม" Then
month_combobox.SelectedIndex = 4
ElseIf monthly = "มิถุนำยน" Then
month_combobox.SelectedIndex = 5
ElseIf monthly = "กรกฎำคม" Then
month_combobox.SelectedIndex = 6
ElseIf monthly = "สิ งหำคม" Then
month_combobox.SelectedIndex = 7
ElseIf monthly = "กันยำยน" Then
month_combobox.SelectedIndex = 8
ElseIf monthly = "ตุลำคม" Then
month_combobox.SelectedIndex = 9
ElseIf monthly = "พฤษจิกำยน" Then
month_combobox.SelectedIndex = 10
ElseIf monthly = "ธันวำคม" Then
month_combobox.SelectedIndex = 11

50
End If

End Sub

Private Sub countForSub(ByVal A As String)


x.Clear()
Dim dates As String = A
dates += "/"
Dim terex As String = ""
For Each item In dates
If item = "/" Then
x.Add(terex)
terex = ""
Continue For
End If
terex += item
Next
End Sub

Private Sub ButtonX2_Click(sender As Object, e As EventArgs) Handles ButtonX2.Click


If calendarFlag = 0 Then
CalendarView1.Show()
calendarFlag = 1
Else
CalendarView1.Hide()
calendarFlag = 0
End If

End Sub

End Class

51
Admin_Form
Public Class Admin_Form
Private CallingForm As Object
Public manageAccountPanel As manageAccount_Panel = Nothing ' Implement
manageAccountPanel Form
Public manageUserPanel As manageUser_Panel = Nothing 'Implement mangeUserPanel
Public managePositionPanel As managePosition_Panel = Nothing 'Implement
mangePositionPanel
Public managePermissionPanel As managePermission_Panel = Nothing 'Implement
mangePositionPanel
Public Sub New(ByVal caller As Object)
MyBase.New()
InitializeComponent()
CallingForm = caller
End Sub
Private Sub admin_Form_Closing(ByVal sender As Object, _
ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
e.Cancel = True
Me.Hide()
If Not IsNothing(CallingForm) Then CallingForm.Close()
CallingForm = Nothing
End Sub

Private Sub Admin_Form_Load(sender As Object, e As EventArgs) Handles MyBase.Load


' Init
manageAccountPanel = New manageAccount_Panel()
Me.Controls.Add(manageAccountPanel)
manageAccountPanel.BringToFront()
manageAccountPanel.IsOpen = False
manageAccountPanel.AnimationTime = 500
manageAccountPanel.SlideOutButtonVisible = False
' End Init

' Init
manageUserPanel = New manageUser_Panel()
Me.Controls.Add(manageUserPanel)
manageUserPanel.BringToFront()
manageUserPanel.IsOpen = False
manageUserPanel.AnimationTime = 500
manageUserPanel.SlideOutButtonVisible = False
' End Init

' Init showPanel Form


managePositionPanel = New managePosition_Panel()
Me.Controls.Add(managePositionPanel)
managePositionPanel.BringToFront()
managePositionPanel.IsOpen = False
managePositionPanel.AnimationTime = 500
managePositionPanel.SlideOutButtonVisible = False
' End Init

' Init showPanel Form


managePermissionPanel = New managePermission_Panel()
Me.Controls.Add(managePermissionPanel)
managePermissionPanel.BringToFront()
managePermissionPanel.IsOpen = False

52
managePermissionPanel.AnimationTime = 500
managePermissionPanel.SlideOutButtonVisible = False
' End Init
End Sub
Private Sub manage_account_tile_item_Click(sender As Object, e As EventArgs) Handles
manage_account_tile_item.Click
If Not manageAccountPanel.IsOpen Then ' if panel not open then open
manageAccountPanel.IsOpen = True
End If
End Sub

Private Sub back_tile_item_Click(sender As Object, e As EventArgs) Handles


back_tile_item.Click
Me.Hide()
CallingForm.Show()
End Sub

Private Sub manage_user_tile_item_Click(sender As Object, e As EventArgs) Handles


manage_user_tile_item.Click
If Not manageUserPanel.IsOpen Then ' if panel not open then open
manageUserPanel.IsOpen = True
End If
End Sub

Private Sub manage_position_tile_item_Click(sender As Object, e As EventArgs) Handles


manage_position_tile_item.Click
If Not managePositionPanel.IsOpen Then ' if panel not open then open
managePositionPanel.IsOpen = True
End If
End Sub

Private Sub manage_permission_tile_item_Click(sender As Object, e As EventArgs)


Handles manage_permission_tile_item.Click
If Not managePermissionPanel.IsOpen Then ' if panel not open then open
managePermissionPanel.IsOpen = True
End If
End Sub
End Class

53
Compare_Panel
Imports MySql.Data.MySqlClient

Public Class Compare_Panel


Public pid1 As String
Public pid2 As String
Public posname As String
Public choose As String = ""
Public check As String = "1"
Public compareCircle0 As CompareCircleTraining
Public compareCircle1 As CompareCirclePayment
Public compareCircle2 As CompareCircleAvg
Public compareGraph As CompareGraphPayment_Panel
Public compareGraph2 As CompareGraphAvg_Panel
Public compareGraphMax As CompareGraphTraining_Panel
Public dbconn = Login_Form.dbconn
Public sql = Login_Form.sql
Public dbcomm = Login_Form.dbcomm
Public dbread = Login_Form.dbread
Public sql2 As String
Public dbcomm2 As MySqlCommand
Public dbread2 As MySqlDataReader
Public dbconn2 As New MySqlConnection
Public counter As Integer = 0
Public checkPage As ArrayList

Private Sub Compare_Form_Load(sender As Object, e As EventArgs) Handles MyBase.Load


readDataToTree()
ComboBoxEx1.Items.Add("จำนวนผูเ้ ข้ำอบรมกลุ่มเป้ำหมำย และ อบรมจริ ง")
ComboBoxEx1.Items.Add("งบโครงกำร และ ใช้จ่ำยจริ ง")
ComboBoxEx1.Items.Add("ภำพรวมเกณฑ์เฉลี่ยตัวชี้วดั ")
compareGraph = New CompareGraphPayment_Panel()
compareGraph.Location = New System.Drawing.Point(0, 197)
Me.Controls.Add(compareGraph)
compareGraph.BringToFront()
compareGraph.IsOpen = False
compareGraph.SlideOutButtonVisible = False

compareGraphMax = New CompareGraphTraining_Panel()


compareGraphMax.Location = New System.Drawing.Point(0, 197)
Me.Controls.Add(compareGraphMax)
compareGraphMax.BringToFront()
compareGraphMax.IsOpen = False
compareGraphMax.SlideOutButtonVisible = False

compareGraph2 = New CompareGraphAvg_Panel()


compareGraph2.Location = New System.Drawing.Point(0, 197)
Me.Controls.Add(compareGraph2)
compareGraph2.BringToFront()
compareGraph2.IsOpen = False
compareGraph2.SlideOutButtonVisible = False

End Sub
Public Sub clearItem()

54
project_list.Items.Clear()
project_list2.Items.Clear()
End Sub
Public Sub readDataToTree()
'read data from database and put in project_list
sql = "SELECT p1.pid,p1.pname,p2.leadname FROM project as p1, leaderinfo as p2
where p1.pleader = p2.leadid"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
dbconn2.ConnectionString = String.Format("server={0}; user id={1}; password={2};
database={3}; pooling=false; Character Set=utf8", Login_Form.server, Login_Form.username,
Login_Form.password, Login_Form.database)
dbconn2.Open()
sql2 = "SELECT YEAR(pyear) FROM project"
dbcomm2 = New MySqlCommand(sql2, dbconn2)
dbread2 = dbcomm2.ExecuteReader()
Dim count As Integer = 0
Dim id, name, leader, year As String
While dbread.Read() Or dbread2.Read()
id = dbread("pid")
name = dbread("pname")
leader = dbread("leadname")
year = dbread2("YEAR(pyear)")
Dim item1 As ListViewItem = project_list.FindItemWithText(name)
Dim item2 As ListViewItem = project_list2.FindItemWithText(name)
If (item1 IsNot Nothing) And (item2 IsNot Nothing) Then
Else
project_list.Items.Add(CreateProjectRow(id, name, leader, year))
project_list2.Items.Add(CreateProjectRow(id, name, leader, year))
End If
End While
dbread.Close()
dbread2.Close()
dbconn2.Close()
End Sub

Public Shared Function CreateProjectRow(ByVal pId As String, ByVal pName As String,


ByVal pLeader As String, ByVal pYear As String) As System.Windows.Forms.ListViewItem
'create row in this function and return row and add to project_list
Dim row As System.Windows.Forms.ListViewItem = New
System.Windows.Forms.ListViewItem(New String() {pId, pName, pLeader, pYear})
Return row
End Function

Private Sub project_list_MouseClick1(sender As Object, e As MouseEventArgs) Handles


project_list.MouseClick
' show panel list and load all information
counter += 1
Dim item As ListViewItem = project_list.GetItemAt(e.X, e.Y)
LabelX1.Text = item.SubItems(1).Text
End Sub

Private Sub project_list_MouseClick2(sender As Object, e As MouseEventArgs) Handles


project_list2.MouseClick
counter += 1
' show panel list and load all information
Dim item As ListViewItem = project_list.GetItemAt(e.X, e.Y)
LabelX2.Text = item.SubItems(1).Text

55
End Sub

Private Function CheckChoose()


Dim cc As Boolean
If LabelX1.Text = "กรุ ณำเลือกรำยชื่อโครงกำร" Or LabelX2.Text = "กรุ ณำเลือกรำยชื่อโครงกำร" Then
cc = False
Return cc
Else
cc = True
Return cc
End If

End Function

Private Sub ComboBoxEx1_SelectedIndexChanged(sender As Object, e As EventArgs)


Handles ComboBoxEx1.SelectedIndexChanged
counter += 1
choose = ComboBoxEx1.SelectedItem.ToString

End Sub

Private Sub showOut(ByRef flag As Integer)


If flag = 0 Then
compareGraph.IsOpen = False
compareGraph2.IsOpen = False
If Not compareGraphMax.IsOpen Then ' if panel not open then open
compareGraphMax.IsOpen = True
compareGraphMax.Location = New System.Drawing.Point(0, 197)
ElseIf compareGraphMax.IsOpen Then ' is panel already open then close first
with 0 animate time and then reopen it
compareGraphMax.Location = New System.Drawing.Point(0, 197)
compareGraphMax.AnimationTime = 0
compareGraphMax.IsOpen = False
compareGraphMax.AnimationTime = 500
compareGraphMax.IsOpen = True
End If
ElseIf flag = 1 Then ' if panel not open then open
compareGraphMax.IsOpen = False
compareGraph2.IsOpen = False
If Not compareGraph.IsOpen Then
compareGraph.IsOpen = True
compareGraph.Location = New System.Drawing.Point(0, 197)
ElseIf compareGraph.IsOpen Then ' is panel already open then close first with
0 animate time and then reopen it
compareGraph.Location = New System.Drawing.Point(0, 197)
compareGraph.AnimationTime = 0
compareGraph.IsOpen = False
compareGraph.AnimationTime = 500
compareGraph.IsOpen = True
End If
ElseIf flag = 2 Then ' if panel not open then open
compareGraph.IsOpen = False
compareGraphMax.IsOpen = False
If Not compareGraph2.IsOpen Then
compareGraph2.IsOpen = True
compareGraph2.Location = New System.Drawing.Point(0, 197)

56
ElseIf compareGraph2.IsOpen Then ' is panel already open then close first
with 0 animate time and then reopen it
compareGraph2.Location = New System.Drawing.Point(0, 197)
compareGraph2.AnimationTime = 0
compareGraph2.IsOpen = False
compareGraph2.AnimationTime = 500
compareGraph2.IsOpen = True

End If

End If
End Sub

Private Sub ButtonX1_Click(sender As Object, e As EventArgs) Handles ButtonX1.Click


compareGraph.close("1")
compareGraph2.close("1")
compareGraphMax.close("1")

If (CheckChoose() = True) Then


If (choose = "จำนวนผูเ้ ข้ำอบรมกลุ่มเป้ำหมำย และ อบรมจริ ง") Then
'compareGraph.IsOpen = False
If check = "1" Then
compareGraphMax.test(LabelX1.Text, LabelX2.Text)
compareGraphMax.toChart()
showOut(0)
ElseIf check = "2" Then
compareCircle0.test(LabelX1.Text, LabelX2.Text)
compareCircle0.toGraphChoose0()
showOut(3)
End If

ElseIf (choose = "งบโครงกำร และ ใช้จ่ำยจริ ง") Then


'compareGraph.IsOpen = False
If check = "1" Then
compareGraph.test(LabelX1.Text, LabelX2.Text)
compareGraph.toChart()
showOut(1)
ElseIf check = "2" Then
compareCircle1.test(LabelX1.Text, LabelX2.Text)
compareCircle1.toGraphChoose1()
showOut(4)
End If
ElseIf (choose = "ภำพรวมเกณฑ์เฉลี่ยตัวชี้วดั ") Then
'compareGraph.IsOpen = False
If check = "1" Then
compareGraph2.test(LabelX1.Text, LabelX2.Text)
compareGraph2.toChart()
showOut(2)
ElseIf check = "2" Then
compareCircle2.test(LabelX1.Text, LabelX2.Text)
compareCircle2.toGraphChoose2()
showOut(5)
End If
ElseIf choose = "" Then
MsgBox("ท่ำนยังไม่ได้เลือกชนิดของกำรเปรี ยบเทียบ", MsgBoxStyle.Critical, "ขออภัย")
End If
Else

57
MsgBox("ท่ำนยังไม่ได้เลือกรำยชื่อโครงกำร", MsgBoxStyle.Critical, "ขออภัย")
End If
ButtonX1.BringToFront()
End Sub

Private Sub search_press(sender As Object, e As KeyEventArgs) Handles


search_textBox1.KeyDown
'search project in project_list
If e.KeyCode = Keys.Enter Then
Dim search_text As String = search_textBox1.Text
Dim count As Integer = 0
Dim key As String = ""
Dim found As Boolean = False
For Each item As ListViewItem In project_list.Items
key = project_list.Items(count).SubItems(1).Text
If key.Contains(search_text) Then
project_list.Items(count).Selected = True
project_list.Select()
found = True
Exit For
End If
count = count + 1
Next
If Not found Then
MsgBox("ไม่มีขอ้ มูลโครงกำรในระบบ!", MsgBoxStyle.Critical, "ค้นหำล้มเหลว")
End If
End If
End Sub

Private Sub search_press2(sender As Object, e As KeyEventArgs) Handles


search_textBox2.KeyDown
'search project in project_list
If e.KeyCode = Keys.Enter Then
Dim search_text As String = search_textBox2.Text
Dim count As Integer = 0
Dim key As String = ""
Dim found As Boolean = False
For Each item As ListViewItem In project_list2.Items
key = project_list2.Items(count).SubItems(1).Text
If key.Contains(search_text) Then
project_list2.Items(count).Selected = True
project_list2.Select()
found = True
Exit For
End If
count = count + 1
Next
If Not found Then
MsgBox("ไม่มีขอ้ มูลโครงกำรในระบบ!", MsgBoxStyle.Critical, "ค้นหำล้มเหลว")
End If
End If
End Sub

Private Sub ButtonX2_Click(sender As Object, e As EventArgs) Handles ButtonX2.Click


If Me.IsOpen Then
Me.IsOpen = False
compareGraph.close("1")

58
compareGraph2.close("1")
compareGraphMax.close("1")
compareGraph.IsOpen = False
compareGraphMax.IsOpen = False
compareGraph2.IsOpen = False

End If
restart()
End Sub

Private Sub restart()


choose = ""
LabelX1.Text = "กรุ ณำเลือกรำยชื่อโครงกำร"
LabelX2.Text = "กรุ ณำเลือกรำยชื่อโครงกำร"
search_textBox2.Text = ""
search_textBox1.Text = ""
ComboBoxEx1.Text = ""
project_list.Items.Clear()
project_list2.Items.Clear()
readDataToTree()
End Sub

Private Sub ButtonX3_Click(sender As Object, e As EventArgs)


Dim graph As Graphics = Nothing
Dim frmleft As System.Drawing.Point = Me.Bounds.Location
Dim bmp As New Bitmap(Me.Bounds.Width, Me.Bounds.Height)
graph = Graphics.FromImage(bmp)
Dim screenx As Integer = frmleft.X
Dim screeny As Integer = frmleft.Y
graph.CopyFromScreen(screenx, screeny, 0, 0, bmp.Size)

Dim saveFileDialog1 As New SaveFileDialog()


saveFileDialog1.Filter = "Jpeg Image|*.jpg|Bitmap Image|*.bmp|Gif Image|*.gif"
saveFileDialog1.Title = "Save an Image File"
saveFileDialog1.ShowDialog()

If saveFileDialog1.FileName <> "" Then


Dim fs As System.IO.FileStream = CType _
(saveFileDialog1.OpenFile(), System.IO.FileStream)
Select Case saveFileDialog1.FilterIndex
Case 1
bmp.Save(fs, _
System.Drawing.Imaging.ImageFormat.Jpeg)
Case 2
bmp.Save(fs, _
System.Drawing.Imaging.ImageFormat.Bmp)
Case 3
bmp.Save(fs, _
System.Drawing.Imaging.ImageFormat.Gif)
End Select
fs.Close()
End If
bmp.Dispose()
graph.Dispose()
End Sub

End Class

59
CompareCircleAVG
Imports MySql.Data.MySqlClient

Public Class CompareCircleAvg

Public name1, name2 As String


Public poslist1, poslist2, postemp As New ArrayList
Public countMax, countRow, countNum As Integer
Public pid1 As String
Public pid2 As String
Public posname As String
Public CP As Compare_Panel
Public compareGraph As CompareGraphPayment_Panel
Public compareGraphMax As CompareGraphTraining_Panel
Public compare As Compare_Panel
Public dbconn = Login_Form.dbconn
Public sql = Login_Form.sql
Public dbcomm = Login_Form.dbcomm
Public dbread = Login_Form.dbread
Public sql2 As String
Public dbcomm2 As MySqlCommand
Public dbread2 As MySqlDataReader
Public dbconn2 As New MySqlConnection

Public Sub test(ByVal name1s As String, ByVal name2s As String)


name1 = name1s
name2 = name2s

sql = "SELECT MAX(uid),count(*) FROM position"


dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()

dbconn2.ConnectionString = String.Format("server={0}; user id={1}; password={2};


database={3}; pooling=false; Character Set=utf8", Login_Form.server, Login_Form.username,
Login_Form.password, Login_Form.database)
dbconn2.Open()
sql2 = "SELECT uid,uname FROM position"
dbcomm2 = New MySqlCommand(sql2, dbconn2)
dbread2 = dbcomm2.ExecuteReader()

While dbread.Read()
countMax = Convert.ToInt32(dbread("MAX(uid)"))
countRow = Convert.ToInt32(dbread("count(*)"))
End While
For i As Integer = 0 To countMax
poslist1.Add("A")
Next

While dbread2.Read()
countNum = Convert.ToInt32(dbread2("uid"))
poslist1.Insert(countNum, dbread2("uname"))
End While

60
dbread.Close()
dbread2.Close()
dbconn2.Close()
toGraphChoose2()

End Sub
Public Sub toGraphChoose2()

Chart1.Series("Series1").Points.Clear()
Chart2.Series("Series1").Points.Clear()
sql = "SELECT plecturer,pplace,pservice,punderstand,pusage FROM project where
pname ='" + name1 + "'"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
dbconn2.ConnectionString = String.Format("server={0}; user id={1}; password={2};
database={3}; pooling=false; Character Set=utf8", Login_Form.server, Login_Form.username,
Login_Form.password, Login_Form.database)
dbconn2.Open()
sql2 = "SELECT plecturer,pplace,pservice,punderstand,pusage FROM project where
pname ='" + name2 + "'"
dbcomm2 = New MySqlCommand(sql2, dbconn2)
dbread2 = dbcomm2.ExecuteReader()

While dbread.Read()

Chart1.Series("Series1").Points.AddXY("lecturer",
Convert.ToInt32(dbread("plecturer")))
Chart1.ChartAreas(0).BackColor = Color.Transparent
Chart1.Series("Series1").Points.AddXY("place",
Convert.ToInt32(dbread("pplace")))
Chart1.ChartAreas(0).BackColor = Color.Transparent
Chart1.Series("Series1").Points.AddXY("service",
Convert.ToInt32(dbread("pservice")))
Chart1.ChartAreas(0).BackColor = Color.Transparent
Chart1.Series("Series1").Points.AddXY("understand",
Convert.ToInt32(dbread("punderstand")))
Chart1.ChartAreas(0).BackColor = Color.Transparent
Chart1.Series("Series1").Points.AddXY("usage",
Convert.ToInt32(dbread("pusage")))
Chart1.ChartAreas(0).BackColor = Color.Transparent

End While

While dbread2.Read()

Chart2.Series("Series1").Points.AddXY("lecturer",
Convert.ToInt32(dbread2("plecturer")))
Chart2.ChartAreas(0).BackColor = Color.Transparent
Chart2.Series("Series1").Points.AddXY("place",
Convert.ToInt32(dbread2("pplace")))
Chart2.ChartAreas(0).BackColor = Color.Transparent
Chart2.Series("Series1").Points.AddXY("service",
Convert.ToInt32(dbread2("pservice")))
Chart2.ChartAreas(0).BackColor = Color.Transparent
Chart2.Series("Series1").Points.AddXY("understand",
Convert.ToInt32(dbread2("punderstand")))
Chart2.ChartAreas(0).BackColor = Color.Transparent

61
Chart2.Series("Series1").Points.AddXY("usage",
Convert.ToInt32(dbread2("pusage")))
Chart2.ChartAreas(0).BackColor = Color.Transparent

End While

dbread.Close()
dbread2.Close()
dbconn2.Close()
LabelX2.Text = name1
LabelX3.Text = name2
End Sub

Public Sub close()


Me.IsOpen = False
End Sub

Private Sub ButtonX1_Click(sender As Object, e As EventArgs)


Me.IsOpen = False
End Sub

Private Sub ButtonX1_Click_1(sender As Object, e As EventArgs) Handles ButtonX1.Click


Me.IsOpen = False
End Sub
End Class

62
CompareCirclePayment
Imports MySql.Data.MySqlClient

Public Class CompareCirclePayment


Public name1, name2 As String
Public poslist1, poslist2, postemp As New ArrayList
Public countMax, countRow, countNum As Integer
Public pid1 As String
Public pid2 As String
Public posname As String
Public compareGraph As CompareGraphPayment_Panel
Public compareGraphMax As CompareGraphTraining_Panel
Public compare As Compare_Panel
Public dbconn = Login_Form.dbconn
Public sql = Login_Form.sql
Public dbcomm = Login_Form.dbcomm
Public dbread = Login_Form.dbread
Public sql2 As String
Public dbcomm2 As MySqlCommand
Public dbread2 As MySqlDataReader
Public dbconn2 As New MySqlConnection

Public Sub test(ByVal name1s As String, ByVal name2s As String)


name1 = name1s
name2 = name2s
toGraphChoose1()
End Sub

Public Sub toGraphChoose1()


Chart1.Series("Series1").Points.Clear()
Chart2.Series("Series1").Points.Clear()
sql = "SELECT pfund,puse FROM project where pname ='" + name1 + "'"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
dbconn2.ConnectionString = String.Format("server={0}; user id={1}; password={2};
database={3}; pooling=false; Character Set=utf8", Login_Form.server, Login_Form.username,
Login_Form.password, Login_Form.database)
dbconn2.Open()
sql2 = "SELECT pfund,puse FROM project where pname ='" + name2 + "'"
dbcomm2 = New MySqlCommand(sql2, dbconn2)
dbread2 = dbcomm2.ExecuteReader()

While dbread.Read()

Chart1.Series("Series1").Points.AddXY("งบโครงกำร",
Convert.ToInt32(dbread("pfund")))
Chart1.ChartAreas(0).BackColor = Color.Transparent
Chart1.Series("Series1").Points.AddXY("ใช้จ่ำยจริ ง",
Convert.ToInt32(dbread("puse")))
Chart1.ChartAreas(0).BackColor = Color.Transparent

End While

While dbread2.Read()

63
Chart2.Series("Series1").Points.AddXY("งบโครงกำร",
Convert.ToInt32(dbread2("pfund")))
Chart2.ChartAreas(0).BackColor = Color.Transparent
Chart2.Series("Series1").Points.AddXY("ใช้จ่ำยจริ ง",
Convert.ToInt32(dbread2("puse")))
Chart2.ChartAreas(0).BackColor = Color.Transparent

End While

dbread.Close()
dbread2.Close()
dbconn2.Close()
LabelX2.Text = name1
LabelX3.Text = name2
End Sub

Private Sub ButtonX1_Click(sender As Object, e As EventArgs)


Me.IsOpen = False
End Sub

Private Sub ButtonX1_Click_1(sender As Object, e As EventArgs) Handles ButtonX1.Click


Me.IsOpen = False
End Sub
End Class

64
CompareCircleTraining
Imports MySql.Data.MySqlClient

Public Class CompareCircleTraining


Public name1, name2 As String
Public poslist1, poslist2, postemp As New ArrayList
Public countMax, countRow, countNum As Integer
Public pid1 As String
Public pid2 As String
Public posname As String

Public compareGraph As CompareGraphPayment_Panel


Public compare As Compare_Panel
Public dbconn = Login_Form.dbconn
Public sql = Login_Form.sql
Public dbcomm = Login_Form.dbcomm
Public dbread = Login_Form.dbread
Public sql2 As String
Public dbcomm2 As MySqlCommand
Public dbread2 As MySqlDataReader
Public dbconn2 As New MySqlConnection

Public Sub test(ByVal name1s As String, ByVal name2s As String)


name1 = name1s
name2 = name2s

sql = "SELECT MAX(uid),count(*) FROM position"


dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()

dbconn2.ConnectionString = String.Format("server={0}; user id={1}; password={2};


database={3}; pooling=false; Character Set=utf8", Login_Form.server, Login_Form.username,
Login_Form.password, Login_Form.database)
dbconn2.Open()
sql2 = "SELECT uid,uname FROM position"
dbcomm2 = New MySqlCommand(sql2, dbconn2)
dbread2 = dbcomm2.ExecuteReader()

While dbread.Read()
countMax = Convert.ToInt32(dbread("MAX(uid)"))
countRow = Convert.ToInt32(dbread("count(*)"))
End While
For i As Integer = 0 To countMax
poslist1.Add("A")
Next

While dbread2.Read()
countNum = Convert.ToInt32(dbread2("uid"))
poslist1.Insert(countNum, dbread2("uname"))
End While

dbread.Close()
dbread2.Close()
dbconn2.Close()
toGraphChoose0()

65
End Sub

Public Sub toGraphChoose0() 'not finish


pid1 = ""
pid2 = ""
Chart1.Series("Series1").Points.Clear()
Chart2.Series("Series1").Points.Clear()
Chart3.Series("Series1").Points.Clear()
Chart4.Series("Series1").Points.Clear()

sql = "SELECT pid FROM project where pname ='" + name1 + "'"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
dbconn2.ConnectionString = String.Format("server={0}; user id={1}; password={2};
database={3}; pooling=false; Character Set=utf8", Login_Form.server, Login_Form.username,
Login_Form.password, Login_Form.database)
dbconn2.Open()
sql2 = "SELECT pid FROM project where pname ='" + name2 + "'"
dbcomm2 = New MySqlCommand(sql2, dbconn2)
dbread2 = dbcomm2.ExecuteReader()

While dbread.Read()

pid1 = dbread("pid").ToString

End While

While dbread2.Read()

pid2 = dbread2("pid").ToString

End While

dbread.Close()
dbread2.Close()
dbconn2.Close()
LabelX2.Text = name1 + " : จำนวนกลุ่มเป้ำหมำย"
LabelX3.Text = name2 + " : จำนวนกลุ่มเป้ำหมำย"
LabelX4.Text = name1 + " : จำนวนอบรมจริ ง"
LabelX5.Text = name2 + " : จำนวนอบรมจริ ง"
toGraph1()
toGraph2()
End Sub

Private Sub toGraph1()

sql = "SELECT rank,amount FROM traineeexpect where pid ='" + pid1 + "'"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
dbconn2.ConnectionString = String.Format("server={0}; user id={1}; password={2};
database={3}; pooling=false; Character Set=utf8", Login_Form.server, Login_Form.username,
Login_Form.password, Login_Form.database)
dbconn2.Open()
sql2 = "SELECT rank,amount FROM traineereality where pid ='" + pid1 + "'"

66
dbcomm2 = New MySqlCommand(sql2, dbconn2)
dbread2 = dbcomm2.ExecuteReader()

While dbread.Read()
Dim fp As Integer = Convert.ToInt32(dbread("rank"))
Chart1.Series("Series1").Points.AddXY(poslist1(fp),
Convert.ToInt32(dbread("amount")))
Chart1.ChartAreas(0).BackColor = Color.Transparent
End While

While dbread2.Read()
Dim fp1 As Integer = Convert.ToInt32(dbread2("rank"))
Chart2.Series("Series1").Points.AddXY(poslist1(fp1),
Convert.ToInt32(dbread2("amount")))
Chart2.ChartAreas(0).BackColor = Color.Transparent
End While
dbread.Close()
dbread2.Close()
dbconn2.Close()
End Sub

Private Sub toGraph2()

sql = "SELECT rank,amount FROM traineeexpect where pid ='" + pid2 + "'"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
dbconn2.ConnectionString = String.Format("server={0}; user id={1}; password={2};
database={3}; pooling=false; Character Set=utf8", Login_Form.server, Login_Form.username,
Login_Form.password, Login_Form.database)
dbconn2.Open()
sql2 = "SELECT rank,amount FROM traineereality where pid ='" + pid2 + "'"
dbcomm2 = New MySqlCommand(sql2, dbconn2)
dbread2 = dbcomm2.ExecuteReader()

While dbread.Read()
Dim fp As Integer = Convert.ToInt32(dbread("rank"))
Chart3.Series("Series1").Points.AddXY(poslist1(fp),
Convert.ToInt32(dbread("amount")))
Chart3.ChartAreas(0).BackColor = Color.Transparent
End While

While dbread2.Read()
Dim fp1 As Integer = Convert.ToInt32(dbread2("rank"))
Chart4.Series("Series1").Points.AddXY(poslist1(fp1),
Convert.ToInt32(dbread2("amount")))
Chart4.ChartAreas(0).BackColor = Color.Transparent
End While
dbread.Close()
dbread2.Close()
dbconn2.Close()
End Sub

Private Sub ButtonX1_Click_1(sender As Object, e As EventArgs) Handles ButtonX1.Click


Me.IsOpen = False
End Sub
End Class

67
CompareGraphAvg_Panel
Imports MySql.Data.MySqlClient

Public Class CompareGraphAvg_Panel


Public name1, name2 As String
Public poslist1, poslist2, postemp As New ArrayList
Public countMax, countRow, countNum As Integer
Public pid1 As String
Public pid2 As String
Public posname As String
Public compareCircle As CompareCircleAvg
Public compareGraph As CompareGraphPayment_Panel
Public compareGraphMax As CompareGraphTraining_Panel
Public compare As Compare_Panel
Public dbconn = Login_Form.dbconn
Public sql = Login_Form.sql
Public dbcomm = Login_Form.dbcomm
Public dbread = Login_Form.dbread
Public sql2 As String
Public dbcomm2 As MySqlCommand
Public dbread2 As MySqlDataReader
Public dbconn2 As New MySqlConnection

Private Sub CompareGraphAvg_Form_Load(sender As Object, e As EventArgs) Handles


MyBase.Load

compareCircle = New CompareCircleAvg()


Me.Controls.Add(compareCircle)
compareCircle.BringToFront()
compareCircle.IsOpen = False
compareCircle.SlideOutButtonVisible = False
End Sub

Public Sub close(ByVal a As String)


If a = "1" Then
Me.IsOpen = False
compareCircle.IsOpen = False
End If
End Sub

Public Sub test(ByVal name1s As String, ByVal name2s As String)


name1 = name1s
name2 = name2s

sql = "SELECT MAX(uid),count(*) FROM position"


dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()

dbconn2.ConnectionString = String.Format("server={0}; user id={1}; password={2};


database={3}; pooling=false; Character Set=utf8", Login_Form.server, Login_Form.username,
Login_Form.password, Login_Form.database)
dbconn2.Open()
sql2 = "SELECT uid,uname FROM position"
dbcomm2 = New MySqlCommand(sql2, dbconn2)
dbread2 = dbcomm2.ExecuteReader()

68
While dbread.Read()
countMax = Convert.ToInt32(dbread("MAX(uid)"))
countRow = Convert.ToInt32(dbread("count(*)"))
End While
For i As Integer = 0 To countMax
poslist1.Add("A")
Next

While dbread2.Read()
countNum = Convert.ToInt32(dbread2("uid"))
poslist1.Insert(countNum, dbread2("uname"))
End While

dbread.Close()
dbread2.Close()
dbconn2.Close()

End Sub

Public Sub toChart()


'fuck()

Chart3.Series("Series1").LegendText = name1
Chart3.Series("Series2").LegendText = name2
Chart3.Series("Series1").Points.Clear()
Chart3.Series("Series2").Points.Clear()
sql = "SELECT plecturer,pplace,pservice,punderstand,pusage FROM project where
pname ='" + name1 + "'"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
dbconn2.ConnectionString = String.Format("server={0}; user id={1}; password={2};
database={3}; pooling=false; Character Set=utf8", Login_Form.server, Login_Form.username,
Login_Form.password, Login_Form.database)
dbconn2.Open()
sql2 = "SELECT plecturer,pplace,pservice,punderstand,pusage FROM project where
pname ='" + name2 + "'"
dbcomm2 = New MySqlCommand(sql2, dbconn2)
dbread2 = dbcomm2.ExecuteReader()

While dbread.Read()
Chart3.Series("Series1").Points.AddXY("ผูบ้ รรยำย",
Convert.ToInt32(dbread("plecturer")))
Chart3.Series("Series1").Points.AddXY("สถำนที่",
Convert.ToInt32(dbread("pplace")))
Chart3.Series("Series1").Points.AddXY("บริ กำร",
Convert.ToInt32(dbread("pservice")))
Chart3.Series("Series1").Points.AddXY("ควำมเข้ำใจ",
Convert.ToInt32(dbread("punderstand")))
Chart3.Series("Series1").Points.AddXY("กำรนำไปใช้",
Convert.ToInt32(dbread("pusage")))

End While

While dbread2.Read()
Chart3.Series("Series2").Points.AddXY("ผูบ้ รรยำย",
Convert.ToInt32(dbread2("plecturer")))

69
Chart3.Series("Series2").Points.AddXY("สถำนที่",
Convert.ToInt32(dbread2("pplace")))
Chart3.Series("Series2").Points.AddXY("บริ กำร",
Convert.ToInt32(dbread2("pservice")))
Chart3.Series("Series2").Points.AddXY("ควำมเข้ำใจ",
Convert.ToInt32(dbread2("punderstand")))
Chart3.Series("Series2").Points.AddXY("กำรนำไปใช้",
Convert.ToInt32(dbread2("pusage")))

End While

dbread.Close()
dbread2.Close()
dbconn2.Close()
End Sub
Private Sub ButtonX1_Click(sender As Object, e As EventArgs)
compareCircle.test(name1, name2)
compareCircle.IsOpen = True
End Sub

Private Sub fuck()


If (compareCircle.IsOpen = True) Then
'compareCircle.IsOpen = False
MsgBox("pusage open")
Else
MsgBox("pusage not open")
'compareCircle.test(name1, name2)
'compareCircle.IsOpen = False
End If

End Sub

Private Sub ButtonX1_Click_1(sender As Object, e As EventArgs) Handles ButtonX1.Click


compareCircle.test(name1, name2)
compareCircle.IsOpen = True
End Sub
End Class

70
CompareGraphPayment_Panel
Imports MySql.Data.MySqlClient
Public Class CompareGraphPayment_Panel
Public name1, name2 As String
Public poslist1, poslist2, postemp As New ArrayList
Public countMax, countRow, countNum As Integer
Public pid1 As String
Public pid2 As String
Public posname As String
Public compareCircle As CompareCirclePayment
Public compareGraph As CompareGraphPayment_Panel
Public compareGraphMax As CompareGraphTraining_Panel
Public compare As Compare_Panel
Public dbconn = Login_Form.dbconn
Public sql = Login_Form.sql
Public dbcomm = Login_Form.dbcomm
Public dbread = Login_Form.dbread
Public sql2 As String
Public dbcomm2 As MySqlCommand
Public dbread2 As MySqlDataReader
Public dbconn2 As New MySqlConnection

Private Sub CompareGraphPayment_Form_Load(sender As Object, e As EventArgs) Handles


MyBase.Load

compareCircle = New CompareCirclePayment()


Me.Controls.Add(compareCircle)
compareCircle.BringToFront()
compareCircle.IsOpen = False
compareCircle.SlideOutButtonVisible = False
End Sub

Public Sub close(ByVal a As String)


If a = "1" Then
Me.IsOpen = False
compareCircle.IsOpen = False

End If
End Sub

Public Sub test(ByVal name1s As String, ByVal name2s As String)


name1 = name1s
name2 = name2s

sql = "SELECT MAX(uid),count(*) FROM position"


dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()

dbconn2.ConnectionString = String.Format("server={0}; user id={1}; password={2};


database={3}; pooling=false; Character Set=utf8", Login_Form.server, Login_Form.username,
Login_Form.password, Login_Form.database)
dbconn2.Open()
sql2 = "SELECT uid,uname FROM position"
dbcomm2 = New MySqlCommand(sql2, dbconn2)
dbread2 = dbcomm2.ExecuteReader()

71
While dbread.Read()
countMax = Convert.ToInt32(dbread("MAX(uid)"))
countRow = Convert.ToInt32(dbread("count(*)"))
End While
For i As Integer = 0 To countMax
poslist1.Add("A")
Next

While dbread2.Read()
countNum = Convert.ToInt32(dbread2("uid"))
poslist1.Insert(countNum, dbread2("uname"))
End While

dbread.Close()
dbread2.Close()
dbconn2.Close()

End Sub

Public Sub toChart()


compareCircle.IsOpen = False
Chart3.Series("Series1").LegendText = name1
Chart3.Series("Series2").LegendText = name2
Chart3.Series("Series1").Points.Clear()
Chart3.Series("Series2").Points.Clear()
sql = "SELECT pfund,puse FROM project where pname ='" + name1 + "'"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
dbconn2.ConnectionString = String.Format("server={0}; user id={1}; password={2};
database={3}; pooling=false; Character Set=utf8", Login_Form.server, Login_Form.username,
Login_Form.password, Login_Form.database)
dbconn2.Open()
sql2 = "SELECT pfund,puse FROM project where pname ='" + name2 + "'"
dbcomm2 = New MySqlCommand(sql2, dbconn2)
dbread2 = dbcomm2.ExecuteReader()

While dbread.Read()
Chart3.Series("Series1").Points.AddXY("งบโครงกำร",
Convert.ToInt32(dbread("pfund")))
Chart3.Series("Series1").Points.AddXY("ใช้จ่ำยจริ ง",
Convert.ToInt32(dbread("puse")))

End While

While dbread2.Read()
Chart3.Series("Series2").Points.AddXY("งบโครงกำร",
Convert.ToInt32(dbread2("pfund")))
Chart3.Series("Series2").Points.AddXY("ใช้จ่ำยจริ ง",
Convert.ToInt32(dbread2("puse")))
End While

dbread.Close()
dbread2.Close()
dbconn2.Close()

End Sub

72
Private Sub ButtonX1_Click(sender As Object, e As EventArgs)
compareCircle.test(name1, name2)
compareCircle.IsOpen = True
End Sub

Private Sub ButtonX1_Click_1(sender As Object, e As EventArgs) Handles ButtonX1.Click


compareCircle.test(name1, name2)
compareCircle.IsOpen = True
End Sub
End Class

73
CompareGraphTraining_Panel
Imports MySql.Data.MySqlClient

Public Class CompareGraphTraining_Panel


Public name1, name2 As String
Public poslist1, poslist2, postemp As New ArrayList
Public countMax, countRow, countNum As Integer
Public pid1 As String
Public pid2 As String
Public posname As String
Public compareCircle As CompareCircleTraining
Public compareGraph As CompareGraphPayment_Panel
Public compare As Compare_Panel
Public dbconn = Login_Form.dbconn
Public sql = Login_Form.sql
Public dbcomm = Login_Form.dbcomm
Public dbread = Login_Form.dbread
Public sql2 As String
Public dbcomm2 As MySqlCommand
Public dbread2 As MySqlDataReader
Public dbconn2 As New MySqlConnection

Private Sub CompareGraphTraining_Form_Load(sender As Object, e As EventArgs) Handles


MyBase.Load

compareCircle = New CompareCircleTraining()


Me.Controls.Add(compareCircle)
compareCircle.BringToFront()
compareCircle.IsOpen = False
compareCircle.SlideOutButtonVisible = False

End Sub

Public Sub close(ByVal a As String)


If a = "1" Then
Me.IsOpen = False
compareCircle.IsOpen = False
End If
End Sub

Public Sub test(ByVal name1s As String, ByVal name2s As String)


name1 = name1s
name2 = name2s

sql = "SELECT MAX(uid),count(*) FROM position"


dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()

dbconn2.ConnectionString = String.Format("server={0}; user id={1}; password={2};


database={3}; pooling=false; Character Set=utf8", Login_Form.server, Login_Form.username,
Login_Form.password, Login_Form.database)
dbconn2.Open()
sql2 = "SELECT uid,uname FROM position"
dbcomm2 = New MySqlCommand(sql2, dbconn2)
dbread2 = dbcomm2.ExecuteReader()

74
While dbread.Read()
countMax = Convert.ToInt32(dbread("MAX(uid)"))
countRow = Convert.ToInt32(dbread("count(*)"))
End While
For i As Integer = 0 To countMax
poslist1.Add("A")
Next

While dbread2.Read()
countNum = Convert.ToInt32(dbread2("uid"))
poslist1.Insert(countNum, dbread2("uname"))
End While

dbread.Close()
dbread2.Close()
dbconn2.Close()

End Sub

Public Sub toChart() 'not finish


compareCircle.IsOpen = False
pid1 = ""
pid2 = ""
Chart5.Series("Series1").Points.Clear()
Chart5.Series("Series2").Points.Clear()

Chart6.Series("Series1").Points.Clear()
Chart6.Series("Series2").Points.Clear()

sql = "SELECT pid FROM project where pname ='" + name1 + "'"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
dbconn2.ConnectionString = String.Format("server={0}; user id={1}; password={2};
database={3}; pooling=false; Character Set=utf8", Login_Form.server, Login_Form.username,
Login_Form.password, Login_Form.database)
dbconn2.Open()
sql2 = "SELECT pid FROM project where pname ='" + name2 + "'"
dbcomm2 = New MySqlCommand(sql2, dbconn2)
dbread2 = dbcomm2.ExecuteReader()

While dbread.Read()

pid1 = dbread("pid").ToString

End While

While dbread2.Read()

pid2 = dbread2("pid").ToString

End While

dbread.Close()

75
dbread2.Close()
dbconn2.Close()
toChartExpect()
toChartReal()
End Sub

Private Sub toChartExpect()


'expect chart
Chart5.Series("Series1").LegendText = name1
Chart5.Series("Series2").LegendText = name2
sql = "SELECT rank,amount FROM traineeexpect where pid ='" + pid1 + "'"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
dbconn2.ConnectionString = String.Format("server={0}; user id={1}; password={2};
database={3}; pooling=false; Character Set=utf8", Login_Form.server, Login_Form.username,
Login_Form.password, Login_Form.database)
dbconn2.Open()
sql2 = "SELECT rank,amount FROM traineeexpect where pid ='" + pid2 + "'"
dbcomm2 = New MySqlCommand(sql2, dbconn2)
dbread2 = dbcomm2.ExecuteReader()
While dbread.Read()
Dim fp As Integer = Convert.ToInt32(dbread("rank"))
Chart5.Series("Series1").Points.AddXY(poslist1(fp),
Convert.ToInt32(dbread("amount")))

End While

While dbread2.Read()
Dim fp As Integer = Convert.ToInt32(dbread2("rank"))
Chart5.Series("Series2").Points.AddXY(poslist1(fp),
Convert.ToInt32(dbread2("amount")))
End While

dbread.Close()
dbread2.Close()
dbconn2.Close()
End Sub

Private Sub toChartReal()


'expect chart
Chart6.Series("Series1").LegendText = name1
Chart6.Series("Series2").LegendText = name2
sql = "SELECT rank,amount FROM traineereality where pid ='" + pid1 + "'"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
dbconn2.ConnectionString = String.Format("server={0}; user id={1}; password={2};
database={3}; pooling=false; Character Set=utf8", Login_Form.server, Login_Form.username,
Login_Form.password, Login_Form.database)
dbconn2.Open()
sql2 = "SELECT rank,amount FROM traineereality where pid ='" + pid2 + "'"
dbcomm2 = New MySqlCommand(sql2, dbconn2)
dbread2 = dbcomm2.ExecuteReader()
While dbread.Read()
Dim fp As Integer = Convert.ToInt32(dbread("rank"))
Chart6.Series("Series1").Points.AddXY(poslist1(fp),
Convert.ToInt32(dbread("amount")))

End While

76
While dbread2.Read()
Dim fp As Integer = Convert.ToInt32(dbread2("rank"))
Chart6.Series("Series2").Points.AddXY(poslist1(fp),
Convert.ToInt32(dbread2("amount")))
End While

dbread.Close()
dbread2.Close()
dbconn2.Close()
End Sub

Private Sub ButtonX1_Click(sender As Object, e As EventArgs)


compareCircle.test(name1, name2)
compareCircle.IsOpen = True
End Sub

Private Sub ButtonX1_Click_1(sender As Object, e As EventArgs) Handles ButtonX1.Click


compareCircle.test(name1, name2)
compareCircle.IsOpen = True
End Sub
End Class

77
editProject_Panel
Imports MySql.Data.MySqlClient

Public Class editProject_Panel


Public dbconn = Login_Form.dbconn
Public sql = Login_Form.sql
Public dbcomm = Login_Form.dbcomm
Public dbread = Login_Form.dbread
Public sql2 As String
Public dbcomm2 As MySqlCommand
Public dbread2 As MySqlDataReader
Public dbconn2 As New MySqlConnection
Public notadd As Boolean = False
Public pid As Integer = 0
Public calendarFlag As Integer = 0
Public checkfocus As Boolean = False
Dim positionlist As New List(Of String)
Public x, mon As New ArrayList
Public a, months As String

Public Sub back_tile_item_Click(sender As Object, e As EventArgs) Handles


back_tile_item.Click
If Me.IsOpen Then
Me.IsOpen = False
End If
ButtonX2.Visible = False
project_list.FocusedItem = Nothing
checkfocus = False
clearAll()
End Sub
Public Sub clearAll()
project_name_textbox.Clear()
position_combobox.Items.Clear()
trainee_list.Items.Clear()
fund_textbox.Clear()
used_textbox.Clear()
main_lecturer_combobox.Items.Clear()
helper_lecturer_combobox.Items.Clear()
helper_list.Items.Clear()
leader_combobox.Items.Clear()
team_combobox.Items.Clear()
team_list.Items.Clear()
TextBoxX1.Clear()
TextBoxX2.Clear()
TextBoxX3.Clear()
TextBoxX4.Clear()
TextBoxX5.Clear()
day_textbox.Clear()
year_textbox.Clear()

month_combobox.SelectedIndex = -1
addData()
End Sub
Private Sub project_list_ColumnWidthChanging(sender As Object, e As
ColumnWidthChangingEventArgs) Handles project_list.ColumnWidthChanging
'prevent column size to be changed

78
e.Cancel = True
e.NewWidth = project_list.Columns(e.ColumnIndex).Width
End Sub
Private Sub trainee_list_ColumnWidthChanging(sender As Object, e As
ColumnWidthChangingEventArgs) Handles trainee_list.ColumnWidthChanging
e.Cancel = True
e.NewWidth = trainee_list.Columns(e.ColumnIndex).Width
End Sub
Private Sub team_list_ColumnWidthChanging(sender As Object, e As
ColumnWidthChangingEventArgs) Handles team_list.ColumnWidthChanging
e.Cancel = True
e.NewWidth = team_list.Columns(e.ColumnIndex).Width
End Sub
Private Sub helper_list_ColumnWidthChanging(sender As Object, e As
ColumnWidthChangingEventArgs) Handles helper_list.ColumnWidthChanging
e.Cancel = True
e.NewWidth = helper_list.Columns(e.ColumnIndex).Width
End Sub
Private Sub add_position_button_Click(sender As Object, e As EventArgs) Handles
add_position_button.Click
Dim combotext As String = position_combobox.SelectedItem.ToString
Dim item1 As ListViewItem = trainee_list.FindItemWithText(combotext)
If (item1 IsNot Nothing) Then
Else
trainee_list.Items.Add(CreateTraineetRow(combotext))
End If
End Sub
Private Function CreateTraineetRow(ByVal name As String) As
System.Windows.Forms.ListViewItem
'create row in this function and return row and add to project_list
Dim row As System.Windows.Forms.ListViewItem = New
System.Windows.Forms.ListViewItem(New String() {name, "0", "0"})
Return row
End Function
Private Sub checkTextbox(sender As Object, e As KeyPressEventArgs) Handles
fund_textbox.KeyPress
If Asc(e.KeyChar) <> 8 Then
If Asc(e.KeyChar) < 48 Or Asc(e.KeyChar) > 57 Then
e.Handled = True
End If
End If
End Sub
Private Sub checkTextbox2(sender As Object, e As KeyPressEventArgs) Handles
used_textbox.KeyPress
If Asc(e.KeyChar) <> 8 Then
If Asc(e.KeyChar) < 48 Or Asc(e.KeyChar) > 57 Then
e.Handled = True
End If
End If
End Sub
Private Sub editProject_Panel_Load(sender As Object, e As EventArgs) Handles
MyBase.Load
addData()
End Sub
Public Sub addData()
calendarFlag = 0
CalendarView1.Hide()
mon.Clear()

79
mon.Add("มกรำคม")
mon.Add("กุมภำพันธ์")
mon.Add("มีนำคม")
mon.Add("เมษำยน")
mon.Add("พฤษภำคม")
mon.Add("มิถุนำยน")
mon.Add("กรกฎำคม")
mon.Add("สิ งหำคม")
mon.Add("กันยำยน")
mon.Add("ตุลำคม")
mon.Add("พฤษจิกำยน")
mon.Add("ธันวำคม")
'add data to position combobox
sql = "SELECT * FROM `position`"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
While dbread.Read()
If Not (position_combobox.Items.Contains(dbread("uname"))) Then
position_combobox.Items.Add(dbread("uname"))
End If
End While
dbread.Close()
' end add data

'add data to main_lecturer and helper combobox


sql = "SELECT * FROM `lecturerinfo`"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
While dbread.Read()
If Not (main_lecturer_combobox.Items.Contains(dbread("lname"))) Then
main_lecturer_combobox.Items.Add(dbread("lname"))
End If
If Not (helper_lecturer_combobox.Items.Contains(dbread("lname"))) Then
helper_lecturer_combobox.Items.Add(dbread("lname"))
End If
End While
dbread.Close()
' end add data

'add data to leader and team combobox


sql = "SELECT * FROM `leaderinfo`"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
While dbread.Read()
If Not (leader_combobox.Items.Contains(dbread("leadname"))) Then
leader_combobox.Items.Add(dbread("leadname"))
End If
If Not (team_combobox.Items.Contains(dbread("leadname"))) Then
team_combobox.Items.Add(dbread("leadname"))
End If
End While
dbread.Close()
' end add data

'read data from database and put in project_list

80
sql = "SELECT p1.pid,p1.pname,p2.leadname FROM project as p1, leaderinfo as p2
where p1.pleader = p2.leadid order by p1.pid asc"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
dbconn2.ConnectionString = String.Format("server={0}; user id={1}; password={2};
database={3}; pooling=false; Character Set=utf8", Login_Form.server, Login_Form.username,
Login_Form.password, Login_Form.database)
dbconn2.Open()
sql2 = "SELECT YEAR(pyear) FROM project"
dbcomm2 = New MySqlCommand(sql2, dbconn2)
dbread2 = dbcomm2.ExecuteReader()
Dim count As Integer = 0
Dim id, name, leader, year As String
While dbread.Read() Or dbread2.Read()
id = dbread("pid")
name = dbread("pname")
leader = dbread("leadname")
year = dbread2("YEAR(pyear)")
Dim item1 As ListViewItem = project_list.FindItemWithText(name)
If (item1 IsNot Nothing) Then
Else
project_list.Items.Add(CreateProjectRow(id, name, leader, year))
End If

End While
dbread.Close()
dbread2.Close()
dbconn2.Close()

End Sub
Public Shared Function CreateProjectRow(ByVal pId As String, ByVal pName As String,
ByVal pLeader As String, ByVal pYear As String) As System.Windows.Forms.ListViewItem
'create row in this function and return row and add to project_list
Dim row As System.Windows.Forms.ListViewItem = New
System.Windows.Forms.ListViewItem(New String() {pId, pName, pLeader, pYear})
Return row
End Function
Private Sub add_helper_button_Click(sender As Object, e As EventArgs) Handles
add_helper_button.Click
If helper_lecturer_combobox.SelectedIndex = -1 Then
Else
Dim combotext As String = helper_lecturer_combobox.SelectedItem.ToString
Dim item1 As ListViewItem = helper_list.FindItemWithText(combotext)
If (item1 IsNot Nothing) Then
Else
If main_lecturer_combobox.SelectedIndex = -1 Then
helper_list.Items.Add(CreateTraineetRow(combotext))
ElseIf combotext <> main_lecturer_combobox.SelectedItem.ToString Then
helper_list.Items.Add(CreateTraineetRow(combotext))
End If
End If
End If
End Sub
Private Sub selected_index_changed(sender As Object, e As EventArgs) Handles
main_lecturer_combobox.SelectedIndexChanged
Dim combotext As String = main_lecturer_combobox.SelectedItem.ToString
Dim item1 As ListViewItem = helper_list.FindItemWithText(combotext)
If (item1 IsNot Nothing) Then

81
helper_list.Items.Remove(item1)
End If
End Sub
Private Sub add_team_button_Click(sender As Object, e As EventArgs) Handles
add_team_button.Click
If team_combobox.SelectedIndex = -1 Then
Else
Dim combotext As String = team_combobox.SelectedItem.ToString
Dim item1 As ListViewItem = team_list.FindItemWithText(combotext)
If (item1 IsNot Nothing) Then
Else
If leader_combobox.SelectedIndex = -1 Then
team_list.Items.Add(CreateTraineetRow(combotext))
ElseIf combotext <> leader_combobox.SelectedItem.ToString Then
team_list.Items.Add(CreateTraineetRow(combotext))
End If
End If
End If
End Sub
Private Sub select_index_change(sender As Object, e As EventArgs) Handles
leader_combobox.SelectedIndexChanged
Dim combotext As String = leader_combobox.SelectedItem.ToString
Dim item1 As ListViewItem = team_list.FindItemWithText(combotext)
If (item1 IsNot Nothing) Then
team_list.Items.Remove(item1)
End If
End Sub
Private Sub checkTextBoxi1(sender As Object, e As KeyPressEventArgs) Handles
TextBoxX1.KeyPress
Dim FullStop As Char
FullStop = "."
If e.KeyChar = FullStop And TextBoxX1.Text.IndexOf(FullStop) <> -1 Then
e.Handled = True
Return
End If
If Not Char.IsDigit(e.KeyChar) Then
If (e.KeyChar <> FullStop) And
(e.KeyChar <> Convert.ToChar(Keys.Back)) Then
e.Handled = True
Return
End If
End If
End Sub
Private Sub checkTextBoxi2(sender As Object, e As KeyPressEventArgs) Handles
TextBoxX2.KeyPress
Dim FullStop As Char
FullStop = "."
If e.KeyChar = FullStop And TextBoxX2.Text.IndexOf(FullStop) <> -1 Then
e.Handled = True
Return
End If
If Not Char.IsDigit(e.KeyChar) Then
If (e.KeyChar <> FullStop) And
(e.KeyChar <> Convert.ToChar(Keys.Back)) Then
e.Handled = True
Return
End If
End If

82
End Sub
Private Sub checkTextBoxi3(sender As Object, e As KeyPressEventArgs) Handles
TextBoxX3.KeyPress
Dim FullStop As Char
FullStop = "."
If e.KeyChar = FullStop And TextBoxX3.Text.IndexOf(FullStop) <> -1 Then
e.Handled = True
Return
End If
If Not Char.IsDigit(e.KeyChar) Then
If (e.KeyChar <> FullStop) And
(e.KeyChar <> Convert.ToChar(Keys.Back)) Then
e.Handled = True
Return
End If
End If
End Sub
Private Sub search_press(sender As Object, e As KeyEventArgs) Handles
search_textbox.KeyDown
'search project in project_list
If e.KeyCode = Keys.Enter Then
Dim search_text As String = search_textbox.Text
Dim count As Integer = 0
Dim key As String = ""
Dim found As Boolean = False
For Each item As ListViewItem In project_list.Items
key = project_list.Items(count).SubItems(1).Text
If key.Contains(search_text) Then
project_list.Items(count).Selected = True
project_list.Select()
found = True
Exit For
End If
count = count + 1
Next
If Not found Then
MsgBox("ไม่มีขอ้ มูลโครงกำรในระบบ!", MsgBoxStyle.Critical, "ค้นหำล้มเหลว")
End If
End If
End Sub
Private Sub checkTextBoxi4(sender As Object, e As KeyPressEventArgs) Handles
TextBoxX4.KeyPress
Dim FullStop As Char
FullStop = "."
If e.KeyChar = FullStop And TextBoxX4.Text.IndexOf(FullStop) <> -1 Then
e.Handled = True
Return
End If
If Not Char.IsDigit(e.KeyChar) Then
If (e.KeyChar <> FullStop) And
(e.KeyChar <> Convert.ToChar(Keys.Back)) Then
e.Handled = True
Return
End If
End If
End Sub
Private Sub checkTextBoxi5(sender As Object, e As KeyPressEventArgs) Handles
TextBoxX5.KeyPress

83
Dim FullStop As Char
FullStop = "."
If e.KeyChar = FullStop And TextBoxX5.Text.IndexOf(FullStop) <> -1 Then
e.Handled = True
Return
End If
If Not Char.IsDigit(e.KeyChar) Then
If (e.KeyChar <> FullStop) And
(e.KeyChar <> Convert.ToChar(Keys.Back)) Then
e.Handled = True
Return
End If
End If
End Sub
Public Sub ButtonX1_Click(sender As Object, e As EventArgs) Handles ButtonX1.Click
clearAll()
End Sub
Private Sub project_list_MouseClick(sender As Object, e As MouseEventArgs) Handles
project_list.MouseClick
' show panel list and load all information
Dim item As ListViewItem = project_list.GetItemAt(e.X, e.Y)
clearAll()
getData(item)
checkfocus = True
End Sub
Private Sub getData(ByVal d As ListViewItem)
Dim item As ListViewItem = d

sql = "SELECT pid from project where pname ='" + item.SubItems(1).Text + "'"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
While dbread.Read()
pid = dbread("pid")
End While
dbread.Close()

'set project name


project_name_textbox.Text = item.SubItems(1).Text

' set main lecturer


sql = "SELECT distinct p3.lname From project as p1, lecturer as p2, lecturerinfo
as p3 Where p1.pname = '" + item.SubItems(1).Text + "'and p1.pid = p2.pid and p2.main =
p3.lid"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
While dbread.Read()
Dim c As Integer = main_lecturer_combobox.FindString(dbread("lname"))
main_lecturer_combobox.SelectedIndex = c
End While
dbread.Close()

'set helper
sql = "SELECT p1.pid,p1.pname,p2.main,p3.lid,p3.lname From project as p1,
lecturer as p2, lecturerinfo as p3 Where p1.pname = '" + item.SubItems(1).Text + "'and
p1.pid = p2.pid and p2.helper = p3.lid order by p3.lid"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
While dbread.Read()

84
helper_list.Items.Add(CreateTraineetRow(dbread("lname")))
End While
dbread.Close()

'set fund
sql = "Select pfund,puse FROM project where pname = '" + item.SubItems(1).Text +
"'"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
While dbread.Read()
fund_textbox.Text = dbread("pfund")
used_textbox.Text = dbread("puse")
End While
dbread.Close()

'set indictation
sql = "Select plecturer,pplace,pservice,punderstand,pusage FROM project where
pname = '" + item.SubItems(1).Text + "'"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
While dbread.Read()
TextBoxX1.Text = dbread("plecturer")
TextBoxX2.Text = dbread("pplace")
TextBoxX3.Text = dbread("pservice")
TextBoxX4.Text = dbread("punderstand")
TextBoxX5.Text = dbread("pusage")
End While
dbread.Close()

'set date
sql = "Select year(pyear),month(pyear),day(pyear) FROM project where pname = '" +
item.SubItems(1).Text + "'"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
While dbread.Read()
day_textbox.Text = dbread("day(pyear)")
year_textbox.Text = dbread("year(pyear)")
month_combobox.SelectedIndex = Convert.ToInt32(dbread("month(pyear)")) - 1
End While
dbread.Close()

'set leader
Dim b As Integer = leader_combobox.FindString(item.SubItems(2).Text)
leader_combobox.SelectedIndex = b

'set team
team_list.Items.Clear()
sql = "select p1.pid,p1.pname,p3.leadid,p2.leadname from project as p1,
leaderinfo as p2, team as p3 where p1.pname ='" + item.SubItems(1).Text + "' and p3.pid =
p1.pid and p3.leadid = p2.leadid order by p2.leadid"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
While dbread.Read()
Dim ListViewItem1 As System.Windows.Forms.ListViewItem = New
System.Windows.Forms.ListViewItem(New String() {dbread("leadname")})
team_list.Items.Add(ListViewItem1)
End While
dbread.Close()

85
'set trainee
sql = "SELECT p1.pid,p2.rank,p3.uname,p2.amount from project as p1, traineeexpect
as p2, position as p3 where p1.pname = '" + item.SubItems(1).Text + "' and p1.pid =
p2.pid and p2.rank = p3.uid order by p3.uid"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
While dbread.Read()
Dim ListViewItem1 As System.Windows.Forms.ListViewItem = New
System.Windows.Forms.ListViewItem(New String() {dbread("uname"), dbread("amount")})
trainee_list.Items.Add(ListViewItem1)
End While
dbread.Close()

sql = "SELECT p1.pid,p2.rank,p3.uname,p2.amount from project as p1,


traineereality as p2, position as p3 where p1.pname = '" + item.SubItems(1).Text + "' and
p1.pid = p2.pid and p2.rank = p3.uid order by p3.uid"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
Dim count As Integer = 0
Dim count2 As Integer = 0
Dim found As Boolean = False
While dbread.Read()
For Each items As ListViewItem In trainee_list.Items
If (dbread("uname") = trainee_list.Items(count).SubItems(0).Text) Then
trainee_list.Items(count).SubItems.Add(dbread("amount"))
found = True
Exit For
End If
count += 1
Next
If Not found Then
Dim ListViewItem1 As System.Windows.Forms.ListViewItem = New
System.Windows.Forms.ListViewItem(New String() {dbread("uname"), "0"})
trainee_list.Items.Add(ListViewItem1)
trainee_list.Items(count).SubItems.Add(dbread("amount"))
End If
count = 0
found = False
End While
dbread.Close()

checkExpect(item.SubItems(1).Text)

End Sub
Public Sub checkExpect(ByVal pname As String)
Dim count As Integer = 0
For Each item As ListViewItem In trainee_list.Items
If (trainee_list.Items(count).SubItems.Count = 2) Then
trainee_list.Items(count).SubItems.Add("0")
Else
count += 1
End If
Next
End Sub
Private Sub trainee_list_MouseClick(sender As Object, e As MouseEventArgs) Handles
trainee_list.MouseClick
' show panel list and load all information

86
Dim index As Integer = trainee_list.SelectedIndices(0)
Dim myValue As String = InputBox("ใส่ จำนวนที่คำดหวัง", "กรุ ณำใส่ ขอ้ มูล",
trainee_list.Items(index).SubItems(1).Text)
Dim myValue2 As String = InputBox("ใส่ จำนวนที่มำอบรมจริ ง", "กรุ ณำใส่ ขอ้ มูล",
trainee_list.Items(index).SubItems(2).Text)
trainee_list.Items(index).SubItems(1).Text = myValue
trainee_list.Items(index).SubItems(2).Text = myValue2
End Sub
Private Sub delete_position_button_Click(sender As Object, e As EventArgs) Handles
delete_position_button.Click
Dim index As Integer = trainee_list.SelectedIndices(0)
trainee_list.Items.RemoveAt(index)
End Sub
Private Sub delete_helper_button_Click(sender As Object, e As EventArgs) Handles
delete_helper_button.Click
Dim index As Integer = helper_list.SelectedIndices(0)
helper_list.Items.RemoveAt(index)
End Sub
Private Sub delete_team_button_Click(sender As Object, e As EventArgs) Handles
delete_team_button.Click
Dim index As Integer = team_list.SelectedIndices(0)
team_list.Items.RemoveAt(index)
End Sub

Private Sub CalendarView1_ItemClick(sender As Object, e As EventArgs) Handles


CalendarView1.ItemClick

a = CalendarView1.DateSelectionStart()
months = ""
countForSub(a)
day_textbox.Text = x(0)
months = mon(Convert.ToInt32(x(1)) - 1)
toSelectedItem(months)
year_textbox.Text = x(2)
CalendarView1.Refresh()
CalendarView1.Hide()
calendarFlag = 0
End Sub

Private Sub toSelectedItem(ByVal m As String)

Dim monthly As String = m


If monthly = "มกรำคม" Then
month_combobox.SelectedIndex = 0
ElseIf monthly = "กุมภำพันธ์" Then
month_combobox.SelectedIndex = 1
ElseIf monthly = "มีนำคม" Then
month_combobox.SelectedIndex = 2
ElseIf monthly = "เมษำยน" Then
month_combobox.SelectedIndex = 3
ElseIf monthly = "พฤษภำคม" Then
month_combobox.SelectedIndex = 4
ElseIf monthly = "มิถุนำยน" Then
month_combobox.SelectedIndex = 5
ElseIf monthly = "กรกฎำคม" Then
month_combobox.SelectedIndex = 6

87
ElseIf monthly = "สิ งหำคม" Then
month_combobox.SelectedIndex = 7
ElseIf monthly = "กันยำยน" Then
month_combobox.SelectedIndex = 8
ElseIf monthly = "ตุลำคม" Then
month_combobox.SelectedIndex = 9
ElseIf monthly = "พฤษจิกำยน" Then
month_combobox.SelectedIndex = 10
ElseIf monthly = "ธันวำคม" Then
month_combobox.SelectedIndex = 11

End If

End Sub

Private Sub countForSub(ByVal A As String)


x.Clear()
Dim dates As String = A
dates += "/"
Dim terex As String = ""
For Each item In dates
If item = "/" Then
x.Add(terex)
terex = ""
Continue For
End If
terex += item
Next
End Sub

Private Sub ButtonX3_Click(sender As Object, e As EventArgs) Handles ButtonX3.Click


If calendarFlag = 0 Then
CalendarView1.Show()
calendarFlag = 1
Else
CalendarView1.Hide()
calendarFlag = 0
End If

End Sub
End Class

88
Host_Panel
Public Class Host_Panel
Public Sub New()

' This call is required by the designer.


InitializeComponent()

' Add any initialization after the InitializeComponent() call.


End Sub
Private Sub MetroTileItem1_Click(sender As Object, e As EventArgs) Handles
save_tile_item.Click
' Save new Data to file
Dim FILE_NAME As String = Login_Form.confPath

If System.IO.File.Exists(FILE_NAME) = True Then

Dim objWriter As New System.IO.StreamWriter(FILE_NAME)

objWriter.Write(server_textbox.Text + vbNewLine)
objWriter.Write(username_textbox.Text + vbNewLine)
objWriter.Write(password_textbox.Text + vbNewLine)
objWriter.Write(database_textbox.Text)
objWriter.Close()
Login_Form.readDatabaseConfig()
End If
server_textbox.Clear()
username_textbox.Clear()
password_textbox.Clear()
database_textbox.Clear()
If Me.IsOpen Then
Me.IsOpen = False
End If
Login_Form.TitleText = "เข้ำสู่ ระบบ"
End Sub
Private Sub MetroTileItem2_Click(sender As Object, e As EventArgs) Handles
MetroTileItem2.Click
If Me.IsOpen Then
Me.IsOpen = False
End If
Login_Form.TitleText = "เข้ำสู่ ระบบ"
End Sub
End Class

89
Login_Form
Imports MySql.Data.MySqlClient

Public Class Login_Form


Private hostChange As Host_Panel = Nothing ' Implement hostChange Form
Public dbconn As New MySqlConnection
Public sql As String
Public dbcomm As MySqlCommand
Public dbread As MySqlDataReader
Public server As String = ""
Public username As String = ""
Public password As String = ""
Public database As String = ""

Public startPath As String = Application.StartupPath()


Public confPath As String = startPath + "\conf.cfg"

Private Sub Login_Form_Load(sender As Object, e As EventArgs) Handles MyBase.Load


' Init 2 label color to white
LabelX1.ForeColor = Color.White
LabelX2.ForeColor = Color.White

' Init hostChange Form


hostChange = New Host_Panel()
Me.Controls.Add(hostChange)
hostChange.BringToFront()
hostChange.SlideSide = DevComponents.DotNetBar.Controls.eSlideSide.Right
hostChange.IsOpen = False
hostChange.SlideOutButtonVisible = False
AddHandler hostChange.Click, AddressOf hostChange_click
' End Init

' Read data from database


readDatabaseConfig()

End Sub
Public Sub readDatabaseConfig()
If dbconn.Ping Then
MsgBox("alreadyOpen")
Else
' Init database
My.Computer.FileSystem.RenameFile(confPath, "conf.txt")
Dim counts As Integer = 0
Dim FILE_NAME As String = startPath + "\conf.txt"
Dim objReader As New System.IO.StreamReader(FILE_NAME)
Dim TextLine As String = ""
If System.IO.File.Exists(FILE_NAME) = True Then
Do While objReader.Peek() <> -1
If counts = 0 Then
server = objReader.ReadLine()
counts = counts + 1
ElseIf counts = 1 Then
username = objReader.ReadLine()
counts = counts + 1
ElseIf counts = 2 Then
password = objReader.ReadLine()

90
counts = counts + 1
ElseIf counts = 3 Then
database = objReader.ReadLine()
counts = -1
End If
Loop
End If
objReader.Close()
My.Computer.FileSystem.RenameFile(startPath + "\conf.txt", "conf.cfg")
connectToDatabase()
' End Init
End If
End Sub
Public Sub connectToDatabase()
dbconn.ConnectionString = String.Format("server={0}; user id={1}; password={2};
database={3}; pooling=false; Character Set=utf8", Me.server, Me.username, Me.password,
Me.database)
Try
dbconn.Open()
LabelItem1.Text = "Connected"
Catch ex As Exception
MsgBox("ล้มเหลวในกำรเชื่อมต่อดำต้ำเบส, กรุ ณำตรวจสอบอินเตอร์เน็ตและดำต้ำเบสของท่ำน")
End Try
End Sub
Private Sub hostChange_click(ByVal sender As Object, ByVal e As EventArgs)
If hostChange.IsOpen Then
hostChange.IsOpen = False
End If
End Sub
Private Sub login_tile_item_Click(sender As Object, e As EventArgs) Handles
login_tile_item.Click
Dim username As String = username_textbox.Text
Dim password As String = password_textbox.Text
If (username = "root" And password = "root") Then
Dim mFrom As New Main_Form(Me, "root", True, True)
mFrom.Show()
Me.Hide()
Else
If username = "" Then
MsgBox("กรุ ณำใส่ ชื่อผูใ้ ช้!", MsgBoxStyle.Critical, "เข้ำสู่ ระบบล้มเหลว")
username_textbox.Focus()
ElseIf password = "" Then
MsgBox("กรุ ณำใส่ รหัสผ่ำน!", MsgBoxStyle.Critical, "เข้ำสู่ ระบบล้มเหลว")
password_textbox.Focus()
Else
sql = "SELECT * FROM account WHERE username='" + username + "'"
Try
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
If (dbread.Read() = False) Then
MsgBox("ไม่มีชื่อผูใ้ ช้น้ ี ในระบบ", MsgBoxStyle.Critical, "เข้ำสู่ ระบบล้มเหลว")
dbread.Dispose()
Else
If (password = dbread("password")) Then
Dim username_sent As String = username_textbox.Text
MsgBox("เข้ำสู่ ระบบสำเร็ จ")
username_textbox.Clear()

91
password_textbox.Clear()
username_textbox.Focus()
If dbread("status") = 2 Then
dbread.Close()
' keep log
sql = "INSERT INTO loginlog (username) VALUES ('" +
username_sent + "')"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
dbread.Close()
' start new form
Dim mFrom As New Main_Form(Me, username_sent, True, True)
mFrom.Show()
Me.Hide()
ElseIf dbread("status") = 1 Then
dbread.Close()
' keep log
sql = "INSERT INTO loginlog (username) VALUES ('" +
username_sent + "')"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
dbread.Close()
' start new form
Dim mFrom As New Main_Form(Me, username_sent, False,
True)
mFrom.Show()
Me.Hide()
ElseIf dbread("status") = 0 Then
dbread.Close()
' keep log
sql = "INSERT INTO loginlog (username) VALUES ('" +
username_sent + "')"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
dbread.Close()
' start new form
Dim mFrom As New Main_Form(Me, username_sent, False,
False)
mFrom.Show()
Me.Hide()
End If

Else
MsgBox("รหัสผ่ำนผิดพลำด!", MsgBoxStyle.Critical, "เข้ำสู่ ระบบล้มเหลว")
dbread.Dispose()
End If
End If
Catch ex As Exception
MsgBox("Error in collecting data from Database. Error is :" &
ex.Message)
Exit Sub
End Try
End If
End If
End Sub
Private Sub host_tile_item_Click(sender As Object, e As EventArgs) Handles
host_tile_item.Click
If Not hostChange.IsOpen Then

92
hostChange.IsOpen = True
End If
End Sub
Private Sub password_textbox_KeyDown(sender As Object, e As KeyEventArgs) Handles
password_textbox.KeyDown
If e.KeyCode = Keys.Enter Then
login_tile_item_Click(sender, e)
End If
End Sub
Private Sub username_textbox_KeyDown(sender As Object, e As KeyEventArgs) Handles
username_textbox.KeyDown
If e.KeyCode = Keys.Enter Then
login_tile_item_Click(sender, e)
End If
End Sub
End Class

93
Main_Form
Imports MySql.Data.MySqlClient
Imports DevComponents.DotNetBar
Imports Word = Microsoft.Office.Interop.Word
Public Class Main_Form
Private CallingForm As Object
Public showPanel As Show_Panel = Nothing ' Implement showPanel Form
Public menuPanel As Menu_Panel = Nothing ' Implement menuPanel Form
Public addPanel As addProject_Panel = Nothing ' Implement addPanel Form
Public editPanel As editProject_Panel = Nothing ' implement editPanel Form
Public comparePanel As Compare_Panel = Nothing ' implement comparePanel Form
Public OverviewTypes As OverviewType = Nothing ' implement overviewPanel Form
Public username_show As String
Public admingrant As Boolean
Public editorgrant As Boolean
Public dbconn = Login_Form.dbconn
Public sql = Login_Form.sql
Public dbcomm = Login_Form.dbcomm
Public dbread = Login_Form.dbread
Public sql2 As String
Public dbcomm2 As MySqlCommand
Public dbread2 As MySqlDataReader
Public dbconn2 As New MySqlConnection
Public Sub New(ByVal caller As Object, ByVal username As String, ByVal statusadmin As
Boolean, ByVal statuseditor As Boolean)
MyBase.New()
InitializeComponent()
CallingForm = caller
username_show = username
admingrant = statusadmin
editorgrant = statuseditor
End Sub
Private Sub Main_Form_Closing(ByVal sender As Object, _
ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
e.Cancel = True
Me.Hide()
If Not IsNothing(CallingForm) Then CallingForm.Close()
CallingForm = Nothing
End Sub
Private Sub Main_Form_Load(sender As Object, e As EventArgs) Handles MyBase.Load
readDataToTree()
' Init showPanel Form
showPanel = New Show_Panel()
showPanel.Location = New System.Drawing.Point(-5, 178)
Me.Controls.Add(showPanel)
showPanel.BringToFront()
showPanel.IsOpen = False
showPanel.SlideOutButtonVisible = False
AddHandler showPanel.Click, AddressOf showPanel_click
' End Init

' Init menuPanel Form


menuPanel = New Menu_Panel()
Me.Controls.Add(menuPanel)
menuPanel.BringToFront()
menuPanel.IsOpen = True

94
AddHandler menuPanel.Click, AddressOf menuPanel_click
AddHandler menuPanel.VisibleChanged, AddressOf changeVisible
If admingrant Then
menuPanel.admin_grant()
End If
If editorgrant Then
menuPanel.editor_grant()
End If
AddHandler menuPanel.admin_tile_item.Click, AddressOf adminForm_click
' End Init

' Init addProject_Panel Form


addPanel = New addProject_Panel()
Me.Controls.Add(addPanel)
addPanel.BringToFront()
addPanel.IsOpen = False
addPanel.AnimationTime = 500
addPanel.SlideOutButtonVisible = False
AddHandler menuPanel.add_tile_item.Click, AddressOf add_tile_item_click
' End Init

' Init editProject_Panel Form


editPanel = New editProject_Panel()
Me.Controls.Add(editPanel)
editPanel.BringToFront()
editPanel.IsOpen = False
editPanel.AnimationTime = 500
editPanel.SlideOutButtonVisible = False
AddHandler menuPanel.edit_tile_item.Click, AddressOf edit_tile_item_click
AddHandler menuPanel.delete_tile_item.Click, AddressOf delete_tile_item_click
AddHandler menuPanel.compare_tile_item.Click, AddressOf compare_tile_item_Click
AddHandler menuPanel.overview_tile_item.Click, AddressOf overview_tile_item_Click
AddHandler addPanel.save_tile_item.Click, AddressOf save_tile_item_click
AddHandler editPanel.ButtonX2.Click, AddressOf delete_project
AddHandler editPanel.save_tile_item.Click, AddressOf update_project
' End Init

' Init Compare_Panel Form


comparePanel = New Compare_Panel()
Me.Controls.Add(comparePanel)
comparePanel.BringToFront()
comparePanel.IsOpen = False
comparePanel.AnimationTime = 500
comparePanel.SlideOutButtonVisible = False
' End Init

' Init OverviewTypes_Panel Form


OverviewTypes = New OverviewType()
Me.Controls.Add(OverviewTypes)
OverviewTypes.BringToFront()
OverviewTypes.IsOpen = False
OverviewTypes.AnimationTime = 500
OverviewTypes.SlideOutButtonVisible = False
' End Init

ButtonX1.BringToFront()
End Sub

95
Public Sub changeVisible()
If menuPanel.Visible = True Then
ButtonX1.SendToBack()
ElseIf menuPanel.Visible = False Then
ButtonX1.BringToFront()
End If
End Sub
Private Sub overview_tile_item_Click(sender As Object, e As EventArgs)
If Not OverviewTypes.IsOpen Then ' if panel not open then open
OverviewTypes.IsOpen = True
End If
End Sub
Public Sub adminForm_click(sender As Object, e As EventArgs)
Dim aFrom As New Admin_Form(Me)
aFrom.Show()
Me.Hide()
End Sub
Private Sub delete_project(sender As Object, e As EventArgs)
''delete traineeexpect
If editPanel.checkfocus = False Then
MsgBox("กรุ ณำเลือกโปรเจค")
Else
sql = "DELETE FROM traineeexpect WHERE pid = '" + editPanel.pid.ToString +
"'"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
dbread.Close()
sql = "UPDATE traineeexpect SET pid = pid - 1 WHERE pid > '" +
editPanel.pid.ToString + "'"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
dbread.Close()

''delete traineereality
sql = "DELETE FROM traineereality WHERE pid = '" + editPanel.pid.ToString +
"'"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
dbread.Close()
sql = "UPDATE traineereality SET pid = pid - 1 WHERE pid > '" +
editPanel.pid.ToString + "'"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
dbread.Close()

'delete team
sql = "DELETE FROM team WHERE pid = '" + editPanel.pid.ToString + "'"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
dbread.Close()
sql = "UPDATE team SET pid = pid - 1 WHERE pid > '" + editPanel.pid.ToString
+ "'"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
dbread.Close()

''delete from lecturer


sql = "DELETE FROM lecturer WHERE pid = '" + editPanel.pid.ToString + "'"

96
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
dbread.Close()
sql = "UPDATE lecturer SET pid = pid - 1 WHERE pid > '" +
editPanel.pid.ToString + "'"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
dbread.Close()

''delete from project


sql = "DELETE FROM project WHERE pid = '" + editPanel.pid.ToString + "'"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
dbread.Close()
sql = "UPDATE project SET pid = pid - 1 WHERE pid > '" +
editPanel.pid.ToString + "'"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
dbread.Close()

editPanel.project_list.Items.Clear()
editPanel.clearAll()
editPanel.addData()
OverviewTypes.readData()
comparePanel.clearItem()
comparePanel.readDataToTree()
project_list.Items.Clear()
readDataToTree()
End If
End Sub
Private Sub add_tile_item_click(sender As Object, e As EventArgs)
If Not addPanel.IsOpen Then ' if panel not open then open
addPanel.IsOpen = True
End If
addPanel.clearAll()
addPanel.addData()
End Sub
Private Sub compare_tile_item_Click(sender As Object, e As EventArgs)
If Not comparePanel.IsOpen Then ' if panel not open then open
comparePanel.IsOpen = True
End If
End Sub
Private Sub save_tile_item_click(sender As Object, e As EventArgs)
Dim count As Integer
sql = "SELECT count(*) FROM `project`"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
While dbread.Read()
count = dbread("count(*)")
End While
dbread.Close()
count = count + 1

Dim pleader As String = ""


sql = "SELECT leadid from leaderinfo where leadname ='" +
addPanel.leader_combobox.SelectedItem.ToString + "'"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()

97
While dbread.Read()
pleader = dbread("leadid")
End While
dbread.Close()

Dim pname As String = addPanel.project_name_textbox.Text


Dim day As String = addPanel.day_textbox.Text
Dim month As String = addPanel.month_combobox.SelectedItem.ToString
If addPanel.month_combobox.SelectedIndex = 0 Then
month = "01"
ElseIf addPanel.month_combobox.SelectedIndex = 1 Then
month = "02"
ElseIf addPanel.month_combobox.SelectedIndex = 2 Then
month = "03"
ElseIf addPanel.month_combobox.SelectedIndex = 3 Then
month = "04"
ElseIf addPanel.month_combobox.SelectedIndex = 4 Then
month = "05"
ElseIf addPanel.month_combobox.SelectedIndex = 5 Then
month = "06"
ElseIf addPanel.month_combobox.SelectedIndex = 6 Then
month = "07"
ElseIf addPanel.month_combobox.SelectedIndex = 7 Then
month = "08"
ElseIf addPanel.month_combobox.SelectedIndex = 8 Then
month = "09"
ElseIf addPanel.month_combobox.SelectedIndex = 9 Then
month = "10"
ElseIf addPanel.month_combobox.SelectedIndex = 10 Then
month = "11"
ElseIf addPanel.month_combobox.SelectedIndex = 11 Then
month = "12"
End If
Dim year As String = addPanel.year_textbox.Text
Dim pyear As String = year + "-" + month + "-" + day
Dim pfund As String = addPanel.fund_textbox.Text
Dim puse As String = addPanel.used_textbox.Text
Dim plecturer As String = addPanel.TextBoxX1.Text
Dim pplace As String = addPanel.TextBoxX2.Text
Dim pservice As String = addPanel.TextBoxX3.Text
Dim punderstand As String = addPanel.TextBoxX4.Text
Dim pusage As String = addPanel.TextBoxX5.Text

sql = "INSERT INTO project


(pid,pname,pleader,pyear,pfund,puse,plecturer,pplace,pservice,punderstand,pusage)"
sql += " VALUES ('" + count.ToString + "','" + pname + "','" + pleader + "','" +
pyear + "','" + pfund + "','" + puse + "','" + plecturer + "','" + pplace + "','" +
pservice + "','" + punderstand + "','" + pusage + "')"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
dbread.Close()

Dim count2 As Integer = 0


Dim rank As String = ""

'add trainee_expert
For Each item As ListViewItem In addPanel.trainee_list.Items

98
sql = "select uid from position where uname ='" +
addPanel.trainee_list.Items(count2).SubItems(0).Text + "'"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
While dbread.Read()
rank = dbread("uid")
End While
dbread.Close()
sql = "INSERT INTO traineeexpect (pid,rank,amount) VALUES ('" +
count.ToString + "','" + rank + "','" +
addPanel.trainee_list.Items(count2).SubItems(1).Text + "')"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
dbread.Close()
count2 += 1
Next
count2 = 0
rank = ""

'add trainee_reality
For Each item As ListViewItem In addPanel.trainee_list.Items
sql = "select uid from position where uname ='" +
addPanel.trainee_list.Items(count2).SubItems(0).Text + "'"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.executereader()
While dbread.read()
rank = dbread("uid")
End While
dbread.close()
sql = "insert into traineereality (pid,rank,amount) values ('" +
count.ToString + "','" + rank + "','" +
addPanel.trainee_list.Items(count2).SubItems(2).Text + "')"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.executereader()
dbread.close()
count2 += 1
Next

Dim count3 As Integer = 0


Dim helper As String = ""
Dim main As String = ""
'add lecturer
For Each item As ListViewItem In addPanel.team_list.Items
sql = "select lid from lecturerinfo where lname ='" +
addPanel.helper_list.Items(count3).SubItems(0).Text + "'"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
While dbread.Read()
helper = dbread("lid")
End While
dbread.Close()

sql = "select lid from lecturerinfo where lname ='" +


addPanel.main_lecturer_combobox.SelectedItem.ToString + "'"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
While dbread.Read()
main = dbread("lid")

99
End While
dbread.Close()

sql = "INSERT INTO lecturer (pid,main,helper) VALUES ('" + count.ToString +


"','" + main + "','" + helper + "')"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
dbread.Close()
count3 += 1
Next

'add team
Dim team As String = ""
Dim count4 As Integer = 0

For Each item As ListViewItem In addPanel.team_list.Items


sql = "select leadid from leaderinfo where leadname ='" +
addPanel.team_list.Items(count4).SubItems(0).Text + "'"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
While dbread.Read()
team = dbread("leadid")
End While
dbread.Close()

sql = "INSERT INTO team (pid,leadid) VALUES ('" + count.ToString + "','" +


team + "')"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
dbread.Close()
count4 += 1
Next

addPanel.ButtonX1_Click(sender, e)
addPanel.back_tile_item_Click(sender, e)
readDataToTree()
editPanel.addData()
OverviewTypes.readData()
comparePanel.clearItem()
comparePanel.readDataToTree()
End Sub
Private Sub edit_tile_item_click(sender As Object, e As EventArgs)
If Not editPanel.IsOpen Then ' if panel not open then open
editPanel.IsOpen = True
End If
editPanel.clearAll()
editPanel.addData()
End Sub
Private Sub update_project(sender As Object, e As EventArgs)

Dim pleader As String = ""


sql = "SELECT leadid from leaderinfo where leadname ='" +
editPanel.leader_combobox.SelectedItem.ToString + "'"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
While dbread.Read()
pleader = dbread("leadid")
End While

100
dbread.Close()
Dim pname As String = editPanel.project_name_textbox.Text
Dim day As String = editPanel.day_textbox.Text
Dim month As String = editPanel.month_combobox.SelectedItem.ToString
If editPanel.month_combobox.SelectedIndex = 0 Then
month = "01"
ElseIf editPanel.month_combobox.SelectedIndex = 1 Then
month = "02"
ElseIf editPanel.month_combobox.SelectedIndex = 2 Then
month = "03"
ElseIf editPanel.month_combobox.SelectedIndex = 3 Then
month = "04"
ElseIf editPanel.month_combobox.SelectedIndex = 4 Then
month = "05"
ElseIf editPanel.month_combobox.SelectedIndex = 5 Then
month = "06"
ElseIf editPanel.month_combobox.SelectedIndex = 6 Then
month = "07"
ElseIf editPanel.month_combobox.SelectedIndex = 7 Then
month = "08"
ElseIf editPanel.month_combobox.SelectedIndex = 8 Then
month = "09"
ElseIf editPanel.month_combobox.SelectedIndex = 9 Then
month = "10"
ElseIf editPanel.month_combobox.SelectedIndex = 10 Then
month = "11"
ElseIf editPanel.month_combobox.SelectedIndex = 11 Then
month = "12"
End If
Dim year As String = editPanel.year_textbox.Text
Dim pyear As String = year + "-" + month + "-" + day
Dim pfund As String = editPanel.fund_textbox.Text
Dim puse As String = editPanel.used_textbox.Text
Dim plecturer As String = editPanel.TextBoxX1.Text
Dim pplace As String = editPanel.TextBoxX2.Text
Dim pservice As String = editPanel.TextBoxX3.Text
Dim punderstand As String = editPanel.TextBoxX4.Text
Dim pusage As String = editPanel.TextBoxX5.Text

sql = "UPDATE project SET pname='" + pname + "',pleader='" + pleader +


"',pyear='" + pyear + "',pfund='" + pfund + "',puse='" + puse + "',plecturer='" +
plecturer + "',pplace='" + pplace + "',pservice='" + pservice + "',punderstand='" +
punderstand + "',pusage='" + pusage + "' WHERE pid = '" + editPanel.pid.ToString + "';"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
dbread.Close()

'delete trainee first then add


sql = "DELETE FROM traineeexpect WHERE pid = '" + editPanel.pid.ToString + "'"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
dbread.Close()
Dim count2 As Integer = 0
Dim rank As String = ""

'add trainee_expert
For Each item As ListViewItem In editPanel.trainee_list.Items

101
sql = "select uid from position where uname ='" +
editPanel.trainee_list.Items(count2).SubItems(0).Text + "'"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
While dbread.Read()
rank = dbread("uid")
End While
dbread.Close()
sql = "INSERT INTO traineeexpect (pid,rank,amount) VALUES ('" +
editPanel.pid.ToString + "','" + rank + "','" +
editPanel.trainee_list.Items(count2).SubItems(1).Text + "')"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
dbread.Close()
count2 += 1
Next
count2 = 0
rank = ""

sql = "DELETE FROM traineereality WHERE pid = '" + editPanel.pid.ToString + "'"


dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
dbread.Close()
For Each item As ListViewItem In editPanel.trainee_list.Items
sql = "select uid from position where uname ='" +
editPanel.trainee_list.Items(count2).SubItems(0).Text + "'"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.executereader()
While dbread.read()
rank = dbread("uid")
End While
dbread.close()
sql = "insert into traineereality (pid,rank,amount) values ('" +
editPanel.pid.ToString + "','" + rank + "','" +
editPanel.trainee_list.Items(count2).SubItems(2).Text + "')"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.executereader()
dbread.close()
count2 += 1
Next

'delete from lecturer then add


sql = "DELETE FROM lecturer WHERE pid = '" + editPanel.pid.ToString + "'"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
dbread.Close()
Dim count3 As Integer = 0
Dim helper As String = ""
Dim main As String = ""
'add lecturer
For Each item As ListViewItem In editPanel.helper_list.Items
sql = "select lid from lecturerinfo where lname ='" +
editPanel.helper_list.Items(count3).SubItems(0).Text + "'"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
While dbread.Read()
helper = dbread("lid")
End While

102
dbread.Close()

sql = "select lid from lecturerinfo where lname ='" +


editPanel.main_lecturer_combobox.SelectedItem.ToString + "'"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
While dbread.Read()
main = dbread("lid")
End While
dbread.Close()

sql = "INSERT INTO lecturer (pid,main,helper) VALUES ('" +


editPanel.pid.ToString + "','" + main + "','" + helper + "')"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
dbread.Close()
count3 += 1
Next

'delete from team then add


sql = "DELETE FROM team WHERE pid = '" + editPanel.pid.ToString + "'"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
dbread.Close()
'add team
Dim team As String = ""
Dim count4 As Integer = 0

For Each item As ListViewItem In editPanel.team_list.Items


sql = "select leadid from leaderinfo where leadname ='" +
editPanel.team_list.Items(count4).SubItems(0).Text + "'"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
While dbread.Read()
team = dbread("leadid")
End While
dbread.Close()

sql = "INSERT INTO team (pid,leadid) VALUES ('" + editPanel.pid.ToString +


"','" + team + "')"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
dbread.Close()
count4 += 1
Next
editPanel.project_list.Items.Clear()
editPanel.ButtonX1_Click(sender, e)
editPanel.back_tile_item_Click(sender, e)
project_list.Items.Clear()
readDataToTree()
editPanel.project_list.Items.Clear()
editPanel.addData()
End Sub
Private Sub delete_tile_item_click(sender As Object, e As EventArgs)
If Not editPanel.IsOpen Then ' if panel not open then open
editPanel.IsOpen = True
editPanel.ButtonX2.Visible = True
End If

103
End Sub
Private Sub menuPanel_click(sender As Object, e As EventArgs)
'handle the panel to close when click
If menuPanel.IsOpen Then
menuPanel.IsOpen = False
End If
End Sub
Private Sub showPanel_click(sender As Object, e As EventArgs)
'handle the panel to close when click
If showPanel.IsOpen Then
showPanel.IsOpen = False
End If
End Sub
Public Sub readDataToTree()
'read data from database and put in project_list
sql = "SELECT p1.pid,p1.pname,p2.leadname FROM project as p1, leaderinfo as p2
where p1.pleader = p2.leadid order by p1.pid asc"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
dbconn2.ConnectionString = String.Format("server={0}; user id={1}; password={2};
database={3}; pooling=false; Character Set=utf8", Login_Form.server, Login_Form.username,
Login_Form.password, Login_Form.database)
dbconn2.Open()
sql2 = "SELECT YEAR(pyear) FROM project"
dbcomm2 = New MySqlCommand(sql2, dbconn2)
dbread2 = dbcomm2.ExecuteReader()
Dim count As Integer = 0
Dim id, name, leader, year As String
While dbread.Read() Or dbread2.Read()
id = dbread("pid")
name = dbread("pname")
leader = dbread("leadname")
year = dbread2("YEAR(pyear)")
Dim item1 As ListViewItem = project_list.FindItemWithText(name)
If (item1 IsNot Nothing) Then
Else
project_list.Items.Add(CreateProjectRow(id, name, leader, year))
End If

End While
dbread.Close()
dbread2.Close()
dbconn2.Close()
End Sub
Public Function CreateProjectRow(ByVal pId As String, ByVal pName As String, ByVal
pLeader As String, ByVal pYear As String) As System.Windows.Forms.ListViewItem
'create row in this function and return row and add to project_list
Dim row As System.Windows.Forms.ListViewItem = New
System.Windows.Forms.ListViewItem(New String() {pId, pName, pLeader, pYear})
Return row
End Function
Private Sub search_press(sender As Object, e As KeyEventArgs) Handles
search_textbox.KeyDown
'search project in project_list
If e.KeyCode = Keys.Enter Then
Dim search_text As String = search_textbox.Text
Dim count As Integer = 0
Dim key As String = ""

104
Dim found As Boolean = False
For Each item As ListViewItem In project_list.Items
key = project_list.Items(count).SubItems(1).Text
If key.Contains(search_text) Then
project_list.Items(count).Selected = True
project_list.Select()
found = True
getData(item)
Exit For
End If
count = count + 1
Next
If Not found Then
MsgBox("ไม่มีขอ้ มูลโครงกำรในระบบ!", MsgBoxStyle.Critical, "ค้นหำล้มเหลว")
End If
End If
End Sub
Private Sub project_list_ColumnWidthChanging(sender As Object, e As
ColumnWidthChangingEventArgs) Handles project_list.ColumnWidthChanging
'prevent column size to be changed
e.Cancel = True
e.NewWidth = project_list.Columns(e.ColumnIndex).Width
End Sub
Private Sub callData(ByVal d As ListViewItem)
Dim item As ListViewItem = d
showPanel.changeInfo(item.SubItems(1).Text, item.SubItems(2).Text)
showPanel.trainee_list.Items.Clear()
showPanel.readTraineeExpect(item.SubItems(1).Text)
showPanel.readFund(item.SubItems(1).Text)
showPanel.readBarChart(item.SubItems(1).Text)
showPanel.readMainLecturer(item.SubItems(1).Text)
showPanel.readHelperLecturer(item.SubItems(1).Text)
showPanel.readTraineeReality(item.SubItems(1).Text)
showPanel.checkExpect(item.SubItems(1).Text)
showPanel.readTeam(item.SubItems(1).Text)
showPanel.totalTrainee()
showPanel.readPieChart1()
showPanel.readPieChart2()
End Sub
Private Sub getData(ByVal d As ListViewItem)
Dim item As ListViewItem = d
If Not IsNothing(item) Then
If Not showPanel.IsOpen Then ' if panel not open then open
callData(item)
showPanel.IsOpen = True
showPanel.Location = New System.Drawing.Point(-5, 178)
ButtonX1.BringToFront()
ElseIf showPanel.IsOpen Then ' is panel already open then close first with 0
animate time and then reopen it
showPanel.Location = New System.Drawing.Point(-5, 178)
showPanel.AnimationTime = 0
showPanel.IsOpen = False
callData(item)
showPanel.AnimationTime = 500
showPanel.IsOpen = True
ButtonX1.BringToFront()
End If
End If

105
End Sub
Private Sub project_list_MouseClick(sender As Object, e As MouseEventArgs) Handles
project_list.MouseClick
' show panel list and load all information
Dim item As ListViewItem = project_list.GetItemAt(e.X, e.Y)
getData(item)
End Sub

Private Sub ButtonX1_Click(sender As Object, e As EventArgs) Handles ButtonX1.Click

menuPanel.hidemenu()

Dim bounds As Rectangle = showPanel.Chart1.Bounds


Dim pt As Point = showPanel.Chart1.PointToScreen(bounds.Location)
Dim bitmap As New Bitmap(bounds.Width, bounds.Height)
Using g As Graphics = Graphics.FromImage(bitmap)
g.CopyFromScreen(New Point(pt.X - showPanel.Chart1.Location.X, pt.Y -
showPanel.Chart1.Location.Y), Point.Empty, bounds.Size)
End Using
bitmap.Save(Login_Form.startPath + "\report1.jpg")

Dim bounds2 As Rectangle = showPanel.Chart2.Bounds


Dim pt2 As Point = showPanel.Chart2.PointToScreen(bounds2.Location)
Dim bitmap2 As New Bitmap(bounds2.Width, bounds2.Height)
Using g As Graphics = Graphics.FromImage(bitmap2)
g.CopyFromScreen(New Point(pt2.X - showPanel.Chart2.Location.X, pt2.Y -
showPanel.Chart2.Location.Y), Point.Empty, bounds2.Size)
End Using
bitmap2.Save(Login_Form.startPath + "\report2.jpg")

Dim bounds3 As Rectangle = showPanel.Chart3.Bounds


Dim pt3 As Point = showPanel.Chart3.PointToScreen(bounds3.Location)
Dim bitmap3 As New Bitmap(bounds3.Width, bounds3.Height)
Using g As Graphics = Graphics.FromImage(bitmap3)
g.CopyFromScreen(New Point(pt3.X - showPanel.Chart3.Location.X, pt3.Y -
showPanel.Chart3.Location.Y), Point.Empty, bounds3.Size)
End Using
bitmap3.Save(Login_Form.startPath + "\report3.jpg")

Dim oWord As Word.Application


Dim oDoc As Word.Document
Dim oTable As Word.Table
Dim oTable2 As Word.Table
Dim oTable3 As Word.Table
Dim oPara1 As Word.Paragraph, oPara2 As Word.Paragraph
Dim oPara3 As Word.Paragraph, oPara4 As Word.Paragraph
Dim oRng As Word.Range
Dim Pos As Double

'Start Word and open the document template.


oWord = CreateObject("Word.Application")
oWord.Visible = True
oDoc = oWord.Documents.Add

'Insert a paragraph at the beginning of the document.


oPara1 = oDoc.Content.Paragraphs.Add
oPara1.Range.Text = showPanel.projectName_label.Text
oPara1.Range.Font.Size = 20

106
oPara1.Range.Font.Bold = True
oPara1.Format.SpaceAfter = 24 '24 pt spacing after paragraph.
oPara1.Range.InsertParagraphAfter()

oPara2 = oDoc.Content.Paragraphs.Add(oDoc.Bookmarks.Item("\endofdoc").Range)
oPara2.Range.Font.Name = "CS ChatThaiUI"
oPara2.Range.Text = "ผูเ้ ข้ำรับกำรอบรม"
oPara2.Range.Font.Size = 12
oPara2.Range.Font.Bold = True
oPara2.Format.SpaceAfter = 6
oPara2.Range.InsertParagraphAfter()

Dim count As Integer = showPanel.trainee_list.Items.Count()


oTable = oDoc.Tables.Add(oDoc.Bookmarks.Item("\endofdoc").Range, count + 2, 3)
oTable.Range.ParagraphFormat.SpaceAfter = 6
oTable.Cell(1, 1).Range.Text = "ตำแหน่ง"
oTable.Borders.InsideLineStyle =
Microsoft.Office.Interop.Word.WdLineStyle.wdLineStyleSingle
oTable.Borders.OutsideLineStyle =
Microsoft.Office.Interop.Word.WdLineStyle.wdLineStyleDouble
oTable.Cell(1, 2).Range.Text = "คำดหวัง"
oTable.Borders.InsideLineStyle =
Microsoft.Office.Interop.Word.WdLineStyle.wdLineStyleSingle
oTable.Borders.OutsideLineStyle =
Microsoft.Office.Interop.Word.WdLineStyle.wdLineStyleDouble
oTable.Cell(1, 3).Range.Text = "อบรมจริ ง"
oTable.Borders.InsideLineStyle =
Microsoft.Office.Interop.Word.WdLineStyle.wdLineStyleSingle
oTable.Borders.OutsideLineStyle =
Microsoft.Office.Interop.Word.WdLineStyle.wdLineStyleDouble
For x = 2 To count + 1
For y = 1 To 3
Dim item As ListViewItem = showPanel.trainee_list.Items.Item(x - 2)
If y = 1 Then
oTable.Cell(x, y).Range.Text = item.SubItems(0).Text
oTable.Borders.InsideLineStyle =
Microsoft.Office.Interop.Word.WdLineStyle.wdLineStyleSingle
oTable.Borders.OutsideLineStyle =
Microsoft.Office.Interop.Word.WdLineStyle.wdLineStyleDouble
ElseIf y = 2 Then
oTable.Cell(x, y).Range.Text = item.SubItems(1).Text
oTable.Borders.InsideLineStyle =
Microsoft.Office.Interop.Word.WdLineStyle.wdLineStyleSingle
oTable.Borders.OutsideLineStyle =
Microsoft.Office.Interop.Word.WdLineStyle.wdLineStyleDouble
ElseIf y = 3 Then
oTable.Cell(x, y).Range.Text = item.SubItems(2).Text
oTable.Borders.InsideLineStyle =
Microsoft.Office.Interop.Word.WdLineStyle.wdLineStyleSingle
oTable.Borders.OutsideLineStyle =
Microsoft.Office.Interop.Word.WdLineStyle.wdLineStyleDouble
End If
Next
Next
oTable.Cell(count + 2, 1).Range.Text = "รวมทุง้ หมด"
oTable.Borders.InsideLineStyle =
Microsoft.Office.Interop.Word.WdLineStyle.wdLineStyleSingle

107
oTable.Borders.OutsideLineStyle =
Microsoft.Office.Interop.Word.WdLineStyle.wdLineStyleDouble
oTable.Cell(count + 2, 2).Range.Text = showPanel.expectamount_label.Text
oTable.Borders.InsideLineStyle =
Microsoft.Office.Interop.Word.WdLineStyle.wdLineStyleSingle
oTable.Borders.OutsideLineStyle =
Microsoft.Office.Interop.Word.WdLineStyle.wdLineStyleDouble
oTable.Cell(count + 2, 3).Range.Text = showPanel.realityamount_label.Text
oTable.Borders.InsideLineStyle =
Microsoft.Office.Interop.Word.WdLineStyle.wdLineStyleSingle
oTable.Borders.OutsideLineStyle =
Microsoft.Office.Interop.Word.WdLineStyle.wdLineStyleDouble

oPara4 = oDoc.Content.Paragraphs.Add(oDoc.Bookmarks.Item("\endofdoc").Range)
oPara4.Range.InsertParagraphBefore()
oPara4.Range.Text = "งบประมำณของโครงกำร"
oPara4.Format.SpaceAfter = 2
oPara4.Range.InsertParagraphAfter()
oPara4.Range.Text = showPanel.fund_label.Text
oPara4.Format.SpaceAfter = 2
oPara4.Range.InsertParagraphAfter()
oPara4.Range.Text = showPanel.payment_label.Text
oPara4.Format.SpaceAfter = 2
oPara4.Range.InsertParagraphAfter()

oPara3 = oDoc.Content.Paragraphs.Add(oDoc.Bookmarks.Item("\endofdoc").Range)
oPara3.Range.InsertParagraphBefore()
oPara3.Range.Font.Name = "CS ChatThaiUI"
oPara3.Range.Text = "รำยชื่อวิทยำกร"
oPara3.Range.Font.Size = 12
oPara3.Range.Font.Bold = True
oPara3.Format.SpaceAfter = 6
oPara3.Range.InsertParagraphAfter()

Dim count2 As Integer = showPanel.helper_list.Items.Count()


oTable2 = oDoc.Tables.Add(oDoc.Bookmarks.Item("\endofdoc").Range, count2, 1)
oTable2.Range.ParagraphFormat.SpaceAfter = 6
For x = 1 To count2
Dim item As ListViewItem = showPanel.helper_list.Items.Item(x - 1)
oTable2.Cell(x, 1).Range.Text = item.SubItems(0).Text
oTable2.Borders.OutsideLineStyle =
Microsoft.Office.Interop.Word.WdLineStyle.wdLineStyleDouble
Next

'Keep inserting text. When you get to 7 inches from top of the
'document, insert a hard page break.
Pos = oWord.InchesToPoints(7)
oDoc.Bookmarks.Item("\endofdoc").Range.InsertParagraphAfter()
Do
oRng = oDoc.Bookmarks.Item("\endofdoc").Range
oRng.ParagraphFormat.SpaceAfter = 6
oRng.InsertAfter("")
oRng.InsertParagraphAfter()
Loop While Pos >=
oRng.Information(Word.WdInformation.wdVerticalPositionRelativeToPage)

108
oRng.Collapse(Word.WdCollapseDirection.wdCollapseEnd)
oRng.InsertBreak(Word.WdBreakType.wdPageBreak)
oRng.Collapse(Word.WdCollapseDirection.wdCollapseEnd)
oRng.InsertAfter(showPanel.projectLeader_label.Text)
oRng.InsertParagraphAfter()

Dim count3 As Integer = showPanel.team_list.Items.Count()


oTable3 = oDoc.Tables.Add(oDoc.Bookmarks.Item("\endofdoc").Range, count3, 1)
oTable3.Range.ParagraphFormat.SpaceAfter = 6
For x = 1 To count3
Dim item As ListViewItem = showPanel.team_list.Items.Item(x - 1)
oTable3.Cell(x, 1).Range.Text = item.SubItems(0).Text
oTable3.Borders.OutsideLineStyle =
Microsoft.Office.Interop.Word.WdLineStyle.wdLineStyleDouble
Next

Dim para As Word.Paragraph = oDoc.Paragraphs.Add()


para.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter
para.Range.InsertParagraphBefore()
para.Range.InlineShapes.AddPicture(Login_Form.startPath + "\report1.jpg")
para.Range.InlineShapes.AddPicture(Login_Form.startPath + "\report3.jpg")
para.Range.InlineShapes.AddPicture(Login_Form.startPath + "\report2.jpg")
para.Range.InsertParagraphAfter()

menuPanel.showmenu()
End Sub
End Class

109
manageAccount_Panel
Imports MySql.Data.MySqlClient

Public Class manageAccount_Panel


Public dbconn = Login_Form.dbconn
Public sql = Login_Form.sql
Public dbcomm = Login_Form.dbcomm
Public dbread = Login_Form.dbread
Private Sub ReadDataToTable()
sql = "SELECT * FROM account ORDER BY status DESC, username ASC"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
Dim row As String()
Dim count As Integer = 1
While dbread.Read()
If (dbread("status") = 2) Then
row = New String() {count.ToString, dbread("username"), "ผูด้ ูแลระบบ", "ลบบัญชี
นี้"}
ElseIf (dbread("status") = 1) Then
row = New String() {count.ToString, dbread("username"), "ผูร้ ับผิดชอบโครงกำร", "ลบ
บัญชีน้ ี"}
Else
row = New String() {count.ToString, dbread("username"), "ผูใ้ ช้งำนทัว่ ไป", "ลบบัญชี
นี้"}
End If
DataGridViewX1.Rows.Add(row)
count = count + 1
End While
dbread.Close()
End Sub

Private Sub manageAccount_Panel_Load(sender As Object, e As EventArgs) Handles


MyBase.Load
ReadDataToTable()
End Sub

Private Sub DataGridViewX1_CellContentClick(sender As Object, e As


DataGridViewCellEventArgs) Handles DataGridViewX1.CellContentClick
Dim senderGrid = DirectCast(sender, DataGridView)
Dim cell As DataGridViewCell
For Each cell In DataGridViewX1.SelectedCells
If cell.ColumnIndex.ToString = "3" Then
Dim result As Integer = MessageBox.Show("ชื่อผูใ้ ช้น้ ีจะถูกลบออกจำกระบบ กรุ ณำยืนยัน", "ยืนยันกำรลบ
ข้อมูล", MessageBoxButtons.YesNo)
If result = DialogResult.No Then
MessageBox.Show("ยกเลิกกำรลบข้อมูล")
ElseIf result = DialogResult.Yes Then
sql = "DELETE FROM account where username='" +
DataGridViewX1.Rows(cell.RowIndex).Cells(1).Value.ToString + "'"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
dbread.Close()
DataGridViewX1.Rows.Clear()
DataGridViewX1.Refresh()
ReadDataToTable()

110
End If
Else
edit_username_textbox.Text =
DataGridViewX1.Rows(cell.RowIndex).Cells(1).Value.ToString
If DataGridViewX1.Rows(cell.RowIndex).Cells(2).Value.ToString = "ผูด้ ูแลระบบ"
Then
edit_status_combobox.SelectedIndex = 1
ElseIf DataGridViewX1.Rows(cell.RowIndex).Cells(2).Value.ToString =
"ผูร้ ับผิดชอบโครงกำร" Then
edit_status_combobox.SelectedIndex = 2
ElseIf DataGridViewX1.Rows(cell.RowIndex).Cells(2).Value.ToString = "ผูใ้ ช้งำน
ทัว่ ไป" Then
edit_status_combobox.SelectedIndex = 3
End If
End If
Next
End Sub

Private Sub create_button_Click(sender As Object, e As EventArgs) Handles


create_button.Click
Dim user, pass1, pass2, stat As String

user = username_textbox.Text
pass1 = password1_textbox.Text
pass2 = password2_textbox.Text
stat = ""
If (status_combobox.SelectedIndex = 1) Then
stat = "2"
ElseIf (status_combobox.SelectedIndex = 2) Then
stat = "1"
ElseIf (status_combobox.SelectedIndex = 3) Then
stat = "0"
End If
If (user = "") Then
MsgBox("กรุ ณำใส่ ชื่อผูใ้ ช้!", MsgBoxStyle.Critical, "เพิ่มผูใ้ ช้ลม้ เหลว")
ElseIf (pass1 = "") Then
MsgBox("กรุ ณำใส่ รหัสผ่ำน!", MsgBoxStyle.Critical, "เพิ่มผูใ้ ช้ลม้ เหลว")
ElseIf (pass2 <> pass1) Then
MsgBox("รหัสผ่ำนที่ยืนยันไม่ตรงกัน!", MsgBoxStyle.Critical, "เพิ่มผูใ้ ช้ลม้ เหลว")
ElseIf (status_combobox.SelectedIndex = 0) Then
MsgBox("กรุ ณำใส่ ระดับกำรใช้งำน!", MsgBoxStyle.Critical, "เพิ่มผูใ้ ช้ลม้ เหลว")
Else
sql = "INSERT INTO account (username, password, status) VALUES ('" + user +
"', '" + pass1 + "', '" + stat + "')"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
dbread.Close()
DataGridViewX1.Rows.Clear()
DataGridViewX1.Refresh()
ReadDataToTable()
reset_button_Click(sender, e)
End If

End Sub

Private Sub reset_button_Click(sender As Object, e As EventArgs) Handles


reset_button.Click

111
username_textbox.Clear()
password1_textbox.Clear()
password2_textbox.Clear()
status_combobox.SelectedIndex = 0
End Sub

Private Sub back_tile_item_Click(sender As Object, e As EventArgs) Handles


back_tile_item.Click
reset_button_Click(sender, e)
clear_edit_form()
If Me.IsOpen Then
Me.IsOpen = False
End If
End Sub

Private Sub ButtonX1_Click(sender As Object, e As EventArgs) Handles ButtonX1.Click


Dim status As String = ""
Dim username As String = edit_username_textbox.Text
Dim password As String = edit_password1_textbox.Text
If edit_status_combobox.SelectedItem.ToString = "ผูด้ ูแลระบบ" Then
status = "2"
ElseIf edit_status_combobox.SelectedItem.ToString = "ผูร้ ับผิดชอบโครงกำร" Then
status = "1"
ElseIf edit_status_combobox.SelectedItem.ToString = "ผูใ้ ช้งำนทัว่ ไป" Then
status = "0"
End If

If password = "" Then


sql = "UPDATE account SET status = '" + status + "' where username = '" +
username + "'"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
dbread.Close()
Else
If edit_password1_textbox.Text <> edit_password2_textbox.Text Then
MsgBox("รหัสผ่ำนที่ยืนยันไม่ตรงกัน!", MsgBoxStyle.Critical, "แก้ไขผูใ้ ช้ลม้ เหลว")
Else
sql = "UPDATE account SET status = '" + status + "',password = '" +
password + "' where username = '" + username + "'"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
dbread.Close()
End If
End If
DataGridViewX1.Rows.Clear()
DataGridViewX1.Refresh()
ReadDataToTable()
clear_edit_form()
End Sub
Private Sub clear_edit_form()
edit_username_textbox.Clear()
edit_password1_textbox.Clear()
edit_password2_textbox.Clear()
edit_status_combobox.SelectedIndex = 0
End Sub
End Class

112
managePermission_Panel
Imports MySql.Data.MySqlClient
Public Class managePermission_Panel
Public dbconn = Login_Form.dbconn
Public sql = Login_Form.sql
Public dbcomm = Login_Form.dbcomm
Public dbread = Login_Form.dbread
Private Sub back_tile_item_Click(sender As Object, e As EventArgs) Handles
back_tile_item.Click
If Me.IsOpen Then
Me.IsOpen = False
End If
End Sub
Private Sub position_list_ColumnWidthChanging(sender As Object, e As
ColumnWidthChangingEventArgs) Handles username_list.ColumnWidthChanging
e.Cancel = True
e.NewWidth = username_list.Columns(e.ColumnIndex).Width
End Sub
Public Function CreateProjectRow(ByVal pName As String, ByVal pStatus As String) As
System.Windows.Forms.ListViewItem
'create row in this function and return row and add to project_list
Dim row As System.Windows.Forms.ListViewItem = New
System.Windows.Forms.ListViewItem(New String() {pName, pStatus})
Return row
End Function

Private Sub ButtonX1_Click(sender As Object, e As EventArgs) Handles ButtonX1.Click


Dim status As String = ""
If RadioButton1.Checked Then
status = "2"
ElseIf RadioButton2.Checked Then
status = "1"
ElseIf RadioButton3.Checked Then
status = "0"
Else
MsgBox("กรุ ณำเลือกสถำนะ")
End If
sql = "UPDATE account SET status = '" + status + "' where username = '" +
username_list.FocusedItem.SubItems(0).Text + "'"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
dbread.Close()
username_list.Items.Clear()
readDataToTable()
End Sub
Public Sub readDataToTable()
sql = "SELECT * FROM `account` order by status desc"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
Dim status As String = ""
While dbread.Read()
If dbread("status") = 2 Then
status = "ผูด้ ูแลระบบ"
ElseIf dbread("status") = 1 Then
status = "ผูร้ ับผิดชอบโครงกำร"
Else

113
status = "ผูใ้ ช้งำนทัว่ ไป"
End If
username_list.Items.Add(CreateProjectRow(dbread("username"), status))
End While
dbread.Close()
End Sub

Private Sub managePermission_Panel_Load(sender As Object, e As EventArgs) Handles


MyBase.Load
readDataToTable()
End Sub
End Class

114
managePosition_Panel
Imports MySql.Data.MySqlClient

Public Class managePosition_Panel


Public dbconn = Login_Form.dbconn
Public sql = Login_Form.sql
Public dbcomm = Login_Form.dbcomm
Public dbread = Login_Form.dbread
Private Sub back_tile_item_Click(sender As Object, e As EventArgs) Handles
back_tile_item.Click
If Me.IsOpen Then
Me.IsOpen = False
End If
End Sub
Private Sub position_list_ColumnWidthChanging(sender As Object, e As
ColumnWidthChangingEventArgs) Handles position_list.ColumnWidthChanging
e.Cancel = True
e.NewWidth = position_list.Columns(e.ColumnIndex).Width
End Sub

Private Sub managePosition_Panel_Load(sender As Object, e As EventArgs) Handles


MyBase.Load
readDataToTable()
End Sub
Public Sub readDataToTable()
sql = "SELECT * FROM `position` order by uid"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
While dbread.Read()
position_list.Items.Add(CreateProjectRow(dbread("uname")))
End While
dbread.Close()
End Sub
Public Function CreateProjectRow(ByVal pName As String) As
System.Windows.Forms.ListViewItem
'create row in this function and return row and add to project_list
Dim row As System.Windows.Forms.ListViewItem = New
System.Windows.Forms.ListViewItem(New String() {pName})
Return row
End Function

Private Sub ButtonX1_Click(sender As Object, e As EventArgs) Handles ButtonX1.Click


Dim count As Integer
sql = "SELECT count(*) from position"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
While dbread.Read()
count = dbread("count(*)")
End While
dbread.Close()
count += 1

sql = "INSERT INTO position (uid,uname) VALUES ('" + count.ToString + "','" +


position_textbox.Text + "')"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()

115
dbread.Close()
position_list.Items.Clear()
readDataToTable()
End Sub

Private Sub ButtonX3_Click(sender As Object, e As EventArgs) Handles ButtonX3.Click


Dim uid As Integer = position_list.FocusedItem.Index + 1
sql = "DELETE FROM position WHERE uname = '" +
position_list.FocusedItem.SubItems(0).Text + "'"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
dbread.Close()
sql = "UPDATE position SET uid = uid - 1 WHERE uid > '" + uid.ToString + "'"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
dbread.Close()
position_list.Items.Clear()
readDataToTable()
End Sub
End Class

116
manageUser_Panel
Imports MySql.Data.MySqlClient

Public Class manageUser_Panel


Public dbconn = Login_Form.dbconn
Public sql = Login_Form.sql
Public dbcomm = Login_Form.dbcomm
Public dbread = Login_Form.dbread
Private Sub back_tile_item_Click(sender As Object, e As EventArgs) Handles
back_tile_item.Click
lecturer_textbox.Clear()
team_textbox.Clear()
If Me.IsOpen Then
Me.IsOpen = False
End If
End Sub

Private Sub lecturer_list_ColumnWidthChanging(sender As Object, e As


ColumnWidthChangingEventArgs) Handles lecturer_list.ColumnWidthChanging
e.Cancel = True
e.NewWidth = lecturer_list.Columns(e.ColumnIndex).Width
End Sub
Private Sub team_list_ColumnWidthChanging(sender As Object, e As
ColumnWidthChangingEventArgs) Handles team_list.ColumnWidthChanging
e.Cancel = True
e.NewWidth = team_list.Columns(e.ColumnIndex).Width
End Sub
Public Function CreateProjectRow(ByVal pName As String) As
System.Windows.Forms.ListViewItem
'create row in this function and return row and add to project_list
Dim row As System.Windows.Forms.ListViewItem = New
System.Windows.Forms.ListViewItem(New String() {pName})
Return row
End Function
Public Sub readDataToTable()
sql = "SELECT * FROM `lecturerinfo` order by lid"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
While dbread.Read()
lecturer_list.Items.Add(CreateProjectRow(dbread("lname")))
End While
dbread.Close()

sql = "SELECT * FROM `leaderinfo` order by leadid"


dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
While dbread.Read()
team_list.Items.Add(CreateProjectRow(dbread("leadname")))
End While
dbread.Close()
End Sub

Private Sub manageUser_Panel_Load(sender As Object, e As EventArgs) Handles


MyBase.Load
readDataToTable()
End Sub

117
Private Sub ButtonX1_Click(sender As Object, e As EventArgs) Handles ButtonX1.Click
Dim count As Integer
sql = "SELECT count(*) from lecturerinfo"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
While dbread.Read()
count = dbread("count(*)")
End While
dbread.Close()
count += 1

sql = "INSERT INTO lecturerinfo (lid,lname) VALUES ('" + count.ToString + "','" +


lecturer_textbox.Text + "')"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
dbread.Close()
lecturer_list.Items.Clear()
team_list.Items.Clear()
readDataToTable()
End Sub

Private Sub ButtonX2_Click(sender As Object, e As EventArgs) Handles ButtonX2.Click


Dim count As Integer
sql = "SELECT count(*) from leaderinfo"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
While dbread.Read()
count = dbread("count(*)")
End While
dbread.Close()
count += 1

sql = "INSERT INTO leaderinfo (leadid,leadname) VALUES ('" + count.ToString +


"','" + team_textbox.Text + "')"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
dbread.Close()
lecturer_list.Items.Clear()
team_list.Items.Clear()
readDataToTable()
End Sub

Private Sub ButtonX3_Click(sender As Object, e As EventArgs) Handles ButtonX3.Click


Dim lid As Integer = lecturer_list.FocusedItem.Index + 1
sql = "DELETE FROM lecturerinfo WHERE lname = '" +
lecturer_list.FocusedItem.SubItems(0).Text + "'"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
dbread.Close()
sql = "UPDATE lecturerinfo SET lid = lid - 1 WHERE lid > '" + lid.ToString + "'"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
dbread.Close()
lecturer_list.Items.Clear()
readDataToTable()
End Sub

118
Private Sub ButtonX4_Click(sender As Object, e As EventArgs) Handles ButtonX4.Click
Dim leadid As Integer = team_list.FocusedItem.Index + 1
sql = "DELETE FROM leaderinfo WHERE leadname = '" +
team_list.FocusedItem.SubItems(0).Text + "'"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
dbread.Close()
sql = "UPDATE leaderinfo SET leadid = leadid - 1 WHERE leadid > '" +
leadid.ToString + "'"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
dbread.Close()
team_list.Items.Clear()
readDataToTable()
End Sub
End Class

119
Menu_Panel
Public Class Menu_Panel
Private Sub Menu_Panel_Load(sender As Object, e As EventArgs) Handles MyBase.Load
End Sub
Public Sub admin_grant()
admin_tile_item.Enabled = True
End Sub
Public Sub editor_grant()
add_tile_item.Enabled = True
edit_tile_item.Enabled = True
delete_tile_item.Enabled = True
End Sub
Public Sub hidemenu()
Me.SlideOutButtonVisible = False
End Sub
Public Sub showmenu()
Me.SlideOutButtonVisible = True
End Sub
End Class

120
Overview
Imports MySql.Data.MySqlClient

Public Class Overview


Public overviewChart As OverviewChart
Public projname, pid1 As String
Public sumExpect1, sumExpect2 As Integer
Public fund, payment As Integer
Public lead, team, lecturer, place, service, understand, usage As Integer
Public Main, Helper, Teamer As New ArrayList
Public MainCount As Integer = 0
Public HelperCount As Integer = 0
Public teamCount As Integer = 0
Public dbconn = Login_Form.dbconn
Public sql = Login_Form.sql
Public dbcomm = Login_Form.dbcomm
Public dbread = Login_Form.dbread
Public sql2 As String
Public dbcomm2 As MySqlCommand
Public dbread2 As MySqlDataReader
Public dbconn2 As New MySqlConnection

Private Sub Overview_Form_Load(sender As Object, e As EventArgs) Handles MyBase.Load


readDataToTree()

overviewChart = New OverviewChart()


overviewChart.Location = New System.Drawing.Point(0, 197)
Me.Controls.Add(overviewChart)
overviewChart.BringToFront()
overviewChart.IsOpen = False
overviewChart.SlideOutButtonVisible = False

End Sub
Public Sub clearItem()
project_list.Items.Clear()
End Sub
Public Sub readDataToTree()
'read data from database and put in project_list
sql = "SELECT p1.pid,p1.pname,p2.leadname FROM project as p1, leaderinfo as p2
where p1.pleader = p2.leadid"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
dbconn2.ConnectionString = String.Format("server={0}; user id={1}; password={2};
database={3}; pooling=false; Character Set=utf8", Login_Form.server, Login_Form.username,
Login_Form.password, Login_Form.database)
dbconn2.Open()
sql2 = "SELECT YEAR(pyear) FROM project"
dbcomm2 = New MySqlCommand(sql2, dbconn2)
dbread2 = dbcomm2.ExecuteReader()
Dim count As Integer = 0
Dim id, name, leader, year As String
While dbread.Read() Or dbread2.Read()
id = dbread("pid")
name = dbread("pname")
leader = dbread("leadname")
year = dbread2("YEAR(pyear)")

121
project_list.Items.Add(CreateProjectRow(id, name, leader, year))

End While
dbread.Close()
dbread2.Close()
dbconn2.Close()
End Sub

Private Sub project_list_MouseClick1(sender As Object, e As MouseEventArgs) Handles


project_list.MouseClick
' show panel list and load all information

overviewChart.close("1")
Dim item As ListViewItem = project_list.GetItemAt(e.X, e.Y)
projname = item.SubItems(1).Text
overviewChart.test(projname, pid1)
overviewChart.IsOpen = True
End Sub
Private Sub search_press(sender As Object, e As KeyEventArgs) Handles
search_textbox1.KeyDown
'search project in project_list
If e.KeyCode = Keys.Enter Then
Dim search_text As String = search_textbox1.Text
Dim count As Integer = 0
Dim key As String = ""
Dim found As Boolean = False
For Each item As ListViewItem In project_list.Items
key = project_list.Items(count).SubItems(1).Text
If key.Contains(search_text) Then
project_list.Items(count).Selected = True
project_list.Select()
found = True
Exit For
End If
count = count + 1
Next
If Not found Then
MsgBox("ไม่มีขอ้ มูลโครงกำรในระบบ!", MsgBoxStyle.Critical, "ค้นหำล้มเหลว")
End If
End If
End Sub

Public Shared Function CreateProjectRow(ByVal pId As String, ByVal pName As String,


ByVal pLeader As String, ByVal pYear As String) As System.Windows.Forms.ListViewItem
'create row in this function and return row and add to project_list
Dim row As System.Windows.Forms.ListViewItem = New
System.Windows.Forms.ListViewItem(New String() {pId, pName, pLeader, pYear})
Return row
End Function

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click


Me.IsOpen = False
overviewChart.IsOpen = False
project_list.Items.Clear()
readDataToTree()
End Sub

End Class

122
OverviewChart
Imports MySql.Data.MySqlClient

Public Class OverviewChart


Public overviewTraining As OverviewDetails
Public projname, pid1 As String
Public sumExpect1, sumExpect2 As Integer
Public fund, payment As Integer
Public lead, team, lecturer, place, service, understand, usage As Integer
Public Main, Helper, Teamer, leader As New ArrayList
Public MainCount As Integer = 0
Public HelperCount As Integer = 0
Public teamCount As Integer = 0
Public leadCount As Integer = 0
Public dbconn = Login_Form.dbconn
Public sql = Login_Form.sql
Public dbcomm = Login_Form.dbcomm
Public dbread = Login_Form.dbread
Public sql2 As String
Public dbcomm2 As MySqlCommand
Public dbread2 As MySqlDataReader
Public dbconn2 As New MySqlConnection

Private Sub OverviewChart_Form_Load(sender As Object, e As EventArgs) Handles


MyBase.Load
overviewTraining = New OverviewDetails()
overviewTraining.Location = New System.Drawing.Point(0, 0)
Me.Controls.Add(overviewTraining)
overviewTraining.BringToFront()
overviewTraining.IsOpen = False
overviewTraining.SlideOutButtonVisible = False

End Sub

Public Sub close(ByVal a As String)


If a = "1" Then
Me.IsOpen = False
overviewTraining.IsOpen = False
End If
End Sub

Public Sub test(ByVal projnameS As String, ByRef pid1S As String)


projname = projnameS
pid1 = pid1S

toChart()
getSemX()
getSemR()
getFund()
getAvg()
getTeam()
getLecturer()

Chart1.Series("เป้ำหมำย").Points.Clear()
Chart1.Series("อบรมจริ ง").Points.Clear()

123
Chart2.Series("งบโครงกำร").Points.Clear()
Chart2.Series("ใช้จ่ำยจริ ง").Points.Clear()

Chart3.Series("หลัก").Points.Clear()
Chart3.Series("ผูช้ ่วย").Points.Clear()

Chart4.Series("หัวหน้ำโครงกำร").Points.Clear()
Chart4.Series("สมำชิกภำยในทีม").Points.Clear()

Chart5.Series("ผูบ้ รรยำย").Points.Clear()
Chart5.Series("สถำนที่ ").Points.Clear()
Chart5.Series("บริ กำร").Points.Clear()
Chart5.Series("ควำมเข้ำใจ").Points.Clear()
Chart5.Series("กำรนำไปใช้").Points.Clear()

Chart1.Series("เป้ำหมำย").Points.AddXY("ผูเ้ ข้ำรับกำรอบรม", sumExpect1)


Chart1.Series("อบรมจริ ง").Points.AddXY("ผูเ้ ข้ำรับกำรอบรม", sumExpect2)

Chart2.Series("งบโครงกำร").Points.AddXY("งบโครงกำร", fund)
Chart2.Series("ใช้จ่ำยจริ ง").Points.AddXY("ใช้จ่ำยจริ ง", payment)

Chart3.Series("หลัก").Points.AddXY("วิทยำกร", MainCount)
Chart3.Series("ผูช้ ่วย").Points.AddXY("วิทยำกร", HelperCount)

Chart4.Series("หัวหน้ำโครงกำร").Points.AddXY("วิทยำกร", leadCount)
Chart4.Series("สมำชิกภำยในทีม").Points.AddXY("วิทยำกร", teamCount)

Chart5.Series("ผูบ้ รรยำย").Points.AddXY("วิทยำกร", lecturer)


Chart5.Series("สถำนที่ ").Points.AddXY("วิทยำกร", place)
Chart5.Series("บริ กำร").Points.AddXY("วิทยำกร", service)
Chart5.Series("ควำมเข้ำใจ").Points.AddXY("วิทยำกร", understand)
Chart5.Series("กำรนำไปใช้").Points.AddXY("วิทยำกร", usage)

End Sub

Public Sub toChart()


sql = "SELECT pid FROM project where pname ='" + projname + "'"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
While dbread.Read()

pid1 = dbread("pid").ToString

End While
dbread.Close()

End Sub

Public Sub getSemX()


sql = "SELECT SUM(amount) FROM traineeexpect where pid ='" + pid1 + "'"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
While dbread.Read()

124
sumExpect1 = Convert.ToInt32(dbread("SUM(amount)"))

End While
dbread.Close()

End Sub

Public Sub getSemR()


sql = "SELECT SUM(amount) FROM traineereality where pid ='" + pid1 + "'"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
While dbread.Read()

sumExpect2 = Convert.ToInt32(dbread("SUM(amount)"))

End While
dbread.Close()

End Sub

Public Sub getFund()


sql = "SELECT pfund,puse FROM project where pid ='" + pid1 + "'"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
While dbread.Read()

fund = Convert.ToInt32(dbread("pfund"))
payment = Convert.ToInt32(dbread("puse"))
End While
dbread.Close()

End Sub

Public Sub getAvg()


sql = "SELECT pleader,pfund,puse,plecturer,pplace,pservice,punderstand,pusage
FROM project where pid ='" + pid1 + "'"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
While dbread.Read()

lead = Convert.ToInt32(dbread("pleader"))
fund = Convert.ToInt32(dbread("pfund"))
payment = Convert.ToInt32(dbread("puse"))
lecturer = Convert.ToInt32(dbread("plecturer"))
place = Convert.ToInt32(dbread("pplace"))
service = Convert.ToInt32(dbread("pservice"))
understand = Convert.ToInt32(dbread("punderstand"))
usage = Convert.ToInt32(dbread("pusage"))

End While
dbread.Close()
End Sub

Public Sub getTeam()


Teamer.Clear()
leader.Clear()
sql = "SELECT leadid FROM team where pid ='" + pid1 + "'"

125
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()

dbconn2.ConnectionString = String.Format("server={0}; user id={1}; password={2};


database={3}; pooling=false; Character Set=utf8", Login_Form.server, Login_Form.username,
Login_Form.password, Login_Form.database)
dbconn2.Open()
sql2 = "SELECT count(pleader) from project where pid ='" + pid1 + "'"
dbcomm2 = New MySqlCommand(sql2, dbconn2)
dbread2 = dbcomm2.ExecuteReader()

While dbread.Read()
If Not (Teamer.Contains(dbread("leadid"))) Then
Teamer.Add(dbread("leadid").ToString)
End If
End While

While dbread2.Read()
leader.Add(dbread2("count(pleader)"))
End While

leadCount = getSize(leader)
teamCount = getSize(Teamer)
dbread.Close()
dbread2.Close()
dbconn2.Close()
End Sub

Public Sub getLecturer()


Main.Clear()
Helper.Clear()
sql = "SELECT main,helper FROM test where pid ='" + pid1 + "'"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
While dbread.Read()
If Not (Main.Contains(dbread("main"))) Then
Main.Add(dbread("main").ToString)
End If

If Not (Helper.Contains(dbread("helper"))) Then


Helper.Add(dbread("helper").ToString)
End If
End While
MainCount = getSize(Main)
HelperCount = getSize(Helper)
dbread.Close()
End Sub

Public Function getSize(ByVal a As ArrayList)


Dim count As Integer = 0
For Each count1 As String In a
count += 1
Next
Return count
End Function

Private Sub Chart1_Click(sender As Object, e As EventArgs) Handles Chart1.Click

126
overviewTraining.IsOpen = False
overviewTraining.test("training", projname, pid1)
overviewTraining.IsOpen = True
End Sub

Private Sub Chart3_Click(sender As Object, e As EventArgs) Handles Chart3.Click

overviewTraining.IsOpen = False
overviewTraining.test("mainhelper", projname, pid1)
overviewTraining.IsOpen = True
End Sub

Private Sub Chart4_Click(sender As Object, e As EventArgs) Handles Chart4.Click


overviewTraining.IsOpen = False
overviewTraining.test("leaderteam", projname, pid1)
overviewTraining.IsOpen = True
End Sub
End Class

127
OverviewDetails
Imports MySql.Data.MySqlClient

Public Class OverviewDetails


Public overviewCharts As OverviewChart
Public projname, pid, pid1, pid2, name1, name2, typer As String
Public sumExpect1, sumExpect2, countMax, countRow, countNum As Integer
Public fund, payment As Integer
Public lead, team, lecturer, place, service, understand, usage As Integer
Public leader, teams, Main, Helper, Teamer, poslist1 As New ArrayList
Public MainCount As Integer = 0
Public HelperCount As Integer = 0
Public teamCount As Integer = 0
Public dbconn = Login_Form.dbconn
Public sql = Login_Form.sql
Public dbcomm = Login_Form.dbcomm
Public dbread = Login_Form.dbread
Public sql2 As String
Public dbcomm2 As MySqlCommand
Public dbread2 As MySqlDataReader
Public dbconn2 As New MySqlConnection
Public text1, text2 As String
Public Sub test(ByVal types As String, ByVal name1s As String, ByVal name2s As
String)
typer = types
projname = name1s
pid = name2s
If (typer = "training") Then
LabelX3.Text = "จำนวนที่คำดหวัง"
LabelX4.Text = "จำนวนที่อบรมจริ ง"
toTraining()
ElseIf (typer = "mainhelper") Then
LabelX3.Text = "หลัก"
LabelX4.Text = "ผูช้ ่วย"
toMainHelper()
ElseIf (typer = "leaderteam") Then
LabelX3.Text = "หัวหน้ำโครงกำร"
LabelX4.Text = "สมำชิกในทีม"
toLeaderTeam()
End If

End Sub

Private Sub toLeaderTeam()


poslist1.Clear()
sql = "SELECT MAX(leadid),count(*) FROM leaderinfo"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()

dbconn2.ConnectionString = String.Format("server={0}; user id={1}; password={2};


database={3}; pooling=false; Character Set=utf8", Login_Form.server, Login_Form.username,
Login_Form.password, Login_Form.database)
dbconn2.Open()
sql2 = "SELECT leadid,leadname FROM leaderinfo"
dbcomm2 = New MySqlCommand(sql2, dbconn2)

128
dbread2 = dbcomm2.ExecuteReader()

While dbread.Read()
countMax = Convert.ToInt32(dbread("MAX(leadid)"))
countRow = Convert.ToInt32(dbread("count(*)"))
End While
For i As Integer = 0 To countMax
poslist1.Add("A")
Next

While dbread2.Read()
countNum = Convert.ToInt32(dbread2("leadid"))
poslist1.Insert(countNum, dbread2("leadname"))
End While

dbread.Close()
dbread2.Close()
dbconn2.Close()
toFindPid()
toDetailsLeaderTeam()

End Sub
Private Sub toDetailsLeaderTeam()
leader.Clear()
teams.Clear()
sql = "SELECT pleader FROM project WHERE pid = '" + pid1 + "'"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()

dbconn2.ConnectionString = String.Format("server={0}; user id={1}; password={2};


database={3}; pooling=false; Character Set=utf8", Login_Form.server, Login_Form.username,
Login_Form.password, Login_Form.database)
dbconn2.Open()
sql2 = "SELECT leadid FROM team WHERE pid = '" + pid1 + "'"
dbcomm2 = New MySqlCommand(sql2, dbconn2)
dbread2 = dbcomm2.ExecuteReader()

While dbread.Read()
If Not leader.Contains(dbread("pleader")) Then
leader.Add(dbread("pleader"))
End If
End While

While dbread2.Read()
If Not teams.Contains(dbread2("leadid")) Then
teams.Add(dbread2("leadid"))
End If
End While
dbread.Close()
dbread2.Close()
dbconn2.Close()
toDetailLeaderTeam()

End Sub

Private Sub toDetailLeaderTeam()


text1 = ""

129
text2 = ""
For Each item In leader
Dim items = Convert.ToInt32(item)
text1 += poslist1(items) + vbNewLine
Next

For Each item In teams


Dim items = Convert.ToInt32(item)
text2 += poslist1(items) + vbNewLine
Next
LabelX1.Text = text1
LabelX2.Text = text2
End Sub

Private Sub toMainHelper()


poslist1.Clear()
sql = "SELECT MAX(lid),count(*) FROM lecturerinfo"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()

dbconn2.ConnectionString = String.Format("server={0}; user id={1}; password={2};


database={3}; pooling=false; Character Set=utf8", Login_Form.server, Login_Form.username,
Login_Form.password, Login_Form.database)
dbconn2.Open()
sql2 = "SELECT lid,lname FROM lecturerinfo"
dbcomm2 = New MySqlCommand(sql2, dbconn2)
dbread2 = dbcomm2.ExecuteReader()

While dbread.Read()
countMax = Convert.ToInt32(dbread("MAX(lid)"))
countRow = Convert.ToInt32(dbread("count(*)"))
End While
For i As Integer = 0 To countMax
poslist1.Add("A")
Next

While dbread2.Read()
countNum = Convert.ToInt32(dbread2("lid"))
poslist1.Insert(countNum, dbread2("lname"))
End While

dbread.Close()
dbread2.Close()
dbconn2.Close()
toFindPid()
toDetailsMainHelper()

End Sub

Private Sub toDetailsMainHelper()


Main.Clear()
Helper.Clear()
sql = "SELECT main,helper FROM test WHERE pid ='" + pid1 + "'"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()

While dbread.Read()

130
If Not Main.Contains(dbread("main")) Then
Main.Add(dbread("main"))
End If

If Not Helper.Contains(dbread("helper")) Then


Helper.Add(dbread("helper"))
End If
End While
dbread.Close()
toDetailMainHelper()
End Sub
Private Sub toDetailMainHelper()
text1 = ""
text2 = ""
For Each item In Main
Dim items = Convert.ToInt32(item)
text1 += poslist1(items) + vbNewLine
Next

For Each item In Helper


Dim items = Convert.ToInt32(item)
text2 += poslist1(items) + vbNewLine
Next
LabelX1.Text = text1
LabelX2.Text = text2
End Sub
Private Sub toTraining()
sql = "SELECT MAX(uid),count(*) FROM position"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()

dbconn2.ConnectionString = String.Format("server={0}; user id={1}; password={2};


database={3}; pooling=false; Character Set=utf8", Login_Form.server, Login_Form.username,
Login_Form.password, Login_Form.database)
dbconn2.Open()
sql2 = "SELECT uid,uname FROM position"
dbcomm2 = New MySqlCommand(sql2, dbconn2)
dbread2 = dbcomm2.ExecuteReader()

While dbread.Read()
countMax = Convert.ToInt32(dbread("MAX(uid)"))
countRow = Convert.ToInt32(dbread("count(*)"))
End While
For i As Integer = 0 To countMax
poslist1.Add("A")
Next

While dbread2.Read()
countNum = Convert.ToInt32(dbread2("uid"))
poslist1.Insert(countNum, dbread2("uname"))
End While

dbread.Close()
dbread2.Close()
dbconn2.Close()
toFindPid()
toDetailTraining()

131
End Sub

Public Sub toFindPid() 'not finish


pid1 = ""
pid2 = ""
'Chart1.Series("Series1").Points.Clear()
'Chart1.Series("Series2").Points.Clear()

sql = "SELECT pid FROM project where pname ='" + projname + "'"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
'dbconn2.ConnectionString = String.Format("server={0}; user id={1}; password={2};
database={3}; pooling=false; Character Set=utf8", Login_Form.server, Login_Form.username,
Login_Form.password, Login_Form.database)
'dbconn2.Open()
'sql2 = "SELECT pid FROM project where pname ='" + name2 + "'"
'dbcomm2 = New MySqlCommand(sql2, dbconn2)
'dbread2 = dbcomm2.ExecuteReader()

While dbread.Read()

pid1 = dbread("pid").ToString

End While

dbread.Close()
End Sub

Private Sub toDetailTraining()


'expect chart
text1 = ""
text2 = ""
'Chart1.Series("Series1").LegendText = "คำดหวัง"
'Chart1.Series("Series2").LegendText = "อบรมจริ ง"
sql = "SELECT rank,amount FROM traineeexpect where pid ='" + pid1 + "'"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
dbconn2.ConnectionString = String.Format("server={0}; user id={1}; password={2};
database={3}; pooling=false; Character Set=utf8", Login_Form.server, Login_Form.username,
Login_Form.password, Login_Form.database)
dbconn2.Open()
sql2 = "SELECT rank,amount FROM traineereality where pid ='" + pid1 + "'"
dbcomm2 = New MySqlCommand(sql2, dbconn2)
dbread2 = dbcomm2.ExecuteReader()
While dbread.Read()
Dim fp As Integer = Convert.ToInt32(dbread("rank"))
'Chart1.Series("Series1").Points.AddXY(poslist1(fp),
Convert.ToInt32(dbread("amount")))
text1 += poslist1(fp) + " : " + dbread("amount") + vbNewLine

End While

While dbread2.Read()

132
Dim fp As Integer = Convert.ToInt32(dbread2("rank"))
'Chart1.Series("Series2").Points.AddXY(poslist1(fp),
Convert.ToInt32(dbread2("amount")))
text2 += poslist1(fp) + " : " + dbread2("amount") + vbNewLine
End While

dbread.Close()
dbread2.Close()
dbconn2.Close()
LabelX1.Text = text1
LabelX2.Text = text2
End Sub

Private Sub toChartMain()


'Chart1.Series("Series1").LegendText = "คำดหวัง"
'Chart1.Series("Series2").LegendText = "อบรมจริ ง"
sql = "SELECT rank,amount FROM traineeexpect where pid ='" + pid1 + "'"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
dbconn2.ConnectionString = String.Format("server={0}; user id={1}; password={2};
database={3}; pooling=false; Character Set=utf8", Login_Form.server, Login_Form.username,
Login_Form.password, Login_Form.database)
dbconn2.Open()
sql2 = "SELECT rank,amount FROM traineereality where pid ='" + pid1 + "'"
dbcomm2 = New MySqlCommand(sql2, dbconn2)
dbread2 = dbcomm2.ExecuteReader()
While dbread.Read()
Dim fp As Integer = Convert.ToInt32(dbread("rank"))
'Chart1.Series("Series1").Points.AddXY(poslist1(fp),
Convert.ToInt32(dbread("amount")))

End While

While dbread2.Read()
Dim fp As Integer = Convert.ToInt32(dbread2("rank"))
'Chart1.Series("Series2").Points.AddXY(poslist1(fp),
Convert.ToInt32(dbread2("amount")))
End While

dbread.Close()
dbread2.Close()
dbconn2.Close()
End Sub

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click


Me.IsOpen = False
End Sub
End Class

133
OverviewType
Public Class OverviewType
Public Overview As Overview = Nothing
Public OverviewWhole As OverviewWholeChart = Nothing

Private Sub OverviewType_Panel_Load(sender As Object, e As EventArgs) Handles


MyBase.Load

Overview = New Overview()


Me.Controls.Add(Overview)
Overview.BringToFront()
Overview.IsOpen = False
Overview.SlideOutButtonVisible = False

OverviewWhole = New OverviewWholeChart()


Me.Controls.Add(OverviewWhole)
OverviewWhole.BringToFront()
OverviewWhole.IsOpen = False
OverviewWhole.SlideOutButtonVisible = False

End Sub
Public Sub readData()
Overview.clearItem()
Overview.readDataToTree()
End Sub
Private Sub ButtonX2_Click(sender As Object, e As EventArgs) Handles ButtonX2.Click
Overview.IsOpen = True
End Sub

Private Sub ButtonX1_Click(sender As Object, e As EventArgs) Handles ButtonX1.Click


OverviewWhole.test()
OverviewWhole.IsOpen = True
End Sub

Private Sub ButtonX3_Click(sender As Object, e As EventArgs) Handles ButtonX3.Click


Me.IsOpen = False
End Sub
End Class

134
OverviewWholeChart
Imports MySql.Data.MySqlClient

Public Class OverviewWholeChart


Public overviewChart As OverviewChart
Public overViewShowChart As OverviewWholeShowChart

Public projname As String


Public count As Integer = 0
Public fund, payment As Integer
Public lead, team, lecturer, place, service, understand, usage As Integer
Public Main, Helper, Teamer, pid1, year As New ArrayList
Public MainCount As Integer = 0
Public HelperCount As Integer = 0
Public teamCount As Integer = 0
Public dbconn = Login_Form.dbconn
Public sql = Login_Form.sql
Public dbcomm = Login_Form.dbcomm
Public dbread = Login_Form.dbread
Public sql2 As String
Public dbcomm2 As MySqlCommand
Public dbread2 As MySqlDataReader
Public dbconn2 As New MySqlConnection
Public dater, selects, selector As String
Public asshole As String = ""
Public todaydate As String

Public Sub test()


todaydate = String.Format("{0:yyyy}", DateTime.Today)

ComboBoxEx1.Items.Add("0 เดือน")
ComboBoxEx1.Items.Add("12 เดือน")
ComboBoxEx1.Items.Add("24 เดือน")
ComboBoxEx1.Items.Add("36 เดือน")
ComboBoxEx1.Items.Add("48 เดือน")
ComboBoxEx1.Items.Add("60 เดือน")

ComboBoxEx2.Items.Add("จำนวนเป้ำหมำย")
ComboBoxEx2.Items.Add("อบรมจริ ง")
ComboBoxEx2.Items.Add("งบโครงกำร")
ComboBoxEx2.Items.Add("ใช้จ่ำยจริ ง")
ComboBoxEx2.Items.Add("สถำนที่")
ComboBoxEx2.Items.Add("บริ กำร")
ComboBoxEx2.Items.Add("ควำมเข้ำใจ")
ComboBoxEx2.Items.Add("กำรนำไปใช้")

overViewShowChart = New OverviewWholeShowChart()


overViewShowChart.Location = New System.Drawing.Point(-5, 178)
Me.Controls.Add(overViewShowChart)
overViewShowChart.BringToFront()
overViewShowChart.IsOpen = False
overViewShowChart.SlideOutButtonVisible = False

End Sub

135
Private Sub ButtonX1_Click(sender As Object, e As EventArgs) Handles ButtonX1.Click
If ComboBoxEx1.Text = "" Or ComboBoxEx2.Text = "" Then
MsgBox("กรุ ณำเลือกชนิดข้อมูลให้ครบ")

Else
overViewShowChart.IsOpen = False
overViewShowChart.test(pid1)
overViewShowChart.toDate(ComboBoxEx1.SelectedItem.ToString)
overViewShowChart.toChart(ComboBoxEx2.SelectedItem.ToString)
overViewShowChart.IsOpen = True
End If

End Sub

Private Sub ButtonX2_Click(sender As Object, e As EventArgs) Handles ButtonX2.Click


Me.IsOpen = False
ComboBoxEx1.Items.Clear()
ComboBoxEx1.Text = ""
ComboBoxEx2.Text = ""
ComboBoxEx2.Items.Clear()
overViewShowChart.IsOpen = False
End Sub

End Class

136
OverviewWholeShowChart
Imports MySql.Data.MySqlClient

Public Class OverviewWholeShowChart


Public overviewChart As OverviewChart
Public projname As String
Public count As Integer = 0
Public fund, payment As Integer
Public lead, team, lecturer, place, service, understand, usage As Integer
Public Main, Helper, Teamer, pid1, year, finalPid, MIT, terex, yearsss As New
ArrayList
Public MainCount As Integer = 0
Public HelperCount As Integer = 0
Public teamCount As Integer = 0
Public dbconn = Login_Form.dbconn
Public sql = Login_Form.sql
Public dbcomm = Login_Form.dbcomm
Public dbread = Login_Form.dbread
Public sql2 As String
Public dbcomm2 As MySqlCommand
Public dbread2 As MySqlDataReader
Public dbconn2 As New MySqlConnection
Public dater, selects, selector As String
Public asshole As String = ""
Public todaydate As String
Public check As String = ""
Public q, w, e As String

Public Sub test(ByVal name1s As ArrayList)


pid1 = name1s
todaydate = String.Format("{0:yyyy}", DateTime.Today)
End Sub

Public Sub toChart(ByVal a As String)


Dim texts As String = ""
asshole = ""
Chart1.Series("Series1").Points.Clear()
selects = a
If (selects = "จำนวนเป้ำหมำย") Then
Dim ass As New ArrayList
Dim tek As String = ""
Dim countx As Integer = 0
ass.Clear()
For Each item As String In pid1

sql = "select SUM(amount) from traineeexpect where pid = '" + item + "'"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()

dbconn2.ConnectionString = String.Format("server={0}; user id={1};


password={2}; database={3}; pooling=false; Character Set=utf8", Login_Form.server,
Login_Form.username, Login_Form.password, Login_Form.database)
dbconn2.Open()
sql2 = "SELECT pname,pyear FROM project WHERE pid = '" + item + "'"
dbcomm2 = New MySqlCommand(sql2, dbconn2)
dbread2 = dbcomm2.ExecuteReader()

137
While dbread2.Read()
tek = dbread2("pname") + vbNewLine + dbread2("pyear")
ass.Add(tek)
End While
While dbread.Read()
Chart1.Series("Series1").Points.AddXY(ass(countx),
dbread("SUM(amount)"))
countx += 1
End While
dbread.Close()
dbread2.Close()
dbconn2.Close()
Next
ElseIf (selects = "อบรมจริ ง") Then
Dim ass As New ArrayList
Dim tek As String = ""
Dim countx As Integer = 0
ass.Clear()
For Each item As String In pid1
sql = "select SUM(amount) from traineereality where pid = '" + item + "'"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
dbconn2.ConnectionString = String.Format("server={0}; user id={1};
password={2}; database={3}; pooling=false; Character Set=utf8", Login_Form.server,
Login_Form.username, Login_Form.password, Login_Form.database)
dbconn2.Open()
sql2 = "SELECT pname,pyear FROM project WHERE pid = '" + item + "'"
dbcomm2 = New MySqlCommand(sql2, dbconn2)
dbread2 = dbcomm2.ExecuteReader()
While dbread2.Read()
tek = dbread2("pname") + vbNewLine + dbread2("pyear")
ass.Add(tek)
End While
While dbread.Read()
Chart1.Series("Series1").Points.AddXY(ass(countx),
dbread("SUM(amount)"))
countx += 1
End While
dbread.Close()
dbread2.Close()
dbconn2.Close()
Next
ElseIf (selects = "งบโครงกำร") Then
For Each item As String In pid1
sql = "select pfund,pname,pyear from project where pid = '" + item + "'"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
While dbread.Read()
Chart1.Series("Series1").Points.AddXY(dbread("pname") + vbNewLine +
dbread("pyear"), dbread("pfund"))
End While
dbread.Close()
Next
ElseIf (selects = "ใช้จ่ำยจริ ง") Then
For Each item As String In pid1
sql = "select puse,pname,pyear from project where pid = '" + item + "'"

138
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
While dbread.Read()
Chart1.Series("Series1").Points.AddXY(dbread("pname") + vbNewLine +
dbread("pyear"), dbread("puse"))
End While
dbread.Close()
Next
ElseIf (selects = "สถำนที่") Then
For Each item As String In pid1
sql = "select pplace,pname,pyear from project where pid = '" + item + "'"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
While dbread.Read()
Chart1.Series("Series1").Points.AddXY(dbread("pname") + vbNewLine +
dbread("pyear"), dbread("pplace"))

End While
dbread.Close()
Next

ElseIf (selects = "บริ กำร") Then


For Each item As String In pid1
sql = "select pservice,pname,pyear from project where pid = '" + item +
"'"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
While dbread.Read()
Chart1.Series("Series1").Points.AddXY(dbread("pname") + vbNewLine +
dbread("pyear"), dbread("pservice"))

End While
dbread.Close()
Next

ElseIf (selects = "ควำมเข้ำใจ") Then


For Each item As String In pid1
sql = "select punderstand,pname,pyear from project where pid = '" + item
+ "'"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
While dbread.Read()
Chart1.Series("Series1").Points.AddXY(dbread("pname") + vbNewLine +
dbread("pyear"), dbread("punderstand"))

End While
dbread.Close()
Next

ElseIf (selects = "กำรนำไปใช้") Then


For Each item As String In pid1
sql = "select pusage,pname,pyear from project where pid = '" + item + "'"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
While dbread.Read()
Chart1.Series("Series1").Points.AddXY(dbread("pname") + vbNewLine +
dbread("pyear"), dbread("pusage"))

139
End While
dbread.Close()
Next
End If
End Sub

Public Sub toDate(ByVal a As String)


year.Clear()
dater = ""
todaydate = String.Format("{0:yyyy}", DateTime.Today).ToString
If a = "0 เดือน" Then
Dim todaysdate As String = String.Format("{0:yyyy}", DateTime.Today)
year.Add(todaysdate)
findSortPid(year)

ElseIf a = "12 เดือน" Then


Dim todaysdate As String = String.Format("{0:yyyy}",
DateTime.Today.AddMonths(-12))
For i As Integer = Convert.ToInt32(todaysdate) To Convert.ToInt32(todaydate)
year.Add(i.ToString)
Next
findSortPid(year)

ElseIf a = "24 เดือน" Then


Dim todaysdate As String = String.Format("{0:yyyy}",
DateTime.Today.AddMonths(-24))
For i As Integer = Convert.ToInt32(todaysdate) To Convert.ToInt32(todaydate)
year.Add(i.ToString)
Next
findSortPid(year)
ElseIf a = "36 เดือน" Then
Dim todaysdate As String = String.Format("{0:yyyy}",
DateTime.Today.AddMonths(-36))
For i As Integer = Convert.ToInt32(todaysdate) To Convert.ToInt32(todaydate)
year.Add(i.ToString)
Next
findSortPid(year)
ElseIf a = "48 เดือน" Then
Dim todaysdate As String = String.Format("{0:yyyy}",
DateTime.Today.AddMonths(-48))
For i As Integer = Convert.ToInt32(todaysdate) To Convert.ToInt32(todaydate)
year.Add(i.ToString)
Next
findSortPid(year)
ElseIf a = "60 เดือน" Then
Dim todaysdate As String = String.Format("{0:yyyy}",
DateTime.Today.AddMonths(-60))
For i As Integer = Convert.ToInt32(todaysdate) To Convert.ToInt32(todaydate)
year.Add(i.ToString)
Next
findSortPid(year)
End If
End Sub
Private Sub findSortPid(ByVal y As ArrayList)
pid1.Clear()
yearsss.Clear()

140
Dim yrs As ArrayList = y
Dim yrsnew As New ArrayList
Dim ints As Integer = 0
If Convert.ToInt32(yrs.Item(0)) < 2100 Then 'กรณี ที่ต้ งั เวลำเคร่ื องเปนปี คศ
For Each item As Integer In yrs
ints = item + 543
yrsnew.Add(ints.ToString)
Next
For Each item In yrsnew
sql = "select pyear from project WHERE year(pyear)='" + item + "'"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
While dbread.Read()
If Not yearsss.Contains(dbread("pyear")) Then
yearsss.Add(dbread("pyear"))
End If
End While
dbread.Close()
Next
Else
For Each item In yrs 'กรณี ที่ต้ งั เวลำเคร่ื องเปนปี พศ
sql = "select pyear from project WHERE year(pyear)='" + item + "'"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
While dbread.Read()
If Not yearsss.Contains(dbread("pyear")) Then
yearsss.Add(dbread("pyear"))
End If
End While
dbread.Close()
Next
End If
yearsss.Sort()
finalPids(yearsss)
End Sub

Private Sub finalPids(ByVal ys As ArrayList)


pid1.Clear()
Dim finalYrs As ArrayList = ys
For Each item In finalYrs
sql = "select pid from project WHERE pyear ='" + item + "'"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
While dbread.Read()
If Not pid1.Contains(dbread("pid")) Then
pid1.Add(dbread("pid"))
End If
End While

dbread.Close()
Next
End Sub
Private Sub findPid(ByVal dated As ArrayList)
pid1.Clear()
Dim dates As ArrayList = dated
Dim mon As New ArrayList
dates.Sort()

141
For Each item As String In dated
Dim texMonth As String = ""
Dim texDate As String = ""

mon.Clear()

sql = "select pid,pyear from project WHERE year(pyear)='" + item + "'"


dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
While dbread.Read()
If Not pid1.Contains(dbread("pid")) Then
pid1.Add(dbread("pid"))
End If
End While
dbread.Close()
Next
End Sub
End Class

142
Show_Panel
Imports MySql.Data.MySqlClient

Public Class Show_Panel


Public dbconn = Login_Form.dbconn
Public sql = Login_Form.sql
Public dbcomm = Login_Form.dbcomm
Public dbread = Login_Form.dbread
Public sql2 As String
Public dbcomm2 As MySqlCommand
Public dbread2 As MySqlDataReader
Public dbconn2 As New MySqlConnection
Public lecture, place, service, understand, usage As String
Private Sub Show_Panel_Load(sender As Object, e As EventArgs) Handles MyBase.Load
With Chart1.ChartAreas(0)
.AxisX.MajorGrid.LineDashStyle =
DataVisualization.Charting.ChartDashStyle.NotSet
.AxisY2.MajorGrid.LineDashStyle =
DataVisualization.Charting.ChartDashStyle.NotSet
.AxisY.MajorGrid.LineDashStyle =
DataVisualization.Charting.ChartDashStyle.NotSet
End With
End Sub
Public Sub readMainLecturer(ByVal pname As String)
sql = "SELECT distinct p3.lname From project as p1, lecturer as p2, lecturerinfo
as p3 Where p1.pname = '" + pname + "'and p1.pid = p2.pid and p2.main = p3.lid"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
While dbread.Read()
mainlecturer_label.Text = "วิทยำกรหลัก : " + dbread("lname")
End While
dbread.Close()
End Sub
Public Sub readHelperLecturer(ByVal pname As String)
helper_list.Items.Clear()
sql = "SELECT p1.pid,p1.pname,p2.main,p3.lid,p3.lname From project as p1,
lecturer as p2, lecturerinfo as p3 Where p1.pname = '" + pname + "'and p1.pid = p2.pid
and p2.helper = p3.lid order by p3.lid"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
While dbread.Read()
Dim ListViewItem1 As System.Windows.Forms.ListViewItem = New
System.Windows.Forms.ListViewItem(New String() {dbread("lname")})
helper_list.Items.Add(ListViewItem1)
End While
dbread.Close()
End Sub
Public Sub changeInfo(ByVal pname As String, ByVal pleader As String)
projectName_label.Text = pname
projectLeader_label.Text = "ผูร้ ับผิดชอบโครงกำร: " + pleader
End Sub
Private Sub trainee_list_ColumnWidthChanging(sender As Object, e As
ColumnWidthChangingEventArgs) Handles trainee_list.ColumnWidthChanging
e.Cancel = True
e.NewWidth = trainee_list.Columns(e.ColumnIndex).Width
End Sub

143
Private Sub helper_list_ColumnWidthChanging(sender As Object, e As
ColumnWidthChangingEventArgs) Handles helper_list.ColumnWidthChanging
e.Cancel = True
e.NewWidth = helper_list.Columns(e.ColumnIndex).Width
End Sub
Private Sub team_list_ColumnWidthChanging(sender As Object, e As
ColumnWidthChangingEventArgs) Handles team_list.ColumnWidthChanging
e.Cancel = True
e.NewWidth = team_list.Columns(e.ColumnIndex).Width
End Sub
Public Sub readFund(ByVal pname As String)
sql = "Select pfund,puse FROM project where pname = '" + pname + "'"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
While dbread.Read()
fund_label.Text = "งบโครงกำร : " + FormatNumber(CDbl(dbread("pfund")), 2) + "
บำท"
payment_label.Text = "ใช้จ่ำยจริ ง : " + FormatNumber(CDbl(dbread("puse")), 2) + "
บำท"
End While
dbread.Close()
End Sub
Public Sub readBarChart(ByVal pname As String)
sql = "Select plecturer,pplace,pservice,punderstand,pusage FROM project where
pname = '" + pname + "'"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
lecture = ""
place = ""
service = ""
understand = ""
usage = ""
While dbread.Read()
lecture = dbread("plecturer")
place = dbread("pplace")
service = dbread("pservice")
understand = dbread("punderstand")
usage = dbread("pusage")
End While
Dim total As Integer = (Convert.ToInt32(lecture) + Convert.ToInt32(place) +
Convert.ToInt32(service) + Convert.ToInt32(understand) + Convert.ToInt32(usage)) / 5
Chart1.Series("Series1").Points.Clear()
Chart1.Series("Series1").Points.AddXY("วิทยำกร", Convert.ToInt32(lecture))
Chart1.Series("Series1").Points.AddXY("สถำนที่", Convert.ToInt32(place))
Chart1.Series("Series1").Points.AddXY("บริ กำร", Convert.ToInt32(service))
Chart1.Series("Series1").Points.AddXY("ควำมเข้ำใจ", Convert.ToInt32(understand))
Chart1.Series("Series1").Points.AddXY("กำรนำไปใช้", Convert.ToInt32(usage))
Chart1.Series("Series1").Points.AddXY("เกณฑ์เฉลี่ย", total)
Chart1.ChartAreas(0).BackColor = Color.Transparent
dbread.Close()
End Sub
Public Sub readPieChart1()
Chart2.Series("Series1").Points.Clear()
Dim count As Integer = 0
For Each item As ListViewItem In trainee_list.Items

144
Chart2.Series("Series1").Points.AddXY(trainee_list.Items(count).SubItems(0).Text,
trainee_list.Items(count).SubItems(1).Text)
count += 1
Next
count = 0
Chart2.ChartAreas(0).BackColor = Color.Transparent
End Sub
Public Sub readPieChart2()
Chart3.Series("Series1").Points.Clear()
Dim count As Integer = 0
For Each item As ListViewItem In trainee_list.Items

Chart3.Series("Series1").Points.AddXY(trainee_list.Items(count).SubItems(0).Text,
trainee_list.Items(count).SubItems(2).Text)
count += 1
Next
count = 0
Chart3.ChartAreas(0).BackColor = Color.Transparent
End Sub
Public Sub readTraineeExpect(ByVal pname As String)
trainee_list.Items.Clear()
sql = "SELECT p1.pid,p2.rank,p3.uname,p2.amount from project as p1, traineeexpect
as p2, position as p3 where p1.pname = '" + pname + "' and p1.pid = p2.pid and p2.rank =
p3.uid order by p3.uid"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
While dbread.Read()
trainee_list.Items.Add(CreateTraineetRow(dbread("uname"), dbread("amount")))
End While
dbread.Close()
End Sub
Public Sub readTraineeReality(ByVal pname As String)
sql = "SELECT p1.pid,p2.rank,p3.uname,p2.amount from project as p1,
traineereality as p2, position as p3 where p1.pname = '" + pname + "' and p1.pid = p2.pid
and p2.rank = p3.uid order by p3.uid"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
Dim count As Integer = 0
Dim count2 As Integer = 0
Dim found As Boolean = False
While dbread.Read()
For Each item As ListViewItem In trainee_list.Items
If (dbread("uname") = trainee_list.Items(count).SubItems(0).Text) Then
trainee_list.Items(count).SubItems.Add(dbread("amount"))
found = True
Exit For
End If
count += 1
Next
If Not found Then
trainee_list.Items.Add(CreateTraineetRow(dbread("uname"), "0"))
trainee_list.Items(count).SubItems.Add(dbread("amount"))
End If
count = 0
found = False
End While
dbread.Close()

145
End Sub
Public Sub checkExpect(ByVal pname As String)
Dim count As Integer = 0
For Each item As ListViewItem In trainee_list.Items
If (trainee_list.Items(count).SubItems.Count = 2) Then
trainee_list.Items(count).SubItems.Add("0")
Else
count += 1
End If
Next
End Sub
Public Sub readTeam(ByVal pname As String)
team_list.Items.Clear()
sql = "select p1.pid,p1.pname,p3.leadid,p2.leadname from project as p1,
leaderinfo as p2, team as p3 where p1.pname ='" + pname + "' and p3.pid = p1.pid and
p3.leadid = p2.leadid order by p2.leadid"
dbcomm = New MySqlCommand(sql, dbconn)
dbread = dbcomm.ExecuteReader()
While dbread.Read()
Dim ListViewItem1 As System.Windows.Forms.ListViewItem = New
System.Windows.Forms.ListViewItem(New String() {dbread("leadname")})
team_list.Items.Add(ListViewItem1)
End While
dbread.Close()
End Sub
Public Sub totalTrainee()
Dim expectamount As Integer = 0
Dim realityamount As Integer = 0
Dim count As Integer = 0
For Each item As ListViewItem In trainee_list.Items
expectamount += Convert.ToInt32(trainee_list.Items(count).SubItems(1).Text)
realityamount += Convert.ToInt32(trainee_list.Items(count).SubItems(2).Text)
count += 1
Next
expectamount_label.Text = expectamount.ToString()
realityamount_label.Text = realityamount.ToString()
End Sub
Private Function CreateTraineetRow(ByVal name As String, ByVal amount As String) As
System.Windows.Forms.ListViewItem
'create row in this function and return row and add to project_list
Dim row As System.Windows.Forms.ListViewItem = New
System.Windows.Forms.ListViewItem(New String() {name, amount})
Return row
End Function
Private Sub trainee_list_MouseClick(sender As Object, e As MouseEventArgs) Handles
trainee_list.MouseClick
' show panel list and load all information
Dim item As ListViewItem = trainee_list.GetItemAt(e.X, e.Y)
item.Selected = False
End Sub
Private Sub team_list_MouseClick(sender As Object, e As MouseEventArgs) Handles
team_list.MouseClick
' show panel list and load all information
Dim item As ListViewItem = team_list.GetItemAt(e.X, e.Y)
item.Selected = False
End Sub
End Class

146
3.รายชื่อคณะกรรวมการ การประเมินผล
1. นายไชยยศ สันต์สังวร ผู้บังคับบัญชากลุ่มงานวิทยาการคอมพิวเตอร์
2. นางณีรนุช จุลประภา นักวิชาการคอมพิวเตอร์ชานาญการพิเศษ
3. นางยุพิน พ่วงเสมา นักวิชาการคอมพิวเตอร์ชานาญการ
4. นางสุธาวี อนุญาหงษ์ นักวิชาการคอมพิวเตอร์ชานาญการ
5. นายชัยวัฒน์ ปันต่า นักวิชาการคอมพิวเตอร์ปฏิบัติการ

4.ข้อมูลผู้พัฒนาโปรแกรม
นายปุณยวีร์ โพธิ์ศรี
นักศึกษาฝึกงาน ระดับปริญญาตรี ชั้นปีที่สอง
คณะวิศวกรรมศาสตร์ สาขาวิศวกรรมซอฟต์แวร์ หลักสูตรนานาชาติ
สถาบันเทคโนโลยีพระจอมเกล้าเจ้าคุณทหารลาดกระบัง
Email: kukkui2537@gmail.com

นายจารุกิตต์ พัฒนพรกุล
นักศึกษาฝึกงาน ระดับปริญญาตรี ชั้นปีที่สอง
คณะวิศวกรรมศาสตร์ สาขาวิศวกรรมซอฟต์แวร์ หลักสูตรนานาชาติ
สถาบันเทคโนโลยีพระจอมเกล้าเจ้าคุณทหารลาดกระบัง
Email: sunshinezxc@gmail.com

147
รูปกิจกรรมการนาเสนอผลงาน

148
149

You might also like