วิเคราะห์งาน เขียน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
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" จบการทำงาน