zoukankan      html  css  js  c++  java
  • 结算

    只要消费就要进行结账,自己写的结账功能。

    这个也是要连接数据进行修改的,比如购买了东西,写入了数据库,结账结束后,自然要把数据库进行清空,将结账的钱写入数据库,进行保存。

    和上一个随笔相连,同样做一个菜单的结账功能吧。

    我是用了两张表进行存数据,一张是桌子信息的表,另一张就是点餐后的点餐表,到结账时,对点餐表进行总和金额,写入桌子表,同时,点餐表中关于这张桌子点的餐也就清除。

    一、数据库

    情况桌子的信息表:                                                                   每张桌子的点餐情况(canpin是一张所有菜品的表,这里是它的代号):

                

    二、结账页面的布局还有添加结账功能

    1、结账页面的布局很简单(注意:要将用到的bootstrap提前引入)

    注意:这里是关于每张桌子的,所以有暂存桌号,这个可以用session,因为是只写结账功能,这个提一下

    (1)可以加一个标题:结账

    1
    <h1>结账</h1>

    (2)接下来就是遍历数据库了,遍历一下这张桌子的点餐情况(前面我已经提到了session暂存桌号code)

    可以用一张表显示点餐信息

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <table width="80%" height="100%" cellpadding="0" cellspacing="0" border="1">
        <tr>
             <td>餐品</td>
         <td>单价</td>
         <td>数量</td>
         <td>服务员</td>
         <td>时间</td>
        </tr>
        <!-- 这里是每一列的详细信息,遍历数据库-->             
    </table>   

    (2.1)遍历数据库

    先要是桌子的遍历

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
        session_start();  //开启session
            $code $_GET["code"];  //session的值
                  
            include("DBDA.class.php");  //调用封装好的数据库
        $db new DBDA();  //造新对象
                 
        $sql " select * from diancan where code={$code}";  //查询一下桌号的那张表的code和session值一样的所有信息
        $attr $db->Query($sql);  //执行一下语句
            foreach($attr as $v)
        {<br>         //输出桌号信息
            echo "<div>{$v[1]}桌</div><input type='button' value='{$v[1]}' hidden='hidden' id='zhuo' />";
         }
    ?>     

    然后就是每张桌子的消费结果详情表(要写在表格的标签中)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php 
           $sql =" select * from yidiancan where code='$v[1]'";  //查找点餐详情表中的code和上面遍历出来的桌号相等
           $attr $db->Query($sql);  //执行查询语句
         foreach$attr as $v)
        {
          $cha="select name from caidan where code='{$v[2]}'";  //查找菜单的那个code的名字
          $cp=$db->Query($cha);
          echo  "<tr><td>{$cp[0][0]}</td><td>{$v[3]}</td><td>{$v[4]}</td><td>{$v[5]}</td><td>{$v[6]}</td></tr>";
        }
     ?>

    看下遍历的结果

    2、布局结束后,就是结算的功能部分了

    (1)就是显示下总价格

    价格:单价*数量(在表中单价和数量都是有的,直接遍历相乘就可以啦)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php 
        $sql =" select * from yidiancan where code='$v[1]'";  //遍历点餐信息
        $attr $db->Query($sql); //执行语句
        $sum=0;  //先给sum赋值为0
        foreach$attr as $v)
        {
          $cha="select name from caidan where code='{$v[2]}'";  //查找菜单的名字
          $cp=$db->Query($cha);  //执行语句
          $sum=$sum+$v[3]*$v[4];  //数量和单价的那一列相乘,并且把值赋给sum                  
        }<br>      //输出这个总价格(样式是单选按钮)
        echo  "总消费:<input type='radio' value='{$sum}' id='zj' name='yi' class='jie' />{$sum}";              
    ?>

    (2)有时是不是也会打折什么的?

    先写出打折的两个选项

    1
    2
    3
    4
    5
    <h1 style=" color:#F00">折扣</h1>
    <div id="zhekou"  style=" float:left; 150px ">
      <input type='radio' value='0.95' name='zhi' class='ck' />九五折
      <input type='radio' value='0.8' name='zhi' class='ck' />八折
    </div>

    写出一个打折后,让价格显示出来的地方

    1
    2
    3
    <div id="zhehou">
                        
    </div>

    接下来就是利用ajax方法来进行计算打折后的价格,并且显示

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    $("#zhekou").click(function(){
        var zj = $("#zj").val();  //找到总价的单选按钮的值
        var ck = $(".ck");  //找到打折的单选 
        var str = "";
        for(var i=0;i<ck.length;i++)
        {
            if(ck.eq(i).prop("checked")) //单选按钮的选中状态
            
                 var num = ck.eq(i).val()*zj; //这个就是总价*折扣选中的单选按钮的值
                str+="打折后收账:<input type='radio' value='"+ck.eq(i).val()*zj+"' name='yi' class='jie' />"+num.toFixed(1);
            }
        }          
        $("#zhehou").html(str);  //将str的值写入折后价格显示的地方
             
    })

    看下这个功能的结果

    三、既然这个功能实现了,是不是要写入数据库了呢?

    这样可以添加一个确定按钮,给这个按钮写入事件

    1
    <input type="button" value="确定" id="save"/> 

    这个按钮起了个名字,接下来就是添加单击事件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    $("#save").click(function(){
        var zhuo = $("#zhuo").val();  //找到桌的值
        var jie = $(".jie"); //找到jie单选按钮的
        var str = "";
        for(var i=0;i<jie.length;i++)
        {
            if(jie.eq(i).prop("checked"))  //判断单选钮是否选中
            {
                str = str+jie.eq(i).val()+"|";
            }
        }
        str = str.substr(0,str.length-1);  //截取子串
        $.ajax({
            url:"savee.php"//保存的处理页面
            data:{zhuo:zhuo,jie:str},  //将值传过去
            type:"POST",  //传输的方式
            dataType:"TEXT",
            success: function(data){
                if(data.trim()=="OK")
                {
                                         
                    alert("结算成功!");
                                         
                }
                window.location.href="jie11.php?code=<?php echo $code; ?>";  //刷新页面
                                     
            }
        });
    })

    保存的处理页面

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    <?php
    session_start();
     
    include("DBDA.class.php");  //调用的封装类
    $db new DBDA();  //造新对象
     
    //传过来的用户和选项的
    $zhuo $_POST["zhuo"];
    $jie $_POST["jie"];
    $time date("Y-m-d H:i:s");
     
    $su "update diancan set money=money+'{$jie}' where name='{$zhuo}'";  //修改表中的money值,并且每次添加新值是相加而不是重新写入
    $db->Query($su,0);  //执行语句
     
    $attr explode("|",$jie); 
     
    foreach($attr as $v)
    {
        $sql1 "update diancan set time='{$time}' where name='{$zhuo}'";  //修改时间,写入当前时间
        $db->Query($sql1,0);  //执行语句
        $sql "update diancan set isok='0' where name='{$zhuo}'";  //修改状态
        $db->Query($sql,0);  //执行语句
        $sq2 "delete from yidiancan where code='{$zhuo}'"//结账结束后,点餐内容删除
        $db->Query($sq2,0);
        echo "OK";
    }

    下面看下结果

    (1)这是页面的内容,还有打折后的价格

    (2)看下数据库,点餐表的桌的信息

    已点餐的表

    (3)点击确定按钮后

    页面已经刷新,没有了这一桌的点的菜

    数据库两张表的也发生了改变

    到此结账功能就结束了

  • 相关阅读:
    来自Jakob Jenkov的Jackson教程
    Linux查看某个端口的连接数
    Linux查看某个进程的线程
    Jackson反序列JSON为实体对象出现:no String-argument constructor/factory method to deserialize from String value的问题
    软路由OpenWrt教程收集(插件开发教程,opkg安装软件教程)
    软路由系统收集
    Linux防止“rm -rf /”误删除
    Mac 10.12原生方法对NTFS分区进行读写的配置
    Linux下进行Web服务器压力(并发)测试工具http_load、webbench、ab、Siege、autobench简单使用教程(转)
    微服务实施Spring Boot/Spring Cloud中踩过的坑(转)
  • 原文地址:https://www.cnblogs.com/gyzown/p/7210823.html
Copyright © 2011-2022 走看看