ข้ามไปที่เนื้อหาหลัก

ฝึกเขียน PHP OOP ด้วยโจทย์ปัญหาคณิตศาสตร์ กับการคำนวณยอดจำหน่ายคูปอง


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




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


ฝึกเขียน PHP OOP การคำนวณยอดจำหน่ายคูปอง



หลังจากได้โจทย์แล้ว ก็มาดูกันที่วิธีคิดครับ ผมจะใช้หลักการดังที่แสดงไว้ในตารางด้านล่างนี้


คำนวณจำนวนคูปองที่จำหน่ายไป
มีคูปองใบละ 5 บาท จำนวน 100 ใบ
จำนวนคงเหลือ 25 ใบ
ดังนั้น ยอดจำหน่ายจะได้เท่ากับ 100 - 25 75 ใบ

มีคูปองใบละ 10 บาท จำนวน 100 ใบ
จำนวนคงเหลือ 50 ใบ
ดังนั้น ยอดจำหน่ายจะได้เท่ากับ 100 - 50 50 ใบ

มีคูปองใบละ 20 บาท จำนวน 100 ใบ
จำนวนคงเหลือ 30 ใบ
ดังนั้น ยอดจำหน่ายจะได้เท่ากับ 100 - 30 70 ใบ

คิดราคาคูปองที่จำหน่ายได้ทั้งหมด

จำหน่ายคูปองใบละ 5 บาท จำนวน 75 คิดเป็นเงิน 375.00 บาท
จำหน่ายคูปองใบละ 10 บาท จำนวน 50 คิดเป็นเงิน 500.00 บาท
จำหน่ายคูปองใบละ 20 บาท จำนวน 70 คิดเป็นเงิน 1,400.00 บาท
รวมเป็นเงินทั้งสิ้น (375 + 500 + 1,400) 2,275.00 บาท




มาลองเขียนโปรแกรม PHP เพื่อคำนวณค่ากันเลย


 
<?php

Class CouponProcess{

    private $store;
    private $remain;
   
    private $used5;
    private $used10;
    private $used20;
   
    /**
     * @param $date Array ส่งข้อมูลชุดที่ต้องการคำนวณมาในคลาส
     */
    public function __construct($data)
    {
        $this->store = $data['store'];
        $this->remain = $data['remain'];
       
        $this->used5 = $this->store[5] - $this->remain[5];
        $this->used10 = $this->store[10] - $this->remain[10];
        $this->used20 = $this->store[20] - $this->remain[20];
    }
   
    /**
     * @param $c5 Number จะรับค่าข้อมูลคูปอง 5 บาท
     * @param $c10 Number จะรับค่าข้อมูลคูปอง 10 บาท
     * @param $c20 Number จะรับค่าข้อมูลคูปอง 20 บาท
     * @return Array จะส่งค่าออกไปในรูปแบบข้อมูลเป็นชุด ประกอบด้วยคีย์  coupon5, coupon10, coupon20
     */
    public function send_output($c5, $c10, $c20)
    {
        return array('coupon5' => $c5, 'coupon10' => $c10, 'coupon20' => $c20);
    }
   
    /**
     * หาจำนวนคูปองที่พิมพ์ออกมาทั้งหมด
     * @return Array จะส่งค่าออกไปในรูปแบบข้อมูลเป็นชุด ประกอบด้วยคีย์  coupon5, coupon10, coupon20
     */
    public function get_coupon()
    {
        return $this->send_output($this->store[5], $this->store[10], $this->store[20]);
    }
   
    /**
     * หาจำนวนคูปองที่ถูกใช้ไป
     * @return Array จะส่งค่าออกไปในรูปแบบข้อมูลเป็นชุด ประกอบด้วยคีย์  coupon5, coupon10, coupon20
     */
    public function get_used()
    {
        return $this->send_output($this->used5, $this->used10, $this->used20);
    }
   
    /**
     * หาจำนวนคูปองคงเหลือ
     * @return Array จะส่งค่าออกไปในรูปแบบข้อมูลเป็นชุด ประกอบด้วยคีย์  coupon5, coupon10, coupon20
     */
    public function get_remain()
    {
        return $this->send_output($this->remain[5], $this->remain[10], $this->remain[20]);
    }
   
    /**
     * หาราคาของจำนวนคูปองที่ถูกใช้ไป
     * @return Array จะส่งค่าออกไปในรูปแบบข้อมูลเป็นชุด ประกอบด้วยคีย์  coupon5, coupon10, coupon20
     */
    public function get_used_price()
    {
        $c5 = $this->used5 * 5;
        $c10 = $this->used10 * 10;
        $c20 = $this->used20 * 20;
        return $this->send_output($c5, $c10, $c20);
    }

}
/* END OF Class CouponProcess */


