结算
只要消费就要进行结账,自己写的结账功能。
这个也是要连接数据进行修改的,比如购买了东西,写入了数据库,结账结束后,自然要把数据库进行清空,将结账的钱写入数据库,进行保存。
和上一个随笔相连,同样做一个菜单的结账功能吧。
我是用了两张表进行存数据,一张是桌子信息的表,另一张就是点餐后的点餐表,到结账时,对点餐表进行总和金额,写入桌子表,同时,点餐表中关于这张桌子点的餐也就清除。
一、数据库
情况桌子的信息表: 每张桌子的点餐情况(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; width: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)点击确定按钮后
页面已经刷新,没有了这一桌的点的菜
数据库两张表的也发生了改变
到此结账功能就结束了