网上购物系统的设计开发.doc
清 远 职 业 技 术 学 院毕业设计说明书(论文)题目: 网上购物系统的设计开发系 别: 信息科技系专 业: 网络技术 班 级:学 号:姓 名: 指导老师: 黄 华完成时间:2012年4月3日目 录摘要:3一、概述41.1目的和意义41.2开发工具的选用及介绍4二、系统设计开发62.1系统分析说明62.2工作流程图72.3功能模块图82.4网站的目录结构功能82.5数据库结构92.6系统部分关键代码10三、系统介绍253.1商品前台展示253.2后台管理303.2.1商品管理模块303.2.2订单管理模块323.2.3会员管理模块333.2.4权限管理模块37四、系统调试414.1.功能模块测试414.2.链接测试414.3.兼容性测试41结束语42致 谢42参考文献42网上购物系统的设计开发朱日湛(2009级 计算机网络技术)摘要: 近年来,随着Internet的迅速崛起,互联网已日益成为收集提供信息的最佳渠道并逐步进入传统的流通领域。于是电子商务开始流行起来,越来越多的商家在网上建起在线商店,向消费者展示出一种新颖的购物理念,本购物系统实现了当前购物网站的基本功能。 本论文就此购物系统进行了详细全面的论述。系统中用户的主要功能有:用户登录、注册、商品浏览、商品购买、订单管理以及个人信息管理。管理员的主要功能有:商品管理,促销管理,订单管理,广告管理,权限管理,系统设置,模板管理。全文共分为五个部分,第一部分是介绍相关理论知识;第二部分介绍系统总体设计;第三部分介绍系统具体实现过程;第四部分是测试工作。最后是结论。关键字:动态网站;购物系统;php;电子商务Online shopping system design and developmentZhu RizhanComputer network technology level (2009)Abstract: In recent years, Internet has become the best channel for collection of information and entered the traditional field of circulation with the rapid rising. E-commerce has been popular, and more and more online stores are established on the Internet, displaying a new idea of shopping. The system realizes the basic functions of shopping website. This paper introduces the shopping system in detail. Users of the system main functions: user login, registration, merchandise browsing, buy goods, order management, personal information management. Administrator's main functions are: commodity management, order management, member management, authority management.There are five sections in this paper, the first is introduction of Related theoretical knowledge; the second is introduction of the design of system; the third is introduction of the process of realization; the forth is test; and the conclusion in the end.Keywords: Dynamic website; Shopping system; PHP; Electronic commerce一、概述1.1目的和意义网上购物投资少,回收快。一项针对中国中小企业的情况调查显示,个人在网下启动销售公司的平均费用至少5万元,而网上开店建店成本非常小。一般说,筹办一家网上的商店投入很小,不用去办营业执照,不用去租门面,不用囤积货品,所需资金不过1500元左右;网上商店比同等规模的地面商店“租金”要低得多,同时租金不会因为营业面积的增加而增加,投资者也不用为延长营业时间而增加额外的费用。 基本不需要占压资金。传统商店的进货资金少则几千元,多则数万元,而网上商店则不需要压资金。24小时营业时间。网上商店延长了商店的营业时间,一天24小时、一年365天不停地运作,无须专人值班看店,都可照常营业。传统店铺的营业时间一般为8-12小时,遇上坏天气或者老板、店员有急事也不得不暂时休息。 销售规模不受地盘限制。传统商店有多大就只能摆放多少商品,生意大小常常被小店面积限制。而在网上,即便在地面上只有一个小商店,或者干脆就没有门面,开店的生意却可以照样做得很大。 不受店面空间的限制。哪怕只是街边小店,在网上却可以拥有百货大楼那么大的店面,只要投资者愿意,可以摆上成千上万种商品。目前国内最大的专业拍卖网站同时在线的商品要超过10万件已超过一些大超市。 不受地理位置影响。不管客户离店有多远,也不管顾客是国内还是国外,在网上,客户一样可以很方便地找到并购买商品。这令消费群体突破了地域的限制,变得无限广阔了。1.2开发工具的选用及介绍运行平台和开发工具:网上购物系统运行平台为windows操作系统,web服务器软件使用wampserver集成环境。系统开发工具:前端使用Macromedia Dreamweaver 8、Flash、Photoshop,后台数据库使用MYSQL,程序设计使用PHP等。【PHP相关简介】PHP,一个嵌套的缩写名称,是英文超级文本预处理语言(PHP:Hypertext Preprocessor)的缩写。PHP 是一种 HTML 内嵌式的语言,PHP与微软的ASP颇有几分相似,都是一种在服务器端执行的嵌入HTML文档的脚本语言,语言的风格有类似于C语言,现在被很多的网站编程人员广泛的运用。PHP 独特的语法混合了 C、Java、Perl 以及 PHP 自创新的语法。它可以比 CGI 或者 Perl 更快速的执行动态网页。用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;与同样是嵌入HTML文档的脚本语言JavaScript相比,PHP在服务器端执行,充分利用了服务器的性能;PHP执行引擎还会将用户经常访问的PHP程序驻留在内存中,其他用户再一次访问这个程序时就不需要重新编译程序了,只要直接执行内存中的代码就可以了,这也是PHP高效率的体现之一。PHP具有非常强大的功能,所有的CGI或者JavaScript的功能PHP都能实现,而且支持几乎所有流行的数据库以及操作系统。PHP 最初是1994年Rasmus Lerdorf创建的,刚刚开始只是一个简单的用Perl语言编写的程序,用来统计他自己网站的访问者。后来又用C语言重新编写,包括可以访问数据库。在1995年以Personal Home Page Tools (PHP Tools) 开始对外发表第一个版本,Lerdorf写了一些介绍此程序的文档,并且发布了PHP1.0。在这早期的版本中,提供了访客留言本、访客计数器等简单的功能。以后越来越多的网站使用了PHP,并且强烈要求增加一些特性,比如循环语句和数组变量等等,在新的成员加入开发行列之后,在1995年中,PHP2.0发布了。第二版定名为PHP/FI(Form Interpreter)。PHP/FI加入了对MS_SQL的支持,从此建立了PHP在动态网页开发上的地位。到了1996年底,有15000个网站使用 PHP/FI;时间到了1997年中,使用PHP/FI的网站数字超过五万个。而在1997年中,开始了第三版的开发计划,开发小组加入了 Zeev Suraski 及 Andi Gutmans,而第三版就定名为PHP3。2000年,PHP4.0又问世了,其中增加了许多新的特性【MYSQL简介】MySQL是一个小型关系型数据库管理系统, MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内。这样就增加了速度并提高了灵活性。MySQL的SQL“结构化查询语言”。SQL是用于访问数据库的最常用标准化语言。MySQL软件采用了GPL(GNU通用公共许可证)。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。MySQL最初的开发者的意图是用mSQL和他们自己的快速低级例程(ISAM)去连接表格。经过一些测试后,开发者得出结论:mSQL并没有他们需要的那么快和灵活。这导致了一个使用几乎和mSQL一样的API接口的用于他们的数据库的新的SQL接口的产生,这样,这个API被设计成允许为用于mSQL而写的第三方代码更容易移植到MySQL。1. 系统特性:使用C和C+编写,并使用了多种编译器进行测试,保证源代码的可移植性支持AIX、FreeBSD、HP-UX、Linux、Mac OS、NovellNetware、OpenBSD、OS/2 Wrap、Solaris、Windows等多种操作系统 为多种编程语言提供了API。这些编程语言包括C、C+、Python、Java、Perl、PHP、Eiffel、Ruby和Tcl等。支持多线程,充分利用CPU资源 优化的SQL查询算法,有效地提高查询速度既能够作为一个单独的应用程序应用在客户端服务器网络环境中,也能够作为一个库而嵌入到其他的软件中提供多语言支持,常见的编码如中文的GB 2312、BIG5,日文的Shift_JIS等都可以用作数据表名和数据列名提供TCP/IP、ODBC和JDBC等多种数据库连接途径提供用于管理、检查、优化数据库操作的管理工具可以处理拥有上千万条记录的大型数据库支持多种存储引擎2.应用环境:与其他的大型数据库例如Oracle、DB2、SQL Server等相比,MySQL自有它的不足之处,如规模小、功能有限(MySQL Cluster的功能和效率都相对比较差)等,但是这丝毫也没有减少它受欢迎的程度。对于一般的个人使用者和中小型企业来说,MySQL提供的功能已经绰绰有余,而且由于MySQL是开放源码软件,因此可以大大降低总体拥有成本。LAMP目前Internet上流行的网站构架方式是LAMP(Linux+Apache+MySQL+PHP/Perl/Python)和LNMP(Linux+Nginx+MySQL+php/perl/Python),即使用Linux作为操作系统,Apache和Nginx作为Web服务器,MySQL作为数据库,PHP/Perl/Python作为服务器端脚本解释器。由于这四个软件都是免费或开放源码软件(FLOSS),因此使用这种方式不用花一分钱(除开人工成本)就可以建立起一个稳定、免费的网站系统。二、系统设计开发2.1系统分析说明网上购物系统是一个复杂、综合的系统,首先对系统进行总体的规划和设计,否则会导致开发进度缓慢,系统不符合要求等。网上购物系统由前端网页界面、处理程序和MYSQL后台数据库系统组成。网页主要展示各类商品的名称、图片、价格和详细介绍等。处理程序负责对顾客的操作和表单提交进行响应和处理,后台数据库主要存储商品数据、顾客数据、订据和销售数据等。2.2工作流程图网上支付加入购物车货到付款确认订购进入相关的网上支付平台确认订购选择付款方式确认或修改收货人信息是否登录注册v继续购物判断是否注册用户浏览网页选择要买的商品支付成功交易完成2.3功能模块图网上商城系统前台功能后台功能商品浏览购物车管理会员中心个人评论商品管理订单管理报表统计促销管理权限管理会员管理2.4网站的目录结构功能文件夹名称文件夹功能根目录前台程序文件admin后台程序文件夹api调用API的系统公用函数cert存放证书的文件夹data数据连接设置等,包括各种广告的上传图片等images上传商品图片文件夹,按日期分目录includes前台公用文件和函数js前台用js脚本languages语言文件temp存放临时缓存等文件themes模板文件夹,可以随意拷贝模板样式2.5数据库结构【部分数据表结构】表的结构ecs_goods字段名类型备注goods_idsmallint(5)书籍idcat_idsmallint(5)商品所属商品分类id,取值ecs_category的cat_idgoods_snvarchar(60)商品的唯一货号goods_namevarchar(120)商品的名称(书名)click_countint(10) unsigned商品点击数market_pricedecimal(10,2) unsigned市场售价shop_pricedecimal(10,2) unsigned本店售价promote_pricedecimal(10,2) unsigned促销价格keywordsvarchar(255)商品关键字,放在商品页的关键字中,为搜索引擎收录用goods_briefvarchar(255)商品的简短描述goods_desctext简介(商品的详细描述)goods_weightdecimal(10,3)文件大小goods_thumbvarchar(255)商品在前台显示的微缩图片,如在分类筛选时显示的小图片goods_imgvarchar(255)商品的实际大小图片,如进入该商品页时介绍商品属性所显示的大图片original_imgvarchar(255)商品的原始图片add_timeint(10) unsigned商品的添加时间表的结构ecs_goods_attr字段名类型备注goods_attr_idint(10)自增ID号goods_idmediumint(8) unsigned该具体属性属于的商品,取值于ecs_goods的goods_idattr_idsmallint(5) unsigned该具体属性属于的属性类型的id,取自ecs_attribute 的attr_idattr_valuetext该具体属性的值表的结构ecs_ attribute字段名类型备注attr_idsmallint(5) unsigned自增ID号cat_idsmallint(5) unsigned商品类型,同ecs_goods_type的cat_idattr_namevarchar(60)属性名称(作者/ISBN)表的结构 ecs_categorycat_idsmallint(5) unsigned自增ID号cat_namevarchar(90)分类名称filter_attrsmallint(6)如果该字段有值,则该分类将还会按照该值对应在表goods_attr的goods_attr_id所对应的属性筛选,如,书有作者,ISBN等属性【部分数据表关系图】2.6系统部分关键代码【订单列表部分代码】elseif ($_REQUEST'act' = 'list') admin_priv('order_view'); $smarty->assign('ur_here', $_LANG'02_order_list'); $smarty->assign('action_link', array('href' => 'order.php?act=order_query', 'text' => $_LANG'03_order_query'); $smarty->assign('status_list', $_LANG'cs'); $smarty->assign('os_unconfirmed', OS_UNCONFIRMED); $smarty->assign('cs_await_pay', CS_AWAIT_PAY); $smarty->assign('cs_await_ship', CS_AWAIT_SHIP); $smarty->assign('full_page', 1); $order_list = order_list(); $smarty->assign('order_list', $order_list'orders'); $smarty->assign('filter', $order_list'filter'); $smarty->assign('record_count', $order_list'record_count'); $smarty->assign('page_count', $order_list'page_count'); $smarty->assign('sort_order_time', '<img src="images/sort_desc.gif">'); assign_query_info(); $smarty->display('order_list.htm');elseif ($_REQUEST'act' = 'info') if (isset($_REQUEST'order_id') $order_id = intval($_REQUEST'order_id'); $order = order_info($order_id); elseif (isset($_REQUEST'order_sn') $order_sn = trim($_REQUEST'order_sn'); $order = order_info(0, $order_sn); else die('invalid parameter'); if (empty($order) die('order does not exist'); if (order_finished($order) admin_priv('order_view_finished'); else admin_priv('order_view'); if (!empty($_COOKIE'ECSCP''lastfilter') $filter = unserialize(urldecode($_COOKIE'ECSCP''lastfilter'); if (!empty($filter'composite_status') $where = '' switch($filter'composite_status') case CS_AWAIT_PAY : $where .= order_query_sql('await_pay'); break; case CS_AWAIT_SHIP : $where .= order_query_sql('await_ship'); break; case CS_FINISHED : $where .= order_query_sql('finished'); break; default: if ($filter'composite_status' != -1) $where .= " AND o.order_status = '$filtercomposite_status' " $sql = "SELECT MAX(order_id) FROM " . $ecs->table('order_info') . " as o WHERE order_id < '$orderorder_id'" if ($agency_id > 0) $sql .= " AND agency_id = '$agency_id'" if (!empty($where) $sql .= $where; $smarty->assign('prev_id', $db->getOne($sql); $sql = "SELECT MIN(order_id) FROM " . $ecs->table('order_info') . " as o WHERE order_id > '$orderorder_id'" if ($agency_id > 0) $sql .= " AND agency_id = '$agency_id'" if (!empty($where) $sql .= $where; $smarty->assign('next_id', $db->getOne($sql); if ($order'user_id' > 0) $user = user_info($order'user_id'); if (!empty($user) $order'user_name' = $user'user_name' if ($order'order_amount' < 0) $order'money_refund' = abs($order'order_amount'); $order'formated_money_refund' = price_format(abs($order'order_amount'); 【购物车功能部分代码】var $oldValues=new Array();varchangeNum=function($m,$gid)/alert($gid);var $num=$("#num_"+$gid);var $val=parseInt($num.val();if (isNaN($val) $val = 1; alert("商品数量必须输入数字"); $oldValues'old'+$gid=$val;if($m = '+')$val+$num.val($val);else if($val > 1 && $m = '-')$val-$num.val($val);else$num.val(1);return false;$num.change();var updateCount=function($e,$gid)/alert('update goodsID:'+$gid+'');var $count=parseInt($("#num_"+$gid).val(); if (isNaN($count) $count = 1; alert("商品数量必须输入数字"); $($e).val($count); if($count <= 0)$count = 1;$($e).val($count);return false;AS.ajax(url:"flow.php?step=update_count",type :'post',dataType:'json',data :rec_id:$gid,chang_to:$count,success:function($json)if($json.status = 'not')alert('库存不够!');$($e).val($oldValues'old'+$gid);elsevar $marketprice$("#marketprice"+$gid).val();var $price=$("#price"+$gid).val();var $priceNumparseFloat($price.substr(1);$("#priceLabel"+$gid).html('¥'+($priceNum*$count)+'元');var $prices=$(".prices");var $totalPrice=0.00;var $totalmarketPrice=0.00;$prices.each(function()var $price_parseFloat($(this).val().substr(1);var $parent=$(this).parents('.gww_xg');var $count_=parseInt($(".gwwu_ee",$parent).val();/alert($price_);$totalPrice+=$price_*$count_;);var $marketprices=$(".marketprices");$marketprices.each(function()var $marketprice_=parseFloat($(this).val().substr(1);var $parent=$(this).parents('.gww_xg');var $count_=parseInt($(".gwwu_ee",$parent).val();$totalmarketPrice+=$marketprice_*$count_;);$("#totalmarketPrice").text(" 比市场价"+$marketprice.substr(0,1) + $totalmarketPrice + ".00" );$("#totalPrice").text("购物金额小计"+$price.substr(0,1) + $totalPrice + ".00" );$("#diffPrice").text("节省了 ¥"+($totalmarketPrice-$totalPrice)+"元" ););【商品详情部分代码】$cache_id = $goods_id . '-' . $_SESSION'user_rank'.'-'.$_CFG'lang'$cache_id = sprintf('%X', crc32($cache_id);if (!$smarty->is_cached('goods.dwt', $cache_id) $smarty->assign('image_width', $_CFG'image_width'); $smarty->assign('image_height', $_CFG'image_height'); $smarty->assign('helps', get_shop_help(); $smarty->assign('id', $goods_id); $smarty->assign('type', 0); $smarty->assign('cfg', $_CFG); $smarty->assign('promotion', get_promotion_info($goods_id); $smarty->assign('promotion_info', get_promotion_info(); $goods = get_goods_info($goods_id); if ($goods = false) ecs_header("Location: ./n"); exit; else if ($goods'brand_id' > 0) $goods'goods_brand_url' = build_uri('brand', array('bid'=>$goods'brand_id'), $goods'goods_brand'); $shop_price = $goods'shop_price' $linked_goods = get_linked_goods($goods_id); $goods'goods_style_name' = add_style($goods'goods_name', $goods'goods_name_style'); if ($goods'bonus_type_id' > 0) $time = gmtime(); $sql = "SELECT type_money FROM " . $ecs->table('bonus_type') . " WHERE type_id = '$goodsbonus_type_id' " . " AND send_type = '" . SEND_BY_GOODS . "' " . " AND send_start_date <= '$time'" . " AND send_end_date >= '$time'" $goods'bonus_money' = floatval($db->getOne($sql); if ($goods'bonus_money' > 0) $goods'bonus_money' = price_format($goods'bonus_money'); $smarty->assign('goods', $goods); $smarty->assign('goods_id', $goods'goods_id'); $smarty->assign('promote_end_time', $goods'gmt_end_time');