[share]PHP购物车类的源码

<?php
//调用实例
require_once 'cart.class.php';
session_start();
if(!isset($_SESSION['cart'])) {
$_SESSION['cart'] = new Cart;
}
$cart =& $_SESSION['cart'];

if( ($_SERVER['REQUEST_METHOD']=="POST")&&($_POST['action']=='add') ){
$p = $_POST['p'];
$items = $cart->add($p);
}
if( ($_GET['action']=='remove')&&($_GET['key']!="") ) {
$items = $cart->remove($_GET['key']);
}

if( ($_SERVER['REQUEST_METHOD']=="POST")&&($_POST['action']=='modi') ){
$key = $_POST['key'];
$value = $_POST['value'];
for($i=0;$i<count($key);$i ){
$items = $cart->modi($key[$i],$value[$i]);
}
}

$items = $cart->getCart();
//打印
echo "<table border=1>";
setlocale(LC_MONETARY, 'it_IT');
foreach($items as $item){
echo "<tr><form method=\"post\" action=\"tmp.php\">";
echo "<td>ID:".$item['ID']."<input type=hidden name=key[] value=".$item['ID'].">";
echo "<td>产品:".$item['name'];
echo "<td>单价:".$item['price'];
echo "<td><input type=text name=value[] value=".$item['count'].">";
$sum = $item['count']*$item['price'];
echo "<td>合计:".round($sum,2);
echo "<td><input type=button value='删除' οnclick=\"location='?action=remove&key=".$item['ID']."'\">";
}
echo "<input type=hidden name=action value=modi>";
echo "<tr><td colspan=7><input type=submit />";
echo "</td></form></tr></table>";


?>
<hr>
<form method="post" action="tmp.php">
ID
:<input type="text" name="p[]" />
品名:
<input type="text" name="p[]" />
单价:
<input type="text" name="p[]" />
数量:
<input type="text" name="p[]" />
<input type=hidden name=action value=add>
<input type="submit" />
</form>

<?
/**
* Cart
*
* 购物车类
*
* @author doodoo<pWtitle@yahoo.com.cn>
* @package Cart
* @category Cart
* @license PHP License
* @access public
* @version $Revision: 1.10 $
*/
Class Cart{

var $cart;
var $totalCount; //商品总数量
var $totalPrices; //商品总金额

/**
* Cart Constructor
*
* 类的构造函数,使购物车保持稳定的初始化状态
*
* @static
* @access public
* @return void 无返回值
* @param void 无参数
*/
function Cart(){
$this->totalCount = 0;
$this->totalPrice = 0;
$this->cart = array();
}

// }}}
// {{{ add($item)


/**
* 增加商品到当前购物车
*
* @access public
* @param array $item 商品信息(一维数组:array(商品ID,商品名称,商品单价,商品数量))
* @return array 返回当前购物车内商品的数组
*/
function add($item){
if(!is_array($item)||is_null($item)) return $this->cart;
if(!is_numeric(end($item))||(!is_numeric(prev($item)))) {
echo "价格和数量必须是数字";
return $this->cart;
}
reset($item); //这一句是必须的,因为上面的判断已经移动了数组的指标
$key = current($item);
if($key=="") return $this->cart;
if($this->_isExists($key)){ //商品是否已经存在?
$this->cart[$key]['count'] = end($item);
return $this->cart;
}

$this->cart[$key]['ID'] = $key;
$this->cart[$key]['name'] = next($item);
$this->cart[$key]['price'] = next($item);
$this->cart[$key]['count'] = next($item);

return $this->cart;
}

// }}}
// {{{ add($item)


/**
* 从当前购物车中取出部分或全部商品
* 当 $key=="" 的时候,清空当前购物车
* 当 $key!=""&&$count=="" 的时候,从当前购物车中拣出商品ID号为 $key 的全部商品
* 当 $key!=""&&$count!="" 的时候,从当前购物车中拣出 $count个 商品ID号为 $key 的商品
*
* @access public
* @param string $key 商品ID
* @return mixed 返回真假或当前购物车内商品的数组
*/
function remove($key="",$count=""){
if($key=="") {
$this->cart = array();
return true;
}
if(!array_key_exists($key,$this->cart)) return false;
if($count==""){ //移去这一类商品
unset($this->cart[$key]);
}
else{ //移去$count个商品
$this->cart[$key]['count'] -= $count;
if($this->cart[$key]['count']<=0) unset($this->cart[$key]);
}
return $this->cart;
}

// }}}
// {{{ modi($key,$value)


/**
* 修改购物车内商品ID为 $key 的商品的数量为 $value
*
* @access public
* @param string $key 商品ID
* @param int $value 商品数量
* @return array 返回当前购物车内商品的数组;
*/
function modi($key,$value){
if(!$this->_isExists($key)) return $this->cart(); //不存在此商品,直接返回
if($value<=0){ // value 太小,全部删除
unset($this->cart[$key]);
return $this->cart;
}
$this->cart[$key]['count'] = $value;
return $this->cart;
}


/**
* 返回当前购物车内商品的数组
*
* @access public
* @return array 返回当前购物车内商品的数组;
*/
function getCart(){
return $this->cart;
}

// }}}
// {{{ _isExists($key)


/**
* 判断当前购物车中是否存在商品ID号为$key的商品
*
* @access private
* @param string $key 商品ID
* @return bool true or false;
*/
function _isExists($key)
{
if(isset($this->cart[$key])&&!empty($this->cart[$key])&&array_key_exists($key,$this->cart))
return true;
return false;
}

// }}}
// {{{ isEmpty()


/**
* 判断当前购物车是否为空,即没有任何商品
*
* @access public
* @return bool true or false;
*/
function isEmpty(){
return !count($this->cart);
}

// }}}
// {{{ _stat()


/**
* 取得部分统计信息
*
* @access private
* @return bool true or false;
*/
function _stat(){
if($this->isEmpty()) return false;
foreach($this->cart as $item){
$this->totalCount = @end($item);
$this->totalPrices = @prev($item);
}
return true;
}

// }}}
// {{{ totalPrices()


/**
* 取得当前购物车所有商品的总金额
*
* @access public
* @return float 返回金额;
*/
function totalPrices(){
if($this->_stat())
return $this->totalPrices;
return 0;
}

// }}}
// {{{ isEmpty()


/**
* 取得当前购物车所有商品的总数量和
*
* @access public
* @return int ;
*/
function totalCount(){
if($this->_stat())
return $this->totalCount;
return 0;
}


}
//End Class Cart
?>

