注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

飞天心宏的博客

依稀旧梦似曾见,相逢只恨缘太迟

 
 
 

日志

 
 
关于我

出身数学,爱好文学,从事软件开发工作。一个阳光、幽默、热爱生活的男孩子,在追求理想的路上风雨无阻,勇往直前,崇尚“梦想有多远,我们就走多远”!

毕业设计-网上书店ASP.NET(正文四 )  

2009-07-23 18:29:57|  分类: 毕业设计 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

第三章 系统实现

3.1需求分析

3.1.1 功能需求

    网上书店系统的用户主要有两类:一类是消费者,消费者可以搜索相关书籍和浏览书籍详细信息,对需要购买的书籍下订单进行购买另一类是管理者,可以对网上书店中的书藉信息进行管理(包括新书上架、图书信息修改、删除等)、处理客户的订单,管理网站注册用户信息。

    鉴于网上书店系统的两种用户角色的说明,将系统分为前台和后台,这种分法也是当前网站系统惯用的做法,前台供给客户使用,用于展现信息和完成与客户的交互性处理;后台供给网站的管理者使用,用于管理网站的内容。系统采用B/S架构实现。

网上书店的用户需求说明:

1)   对图书进行了相应的分类(如计算机类、英语类等),通过类别便于用户查找相关书籍

2)    用户可以通过站内搜索出指定的图书(按出版社、作者等关键字搜索)

3)    用户可以进行注册后拥有个人的图书收藏夹,购物车,用户可以将自己喜爱的书存入收藏夹便于对比或下次浏览

4)    购物车中要清楚显示用户所购买图书的名称、价格和数量,并能显示总价格

5)   用户首次填写订单后,系统自动记录送货地址,用户下次配送相同地址不需要重复输入

6)    友好的图书信息展示界面,用户可以在线评论书籍和查看其他用户对书的评价

7)    管理人员能够方便进行图书信息管理,网站用户信息管理和订单管理的操作,还能实现对用户请问进行回复

8)    非注册用户也能实现对书籍信息的查阅和搜索

9)    出于对用户安全的考虑,生成订单时需要重新输入密码确认后方可成功下订单

10)网站首页:首页是客户打开网站的第一个页面,一般在这个页面中呈现的信息量最大,且需充分展现网站的亮点,以吸引客户、留住客户。首页中要展现的信息有:图书搜索栏、用户登录界面、各种书藉分类链接、网站重点推荐的图书展示(可以是特价书、最近上架图书、热卖图书等)。

 

3.1.2系统的功能结构图

毕业设计-网上书店ASP.NET(正文四 ) - 飞天心宏 - 飞天心宏的博客

3.1 功能结构图

3.1.3实体关系分析

3.1.3.1主要的实体关系图

毕业设计-网上书店ASP.NET(正文四 ) - 飞天心宏 - 飞天心宏的博客

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3.2 主要实体关系图

3.1.3.2 E-R图向关系模型的转换

 ER图向关系模型的转换要解决的问题是如何将实体和实体间的联系转换为关系模式,如何确定这些关系模式的属性和码。 关系模型的逻辑结构是一组关系模式的集合。ER图则是由实体、实体的属性和实体之间的联系三个要素组成的。所以将ER图转换为关系模型实际上就是要将实体、实体的属性和实体之间的联系转换为关系模式,这种转换一般遵循如下原则:
   
1)一个实体型转换为一个关系模式。实体的属性就是关系的属性,实体的码就是关系的码。
对于实体间的联系则有以下不同的情况:
   
2)一个1l联系可以转换为一个独立的关系模式,也可以与任意一端对应的关系模式合并。如果转换为一个独立的关系模式,则与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,每个实体的码均是该关系的候选码。如果与某一端实体对应的关系模式合并,则需要在该关系模式的属性中加入另一个关系模式的码和联系本身的属性。
   
3)一个1n联系可以转换为一个独立的关系模式,也可以与端对应的关系模式合并。如果转换为一个独立的关系模式,则与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,而关系的码为n端实体的码。
   
4)一个mn联系转换为一个关系模式。与该联系相连的备实体的码以及联系本身的属性均转换为关系的属性,而关系的码为各实体码的组合。
   
5)三个或三个以上实体间的一个多元联系可以转换为一个关系模式。与该多元联系相连的各实体的码以及联系本身的属性均转换为关系的属性,而关系的码为各实体码的组合。
   
6)具有相同码的关系模式可合并。

3.1.3.3实体关系模型

    系统采用Membership 框架对用户注册和角色进行管理,其他信息存储在自定义数据库中。经过分析,数据库中的主要实体及其属性如下:

用户信息(用户编号,姓名,联系电话,邮编,配送地址,vip等级)

