เขียนProgram ภาษา JAVA

วิเคราะห์งาน เขียนFlowchart และเขียนโปรแกรมด้วยภาษา Java
โปรแกรมถอนเงินจากตู้ ATM
จงเขียนโปรแกรมตู้เอทีเอ็มเพื่อทำรายการถอนเงิน โดยให้ผู้ใช้ป้อนจำนวนเงินที่ต้องการถอน จากนั้นโปรแแกรมจะคำนวนว่าต้องจายธนบัตรชนิดใดบ้าง เป็นจำนวนกี่ใบ โดยกำหนดให้มีธนบัคร 3 ชนิดคือ ใบละ 1,000 บาท 500 บาท และ 100 บาท กำหนดให้ตู้เอทีเอ็มจ่ายธนบัตรสูงสุดได้ครั้งละไม่เกิน 20,000 บาท และต่ำสุดคือ 100 บาท
  การวิเคราะห์งาน
1. สิ่งที่โจทย์ต้องการ
 คือ จำนวนธนบัตรแต่ละชนิด ที่ต้องจ่ายตามจำนวนเงินที่ผู้ใช้ต้องการถอนจากตู้เอทีเอ็ม
2. รูปแบบของผลลัพธ์
 คือ                                                 โปรแกรมถอนเงินจากตู้เอทีเอ็ม                                                         กรุณาป้อนจำนวนเงินที่ต้องการ : _                                                                                       ธนบัตรที่ได้รับ :                                                                                                                 ชนิด 1,000 = _ใบ                                                                                                                             ชนิด 500 = _ใบ                                                                                                                             ชนิด 100 = _ใบ                                                                                                                                     ต้องการใช้บริการอีกหรือไม่ [Y/N] = _ 
3. ข้อมูลนำเข้า
 คือ จำนวนเงินที่ต้องการถอนจากตู้เอทีเอ็ม
 4. ตัวแปร 
คือ 
 money แทน จำนวนเงินที่ผู้ใช้ต้องการถอนจากตู้เอทีเอ็ม      
num100 แทน ธนบัตรชนิด 100 บาท      
num500 แทน ธนบัตรชนิด 500 บาท      
num1000 แทน ธนบัตรชนิด 1000 บาท     
 - ในที่นี้กำหนดตัวแปร "inputMoney" เพื่อใช้รับค่าข้อมูลจำนวนเงินเข้ามาเก็บไว้ในตัวแปร String ก่อนแล้วจึงแปลงไปเป็นชนิด Integer ในตัวแปร "money"    
 - และใช้ตัวแปร "Check" ทดสอบเงื่อนไข check = true เพื่อการทำงานในลูป do...while โดยกำหนดค่าเริ่มต้นเป็น true แล้วให้ดำเนินการตามคำสั่งอื่นๆ จนกว่าจะพบคำสั่งที่กำหนดให้ check = false ก็จะทำให้สามารถออกจากลูป do...while ได้  (ทั้งนี้ เพื่อป้องกันปัญหาลูปไม่รู้จบ)
 5. ขั้นตอนการทำงาน
 คือ
 Method "main ()"
1. กำหนดตัวแปร money , num1000 , num500 , num100 , check , cont และ inputMoney เพื่อรับค่าจำนวนเงินมาไว้ในตัวแปร String ก่อน 
2. กำหนดค่าเริ่มต้นให้กับตัวแปร inputMoney = " ";
3. กำหนดค่าเริ่มต้น check = true
4. รับค่าจำนวนเงินที่ต้องการถอนจากตู้เอทีเอ็ม (รับค่า money) 
5. ทดสอบจำนวนเงินที่ต้องการถอนอยู่นอกเหนือขอบเขตหรือไม่ money < 100 หรือ > 20,000 หรือ    mod 100! = 0 จริงหรือเท็จ     
5.1 ถ้าจริงพิมพ์ข้อความเตือน แล้วไปทำข้อ 4     
5.2 ถ้าเท็จ ให้ไปทำข้อ 5.3 - 5.5 แล้วไปทำข้อ 6     
5.3 หาค่า num100 โดยเรียกใช้ Method "calNumAtm" พร้อมส่งค่า money และชนิดของธนบัตรไปด้วย ดังนี้ num100 = caiNumAtm(money , 100)     
5.4 num500 = caiNumAtm(money , 500)     
5.5 num1000 = caiNumAtm(money , 1000) 
6. สั่งพิมพ์ผลลัพธ์ num100 , num500 และ num1000 
7. ต้องการทำงานต่อหรือไม่ รับค่า cont ทดสอบ cont = "Y" หรือ "y" จริงหรือเท็จ     
7.1 ถ้าจริงให้ไปทำข้อ 8     
7.2 ถ้าเท็จ กำหนด check = false แล้วไปทำข้อ 8 
8. ทดสอบ check = true จริงหรือเท็จ     
8.1 ถ้าจริงให้วนกลับไปทำข้อ 4     
8.2 ถ้าเท็จให้ทำข้อ 9 
9. จบการทำงาน                                                   
Method "caiNumAtm" 
1. กำหนดตัวแปร value , type เพื่อรับค่า money และชนิดธนบัตร ที่ส่งมาจากข้อ 5.3 - 5.5 ของ Method "main()" 
2. กำหนดตัวแปร numMoney เพื่อส่งค่าผลลัพธ์กลับคืนไปยังข้อ 5.3 - 5.5 ของ Method "main()"
3. กำหนดค่าเริ่มต้นให้กับตัวแปร num100 , num500 และ num1000 ให้เท่ากับ 0 
4. คำนวณหา num1000 = value / 1000 
5. num500 = (value-(num1000*1000)) / 500 
6. num100 = (value-((num1000*1000)+(num500*500))) / 100 
7. ทดสอบค่าชนิดธนบัตร type = 100 จริงหรือเท็จ     
7.1 ถ้าจริง กำหนดให้ numMoney = num100 แล้วไปทำข้อ 8     
7.2 ถ้าเท็จ ทดสอบ type = 500 จริงหรือเท็จ          
7.2.1 ถ้าจริง กำหนดให้ numMoney = num500 แล้วไปทำข้อ 8          
7.2.2 ถ้าเท็จ กำหนดให้ numMoney = num1000 แล้วไปทำข้อ 8 
8. ส่งค่า numMoney ไปยังข้อ 5.3 - 5.5 ของ Method "main()" 
9. จบการทำงาน Method "calNumAtm" 
*หมายเหตุ*ที่ต้องตรวจสอบ type ของธนบัตรอีกครั้ง เนื่องจาก คำสั่ง return ของภาษา Java ส่งค่ากลับได้เพียงค่าเดียวเท่านั้น ไม่สามารถส่งผลของธนบัตรทั้ง 3 ชนิดไปพร้อมกันได้(นอกจากจะส่งเป็น Object)  
Flow Chart







                                                          
 //โปรแกรมคำนวณธนบัตรแต่ละชนิด