转载于:https://www.cnblogs.com/c3055/archive/2011/08/24/2151649.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: PrinterShare是一款适用于安卓设备的打印应用程序,其源码是指该应用程序的开发代码。由于源码的详细内容比较复杂,这里只能简要描述其主要结构和功能。 PrinterShare源码主要包括以下几个部分: 1. 用户界面:源码中包含了用于用户交互的界面设计,包括主界面、设置界面、打印预览界面等。 2. 打印功能:源码中包含了打印功能的实现代码,包括文档解析、打印设置、打印任务管理等。 3. 网络通信:源码中包含了与打印机通信的相关代码,包括与打印机的连接、数据传输、打印状态查询等。 4. 数据处理:源码中包含了对打印数据的处理代码,包括打印数据的转换、压缩、解码等。 5. 权限管理:源码中包含了对应用权限的管理代码,包括用户权限请求、授权判断等。 6. 其他辅助功能:源码中可能还包含了一些辅助功能的代码,比如打印历史记录、文档搜索等。 通过分析PrinterShare源码,我们可以了解到如何在安卓平台上开发一个打印应用程序,包括用户界面设计、打印功能的实现、网络通信等方面的知识。并且,我们可以根据源码的结构和逻辑,进行二次开发,添加一些自己需要的功能,满足个性化的需求。 总的来说,PrinterShare源码是一个打印应用程序的核心代码,通过研究源码,我们可以深入了解应用程序的实现原理,以及安卓应用开发的相关知识和技术。 ### 回答2: PrinterShare是一款适用于Android设备的打印应用程序,允许用户通过将文件、图片和其他内容发送到打印机来实现打印功能。PrinterShare的源代码包含了应用程序的全部代码,开发者可以自由地阅读、理解和修改这些代码。 在PrinterShare源码中,我们可以看到应用程序的各个模块和功能的实现细节。例如,界面模块负责应用程序的用户界面,编写代码来显示菜单、按钮和其他用户交互元素。文件管理模块负责处理用户选择要打印的文件,并将其发送到打印机。打印模块负责与打印机进行通信,包括发送打印任务、获取打印机状态和处理打印错误等。 源码中还包含了与应用程序相关的各种配置文件和资源文件。这些文件定义了应用程序的外观和行为,如颜色、字体和布局等。此外,源码中还包含了与打印机通信所需的API和库文件,以便应用程序能够正确地与打印机进行通信。 通过阅读和理解PrinterShare源码,开发者可以学习到许多Android开发的技巧和方法。他们可以了解如何使用Android开发工具和框架来构建一个完整的应用程序,以及如何处理文件和网络通信等基本功能。他们还可以了解到如何处理用户界面交互、权限管理和错误处理等高级功能。 总之,PrinterShare源码是一个宝贵的学习资源,对于那些想要深入学习Android开发并构建自己的打印应用程序的开发者来说,具有很大的参考价值。通过研究和实践,开发者可以进一步提升他们的Android开发技能,并开发出更加高效和功能丰富的应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值