พื้นฐานความรู้คอมพิวเตอร์ ระดับ กลาง-สูง *JAVA - OOP - Data Structure
สวัสดีครับ จากบทที่แล้ว ([Project] มาสร้าง point of sale ด้วย linux command และ java เปรียบเทียบกันเถอะ ตอนที่ 1 )ที่ได้แนะนำในเรื่อง การทำ Point Of Sale (POS) ด้วย linux command line (Bash) แบบง่ายๆกันไปในบทความนี้เราจะมาเริ่ม Advance กันเพิ่มอีกนิดนึง เพื่อหยักสมองที่ถี่ขึ้น จะให้เขียน Bash บ่อยๆก็รู้สึก ซ้ำซากจำเจ ไม่เกิดไอเดียใหม่ๆ ผู้สนใจท่านอื่นๆเป็นกันมั้ย ถ้าเราเป็นนักพัฒนา ต้องไม่หยุดเรียนรู้จริงมั้ยครับ
ในบทความนี้ก็จะหันมาออกแบบ POS ด้วยภาษา Java กันบ้างโดยเอาโปรแกรมไปรัน บน command line เช่นเดิม แต่คงไม่ได้พัฒนาให้เหมือนกับบทความที่แล้ว ผู้เขียนหมายถึง จะพัฒนาฟังก์ชันเพิ่มขึ้นไปอีกนิดนึงโดยยังคงฟังก์ชันเดิมในบทความที่แล้วอยู่ สิ่งที่ผู้เขียนจะพัฒนาเพิ่มขึ้นนั้นก็คือ
ขอบเขตงานที่เพิ่มขึ้น (Requirment)
1. ทำให้โปรแกรมสามารถป้อนสินค้า Item ได้หลายครั้ง
2. ทำให้โปรแกรมมีโครงสร้างข้อมูลเพื่อเก็บ ข้อมูลสินค้าโดยใช้ Linked List (หมายเหตุ* วิธีนี้ไม่สามารถเก็บข้อมูลได้อย่างถาวร เอามาใช้งานจริงเพื่อเก็บ ข้อมูลสินค้าไม่ได้ ในบทความนี้เป็นกรณีศึกษาเท่านั้น)
จากบทที่แล้ว ผู้เขียนได้ เขียนโค๊ดไว้แค่สามารถป้อน สินค้าได้เพียงสินค้าตัวเดียว ไม่สามารถป้อนสินค้ามาคำนวนได้ หลายๆตัว และยังจะออกแบบ สร้างในส่วนของการเก็บข้อมูลสินค้า เช่น สินค้า A ราคา 10 บาท เป็นต้น และยังจะทำให้สามารถดูรายชื่อ สินค้าไว้ก่อนได้ อีกด้วย
ก่อนอื่นมาศึกษาทฤษฏีกันสักเล็กน้อยดีกว่า... ผู้สนใจบางท่านอาจจะไม่เข้าใจว่าศัพท์บางอย่างคืออะไร ทำไมต้องมี ดังนี้ครับ
ทฤ๋ษฏีที่เกี่ยวข้อง
Data structure - link list
อย่างที่ได้กล่าวไปในตอนต้นว่ามันคือโครงสร้างข้อมูล เป็นพื้นฐานของการเขียนโปรแกรม ซึ่งมีความสำคัญก็คือ "เป็นวิธีการและขั้นตอนการแก้ปัญหาต่างๆ โดยใช้คุณสมบัติและความสามารถของโครงสร้างข้อมูล เป็นวิชาหลักในการเรียนของสาขาคอมพิวเตอร์"
โครงสร้างข้อมูล (Data Structure) คือ การจัดการข้อมูลในหน่วยความจำภายในเครื่องคอมพิวเตอร์ หรือในบางครั้งเป็นการจัดการข้อมูลในดิสก์ ให้มีความสัมพันธ์กันภายในกลุ่มข้อมูล รูปแบบการเก็บข้อมูลที่อยู่ในรูปแบบโครงสร้างข้อมูล เช่น อาร์เรย์(Array), ลิงค์ลิส (Link-list), สแตก (Stack) เป็นต้น
ในที่นี้ผู้เขียน ขอยกวิธีการสร้างโครงสร้างข้อมูลแบบ Link-list มาประยุกษ์ใช้
ผู้ที่สนใจจะศึกษาจากหนังสือเล่มไหนก็ได้ แต่ผู้เขียนศึกษาจากเล่มนี้ครับ จึงขอแนะนำ เพราะผู้เขียนหนังสือเล่มนี้อธิบายขั้นตอนและคำสั่งแต่ละบรรทัดได้เป็นอย่างดี เข้าใจง่ายดีครับ
จริงๆแล้ว ก็หา code ได้ทั่วไปจาก website ต่างประเทศครับ ลองทำความเข้าใจกับเว็บประเทศก็เป็นข้อดีในเรื่องของภาษา แต่ยังไงซะถ้า ผู้เขียนมีไอเดียเกี่ยวเรื่องนี้ จะเขียนแยกไปเป็นอีกบทความแล้วกันครับ
คราวนี้มาดูกันครับว่าจะออกแบบแตกต่างจาก เดิม มีอะไรเพิ่มขึ้นบ้างจาก โฟว์ชาร์ตด้านล่าง
ร่วมสนับสนุนนักเขียนด้วยการคลิ๊กลิ้ง ด้านล่าง ขอบคุณครับ รับรองไม่มีไวรัส
ขั้นตอนการออกแบบ
import linklist.*;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.util.Scanner;
public class javaPOSSLT1 {
Node newNode;
static Node head ;
static Node curr;
Node prev;
//เพิ่มโหนดในลิ้งลิสท์
public void add(Object newItem,Object newPrice,Object newAmount){
if(head==null){
newNode = new Node(newItem, newPrice, newAmount);
}
else {
newNode = new Node(newItem, newPrice, newAmount, head);
}
head = newNode;
}
//ค้นหาข้อมูลในลิ้งลิสซ์
public boolean searchItem(Object item, Object price, Object amount){
curr = head ;
prev = null ;
boolean status = false;
while(curr != null){
Object[] Arr = null;
if(curr.getItem() == Arr){
status = true;
break;
}else{
prev = curr;
curr = curr.getNext();
}
}
if(status){
return true;
}else{
return false;
}
}
//ลบข้อมูลในลิส
public void deleteNode(Object item, Object price, Object amount){
if(searchItem(item, price, amount)){
if(prev == null){
head = curr.getNext();
}else{
prev.setNext(curr.getNext());
}
}else{
System.out.println("Not found Item");
}
}
//แทรกโหนดในลิส
public void insert(Object iteminsert, Object newItem,Object newPrice,Object newAmount){
newNode = new Node(newItem, newPrice, newAmount );
if(searchItem(iteminsert, newPrice, newAmount)){
if(prev == null){
newNode.setNext(curr);
head = newNode;
}else {
newNode.setNext(curr);
prev.setNext(newNode);
}
}else{
if (head == null){
newNode.setNext(curr);
head = newNode;
}else if(curr == null){
prev.setNext(newNode);
}
}
}
//แสดงข้อมูลในลิส
public Object[] showdata(){
Object[] Arr = null;
curr = head;
while (curr != null){
Arr = curr.getItem();
System.out.print(Arr[0]);
System.out.print(" " + Arr[1]);
System.out.print(" " + Arr[2]);
System.out.println();
System.out.println();
curr = curr.getNext();
}
System.out.println();
return Arr ;
}
public static Object calculate_sum(){
int sum_new = 0;
int sum = 0;
curr = head;
while (curr != null){
Object[] Arr = null;
Arr = curr.getItem();
int pre = Integer.valueOf((String)Arr[1]); // แปลง object ให้เป็น integer
int suf = Integer.valueOf((String)Arr[2]);
sum_new = pre * suf;
curr = curr.getNext();
sum = sum + sum_new;
}
System.out.println();
return sum;
}
public static Object calculate_change(int money){
int sum_new = 0;
int sum = 0;
int change = 0;
curr = head;
while (curr != null){
Object[] Arr = null;
Arr = curr.getItem();
int pre = Integer.valueOf((String)Arr[1]); // แปลง object ให้เป็น integer
int suf = Integer.valueOf((String)Arr[2]);
sum_new = pre * suf;
curr = curr.getNext();
sum = sum + sum_new;
change = money - sum;
}
System.out.println();
return change;
}
public static Object calculate_net(){
double net = 0;
double sum = 0;
int sum_new = 0;
curr = head;
while (curr != null){
Object[] Arr = null;
Arr = curr.getItem();
int pre = Integer.valueOf((String)Arr[1]); // แปลง object ให้เป็น integer
int suf = Integer.valueOf((String)Arr[2]);
sum_new = pre * suf;
curr = curr.getNext();
sum = sum + sum_new;
net = (sum/1.07);
}
System.out.println();
return net;
}
public static Object calculate_vat(){
double net = 0;
double sum = 0;
double vat = 0;
int sum_new = 0;
curr = head;
while (curr != null){
Object[] Arr = null;
Arr = curr.getItem();
int pre = Integer.valueOf((String)Arr[1]); // แปลง object ให้เป็น integer
int suf = Integer.valueOf((String)Arr[2]);
sum_new = pre * suf;
curr = curr.getNext();
sum = sum + sum_new;
net = (sum/1.07);
vat = sum - net ;
}
System.out.println();
return vat;
}
static int plus = 0;
static int money = 0;
public static void main(String[] args) throws FileNotFoundException, UnsupportedEncodingException{
javaPOSSLT1 Item = new javaPOSSLT1();
System.out.println("ยินต้อนรับเข้าสู่โปรแกรม POS By SheepCode Version1.2");
System.out.print("คุณต้องการเพิ่มข้อมูลสินค้าหรือไม่ ?");
Scanner y = new Scanner(System.in);
String yes = y.nextLine();
while(plus != 1){
if (yes.equals("yes")){
// ชื่อสินค้า
System.out.println("กรุณาป้อนชื่อสินค้า");
System.out.print("ชื่อสินค้า :");
Scanner i = new Scanner(System.in);
String item = i.nextLine();
System.out.println("กรุณาป้อนราคาสินค้า");
System.out.print("ราคาสินค้า :");
Scanner p = new Scanner(System.in);
String price = p.nextLine();
System.out.println("กรุณาป้อนจำนวนสินค้า");
System.out.print("จำนวนสินค้า :");
Scanner a = new Scanner(System.in);
String amount = a.nextLine();
Item.add(item,price,amount);
}
System.out.print("คุณต้องการเพิ่มข้อมูลอีกหรือไม่ ?");
Scanner z = new Scanner(System.in);
String zes = y.nextLine();
if (zes.equals("yes")){
plus = 0;
}else{
plus = 1;
}
}
System.out.println("ป้อนเงินที่รับจากลูกค้า");
System.out.print("จำนวน :");
Scanner m = new Scanner(System.in);
int money = m.nextInt();
System.out.println("NAME : Sheep Code Service");
System.out.println("BRANCH : Sheep baby");
System.out.println("TEL : 02-123-4567");
System.out.println("NUMBER : ID9999999999");
System.out.println("RECEIP : SKLSheepCode");
System.out.println();
System.out.println("ชื่อสินค้า " +"ราคาสินค้า "+"จำนวนสินค้า");
Item.showdata();
System.out.print("ราคารวม : " + calculate_sum()+ " บาท");
System.out.print("ราคาสุทธิ : " + calculate_net()+ " บาท");
System.out.println("ภาษี: " + calculate_vat()+ " บาท");
System.out.print("เงินที่ได้รับจากลูกค้า: " + money + " บาท");
System.out.print("เงินทอน : " + calculate_change(money)+ " บาท");
PrintWriter writer = new PrintWriter("test.txt", "UTF-8");
writer.println("NAME : Sheep Code Service");
writer.println("BRANCH : Sheep baby");
writer.println("TEL : 02-123-4567");
writer.println("NUMBER : ID9999999999");
writer.println("RECEIP : SKLSheepCode");
writer.println("ชื่อสินค้า " +"ราคาสินค้า "+"จำนวนสินค้า");
Object Arr[] = Item.showdata();
curr = head;
while(curr != null){
Arr = curr.getItem();
writer.print(Arr[0]);
writer.print(" " + Arr[1]);
writer.println(" " + Arr[2]);
curr = curr.getNext();
}
writer.println("ราคารวม : " + calculate_sum()+ " บาท");
writer.println("ราคาสุทธิ : " + calculate_net()+ " บาท");
writer.println("ภาษี: " + calculate_vat()+ " บาท");
writer.println("เงินที่ได้รับจากลูกค้า: " + money + " บาท");
writer.println("เงินทอน : " + calculate_change(money)+ " บาท");
writer.close();
}
}
ผลการทดลอง
ภาพด้านล่างนี้เป็น ผลจากการรันโปรแกรม ผ่าน IDE ถ้าหากผู้ที่สนใจอยาก รันภาพ command line ก็สามารถ ใช้คำสั่ง javac เพื่อ compile โปรแกรมก่อนได้ ผลออกมาดังนี้
ร่วมสนับสนุนนักเขียนด้วยการคลิ๊กลิ้ง ด้านล่าง ขอบคุณครับ รับรองไม่มีไวรัส
จาก โค๊ดได้สร้างส่วนของการ Export file เป็น test.txt ดังภาพด้านล่าง
ผลลัพท์อกมาดังนี้
สรุปผล
จากบทที่แล้ว พัฒนาโปรแกรม ทำได้แค่ใส่ข้อมูลสินค้า เพียงชิ้นเดียว ในบทนี้ได้พัฒนาเพิ่มเติมออกมาให้สามารถใส่ข้อมูลเพิ่มขึ้นได้ หลายชิ้นเพิ่มมากขึ้นโดย ใช้โครงสร้างข้อมูลเข้ามาช่วยในการเก็บข้อมูล เพื่อนำมาเข้าคำนวนก็ได้แก่ Linklist และ array ซึ่งผู้เขียนประยุกษ์ code ที่ได้จากหนังสือที่แนะนำไป โดยความสามารถของ java สามารถเรียกไฟล์ Linklist ได้จาก package เดียวกัน
ในบทความถัดไปจะ พัฒนาเพิ่มเติม ดัง FlowChart ด้านล่าง หากผู้ที่สนใจมีไอเดียที่ดีกว่าก็ เอามาแบ่งปัน แบ่งกันดูก็ได้นะครับ
สิ่งที่เพิ่มขึ้น ได้แก่
1. สามารถเพิ่มข้อมูลสินค้าได้
2. สามารถเรียกดูสินค้าที่เราเพิ่มเอาไว้ได้
3. เรียกสินค้าตาม ID และ ใส่แค่จำนวน สินค้าเท่านั้น
Reference
บทความนี้ ไม่มีอ้างอิงฮ่ะ มีแต่หนังสือโครงสร้างข้อมูลอย่างเดียวด้านบน