ยิ่งให้ ยิ่งได้

เราเชื่อว่า ยิ่งให้ เรายิ่งได้...เราจึงแบ่งปันสิ่งที่คิดว่าจะมีประโยชน์สำหรับน้องๆหรือผู้ที่สนใจในการเขียนโปรแกรม และการทำเว็บไซต์ ซึ่งได้เก็บรวบรวมมาจาก บทความ การบ้าน project workshop ระหว่างการเรียนสาขา IT.

วันพฤหัสบดีที่ 26 กุมภาพันธ์ พ.ศ. 2558

การใช้ Array ด้วย Java

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



     
  dataType [ ] ArrayName ={data_1, data_2, data_n};  


โดยที่ dataType        เป็นชนิดข้อมูลของตัวแปรอาร์เรย์ที่ต้องการ
 ArrayName     ชื่อตัวแปรอาร์เรย์
 data_1           ข้อมูลตัวที่ 1
 data_2           ข้อมูลตัวที่ 2
         data_n              ข้อมูลตัวที่ n

ตัวอย่างโปรแกรมอาร์เรย์

           
   public class test {
       public static void main (String [] args){
       int [] days = {31,28,31,30,31,30,31,31,30,31,30,31};
       for(int index =0; index<12;index++){
           System.out.print("month "+(index+1)+" has ");
           System.out.println(days[index]
+" days ");
        }
        }//end main
     }//end class





OUTPUT


     month 1 has 31 days    
     month 2 has 28 days 
     month 3 has 31 days 
     month 4 has 30 days 
     month 5 has 31 days 
     month 6 has 30 days 
     month 7 has 31 days 
     month 8 has 31 days 
     month 9 has 30 days 
     month 10 has 31 days 
     month 11 has 30 days 
     month 12 has 31 days     







วันอังคารที่ 24 กุมภาพันธ์ พ.ศ. 2558

การใช้ for ใน Java

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

     
          for (control_variable = value; boolean_expression; increment or decrement){
statements;
   }


โดยที่
         control_variable เป็นตัวแปรที่ควบคุมจำนวนครั้งของการทำซ้ำ ซึ่งมีชนิดป็นจำนวนเต็ม
 value เป็นค่าเริ่มต้นที่กำหนดให้ตัวแปรควบคุม
 boolean_expression เป็นนิพจน์เงื่อนไขที่มีการตรวจสอบว่าเป็นจริงหรือเท็จ ก่อนการทำงานที่ชุดคำสั่งภายในเครื่องหมาย{}
 increment or decrement เป็นคำสั่งกำหนดการเพิ่มค่าหรือลดค่าของตัวแปรควบคุม
 statements เป็นชุดคำสั่งที่ต้องการให้มีการทำซ้ำ

ตัวอย่างโปรแกรม for โปรแกรมตารางสูตรคูณ


           
   public class testIf {
     public static void main (String [] args){
 for (int i=1;i<=12;i++){
    System.out.println("2 x "+i+" ="+(2*i));
 }//end for
     }//end main

   }//end class




OUTPUT


          2 x 1 =2          
          2 x 2 =4
          2 x 3 =6
          2 x 4 =8
          2 x 5 =10
          2 x 6 =12
          2 x 7 =14
          2 x 8 =16
          2 x 9 =18
          2 x 10 =20
          2 x 11 =22
          2 x 12 =24






Work Shop Java GUI Lab1

          งานชิ้นนี้เป็น Java GUI ตัวแรกที่ได้เขียนขึ้นระหว่างการเรียนวิชา OOP โดยใช้โปรแกรม netbean ในการเขียน ซึ่งเหมาะกับผู้ที่มีพื้นฐานการใช้งาน gui ด้วย netbean มาบ้างแล้ว
          วิธีการติดตั้งและใช้งานเบื้องต้นสามารถเข้าไปศึกษาเพิ่มเติมได้ที่ https://netbeans.org/

โจทย์ ให้แก้ปัญหาตามที่กำหนดดังนี้ 
1.การกำหนดให้กล่องรับข้อความรับได้เฉพาะตัวเลข
2.การตรวจเช็คการกรอกข้อความว่าได้กรอกหรือยัง
3.การตรวจเช็คการกรอกอีเมล์
4.การเปลี่ยนรูป Icon


********************************

ลักษณะการทำงานของโปรแกรม