/* ---- เตรียมข้อมูลสำหรับเรียกใช้ ---- */

//store เก็บจำนวนคูปองที่พิมพ์ต่อวัน
//remain เก็บจำนวนคปองคงเหลือในแต่ละวัน
$dataArray = array(
            '2014-07-01' => array(
                                'store' => array(5=>100, 10=>100, 20=>100),
                                'remain' => array(5=>20, 10=>35, 20=>15)
                            ),
            '2014-07-02' => array(
                                'store' => array(5=>100, 10=>100, 20=>100),
                                'remain' => array(5=>25, 10=>50, 20=>30)
                            )
        );

       
/* ---- ประมวลผลข้อมูล ตามวันที่ที่ส่งเข้ามา ---- */
$couponArray = array();
$remainArray = array();
$usedArray = array();
$priceArray = array();
$totalPrice = 0;
   
$date = isset($_GET['date']) ? $_GET['date'] : date('Y-m-d');//วันที่ ที่ต้องการดูข้อมูล

$data = isset($dataArray[$date]) ? $dataArray[$date] : array();    //หาข้อมูลตามวันที่ ที่ส่งเข้ามาผ่าน $_GET

if(!empty($data)){
    $obj = new CouponProcess($data);
    $couponArray = $obj->get_coupon();
    $remainArray = $obj->get_remain();
    $usedArray = $obj->get_used();
    $priceArray = $obj->get_used_price();
    $totalPrice = $priceArray['coupon5'] + $priceArray['coupon10'] + $priceArray['coupon20'];
}else{
    $couponArray['coupon5'] = 0;
    $couponArray['coupon10'] = 0;
    $couponArray['coupon20'] = 0;
    $remainArray['coupon5'] = 0;
    $remainArray['coupon10'] = 0;
    $remainArray['coupon20'] = 0;
    $usedArray['coupon5'] = 0;
    $usedArray['coupon10'] = 0;
    $usedArray['coupon20'] = 0;
    $priceArray['coupon5'] = 0;
    $priceArray['coupon10'] = 0;
    $priceArray['coupon20'] = 0;   
}
?>

