购物车类是商城程序一个非常重要的类。写类,就要继承其可以重复利用的思想,高效,扩展性好的特点。
首先,我们要明白要实现怎么样的功能。然后根据功能的需求用代码实现。商城程序的购物车的基本功能有:
1、添加商品
2、移除商品
3、计算总额
不是吧!这么简单?呵呵,购物车流程的确如此。现在就用代码来实现这个过程。
一个商品的固定基本资料有:
1、商品唯一ID号(id)
2、商品名称(name)
3、零售价(retail_price)
4、销售价(price)
变动的资料有:
1、商品数量(quantity)
2、折扣额(discount)
3、小计(subtotal)
全部商品统计的资料有:
1、总数量
2、总金额
3、总折扣(告诉顾客共节省**元)
由于html是无状态语言。对于保存购物车的状态数据可以用SESSION、COOKIE、数据库、文本文件。通常只选一种方式保存,但是每一种保存方式都各有优点。为了使程序更通用、更实用,把存储状态的操作不写入购物车类中,就同时兼容上面几种方法!用数组来实现。
$abc[唯一ID][商品名称]
$abc[唯一ID][零售价]
$abc[唯一ID][销售价]
$abc[唯一ID][数量]
$abc[唯一ID][折扣]
$abc[唯一ID][小计]
如:
Array
(
[1] => Array
(
[name] => 商品名称
[retail_price] => 60
[price] => 50
[quantity] => 4
[discount] => 40
[subtotal] => 200
)
}
下面以session方式实例来说明一下,所需用到类的设计的结果。
session_start();//初始化session
$cat = new x_cart(&$_SESSION['merchandise']);//以引用方式保存购物车状态的变量,也可以用COOKIE或普通变量存数据库或文本文件。
$cat->add_item(array(123,'风扇',60,50),2) ;//添加一个商品与数量。第一个参数是数组,数组依次是id、商品名、零售价、销售价(可选,如果没有给出销售价则销售价就是零售价),第二个参数是商品数量
$cat->add_item(126,1);//同样的一个添加商品函数。有多种输入方式,增加程序操作的灵活性。第一个参数是商品id(可根据此ID自动调用商品名、零售价、销售价),第二个参数是数量
$cat->remove_item(123,1) ;//减商品数量。第一个参数是商品id,第二个是减数量。如果id资料不存在。则返回失败。如果减数量刚好是购物车中数量,则删除此商品。
$cat->dele_item(124);//移除商品ID的全部数量
$cat->edit_item(126,2);//编辑购物车中商品的数量
print_r($cat->sum_item());//返回购物车的总数量、总折扣、总金额
echo '<pre>';
print_r($_SESSION['merchandise']);
$cat->empty_cart();//清空购物车
由此可见,每个方法在类中是如何工作的。根据需要写相对应的代码。下面就带注释详细代码
[php]
//<meta charset=UTF-8">
/*
* 类 名: cart
* 功 能: 购物车类
* 版 本: 1
* 日 期: 2006年09月07日
* 修改次数: 0
* 最后修改: 2006年09月09日
* 作 者: qh663
* 版 权: 清晖
* oicq号码: 80031807
* 邮 箱: binderyi@163.com
* 主 页: http://www.gaoxiaotu5.com
*/
class cart
{
var $items;
var $total;
/**
*构造函数
*/
function cart($varname){
$this->items = &$varname;//引用,绑定变量变化
}
/**
*添加商品基本资料(类内部操作,私有)
*如果$item是数组型,并且有3或4个数量,则赋值。如果是数字型,则预留get_merchandise函数方法取得内容。
*否则就是程序设计的严重失败。(如非设计错误,而是由用户私改变量,可以考虑禁用此操作的用户)
*/
function add_merchandise($item) {
if (is_array($item) and (count($item) == 4 ) or count($item) == 3){
$id = (int)current($item);
if($this->is_item($id) == false){
$this->items[$id]['name'] = (string)next($item);
$this->items[$id]['retail_price'] = next($item);
$price = next($item);
$this->items[$id]['price'] = empty($price)?$this->items[$id]['retail_price']price;
}
return $id;
} elseif (is_numeric($item)){
if($this->is_item($item)){
return $item;
} else {
if ($item = $this->get_merchandise($item)){
return $this->add_merchandise($item);
} else {
die('无此商品');//如非设计错误,用户可能私改变量,可以考虑禁用此操作的用户
}
}
} else {
die('商品参数不正确!');//如非设计错误,用户可能私改变量,可以考虑禁用此操作的用户
}
}
/**
*添加一个商品
*$item 数字或数组(依次是id、商品名、零售价、销售价<可选>)
*$num 数量
*/
function add_item($item, $num) {
$id = $this->add_merchandise($item);
$this->items[$id]['quantity'] += $num;
$this->items[$id]['discount'] = ($this->items[$id]['retail_price'] - $this->items[$id]['price']) * $this->items[$id]['quantity'];//更新折扣
$this->items[$id]['subtotal'] = $this->items[$id]['quantity'] * $this->items[$id]['price'];//更新小计
return true;
}
/**
*减商品
*/
function remove_item($id, $num) {
if ($this->is_item($id) == false) return false;//检测是否在购物车中的物品
if ($this->items[$id]['quantity'] > $num) {//如果购物车中的物品大于要减的数量
$this->items[$id]['quantity'] -= $num;//从购物车中减出
$this->items[$id]['discount'] = ($this->items[$id]['retail_price'] - $this->items[$id]['price']) * $this->items[$id]['quantity'];//更新折扣
$this->items[$id]['subtotal'] = $this->items[$id]['quantity'] * $this->items[$id]['price'];//更新小计
return true;
} elseif ($this->items[$id]['quantity'] == $num) {//如果购物车中的物品等于要减的数量
unset($this->items[$id]);//删除购物车中该物品的所有资料
return true;
} else {
return false;
}
}
/**
*编辑商品数量
*/
function edit_item($id, $num) {
if ($this->is_item($id) == false) return false;//检测是否在购物车中的物品
if ($num > 0) {//保存0件以上的商品放在购物车里
$this->items[$id]['quantity'] = $num;
$this->items[$id]['discount'] = ($this->items[$id]['retail_price'] - $this->items[$id]['price']) * $this->items[$id]['quantity'];//更新折扣
$this->items[$id]['subtotal'] = $this->items[$id]['quantity'] * $this->items[$id]['price'];//更新小计
return true;
} elseif ($num == 0) {//如果是0件
unset($this->items[$id]);//删除购物车中该物品的所有资料
return true;
} else {
return false;
}
}
/**
*删除购物车中该物品的所有资料
*/
function dele_item($id) {
if ($this->is_item($id) == false) return false;
unset($this->items[$id]);
return true;
}
/**
*检测购物车中该物品是否存在
*/
function is_item($id) {
return is_array($this->items[$id]);
}
/**
*清空购物车
*/
function empty_cart(){
$this->items = NULL;
}
/**
*预留方法接口,根据ID取得商品信息源
*/
function get_merchandise($id){
return false;
}
/**
*统计购物车
*/
function sum_item(){
if (!is_array($this->items)) return false;
foreach ($this->items as $value){
$total['quantity'] += $value['quantity'];//总数量
$total['discount'] += $value['discount'];//总折扣
$total['monny'] += $value['subtotal'];//总金额
}
$this->total = $total;
return $total;
}
}
class x_cart extends cart {
/**
*利用预留方法
*/
function get_merchandise($id){
$abc = array($id,'扩展',5.6,3.5);//此为测试数据,请用数据库操作取得相对应数组。
return $abc;
}
}
[/php]
由此可见,我的设计方法是:分析=>由类执行过程=>类代码实现=>完成
分享到:
相关推荐
用java写了个购物车小程序 发上来晒晒 有用的着的可以下下来看看
根据需求分析与系统功能设计目标,结合实际情况本系统功能模块设计分为如下几个模块: 网上书城主要功能如下 : (1) 前台(客户购买)部分: ① 用户管理:注册会员、登录、激活、退出、修改密码; ② 分类显示:...
喜欢的朋友还可以自己查到本站的N多毕业设计与课程设计, 如果错误或其它需要请留言!或发邮件至8195819@qq.com 本项目使用技术 PHP无类 PHP类写法 ThinkPHP框架 其它框架 * 环境 PHP版本 mysql版本 运行...
根据需求分析与系统功能设计目标,结合实际情况本系统功能模块设计分为如下几个模块: 网上书城主要功能如下 : (1) 前台(客户购买)部分: ① 用户管理:注册会员、登录、激活、退出、修改密码; ② 分类显示:...
主要功能如下: (1)前台(客户购买)部分: ... ②分类显示:显示所有1级和2级分类; ③图书显示:按分类查询图书、通过关键字搜索图书、高级搜索图书、查看某本图书的详细等...适用于课程设计或者毕业设计参考学习使用。
1、 来自Directory项目结束后的启发,以后做设计的时候,要将每个实体抽象为一个类,在整个系统中进行操作。 2、 在任意一个类当中,可能不只包括此实体类的自然信息,也可以包括一些对其他地方数据调用有用的属性...
这是一个基于Spring Boot的毕业设计项目,名为“免税商品优选购物商城设计与实现”。该项目主要针对免税商品的在线销售,为用户提供一个便捷、高效的购物平台。项目采用了Java语言开发,使用了Spring Boot框架,以及...
一级分类管理功能:可以查询所有一级分类,添加新的一级分类,删除已有的分类 二级分类管理功能:可以查询所有二级分类,添加新的二级分类,删除已有的分类 订单管理功能:可以查询所有订单,对未发货的订单进行...
一级分类管理功能:可以查询所有一级分类,添加新的一级分类,删除已有的分类 二级分类管理功能:可以查询所有二级分类,添加新的二级分类,删除已有的分类 订单管理功能:可以查询所有订单,对未发货的订单...
本项目是一个基于微信小程序的网上商城设计,采用SSM(Spring、SpringMVC、MyBatis)框架进行开发,旨在提供一个功能完善、易于扩展的电商平台。项目涵盖了前端展示、后端管理、数据库设计等多个方面,可以满足不同...
实现一个微信小程序商品购物app,小程序用户登录后可以按照商品分类,商品关键字等查询感兴趣的商品,喜欢的商品用户可以加入购物车,购物车商品可以添加减少数量,选好商品后提交商品订单和收货地址,管理员在web...
个人经导师指导并认可通过的高分毕业设计项目,主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者。也可作为课程设计、期末大作业。包含全部项目源码、该项目可以直接作为毕设使用。项目都经过...
主要有四个栏目页,首页、分类、购物车、会员,整体主题色调是淡粉红色。 功能如下: 1.首页:商品轮播图,最新排行,最佳热卖,查阅更多,商品信息,可以实现搜索商品功能。 商品信息浏览,对已经上传过的产品,...
JDK,数据库使用Mysql,服务器使用TOMCAT,尽量使用MVC设计模式进行开发。 本系统设计目标要达到以下功能: (1)前台功能主要如下: 用户的注册。用户资料的修改。用户登录。商品的购买。商品的搜索。商品的分页查看...
研究内容: 系统使用的是MySQL数据库,采用操作的Tomact ...5. 系统只需一个普通的拥有Windows系统的电脑就可以运行起来,方便用户的操作和使用 6. 系统使用主流的轻量级SSM架构,可以保障系统运转的流畅性和稳定性。
水果商城设计 必须用 后端:Springboot 前端:vue 数据库MYSQL 【功能模块】 1、 用户模块: 用户注册,用户登录,退出登录,日志管理,查询用户信息,修改用户信息,上传头像 2、 首页界面模块: 首页轮播图,首页...
本项目是一款基于SSM(Spring、SpringMVC、MyBatis)平台开发的UniApp智能小程序商城,旨在为用户提供一个便捷、高效、安全的购物体验。项目采用前后端分离的架构设计,前端使用UniApp框架进行开发,后端则采用SSM...
水果商城网站是一款基于SSM框架开发的电商网站,包括商品的展示和购买流程,一共包括用户和管理员2个身份。用户注册登录后可以在前端按照商品二级分类查询不同类别的商品,也可以安装商品关键词查询相关商品,点击...
基于LeanCloud的电商类App,实现了基本的首页Banner轮播,商品展示分类展示,购物车列表生成,订单生成以及快递信息跟踪等功能。 技术支持 * 该App所有数据均来自LeanCloud后端云实现 * 基于LeanCloud,实现了用户...