1.ฟอร์มโปแกรมเมื่อเปลี่ยนหน้า หัว Title จะเปลี่ยนไป โดยฟอร์มเป็นแบบ Panal เมื่อเปลี่ยนหน้าถัดไป จะไม่ได้โชว์แบบไดอะล๊อค
2.เมื่อคีย์ข้อมูลไม่ถูกต้องตามที่กำหนดโปรแกรมจะทำการเตือน
- เตือนเมื่อไม่กรอกชื่อ
- เตือนเมื่อไม่กรอกเลขบัตรประชาชน 13 หลัก และไม่กรอกเป็นตัวเลข
- เตือนเมื่อไม่กรอกรหัสพนักงาน 5 หลัก และไม่กรอกเป็นตัวเลข และตัวเลขที่กรอกจะต้องขึ้นต้นด้วย 13 เมื่อกรอกไม่ถูกต้องจะขึ้น Icon เตือน แต่ถ้ากรอกถูก Icon จะเปลี่ยนรูปไป
- เตือนเมื่อกรอกอีเมล์ไม่ถูกต้องตามหลั
- เตือนเมื่อไม่เลือกแผนก
3.เซตโปรแกรมให้ทำงานตรงกลางหน้าจอ
4.การปิดโปรแกรม โดยให้กดยืนยันก่อน


การเขียนโค๊ด
1. เปิด JFrameForm แล้ว Set Layout ให้เป็นแบบ Card Layout การทำงานแบบ Card Layout  เมื่อทำงานจะไม่มีการซ่อนเฟรมแต่จะทำงานผ่าน Card Layout เลย


2. ใส่ Panal (เมื่อใช้แบบ Card Layout แล้วลาก Panal มา Panal จะเต็มหน้าจอ) แล้วเปลี่ยนชื่อเป็น p1

3. จากนั้นคลิ๊กขวาที่ JFrame ตรง Navigator แล้วเลือกตามรูป จากนั้นตั้งชื่อว่า p2 (แต่ถ้าไปลากพาเนลจากขวามือมันจะลอยอยู่บนหน้าฟอร์ม = การทำงานไม่เหมือนกัน)





4. ใส่สีที่พาเนลแต่ละตัว ถ้าลองรันดู จะเห็นสีที่ขึ้นมาคือพาเนลตัวแรก ถ้าอยากเปลี่ยนพาเนลใช้เมาท์ลากแล้วสลับการ์ด

5. ตั้งชื่อ Title ของ JFrame ว่า Form


6. สร้างปุ่ม ok ที่ p1 สำหรับสลับหน้า  แล้วไปที่ p2 สร้างปุ่ม “แก้ไขข้อมูล”

    - หลักการใช้งานเมื่อกดปุ่ม ok ที่ p1 จะกลับไปที่ p2 และหัวไตเติ้ลจะเปลี่ยนเป็น ตรวจสอบข้อมูล
    - เมื่อกดปุ่มแก้ไขข้อมูล ก็จะกลับไปที่ p1 และหัวไตเติ้ลจะเปลี่ยนเป็น แก้ไขข้อมูล

7. จากนั้นพิมพ์โค๊ดที่ปุ่ม cmdOK  เมื่อต้องการเปลี่ยนหัว Title เมื่อกดจาก p1 ไป p2 ใช้คำสั่ง setTitle
          p1.setVisible(false);
          p2.setVisible(true);
          this.setTitle("ตรวจสอบข้อมูล");

8. จากนั้นพิมพ์โค๊ดที่ปุ่ม cmdEdit 
          p1.setVisible(true);
     p2.setVisible(false);
     this.setTitle("แก้ไขข้อมูล");


          เมื่อรันแล้วจะได้ดังนี้


9. ออกแบบหน้าจอดังรูป (รหัส พนักงาน ใช้ jFormattedTextField)