<!DOCTYPE html>
<html>
  <head>
    <title>การเขียนโปรแกรม PHP คำนวณยอดจำหน่ายคูปองในแต่ละวัน</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <style>
        .store{ color : blue;}
        .remain{ color : orange;}
        .used{ color : red;}
        .c5{ color : #20B124;}
        .c10{ color : #F810FF;}
        .c20{ color : #0BC5EE;}
        table{
            border-collapse: collapse;
        }
        td{ border: 1px solid #cccccc; }
    </style>
  </head>
  <body>
    <div style="padding : 10px">
    เลือกวันที่ => | <a href="<?php echo $_SERVER['PHP_SELF'];?>?date=2014-07-01">2014-07-01</a>
    | <a href="<?php echo $_SERVER['PHP_SELF'];?>?date=2014-07-02">2014-07-02</a> |
    </div>
    <div style="clear:both"/>
    <div id="content" style="border: 2px solid #cccccc; float: left; padding : 20px">
        <h1>การเขียนโปรแกรม PHP <br/>คำนวณยอดจำหน่ายคูปองวันที่
        <font color="blue"><?php echo $date;?></font></h1>
    <?php
        if(empty($data)):
            echo '<p><font color="red">ไม่พบข้อมูลของวันที่ '. $date .'</font></p>';
        endif;
    ?>
        <p>
            จำนวนคูปอง <span class="c5">5</span> บาท <span class="store">
            <?php echo number_format($couponArray['coupon5']);?></span> ใบ<br/>
            จำนวนคูปอง <span class="c10">10</span> บาท <span class="store">
            <?php echo number_format($couponArray['coupon10']);?></span> ใบ<br/>
            จำนวนคูปอง <span class="c20">20</span> บาท <span class="store">
            <?php echo number_format($couponArray['coupon20']);?></span> ใบ<br/>
        </p>
        <p>
            จำนวนคูปอง <span class="c5">5</span> บาท คงเหลือ  <span class="remain">
            <?php echo number_format($remainArray['coupon5']);?></span> ใบ<br/>
            จำนวนคูปอง <span class="c10">10</span> บาท  คงเหลือ  <span class="remain">
            <?php echo number_format($remainArray['coupon10']);?></span> ใบ<br/>
            จำนวนคูปอง <span class="c20">20</span> บาท  คงเหลือ  <span class="remain">
            <?php echo number_format($remainArray['coupon20']);?></span> ใบ<br/>
        </p>
        <p>
            <i><u>จากข้อมูลด้านบน ให้หาข้อมูลดังต่อไปนี้</u></i><br/>
            1) จำนวนคูปองที่จำหน่ายได้ในแต่ละวัน<br/>
            2) มูลค่าของคูปองที่จำหน่ายได้ในแต่ละวัน<br/>
            * ให้แสดงแยกตามประเภทและสรุปผลรวมด้วย
        </p>
    </div>
    <div style="clear:both">
        <br/>
        <p><u><strong>มาลองเขียนโปรแกรม PHP เพื่อคำนวณค่ากันเลย</strong></u></p>
        <div>
            <table width="400" border="1" cellspacing="0" cellpadding="5">
                <tr>
                    <td>มีคูปองใบละ <span class="c5">5</span> บาท จำนวน</td>
                    <td align="right">
                        <span class="store"><?php echo number_format($couponArray['coupon5']);?></span>
                    </td>
                    <td>ใบ</td>
                </tr>
                <tr>
                    <td>จำนวนคงเหลือ</td>
                    <td align="right">
                        <span class="store"><?php echo number_format($remainArray['coupon5']);?></span>
                    </td>
                    <td>ใบ</td>
                </tr>
                <tr>
                    <td>ดังนั้น ยอดจำหน่ายจะได้เท่ากับ  <span class="store">
                        <?php echo number_format($couponArray['coupon5']);?>
                        - <?php echo number_format($remainArray['coupon5']);?>
                        </span>
                    </td>
                    <td align="right">
                        <span class="used"><?php echo number_format($usedArray['coupon5']);?></span>
                    </td>
                    <td>ใบ</td>
                </tr>
            </table>
        </div>
        <br/>
        <div>
            <table width="400" border="1" cellspacing="0" cellpadding="5">
                <tr>
                    <td>มีคูปองใบละ <span class="c10">10</span> บาท จำนวน</td>
                    <td align="right">
                        <span class="store"><?php echo number_format($couponArray['coupon10']);?></span>
                    </td>
                    <td>ใบ</td>
                </tr>
                <tr>
                    <td>จำนวนคงเหลือ</td>
                    <td align="right">
                        <span class="store"><?php echo number_format($remainArray['coupon10']);?></span>
                    </td>
                    <td>ใบ</td>
                </tr>
                <tr>
                    <td>ดังนั้น ยอดจำหน่ายจะได้เท่ากับ  <span class="store">
                        <?php echo number_format($couponArray['coupon10']);?>
                        - <?php echo number_format($remainArray['coupon10']);?>
                        </span>
                    </td>
                    <td align="right">
                        <span class="used"><?php echo number_format($usedArray['coupon10']);?></span>
                    </td>
                    <td>ใบ</td>
                </tr>
            </table>
        </div>
        <br/>
        <div>
            <table width="400" border="1" cellspacing="0" cellpadding="5">
                <tr>
                    <td>มีคูปองใบละ <span class="c20">20</span> บาท จำนวน</td>
                    <td align="right">
                        <span class="store"><?php echo number_format($couponArray['coupon20']);?></span>
                    </td>
                    <td>ใบ</td>
                </tr>
                <tr>
                    <td>จำนวนคงเหลือ</td>
                    <td align="right">
                        <span class="store"><?php echo number_format($remainArray['coupon20']);?></span>
                    </td>
                    <td>ใบ</td>
                </tr>
                <tr>
                    <td>ดังนั้น ยอดจำหน่ายจะได้เท่ากับ  <span class="store">
                        <?php echo number_format($couponArray['coupon20']);?>
                        - <?php echo number_format($remainArray['coupon20']);?>
                        </span>
                    </td>
                    <td align="right">
                        <span class="used"><?php echo number_format($usedArray['coupon20']);?></span>
                    </td>
                    <td>ใบ</td>
                </tr>
            </table>
        </div>   
        <br/>
        <h4><u>คิดราคาคูปองที่จำหน่ายได้ทั้งหมด</u></h4>
        <div>
            <table width="550" border="1" cellspacing="0" cellpadding="5">
                <tr>
                    <td>
                        จำหน่ายคูปองใบละ <span class="c5">5</span> บาท
                        จำนวน <?php echo number_format($usedArray['coupon5']);?> คิดเป็นเงิน
                    </td>
                    <td align="right">
                        <span class="store"><?php echo number_format($priceArray['coupon5'], 2);?></span>
                    </td>
                    <td>บาท</td>
                </tr>
                <tr>
                    <td>
                        จำหน่ายคูปองใบละ <span class="c10">10</span> บาท
                        จำนวน <?php echo number_format($usedArray['coupon10']);?> คิดเป็นเงิน
                    </td>
                    <td align="right">
                        <span class="store"><?php echo number_format($priceArray['coupon10'], 2);?></span>
                    </td>
                    <td>บาท</td>
                </tr>
                <tr>
                    <td>
                        จำหน่ายคูปองใบละ <span class="c20">20</span> บาท
                        จำนวน <?php echo number_format($usedArray['coupon20']);?> คิดเป็นเงิน
                    </td>
                    <td align="right">
                        <span class="store"><?php echo number_format($priceArray['coupon20'], 2);?></span>
                    </td>
                    <td>บาท</td>
                </tr>
                <tr>
                    <td>
                        <b>รวมเป็นเงินทั้งสิ้น (<?php echo number_format($priceArray['coupon5']);?> +
                                <?php echo number_format($priceArray['coupon10']);?> +
                                <?php echo number_format($priceArray['coupon20']);?>)
                        </b>
                    </td>
                    <td align="right">
                        <span class="used"><b><?php echo number_format($totalPrice, 2);?></b></span>
                    </td>
                    <td><b>บาท</b></td>
                </tr>               
            </table>
        </div>       
    </div>
    <br/>
  </body>
</html>
  




สำหรับโค๊ด PHP ตัวอย่างทั้งหมดนี้จะเป็นการเขียนส่วนของการคำนวณเก็บไว้ในคลาสที่ชื่อ CouponProcess() จะมีเมธอดหรือฟังก์ชั่นให้เรียกใช้ด้วยกัน 4 ฟังก์ชั่นประกอบด้วย

$obj->get_coupon();
$obj->get_remain();
$obj->get_used();
$obj->get_used_price();

เป็นส่วนที่ใช้ดึงข้อมูลและคำนวณยอดที่ต้องการจากคลาสที่สร้างขึ้น ส่วนรายละเอียดนั้นได้อธิบายไว้ในโค๊ด PHP + HTML ด้านบนแล้วครับ





"PHP ไม่ได้สร้างสุดยอดโปรแกรม
แต่ PHP ช่วยให้งานคุณง่ายขึ้นต่างหาก"

PHP CI MANIA PHP Code Generator 
โปรแกรมช่วยสร้างโค้ด ลดเวลาการเขียนโปรแกรม

สนใจสั่งซื้อเพียง 3,990 บาท



PHP CI MANIA PHP Code Generator 

โปรแกรมช่วยสร้างโค้ด "ลดเวลาการเขียนโปรแกรม"
ราคาสุดคุ้มเพียง 3,990 บาท 
http://www.phpcodemania.com

ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

แจกฟรี!! ระบบต่างๆที่พัฒนาด้วย PHP สำหรับนำไปใช้ในงานต่างๆ

       สำหรับหลายท่านที่ขอโค้ดเข้ามาทาง Inbox ของเฟซบุ๊กแฟนเพจ หรือถามถึงระบบต่างๆหลังไมค์มานั้น ส่วนใหญ่ก็มีแจกอยู่แล้วในเว็บบอร์ด ThaiCreate.Com นะครับ และด้านล่างนี้ก็เป็นระบบต่างๆที่แจกให้นำไปลองใช้ลองศึกษากันครับ

สร้างแบบฟอร์มล็อกอิน HTML + PHP

       ผมจะสร้างระบบตัวอย่างเพื่อแสดงให้เห็นการทำงานของสคริปต์ PHP ที่ใช้ในการล็อกอินอย่างง่ายๆ นะครับ โดยที่ผมจะสร้างโฟลเดอร์ใหม่ขึ้นในไดร์ฟที่เราได้กำหนดให้เป็น Directory Root สำหรับรันสคริปต์ PHP ซึ่งผมกำหนดเอาไว้ที่ D:\www ดังนั้นผมจะสร้างโฟลเดอร์ teacher_assistant ขึ้นมาใหม่จะได้พาธเป็น D:\www\teacher_assistant สำหรับการเข้าถึง จะใช้ URL ดังนี้ http://localhost/teacher_assistant หลังจากสร้างโฟลเดอร์เสร็จเรียบร้อยก็จะเริ่มกระบวนการเตรียมโครงสร้างโปรเจ็กต์ด้วยเครื่องมือช่วยเขียนโปรแกรมชื่อว่า eclipse ซึ่งดูวิธีการสร้างโปรเจ็กต์ได้จากบทความ เริ่มต้นสร้างโปรเจ็กต์ ด้วยโปรแกรม eclipse เครื่องมือเขียนโปรแกรม php ในบทความเป็นการสร้างโปรเจ็กต์ที่มีพาธเป็นโฟลเดอร์ login แต่ในที่นี้ต้องเป็นพาธให้ตรงกับโฟลเดอร์ใหม่ที่เราได้สร้างขึ้นด้วยนะครับ

PHP กับการคิดส่วนลดเป็นเปอร์เซ็น 5%, 10%, 20% ตามช่วงราคาที่กำหนด

<?php     $total_price = 1000;     $discount = 0;         if($total_price >= 500 && $total_price < 1001){         $discount = 5;     }elseif($total_price >= 1001 && $total_price <= 5000){         $discount = 10;     }elseif($total_price >= 5001){         $discount = 20;     }         $discount_bath = ($total_price*$discount)/100; ?> <pre> ซื้อสินค้าครบ 0 ถึง 499 บาท ไม่ได้ส่วนลด ซื้อสินค้าครบ 500 ถึง 1000 บาท ได้ส่วนลด 5% ซื้อสินค้าครบ 1001 ถึง 5000บาท ได้ส่วนลด 10% ซื้อสินค้าครบ 5001 บาทขึ้นไป ได้ส่วนลด 20% </pre> <h3>รวมราคาสินค้า = <?php echo number_format($total_price,2);?></h3> <h5>ส่วนลด = <?php echo $discount;?>%  (<?php echo $discount_bath;?> บาท)</h5> <h2>ราคาหลังส่วนลด = <?php echo number_format($total_price - $discount_bath,2);?>บาท</h2> "PHP ไม่ได้สร้างสุดยอดโปรแกรม แต่ PHP ช่วยให้งานคุณง่ายขึ้นต