图书信息(图书编号,图书类别,书名,作者,出版社,出版时间,定价,语言,页数,折扣,数量,推荐理由,特别推荐,图片)

订单(订单号,用户编号,图书编号系列,图书数量系列,日期,总金额,付款方式,审核状态)

订单审核(订单号,审核人编号,审核状态,审核意见,签收状态)

收藏夹(用户编号,图书编号

购物车(用户编号,图书编号,数量)

读者评书(评书编号,用户编号,图书编号,评语,回复)

属性映射(属性,属性值,属性值全称)

销售数量记录(图书编号,数量)

作者信息(图书编号,作者介绍)

3.2 系统总体设计

系统分析完成后,进入系统设计阶段,这是整个系统实现过程中非常重要的一个阶段。良好的系统设计将会使开发顺利地进行

3.2.1数据库逻辑设计

数据库设计是系统设计中非常重要的一个环节。数据是一切系统设计的基础,通俗地说,数据库设计就像高楼大厦的根基一样,如果设计不合理、不完善,将在系统开发过程中、甚至到后期的系统维护、功能变更和功能扩充时引起较多问题,严重时甚至要重新设计项目,重做大量已完成的工作。

3.2.1.1数据库逻辑设计原则

  首先要遵循完整性约束条件。在关系模型中,实体以及实体间的联系都是用关系来表示的。在一个给定的的应用领域中,所有实体和实体之间联系的关系的集合构成一个关系数据库。在设计关系数据库的时候最基本的是要遵循完整性约束,关系数据库中有三类完整性约束:(1)实体完整性,(2)参照完整性,(3)用户定义完整性。

再者要遵循数据库德规范化理论。数据库设计的一个最基本的问题是怎样建立一个合理的数据库模式,使数据库系统无论是在数据存储方面,还是在数据操作方面都具有较好的性能。什么样的模型是合理的模型,什么样的模型是不合理的模型,应该通过什么标准去鉴别和采取什么方法来改进,这是在进行数据库设计之前必须明确的问题。

为使数据库设计合理可靠、简单实用,长期以来,形成了关系数据库设计理论,即规范化理论。它是根据现实世界存在的数据依赖而进行的关系模式的规范化处理,从而得到一个合理的数据库设计效果。

关系数据库中的关系必须满足一定的规范化要求,对于不同的规范化程度可用范式来衡量。范式是符合某一种级别的关系模式的集合,是衡量关系模式规范化程度的标准,达到的关系才是规范化的。

3.2.1.2关系模型的规范化

规范化程度过低的关系不一定能够很好地描述现实世界,可能会存在插入异常、删除异常、修改复杂、数据冗余等问题,解决方法就是对其进行规范化,转换成高级范式。

规范化的基本思想是逐步消除数据依赖中不合适的部分,使模式中的各关系模式达到某种程度的分离。即采用一事一地的模式设计原则,让一个关系描述一个概念、一个实体或实体间的一种联系。若多于一个概念就把它分离出去。因此所谓规范化实质上是概念的单一化。

 

 

 

 

 

 

 
 

 

 

 

 


关系模式规范化的基本步骤如图3.3所示:

毕业设计-网上书店ASP.NET(正文四 ) - 飞天心宏 - 飞天心宏的博客

3.3  规范化基本步骤

规范化程度过低的关系可能会存在插入异常、删除异常、修改复杂、数据冗余等问题,需要对其进行规范化,转换成高级范式。但这并不意味着规范化程度越高的关系模式就越好。在设计数据库模式结构时,必须以现实世界的实际情况和用户应用需求作进一步分析,确定一个合适的、能够反映现实世界的模式。即上面的规范化步骤可以在其中任何一步终止。

3.2.1.3用户存储方案

ASP.NET 2.0 以前,开发人员要自己处理所有与用户帐户相关的任务。幸运的是,ASP.NET 团队意识到了该缺点并在ASP.NET 2.0 中引入了Membership 框架。Membership 框架是.NET Framework 中的一系列类,它提供了处理与用户帐户有关的核心任务的编程接口。该框架基于提供者模式之上,它允许开发人员将定制实现插入到标准的API 中。

决定将用户存储放在哪儿:ASP.NET 应用程序的数据通常存储在数据库中的多个表中。实现SqlMembershipProvider 数据库架构时,我们必须决定是将Membership 架构与应用程序数据一起存储在同一数据库中,还是另外一个数据库中。系统中我将Membership 架构与应用程序数据一起存储在同一数据库中,原因如下:

1)可维护性:其数据被封装在一个数据库中的应用程序比具有两个独立数据库的应用程序更容易理解、维护和部署。