10.การตรวจสอบ ตรวจสอบว่ายังไม่ได้กรอกอะไรบ้าง

    10.1 เริ่มจากเปลี่ยนชื่อ TextField ของชื่อ เปลี่ยนเป็น txName / บัตรประชานเปลี่ยนเป็น txId/ รหัส พนักงาน เปลี่ยนเป็น txIde/email เปลี่ยนเป็น TxEmail/ เปลี่ยนชื่อ คอมโบบ๊อก เป็น cb 
    - จากนั้นแก้ ปุ่ม คอมโบบ๊อก ให้เป็นแผนกต่างๆ โดยเข้าไปที่ ฟรอฟเพอร์ตี้ แก้ที่ model
    10.2 จากนั้นเขียนโค๊ดลงทีปุ่ม ok ดังนี้
    - ประกาศตัวแปร
          String e_name, e_id, e_ids,email;
     int e_department=cb.getSelectedIndex();
     String emailSntx = "^[A-Z0-9._%-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}$";
        
     e_name = txName.getText();
     e_id = txId.getText();
     e_ids = txIde.getText();

     email = txEmail.getText();

    - เขียนโค๊ดดังนี้
   //ส่วนตรวจสอบ
          if (e_name.equals("")){//ตรวจสอบชื่อ ถ้าชื่อเท่ากับช่องว่าง
               JOptionPane.showMessageDialog(this,"ยังไม่ได้กรอกชื่อ");//ให้โชว์ไดอะล๊อค
               TxName.requestFocus();//ให้เคอร์เซอร์กลับไปที่ช่องนั้น
               return;
          }
        
          if (e_id.equals("")){//ตรวจสอบบัตรประชาชน
               JOptionPane.showMessageDialog(this,"ยังไม่ได้กรอกบัตรประชาชน");
               TxId.requestFocus();
               return;
          }
        
          if (e_id.length()!=13){//ถ้าความยาวไม่เท่ากับ 13 หลัก
               JOptionPane.showMessageDialog(this,"กรุณากรอกเลขบัตรประชาชน 13 หลัก");
               TxId.requestFocus();
               return;
          }
        
          if (e_ide.equals("")){//ตรวจสอบรหัสพนักงาน
               JOptionPane.showMessageDialog(this,"ยังไม่ได้กรอกรหัส พนง.");
               TxIde.requestFocus();
               return;
          }
        
          if (e_ide.length()!=5){//ความยาวไม่เท่ากับ 5 หลัก
               JOptionPane.showMessageDialog(this,"กรุณากรอกรหัส พนง. 5 หลัก");
               TxIde.requestFocus();
               return;
          }
        
          if (!email.toLowerCase().matches
(emailSntx.toLowerCase())) {//ตรวจสอบอีเมล์
               JOptionPane.showMessageDialog(this,"กรุณากรอก email ให้ถูกต้อง");
               TxEmail.requestFocus();
               return;
          }
        
          if (e_department==0){//ตรวจสอบสาขา
               JOptionPane.showMessageDialog(this,"กรุณาเลือกสาขาวิชา");
               cb.requestFocus();
               return;
          }

11.ตรวจสอบความผิดพลาดนะเหตุการณ์นั้น  
     -เพิ่มลาเบลที่ท้าย กล่องข้อความของรหัส พนง. เพื่อใช้สำหรับเปลี่ยนรูปถูกผิด
     -เปลี่ยนเท็กที่ลาเบลเป็นรูปผิด
     -เปลี่ยนชื่อเป็น IdeCheck
     -จากนั้นใส่โค๊ดที่ คอนสตรัคเตอร์  โดยการเซตให้ลาเบล setVisible ให้เป็น false เมื่อรันก็จะทำให้มองไม่เห็น

          IdeCheck.setVisible(false);



     เมื่อรันแล้วจะได้ดังนี้


จากนั้นไปเซ็ตอิมเมจ icon
          ImageIcon t;
              public Form() {
                  initComponents();
                  IdeCheck.setVisible(false);

                  t = new ImageIcon(this.getClass().getResource("/Midterm/Pic/ok_32.png"));}



     - คลิ๊กขวาที่กล่องข้อความของรหัส พนง.  Events  Caret  caretUpdate เป็นการตรวจจับขณะที่ทำ





     - เขียนโค๊ดดังนี้
     String text = TxIde.getText();
             if (text.length() >= 2) {
                 System.out.println("" + text.substring(0, 2));
                 String sub = text.substring(0, 2);
                 if (!sub.equals("13")) {
                     IdeCheck.setVisible(true);
                 } else if (text.length() == 5) {
                     IdeCheck.setVisible(true);
                     IdeCheck.setIcon(t);
                 }
               } else {
                 IdeCheck.setVisible(false);
             }



***************

คำสั่งให้กล่อง มาวางหน้าจอ ให้เขียนที่คอนสตรัคเตอร์

//คำสั่งให้กล่องมาวางที่หน้าจอ
        Toolkit tk = this.getToolkit();
        Dimension scr = tk.getScreenSize();
        Dimension fr = this.getSize();
        this.setLocation((scr.width - fr.width) / 2, (scr.height - fr.height) / 2);


เมื่อรันไฟล์ กล่องหรือฟอร์มจะมาอยู่ที่หน้าจอโดยอัตโนมัติ 




***************

การปิดหน้าจอ โดยมีถามก่อนว่าจะปิดหรือไม่ โดยทำการดักอีเว้นที่เฟรม



