基于BS的网络商城的设计与实现

基于BS的网络商城的设计与实现

ID:36622585

大小:1.02 MB

页数:76页

时间:2019-05-13

上传者:U-145848
基于BS的网络商城的设计与实现_第1页
基于BS的网络商城的设计与实现_第2页
基于BS的网络商城的设计与实现_第3页
基于BS的网络商城的设计与实现_第4页
基于BS的网络商城的设计与实现_第5页
资源描述:

《基于BS的网络商城的设计与实现》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

毕业设计题目:基于B/S的网络商城的设计与实现学院:计算机与通信学院专业:计算机科学与技术班级:0801学号:200803010130学生姓名:袁再新导师姓名:刘铁武完成日期:2012年6月5日 诚信声明本人声明:1、本人所呈交的毕业设计(论文)是在老师指导下进行的研究工作及取得的研究成果;2、据查证,除了文中特别加以标注和致谢的地方外,毕业设计(论文)中不包含其他人已经公开发表过的研究成果,也不包含为获得其他教育机构的学位而使用过的材料;3、我承诺,本人提交的毕业设计(论文)中的所有内容均真实、可信。作者签名:(学生手写签名)日期:2012年6月10日 毕业设计(论文)任务书题目:基于B/S的网络商城系统的设计与实现姓名袁再新系计算机与通信学院专业计算机科学与技术班级0801学号200803010130指导老师刘铁武职称教研室主任一、基本任务及要求:1.设计任务特点及分析电子商务的迅猛发展与中小网站企业建设的严重滞后,重构网站迫在眉睫。基于B/S的网络商城系统,主要实现商品搜索、商品展示和商品订购,具体包括普通/高级商品搜索、商品的预览、加入购物车、下订单与购买商品金额结算。2.主要任务本课题主要要完成的功能如下:(1)会员登录与信息修改:对一个网络购物平台而言,需要了解客户的具体资料以及个人购物的必要信息,网络购物平台需要对使用商城客户进行身份验证,登录后,用户可修改自己的信息。(2)商品搜索与展示:网络购物平台(商城系统)需要让用户找到自己所喜爱的商品,并查询有关商品的信息,并将商品分门别类的展示给客户,用以打到宣传的目的。(3)购物与结算:客户找到喜爱的商品,可以先放到购物车,然后继续购物,当客户决定不买其中的一件商品时,则可从购物车里删除商品,如决定购买,则将购物车中商品进行结算,支付。二、进度安排及完成时间:第2周老师讲解课题,明确课题任务与要求,学习资料收集检索方法,并搜索收集所需中英文资料。第3周阅读资料、书籍,学习所需知识,撰写文献综述。第4~5周毕业实习。第6周完成毕业实习报告撰写;建立毕业设计实验环境;初步拟订设计方案。第7~8周详细设计:对概要设计中产生的功能模块进行过程描述,设计功能模块的内部细节,包括算法和数据结构,为编写源代码提供必要的说明。第9~14周实现:将详细设计说明转化为所要求的程序设计语言或源程序。并对编写好的源程序进行程序单元测试,验证程序模块接口与详细设计说明的一致性。第15~16周文档的生成与整理,给指导教师修改;完成毕业设计说明书、用户手册;第17周答辩准备毕业答辩 摘要本网上购物系统是一个基于Internet,采用B2C(BusinesstoConsumers)模式,并根据现有的网上购物系统的现状而设计开发的电子商务平台。它不但可以扩大商家的规模和市场影响力,而且可以减少企业的经营成本,提高工作效率。本文首先介绍了网上购物系统的现状及开发背景,然后论述了系统的设计目标,系统需求和总体设计方案,较详细的论述了系统的详细设计和实现。最后,本文对网上购物系统进行了系统检测并提出了还需要改进的问题。本系统主要为用户提供了会员注册,购物车管理,商品搜索,用户资料修改等功能,为管理员提供了商品管理,用户信息管理,新闻信息管理,广告链接管理等功能。在设计方面,本系统采用B/S三层结构,同时使用PHP技术进行动态页面的设计,从系统的安全性和代码的可重用性方面考虑,运用dreamwaver对程序的关键代码进行封装。后台数据库选MySQL数据库。关键词:B/S结构;PHP;MySQL AbstractTheshoponlinesystemisaelectroniccommercialplatformwhichhasbeendesignedaccordingtothesituationofshoponlinesystembasedonInternetwithB2Cmode.Itcannotonlyenhancethescaleofshoppingcentreandmarketinfluence,andcanalsoreducetheenterprise’srunningcost,improveworkefficiency.Thethesishasfirstlyintroducedthepracticalsituationandthedevelopingbackgroundofthesystem.Andthenhasdescribedthedesigninggoal、systemneedandthewholedesigningplan,hasdescribedthedetaileddesignandrealityofthesystemindetail.Finally,conclusionhasbeendrawnaboutthesystemandproblemhasalsobeenraised.Thesystemhasmainlyprovideduserswiththefollowingfunctions:membershipregistration、shoppingcarmanagement、goodssearch、informationmodifyetc.Ithasalsoprovidedmanagerswithgoodsmanagement、customerinformationmanagement、newsmanagement、admanagementandsoon.IthasbeendesignedwithB/Smodeofthree-tierstructure,PHPtechnologyindynamicpagedesign.Consideringfromthesecurityandreusingcodeofthesystem,keycodehasbeensecuredbyJavaBeantechnology.Accessdatabasehasbeenusedasthebackgrounddatabase.Keywords:B/S;PHP;MySQL 目录摘要IAbstractII前 言1第1章绪论21.1系统开发背景21.1.1网上购物的发展21.1.2网上购物系统的现状21.2系统实现的目标21.3系统的开发意义3第2章网上购物系统设计与需求分析42.1网站设计所要遵循的原则42.2网站的设计目标62.3网站可行性分析62.4网站的深入调查72.5网站设计的特点72.6网站开发的设计思想72.7系统设计的总体规则8第3章系统的开发技术及主要架构93.1开发技术的选择93.2系统的主要架构及开发模式93.2.1基于B/S的体系结构93.2.2基于MVC的应用开发模型10第4章系统的功能和流程分析124.1网站的功能分析124.2平台功能模块的设计分析124.3系统流程分析134.3.1前台购物流程134.3.2注册功能流程134.3.3商品搜索流程144.3.5商品管理流程154.3.6购物车流程16 第5章系统功能的具体实现175.1系统数据库表的基本设计175.2功能总体说明205.2.1目录结构说明205.2.2主要功能图215.3主要功能模块的实现215.3.1数据库的连接215.3.2前端控制器模式的介绍与实现235.3.3用户登陆模块的实现245.3.4购物车模块的实现315.3.5搜索模块的实现355.3.4后台管理模块的实现36第6章系统测试及难点分析426.1系统测试426.1.1系统关键部分测试分析426.1.2单元测试分析426.1.3测试分析总结及说明436.1.4系统的性能分析436.2系统中所存在的问题及解决方案446.2.1系统的整体设计和规划中的问题446.2.2开发功能模块所遇到的难点446.2.3系统中存在的问题及拟定的解决方法45结束语46参考文献47致 谢48附录49 前 言目前,网络正以一种前所未有的冲击力在影响着人类的活动,包括人类的生产和日常生活。网络的诞生和发展,颠覆了传统的信息传播方式,冲破了存在于传统交流方式中时间和空间的种种壁垒,极大地改变了人类从物质到精神、从形式到内容、从生产到生活的各种活动,并且给人类带来了新的机遇和挑战。2006年1月17日,中国互联网络信息中心(CNNIC)在京发布“第十七次中国互联网络发展状况统计报告”。报告显示,截至2005年12月31日,我国上网用户总数突破1亿,为1.11亿人,其中宽带上网人数达到6430万人。目前,我国网民数和宽带上网人数均位居世界第二。国家顶级域名CN注册量首次突破百万,达到109万,成为国内用户注册域名的首选,稳居亚洲第一。上网计算机数达到4950万台,网络国际出口带宽达到136106M,网站数达到69.4万个。IP地址总数达到7439万个,仅次于美国和日本,位居世界第三。在互联网服务业务方面:电子邮件、搜索引擎、网上银行、在线交易、网络广告、网络新闻、网络游戏等服务业务仍然快速的发展着。而本次毕业设计的任务是,构建一个电子商务网站,采用的主要技术解决方案是基于服务器端的脚本语言PHP、开源数据库MYSQL,WEB服务器Apache,以及操作系统windows。PHP是PersonalHomePage的缩写,是由SunMicrosystems公司倡导、许多公司参与建立一种动态网页技术标准,它在动态网页的建设中有强大而特别的功能。PHP是一种服务器端HTML(或XML)嵌入PHP代码的脚本语言,是开发Web动态网站快速而有效的工具,PHP的技术的优势:1.PHP是开源语言,具有成本低的天然优势。2.可维护性。由于PHP技术是一种开放的、跨平台的结构,因此Web服务器、平台及其他组件能很容易升级或切换,且不会影响PHP基本的应用程序。3.产品的多样性。目前,在国内PHP还是一种较新的技术。但PHP+MYSQL+Apache+linux目前已经成为开发电子商务平台的主流技术。随着国内与国际的接轨,PHP必将成为网站开发技术的首选。 第1章绪论1.1系统开发背景1.1.1网上购物的发展近年来,随着Internet的迅速崛起,互联网已日益成为收集提供信息的最佳渠道并逐步进入传统的流通领域。于是电子商务开始流行起来,越来越多的商家在网上建起在线商店,向消费者展示出一种新颖的购物理念。网上购物系统作为B2B,B2C(BusinesstoCustomer,即企业对消费者),C2C(CustomertoCustomer,即消费者对消费者)电子商务的前端商务平台,在其商务活动全过程中起着举足轻重的作用。本文主要考虑的是如何建设B2C的网上购物系统。网上购物是一种具有交互功能的商业信息系统。它向用户提供静态和动态两类信息资源。所谓静态信息是指那些比经常变动或更新的资源,如公司简介、管理规范和公司制度等等;动态信息是指随时变化的信息,如商品报价,会议安排和培训信息等。网上购物系统具有强大的交互功能,可使商家和用户方便的传递信息,完成电子贸易。这种全新的交易方式实现了公司间文档与资金的无纸化交换。1.1.2网上购物系统的现状目前在国内较为常用的购物系统开发语言有PHP,JSP,ASP.NET,ASP。而PHP作为一个开源产品,在短短的几年时间里,已倍受广大网页程序员的喜爱。PHP与MYSQL的组合,已成为各企业、公司的一种普遍采用的技术方案。一些中小企业由于技术成本等问题,一直采用老旧的系统,而出现的PHP与MYSQL组合对于构建网上购物系统而言已成为理想的解决方案。1.2系统实现的目标现在流行的网上购物系统不仅要有漂亮的网页,更要有严谨的规划,注重每一个细小的环节。这样才能使得在电子交易时避免不必要错误发生。我们将使用HTML、PHP等技术来编辑网页,并运用PDO技术把数据库和动态网页相关联。传统的管理信息系统信息获取方法是由专业文字录入人员将信息输入到管理系统的数据库中,这种方法在数据量不大时有很多的应用场合。当数据量比较大,并且有较强的专业性时,录入的费用和出错的可能性都相应上升。本设计在实际应用中的解决方案是建立网站, 以及自己的数据库,使得所需商品信息可以及时的保存、更新,可以更好的及时了解商品买卖的情况。1.3系统的开发意义Internet的发展,为改变传统的商业运作模式提供了一种技术上的可行性的方案:利用Internet的技术和协议,建立各种企业内部网Intranet,企业外部网Extranet,通过廉价的通讯手段,将买家与卖家、厂商和合作伙伴紧密结合在了一起,消除时间与空间带来的障碍,从而大大的节约了交易成本,扩大了交易范围。而在实际的生活中,这种方案已经被广泛的运用到了实际的商业活动中了,人们将这种交易模式称为:电子商务。当今比较流行的网上购物系统国外有“淘宝(www.taobao.com)”,国内有“当当(www.dangdang.com)”。它们都是相当优秀的电子商务网站,对其他的网站提供了良好的典范。设计中可以学习参考他们的思想,了解和熟悉整个网站的开发流程及完整的电子商务网站应有的功能和注意事项。设计和完成一个电子商务网站的,将会牵涉到许多技术上的问题,如:动态网页制作技术的,后台数据库的设计和管理,通过实际的制作个网站,可以避免纸上谈兵,在实践中掌握上述技术的使用。 第2章网上购物系统设计与需求分析系统分析是平台开发的一个不可缺少的环节,为了能够使本系统更好、更完善地被设计出来,就必须先进行调查研究。在系统调查的基础上,对新系统的功能进行细致的分析,从而才能够开发出完整的系统设计2.1网站设计所要遵循的原则企业的网站模式设计越来越人性化了,中小企业都开始经营起网络营销,网站制作构成方案也就是一个企业发展之路,也就是说,首先要打好基础网站模式,然后再从这个方向去实行网站的商业模式。中小企业通过网络把公司的产品及服务信息都以一个网站平台来分享出来,那用户看到所需要的产品,那就可以第一时间去谈电子商力,同时,双方就可以达到双赢。从此中小企业就可以通过网站是INTERNET上宣传和反映企业形象和文化的重要窗口。企业网站设计显得极为重要,下面是一些商业企业网站设计主要原则介绍。一、明确建立商业网站目标及用户需求在互联网中,建设一个网站并发布网站,是展现企业形象、介绍产品和服务、体现企业发展战略重要途径,因此必须明确设计站点的目的和用户需求,从而做出切实可行的设计计划。要根据消费者需求、市场状况、运营模式、企业自身情况等进行综合分析,牢记以“消费者(customer)”为中心,而不是以“美术”为中心进行设计规划。不管网站制作师设计什么类型的网站时,都要考虑到网站是以客户体验为中心来建设的,而不是考虑到个人的想法或为了追求好看而去设计一些对用户体验很差的网页,要以中小企业的发展及企业的产品风格去设计。二、总体设计方案主题鲜明在目标明确的基础上,完成网站构思创意即总体设计方案。龙眼儿对网站整体风格和特色作出定位,规划网站组织结构。Web站点应针对所服务对象(机构或人)的不同而具有不同形式。有些站点只提供简洁文本信息;有些则采用多媒体表现手法,提供华丽图像、闪烁的灯光、复杂页面布置,甚至可以下载声音和录像片段。优秀Web站点把图形表现手法和有效的组织与通信结合起来。要做到主题鲜明突出,要点明确,以简单明确的语言和画面体现站点主题。调动一切手段充分表现网站的个性和情趣,办出网站特点。Web站点主页应具备基本成分包括:页头:准确无误地标识你的站点和企业标志;Email地址:用来接收用户垂询;联系信息:如普通邮件地址或电话;版权信息:声明版权所有者等。注意重复利用已有信息。如客户手册.公共关系文档.技术手册和数据库等可以轻而易举地用到企业的Web站点中。 三、商业网站版式设计网页设计作为一种视觉语言,要讲究编排和布局,虽然主页设计不等同于平面设计但它们有许多相近之处,应充分加以利用和借鉴。版式设计通过文字图形的空间组合,表达出和谐与美。一个优秀网页设计者也应该知道哪一段文字图形该落于何处,才能使整个网页生辉。多页面站点页面的编排设计要求把页面之间有机联系反映出来,特别要处理好页面之间和页面内的秩序与内容的关系。为了达到最佳视觉表现效果,应讲究整体布局合理性,使浏览者有一个流畅的视觉体验。四、色彩在网页设计中的作用色彩是艺术表现的要素之一。在网页设计中,根据和谐、均衡和重点突出的原则,将不同色彩进行组合.搭配来构成美丽的页面。根据色彩对人们心理的影响,合理地加以运用。在色彩运用过程中,还应注意一个问题:由于国家和种族.宗教和信仰的不同,以及生活的地理位置.文化修养的差异等,不同人群对色彩的喜恶程度有着很大差异。在设计中要考虑主要读者群的背景和构成。五、企业网页形式与内容相统一有好的企业网页形式以外,还要有丰富的内容来支持,因为不管你的网站设计的多么漂亮迷人,没有真正有用的内容,那也等于没有用,那想做好这方面的事情也不难,首先要将丰富的意义和多样的形式组织成统一的页面结构,形式语言必须符合页面内容,体现内容的丰富含义。运用对比与调和、对称与平衡、节奏与韵律以及留白等手段,通过空间、文字、图形之间相互关系建立整体的均衡状态,产生和谐的美感。WEB新势力广州网页设计中以点、线、面的运用并不是孤立,很多时候都需要将它们结合起来,表达完美的设计意境,通过网页的设计中就可以展现出企业的一个模式。六、网站空间的构成和虚拟现实网络上的虚拟空间是一个假想空间,网站只能通过这个空间来把他展现到互联网上,让每一个人都能在网络上看到你的网站设计与网站中的信息,这种空间关系需借助动静变化.图像的比例关系等空间因素表现出来。制作网站的同时,都要上传页面中,图片、文字位置前后叠压,或页面位置变化所产生的视觉效果都各不相同。图片、文字前后叠压所构成的空间层次目前还不多见,网上更多的是一些设计比较规范、简明的页面,这种叠压排列能产生强节奏的空间层次,视觉效果强烈。七、网站内容要每天保持更新一个网站建设已完成了,那要如何去增加和丰富网站的内容呢!也要企业Web站点建立后,要不断更新内容。站点信息的不断更新,让浏览者了解企业的发展动态和网上职务等,同时也会帮助企业建立良好形象。 在企业Web站点上,要认真回复用户的电子邮件和传统的联系方式如信件.做到有问必答。最好将用户用意进行分类,如售前一般了解.售后服务等,由相关部门处理,使用站访问者感受到企业的真实存在并由此产生信任感。注意不要许诺你实现不了的东西,在你真正有能力处理回复之前,不要恳求用户输入信息或罗列一大堆自己不能及时答复的电话号码。如果要求访问者自愿提供其个人信息,应公布并认真履行个人隐私保承诺。2.2网站的设计目标本平台利用现在比较广泛的PHP+MYSQL数据库的架构实现的,此系统分为前台管理和后台管理。前台管理是友好的操作界面,供用户浏览、查询使用。包括:浏览商品、查询商品、订购商品、购物车、用户维护等功能;后台管理是提供给管理员的,其中包括:商品管理、用户管理等。使管理员从繁琐的手工操作中解脱出来,并提高了办公效率。2.3网站可行性分析随着计算机技术的发展和网络人口的增加,网络世界也越来越广博,越来越丰富,电子商务已经成为网上的一股潮流。我们相信要不了太长有时间,顾客就可以在网络世界上获得他们在现实世界上可以获得的所有商品和服务。可行性研究是为了弄清楚系统开发的项目是不是可以实现和值得进行研究的过程,实际上是一次大大简化系统分析和系统设计的过程,所以,进行可执行性的分析是非常必要的,也是很重要的,经过最初的设计目标和进行的市场调查得出以下四点的可行性分析:1、经济可行性:该平台设计只是作为本人的毕业设计,又因为本人的设计能力有限,其功还不能完善,所以没有什么经济效益可谈。2、技术可行性:PHP+MYSQL+Apache的技术已经较为成熟。3、运行可行性:该系统需要WINDOWS+MYSQL+PHP+Apache环境,在此环境下系统正确连接数据库后即可正常运行。4、法律可行性:该平台是作为毕业设计与商业无关,又因为是自主开发设计,因此不会构成侵权,在法律上是可行的。通过以上的可行性分析,我将采用PHP+javascript相结合的技术,运用MYSQL数据库对网站进行建设。 2.4网站的深入调查经过以上的初步调查和研究,并且确定了该平台的可行性,并决定开发本平台,为了能够对现行的平台内容进行充分了解,使所要开发的平台更具有实用性和适应性,通过两个月的实习调查和指导老师的耐心介绍,设计出该平台功能如下:1.能够完成用户基本信息录入的注册和用户基本信息的个人前台与后台管理。2.能够完成管理员对网站的商品资料(商品添加、商品审查)会员管理(会员审查)、网站信息管理(新闻添加、修改删除、公告设置),以及常规设置(广告添加,友情链接)的功能。3.能过电子商品的名称,电子商品的分类进行搜索。4.能够通过查看购物车对所选商品进行确定、挑选,通过定单查询对支付费用进行确定。经过前一阶段的调查与研究分析,我已确定了该平台设计的主要功能,对每个功能模块也作了具体描述,下面就来具体分析该平台的设计特点与具体思想。2.5网站设计的特点我所设计和开发的网上购物平台是经过很长时间的调查和分析才开始具体实施的,它的主要特点是改变了以往的购物只能过现实的商场才能达到的结果,采用Web技术,借助于Internet互联网广泛应用技术,达到资源共享,提高以往购物的局限性,缩短人们的时间和提高工作效率,具有较好的交互性,从而实现信息化,规范化,系统化,网络化的平台,使整个购物活动过程简单、方便、易行。2.6网站开发的设计思想网上购物平台主要是对后台管理和前台操作。后台管理是管理员对本网站的维护,通过商品资料(商品添加、商品修改)会员管理(会员审查)网站信息管理(新闻添加、修改删除、公告设置),以及常规设置(广告添加,友情链接)等功能达到对网站的管理。前台操作是用户登录到本网站,可以进行用户注册,通过网站的精品推荐或商品搜索功能,找到自己想要买的商品,装入购物车,提交定单进行购买。网上购物平台的特点是客户和电子商品信息量很大,管理员需要整理的信息很多,为让管理员轻松、方便、快捷的管理,该平台采用符合购买电子商品基本的原则,满足广大客户的日益增长的数量,并达到操作过程中的直观、方便、实用、安全等要求。 2.7系统设计的总体规则无论哪个网站都要有它自己的设计规则。该平台也一样,它的主要设计规则有:简单性:在实现平台的功能的同时,尽量让平台操作简单易懂,这对于一个网站来说是非常重要的。对于一个购买物品的平台,所针对的是消费群体而非专业用户,系统的简单易用,能够消费者或者是用户群体感觉亲近,友好,从而增加网站的浏览次数,增加更多的潜在客户。针对性:该平台设计是网上购物系统及后台管理的定向开发设计,所以具有专业突出和很强的针对性。实用性:该平台能完成电子商品展示和管理员管理的基本信息,并提供给客户较为友善的界面,相对简易的操作,基于这样的特性,使得该B/S架构的商城系统具有良好的实用性。 第3章系统的开发技术及主要架构3.1开发技术的选择合理的选择开发技术,对于网站开发的完成情况有着非常重要的影响。要开发一个网站,首先要选择一个动态网页开发技术。当前比较流行的动态网页开发技术有ASP、JSP、PHP。它们的特性比较如表3-1所示。表3-1asp/php/php比较表技术名称ASPJSPPHP对数据库的支持好好好性能较差较好好使用平台WinLinux/WinLinus/Win安全性不好好好成本较高较高低跨平台不好好好这三种都是在传统的HTML代码中,利用HTML标签的扩展,构成页面。不难看出,php的综合实力是最强的,尤其是在安全性和跨平台性两个方面,比其他的两种技术都要好,因此,最后我们选择php技术作为动态网页的开发技术。3.2系统的主要架构及开发模式系统的建设关键在于其所使用的架构,而网上购物这种基于web的系统,传统的c/s架构已经不能满足大量用户的访问和操作,b/s基于浏览器的架构则是目前网络系统应用的主流,它将大量的数据处理工作交给服务器端来处理,客户端只用通过普通的IE浏览器即可访问系统,方便快捷而且利于系统的更新和维护。基于mvc的开发流程则使开发过程更加清晰明了,利于做一些复杂的逻辑实现,从而节省了开发周期和开发成本。3.2.1基于B/S的体系结构 在B/S体系结构系统中,用户通过浏览器向分布在网络上的许多服务器发出请求,服务器对浏览器的请求进行处理,将用户所需信息返回到浏览器。B/S结构简化了客户机的工作,客户机上只需配置少量的客户端软件。服务器将担负更多的工作,对数据库的访问和应用程序的执行将在服务器上完成。浏览器发出请求,而其余如数据请求、加工、结果返回以及动态网页生成等工作全部由WebServer完成。实际上B/S体系结构是把二层C/S结构的事务处理逻辑模块从客户机的任务中分离出来,由Web服务器单独组成一层来负担其任务,这样客户机的压力减轻了,把负荷分配给了Web服务器。这种三层体系结构如图3-1所示。Browse浏览器Web服务器数据库图3-1B/S三层架构示意图这种结构不仅把客户机从沉重的负担和不断对其提高的性能的要求中解放出来,也把技术维护人员从繁重的维护升级工作中解脱出来。由于客户机把事务处理逻辑部分分给了功能服务器,使客户机一下子"苗条"了许多,不再负责处理复杂计算和数据访问等关键事务,只负责显示部分,所以维护人员不再为程序的维护工作奔波于每个客户机之间,而把主要精力放在功能服务器上程序的更新工作。这种三层结构在层与层之间相互独立,任何一层的改变不会影响其它层的功能。3.2.2基于MVC的应用开发模型在传统的基于Web的应用系统中,例如ASP,CGI等,通常开发者将业务逻辑,数据逻辑、展示逻辑等混杂在一起,在同一个界面面里既进行后台数据库的访问和操作,同时还包含业务流程和页面表示。这样编写出来的程序,既不利于程序员对业务代码的调试,同时也不利于编辑人员进行交互页面的设计。同时系统也不具备可扩展性,当我们要在现有业务上进行扩展的时候,通常无法借助于现有的资源和应用,而只能够重新编写,大大增加了投资,延长了系统上线的时间,失去了竞争市场的优势。在本网上购物系统中,将采用通行的MVC模式来构建应用。这种结构解决了前面所述的所有问题,MVC的逻辑图如下图3-2所示。 Control服务控制View显示方式Model业务逻辑模型输入请求输出Html其他图3-2MVC业务流程示意图通过这种方案,我们可以迅速地实现整个业务,其优势和特点如下:Model(模型)层:将具体的业务封装,具备安全、高性能、可重用等优秀的特征。View(视图)层:由PHP、HTML组成。这一层次的特点是能够真实地展示和客户交互的界面,具备可描绘的功能。同时能够嵌套动态数据,可以进行动态页面的展示。同时可以方便地进行客户端的个性化定制。根据每个客户的需求来展示不同风格的界面。Controller(控制器)层:是非常重要的一层,这一层是连接View和Model的纽带,同时也是将这两层进行最大限度分离的工具。通过这种模型的建立,我们的应用系统具备了非常好的性能和可扩展性。将业务组件和展示页面进行分离,并通过Controller来描述调用关系,一方面可以提高效率,另一方面也可以增加系统扩充的能力,使我们的系统可以进行最快速度的业务扩展,以满足不同用户、不同阶段、各种各样的业务需求。第4章系统的功能和流程分析 4.1网站的功能分析经过前期的深入调查和研究,总结出该平台需要完成的一些具体功能,分析如下:用户管理:能够完成用户基本信息录入的注册和用户基本信息的修改。管理员管理:能够完成管理员对网站的商品信息管理(商品添加、商品审查)、会员管理(会员审查)、网站信息管理(新闻添加、修改删除、公告设置),以及常规设置(广告添加,友情链接)的功能。搜索功能:能过电子商品的名称进行搜索。查询功能:能够通过查看购物车对所选商品进行确定、挑选。4.2平台功能模块的设计分析在平台功能的分析基础上,得到本平台的功能模块图如图4-1所示。网上购物平台index.php。商品修改用户管理管理进入新闻管理用户注册商品管理商品添加会员管理广告链接新闻修改新闻添加广告设置链接管理商品名称用户修改会员删除商品搜索网站布局图4-1平台购物模块图 4.3系统流程分析4.3.1前台购物流程购物流程示意图如图4-1所示。浏览商品选择商品订购商品去购物车去收银台提交订单未注册用户已登录注册用户未登录注册用户注册登录图4-2前台购物流程图4.3.2注册功能流程注册流程示意图如图4-2所示。注册入口必选项为空用户名有效?2次密码一致?密码长度符合要求?E-mail地址有效效?其他信息有效注册成功图4-3注册功能流程图 注册的具体实现为:点击主页面的用户注册选项后,会弹出一个注册信息页面,用户需要如实填写用户名,密码,E_mail,地址,电话,真实,姓名等各项信息,提交后,系统进行检测判断该用户名是否已经注册过,如果已经存在则弹出新页面,提示用户该用户名已经注册过,如果没有则进行下一步判断,用户输入的两次密码是否一致,然后依次往后判断用户所填写的各项信息是否符合要求,直到所有信息均正确无误,系统将该用户注册信息写入会员表即member并提示用户注册成功,用户登陆后,就可以进行有效的购物了。4.3.3商品搜索流程商品搜索流程示意图如图4-4所示。开始搜索输入条件搜索结果查看商品购物车下订单继续搜索是否图4-4商品搜索流程图商品的搜索功能使用户更加方便的进行自己所需要的商品的查询,节省时间,提高效率。用户搜索时只要输入商品的关键字就能搜索到所有相关的商品。并且能列出通过搜索得到的商品的详细信息。4.3.4用户登录流程用户登录,首先要有一个提供用户登录的表单。用户登录的表单应该嵌入整体的结构当中。在实际的应用中,可以这样设计,如果用户没有登录,则在页面中显示用户登录的选项,用户登录后,则可隐藏用户登录的选项而代之以用户的基本信息。首先,用户要有一个用户名和密码。商务网站需要很高的稳定性和安全性,因此对用户名不允许使用恶意的代码作为用户名。同时对密码也要求保密,将密码加密后再存入数据库。登陆流程示意图如图4-5所示。 登录入口取得用户名和密码将UserID存入session中查询用户是否存在核对密码是否正确登录成功是是否否图4-5用户登陆流程图4.3.5商品管理流程商品管理查询商品修改删除满意否返回添加商品商品管理流程示意图如图4-6所示。图4-6商品管理流程图 在该功能里管理员可以进行不需要的商品的删除,在这里管理员当然也可以浏览到商品的详细信息。并且比普通用户在浏览商品界面里所看到的商品信息多一个该商品在数据库中的ID。4.3.6购物车流程购物车具体的实现可采用这种形式:定义一个购物车的类(Class)。1.列出商品的列表,使用户能够自由选择所需要的商品。2.当用户在点击“添加到购物车”的链接时,执行如下功能:检查用户购物车类是否存在。如不存在,则建立,并注册这Session变量;在有用户购物车类存在的情况下,检查该类中是否有该商品。如存在,则商品数量相应加1;如没有该商品,则将该商品添加到该类中。购物车流程示意图如图4-7所示。购物车查看商品满意吗下订单调整商品图4-7购物车流程图 第5章系统功能的具体实现5.1系统数据库表的基本设计在建设网站系统之前,我们必须对系统所用到的数据进行大致的分类和具体的结构设计,既要做到清晰明了,又要能适应系统各项功能的调用,而不至于产生结构上的逻辑混乱,保证关键数据在意外情况下不会被破坏,可以说数据库是系统的重中之重。数据库设计要遵循一些规则,一个好的数据库满足一些严格的约束和要求。尽量分离各实体对应的表,一个实体对应一个表,搞清楚该实体有哪些属性,对应有些什么字段,以及各实体之间有何种联系。实体、属性与联系是进行概念设计时要考虑的三个元素,也是一个好的数据库设计的核心。从实际出发,经过仔细地设计,得到各表的设计如表5-1至5-7所示。表5-1商品信息表字段字段名类型宽度小数位索引可否为空Hw_id商品编号自动编号是否Hw_name商品名称文本型50否Hw_cash商品价格数值型182Hw_content商品信息备注型255Hw_pic商品图片文本型255Hw_buys商品数量数值型18Hw_date商品日期日期型[说明]对于商品信息表,因为经验不足,我将其关键字段hw_id商品编号采用的是MYSQL数据库中的自动编号,虽然也确定了商品信息的唯一性,但不具备直观的特点,在实际应用中最好是将其设置一个命名规则,管理人员在添加商品的时候能够自动产生一个有一定规则和一定意义的命名规则,方便管理人员对其进行管理和维护,例如对于手机类商品可将其编号设置为mobile+型号+添加日期,这样更容易对商品进行管理。Hw_pic字段代表图片,但在这里存放的只是它的路径所以应该使用文本类型。表5-2会员信息表member字段字段名类型宽度小数位索引可否为空User_id会员编号自动编号是 User_name会员帐号文本型50否User_pass会员密码文本型50否User_adds会员地址文本型255User_mail会员E_Mail文本型50User_tel会员电话文本型50User_regtime注册时间日期型User_postcode邮政编码文本型50User_namec会员姓名文本型50[说明]对于会员信息表,会员编号也要有一定的命名规则,另外会员帐号的命名规则也有一定要求,如必须以字母开头,不能有特殊字符,长度大于4个字符小于16个字符等等,还有一个需要注意的是用户密码,MYSQL数据库保存用户密码时是以明文形式保存的,这对系统来说是极不安全的,因此需要我们用php中的MD5函数将输入表单中的密码加密,然后在保存到MYSQL数据库中。表5-3购物车表basket字段字段名类型宽度小数位索引可否为空Basket_id购物车编号自动编号是否Hw_id商品编号自动编号是否User_name会员帐号文本型50否Basket_count商品数量数值型18Basket_date购物时间日期型Basket_check是否结帐是/否Hw_name商品名称文本型50Hw_cash商品价格数值型182Sub_number订单编号文本型50是[说明]购物车表则是系统中与其他几个表关系最多的一个表了,它包含了商品表,会员表中的几个重要字段,是我们进行最后购物统计的主要依据,我们在确定购买一样商品的时候,系统将数据写入购物车表,在用户确定去结帐之前basket_check值为否,确定之后值变为是,一个用户可能对应多个basket记录,但在统计的时候,仅对basket_check为真的记录进行统计,这样就可以避免造成统计错误。 表5-4管理员表admin字段字段名类型宽度小数位索引可否为空Admin_id管理员编号自动编号是Admin_name管理员帐号文本型50Admin_pass管理员密码文本型50[说明]该表和会员表一样存在字段的命名规则的要求,出于安全考虑对于管理员帐号发放应该谨慎,管理人员数量一定要控制,越少越安全,在实际应用中,我们还要对整个数据库进行加密,以防止系统重要数据泄漏。表5-5新闻列表news字段字段名类型宽度小数位索引可否为空News_id新闻编号自动编号是News_title新闻标题文本型255News_content新闻内容备注型News_date新闻日期日期型[说明]存储网站新闻信息,与其他表没有关联。表5-6网站信息表system字段NameMailTelAddsOICQMSNSitenameFaxCode字段名姓名信箱电话地址QQMSN网站名称传真邮编类型文本文本文本文本数值数值文本文本文本[说明]该表主要存储一些网站信息,如系统管理员的联系方式等,以页面的形式提供给用户,与其他表没有关联。表5-7广告信息列表ad字段字段名类型宽度小数位索引口否为空Id自动编号自动编号是否url链接地址文本型50Wordlink链接名称文本型50Content链接内容文本型50 [说明]该表为单独的表,与其他表没有关联,主要存储一些链接网站或广告信息。5.2功能总体说明5.2.1目录结构说明目录分布如下图:图5-1目录结构图(1)admin用于存储系统管理员的后台操作脚本,包括商品类别管理、商品信息管理、站内公告管理、订单管理、系统用户管理等功能;(2)pics用来存储商品的图片资料,管理员上传的商品图片也存在这里。(3)images用来存储网页上的图片文件。(4)smarty包含smarty.class.php,用来生成模版的类(5)template模版文件夹,用来存放模板页(.tpl)(6)public存放的是公共的js脚本以及css样式表(7)index.php前台页面的入口,admin.php后台管理的入口,config.ini.php为系统配置文件,ini.inc.php为初始化必须的工作(注意,这些配置文件以及入口文件在后面的模块设计中讲解,具体代码参照附录index.php,config.php,ini.inc.php) 5.2.2主要功能图主页面index.php。商品修改用户登陆注册管理进入添加到购物车新闻管理资料修改商品管理商品添加会员管理广告链接新闻修改新闻添加广告设置链接管理是否会员退出返回搜索物品选购物品结帐付款填写订货单购物成功会员删除退出图5-2主要功能图5.3主要功能模块的实现5.3.1数据库的连接访问数据库可以用mysql和mysqli的函数库,但是为了不同的数据库的移植,通常采用PDO(当然还可以用ADODB和MDB2等同类数据访问抽象层,但PDO更高效),本系统采用的是PDO连接数据库,其核心代码如下:protected$pdo;protected$tabName;protected$messList;protected$fieldList;function__construct(){try{$this->pdo=new PDO('mysql:dbname='.DB_NAME.';host='.DB_HOST,DB_USER,DB_PSWD,array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION));$this->pdo->exec('setnamesgbk');//解决字符编码问题}catch(PDOException$e){echo'数据库连接失败:'.$e->getMessage();exit;}}(1)PDO::ATTR_ERROR=>PDO::ERRMODE_EXCEPTION表示设置错误模式为异常处理机制,当数据库连接失败时,会返回一个数据库连接的错误。PDO提供了三种不同的错误处理模式,分别用来满足不同风格的编程:PDO_ERRMODE_SILENT这是默认模式。PDO将只设置错误代码,以通过errorCode()和errorInfo()方法对语句和数据库对象进行检查。如果错误是由于对语句对象的调用而产生的,那么可以在那个对象上调用errorCode()或errorInfo()方法。如果错误是由于调用数据库对象而产生的,那么可以在那个数据库对象上调用上述两个方法。PDO_ERRMODE_WARNING除了设置错误代码以外,PDO还将发出一条传统的E_WARNING消息。如果您只是想看看发生了什么问题,而无意中断应用程序的流程,那么在调试/测试当中这种设置很有用。PDO_ERRMODE_EXCEPTION除了设置错误代码以外,更为有趣的是PDO还将抛出一个PDOException,并设置其属性,以反映错误代码和错误信息。这种设置在调试当中也很有用,因为它会放大脚本中产生错误的地方,从而可以非常快速地指出代码中有问题的潜在区域(记住,如果异常导致脚本终止,则事务将自动回滚)。异常模式另一个有用的地方是,与传统的PHP风格的警告相比,您可以更清晰地构造自己的错误处理,而且,比起以静寂方式以及显式地检查每个数据库调用的返回值,异常模式需要的代码/嵌套也更少。(2)$this->pdo->exec(‘setnamesgbk’)表示设置数据库的字符集为gbk,这语句通常用来解决字符集的编码问题。由于MySql数据的默认字符集是UTF-8,另外,许多软件的默认编码也是UTF-8,这就给显示或存储数据造成了很大麻烦,采用该语句有时候会有意想不到的结果。(3)类中的属性采用protected关键,因为这些属性只要求在本类及其集成类中可以访问。 5.3.2前端控制器模式的介绍与实现前端控制器模式是用一个中心来处理所来到的请求,最后调用视图呈现给用户。当请求可以发到系统的多个地方时,很难避免代码的重复,当系统与视图混杂在一起时,管理视图的切换和选择确实另外的一个难点,然而采用前端控制器模式就很好的解决了这一问题,本系统的前端控制器模式的核心代码如下://包含网站初始化文件require'ini.inc.php';//根据用户访问的模块创建“控制器对象”.例如index.php?m=user访问user模块,相当于$action=newUserAction();eval('$action=new'.ucfirst(isset($_GET['m'])?$_GET['m']:'index').'Action();');//print_r($_POST);//调用控制器中的webRunner()方法开始运行后台程序$action->webRuner();这里我们将会碰到一个疑惑,我们如何找到这些控制器类存储在那个文件中呢,又是如何实现智能实例化呢?这里就需要用到php中的autoload函数来实现(通常这个函数放在初始化的php文件中,而本系统就采用这种方式),通过require’ini.inc.php’来加载初始化php文件,本处采用reiquire,一个重要的原因在于,如果加载出现问题,就会终止脚本的执行,这对于网站的安全来说,不容忽视,因为我们不想让一些敏感的报错信息让用户看到。初始化的网站配置信息核心代码如下所示://设置自动加载所需的类文件function__autoload($className){if(substr($className,-6)=='Action'){include(APP_CLASS_PATH.'Action/'.$className.'.class.php');}elseif(substr($className,-5)=='Model'){include(APP_CLASS_PATH.'Model/'.$className.'.class.php');}elseif($className=='Smarty'){include(SHOPS_ROOT.'smarty/libs/Smarty.class.php');}else{include(APP_CLASS_PATH.'public/'.$className.'.class.php');}} 通过autoload函数获得类名,在需要时,include会自动寻找所在的的类文件,具体代码参照附录ini.inc.php5.3.3用户登陆模块的实现用户登陆模块是防止非法用户登陆的第一道防线,通过它可以保护后台数据库的安全性,当用户要进行定购时,首先要进入的就是身份验证界面,只有在密码正确的情况下才能进行以后的购物,如果输入的密码不正确,则不能进行定购。如果用户以浏览者的身份进入网站,则只能进行一般的商品浏览和搜索,而不能进行选购,在点击添加购物车后,系统会判断该用户是否是登陆用户,如果不是则弹出提示页面,提示用户必须先登陆才能定购商品,如果是第一次登陆,请先注册。主页面的效果图如图5-3所示。图5-3主页面示意图登陆的具体实现关键是要通过一个全局数组,即$_SESSION数组来实现,在系统中则由一个单独的登录方法来实现用户登录,以及用户信息的保存。具体代码如下图所示:functionlogin($username,$password){$sql='SELECTidFROM'.$this->tabName.'WHEREuserName='."'".$username."'".'ANDuserPwd='."MD5('".$password."')"; try{$stmt=$this->pdo->query($sql);}catch(PDOException$e){//本语句作为测试用//echo$sql.'
';echo$e->getMessage();exit();}if($stmt&&$stmt->rowCount()>0){$data=$stmt->fetch(PDO::FETCH_ASSOC);$_SESSION['isLoginH']=true;//保存用户的登录状态$_SESSION['username']=$username;//保存用户名$_SESSION['userId']=$data['id'];//保存用户idreturn1;//登录成功}else{return0;//登录失败}}本函数接收表单输入的用户名和密码,返回值为0,1,当查到的行数大于0行时,就保存用户的信息,包括用户名和用户ID,本函数中fetch函数的方式有多种,包括获取关联数组、获取索引数组、获取前两种和获取对象的方式,本函数采用第一种方式,主要是两个方面,一则关联数组容易理解,其次相对后两种方式而言,关联数组的性能要优秀。如果用户还不是会员则提示用户进行注册,用户提交信息之后,系统开始判断用户的注册信息是否有效,首先是用户名是否为空,(该处存在用户名命名规则的问题,后面问题中会详细解决)用户输入的两次密码是否一致,然后依次往后判断用户所填写的各项信息是否符合要求,直到所有信息均正确无误,系统将该用户注册信息写入会员表即member并提示用户注册成功,用户登陆后,就可以进行有效的购物了。注册页面的效果图如图5-4所示。 图5-4注册页面示意图系统对用户的注册信息的验证主要包括一下两个方面的验证,前端javascript,后端php,实现的核心代码如下:一、前端验证(javascript)用户名验证的代码如下:functioncheckUser(){varusername=document.getElementById('username');varuserid=document.getElementById('userid');if(username.value.match(/^s*$/)){userid.innerHTML='用户名不能为空';returnfalse;}elseif(!username.value.match(/^[_A-Za-z]+w*/)){userid.innerHTML='用户名必须以字母或下划线开头';returnfalse;}elseif(username.value.length<3){userid.innerHTML='用户名的长度不能少于3位';returnfalse;}elseif(username.value.length>20){userid.innerHTML='用户名的长度不能超过20位';returnfalse;}else{ varajax=createAjax();//返回一个ajax对象ajax.get("index.php?m=user&a=checkname&username="+username.value,function(data){if(data=='T'){userid.innerHTML='该用户名已经存在';flag1=false;}else{userid.innerHTML='恭喜!该用户名可用';flag1=true;}});}returntrue;}前端验证采用ajax技术(Ajax的实现见附录Ajax.js),当用户验证时无需刷新页面,加快网站访问的速度,验证主要要求为用户名不为空,且长度必须在3-20个字符之间,不能注册相同的用户。Ajax.get中请求页m代表是模块通常一个模块一个类,a代表的是动作(即action),通常一个动作一个方法。手机或电话的验证如下图所示://==========================================================//函数名:checkPhOrTel//功能:匹配电话号码或手机//参数:isPhone传布尔型值,ture表示选择手机,false选择电话//声明:解释权归袁再新所有,任何咨询或意见1257249110@qq.com//本人属于初学者,不足之处欢迎同行指正//=========================================================functioncheckPhOrTel(isPhone){if(typeof(isPhone)=='boolean'){ if(isPhone){vartelph=document.getElementById('phone');vartelphid=document.getElementById('phoneid');}else{vartelph=document.getElementById('tel');vartelphid=document.getElementById('telid');}}else{alert('您传的参数不正确');return;}varpattern=/(^[0-9]{3,4}-[0-9]{3,8}$)|(^[0-9]{3,8}$)|(^0{0,1}1[0-9]{10}$)/;if(!telph.value.match(pattern)){telphid.innerHTML='电话号码输入不合法';flag2=false;}else{telphid.innerHTML='输入正确';flag2=true;}}前端的验证代码当然还包括邮箱验证、密码要求、地址等验证,其实实现的方法较为简单,采用正则表达式进行匹配即可(详细验证见附录check.js)。二、后端验证(php)前端验证可以阻挡用户不合理的输入,但一些网络攻击这常常可以伪造表单绕过前端验证,所以用php做后端验证仍显得重要,验证的部分代码如下(详细验证见附录Validate.class.php)://=================================//函数:dataNoEmpty//功能:验证数据是否为空//参数:data//=================================staticfunctiondataNoEmpty($data){ if(!trim($data)==''){returntrue;}else{returnfalse;}}//======================================//函数:dataMatch//功能:验证数据长度是否超过指定长度//参数:data须被过滤的数据//参数:regular过滤使用的正则表达式//======================================staticfunctiondataMatch($data,$regular){if(preg_match($regular,$data)){returntrue;}else{returnfalse;}}//======================================//函数:checkLenth//功能:验证数据长度是否超过指定长度//参数:data//======================================staticfunctioncheckLength($data,$len){if(!is_int($len)){exit('长度参数不是数字');}else{if(strlen($data)<$len){ returntrue;}else{returnfalse;}}}上面的三个函数给出了具体的注释,但我们需要注意一点的是,三个验证函数都采用了静态函数,使用静态函数验证的好处是,可以使得程序员避免过度实例化所带来的开销,从而影响系统的性能。用户登录之后就进入了会员页面,就可以对会员的信息进行修改,一面展示如下图所示:图5-5会员页面修改会员信息的核心代码如下:functionmod($postList,$uid=''){$id='';$value='';if($uid!=''){$id=$uid;}else{$id=$postList['id'];//作为临时变量unset($postList['id']);} foreach($postListas$key=>$val){if(in_array($key,$this->fieldList)){if(!get_magic_quotes_gpc()){if($key=='userPwd'){$val=md5(addslashes($val));}else{$val=addslashes($val);}$value.=$key."='".$val."',";}else{$value.=$key."='".$val."',";}}}$value=rtrim($value,',');try{$sql='UPDATE'.$this->tabName.'SET'.$value.'WHEREid='.$id;$affected=$this->pdo->exec($sql);}catch(PDOException$e){echo'更新失败;'.$e->getMessage();exit;}return$affected;}其中$postList参数是post上传的一些参数,如username=>admin,分别与数据库中的一些字段对应,$uid表示的用户的ID号,用来唯一标识一个用户。其返回值是受影响的行数。5.3.4购物车模块的实现当用户登陆成功以后,如果找到了希望定购的物品,在点击物品下方的定购以后,系统会弹出一个新的页面,显示该物品已经添加进购物车,然后用户需要选择定购的数量。页面效果图5-6所示。 图5-6购物车示意图在点击确认以后,该物品信息被后台添加到购物车表即basket表中,如果用户需要继续购物,可以继续选择,不断添加,系统会自动将所有信息写入basket表,同时显示用户所购买的物品列表,及合计价格。其展示核心代码实现过程为:classShopcar{//商品列表public$productList=array();/****@paramunknown_type$product传进来的商品*@returntrue购物车里面没有该商品*/publicfunctioncheckProduct($product){for($i=0;$iproductList);$i++){if($this->productList[$i]['name']==$product['name'])return$i;}return-1;}//添加到购物车publicfunctionadd($product){ $i=$this->checkProduct($product);if($i==-1)array_push($this->productList,$product);else$this->productList[$i]['num']+=$product['num'];}//删除publicfunctiondelete($product){$i=$this->checkProduct($product);if($i!=-1)array_splice($this->productList,$i,1);}//返回所有的商品的信息publicfunctionshow(){return$this->productList;}}如果用户在去收银台结帐前对已经选购的物品不满意时,可选择清空购物车,同时系统也将basket表中相关信息删除。用户完成选购之后,可点击收银台付款,系统返回最终选购物品列表和合计价格,如图所示:图5-7收银台结帐示意图 系统只统计basket_check为否的该用户选购的商品信息,给出实现该语句的关键代码如下:$user_name=session[‘user_name’];$sql=’select*frombasketwhereuser_name='.$user_name.'andbasket_check=’.’false’;$result=$this->pdo->query($sql);用户再一次确认后,系统会显示购物成功并返回给用户一个定购单号,提示用户填写收货人详细信息,包括姓名、地址、邮编、邮箱、电话、付款方式、备注等信息,这些信息是系统自动从用户表中提取出来的,用户可以修改,订货单显示如下:图5-8定货单示意图这一步的实现与用户资料修改类似,都是先将该用户的相关资料从数据库中调出来sql6=’select*frommemberwhereuser_name='.session.[‘user_name’];然后使用方法update对表中各项信息进行修改。确认后,系统弹出提交成功页面:图5-9订货成功示意图该页面也就是将用户提交的订单信息返回,并产生了一个唯一订单号,以方便用户查询,这个订单号的产生,并不是随机产生的,而是使用了一定的规则,在这里主要是根据用户名和订单产生的时间来生成订单号。 5.3.5搜索模块的实现网上购物作为一个在网上展示自己商品的销售系统,如何能让用户以最快的速度找到自己希望买到的物品,也是需要非常重视的一个问题,此时搜索引擎也就必不可少了。本购物系统也做了一个小模块,以供用户进行一些模糊查找,用户不必输入全部名称,只需输入一些关键词,系统就可以将符合该查询条件的所有商品信息以网页形式返回给用户。该搜索功能在php页面中实现的关键代码为:$act=$_GET['act'];if($act=="simple"){$cont=$_GET['cont'];if(!empty($_GET['cont'])){//普通搜索模式$sql="select*fromtb_commowherenamelike'%".$cont."%'";}}else{$name=$_GET['name'];$model=$_GET['model'];$class=$_GET['stype'];//高级搜索模式$sql="select*fromtb_commowherenamelike'%".$name."%'andmodellike'%".$model."%'andclasslike'%".$class."%'";}$rst=$admindb->ExecSQL($sql,$conn);if($rst){$smarty->assign('search',"T");$smarty->assign('searcharr',$rst);}$smarty->assign('title','查询结果');$smarty->display('searchrst.html'); 本搜索模块可分两块,前面为普通搜素,后面是高级搜索,即可以通过关键字等形式筛选出用户想要购买的商品。5.3.4后台管理模块的实现网上购物系统除了能够让用户实现前台的浏览和购物等操作之外,还必须能够使管理人员能够对系统的各种信息进行维护,比如商品的增加、删除、修改,会员的审查,网站新闻的更新等等。管理功能是网上购物系统相当重要的一部分功能。管理员可以通过主页面的“管理进入”进入系统后台进行维护,点击之后,首要的就是进行身份验证,输入正确的帐号,密码之后,方能进入。由于涉及到交易,出于安全性考虑,管理员帐号应尽量少分配,密码也要尽量复杂,经常更换。进入之后系统管理的主页面采用了框架结构,左边是一个树型菜单,右边显示具体信息。管理的主要功能有商品信息的更新,会员信息维护,网站信息维护,广告链接设置等四大块,商品信息管理,主要就是添加新的商品,删除和修改已经添加的商品。如图5-9、5-10、5-11所示:图5-10商品分类页面图5-11添加商品页面 图5-12商品管理界面这一部分的实现也没有新的方法,使用的依然是一些不同sql语句来对相关数据进行添加和修改,但这里一个重要的技术是实现分页,分页中所需具体要的参数:总记录数,也就是商品的在数据库的总条数;当前页数,也就是当前显示的是第几页;每页显示记录数,即在整个网页当前视窗中所显示的记录条数。其具体实现的代码如下:classPage{protected$total;//查询所有的数据总记录数protected$page;//当前第几页protected$num;//每页显示记录的条数protected$pageNum;//一共多少页protected$url;protected$nextPage;protected$prevPage;protected$start;protected$end;protected$first='';protected$last='';protected$next='';protected$prev='';function__construct($url,$total,$num=5){ $this->page=isset($_GET["page"])?$_GET["page"]:1;$this->url=$url;$this->total=$total;$this->num=$num;$this->pageNum=$this->getPageNum();$this->nextPage=$this->getNextPage();$this->prevPage=$this->getPrevPage();$this->start=$this->getStartNum();$this->end=$this->getEndNum();}protectedfunctiongetPageNum(){returnceil($this->total/$this->num);}protectedfunctiongetNextPage(){if($this->page==$this->pageNum)returnfalse;elsereturn$this->page+1;}protectedfunctiongetPrevPage(){if($this->page==1)returnfalse;elsereturn$this->page-1;}//数据库查询的偏移量publicfunctiongetOffset(){return($this->page-1)*$this->num;}//当前页开始的记录数 protectedfunctiongetStartNum(){if($this->total==0)return0;elsereturn$this->getOffset()+1;}//当前页结束的记录数protectedfunctiongetEndNum(){returnmin($this->getOffset()+$this->num,$this->total);}publicfunctiongetPage(){$pinfo="共{$this->total}条记录,本页显示{$this->start}-{$this->end}条    {$this->page}/{$this->pageNum}    ";if($this->page==1)$pinfo.=$this->first.'  ';else$pinfo.='url.'page=1">'.$this->first.'  ';if($this->prevPage)$pinfo.='url.'page='.$this->prevPage.'">'.$this->prev.'  ';else$pinfo.=$this->prev.'  ';if($this->nextPage)$pinfo.='url.'page='.$this->nextPage.'">'.$this->next.'  '; else$pinfo.=$this->next.'  ';if($this->page==$this->pageNum)$pinfo.=$this->last.'  ';else$pinfo.='url.'page='.$this->pageNum.'">'.$this->last.'  ';return$pinfo;}}会员信息管理,则主要是对一些注册的一些用户进行管理,修改,查看,甚至删除以及管理员注销登录等功能。会员信息管理界面如下:图5-13会员信息管理界面由于在讲前台的用户过程中,我们已经实现了网站登录,注册,修改会员信息三个方面的内容,现在主要讲下后台用户的退出功能,其具体的实现过程如下://===========================================================//函数名:initialize//功能:注销用户登录//===========================================================functionlogout(){$_SESSION=array();//将session信息置空if(isset($_COOKIE[session_name()])){//如果客户端还保存有用户的一些信息,则将COOKIE置空setcookie($_COOKIE[session_name()],'',time()-4200,'/');}//销毁SESSION session_destroy();}网站信息管理,进行网上新闻的发布,修改删除,以及系统公告等信息的设置,这些功能虽然无关紧要,但在实际中却能方便用户,提高网站效益。图5-14新闻信息管理界面广告链接,可进行一些广告信息的发布,及更新和修改,主要是链接一些合作单位的网页,能够给自己带来一些经济上的收益。在完成系统的更新之后,作为管理人员,应该及时注销自己的帐户,树型菜单的上方提供了注销登陆的选项,点击之后,注销用户,并返回到前台页面,防止他人恶意修改网站信息,造成不必要的损失。 第6章系统测试及难点分析6.1系统测试6.1.1系统关键部分测试分析系统完成之后,对各个模块的功能进行了详细的测试,输入数据和预测输出数据相比,发现了一些问题。主要是在查询过程中预计查询结果和实际结果不一致,有时候达不到目的,对数据库的操作表之间的关联考虑得不够周到,因此往往会出现一些小的错误。还有查询条件的前后数据类型不一致也是一个很常见的错误,需要靠一步步的查找解决。各个模块组装完成后,又会出现一些问题。比如在操作购物车结帐的这个流程中,由于是多次添加和修改,最后结帐,所以很容易造成数据混乱,必须对相应的数据关系理清楚,一些关键查询统计的SQL语句必须反复斟酌才能放在程序中使用。6.1.2单元测试分析(1)经过上面部分的分析,我们可以得知,购物车模块是我们需要特别注意的地方,因为它涉及到了我们数据库中的大部分数据,并且是进行网上交易的最关键部分,绝对不能出现任何的差错,下面我们就针对这一模块进行用例测试:我们以用户jikou的身份登入系统,用户名是:jikou密码是:1234然后点击定购商品:诺基亚6100单价为3800元弹出购物车清单:选择商品数量2确认出现清单:显示商品名称诺基亚6100数量2合计7600元与我们估算的数据相符。此时选择清空购物车,继续购物,点击定购商品:摩托罗拉v70单价为2500元选择数量3确认,出现清单:显示商品名称摩托罗拉v70合计7500元继续选择收银台结帐,出现帐单显示:显示商品名称摩托罗拉v70合计7500元与我们估算的数据也相符,证明清空购物车的功能正常有效,并没有将我们第一次选购的物品计算在内,价格的计算也正确无误。下面我们来看后台数据库的数据:打开购物车表basket我们可以看到以用户名jikou为关键字段的两条记录中,一条是我们第一次添加到购物车的商品信息,一条是第二次添加到购物车的商品信息,我们可以发现这两条记录的区别,第二条记录摩托罗拉的basket_check属性为是,subnumber属性为jikou2006151252,而第一条诺基亚6100 的basket_check属性为否,subnumber属性为空,证明该条记录没有产生订单也就是说这次无效的选购记录,并没有被计入到帐单中,和我们的预期目标一致,即该部分功能正常,测试完毕。(2)对用户注册部分进行测试用户名:jikou密码:123456确认:123456E_mail:jikou@163.com;地址:河南郑州邮编:450002真实性名:付立夫;提交以后,弹出提示信息:该用户已存在,用户名重复验证正常;将用户名改为:几个空格然后其他的不变。提交之后我们会发现系统返回成功页面,但问题是用户名什么也没有,空格也被作为合法的用户名,这在实际应用中是不允许的,我们需要对其命名规则进行定义,具体修改请参看后面存在问题及解决方法。同样的邮编及电话也存在规则未定义的问题,需要对其加以定义。6.1.3测试分析总结及说明在测试过程中,我经过模块测试和组装测试,排除了系统的大部分错误。当然排除所有错误是不太可能的,我想应该还有些不易检测到的错误还没有被发现,需要在使用的过程中进一步的完善,数据库的加密是一个重要的概念,在实际的应用过程中是一个尚待解决的问题,应该做好数据库的完善工作,特别是备份和安全工作;另一方面本系统没有制作相关的打印,由于时间仓促难免有错误和不完善的地方,希望老师能够帮我指点和纠正。6.1.4系统的性能分析网上购物系统的性质决定了它的服务端工作负荷比较大,这就要求服务端的硬件配置要尽可能的高,主要是内存,而且操作系统也要尽可能的稳定。基于java的系统一般来说网络安全性比较好,但并不能说就一定安全,尤其在windows操作系统下,由于windows的漏洞比较多,系统装配在windows下并不是最佳的选择,如果有条件,建议可将系统装配在unix操作系统下,提高系统的抗侵入能力。系统的核心数据库,随着数据的不断增多,必然会产生冗余,导致系统运行效率降低,建议管理员定期备份和清理冗余数据,以保证系统的正常高效运行。 6.2系统中所存在的问题及解决方案6.2.1系统的整体设计和规划中的问题由于是基于B/S的系统,网页在其中就承担着非常大的工作,包括向服务端后台写入和修改数据,以及服务端响应客户端的请求,向客户端页面返回数据,这些工作不可能只由几个网页来完成,但网页数量一多又必然结构混乱,造成开发过程难以控制。为解决这个问题,我采用了现代软件开发过程的模块化思想,先将系统功能进行分解,大致可分为两部分,即前台和后台,前台又包括主页面及产品信息展示页面、搜索功能页面、新闻页面、购物车及订单页面等几个大的部分,后台包括会员信息管理、商品信息管理、新闻信息管理、等几个部分,各个部分又由许多小的页面组成,这样一来虽然网页数量没有减少,但结构清晰了很多,在开发过程中可以逐步,逐个模块的实现,提高了开发效率。6.2.2开发功能模块所遇到的难点因为是第一次做这么完整的系统,所以碰到的问题也很多,除了一些基本的语法之外,感觉还是一些考虑问题的思维方式不太得当,比如我的这个网上购物系统,我感觉难度比较大的还是购物车这个模块比较的难设计,因为过程比较复杂,他的一些逻辑处理就比较的难以用代码实现。我参考了一些电子商务网站,研究了一下他们的购物流程,大概有了一些处理的想法,用户在点击定购之后,系统先将该商品信息写入购物车页面,只有当用户在选择了商品数量,及确认按钮之后,系统才将该信息写入basket表,用户不选择商品数量,或者不点击确认按钮,系统就不把该商品信息写入basket表,这样就不至于造成basket表数据混乱,用户无法继续购物。当用户完成选购,点击去收银台结算时,系统开始判断商品库中的这些商品数量是否大于用户所选数量,如果没有,则提示用户没有该商品,如果有则将所有basket表中属于该用户id的商品信息提出来,并合计价格,返回给用户,用户如果确定付款购买,则给用户提供一个订货单,由用户填写一些基本信息,确认之后,系统则产生一个唯一的订货单号,并将其返回给用户,以便用户日后查询,同时,系统则将该用户所选购的商品信息以及用户信息放入到订单表中。这样就基本上实现了购物车的功能。 6.2.3系统中存在的问题及拟定的解决方法(1)第一个问题是用户在注册过程中,一些关键字段的命名规则存在着比较大的缺陷,比如用户名的选择上,一般的习惯是规定只能从a~z和数字0~9的随机组合,不能有特殊字符,而且只能以字母开头,不能以数字开头,用户名的长度也有限制,我在系统中只考虑了为空的情况,这是不够的,我们可以在php页面添加一段javascript验证代码,主要是使用正则表达式对用户名进行限制。(2)第二个就是对会员的管理功能做的不够,没有考虑到用户密码丢失的问题,解决方法有两个,一个就是采取通常的做法,让用户在注册过程中,设置一些问题,通过回答问题的方式来取回密码,还有一个方法就是让管理员通过后台,初始化用户的密码,然后用户登陆对密码进行修改,这两个方法都可以达到目的。对于网上购物系统来说安全性无疑是最重要的,层层验证虽然保证了系统的安全性,但对于用户来说又是极不人性化的,如何在最简单的验证流程下,保证用户数据的安全,是在做网上购物系统中需要考虑的一个问题。 结束语我的毕业设计论文具体论述了网上购物系统的主要功能及体系结构,重点讨论了系统数据准备、数据库的逻辑结构分析、各模块系统流程各功能模块的关联和响应php与后台数据库链接等关键技术。这些技术的实现,满足了系统的需要,优化了系统的性能。目前基于该模型的系统处于实验室阶段,还存在许多问题与不足,如安全性能还不完善,缺少必要的数据加密系统等,,这些功能与技术还需要加以提高和实现。主要采用的PHP的MVC框架,对以后二次开发,扩展功能都很方便。对于面向对象技术并没有很好的理解,采用。对于阅读代码有一定的阻碍。网上购物系统无论是在开发过程中,还是建成后的日常维护过程中,都需要进行严格的检测,以保证购物系统的服务质量。  随着网上购物系统技术的日趋成熟、网上购物的优势日趋明显,会有更多的人参与到网上购物的浪潮中来,人类最终将迎接电子商务时代的来临。 参考文献[1]MattZandstra.深入PHP面向对象、模式与实践(第二版)[M].北京:人民邮电出版社,2010.5[2]高洛峰.细说PHP[M].北京:电子工业出版社,2009.10[3]王珊,萨师煊.数据库系统概论(第四版)[M].北京:高等教育出版社,2006.5[4]姜承尧.StrutsMySQL技术内幕InnoDB存储引擎[M].北京:机械工业出版社,2010.11[5]张海藩.软件工程导论[M].北京:清华大学出版社,2008.2[6]LynnBeighley,MichaelMorrison.HeadFirstPHP&MySQL[M].北京:中国电力出版社,2010.3[7]DaveCrane,EricPascarello,DarrenJames.Ajax实战[M].北京:人民邮电出版社,2006.4[8]Nicholas.C,Zakas.Javascript高级程序设计(第三版)[M].北京:人民邮电出版社,2012.3[9]张绪旺.互联网创新加速服务贸易增长[N].北京商报,2012.5.31[10]布萱.电子商务迎来发展战略机遇期[[N].人民邮电,2012.5.19[11]刘智莹;,朱程荣.基于PHP实现数据安全性的方法及比较[J].计算机工程与设计,2009.9 致 谢经过半年的忙碌和工作,本次毕业设计已经接近尾声,作为一个本科生的毕业设计,由于经验的匮乏,难免有许多考虑不周全的地方,如果没有导师的督促指导,以及一起工作的同学们的支持,想要完成这个设计是难以想象的。在这里首先要感谢我的导师刘铁武老师。刘老师平日里工作繁多,但在我做毕业设计的每个阶段,从查阅资料到设计草案的确定和修改,中期检查,后期详细设计,装配草图等整个过程中都给予了我悉心的指导。我的设计较为复杂烦琐,但是刘老师仍然细心检阅我论文设计的每一个阶段,并对我的毕业设计中出现的错误进行指正,并给出了一些良好的建议,除了敬佩刘老师的专业水平外,他的治学严谨和科学研究的精神也是我永远学习的榜样,并将积极影响我今后的学习和工作。其次要感谢我的同学对我无私的帮助,特别是在软件的构架方面,正因为如此我才能顺利的完成设计,我还要感谢那些曾给我授过课的每一位老师,是你们教会我专业知识。在此,我再说一次谢谢,谢谢大家。 附录Ajax.js//JavaScriptDocument//====================================//函数名:ajax//功能:创建ajax引擎对象//参数:recvtype接收的类型HTML或XML//====================================functioncreateAjax(recvType){varaj=newObject();aj.targetUrl='';aj.sendString='';aj.recvType=recvType?recvType:'HTML';aj.resultHandle=null;//用来注册回调处理函数//创建ajax的方法aj.createXMLHttpRequest=function(){varrequest=false;if(window.XMLHttpRequest){request=newXMLHttpRequest();if(request.overrideMimeType){request.overrideMimeType('text/xml');}}elseif(window.ActiveXObject){varieversion=['Microsoft.XMLHTTP','MSXML.XMLHTTP','Microsoft.XMLHTTP','Msxml2.XMLHTTP.7.0','Msxml2.XMLHTTP.6.0','Msxml2.XMLHTTP.5.0','Msxml2.XMLHTTP.4.0','MSXML2.XMLHTTP.3.0','MSXML2.XMLHTTP'];try{for(i=0;i用户名不能为空';returnfalse;}elseif(!username.value.match(/^[_A-Za-z]+w*/)){userid.innerHTML='用户名必须以字母或下划线开头';returnfalse;}elseif(username.value.length<3){userid.innerHTML='用户名的长度不能少于3位';returnfalse;}elseif(username.value.length>20){userid.innerHTML='用户名的长度不能超过20位';returnfalse;}else{varajax=createAjax();//返回一个ajax对象ajax.get("index.php?a=checkname&username="+username.value,function(data){if(data=='T'){ userid.innerHTML='该用户名已经存在';flag1=false;}else{userid.innerHTML='恭喜!该用户名可用';flag1=true;}});}returntrue;}//==========================================================//函数名:checkPwd//功能:检测用户名是否合法//参数:无//声明:解释权归袁再新所有,任何咨询或意见1257249110@qq.com//==========================================================functioncheckPwd(){varpassword=document.getElementById('textpwd');varpwdid=document.getElementById('pwdid');varpasswordok=document.getElementById('userpwdok');if(password.value!=passwordok.value){pwdid.innerHTML='两次密码不一致';returnfalse;}elseif(password.value.match(/^s*$/)){pwdid.innerHTML='密码不能为空';returnfalse;}elseif(password.value.length<3){ pwdid.innerHTML='密码的长度不能少于3位';returnfalse;}elseif(password.value.length>20){pwdid.innerHTML='密码的长度不能超过20位';returnfalse;}else{pwdid.innerHTML='密码输入正确';returntrue;}}//=========================================================//函数名:checkName//功能:匹配中文姓名//参数:id_input文本域的idid_mess提示框的id//isCN判断是不是中文姓名验证,否则采用常规验证//参数必须是字符串类型//声明:解释权归袁再新所有,任何咨询或意见1257249110@qq.com//=========================================================functioncheckName(isCN){varrealname=document.getElementById('realname');varrealid=document.getElementById('tnameid');if(isCN=="CN"){if(realname.value.match(/^[u4e00-u9fa5]{2,5}$/)){realid.innerHTML='名字输入合法';returntrue;}else{realid.innerHTML='名字必须是汉字,且为2-5个字';returnfalse; }}else{if(realname.value.match(/^[a-zA-Z]{1}w{2,20}$/)){realid.innerHTML='名字输入合法';returntrue;}else{realid.innerHTML='请按规则输入';returnfalse;}}}//==========================================================//函数名:checkPhOrTel//功能:匹配电话号码或手机//参数:isPhone传布尔型值,ture表示选择手机,false选择电话//声明:解释权归袁再新所有,任何咨询或意见1257249110@qq.com//本人属于初学者,不足之处欢迎同行指正//=========================================================functioncheckPhOrTel(isPhone){if(typeof(isPhone)=='boolean'){if(isPhone){vartelph=document.getElementById('phone');vartelphid=document.getElementById('phoneid');}else{vartelph=document.getElementById('tel');vartelphid=document.getElementById('telid');}}else{alert('您传的参数不正确');return; }varpattern=/(^[0-9]{3,4}-[0-9]{3,8}$)|(^[0-9]{3,8}$)|(^0{0,1}1[0-9]{10}$)/;if(!telph.value.match(pattern)){telphid.innerHTML='电话号码输入不合法';flag2=false;}else{telphid.innerHTML='输入正确';flag2=true;}}//==========================================================//函数名:checkEmail//功能:判断邮箱是否合法//参数:无//声明:解释权归袁再新所有,任何咨询或意见1257249110@qq.com//本人属于初学者,不足之处欢迎同行指正//=========================================================functioncheckEmail(){varemail=document.getElementById('email');varemailid=document.getElementById('emailid');if(!(email.value.match(/^w+@w+(.w+){0,3}$/)&&email.value.length>8&&email.value.length<20)){emailid.innerHTML='邮箱格式输入不正确';returnfalse;}else{emailid.innerHTML='邮箱格式输入正确';returntrue;}} //==========================================================//函数名:checkQQ//功能:判断QQ是否合法//参数:id_input文本域的idid_mess提示框的id//参数必须是字符串类型//声明:解释权归袁再新所有,任何咨询或意见1257249110@qq.com//本人属于初学者,不足之处欢迎同行指正//=========================================================functioncheckQQ(id_input,id_mess){varqq=document.getElementById('qq');varqqid=document.getElementById('qqid');if(!qq.value.match(/^d{5,20}$/)){qqid.innerHTML='qq格式输入不正确';returnfalse;}else{qqid.innerHTML='输入正确';returntrue;}}//==========================================================//函数名:checkAdd//功能:匹配电话号码或手机//参数:无//声明:解释权归袁再新所有,任何咨询或意见1257249110@qq.com//本人属于初学者,不足之处欢迎同行指正//=========================================================functioncheckAdd(){varaddress=document.getElementById('address');varaddid=document.getElementById('addid');if(address.value.match(/^s*$/)){ addid.innerHTML='填写的地址不能为空';returnfalse;}else{addid.innerHTML='输入正确';returntrue;}}//==========================================================//函数名:checkCard//功能:匹配身份信息//参数:id_input文本域的idid_mess提示框的id//参数必须是字符串类型//声明:解释权归袁再新所有,任何咨询或意见1257249110@qq.com//本人属于初学者,不足之处欢迎同行指正//=========================================================functioncheckCard(){varcard=document.getElementById('card');varcardid=document.getElementById('cardid');if(card.value.match(/d/)){cardid.innerHTML='身份证号码输入正确';returntrue;}else{cardid.innerHTML='请按提示输入';returnfalse;}}functioncheckPostCode(){varcard=document.getElementById('postcode');varcardid=document.getElementById('pnameid'); if(card.value.match(/d{5,7}/)){cardid.innerHTML='输入正确';returntrue;}else{cardid.innerHTML='请按提示输入';returnfalse;}}//==========================================================//函数名:validate//功能:判断所以输入域的格式是否满足要求//参数:无//声明:解释权归袁再新所有,任何咨询或意见1257249110@qq.com//本人属于初学者,不足之处欢迎同行指正//=========================================================functionvalidate(){varresult=true;//如果要追求性能,建议使用||,为了效果用|if(!checkUser()||!checkPwd()||!checkName('CN')||!checkEmail()||!checkQQ()||!checkCard()||!checkAdd()||!checkPostCode()||!flag1){result=false;}returnresult;} Config.ini.php Index.phpwebRuner();Validate.class.php

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
关闭