2)关系完整性:通过将与 Membership 有关的表和应用程序表放在同一个数据库中,与Membership 有关的表的主键和相关应用程序表的主键之间建立外键约束成为可能。

将存储用户的其他信息(用户编号,姓名,联系电话,邮编,配送地址)添加到数据库的一个新表中,并在该表和aspnet_Users表之间建立一对一的关系。该方法要做的工作比使用 Profile 框架时要多一些,但对如何在数据库中对用户属性建立模型提供了最大限度的灵活性。

不选用其他两种方法和原因如下:

1)aspnet_Usersaspnet_Membership表中添加新列。不建议采用此方法,因为它会修改 SqlMembershipProvider 使用的架构。

2)使用ASP.NETProfile框架为用户其他基本信息定义配置文件属性。ASP.NET 包含一个Profile 框架,用于存储其它用户特定的数据。Profile 框架的主要优点是,它允许开发人员在Web.config 中定义配置文件属性不需要编写代码就可以对发送到和来自基础数据存储的配置文件数据进行序列化。简而言之,定义一组配置文件属性并在代码中处理这些属性是非常简单的。然而,Profile 系统在版本控制方面还有很多地方有待改善。因此,如果我们有一个应用程序,并希望在稍后向该应用程序添加新的用户特定的属性,或者想删除/ 修改现有的属性,则使用Profile 框架可能不是最好的选择。 

3.2.2 购物流

    网上书店的最主要的部分就是给用户提供一个购物平台,让用户按照给定的流程进行网上购物。在该系统中我们按照:用户注册登录(加入收藏)加入购物车生成订单的购物流完成网上购物。图3.5为购物流:

毕业设计-网上书店ASP.NET(正文四 ) - 飞天心宏 - 飞天心宏的博客

3.5  购物流图

 3.2.3 审核工作流

    用户进行完购物后生成的订单需要管理员进行审核,审核的目的就是防止对恶意的用户下的非正规订单进行发货。通过审核可以将那些不合格的订单(比如:配送地址乱填的订单)过滤掉,同时可对偶然性事件进行管理,比如未发货前订单的修改和暂缓发货等。具体的审核工作流如图3.6所示:

毕业设计-网上书店ASP.NET(正文四 ) - 飞天心宏 - 飞天心宏的博客

3.6  审核工作流

3.2.4系统安全方案

论坛、电子商务网站、在线电子邮件网站、门户网站以及社会网络站点的一个共同点是都提供用户帐户,提供用户帐户的站点均须提供一系列的服务。至少,新用户要能注册、注册用户应能登录这样的Web 应用程序能根据登录用户作出这些抉择:某些页面或操作被限制为只有登录用户或特定用户群才能访问,其它页面显示登录用户的特定信息,或根据查看页面的用户是哪类用户来显示或多或少的内容。所以系统的安全方案重点就是要考虑用户的验证与授权。

3.2.4.1安全管理的身份验证与授权

    很显然电子子商务类网站都是采用Form认证的方式进行验证和授权,通过Web 表单验证用户的身份,授权访问特定页面和功能,以及在ASP.NET 应用程序中管理用户帐户。识别用户并使用户登录到网站 。在安全管理方面系统中主要是进行的以下工作:

*         1)通过 ASP.NET Membership 框架来管理用户帐户

*         2)创建、更新和删除用户帐户

*         3)根据登录用户来限制对某个 Web 页面、目录或特定功能的访问

*         4)通过 ASP.NET Roles 框架将用户帐户和角色关联起来

*         5)管理用户角色

*         6)根据登录用户角色限制对某个 Web 页面、目录或特定功能的访问

*         7)定制和扩展 ASP.NET Web 安全控件

身份验证就是确认客户端身份的过程,成功确认的客户端被认为是通过身份验证。未能确认的客户端被认为是未通过身份验证匿名。授权就是这样的一个过程:决定某个用户是否有权访问特定资源或功能。支持用户帐户的Web 应用程序可以将用户任意划分成不同的角色。一个角色仅仅是一个应用于某个用户的标签,是一些授权规则和页面级功能的定义的抽象表示。通过使用角色,我们就可以基于角色,而不是基于用户来定义授权规则。

3.2.4.2 Form认证方式

表单身份验证(Form认证)很适合于因特网Web 应用程序。表单身份验证是通过要求用户在Web 表单中输入其凭据来识别用户身份的。因此,当用户试图访问未经授权的资源时,将会自动地转到一个登录页面,用户可在此页面输入其凭据。提交的凭据然后与一个定制的用户存储, 通常是一个数据库相对照进行核对。