- จากนั้นใส่โค๊ด
          int result = JOptionPane.showConfirmDialog
(this,"ยืนยันการออกโปรแกรม","ออก?",JOptionPane.
OK_CANCEL_OPTION);
          if (result == JOptionPane.YES_OPTION){
          //ยืนยันการออก
          System.exit(0);
          }else{
          //ไม่ออก
          return;
          }      


- จากนั้นทำการเซตฟรอฟเพอตี้ของเฟรม เพื่อให้ทำงานตามโค๊ด


- ที่ default ให้เลือก DO_NOTHING
หมายความว่าไม่ต้องทำอะไรกับมัน โดยมีทิกว่าจะต้องเขียนโค๊ดก่อนเซต เพราะถ้าเซตก่อนมันจะไม่สามารถปิดเฟรมได้








ทำโชว์หน้าตรวจสอบ

- ไปที่พาเนลที่ 2 เพื่อทำฟอร์มรับข้อมูลตามรูป





- เปลี่ยนชื่อลาเบล เป็น NameTxt/ IdTxt/ IdeTxt/ EmailTxt/ DeparTxt ตามลำดับ
- จากนั้นเปิดคลาสใหม่ เป็น java class ตั้งชื่อว่า Employee
- สร้างตัวแปร 
     String name,id,ide,email,department;

- สร้างคอนสตรัคเตอร์ แบบไม่รับพารามิเตอร์ กับรับพารามิเตอร์ จากนั้นเกต์เตอร์และเซตเตอร์ ตัวแปรทั้งหมด
- จากนั้นไปเขียนโค๊ดที่ปุ่มตกลง  1 ทำการสร้างวัตถุจากคลาส
   Employee Employee employee = new Employee ();


- เขียนโค๊ด
//เก็บข้อมูลลงใน employee ค่าในวงเล็บคือตัวแปรที่ประกาศไว้
     employee.setName(e_name);
     employee.setId(e_id);
     employee.setIde(e_ide);
     employee.setEmail(email);
     employee.setDepartment((String)
cb.getSelectedItem());

//แก้ไขข้อความใน p2

     NameTxt.setText(employee.getName());
     IdTxt.setText(employee.getId());
     IdeTxt.setText(employee.getIde());        EmailTxt.setText(employee.getEmail());
     DeparTxt.setText(employee
.getDepartment());



Dowload Code







วันจันทร์ที่ 23 กุมภาพันธ์ พ.ศ. 2558

การใช้ switch-case ด้วย Java

          switch-case เป็นคำสั่งให้โปรแกรมเลือกทำงานจากหลายทางเลือก ในแต่ละทางเลือกจะมีการกำหนดเงื่อนไขของแต่ละทาง โดยจะตรวจสอบเงื่อนไขแต่ละทางเลือก หากพบว่าทางเลือกใดมีเงื่อนไขเป็นจริง จะทำงานที่ชุดคำสั่งภายในทางเลือกนั้น โดยไม่พิจารณาทางเลือกอื่นที่ยังไม่ตรวจสอบ ซึ่งมีรูปแบบดังนี้



          switch (expression){          
               case list_value_1;
                    statements_1;
                     break;
               case list_value_2;
                    statements_2;
                    break;
                    :
                    :
               case list_value_n;
                    statements_n;
                    break;
               default :
                    statements
          }



โดยที่ expression  เป็นนิพจน์ที่ต้องตรวจสอบว่าตรงกับ list_value ใด เพื่อจะได้ทำงานภายใต้คำสั่ง list_valueนั้น
         list_value  เป็นค่าข้อมูลที่ใช้ตรวจสอบกับ expression
         statements_n  เป็นชุดคำสั่งที่จะทำงานเมื่อ list_value นั้นมีค่าเท่ากับ expression

         statements  เป็นชุดคำสั่งที่จะทำงานเมื่อไม่มี list_value ใดมีค่าเท่ากับ expression

          ตัวอย่าง โปรแกรม switch-case โจทย์ เขียนโปรแกรมคำนวณค่างวดรถยนต์ โดยให้ป้อนข้อมูลรถยนต์ดังนี้
          1.ราคารถยนต์                 2.เงินดาว์ (%)            
          3.เงินดาว์ (บาท)             4.เหลือยอดที่ต้องผ่อนชำระ
          5.เลือกระยะเวลาในการผ่อน
              (1) ผ่อน 36 งวด      ดอกเบี้ย 1.25%
              (2) ผ่อน 48 งวด      ดอกเบี้ย 1.75%
              (3) ผ่อน 60 งวด      ดอกเบี้ย 2.25%
              (4) ผ่อน 72 งวด      ดอกเบี้ย 2.75%
              (5) ผ่อน 84 งวด      ดอกเบี้ย 3.00%
          6.แสดงยอดเงินที่ต้องผ่อนชำระ/เดือน



