基于Java-web开发的网上商城系统(共46页).doc
精选优质文档-倾情为你奉上 届 别 学 号 (学校名称) 毕业设计(论文)基于JAVA WEB的网上商城设计与开 发 姓 名 系 别 、专 业 导师姓名、职称 完 成 时 间 专心-专注-专业网上商城系统摘 要本文的主要研究对象是网上商城系统,研究网上商城一般的业务流程,还有网上商城的结构和模块,各个模块的功能等等。整个论文从如何来分析一个网上商城系统的业务流程和它的结构以及模块,再到到对开发工具的选择,以及对前面分析出来的结果进行初步的设计(这里我设计的是使用Java的web开发技术来实现这个网上商城系统),对网上商城系统分析和设计完成之后,就进入到实际的代码编写阶段,在这个阶段就可能对前面的设计进行一定的修改或是完善。在开发阶段,我将采用的是螺旋递增式的开发,每次只完成一部分功能,然后就立即对这些功能进行测试,接着进入下一个开发阶段,然后继续测试,直到所有的功能全部实现后,再对整个系统进行一个完整的测试,看其是否达到了先前的设计要求。综上所述,本文讨论的就是如何使用Java的web开发技术来完整的实现一个网上商城系统的主要功能。关键词 商城设计与开发 ; JAVA ; JAVA WEB AbstractTherefore, this paper studies the main object is online shopping mall, online mall general business processes, and online store structure and module, the function of each module. The article, from how to analyze online mall business process and the structure of the system and modules, and then in the choice of development tools, and the results of the front, preliminary design (I design web pages, use Java development technology to realize the online mall), online mall of system analysis and design into the actual code stage complete, at this stage, may in front of the design basis of certain amendments or perfect. During the development phase, I will use the spiral incremental development, a stage of the function as long as finished, then immediately testing these functions, and then into the next stage of development, and then continue to test, until all test function, and finally to the overall test the whole system to see if it comply with the design requirements.All in all, this paper has discussed how to use Java Web development technology to complete a online mall system.Keywords:BUY GOODS JAVA WEB SHOPPING目 录 1.1 课题背景.1788912246802468001234第1章第一章 绪论1.1选题背景 随着计算机技术的发展和网络人口的增加,网络世界也越来越广博,越来越丰富,网上商城已经成为网上购物的一股潮流。互联网已日益成为收集提供信息的最佳渠道并逐步进入传统的流通流域,互联网的跨地域性和可交互性使其在与传统媒体行业和传统贸易行业的竞争中是具有不可抗拒的优势。人们对于互联网技术的要求已不单单是浏览一下网站网页,收发电子邮件,日益忙碌的人们开始追求足不出户就能买到心仪的商品,是越来越多的上网爱好者实现购物的一种方式。对于企业来讲,无论是企业之间(B to B),还是企业和客户之间(B to C)的交易,如果能够实现网上交易将大大提高交易速度节约成本。但是对网络的及时、一对一、跨时间、 跨空间等特性,并没有充分加以利用。在这种形势下,传统的依靠管理人员人工工作传递信息和数据的管理方式就无法满足企业日益增长的业务需求了。因而开发了这样一个具有前后台的网上商城系统,以满足购物者和企业的需求。1.2选题的目的和意义对于网上商城来说,我想每个人都不陌生,即使你没有亲自在网上买过东西也一定见过、听说过网上购物这种方式。网络购物作为一种新的购物形式已经被广大群众所接受,尤其是年轻群体,他们特别热衷于网购。网购最大的优势就是东西要比现实中商场里的商品便宜,而且一般都是送货上门,因为网购一般都是采取快递送货方式,直接送到你家楼下或者公司里,因此网络购物的第二大优势就是其便利性,用户只要坐在电脑前,点点鼠标就可以买东西了。当然网购也有它的缺点,比如无法见到实物,只能通过商家介绍的文字和图片来了解商品,再比如买衣服无法试穿,而且这也为不良商家提供了忽悠消费者的方法,他们会尽力美化自己的商品来诱惑消费者买单,而消费者收到商品后才发现和想象中的差异很大,而商家又以各种各样的理由推脱,而且由于采用网上交易,所以会存在安全问题。但是这些都不能挡住网购的魅力,网上购物现在正变得越来越流行,市场份额也变得越来越大。因此这次毕业设计题目就以目前现有的网上商城系统为研究对象,例如淘宝和当当,这里主要研究后者的形式,也就是商城自己经营的方式,研究一般的网上商城的业务流程,猜测其各个功能模块及其组合、连接方式,并分析其具体的实现方式,最后使用Java加web服务器和数据库完成一个网上商城系统的主要功能模块。通过这样一个毕业设计,可以提高自己Java编程的水准,也练习了怎样构建一个完整的系统,从系统的需求分析到设计,直至编码、测试并运行,熟悉并掌握一个完整的Web开发流程,为今后工作打下基础。1.3论文研究内容网上商城是一个基于Internet的应用,属于B/S架构,前端就是一个客户浏览器,客户需要通过浏览器来访问服务器,因此,本文主要研究的就是一个网上商城系统(商城自负经营的类型)的业务流程及其实现方式。首先,需要站在使用者的角度去思考你究竟会怎么使用这个系统,而一个网上商城的使用者一般又有两类,一类是普通消费者,而另一类则是商城的管理员,因此我就需要思考这两类人都会怎么来使用这个系统,这样就能分析出网上商城系统的业务流程。而实现这个业务流程可以采用很多种不同的方法,很明显,网上商城系统是一个基于Internet的应用,因此就需要使用到Web开发的方法,目前Web开发的方法有很多,流行的有Java和.Net,这里我选择了Java,因此我就需要研究如果采用Java作为编程语言,我应当如何来实现这个系统,这个系统应该划分为多少个模块,每个模块的功能又是什么,他们之间如何组合到一起,这也就是系统的设计。第二章 网上商城系统的需求分析1.1 网上商城业务流程分析开发一个项目,不管你采用什么实现方式,其实都是在完成其业务流程,因此,将一个系统的业务流程分析清楚,将为后面的开发提供极大的便利。由于本文选择了B2C(Business To Customer,商家对顾客直销)模式,所以之后的分析或讨论均是针对此种模式。如何对一个系统进行分析有很多的方法,这里我采用了站在具体的使用者的角度来考虑这个网上商城系统的功能和结构,先是粗略的分析一下使用的流程,在这个过程中就能够发现一些必须的基础的类。1.1.1 作为一名消费者的使用流程假如一个消费者第一次来到一个网上商城,他首先一般会先浏览浏览该商城的首页以及首页上所列的各种商品,如果你这个网站的首页设计得很精细很吸引人的话,消费者才会有兴趣进行下一部探索,看看你们这个商城有什么好的商品。因此,目前的网上商城设计者大多会在首页花费很大的功夫,比如在首页就展示商品什么的,一次来吸引客户的眼球。如此一来,用户也不需要登录就可以查看。进而如果他对这个商品感兴趣,那他就会点击购买这个按钮,如果客户是第一次来此商城购买商品,那么系统就会自动提醒客户是否注册一个新账号,注册之后才能进行下一步操作。当然了,消费者进行注册之后系统就该为消费者提供一个登录功能,以方便消费者登录进而进行购买商品的操作以及一些相关的操作。该系统在消费者登录成功之后会在页面上显示该消费者的用户名以及跟消费者相关的一些操作功能。这些操作功能包括修改用户的密码,查看自己的个人信息,修改自己的相关的个人信息。 当然用户登录之后也可以查看商品,最重要的,登录用户可以选择商品放入自己的购物车并下单结账。还可以查看自己所下的订单。 根据上面的信息分析,我们大致可以分析出来有这么几个实体类来支撑这些操作,首先,注册之后就会产生一个用户,接着要用此用户来支持登录功能,这样一来,所有的用户集合成了一个用户实体类,这个实体类包括用户名,用户密码,联系方式,用户地址等等。接着,在用户注册登录之后,商城就要向用户展示相关的商品,那么,所有的商品又集合成了一个商品实体类,这个实体类包括一些商品的相关信息,不如商品名,商品价格,商品生产日期等。再者,用户如果对某些商品感兴趣了,就要把喜欢的商品放到购物车里,那么又一个购物车实体类产生了,这个实体类包括商品名称,商品价格,把此商品放入购物车的用户名称等等;最后会员买完东西后给商城下了订单,那么这个订单也需要包装成一个实体类,上面需要记录一些信息,最主要的信息应当有:谁下了这个订单?买了什么东西?多少钱?其它的诸如什么时候下的也可以记录。1.1.2 作为一名商城管理员的使用流程管理员首先也要登录才能操作所有功能,商城管理员应当能管理商城注册的会员:可以查看商城的已注册会员,并且对已注册的会员信息进行修改,而且也可以删除相关的会员。接着,管理员还应该有如下的一些功能。首先,添加父类商品,比如说“书籍”,再者,就是可以添加子类商品,比如说“计算机”,最后,管理员应该也可以添加子类下的相关的一些商品,比如说“30天精通JAVA” 。当然,管理员应该也可以修改自己的密码。从管理员的操作,我们也可以得到这么几个实体类。第一,管理员,既然有管理员那么就必须有一个类来记录这些东西,对于该系统需要说明一点的就是:在我开发的这个系统中,由于本人的水平只是有限,为了降低该项目的复杂度,所以本人把管理员和会员都放在同一个实体类中去了,在登录的时候把管理员的名称固定到代码中去了,即:admin,用户类这个实体类中,admin这个用户是不能删除的,是永久保存在此实体类中的,只要以这个名称登录,那么页面就会跳转到管理员的操作页面中去;第二,这里提到了父类别,那么这个也应当包装成一个类,而且这个类应当和子类别有一定的关联。第三,这里也提到了子类别,那么子类别也应该是个实体类,这个类和商品类也有一定得关联;第三,最底层的就是商品这个类了,所有商品集合在一个构成了一个商品实体类,商品类别是属于某个子类别中的一种。因此,从前面两个站在不同角度来分析使用流程来看,我从中提取出了一些个名词,这些个名词也就成为了一些基础的实体类,目前分析的出来的有,用户类、商品父类别类、商品子类别类、商品类、购物车类、订单类、。显然,这些个类在此商城项目中是比较具体的,是可以很明显看出的,但是还有一些类是比较“抽象”的,是不能这样直接的通过找名词来得出来,但是可以分析这个过程,可以得出这些类确实要存在,因而来将其推算出来。商城有很多数据是要存到数据库的,在这里,我把一些与数据库打交道的通用操作封装成为一个JDBC的类。另外,对于商城页面中涉及到需要分页的,我写了一个通用的分页实体类,里面包括六个相关的属性。当然这肯定不是全部,随着分析设计的深入,还会有一些类添加进来,就算进入到实际开发阶段,还有可能突然觉得需要再加入某个类。1.2 网上商城模块分析1.2.1 用户模块分析用户模块是为商城的前台展示所设计的,用户模块又可以大致划分为一下子模块:1 用户注册模块2 用户登录模块3 用户信息修改模块4 修改用户密码模块5 商品展示模块6 购物车模块7 查看以往订单模块用户注册模块负责新会员注册,并将其持久化,也就是将新注册的会员的信息写入数据库。登录模块负责验证会员的登录,看看有没有这个用户,密码是否正确等,这种操作通常都是从数据库查询。用户信息修改模块可以让用户修改自己的个人信息,这就涉及到了数据库的修改。修改用户密码模块让用户修改自己的密码。商品展示模块应当是从数据库中将商品拿出来,然后再以某种方式显示的网页上。购物车模块就是收集和记录用户所购买的商品,购物车最后要么被直接销毁,要么会转化为订单,然后被销毁。查看以往订单模块使用户能查看自己所下的订单。因此数据库的操作始终贯穿在整个系统里面,几乎所有的地方都涉及到了数据库的操作。1.2.2 管理员模块分析管理员模块是为管理员管理商城事物所设计的,管理员模块又可以初步划分为以下子模块:1 会员管理模块2 商品类别管理模块3 商品管理模块4 订单处理模块5 管理员的自我管理很明显,会员管理模块是用来管理商城的注册会员的,应当可以查看会员、修改会员信息、删除会员,这就是对数据库的增删改查的体现。商品类别管理模块用来管理商品类别,可以查看商品类别,添加商品类别,修改商品类别和删除商品类别。商品管理模块用来管理商城的商品,可以查看商品,添加商品,修改商品和删除商品。订单处理模块用来管理会员所下订单,可以查看会员所下的订单,并处理这些订单。1.3 本章小结本章主要从商城的使用者角度,也就是普通用户和商城管理员两方面分别分析了这些用户对商城一般的操作流程。然后根据这些流程分析出了一些直接的类,也就是一些基础的实体类,并跟据这些大致的流程分析出两个大模块,用户模块和管理员模块,两个大模块又可以进一步细分为一个个小模块。并大致分析了这些模块的功能。第三章 网上商城系统的设计与实现本章是网上商城系统的具体设计,包括开发环境的选择及介绍,各个功能模块的具体设计以及一部分实现。1.4 开发语言和工具介绍这里介绍我选择的开发语言,开发工具等。1.4.1 开发语言介绍1Java简介:Java是一种简单的,面向对象的,分布式的,解释型的,健壮安全的,结构中立的,可移植的,性能优异、多线程的动态语言。Java平台由Java虚拟机(Java Virtual Machine)和Java 应用编程接口(Application Programming Interface、简称API)构成2。Java 应用编程接口为Java应用提供了一个独立于操作系统的标准接口,可分为基本部分和扩展部分。在硬件或操作系统平台上安装一个Java平台之后,Java应用程序就可运行。现在Java平台已经嵌入了几乎所有的操作系统。这样Java程序可以只编译一次,就可以在各种系统中运行。 2HTML简介:HTML是Hypertext Markup Language的缩写,即超文本标记语言。它是用于创建可从一个平台移植到另一平台的超文本文档的一种简单标记语言,经常用来创建Web页面。HTML文件是带有格式标识符和超文本链接的内嵌代码的ASCII 文本文件。HTML是制作网页的基础,3JavaScript简介:JavaScript是由Netscapt与SUN公司合作开发的产品。JavaScript是一种跨平台的开放式脚本描述语言,它是Java和Livescript的衍生物,它生成的应用程序能够将客户和服务器上的对象和资源联系在一起,通过Internet动态的表示信息并与用户进行交互。JavaScript是用来改变网页外观的编辑命令和指令,它对网页设计有着重要的帮助。4AJAX简介:AJAX即“Asynchronous JavaScript and XML”(异步JavaScript和XML),AJAX并非缩写词,而是由Jesse James Gaiiett创造的名词,是指一种创建交互式网页应用的网页开发技术。5JSP简介:JSP(Java Server Pages)是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准7。该技术为创建显示动态生成内容的Web页面提供了一个简捷而快速的方法。JSP技术的设计目的是使得构造基于Web的应用程序更加容易和快捷,而这些应用程序能够与各种Web服务器,应用服务器,浏览器和开发工具共同工作。 JSP规范是Web服务器、应用服务器、交易系统、以及开发工具供应商间广泛合作的结果。1.4.2 数据库介绍 MySQL 是一个真正的多用户、多线程SQL数据库服务器,它是一个客户机/服务器结构的实现。MySQL是现在流行的关系数据库中其中的一种,相比其它的数据库管理系统(DBMS)来说,MySQL具有小巧、功能齐全、查询迅捷等优点。MySQL 主要目标是快速、健壮和易用。关键的是它是免费的,可以在Internet上免费下载到,并可免费使用。MySQL 对于一般中小型,甚至大型应用都能够胜任。1.4.3 服务器介绍Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目10,由Apache、Sun 和其他一些公司及个人共同开发而成。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。1.4.4 开发工具介绍在开发过程中,我主要用到了myeclipse1 MyEclipse介绍:MyEclipse,是一个十分优秀的用于开发Java, J2EE的Eclipse集合,MyEclipse的功能非常强大,支持也十分广泛,尤其是对各种开源产品的支持十分不错。1.5 业务逻辑设计要实现网上商城的业务逻辑,必须有相应的实体类和其相应的方法,这里就大致将其设计出来。1.5.1 基础共用类和相应方法整个系统有一些通用的类和方法,比如连接数据库等。1.5.1.1 DataBase类方法:1 public static Connection getConn() 取得用于连接数据库的Connection。2 public static void close(Connection conn) 关闭Connection。3 public static void close(Statement stmt) 关闭Statement。4 public static void close(ResultSet rs) 关闭ResultSet。3.2.1.2 PoolDataSource类private static String username;private static String password;private static String url ;private static String className;private static int maxActive;private static int minActive;private static int curActive;private static Properties prop = new Properties();private static int curActivegetters()和setters()方法,用来得到和设置成员变量的值,因此不详细列出。3.2.1.3 Page类Page包装了分页信息。成员变量: 1、private Integer pageNo;/当前是第几页 2、private Integer pageSize;/当前总共多少页 3、private Long totalPage ;/总共多少页 4、private String url;/页面地址(jsp) 5、private String method ;/相关方法名 6、private String index ;/用来作标记的方法:getters()和setters()方法,用来得到和设置成员变量的值,因此不详细列出。1.5.2 用户实体类以及相关的类和相应方法为了实现商城会员的注册、登录、查看会员自己的信息、修改会员的个人信息、修改个人密码和查看所下的订单,应当有一个用户实体类和其相应的方法,在这里设计出两个类User类。User包装了用户的信息,并提供相应的get和set方法;1.5.2.1 User类成员变量:1 private int id 用户id。 1、 private Integer userId ;/User的id 2、 private String username ;/用户名 3、 private String password ;/用户密码 4、 private String email ;/用户邮箱 5、 private String address ;/用户地址 6、 private String phone ;/用户联系方式方法:getters()和setters()方法,用来得到和设置成员变量的值,因此不详细列出。3.2.2.2 IUserDAO接口 1、 User findUserByExample(User user) ;/根据一个user找出user 2、 void save(User user) ;/添加一个user 3、 List<User> findAllUser() ;/查找出所有的会员 4、 User findUserById(Integer userId) ;/根据某个id查找对应的user 5、 void modify(User user) ;/修改相应的user 6、 void delete(User user) ;/删除选中的user 7、 User findUserByName(String username) ;/根据用户名称查找user 8、 List findUserByPage(Page page) ;/根据页数号码列出用户 9、 void modifyPasswordByUid(Integer uid) ;/根据id修改相应的用户密码3.2.2.3 UserDAO类 实现了IUserDAO接口的所有方法,在此不再详细列出。3.2.2.4 UserService类 成员变量: IUserDAO userDao = new UserDAO() ; 相关方法: 1、public void save(User user) 2、public List<User> findAllUser() 3、public User findUserById(Integer userId) 4、public User login(User user) 5、public void modify(User user) 6、public void delete(User user) 7、public User findUserByName(String username) 8、public List findUserByPage(Page page) 9、public void modifyPasswordByUid(Integer uid)1.5.3 商品父类别类和相应方法这是一个基础的类,它是一种树形结构,有根类别,其下又有很多子类别,一个商品子类别类必须属于某种商品父类别类。1.5.3.1 ParentCategory实体类成员变量: 1、private Integer pid ; 2、private String pname ;方法:getters()和setters()方法,用来得到和设置成员变量的值,因此不详细列出。3.2.3.2 IParentCategoryDAO接口 List listAll() ;/列出所有的父类别的实例 void addParentCategory(ParentCategory pCategory) ;/添加父类别中的实例3.2.3.3 ParentCategoryDAO类 实现了ParentCategoryDAO接口的所有方法,在此不再详细列出。3.2.3.4 ParentCategoryService类成员变量:IChildCategoryDAO iccDao = new ChildCategoryDAO() ;相关方法: 1、 public void addChildCategory(ChildCategory cCategory) 2、 public List listAll() 3、 public List findChildCategoryByPid(Integer pid)1.5.4 商品子类别类和相应方法1.5.4.1 ChildCategory类 这个类与ParentCategory有关联 1、 private Integer cid ;/子类别类的id2、private String cname ;/子类别类的名称 3、private Integer pid ;/相关联的父类别id3.2.4.2 IChildCategoryDAO接口 抽象方法: 1、List listAll() ;/列出所有的子类别实例 2、void addChildCategory(ChildCategory cCategory) ;/ 添加子类别实例 3、List findChildCategoryByPid(Integer pid) ;3.2.4.3 ChildCategoryDAO类 实现了ChildCategoryDAO接口的所有方法,在此不再详细列出。3.2.4.4 ChildCategoryService类成员变量: IChildCategoryDAO iccDao = new ChildCategoryDAO() ;方法: 1、public void addChildCategory(ChildCategory cCategory) 2、public List listAll() 3、public List findChildCategoryByPid(Integer Pid)1.5.5 商品类以及相关类和方法 3.2.5.1 Goods类 1、private Integer gid ;/商品id 2、private String gname ;/商品名称 3、private Float price ;/商品价格 4、private String description ;/商品相关描述 5、private Integer cid ;/子类别id 6、private String image ;/商品图片 3.2.5.2IGoodsDAO接口 1、void saveGoods(Goods goods) ;/添加商品 2、List listAllGoods(Page page) ;/列出所有的商品 3、List findGoodsByCid(Integer cid,Page page) ;/根据商品id找出相对于的商品 4、void modifyGoodsByGid(Goods goods,Integer gid) ;/根据商品id修改某商品的信息5、void deleteGoodsByGid(Integer gid) ;/根据商品id删除此商品 3.2.5.3 GoodsDAO类 实现了GoodsDAO接口的所有方法,在此不再详细列出。3.2.5.4 GoodsService类 成员变量:IGoodsDAO goodsDao = new GoodsDAO() ;方法: 1、public void saveGoods(Goods goods) 2、public List listAllGoods(Page page) 3、public List findGoodsByCid(Integer cid,Page page 4、public void modifyGoodsByGid(Goods goods,Integer gid)5、 public void deleteGoodsByGid(Integer gid)3.2.6 SvImage类 该类主要用于在添加相关商品时,同时要求附带商品图片,此时就需要运用这个类来处理图片上传方面的功能了。3.2.6.1 SvImage类Servlet,用来实现为商品上传图片,用到了apache的commons-fileupload和commons-io组件,这是在Java的Web开发中最常用的文件上传组件。上传的图片会存放在服务器的目录下。3.2.7购物车类及其方法 该类主要用于用户如果对某件商品感兴趣时,就可以按下“放入购物车”这个按钮,同时,这件商品的相关信息就会被放到了相应的购物车中去了。即用来存放用户喜欢而即将购买的商品信息的。3.2.7.1 Car类 1、private Integer carId ;/购物车id 2、private String gname ;/放入购物车某商品的名称 3、private Float price ;/放入购物车某商品的价格 4、private Integer userId ;/此购物车属于那个user的用户的id3.2.7.2 ICarDAO接口 1、void saveCar(Car car) ;/用户决定购买某件商品 2、void deleteCar();/把某件商品从购物车中移出来 3、List<Car> listCarsByUid(Integer uid) ;/列出某用户的购物车 4、void deleteCarByCarId(Integer carId) ;根据carid把某件商品从购物车中移出来3.2.7.3 CarDAO类 实现了CarDAO接口的所有方法,在此不再详细列出。3.2.7.4 CarService类 成员变量: ICarDAO carDao = new CarDAO() ; 方法: 1、 public void saveCar(Car car) 2、public List listCarByUid(Integer uid) 3、 public void deleteCarByCarId(Integer carId)3.2.8订单类及其方法3.2.8.1 Orders类 成员变量: 1、private Integer orderId ;/订单id 2、private Integer userId ;/下此订单的用户id 3、private String gname ;/此订单中某商品的名称 4、private Float price ;/此订单中某商品的价格 5、private Date orderDate ;/订单日期 6、private String orderNum ;/订单号 7、private String username ;/下此订单的用户名称 8、private String state ;/订单的状态 此类中的set和get方法在此就不再列出了。 3.2.8.2 IOrdersDAO 接口 1、void saveOrder(Orders order) ;/保存订单 2、List<Orders> listOrdersByUid(Integer userId) ;/列出某用户的订单 3、List<Orders> listAllOrders() ;/列出所有