当提交的凭据通过身份验证后,将会为该用户创建一个 表单身份验证票证。该票证指示该用户已通过身份验证,票证中含有识别信息,比如用户名。表单身份验证票证(一般)以一个cookie 的形式保存在客户端计算机中。因此,当再次访问网站时,HTTP 请求会含有该表单身份验证票证,这样一旦用户登录之后,Web 应用程序就总是可以识别出该用户。

3.2.4.3基于角色的授权

在网上书店系统中我们定义出了两类用户,一类是普通用户,一类是管理员。很显然管理员被赋予了更多的权限,比如系统后台就只能是管理员用户才能进入。在该系统中同样存在这前台和后台,但与其他电子商务网站不同的是,系统没有特别设计另外的登录界面供管理员进行登录,而是采用角色认证的方式,直接通过用户的角色而显示不同的功能,这种方式的实现就是运用基于角色的授权。

 

3.2.4.4 生成订单的安全认证

为了防止他人使用别人的用户账号在网站上恶意下订单而造成不必要的误会和麻烦,系统在下订单前进行了安全认证,即当用户欲将购物车中的图书生成订单时,系统提示需要用户输入密码进行身份认证,认证不成功不给于下订单的权限,这样充分保障了用户的切身利益和网站经营者的利益。

3.2.5提高ASP.NET应用程序性能方案

    除了实现网上书店的基本功能外,体统的性能方面也是我们在实现时要考虑的一个重要因素,对于该系统性能我们采用了以下两种常用的方法来提高网上书店系统ASP.NET应用程序的性能。

3.2.5.1 用存储过程代替动态SQL语句

  用存储过程来替代动态的SQL语句来返回多个数据集,把业务逻辑写到存储过程里面可以限制返回结果集的大小,减小网络数据的流量,在逻辑层也不用在过滤数据,这是一个提高性能的方式。通过在单个数据库请求中返回多个结果集,可以减少与数据库通信的时间,使你的系统具有扩展性,也可以减少数据库服务器响应请求的工作量。用SqlCommand对象的ExecuteReader方法返回一个强类型的业务对象,再调用NextResult方法来移动数据集指针来定位数据集,只从数据库中返回需要的数据可以大大的减小你的服务器所耗用的内存。在该系统中使用了大量的储过程,来提高系统性能。                   

3.2.5.2对数据进行分页

ASP.NETGridView有一个非常有用的功能:分页。如果GridView允许分页,在某一时刻它只下载某一页的数据,另外,它有一个数据分页的济览导航栏,它让你可以选择浏览某一页,而且每次只下载一页的数据。但是它有一个小小的缺点,就是你必须把所有的数据都绑定到GridView中。也就是说,你的数据层必须返回所有的数据,然后GridView再根据当前页过滤出当前页所需要的数据显示出来。如果有一个一万条记录的结果集要用GridView进行分页,假设GridView每页只显示25条数据,那就意味着每次请求都有9975条数据都是要丢弃的。每次请求都要返回这么大的数据集,对应用程序的性能影响是非常大的, 一个好的解决方案是写一个分页的存储过程。

3.3系统编码和实现

3.3.1 主页展示

网上书店系统一个重要的部分就是主页面的显示,如何在有限的页面展现出更多的信息,和什么能够吸引访问者的眼球是我们考虑的重点。按照设计方案中的1+2+1页面布局的设计,我们在页头Head部分横排导航栏和搜索栏,左侧Side中布局登录框和类别分类导航以及友情链接,Content部分再进行拆分成2+1的布局,具体展示重点推荐图书,最新图书,以突出网站的实质。实现的效果如图3.7所示:

毕业设计-网上书店ASP.NET(正文四 ) - 飞天心宏 - 飞天心宏的博客

          3.7 主页界面

3.3.2

特别推荐

在网上书店系统中,有许多热卖或经典的书籍需要特别显现出来,要将这些都显示在主页面中,在有限的主页空间中显然是不可取的,所以我们特别设计出了一个专门展现需要推荐图书的图书,这些图书是网站管理员在后台选择推荐的,通过点击导航栏中的 "特别推荐"按钮,就可以导航到特别推荐的图书。值得一提的是:特别推荐中的图书是动态改变的,即每次进入该页面显示的图书都可能不同,这样做的目的就是在有限的空间充分显示出更多的图书。

如下面的两个图(图3.8,图3.9),都是进入特别推荐页面,网站相同,但现实的书籍不同,动态的。

毕业设计-网上书店ASP.NET(正文四 ) - 飞天心宏 - 飞天心宏的博客

3.8 第一次进入特别推荐图书显示

 

毕业设计-网上书店ASP.NET(正文四 ) - 飞天心宏 - 飞天心宏的博客

3.9 第二次进入特别推荐图书显示

 

 

  评论这张
 
阅读(2375)| 评论(4)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018