import javax.swing.JOptionPane;
class TestSwitch {
   public static void main (String[] args) {
      double price,down,down_b,balance_b;
      double interest,paid_m,month;
      int choice;
      price=0;balance_b=0;interest=0;month=0;
      String input;
      System.out.println ("The Program applies to Toyoya car");
      System.out.println ("----------------------------------");
      input=JOptionPane.showInputDialog("The car price :");
      price=Double.parseDouble(input);
      input=JOptionPane.showInputDialog("Down Payment(%) :");
      down=Double.parseDouble(input);
      down_b=(price*(down/100));
      JOptionPane.showMessageDialog(null,"Down Payment ="+down_b+" baht");
      balance_b=price-down_b;
      JOptionPane.showMessageDialog(null,"Baance to be pay ="+balance_b+" baht");
      System.out.println ("1. 36 months/interest 1.25");
      System.out.println ("2. 48 months/interest 1.75");
      System.out.println ("3. 60 months/interest 2.25");
      System.out.println ("4. 72 months/interest 2.75");
      System.out.println ("5. 84 months/interest 3.00");
      input=JOptionPane.showInputDialog("Select  Number  1,2,3,4,5 :");
      choice = Integer.parseInt(input);
      switch(choice){
         case 1 : month=36;interest=1.25;
       break;
         case 2 : month=48;interest=1.75;
         break;
         case 3 : month=60;interest=2.25;
         break;
         case 4 : month=72;interest=2.75;
         break;
         case 5 : month=84;interest=3.00;
         break;
         default:
      JOptionPane.showMessageDialog(null,"Yout  select  is  not 1,2,3,4,5");
      }
      paid_m=((((balance_b*interest)/100)*(month/12))+balance_b)/month;
      JOptionPane.showMessageDialog(null,"Payment "+paid_m+" baht/mounth");
   }//end main
}//end class



OUTPUT

1.เมื่อรันโปรแกรม จะขึ้นได้อะล๊อคบ๊อคขึ้นมา ให้ใส่ราคารถยนต์ แล้วกดตกลง



2.ใส่จำนวนเปอร์เซ็นต์เงินดาว์ลงในไดอะล๊อคบ๊อก




3.จากนั้นไดอะล๊อคบ๊อกจะโชว์ยอดเงินดาว์เป็นจำนวนเงินบาท




4.จากนั้นไดอะล๊อคบ๊อกจะโชว์ยอดเงินคงเหลือที่ต้องชำระ  




5.หน้าจอจะโชว์ระยะเวลาในการผ่อน ให้ใส่เลข 1,2,3,4, หรือ 5 ลงในไดอะล๊อคบ๊อก




6.จากนั้นไดอะล๊อคบ๊อกจะโชว์ยอดเงินที่ต้องชำระ/เดือน



          ข้อสังเกตุ จากโปรแกรม คำนวณคำนวณค่างวดรถยนต์ ได้เพิ่ม กล่องข้อความหรือไดอะล๊อคบ๊อกเข้ามา โดยใช้คลาส JOptionPane ประเภทของไดอะล๊อคบ๊อกในคลาส JOptionPane นั้นมีสองชนิดคือ
          - Message Dialog เป็นไดอะล๊อคบ๊อกใช้แสดงข้อความมีปุ่ม OK ให้กด
          - Input Dialog เป็นไดอะล๊อคบ๊อกใช้แสดงข้อความ และมีช่องสำหรับใส่ข้อมูลเข้าไปเรียกว่าอินพุต มีปุ่ม OK และ Cancelled ให้กดเพื่อรับข้อมูล เข้าไป
ในการใช้งาน คลาส JOptionPane จะต้องเรียกแพ็คเก็จที่เก็บคลาสนี้ขึ้นมาด้วย ซึ่งทำได้โดย import javax.swing.JOptionPane;

          ถ้าต้องการแสดงไดอะล๊อคบ๊อก ที่ใช้แสดงข้อความจะต้องเรียกใช้เมธอดดังตัวอย่างต่อไปนี้



     JOptionPane.showMessageDialog(null,"ข้อความที่ต้องการโชว์");     


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



     String input;
     input=JOptionPane.showInputDialog("The car price :");