还剩68页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
一个B2C电子商务平台的设计与实现摘要随着Internet和宽带上网的普及,电子商务在日益渗透到人们的日常生活中,越来越受到人们的关注电子商务网站是企业开展电子商务活动的平台,企业通过建立自己的商务网站,可以发布商品信息、提供咨询服务、接收客户反馈,从而扩大企业知名度,树立良好的企业形象通过电子商务可以降低社会经营成本、优化社会资源配置,从而实现社会财富的最大化利用本课题的主要内容是开发一个基于B/S模式的一个B2C电子商务网站,前台实现了用户注册、商品分类陈列、购物车、留言等功能,站点后台实现了商品管理、客户订单管理、用户管理等功能本系统是基于C#.NET开发,开发环境为MicrosoftVisualStudio2008部署在IIS之上,并使用MicrosoftSQLSERVER2005作为数据库系统系统采用模块化设计,简化了开发过程,使项目更加清晰,极大地方便了系统的维护,并具有良好的可扩充性经测试表明,本次设计的B2C电子商务网站购物功能完善,可以提供在线购物服务,达到了预期的目的关键词电子商务;B/S模式;B2C;数据库;ThedesignandimplementationofaB2Ce-commerceplatformAbstractWiththepopularizationofInternetandbroadbandInternetaccessE-commerceispenetratingintothePeoplesDailylifeandplaysamoreandmoreimportantroleinthePeople’sDailylife.E-commercesitesareaplatformthattheenterprisesdevelope-commerceactivities.Enterprisecanreleasethecommodityinformationprovideadvisoryservicesandreceivecustomerfeedbackthroughbuildingitsownbusinesssitessoastoexpandenterprise’sreputationandsetupthegoodenterpriseimage.E-commercecanreducetheoperationcostOptimizesocialresourceallocationsoastorealizethemaxutilizationofthesocialwealth.ThemaincontentofthissubjectistodevelopaB2Ce-commerceplatformwhichbasedonB/Smode.Thisplatformrealizeduserregistrationclassificationofgoodsondisplayshoppingcartmessagesandotherfunctions.Sitemanagementsystemrealizesthecommoditiesmanagementmanagementofcustomerordersusermanagementandotherfunctions.Theplatformhasfriendlyinterfaceandhasgoodscalability.ThisplatformisbasedonC#.NETthedevelopmentenvironmentisMicrosoftVisualStudio2008anddeployedinIIS.ThebackgrounddatabaseisMicrosoftSQLSERVER
2005.Systemusesmodulardesignsimplifiesthedevelopmentprocesstomaketheprojectclearergreatlyshowsystemmaintenanceplaceandhavinggoodscalability.Testandtrialrunshowthatthedevelopedsystemisperfectcanprovideon-lineserviceforcustomerandhasachievedthescheduledgoal.Keywords e-commerce;B/Smode;B2C;database;毕业设计(论文)原创性声明和使用授权说明原创性声明本人郑重承诺所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意作者签名 日 期 指导教师签名 日 期 使用授权说明本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容作者签名 日 期 学位论文原创性声明本人郑重声明所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明本人完全意识到本声明的法律后果由本人承担作者签名日期年月日学位论文版权使用授权书本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅本人授权 大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文涉密论文按学校规定处理作者签名日期年月日导师签名日期年月日目录TOC\o1-4\h\z\u1绪论
11.1课题背景
11.2电子商务的分类
11.3电子商务的发展趋势
21.4课题内容22开发语言及软件介绍
32.1C#语言介绍
32.2VisualStudio
200832.3SQLSERVER200543系统分析
63.1可行性分析
63.2需求分析
63.3需求用例
73.
3.1角色定义
73.
3.2系统功能分析
73.
3.3运行环境134系统设计
154.1系统功能设计
154.2数据库设计
154.
2.1概念设计
154.
2.2逻辑设计175系统实现
215.1数据库实现
215.
1.1数据表的实现
215.
1.2存储过程的实现
225.2页面的实现
265.
2.1自定义控件
265.
2.2母版页设计
315.
2.3购物车的实现316系统测试
346.1系统测试的必要性
346.2测试方法
346.3测试过程
346.
3.1前台购物测试
346.
3.2后台管理测试377结束语
407.1总结
407.2展望40参考文献41致谢43附录441绪论
1.1课题背景进入九十年代,计算机技术、通信技术以及建立在计算机和网络技术基础上的计算机网络技术得到了迅猛的发展特别是1993年美国宣布建立国家信息基础设施NII后,全世界许多国家纷纷制定和建立本国的NII,从而极大地推动了计算机网络技术的发展,使计算机网络进入了一个崭新的阶段目前,全球以美国为核心的高速计算机互联网络即Internet已经形成,Internet已经成为人类最重要的、最大的知识宝库而美国政府又分别于1996年和1997年开始研究发展更加快速可靠的互联网2(Internet2)和下一代互联网(NextGenerationInternet)可以说,网络互联和高速计算机网络正成为最新一代的计算机网络的发展方向在因特网开放的网络环境下,出现一种新型的基于浏览器/服务器应用方式,买卖双方不谋面地进行各种商贸活动,实现消费者的网上购物、商户之间的网上交易和在线电子支付以及各种商务活动、交易活动、金融活动和相关的综合服务活动的商业运营模式即电子商务
[1]
1.2电子商务的分类电子商务可分为B2B、B2C、C2C、B2M、M2C、即BMCB2A(即B2G)、C2A(即C2G)、SNS-EC社交电子商务10类模式
[2]B2B(BusinesstoBusiness),指商家泛指企业对商家的电子商务,即企业与企业之间通过互联网进行产品、服务及信息的交换B2C(BusinesstoCustomer)指商家对个人的电子商务,B2C模式是我国最早产生的电子商务模式C2C(CustomertoCustomer)是用户对用户的模式,C2C商务平台就是通过为买卖双方提供一个在线交易平台,使卖方可以主动提供商品上网拍卖,而买方可以自行选择商品进行竞价,代表网站如淘宝网B2M(BusinesstoManager)相对于B2B、B2C、C2C的电子商务模式而言,有着本质的不同,B2M所针对的客户群是该企业或者该产品的销售者或者为其工作者,而不是最终消费者M2C(ManagertoConsumer)是针对于B2M的电子商务模式而出现的延伸概念B2M环节中,企业通过网络平台发布该企业的产品或者服务,职业经理人通过网络获取该企业的产品或者服务信息,第1页共50页,企业通过经理人的服务达到销售产品或者获得服务的目的SNS-EC社交电子商务是电子商务的一种新的衍生模式它借助社交媒介、网络媒介的传播途径,通过社交互动、用户自生内容等手段来辅助商品的购买和销售行为
1.3电子商务的发展趋势B2C电子商务指的是企业针对个人开展的电子商务活动的总称,如企业为个人提供在线医疗咨询、在线商品购买等截止2009年的最新数据统计目前我国网民超4亿,其中未成年网民占到1/3,未来消费的主流人群都将选择网络这种方式来购物艾瑞咨询预计我国网购市场规模2010年将达到5670亿,2012年将达到7980亿,年增长速度在80%以上,成为互联网新经济最强大的增长引擎
[3]B2C电子商务以完备的双向信息沟通、灵活的交易手段、快捷的物流配送、低成本高效益的运作方式等在各行各业展现了其极大的生命力
1.4课题内容本系统采用模块化设计,以C#作为开发语言,开发一个B2C电子商务平台,为用户提供网上购物服务系统主要实现以下功能
(1)前台购物站点实现的功能用户注册及信息维护,商品分类陈列,购物车管理,邮寄信息管理等
(2)后台管理系统实现的功能客户订单处理,会员管理,管理员信息维护,分类信息维护等2开发语言及软件介绍
2.1C#语言介绍C#CSharp是微软Microsoft为.NETFramework量身订做的程序语言,C#拥有C/C++的强大功能以及VisualBasic简易使用的特性,是第一个组件导向Component-oriented的程序语言,和C++与Java一样亦为对象导向object-oriented程序语言
[4]C#是一种安全的、稳定的、简单的、优雅的,由C和C++衍生出来的面向对象的编程语言它在继承C和C++强大功能的同时去掉了一些它们的复杂特性(例如没有宏和模版,不允许多重继承)C#综合了VB简单的可视化操作和C++的高运行效率,以其强大的操作能力、优雅的语法风格、创新的语言特性和便捷的面向组件编程的支持成为.NET开发的首选语言
2.2VisualStudio2008VisualStudio是微软公司推出的开发环境,VisualStudio可以用来创建Windows平台下的Windows应用程序和网络应用程序,也可以用来创建网络服务、智能设备应用程序和Office插件2002年,随着.NET口号的提出与WindowsXP/OfficeXP的发布,微软发布了VisualStudio.NET(内部版本号为
7.0)在这个版本的VisualStudio中,微软剥离了VisualFoxPro作为一个单独的开发环境以VisualFoxPro
7.0单独销售,同时取消了VisualInterDev与此同时,微软引入了建立在.NET框架上(版本
1.0)的托管代码机制以及一门新的语言C#C#是一门建立在C++和Java基础上的现代语言,是编写.NET框架的语言2003年,微软对VisualStudio2002进行了部分修订,以VisualStudio2003的名义发布(内部版本号为
7.1)Visio作为使用统一建模语言(UML)架构应用程序框架的程序被引入,同时被引入的还包括移动设备支持和企业模版.NET框架也升级到了
1.12005年,微软发布了VisualStudio
2005.NET字眼从各种语言的名字中被抹去,但是这个版本的VisualStudio仍然还是面向.NET框架的(版本
2.0)2008年2月14日发布了简体中文专业版MicrosoftVisualStudio2008是面向WindowsVista、Office
2007、Web
2.0的下一代开发工具,是对VisualStudio2005一次及时、全面的升级VS2008引入了250多个新特性,整合了对象、关系型数据、XML的访问方式语言更加简洁使用VisualStudio2008可以高效开发Windows应用设计器中可以实时反映变更XAML中智能感知功能可以提高开发效率同时VisualStudio2008支持项目模板、调试器和部署程序VisualStudio2008可以高效开发Web应用,集成了AJAX
1.0,包含AJAX项目模板,它还可以高效开发Office应用和Mobile应用VisualStudio2008新特性
(1)VS2008——软件开发更智能
(2)VisualStudio2008中WCF的新增功能
(3)VisualStudio2008中的多定向支持
(4)让VS2008支持Subversion
(5)微软整合WindowsLive到VisualStudio中
(6)VisualStudio2008中的SQL数据库发布
(7)VisualStudio2008加入拼写检查器
2.3SQLSERVER2005SQLServer2005是一个全面的数据库平台,使用集成的商业智能BI工具提供了企业级的数据管理SQLServer2005数据库引擎为关系型数据和结构化数据提供了更安全可靠的存储功能,使您可以构建和管理用于业务的高可用和高性能的数据应用程序
[5]SQLSERVER2005是微软于2005年推出的一款关系型数据库管理系统,通过在可伸缩性、数据集成、开发工具和强大的分析等方面的革新更好的确立了微软在BI领域的领导地位SQLServer2005能够把关键的信息及时的传递到组织内员工的手中,从而实现了可伸缩的商业智能从CEO到信息工作者,员工可以快速的、容易的处理数据,以更快更好的做出决策SQLServer2005全面的集成、分析和报表功能使企业能够提高他们已有应用的价值,即便这些应用是在不同的平台上
[6]SQLServer2005数据引擎是本企业数据管理解决方案的核心此外SQLServer2005结合了分析、报表、集成和通知功能这使您的企业可以构建和部署经济有效的BI解决方案,帮助您的团队通过记分卡、Dashboard、Webservices和移动设备将数据应用推向业务的各个领域与MicrosoftVisualStudio、MicrosoftOfficeSystem以及新的开发工具包(包括BusinessIntelligenceDevelopmentStudio)的紧密集成使SQLServer2005与众不同无论您是开发人员、数据库管理员、信息工作者还是决策者,SQLServer2005都可以提供创新的解决方案,帮助用户从数据中更多地获益3系统分析
3.1可行性分析可行性分析是通过对项目的主要内容和配套条件,从技术、经济、工程等方面进行调查研究和分析比较,并对项目建成以后可能取得的财务、经济效益及社会环境影响进行预测,从而提出该项目是否值得投资和如何进行建设的咨询意见,为项目决策提供依据的一种综合性的系统分析方法
[7]本系统主要从社会可行性、技术可行性、经济可行性三方面对系统进行可行性分析社会可行性自2003年上半年以来,沉寂了多年的中国互联网产业正以强劲的势头复苏并发展起来,除了传统的浏览、资料搜索、电子邮件等基本应用外,国内网民已经开始习惯通过网络接受商务、旅游、购物、通讯、娱乐等服务,互联网的快速发展为网络销售系统的发展提供了强大的动力,同时,电子购物的环境也已经逐步得到了改善,表现在网民结构的大众化和网络生存的普及化,物流和银行结算的畅通,以及市场运作的规范和相应政策法规的完善,电子商务有着巨大的社会潜力技术可行性本系统后台数据库采用SQLServer2005,该系统数据库在安全性、运行速度方面有绝对的优势;前台采用VisualStudio2005作为开发工具,可与SQLServer数据库实现无缝连接,在技术方面完全可行经济可行性本系统为自主研发,运行系统的服务器、网络等均不需要额外购买,投入资源较少,在经济上是可行的
3.2需求分析互联网的快速发展为网络销售系统的发展提供了强大的动力,同时,电子购物的环境也已经逐步得到了改善,表现在网民结构的大众化和网络生存的普及化,物流和银行结算的畅通,以及市场运作的规范和相应政策法规的完善在线销售的网上购物对网民的吸引力将会越来越大,网民对销售网站的看法也将必定会从不了解到了解,从拒绝到接受,从怀疑到信任,从否定到肯定,网络销售在线购物的观念将更加深入人心
[8]通过实际调查,B2C电子商务网站主要包括以下功能要求系统具有良好的人机界面要求系统具有较好的权限控制管理全面展示系统内所有商品商品分类显示,方便顾客了解本网站的产品查看网站内交易信息支持网上在线支付功能网站最大限度的实现易维护性和易操作性网站运行稳定,安全性高本系统主要实现以下功能
(1)前台购物站点实现的功能用户注册及信息维护,商品分类陈列,购物车管理,邮寄信息管理等
(2)后台管理系统实现的功能客户订单处理,会员管理,管理员信息维护,分类信息维护等用户注册信息维护用户浏览本站点时,可以点击注册为本系统会员,在注册完成并成功登录后,可以对自己的信息进行更改或维护商品分类陈列用户浏览本系统时,可以有选择性地选择浏览商品的类别,以达到快速购物的目的购物车管理用户在购买了商品后,系统自动生成购物车,用户可查看及修改购物车的相关信息邮寄信息管理用户购物完成后,须填写商品配送信息,以达到送货上门的目的客户订单处理管理员登录后台后,处理当前未处理的订单,包括发货和归档,也可以查看已归档的订单信息会员管理维护会员的相关信息管理员信息维护维护管理员的相关信息分类信息维护可以设置相应的类别,上传相应的商品信息
3.3需求用例
3.
3.1角色定义即用户在系统中扮演的角色,其权限如下表表1角色权限表编号角色权限1游客注册会员、浏览商品2会员登录、浏览商品、购买商品3管理员商品管理、用户管理、订单管理等
3.
3.2系统功能分析
(1)系统中定义的每个角色,都有不同的权限,他们的活动范围如下图
(2)用户登录流程用户登录系统时,系统会将连接数据库对用户信息进行核对,若用户的输入是正确的,则能成功登录系统,若用户的输入不正确,则反回,或按提示找回相关信息,其用例如图
(3)流物车流程图用户购买物品后,系统生成购物车,用户可点查看或修改自己的购物车信息,具体用例图如下
(4)用户从登录到站点后到最后购物并付款,这过程都需要页面给出相应引导,其流程图如下
3.
3.3运行环境
(1)硬件环境服务器CPU PentiumIV
2.4GHZ以上内存2G以上硬盘空间2G以上
(2)软件环境操作系统WindowsXP/Windows2000/Windows7数据库MicrosoftSQLSERVER2005软件开发语言C#分辨率最佳效果为1024×768像素4系统设计
4.1系统功能设计B2C电子商务网站按照实现的功能来划分,主要分为两大模块前台用户功能模块后台管理员管理模块其中,前台用户功能模块是对一个用户而言所看到的界面用户通过该界面实现全部功能这些功能可以分为以下几个部分用户登陆/注册/修改模块最新商品/精品推荐/特价商品/热销商品浏览模块购物车模块服务台模块网上在线支付模块网站帮助模块后台管理模块是管理员所见到的界面,管理员可以通过这部分功能来管理网站,具体的功能又可以分为以下几个部分管理员登陆模块商品管理模块(包括商品添加/商品管理/商品类别添加/商品类别管理)管理员管理模块(包括添加管理员/管理管理员)用户管理模块订单管理(订单查询/订单管理/订单打印)
4.2数据库设计
4.
2.1概念设计根据需求,确定数据库的实体,包括管理员,会员,商品,订单,留言板等其E-R图
[8]如下(图4-1销售系统E-R图图4-2后台系统E-R图
4.
2.2逻辑设计参照上述的E-R图,系统在逻辑上设计了7张表,分别为管理员信息表、商品信息表、商品类别表、订单明细表、图片信息表、会员信息表、订单信息表,各表的结构及说明如下表4-1管理员信息表结构及说明字段名称数据类型字段大小说明AdminIdInt4管理员编号主键AdminNameVarchar50管理员姓名PasswordVarchar50密码RealNameVarchar50真实姓名EmailVarchar50电子邮件LoadDateDatetime8注册日期表4-2商品信息表表结构及说明字段名称数据类型字段大小说明BookIDInt4商品编号,主键ClassIDInt10商品类别BookNameVarchar50书名BookIntroduceNtext16商品简介AuthorVarchar50作者CompanyVarchar50出版社BookUrlVarchar200商品图片MarketPriceFloat8价格HotpriceFloat8热销价IsrefinementBit1是否推荐IsDiscountBit1是否打折IsHotBit1是否热销LoadDateDateTime8进货日期表4-3商品类别表结构及说明字段名称数据类型字段大小说明ClassIDInt4类别编号,主键ClassNameVarchar50类别名称CategoryUrlVarchar50商品类别图片地址表4-4订单明细表表结构及说明字段名称数据类型字段大小说明DetailIDInt4订单详细号,主键BookIDInt4商品编号NumInt4购买数量OrderIDInt4该项对应的订单号TotalPriceFloat8总价RemarkVarchar200备注表4-5图片信息表表结构及说明字段名称数据类型字段大小说明ImageIDInt4图片编号ImageUrlVarchar200图片地址ImageNameVarchar50图片名称表4-6会员信息表表结构及说明字段名称数据类型字段大小说明MemberIdInt4会员编号UserNameVarchar50会员姓名PasswordVarchar50密码RealNameVarchar50真实姓名SexBit1会员性别EmailVarchar50电子邮件PhonecodeVarchar20电话号码AddressVarchar200会员详细地址PostCodeChar10邮政编码LoadDateDatetime8注册日期表4-7订单信息表表结构及说明字段名称数据类型字段大小说明OrderIDInt4订单编号OrderDateDatetime8下订单的日期BookFeeFloat8商品费用ShipFeeFloat8邮费TotalPriceFloat8总价ShipTypeVarchar50邮寄方式RecieveNameVarchar50收货人姓名RecievePhoneVarchar20收货人电话RecieveAddressVarchar200收货人地址RecieveEmailVarchar20收货人邮件IsConfirmBit1是否确认IsSendBit1是否发货IsEndBit1收货人是否确认AdminIDInt4跟单员编号ConfirmTimeDatetime8确认日期5系统实现
5.1数据库实现
5.
1.1数据表的实现本系统使用Microsoft公司的SQLSERVER2005数据库,此处的数据表的实现是基于系统设计中数据库设计中表结构而实现的各表的关系如下图所示图5-1表关系图
5.
1.2存储过程的实现存储过程
[9]
[10](StoredProcedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程本数据库中只要用了以下的存储过程
1.proc_UserLogin存储过程proc_UserLogin存储过程是从数据表tb_Member中,获取指定用户名和密码的信息创建该存储过程的SQL语句如下ALTERproc[dbo].[proc_UserLogin]declare@UserNamevarchar50declare@Passwordvarchar50asifexistsselect*fromtb_MemberwhereUserName=@UserNameandPassword=@Passwordbeginselect*fromtb_MemberwhereUserName=@UserNameandPassword=@Passwordend
2.proc_AddUser存储过程proc_AddUser存储过程用来向用户表tb_Member中插入数据信息创建该存储过程的SQL语句如下ALTERproc[dbo].[proc_AddUser]@UserNamevarchar50@Passwordvarchar50@RealNamevarchar50@Sexbit@Phonecodechar20@Emailvarchar50@Addressvarchar200@PostCodechar10asifExistsselect*fromtb_MemberwhereUserName=@UserNamereturn-100elsebeginInserttb_MemberUserNamePasswordRealNameSexPhonecodeEmailAddressPostCodevalues@UserName@Password@RealName@Sex@Phonecode@Email@Address@PostCodereturn100end
3.proc_GetUI存储过程proc_GetUI存储过程是用来从用户信息表tb_Member中,查询指定用户ID代号的相关信息创建该存储过程的SQL语句如下ALTERproc[dbo].[proc_GetUI]declare@MemberIDintasifexistsselect*fromtb_MemberwhereMemberID=@MemberIDbeginselect*fromtb_MemberwhereMemberID=@MemberIDend
4.proc_ModifyUser存储过程proc_ModifyUser存储过程是通过用户ID号修改用户信息表tb_Member中的相关信息创建该存储过程的SQL语句如下ALTERproc[dbo].[proc_ModifyUser]@UserNamevarchar50@Passwordvarchar50@RealNamevarchar50@Sexbit@Phonecodechar20@Emailvarchar50@Addressvarchar200@PostCodechar10@MemberIDintasupdatetb_MembersetUserName=@UserNamePassword=@PasswordRealName=@RealNameSex=@SexPhonecode=@PhonecodeEmail=@EmailAddress=@AddressPostCode=@PostCodewhereMemberID=@MemberID
5.proc_DeplayGI存储过程proc_DeplayGI存储过程用于从商品信息表tb_BookInfo中,分类检索相关产品的4条信息创建该存储过程的SQL语句如下ALTERproc[dbo].[proc_DeplayGI]declare@Deplayintasif@Deplay=1--精品推出beginselecttop3*fromtb_BookInfowhereIsrefinement=1endelseif@Deplay=2--特价商品beginselecttop6*fromtb_BookInfowhereIsDiscount=1endelseif@Deplay=3--热销商品beginselecttop6*fromtb_BookInfowhereIsHot=1end
6.proc_GIList存储过程proc_GIList存储过程用于从商品信息表tb_BookInfo中,分类检索所有商品的相关信息创建该存储过程的SQL语句如下ALTERproc[dbo].[proc_GIList]declare@ClassIDintdeclare@Deplayintasif@ClassID=0beginif@Deplay=1--最新商品beginselect*fromtb_BookInfowhereDATEDIFFdayLoadDategetdate7endelseif@Deplay=2--精品推荐beginselect*fromtb_BookInfowhereIsrefinement=1endelseif@Deplay=3--特价商品beginselect*fromtb_BookInfowhereIsDiscount=1endelseif@Deplay=4--热销商品beginselect*fromtb_BookInfowhereIsHot=1endendelsebeginselect*fromtb_BookInfowhereClassID=@ClassIDend
7.proc_GCN存储过程proc_GCN存储过程用于从商品类别表tb_Class中,获取指定商品类别号的商品类别名称创建该存储过程的SQL语句如下ALTERproc[dbo].[proc_GCN]declare@ClassIDintasifexistsselect*fromtb_ClasswhereClassID=@ClassIDbeginselectClassNamefromtb_ClasswhereClassID=@ClassIDend
8.proc_AddOI存储过程proc_AddOI存储过程是用于向订单信息表tb_OrderInfo中,插入订单信息,并输出订单ID号创建该存储过程的SQL语句如下ALTERproc[dbo].[proc_AddOI]declare@BooksFeefloatdeclare@ShipFeefloatdeclare@ShipTypevarchar50declare@Namevarchar50declare@Phonevarchar20declare@PostCodechar10declare@Addressvarchar200declare@Emailvarchar50declare@OrderIDintoutputasInsertintotb_OrderInfoBooksFeeShipFeeTotalPriceShipTypeReceiverNameReceiverPhoneReceiverPostCodeReceiverAddressReceiverEmailvalues@BooksFee@ShipFee@BooksFee+@ShipFee@ShipType@Name@Phone@PostCode@Address@Emailselect@OrderID=@@identity
5.2页面的实现
5.
2.1自定义控件自定义控件
[11]是已编译的服务器端控件,它将用户界面和其他功能都封装起来到可复用的包中,自定义控件能够将各个子控件整合在一起,形成一个整体,当再次使用时,不再需要编译,节约了时间,优化了系统在本系统中,只要有四个自定义控件
(1)menu.ascx此控件只要实现主页顶部导航功能,指引用户购物,固定页面风格其设计如下图5-2menu控件界面其代码如下publicpartialclassuserControl_menu:System.Web.UI.UserControl{CommonClassccObj=newCommonClass;protectedvoidPage_LoadobjectsenderEventArgse{this.labDate.Text=今天是+System.DateTime.Now.ToStringyyyy年MM月dd日;}protectedvoidlnkbtnfeedback_ClickobjectsenderEventArgse{ifSession[UserName]==null{Response.WriteccObj.MessageBox您还没有登录!Default.aspx;}else{Response.WriteccObj.MessageBoxDefault.aspx;}}protectedvoidlnkbtnMyWord_ClickobjectsenderEventArgse{ifSession[UserName]==null{Response.WriteccObj.MessageBox您还没有登录!Default.aspx;}else{Response.WriteccObj.MessageBoxDefault.aspx;}}protectedvoidlnkbtnOut_ClickobjectsenderEventArgse{ifSession[UserName]!=null{Session[UserID]=null;//用户的ID代号Session[Username]=null;//用户登录名Response.WriteccObj.MessageBox谢谢您的光顾!Default.aspx;}
(2)LoadingControl.ascx此控件将Textbox、Label、ImageButton等控件整合来一起,实现用户注册及登录页面的转跳如设计原形如下图所示图5-3LoadingContral控件界面其代码如下protectedvoidbtnLoad_ClickobjectsenderImageClickEventArgse{//清空Session对象Session[UserID]=null;Session[Username]=null;ifthis.txtName.Text.Trim==||this.txtPassword.Text.Trim=={Response.WriteccObj.MessageBoxPage登录名和密码不能为空!;}else{ifthis.txtValid.Text.Trim==this.labValid.Text.Trim{//对密码进行MD5加密stringpassword=this.txtPassword.Text.Trim;MD5CryptoServiceProvidermd5=newMD5CryptoServiceProvider;byte[]dataToHash_Bytes=System.Text.Encoding.Unicode.GetBytespassword;byte[]md5_Bytes=md
5.ComputeHashdataToHash_Bytes;stringstrPwd=System.Text.Encoding.Unicode.GetStringmd5_Bytes;//调用UserClass类的UserLogin方法判断用户是否为合法用户DataTabledsTable=ucObj.UserLoginthis.txtName.Text.TrimstrPwd;ifdsTable!=null//判断用户是否存在{Session[UserID]=Convert.ToInt32dsTable.Rows
[0]
[0].ToString;//保存用户IDSession[Username]=dsTable.Rows
[0]
[1].ToString;//保存用户登录名//Response.RedirectRequest.CurrentExecutionFilePath;//跳转到当前请求的虚拟路径Response.RedirectDefault.aspx;//跳转到当前请求的虚拟路径}else{Response.WriteccObj.MessageBoxPage您的登录有误,请核对后再重新登录!;}}else{Response.WriteccObj.MessageBoxPage请正确输入验证码!;}}}
(3)bottom.ascx此控件用于页面底部,显示页面相关信息其设计原形如下图图5-4bottom控件界面其代码如下
(4)navigate.ascx此控件为商品类别定义,指出商品的类别,方便用户选购其设计原形如下图图5-5navigate控件界面其代码如下publicpartialclassuserControl_navigate:System.Web.UI.UserControl{GoodsClassgcObj=newGoodsClass;protectedvoidPage_LoadobjectsenderEventArgse{if!IsPostBack{gcObj.DLClassBindthis.dlClass;gcObj.DLNewGoodsthis.dlNewGoods;}}protectedvoiddlClass_ItemCommandobjectsourceDataListCommandEventArgse{ife.CommandName==select{Response.RedirectgoodsList.aspxid=+e.CommandArgument;}}publicstringGetClassNameintIntClassID{returngcObj.GetClassIntClassID;}protectedvoiddlNewGoods_ItemCommandobjectsourceDataListCommandEventArgse{ife.CommandName==detailSee{Session[address]=;Session[address]=Default.aspx;Response.Redirect~/showInfo.aspxid=+Convert.ToInt32e.CommandArgument.ToString;}}
5.
2.2母版页设计母版页
[12]
[13]为具有扩展名.master(如MySite.master)的ASP.NET文件,它具有可以包括静态文本、HTML元素和服务器控件的预定义布局,母版页可以为应用程序中的页创建一致的布局单个母版页可以为应用程序中的所有页(或一组页)定义所需的外观和标准行为然后可以创建包含要显示的内容的各个内容页当用户请求内容页时,这些内容页与母版页合并以将母版页的布局与内容页的内容组合在一起输出母版页具有下面的优点
[14]—使用母版页可以集中处理页的通用功能,以便可以只在一个位置上进行更新—使用母版页可以方便地创建一组控件和代码,并将结果应用于一组页例如,可以在母版页上使用控件来创建一个应用于所有页的菜单—通过允许控制占位符控件的呈现方式,母版页使您可以在细节上控制最终页的布局—母版页提供一个对象模型,使用该对象模型可以从各个内容页自定义母版页本系统主要使用上述四个自定义控件来构建母版页,并在每个页面中导入母版页,其导入代码如下%@MasterLanguage=C#AutoEventWireup=trueCodeFile=MasterPage.master.csInherits=MasterPage%%@RegisterSrc=userControl/navigate.ascxTagName=navigateTagPrefix=uc3%%@RegisterSrc=userControl/bottom.ascxTagName=bottomTagPrefix=uc4%%@RegisterSrc=userControl/LoadingControl.ascxTagName=LoadingControlTagPrefix=uc2%%@RegisterSrc=userControl/menu.ascxTagName=menuTagPrefix=uc1%
5.
2.3购物车的实现在实现购物车功能时需要考虑两个条件
[15],一是如何区分用户与购物车的关系,而是购物车中的商品存放的结构1.用户与购物车的对应关系用户与购物车的对应关系,即每个用户都有自己的购物车,购物车不能混用,而且必须保证,当用户一退出系统,他的购物也就消失这种特性正是Session对象的特性,所以用Session对象在用户登录期间传递购物信息2.购物车中商品存放的结构实现购物车的实质是增加一个(商品名,商品个数)的(名,值)对,该结构正是一个哈希表的结构,所以用HashTable来表示用户的购买情况
(1)向购物车中添加商品当用户向购物车中添加商品时,首先判断用户是否已经有了购物车如果用户没有,则重新分配一个给用户,然后添加一个(名,值)对,其中,“名”是这个商品的ID代号,“值”为1,表示购买了一个商品;反之,如果用户已经有了购物车,则首先判断该购物车中是否已经存在该商品
[16]如果有则表示用户想多买一个,此时把这个商品的“值”,即数量加1;如果没有,则新增一个(名,值)对代码如下HashtablehashCar;ifSession[ShopCart]==null{//如果用户没有分配购物车hashCar=newHashtable;//新生成一个hashCar.Adde.CommandArgument1;//添加一个商品Session[ShopCart]=hashCar;//分配给用户}else{//用户已经有购物车hashCar=HashtableSession[ShopCart];//得到购物车的hash表ifhashCar.Containse.CommandArgument//已有此商品,商品数量加1{intcount=Convert.ToInt32hashCar[e.CommandArgument].ToString;//得到该商品数量hashCar[e.CommandArgument]=count+1;//商品数量加1}elsehashCar.Adde.CommandArgument1;//没有此商品,则添加一个项}
(2)修改购物车中的商品当用户需要修改购物车中某类商品的数量时,首先将包含在Session[“ShopCart”]类对象中的购物信息赋给HashTable类对象
[17],然后利用foreach循环语句在购物信息显示框中获取修改后的商品数量,并对HashTable类对象做相应的更改,最后将修改后的HashTable类对象重新赋给Session[“ShopCart”]对象代码如下hashCar=HashtableSession[ShopCart];//获取其购物车foreachGridViewRowgvrinthis.gvShopCart.Rows{TextBoxotb=TextBoxgvr.FindControltxtNum;//找到用来输入数量的TextBox控件intcount=Int
32.Parseotb.Text;//获得用户输入的数量值stringBookID=gvr.Cells
[1].Text;//得到该商品的ID代hashCar[BookID]=count;//更新hashTable表}Session[ShopCart]=hashCar;//更新购物车
(3)删除购物车中的某类商品当用户要从购物车中删除指定键的某类商品,可以使用HashTable的Remove方法将该类商品从购物车中删除
[18],然后将修改后的HashTable类对象重新赋给Session[“ShopCart”]对象代码如下hashCar=HashtableSession[ShopCart];//获取其购物车hashCar.Removee.CommandArgument;Session[ShopCart]=hashCar;//更新购物车
(4)清空购物车当用户需要清空购物车中的商品信息,只需将Session[“ShopCart”]对象清空代码如下Session[“ShopCart”]=null6系统测试
6.1系统测试的必要性信息技术的飞速发展,使软件产品应用到社会的各个领域,软件产品的质量自然成为人们共同关注的焦点不论软件的生产者还是软件的使用者,生存在竞争的环境中,软件开发商为了占有市场,必须把产品质量作为企业的重要目标之一,以免在激烈的竞争中被淘汰出局用户为了保证自己业务的顺利完成,当然希望选用优质的软件质量不佳的软件产品不仅会使开发商的维护费用和用户的使用成本大幅增加,还可能产生其他的责任风险,造成公司信誉下降,继而冲击股票市场在一些关键应用中,比如军事上、商业上、医院上等多种行业中,如果软件出了问题,将会导致很大的事件发生,还有可能威胁到人的生命
6.2测试方法软件测试方法从测试人员角度看,可分为手动测试和自动测试从源代码的角度可分为单元测试和功能测试从理论定义来分,可分为黑盒测试,白盒测试
[19]本系统测试使用黑盒测试
6.3测试过程
6.
3.1前台购物测试
1.打开浏览器,在地址栏中输入http://
127.
0.
0.1,打开网页,出现站点的主页,在这个页面上,用户可以进行注册、登录、浏览商品等操作,如下图所示图6-1主页界面
2.点击主页面上的“注册”按钮,可以转跳到注册界面,如下图图6-2注册界面
3.完成注册并登录后,就可以购买商品点击主页上的商品分类图标,如“小说”,进入相应的商品子类页面,点击购买后,对应的商品将会被加入到购物车模块中,点击“购物车”可以查看购物车,并可以修改或删除购物车中的商品如下图所示图6-3购物车页面4.点击“前往服务台”可以进入服务台,生成客户订单并填写相应的收货信息,点击提交订单后,订单信息将被存入数据库中,并将订单提交给后台,由管理员来处理订单,同时页面将跳至支付页面,客户支付完成后,购物结束如下图所示图6-4商品详细信息图图6-5支付页面
6.
3.2后台管理测试1.点击主页下面的“后台入口”,将将弹出后台登击框,输入管理员帐号密码后,进入到后台管理页面,在后台管理页面中,可以进行订单管理、库存管理、管理员管理、用户管理、系统管理等如下图所示图6-6后台管理面板图2.分别点击要管理的项目,进入到相应的管理界面,如点击订单管理中的“未发货”,则显示出未发货的订单信息,如下图所示图6-7未发货订单管理界面3.点击类别添加,出现添加类别的界面,如下图所示图6-8添加类别界面4.点击添加管理员,出现添加管理员界面,如下图所示图6-9添加管理员界面5.点击管理会员,出现会员信息,如下图所示图6-10会员管理界面6.点击上传管理,出现上传管理页面,如下图所示图6-11上传管理页面经过测试,该项目达到预期的目标7结束语
7.1总结本文从电子商务网站的现状和研究意义进行分析,按照软件开发的一般流程对电子商务网站进行了需求分析,系统设计分析等给出了系统的用例模型,定义了系统的结构在系统实现阶段,利用模块化设计思想,对各个页面进行独立设计,降低了开发难度,最后进行编码实现系统所有功能
7.2展望当然,由于本人技术有限,且时间仓促,系统的设计离上线的标准还有一定的距离,很多功能还有待完善,其中包括
(1)商品搜索功能能够让用户更快速地查找和购买所想要的图书
(2)广告模块广告是网站盈利的主要图径之一
(3)电子银行接口每一个电子商务网站必须实现的功能
(4)网站界面提高界面的和谐度,改善用户体验参考文献
[1]田杰,乔东亮,秦必瑜.电子商务模式系统及其运营[M].中国传媒大学出版社.
200910.
[2]高百宁,邓辉.电子商务基础与应用教程[M].北京科学出版社
2011.
[3](美)加西亚-莫利纳,数据库系统实现(英文版第2版)[M].机械工业出版社.
201001.
[4]MichaelKofler著.杨晓云等译.MySQL5权威指南[M].北京:人民邮电出版社
2006.
[5]陈伟.SQLServer2005数据库应用与开发教程[M].清华大学出版社.
2007.09
[6]刘耀儒,张莉,宋锦华.新概念SQLSERVER2005教程(第5版)[M].兵器工业出版社.200712
[7](美)AndrewS.Tanenbaum等著.ComputerNetworksFourthEdition(英文影印版)[M].北京清华大学出版社.
200410.
[8](美)法禾,(美)罗伯森.SQL语言艺术[M].北京电子工业出版社.
2008.03
[9](美)戴维森.SQLSERVER2008数据库设计及实现[M].北京人民邮电出版社.
2009.01
[10]美兰吉特.SQLSERVER2008商业智能完美解决方案[M].北京人民邮电出版社.
2010.08
[11]吴应良汪闯.基于WebServices的电子采购系统的设计与实现[J].计算机应用研究
200704.
[12]陈烽,陈蓉.基于MVC模式和JavaBean的B2C电子商城框架的实现[J].电脑与电信
201010.
[13]曾宇胸王非.基于Struts框架技术的WEB应用系统[J].计算机应用与软件
200807.
[14]BruceEckel.ThinkinginJavaThirdEdition[M].PrenticeHallPTR.20038
[15]李恩临.基于JSP的公司文件管理系统的MVC模式设计[J].中国高新技术企业
200808.
[16]马瑞新.ASP.NET
2.0程序设计案例教程[M].北京清华大学出版社,2009,
5.
[17](美)贝尔利纳索.ASP.NET
2.0网站开发全程解析(第2版)[M].北京清华大学出版社,2008,
6.
[18]Spaanjaars.ASP.NET
3.5入门经典[M].清华大学出版社.
200810.
[19]美Patton.软件测试(原书第二版)[M].北京机械工业出版社.
2006.01
[20]李龙.软件测试实用技术与常用模板[M].北京机械工业出版社.
2010.10致谢本毕业论文是在王静老师的悉心指导下完成的,他严谨细致,一丝不苟的作风一直是我工作和学习的榜样从课题的选择到最终的完成,王静老师都给予我细心的指导和不懈的支持,在此向王静老师表示衷心的感谢和致以崇高的敬意在此,我还要感谢我的同门在整个过程中提供的帮助,特别是感谢黄伟同学在美工方面提供的技术支持,和老李同学和周工在开发过程中的大力支持,没有他们的帮助,就没有按期完工的作品,谢谢你们附录部分代码
1.Default.aspx.cs:usingSystem;usingSystem.Data;usingSystem.Configuration;usingSystem.Web;usingSystem.Web.Security;usingSystem.Web.UI;usingSystem.Web.UI.WebControls;usingSystem.Web.UI.WebControls.WebParts;usingSystem.Web.UI.HtmlControls;usingSystem.Data.SqlClient;usingSystem.Collections;publicpartialclass_Default:System.Web.UI.Page{CommonClassccObj=newCommonClass;GoodsClassgcObj=newGoodsClass;protectedvoidPage_LoadobjectsenderEventArgse{if!IsPostBack{RefineBind;HotBind;DiscountBind;}}//绑定市场价格publicstringGetVarMKPstringstrMarketPrice{returnccObj.VarStrstrMarketPrice2;}//绑定热卖价格publicstringGetVarHotstringstrHotPrice{returnccObj.VarStrstrHotPrice2;}protectedvoidRefineBind{gcObj.DLDeplayGI1this.dLRefineRefine;}protectedvoidHotBind{gcObj.DLDeplayGI3this.dlHotHot;}protectedvoidDiscountBind{gcObj.DLDeplayGI2this.dlDiscountDiscount;}publicvoidAddressBackDataListCommandEventArgse{Session[address]=;Session[address]=Default.aspx;Response.Redirect~/showInfo.aspxid=+Convert.ToInt32e.CommandArgument.ToString;}protectedvoiddLRefine_ItemCommandobjectsourceDataListCommandEventArgse{ife.CommandName==detailSee{AddressBacke;}elseife.CommandName==buy{AddShopCarte;}}protectedvoiddlDiscount_ItemCommandobjectsourceDataListCommandEventArgse{ife.CommandName==detailSee{AddressBacke;}elseife.CommandName==buy{AddShopCarte;}}protectedvoiddlHot_ItemCommandobjectsourceDataListCommandEventArgse{ife.CommandName==detailSee{AddressBacke;}elseife.CommandName==buy{AddShopCarte;}}///summary///向购物车中添加新商品////summary///paramname=e///获取或设置可选参数,///该参数与关联的CommandName///一起被传递到Command事件////parampublicvoidAddShopCartDataListCommandEventArgse{HashtablehashCar;ifSession[ShopCart]==null{//如果用户没有分配购物车hashCar=newHashtable;//新生成一个hashCar.Adde.CommandArgument1;//添加一个商品Session[ShopCart]=hashCar;//分配给用户}else{//用户已经有购物车hashCar=HashtableSession[ShopCart];//得到购物车的hash表ifhashCar.Containse.CommandArgument//购物车中已有此商品,商品数量加1{intcount=Convert.ToInt32hashCar[e.CommandArgument].ToString;//得到该商品的数量hashCar[e.CommandArgument]=count+1;//商品数量加1}elsehashCar.Adde.CommandArgument1;//如果没有此商品,则新添加一个项}}protectedvoidButton1_ClickobjectsenderEventArgse{}}
2.CheckOut.aspx.cs:usingSystem;usingSystem.Data;usingSystem.Configuration;usingSystem.Collections;usingSystem.Web;usingSystem.Web.Security;usingSystem.Web.UI;usingSystem.Web.UI.WebControls;usingSystem.Web.UI.WebControls.WebParts;usingSystem.Web.UI.HtmlControls;usingSystem.Data.SqlClient;usingSystem.Text.RegularExpressions;publicpartialclasscheckOut:System.Web.UI.Page{CommonClassccObj=newCommonClass;DBClassdbObj=newDBClass;OrderClassocObj=newOrderClass;UserClassucObj=newUserClass;DataTabledtTable;HashtablehashCar;stringstrSql;protectedvoidPage_LoadobjectsenderEventArgse{if!IsPostBack{ifSession[Username]!=null{//如果用户已登录,则显示用户的基本信息DataTabledsTable=ucObj.GetUserInfoConvert.ToInt32Session[UserID].ToString;this.txtReciverName.Text=dsTable.Rows
[0]
[1].ToString;//收货人姓名this.txtReceiverPhone.Text=dsTable.Rows
[0]
[5].ToString;//收货人电话号码this.txtReceiverEmails.Text=dsTable.Rows
[0]
[6].ToString;//收货人Emailthis.txtReceiverPostCode.Text=dsTable.Rows
[0]
[8].ToString;//收货人邮编this.txtReceiverAddress.Text=dsTable.Rows
[0]
[7].ToString;//收货人详细地址}ifSession[ShopCart]==null{//如果没有购物,则给出相应信息,并隐藏按钮this.labMessage.Text=您还没有购物!;//显示提示信息this.btnConfirm.Visible=false;//隐藏“确认”按钮}else{hashCar=HashtableSession[ShopCart];//获取其购物车ifhashCar.Count==0{//如果没有购物,则给出相应信息,并隐藏按钮this.labMessage.Text=您购物车中没有商品!;//显示提示信息this.btnConfirm.Visible=false;//隐藏“确认”按钮}else{//设置购物车内容的数据源dtTable=newDataTable;DataColumncolumn1=newDataColumnNo;//序号列DataColumncolumn2=newDataColumnBookID;//书籍ID代号DataColumncolumn3=newDataColumnBookName;//书籍名称DataColumncolumn4=newDataColumnNum;//数量DataColumncolumn5=newDataColumnprice;//单价DataColumncolumn6=newDataColumntotalPrice;//总价dtTable.Columns.Addcolumn1;//添加新列dtTable.Columns.Addcolumn2;dtTable.Columns.Addcolumn3;dtTable.Columns.Addcolumn4;dtTable.Columns.Addcolumn5;dtTable.Columns.Addcolumn6;DataRowrow;//对数据表中每一行进行遍历,给每一行的新列赋值foreachobjectkeyinhashCar.Keys{row=dtTable.NewRow;row[BookID]=key.ToString;//商品IDrow[Num]=hashCar[key].ToString;//商品数量dtTable.Rows.Addrow;}//计算价格DataTabledstable;inti=1;floatprice;//商品单价intnum;//商品数量floattotalPrice=0;//商品总价格inttotailNum=0;//商品总数量foreachDataRowdrRowindtTable.Rows{strSql=selectBookNameHotPricefromtb_BookInfowhereBookID=+Convert.ToInt32drRow[BookID].ToString;dstable=dbObj.GetDataSetStrstrSqltbGI;drRow[No]=i;drRow[BookName]=dstable.Rows
[0]
[0].ToString;//书籍名称drRow[price]=dstable.Rows
[0]
[1].ToString;//书籍名称price=float.Parsedstable.Rows
[0]
[1].ToString;num=Int
32.ParsedrRow[Num].ToString;drRow[totalPrice]=price*num;//总价totalPrice+=price*num;//计算合价totailNum+=num;//计算商品总数i++;}this.labTotalPrice.Text=totalPrice.ToString;//显示所有商品的价格this.labTotalNum.Text=totailNum.ToString;//显示商品总数this.gvShopCart.DataSource=dtTable.DefaultView;//绑定GridView控件this.gvShopCart.DataBind;}}}}protectedvoidbtnConfirm_ClickobjectsenderEventArgse{ifPage.IsValid{//得到用户输入的信息stringstrPhone;//电话号码stringstrEmail;//EmailstringstrZip;//邮政编码floatfltShipFee;//邮递方式及其费用ifIsValidPostCodethis.txtReceiverPostCode.Text.Trim==true//判断输入的邮编是否合法{strZip=this.txtReceiverPostCode.Text.Trim;}else{Response.WriteccObj.MessageBox输入有误!;return;}ifIsValidPhonethis.txtReceiverPhone.Text.Trim==true//判断输入的电话号码是否合法{strPhone=this.txtReceiverPhone.Text.Trim;}else{Response.WriteccObj.MessageBox输入有误!;return;}ifIsValidEmailthis.txtReceiverEmails.Text.Trim==true//判断输入的Email是否合法{strEmail=this.txtReceiverEmails.Text.Trim;}else{Response.WriteccObj.MessageBox输入有误!;return;}ifthis.ddlShipType.SelectedIndex!=0//获取邮递方式及其费用{fltShipFee=float.Parsethis.ddlShipType.SelectedValue.ToString;}else{Response.WriteccObj.MessageBox请选择运输方式!;return;}stringstrName=this.txtReciverName.Text.Trim;//收货人姓名stringstrAddress=this.txtReceiverAddress.Text.Trim;//收货人详细地址stringstrRemark=this.txtRemark.Text.Trim;//备注intIntTotalNum=int.Parsethis.labTotalNum.Text;//商品总数floatfltTotalShipFee=IntTotalNum*fltShipFee;//运输总费用//将订单信息插入订单表中intIntOrderID=ocObj.AddOrderfloat.Parsethis.labTotalPrice.TextfltTotalShipFeethis.ddlShipType.SelectedItem.TextstrNamestrPhonestrZipstrAddressstrEmail;intIntBookID;//商品IDintIntNum;//购买商品数量floatfltTotalPrice;//对订单中的每一个货物插入订单详细表中foreachGridViewRowgvrinthis.gvShopCart.Rows{IntBookID=int.Parsegvr.Cells
[1].Text;IntNum=int.Parsegvr.Cells
[3].Text;fltTotalPrice=float.Parsegvr.Cells
[5].Text;ocObj.AddDetailIntBookIDIntNumIntOrderIDfltTotalPricestrRemark;}//设置SessionSession[ShopCart]=null;//清空购物车Response.RedirectPayWay.aspxOrderID=+IntOrderID;//Response.RedirectGoBank.aspxOrderID=+IntOrderID;}}//判断修改的数据是否为有效的数据publicboolIsValidPostCodestringnum{//验证邮编returnRegex.IsMatchnum@\d{6};}publicboolIsValidPhonestringnum{//验证电话号码returnRegex.IsMatchnum@\\d{34}\|\d{34}-\d{78}$;}publicboolIsValidEmailstringnum{//验证EmailreturnRegex.IsMatchnum@\w+[-+.]\w+*@\w+[-.]\w+*\.\w+[-.]\w+*;}}
3.GoBank.aspx.cs:publicpartialclassGoBank:System.Web.UI.Page{DBClassdbObj=newDBClass;publicstaticBankPaybankpay=newBankPay;//实例化类对象protectedvoidPage_LoadobjectsenderEventArgse{if!IsPostBack{bankpay=GetPayInfo;}}#region初始化BankPay类publicBankPayGetPayInfo{//从订单信息表中获取订单编号、订单金额stringstrSql=selectRoundTotalPrice2asTotalPricefromtb_OrderInfowhereOrderID=+Convert.ToInt32Page.Request[OrderID].Trim;DataTabledsTable=dbObj.GetDataSetStrstrSqltbOI;bankpay.Orderid=Request[OrderID].Trim;//订单编号bankpay.Amount=Convert.ToStringfloat.ParsedsTable.Rows
[0][TotalPrice].ToString*100;//订单金额bankpay.OrderDate=DateTime.Now.ToStringyyyyMMddhhmmss;//交易日期时间bankpay.Path1=Server.MapPath@bank\user.crt;//公钥路径bankpay.Path2=Server.MapPath@bank\user.crt;//拆分pfx后缀的证书后的公钥路径bankpay.Path3=Server.MapPath@bank\user.key;//拆分pfx后缀的证书后的私钥路径//下面是需要加密的明文字符串bankpay.Msg=bankpay.InterfaceName+bankpay.InterfaceVersion+bankpay.MerID+bankpay.MerAcct+bankpay.MerURL+bankpay.NotifyType+bankpay.Orderid+bankpay.Amount+bankpay.CurType+bankpay.ResultType+bankpay.OrderDate+bankpay.VerifyJoinFlag;ICBCEBANKUTILLib.B2CUtilobj=newICBCEBANKUTILLib.B2CUtil;//项目中引用组件,以声明的方式创建com组件ifobj.initbankpay.Path1bankpay.Path2bankpay.Path3bankpay.Key==0//加载公钥、私钥、密码,如果返回0则初始化成功{bankpay.MerSignMsg=obj.signCbankpay.Msgbankpay.Msg.Length;//加密明文bankpay.MerCert=obj.getCert1;//提取证书}else{Response.Writeobj.getRC;//返回签名失败信息}returnbankpay;}#endregion}
4.goodsList.aspx.cs:usingSystem;usingSystem.Data;usingSystem.Configuration;usingSystem.Collections;usingSystem.Web;usingSystem.Web.Security;usingSystem.Web.UI;usingSystem.Web.UI.WebControls;usingSystem.Web.UI.WebControls.WebParts;usingSystem.Web.UI.HtmlControls;usingSystem.Data.SqlClient;publicpartialclassgoodsList:System.Web.UI.Page{CommonClassccObj=newCommonClass;GoodsClassgcObj=newGoodsClass;DBClassdbObj=newDBClass;protectedvoidPage_LoadobjectsenderEventArgse{if!IsPostBack{dlBind;//显示浏览的商品信息deplayTitle;//显示当前页浏览商品的位置}}///summary///说明dlBind方法用于绑定相关的商品信息///如果Request[var]的值为1,表示点击头控件中的“新品上市”、“特价商品”和“热销商品”导航到该浏览页///否则,表示点击分类导航条中的商品类别名导航到该浏览页////summarypublicvoiddlBind{ifthis.Request[var]==1{dlBindPageConvert.ToInt32Request[id].ToString0;//分页显示新上市商品/特价商品/热销商品}else{dlBindPage0Convert.ToInt32Request[id].ToString;//分页显示某个商品类别下的商品信息}}///summary///说明显示当前页浏览商品的位置////summarypublicvoiddeplayTitle{ifthis.Request[var]==1{//如果Request[var]的值为1,表示点击头控件中的“新品上市”、“特价商品”和“热销商品”导航到该浏览页switchthis.Request[id]{case1:this.labTitle.Text=首页/新品上市;this.Page.Title=新品上市;break;case2:this.labTitle.Text=首页/精品推荐;this.Page.Title=精品推荐;break;case3:this.labTitle.Text=首页/特价商品;this.Page.Title=特价商品;break;case4:this.labTitle.Text=首页/热销商品;this.Page.Title=热销商品;break;}}else{//表示点击分类导航条中的商品类别名导航到该浏览页stringstrClassName=gcObj.GetClassConvert.ToInt32this.Request[id].ToString;this.labTitle.Text=首页/商品分类/+strClassName;}}publicvoiddlBindPageintIntDeplayintIntClass{//获取数据源的数据表SqlCommandmyCmd=dbObj.GetCommandProcproc_GIList;//添加参数SqlParameterDeplay=newSqlParameter@DeplaySqlDbType.Int4;Deplay.Value=IntDeplay;myCmd.Parameters.AddDeplay;//添加参数SqlParameterClass=newSqlParameter@ClassIDSqlDbType.Int4;Class.Value=IntClass;myCmd.Parameters.AddClass;dbObj.ExecNonQuerymyCmd;DataTabledsTable=dbObj.GetDataSetmyCmdtbGI;intcurpage=Convert.ToInt32this.labPage.Text;PagedDataSourceps=newPagedDataSource;ps.DataSource=dsTable.DefaultView;ps.AllowPaging=true;//是否可以分页ps.PageSize=15;//显示的数量ps.CurrentPageIndex=curpage-1;//取得当前页的页码this.lnkbtnUp.Enabled=true;this.lnkbtnNext.Enabled=true;this.lnkbtnBack.Enabled=true;this.lnkbtnOne.Enabled=true;ifcurpage==1{this.lnkbtnOne.Enabled=false;//不显示第一页按钮this.lnkbtnUp.Enabled=false;//不显示上一页按钮}ifcurpage==ps.PageCount{this.lnkbtnNext.Enabled=false;//不显示下一页this.lnkbtnBack.Enabled=false;//不显示最后一页}this.labBackPage.Text=Convert.ToStringps.PageCount;this.dLGoodsList.DataSource=ps;this.dLGoodsList.DataKeyField=BookID;this.dLGoodsList.DataBind;}protectedvoidlnkbtnOne_ClickobjectsenderEventArgse{this.labPage.Text=1;this.dlBind;}protectedvoidlnkbtnUp_ClickobjectsenderEventArgse{this.labPage.Text=Convert.ToStringConvert.ToInt32this.labPage.Text-1;this.dlBind;}protectedvoidlnkbtnNext_ClickobjectsenderEventArgse{this.labPage.Text=Convert.ToStringConvert.ToInt32this.labPage.Text+1;this.dlBind;}protectedvoidlnkbtnBack_ClickobjectsenderEventArgse{this.labPage.Text=this.labBackPage.Text;this.dlBind;}//绑定市场价格publicstringGetVarMKPstringstrMarketPrice{returnccObj.VarStrstrMarketPrice2;}//绑定热卖价格publicstringGetVarHotstringstrHotPrice{returnccObj.VarStrstrHotPrice2;}publicvoidAddressBackDataListCommandEventArgse{Session[address]=;Session[address]=Default.aspx;Response.Redirect~/showInfo.aspxid=+Convert.ToInt32e.CommandArgument.ToString;}protectedvoiddLGoodsList_ItemCommandobjectsourceDataListCommandEventArgse{ife.CommandName==detailSee{AddressBacke;}elseife.CommandName==buy{AddShopCarte;}}///summary///向购物车中添加新商品////summary///paramname=e///获取或设置可选参数,///该参数与关联的CommandName///一起被传递到Command事件////parampublicvoidAddShopCartDataListCommandEventArgse{HashtablehashCar;ifSession[ShopCart]==null{//如果用户没有分配购物车hashCar=newHashtable;//新生成一个hashCar.Adde.CommandArgument1;//添加一个商品Session[ShopCart]=hashCar;//分配给用户}else{//用户已经有购物车hashCar=HashtableSession[ShopCart];//得到购物车的hash表ifhashCar.Containse.CommandArgument//购物车中已有此商品,商品数量加1{intcount=Convert.ToInt32hashCar[e.CommandArgument].ToString;//得到该商品的数量hashCar[e.CommandArgument]=count+1;//商品数量加1}elsehashCar.Adde.CommandArgument1;//如果没有此商品,则新添加一个项}}}
5.helpCenter.aspx.cs:usingSystem;usingSystem.Data;usingSystem.Configuration;usingSystem.Collections;usingSystem.Web;usingSystem.Web.Security;usingSystem.Web.UI;usingSystem.Web.UI.WebControls;usingSystem.Web.UI.WebControls.WebParts;usingSystem.Web.UI.HtmlControls;publicpartialclasshelpCenter:System.Web.UI.Page{protectedvoidPage_LoadobjectsenderEventArgse{stringsName=Page.Request.QueryString[TextName].ToString;stringpath=Server.MapPath~\\App_Data\\+sName+.Txt;System.IO.StreamReaderreader=newSystem.IO.StreamReaderpathSystem.Text.Encoding.Default;this.labHelp.Text=reader.ReadLine;this.txtRead.Text=reader.ReadToEnd;reader.Close;switchsName{casebmxy:this.Page.Title=保密协议;break;casejkfs:this.Page.Title=交款方式;break;casejytk:this.Page.Title=交易条款;break;casepsfw:this.Page.Title=配送范围;break;default:this.Page.Title=退换货原则;break;}}}
6.Register.aspx.cs:usingSystem;usingSystem.Data;usingSystem.Configuration;usingSystem.Collections;usingSystem.Web;usingSystem.Web.Security;usingSystem.Web.UI;usingSystem.Web.UI.WebControls;usingSystem.Web.UI.WebControls.WebParts;usingSystem.Web.UI.HtmlControls;usingSystem.Data.SqlClient;usingSystem.Security.Cryptography;publicpartialclassRegister:System.Web.UI.Page{CommonClassccObj=newCommonClass;UserClassucObj=newUserClass;protectedvoidPage_LoadobjectsenderEventArgse{}protectedvoidbtnSave_ClickobjectsenderEventArgse{//判断是否输入必要的信息ifthis.txtPostCode.Text.Trim==this.txtPhone.Text.Trim==this.txtEmail.Text.Trim=={Response.WriteccObj.MessageBoxPage请输入必要的信息!;}else{//对密码进行MD5加密stringpassword=this.txtPassword.Text.Trim;MD5CryptoServiceProvidermd5=newMD5CryptoServiceProvider;byte[]dataToHash_Bytes=System.Text.Encoding.Unicode.GetBytespassword;byte[]md5_Bytes=md
5.ComputeHashdataToHash_Bytes;stringstrPwd=System.Text.Encoding.Unicode.GetStringmd5_Bytes;//将用户输入的信息插入到用户表tb_Member中intIntReturnValue=ucObj.AddUsertxtName.Text.TrimstrPwdtxtTrueName.Text.Trimtransferthis.ddlSex.SelectedItem.TexttxtPhone.Text.TrimtxtEmail.Text.TrimtxtAddress.Text.TrimtxtPostCode.Text.Trim;ifIntReturnValue==100{Response.WriteccObj.MessageBox恭喜您,注册成功!Default.aspx;}else{Response.WriteccObj.MessageBox插入失败,该名字已存在!;}}}///summary///将性别转化为Bool值////summary///paramname=strValue需要转化的性别值/param///returns返回转化后的性别值/returnsprotectedbooltransferstringstrValue{ifstrValue==男{returntrue;}else{returnfalse;}}protectedvoidbtnReset_ClickobjectsenderEventArgse{this.txtName.Text=;//用户名this.txtPassword.Text=;//用户密码this.txtTrueName.Text=;//用户真实姓名this.txtPhone.Text=;//用户电话号码this.txtPostCode.Text=;//邮政编码this.txtEmail.Text=;//Emailthis.txtAddress.Text=;//详细地址}}
7.showCar.aspx.cs:usingSystem;usingSystem.Data;usingSystem.Configuration;usingSystem.Collections;usingSystem.Web;usingSystem.Web.Security;usingSystem.Web.UI;usingSystem.Web.UI.WebControls;usingSystem.Web.UI.WebControls.WebParts;usingSystem.Web.UI.HtmlControls;usingSystem.Data.SqlClient;usingSystem.Text.RegularExpressions;publicpartialclassshopCart:System.Web.UI.Page{CommonClassccObj=newCommonClass;DBClassdbObj=newDBClass;stringstrSql;DataTabledtTable;HashtablehashCar;protectedvoidPage_LoadobjectsenderEventArgse{if!IsPostBack{ifSession[ShopCart]==null{//如果没有购物,则给出相应信息,并隐藏按钮this.labMessage.Text=您还没有购物!;this.labMessage.Visible=true;//显示提示信息this.lnkbtnCheck.Visible=false;//隐藏“前往服务台”按钮this.lnkbtnClear.Visible=false;//隐藏“清空购物车”按钮this.lnkbtnContinue.Visible=false;//隐藏“继续购物”按钮}else{hashCar=HashtableSession[ShopCart];//获取其购物车ifhashCar.Count==0{//如果没有购物,则给出相应信息,并隐藏按钮this.labMessage.Text=您购物车中没有商品!;this.labMessage.Visible=true;//显示提示信息this.lnkbtnCheck.Visible=false;//隐藏“前往服务台”按钮this.lnkbtnClear.Visible=false;//隐藏“清空购物车”按钮this.lnkbtnContinue.Visible=false;//隐藏“继续购物”按钮}else{//设置购物车内容的数据源dtTable=newDataTable;DataColumncolumn1=newDataColumnNo;//序号列DataColumncolumn2=newDataColumnBookID;//书籍ID代号DataColumncolumn3=newDataColumnBookName;//书籍名称DataColumncolumn4=newDataColumnNum;//数量DataColumncolumn5=newDataColumnprice;//单价DataColumncolumn6=newDataColumntotalPrice;//总价dtTable.Columns.Addcolumn1;//添加新列dtTable.Columns.Addcolumn2;dtTable.Columns.Addcolumn3;dtTable.Columns.Addcolumn4;dtTable.Columns.Addcolumn5;dtTable.Columns.Addcolumn6;DataRowrow;//对数据表中每一行进行遍历,给每一行的新列赋值foreachobjectkeyinhashCar.Keys{row=dtTable.NewRow;row[BookID]=key.ToString;row[Num]=hashCar[key].ToString;dtTable.Rows.Addrow;}//计算价格DataTabledstable;inti=1;floatprice;//商品单价intcount;//商品数量floattotalPrice=0;//商品总价格foreachDataRowdrRowindtTable.Rows{strSql=selectBookNameHotPricefromtb_BookInfowhereBookID=+Convert.ToInt32drRow[BookID].ToString;dstable=dbObj.GetDataSetStrstrSqltbGI;drRow[No]=i;//序号drRow[BookName]=dstable.Rows
[0]
[0].ToString;//书籍名称drRow[price]=dstable.Rows
[0]
[1].ToString;//单价price=float.Parsedstable.Rows
[0]
[1].ToString;//单价count=Int
32.ParsedrRow[Num].ToString;drRow[totalPrice]=price*count;//总价totalPrice+=price*count;//计算合价i++;}this.labTotalPrice.Text=总价+totalPrice.ToString;//显示所有商品的价格this.gvShopCart.DataSource=dtTable.DefaultView;//绑定GridView控件this.gvShopCart.DataKeyNames=newstring[]{BookID};this.gvShopCart.DataBind;}}}}publicvoidbind{ifSession[ShopCart]==null{//如果没有购物,则给出相应信息,并隐藏按钮this.labMessage.Text=您还没有购物!;this.labMessage.Visible=true;//显示提示信息this.lnkbtnCheck.Visible=false;//隐藏“前往服务台”按钮this.lnkbtnClear.Visible=false;//隐藏“清空购物车”按钮this.lnkbtnContinue.Visible=false;//隐藏“继续购物”按钮}else{hashCar=HashtableSession[ShopCart];//获取其购物车ifhashCar.Count==0{//如果没有购物,则给出相应信息,并隐藏按钮this.labMessage.Text=您购物车中没有商品!;this.labMessage.Visible=true;//显示提示信息this.lnkbtnCheck.Visible=false;//隐藏“前往服务台”按钮this.lnkbtnClear.Visible=false;//隐藏“清空购物车”按钮this.lnkbtnContinue.Visible=false;//隐藏“继续购物”按钮}else{//设置购物车内容的数据源dtTable=newDataTable;DataColumncolumn1=newDataColumnNo;//序号列DataColumncolumn2=newDataColumnBookID;//书籍ID代号DataColumncolumn3=newDataColumnBookName;//书籍名称DataColumncolumn4=newDataColumnNum;//数量DataColumncolumn5=newDataColumnprice;//单价DataColumncolumn6=newDataColumntotalPrice;//总价dtTable.Columns.Addcolumn1;//添加新列dtTable.Columns.Addcolumn2;dtTable.Columns.Addcolumn3;dtTable.Columns.Addcolumn4;dtTable.Columns.Addcolumn5;dtTable.Columns.Addcolumn6;DataRowrow;//对数据表中每一行进行遍历,给每一行的新列赋值foreachobjectkeyinhashCar.Keys{row=dtTable.NewRow;row[BookID]=key.ToString;row[Num]=hashCar[key].ToString;dtTable.Rows.Addrow;}//计算价格DataTabledstable;inti=1;floatprice;//商品单价intcount;//商品数量floattotalPrice=0;//商品总价格foreachDataRowdrRowindtTable.Rows{strSql=selectBookNameHotPricefromtb_BookInfowhereBookID=+Convert.ToInt32drRow[BookID].ToString;dstable=dbObj.GetDataSetStrstrSqltbGI;drRow[No]=i;//序号drRow[BookName]=dstable.Rows
[0]
[0].ToString;//书籍名称drRow[price]=dstable.Rows
[0]
[1].ToString;//单价price=float.Parsedstable.Rows
[0]
[1].ToString;//单价count=Int
32.ParsedrRow[Num].ToString;drRow[totalPrice]=price*count;//总价totalPrice+=price*count;//计算合价i++;}this.labTotalPrice.Text=总价+totalPrice.ToString;//显示所有商品的价格this.gvShopCart.DataSource=dtTable.DefaultView;//绑定GridView控件this.gvShopCart.DataKeyNames=newstring[]{BookID};this.gvShopCart.DataBind;}}}protectedvoidlnkbtnUpdate_ClickobjectsenderEventArgse{hashCar=HashtableSession[ShopCart];//获取其购物车//使用foreach语句,遍历更新购物车中的商品数量foreachGridViewRowgvrinthis.gvShopCart.Rows{TextBoxotb=TextBoxgvr.FindControltxtNum;//找到用来输入数量的TextBox控件intcount=Int
32.Parseotb.Text;//获得用户输入的数量值stringBookID=gvr.Cells
[1].Text;//得到该商品的ID代hashCar[BookID]=count;//更新hashTable表}Session[ShopCart]=hashCar;//更新购物车Response.RedirectshopCart.aspx;}protectedvoidlnkbtnDelete_CommandobjectsenderCommandEventArgse{hashCar=HashtableSession[ShopCart];//获取其购物车//从Hashtable表中,将指定的商品从购物车中移除,其中,删除按钮lnkbtnDelete的CommandArgument参数值为商品ID代号hashCar.Removee.CommandArgument;Session[ShopCart]=hashCar;//更新购物车Response.RedirectshopCart.aspx;}protectedvoidlnkbtnClear_ClickobjectsenderEventArgse{Session[ShopCart]=null;Response.RedirectshopCart.aspx;}protectedvoidlnkbtnContinue_ClickobjectsenderEventArgse{Response.RedirectDefault.aspx;}protectedvoidlnkbtnCheck_ClickobjectsenderEventArgse{Response.RedirectcheckOut.aspx;}protectedvoidgvShopCart_PageIndexChangingobjectsenderGridViewPageEventArgse{gvShopCart.PageIndex=e.NewPageIndex;bind;}protectedvoidtxtNum_TextChangedobjectsenderEventArgse{hashCar=HashtableSession[ShopCart];//获取其购物车foreachGridViewRowgvrinthis.gvShopCart.Rows{TextBoxotb=TextBoxgvr.FindControltxtNum;//找到用来输入数量的TextBox控件intcount=Int
32.Parseotb.Text;//获得用户输入的数量值stringBookID=gvr.Cells
[1].Text;//得到该商品的ID代hashCar[BookID]=count;//更新hashTable表}Session[ShopCart]=hashCar;//更新购物车bind;}}注册会员浏览商品添加评论游客图3-1游客用例图登录会员退出管理个人信息管理订单浏览商品订购商品修改密码修改Email取消订单添加商品删除商品修改数量图3-2会员用例图图3-3管理员用例图登录后台管理员管理商品资料管理后台订单退出登录增加商品修改商品删除商品是载入登录界面是否忘记密码找回密码是否忘记找回密码答案提交相关资料正确回答相关问题获得新密码输入密码密码是否正确登录成功返回权限界面图3-4用户登录流量图是否是否否购物车界面查看购物车商品修改购物车物品删除购物车商品是否满意修改商品数量提交订单图3-5购物车流程图浏览商品选择商品加入购物车判断用户已注册未登录未注册已登录登录注册并登录订购商品提交订单修改订单订单成功图3-6前台用户购物流程图n11用户用户编号用户姓名用户密码联系地址用户性别联系电话E-mail购买或浏览商品商品编号商品名称所属类价格描述图片进货日期评论留言板留言者留言时间留言内容n1管理员管理员编号管理员姓名密码联系方式处理订单订单号商品种类销售日期总价格数量商品商品编号商品名称所属类价格描述图片进货日期编辑1nn。