import jva.io.*;
class java_program1
{
                public static void main(String[] args) throws IOException //คำสั่งให้รับค่าเข้ามา
                {
                      String inputMoney = " ",cont;  //กำหนดตัวแปรเพื่อรับค่าข้อมูล
                      int money , num100 , num1000 , num500;  //กำหนดตัวแปร
                      boolean check = true;  //กำหนดค่าเริ่มต้น
      BufferedReader stdin = new BufferedReader(new InputStreamReade(System.in)); /คำสั่งให้รับค่าเข้ามา
                   System.out.println("โปรแกรมถอนเงินจากตู้เอทีเอ็ม"); //แสดงผล
                     do  //เริ่มต้น
                        {
                                try  //คำสั่งทั่วไปที่ใช้งาน
                                {
                                       System.out.println(" ");
                                       System.out.print(" กรุณาป้อนจำนวนเงินที่ต้องการ ");  //ป้อนข้อมูลเข้า
                                       inputMoney = stdin.readLine();  //รับค่า money เก็บไว้ในตัวแปร String ก่อน
                                       money = Integer.parseInt(inputMoney);  //แปลงค่า money จาก String ไปเป็น Integer
                                       if ((money < 100) || (money > 20000) || ((money % 100)! = 0))  {
                                       System.out.print(" จำนวนเงินจะต้องอยู่ระหว่าง 100 - 200000 และเครื่องจ่ายเงินต่ำกว่า  100 ไม่ได้ ")         
                                         } //if
                                       else {
                                                num100 = calNumAtm(money,100);  //หาค่า  num100 โดยเรียกใช้    Method "calNumAtm"
                                                       num500 = calNumAtm(money,500);  //หาค่า  num500 โดยเรียกใช้ Method "calNumAtm"
                                                       num1000 = calNumAtm(money,1000);  //หาค่า  num1000 โดยเรียกใช้ Method "calNumAtm"
                                                   System.out.println(" ");
                                                   System.out.println(" จำนวนเงินที่ต้องการถอน : " + money);
                                                   System.out.println(" ธนบัตรที่ได้รับ : ");
                                                   System.out.println(" \tชนิด 1000 = " + num1000 + " ใบ ");
                                                   System.out.println(" \tชนิด 500 = " + num500 + " ใบ ");
                                                   System.out.println(" \tชนิด 100 = " + num100 + " ใบ "); } //else
                                } //try
                                catch (NumberFormatException e){
                                         check = false; //ทดสอบ
                                } //catch
                                System.out.println(" ");
                                System.out.print(" ต้องการใช้บริการอีกหรือไม่ [y / n] : ");   //ป้อนข้อมูลเข้า
                                cont = stdin.readLine(); //รับค่า cont ทดสอบ y หรือ n
                                if ((cont.equals ("Y")) || (cont.equals ("y"))) continue;
                             else check = false;
                } while (check);
} // Method "main()"
 public static int calNumAtm(int value , int type)  { //กำหนดตัวแปรเพื่อรับค่า money และชนิดของธนบัตร
                int numMoney = 0; //กำหนดตัวแปร
                int num100 = 0 , num1000 = 0 , num500 = 0;  //กำหนดค่าเริ่มต้นให้กับตัวแปรให้เท่ากับ 0
                num1000 = value / 1000; //คำนวณหาจำนวนธนบัตรจากสูตรคำนวณ
                num500 = (value - (num1000 * num1000)) / 500;  //คำนวณหาจำนวนธนบัตรจากสูตรคำนวณ
                num100 = (value - ((num1000 * num1000) + (num500 * num500))) /100; //คำนวณหาจำนวนธนบัตรจากสูตรคำนวณ
                if (type == 100){
                                 numMoney = num100;  }
                 else if (type == 500){
                             numMoney = num500;  }
                 else       
                              numMoney = num1000;
                 return numMoney;  //ที่ต้องตรวจสอบ type ของธนบัตรอีกครั้ง เนื่องจากคำสั่ง return ของภาษา java ส่งค่ากลับได้เพียงค่าเดียวเท่านั้น ไม่สามารถส่งผลของธนบัตรทั้ง 3 ชนิดไปพร้อมกันได้
      } //Method "clNumAtm"
}  //Class "WithdrawAtm"   จบการทำงาน