上网拍卖系统的设计与实现--大学毕设论文.doc
XXXXXX学院学位论文网上拍卖系统的设计与实现论文作者姓名:申请学位专业:计算机科学与技术 申请学位类别:工学学士指导教师姓名(职称):论文提交日期:年 月 日网上拍卖系统的设计与实现摘 要网上拍卖是新兴起的一种网上交易方式。它具有成本低廉,方式灵活,运行快捷等特点,通过Internet将拍卖活动变成每一位网民都可以加入其中的交易方式。但它在给人们带来便利的同时也带来了很多的问题。它的公平、公正、公开性受到大家的关注。其可靠性和安全性更是大家关心的问题。这就要求不仅要在系统的设计上做到公平合理,也要在信息的传输上做到安全可靠,以构建一个公平又安全的交易平台。本文构建了一个基于B/S模式的网上拍卖系统,为买卖双方搭建了一个灵活自由并且安全可靠的交易平台。本文着重论述了系统的模块设计、数据流程和功能实现。其功能包括用户注册、登陆、网上拍卖、网上竞价、商品搜索、购买者对商品的评价、购买者留言、后台数据库管理、拍卖者信用度的统计等功能。包括如何运用JAVA、JavaScript、JSP等关键技术建立网上购物系统,并在web服务器上配置SSL以保证敏感信息的安全传输。关键词:网上拍卖;JSP;SSL;竞价The Design and Realization of Online Auction SystemAbstractOnline auction is a sort of new transaction emerged recently. It has a characteristic of inexpensive cost, flexible method and quick movement. It has changed the method of transaction into an auction movement which allows common people to join in through the internet. It brings people a lot of convenience, at the same time comes about some problems. People start to focus on its fairness, honesty and publicity. In addition, its reliability and security are more concerned. Its not only required a fairness and rationality on the design of system, but also keeps the information security and reliability when transferring to construct a platform of fairness and security. The system designs an auction system based on the mode of B/S, and proposes a flexible and reliable environment for trade service. The thesis put most words on design of module, data flow and realization of function, including client register, login, auction, competition, commodity researching, comment and credible stat for person on auction. The thesis also discusses how to build up an online auction system with Java, JavaScript, Jsp techniques and configure the SSL to ensure the secure transmission of sensitive information on the web server.Key words: Online Auction; JSP; SSL; Competitive目 录论文总页数:28页1 引言12 绪论12.1 本系统设计的意义12.2 网上拍卖的起源12.3 我国网上拍卖的现状22.4 网上拍卖的营销方式23 系统总体设计23.1系统运行环境要求23.2 需求分析33.2.1需要实现的功能及功能模块33.2.2数据流程图43.2.3功能模块设计53.3 系统E-R图73.4系统数据逻辑结构84系统具体实现104.1开发系统的语言与工具104.2 拍卖商品功能104.3竞购商品功能124.4查询拍卖情况功能154.5商品搜索功能164.6信用度统计功能184.7对商品评价功能204.8购物车功能215 系统的数据传输安全保证245.1 数据传输的安全性要求245.2 SSL协议提供的服务245.3 ssl的工作原理245.4 Tomcat配置SSL(Windows环境)25结 论26参考文献26致 谢271 引言随着网络技术的不断发展和人们购物意识的不断革新,网上购物成为一种新型的购物方式,正逐渐被人们所接受和认可。而网上购物的方式之一的网上拍卖形式给人们的购物带来另一种全新的体验。人们可以通过网站发出自己想拍卖的物品的信息,也可以通过竞价购买自己想要的物品。即具有一般购物网站的成本低廉,方式灵活,运行快捷等的特点,更具有自由竞争和公平合理的特性。如现在网上流行的拍拍网,淘宝网等都是很好的成功的实例。然而,同其它购物网一样,网上拍卖网也存在很多的问题尚待解决和完善。其中公平合理的买卖方式、买卖者双方的信用度、敏感信息传输的安全性等问题是人们关注的焦点问题。要让这种先进的交易方式被更多的人认可,还得不断的在这些方面有所突破,需要相关人士的不断研究。2 绪论2.1 本系统设计的意义本系统网上拍卖系统是指通过Internet实施的价格谈判交易活动,即利用互联网在网站上公开发布将要招标的物品或者服务的信息,通过竞争投标的方式将它出售给出价最高或最低的投标者。其实质是以竞争价格为核心,建立生产者和消费者之间的交流与互动机制,共同确定价格和数量,从而达到均衡的一种市场经济过程。它通过Internet将过去少数人才能参与的贵族式的物品交换形式,变成每一位网民都可以加入其中的平民化交易方式。网上拍卖不仅是网络时代消费者定价原则的体现,更重要的是拍卖网站营造了一个供需有效集结的市场,成为消费者和生产商各取所需的场所,因此是一种典型的中介型电子商务形式。相对与传统拍卖,网上拍卖的特点在于每个商家都可以制定一套适合自己的拍卖规则,并且通过网上拍卖还可以使定价达到更准确的水平,同时能够参与拍卖的人的范围也大大增加了。2.2 网上拍卖的起源据说“拍卖”这种交易,起源于古时欧洲未婚少女待价而沽的婚嫁制度,然后才逐渐转变为贵族间拍卖珍稀古董的休闲活动。至今,拍卖已经成为一种成功的商业活动,这种有趣的交易行为,并在网络上演变为一种成功的商业模式,逐步为世人所接受。最早的拍卖网站是由欧米达在1995年建立的,他最初建立这个小网站是为了向人们提供变种的埃博拉病毒代码。他在网站上加了一个小的拍卖程序,帮助人们交换各自的收藏品。后来他辞掉工作,全心全意投入到网上拍卖业务中去,于是现在网上拍卖老大eBay诞生了。随着电子商务的发展,网上拍卖已经成为一种日渐流行的电子交易方式。 2.3 我国网上拍卖的现状据资料显示在我国,一些著名的网站很早就参与到了网上拍卖中来了,许多网络服务商准备将网上拍卖作为其发展电子商务的切人点。1999年6月正式开通的雅宝竞价交易网,是中国大陆开通最早,也是目前访问人数最多、物品数量和种类最丰富、交易最活跃的专业竞价交易平台之一。1999-2000年的时候,中国的拍卖网站一度也多达上百家,其中以雅宝、易趣、酷必得、6688等最为知名,随着.COM泡沫的破灭,只有易趣发展壮大起来。随着网络经济的逐渐趋于理性,没有强力竞争对手的易趣得到了迅速发展,成为中国拍卖网站事实上的霸主,也被称为“中国的eBay”。2003年7月8日,已在B2B领域巩固了领先地位的阿里巴巴突然宣布投资1亿元成立C2C电子商务网站淘宝网。2004年1月13日雅虎和新浪共同在美国和北京两地同时宣布签署一项建立合资公司的最终协议,参与中国网上拍卖市场的竞争,建立了网上拍卖网站一拍网,为中国的中小型企业、买家和卖家提供全新的基于网上拍卖的电子商务服务。中国网上拍卖市场持续升温。2.4 网上拍卖的营销方式目前常见的网上拍卖方式有:英式、荷兰式、封标拍卖,此外,还有双向拍卖和逆向拍卖等。随着网上拍卖的发展,最近又出现了更加适应于互联网的集体议价方式和多属性拍卖。一般许多拍卖网站并不是仅仅使用一种拍卖方式,而是多种拍卖方式相结合。本系统采用的是英式拍卖方式稍加改变的方式。英式拍卖也称为公开拍卖或者增价拍卖,是最流行的网上拍卖方式,它使投标者的参与变得相对容易。一旦买者发现自己感兴趣的物品,他就可以浏览当前的最高出价,然后决定自己是否出最高的价格。在他提供投标价后,就可以看到拍卖状态的一个自动更新,显示他是否成功地成为当前的最高出价者。本系统中购买者发现自己喜爱的商品之后就给出自己愿意出的价格但价格必须大于起始价格。待系统验证后如果所出的价格大于当时的最高价格则为竞价成功。后由拍卖者确认,同意交易成功后拍卖才算成功。这种方式便于购买者冷静的竞购,也方便拍卖者不会以低于自己最低底线的价格卖出商品。3 系统总体设计3.1系统运行环境要求1. JDK1.5JAVA的运行环境2. Tomcat5web服务器3. WindowsXP操作系统4. SQLServer2000数据库3.2 需求分析网上拍卖由于基本是通过网站拍卖系统进行的,所以会经常出现“所见非所得”的情况。拍卖物品的质量不如网上所描述的那样,付款不交货等欺诈问题很普遍。这些信用问题主要和网络的特性有关,网络是虚拟的,交易双方可以根本不见面而完全通过网络完成整个交易行为。网站也难以阻止用户以多个用户名注册,而且用户的真实身份有时难以查明,信用制度在中国又很不完善,所以难免会滋生欺诈现象。解决网上拍卖的信用问题,就是要在网上拍卖的环境中,解决信息的私密性、完整性、不可抵赖性以及身份确认问题,其解决方案是多种多样的。本站主要实现用户的在线拍卖和购买功能。首先。针对用户来说,分为拍卖者和购买者,用户注册包含以下内容:名字,密码,电子邮件,联系电话,真实姓名,联系地址,邮政编码在这里我们设计的用户拍卖者与购买者唯一的区别在于拍卖者多了一项“信用度”,但是信用度是由购买者来对拍卖者进行评论,而不是用户在注册时就能直接注册信用度,在注册的时候考虑到各地用户的速度和数据的合法验证,采用高效的客户端数据验证,以提高用户访问效率,及时验证用户数据。注册成功后用户登陆,在登陆的时候要区分用户是以购买者身份还是拍卖者的身份登陆,要求登陆后能够识别用户的身份,并根据相应的用户做出相应的权限限制和功能实现。用户以拍卖者身份登陆转到商品拍卖页面,用户填写相关拍卖商品信息,提交拍卖。以购买者身份登陆转到网站首页,用户可随意查看商品,并对商品进行评论,购买等。3.2.1需要实现的功能及功能模块1需要实现的功能1)用户自行登记拍卖物品,页面自动更新。2)登记拍卖物品的用户能为自己度身订做交易的方式,如要求付款方式,信用要求,报价范围等等。3)对登记拍卖的物品及用户的信用及时反馈用户。4)产品可按照您的要求分类,精确搜索与模糊搜索相结合,保证用户能轻易找到想要的物品。5)采用公平可靠的竞价方式,对拍卖者的交易信用进行统计,让购买者了解每个拍卖者的信用情况。6)用户可得到被投诉、评价情况,出售物品列表和拍卖物品竞价情况等,还可以进行查看留言及答复等。2需要实现的功能模块1)注册登录模块实现拍卖者和购买者分别注册和登录,以获得拍卖者和购买者的详细信息,并赋予不同身份的不同的权限。2)拍卖商品模块拍卖者上传要拍卖商品的信息,包括:名字、描述、图片、数量。拍卖者可以查看自己拍卖的商品信息和已拍卖成功的商品信息。最终确定交易是否成功。3)竞购商品模块购买者对需要商品进行竞价,填写需要数量和愿意给出的价格。然后判断是否竞价成功。购买者可以查看已竞价成功的商品的详细信息。4)商品搜索模块可以模糊查询和精确查询所需商品。5)评价模块购买者对商品作出评价。并用评分统计拍卖者的信用程度。6)留言板模块用户之间相互留言。3.2.2数据流程图该系统的数据流程图如图3-1所示:拍卖者登录发表评价判断成功搜索商品信用度统计登录填写拍卖表单填写竞价表单购买者购买商品信息表商品信息表拍卖者表评价表图3-1 数据流程图3.2.3功能模块设计 1、功能模块总体设计 如图3-2所示:网上拍卖系统拍卖商品模块添加商品信息查看自己的商品信息查看已拍卖商品信息竞购商品模块填写竞买信息查看竞价成功的商品信息注册登录模块权限管理密码管理商品搜索模块精确搜索商品模糊搜索商品搜索全部商品商品评价模块评分评价统计信用度留言板模块留言图3-2功能模块总图2、主要模块功能分析1) 拍卖者模块拍卖者登录成功后可以执行拍卖商品、查看商品拍卖情况、搜索商品、账户修改的操作。如图3-3所示:拍卖者拍卖商品查看商品拍卖情况帐户修改搜索商品 图3-3拍卖者功能图2) 购买者模块购买者登录成功后可以执行搜索商品、竞价、账户管理、评价、留言的操作。如图3-4所示:购买者搜索商品竞价帐户管理评价留言图3-4 购买者功能图3) 拍卖与购物模块拍卖流程是拍卖者登录成功后填写商品拍卖表单以提交商品信息。也可以查看拍卖情况。购物流程是购买者登录成功后搜索需要的商品,填写竞购表单,竞价成功会将信息显示在购物车。如图3-5所示:登陆填写竞购表单购买者图3-5 拍卖与购物流程图拍卖者登陆提交商品的拍卖信息查看拍卖情况填写拍卖表单搜索需要商品查看购物车NNYY3.3 系统E-R图该系统数据库的E-R图,如图3-6所示:图3-6 系统E-R图mm1n购买者购买者编号用户名密码真实姓名竞购商品商品编号商品名称拍卖者编号起始价拍卖拍卖者拍卖者编号用户名密码信用度真实姓名3.4系统数据逻辑结构该数据库的数据逻辑结构图如下表所示:表3-1 BuyGoodInfo(购买商品信息表)列名中文名类型宽度是否允许为空pkid(主键)购买商品编号bigint8NOTNULLFk_BuUserId购买者IDbigint8NOTNULLFk_GoodsId商品IDbigint8NOTNULLBuyPrice价格money8NOTNULLBuyCount数量int4NOTNULLBuyTime购买时间datetime8NOTNULLSendAddress送货地点nvarchar250NOTNULLSendFashion送货方式nvarchar50NOTNULLisSucc是否成功bit1NOTNULL表3-2 GoodsInfo(商品信息表)列名中文名类型宽度是否允许为空pkid(主键)商品编号bigint8NOTNULLGoodsName商品名称nvarchar50NOTNULLGoodsDescription商品描述nvarchar250NULLBeginPrice起始价money8NOTNULLImagePath图片路径nvarchar50NULLAmount数量int4NOTNULLEnrolTime时间datetime8NOTNULLFk_sellId拍卖者Id bigint8NOTNULL表3-3 Buyuser(购买者细节表)列名中文名类型宽度是否允许为空pkid(主键)购买者编号bigint8NOTNULLUsername用户名nvarchar50NOTNULLPassword密码nvarchar50NOTNULLTelephone电话nvarchar50NOTNULLeMail邮箱nvarchar50NOTNULLTruName真实姓名nvarchar50NOTNULLAddress地址nvarchar250NOTNULLPostBoy邮编nvarchar20NOTNULLPassHint密码提示nvarchar250NULL表3-4 Selluser(拍卖者表)列名中文名类型宽度是否允许为空pkid(主键)拍卖者编号bigint8NOTNULLUserName用户名nvarchar50NOTNULLPassword密码nvarchar50NOTNULLTelePhone电话nvarchar50NOTNULLeMail邮箱nvarchar50NOTNULLTrueName真实姓名nvarchar50NOTNULLAddress地址nvarchar250NOTNULLPostBoy邮编nvarchar50NOTNULLPassHint密码提示nvarchar250NULLCreditValue信用度nvarchar50NOTNULL表3-5 Appraise(评价表)列名中文名类型宽度是否允许为空pkid(主键)评价编号bigint8NOTNULLfk_BuyUserId购买者编号bigint8NOTNULLAppMark评分int4NOTNULLAppContent评价内容nvarchar250NULL表3-6 leaveWord(留言表)列名中文名类型宽度是否允许为空pkid(主键)留言编号bigint8NOTNULLFk_BuyUserId购买者编号bigint8NOTNULLLContent留言内容nvarchar250NOTNULLLTime留言时间datetime8NOTNULL4系统具体实现4.1开发系统的语言与工具1系统开发语言JAVA语言Java语言是一种面向对象、与平台无关、安全、稳定和多线程等的优秀的语言。是目前软件设计中极为健壮的编程语言。Java语言不仅可以用来开发大型的应用程序,而且特别适合于动态网站的应用开发。具有“一旦写成处处可用”的特点。JavaScriptJavaScript是一种基于对象(Object)和事件驱动(Event Driven)并具有安全性能的脚本语言。使用它的目的是与HTML超文本标记语言、Java 脚本语言(Java小程序)一起实现在一个Web页面中链接多个对象,与Web客户交互作用,从而可以开发客户端的应用程序等。JSPJSP(JavaServer Pages)是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。该技术为创建显示动态生成内容的Web页面提供了一个简捷而快速的方法。2系统开发工具及插件EclipseEclipse是一个开放源代码的、与Net Beans、Sun ONE Studio和Borland Jbuilder类似的一种基于Java的整合型可扩展开发平台。TOMCATTomcat是一个免费的开源的Serlvet 容器,它是Apache基金会的Jakarta项目中的一个核心项目,由Apache,Sun和其它一些公司及个人共同开发而成。MyEclipse企业级工作平台(MyEclipse Enterprise Workbench ,简称MyEclipse)是对Eclipse IDE的扩展,利用它我们可以在数据库和J2EE的开发、发布,以及应用程序服务器的整合方面极大的提高工作效率。它是功能丰富的J2EE集成开发环境。4.2 拍卖商品功能该功能是拍卖者发布商品的基本信息,如:名字、起始价、数量、图片等。只有拍卖者有权限使用该功能。后台程序:public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException /设置时间Date d=new Date();SimpleDateFormat f=new SimpleDateFormat("yyyy-MM-dd");String date=f.format(d);/设置时间结束/获取图片名称File file=new File(request.getParameter("txtPath");String filetitle=file.getName();if(filetitle=null |"".equals(filetitle)filetitle="no.jpg"String filename="Image"+filetitle;GoodsInfo goods=new GoodsInfo();/获取拍卖用户IDlong id=Long.parseLong(String)session.getAttribute("loginedUserId");/添加商品名字goods.setGoodsName(request.getParameter("txtgoodsname").trim();/添加商品描述 goods.setGoodsDescription(request.getParameter("txtmiaoshu").trim();/添加商品起始价格 goods.setBeginPrice(Double.valueOf(request.getParameter("txtbeginPrice").trim();/添加商品图片路径goods.setImagePath(filename); /添加商品数量goods.setGoodsCount(Integer.parseInt(request.getParameter("txtcount").trim(); goods.setEnroTime(date);/添加商品添加时间goods.setSellUserId(id);/添加拍卖用户IDGoodsInfoRules goodsadd=new GoodsInfoRulesImpl();boolean tag=goodsadd.saveGoods(goods);if(tag=true)/拍卖商品信息添加成功session.setAttribute("SaleInfo","拍卖商品上传成功!");response.sendRedirect(request.getContextPath()+"/saleGoods.jsp");else/拍卖商品信息添加失败session.setAttribute("SaleInfo","拍卖商品上传失败,请检查操作!");response.sendRedirect(request.getContextPath()+"/saleGoods.jsp");运行结果:拍卖者填写商品拍卖信息(如图4-1)后提交商品信息。提交成功后搜索商品会有商品的信息。图4-1 拍卖表单4.3竞购商品功能该功能是购买者进行竞价的功能。购买者填写愿意给出的价格,购买的数量。所给的价格如果大于现有竞价的价格则竞价成功。否则失败。后台程序:public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException String Userdegree = (String) session.getAttribute("Userdegree");/ 获取用户身份if ("卖".equals(Userdegree) / 用户以卖者身份登陆session.setAttribute("buyinfo", "您还没有权限竟价购买商品!");response.sendRedirect(request.getContextPath() + "/BuyGoods.jsp"); else / 用户以买者身份登陆float price = 0;/ 保存商品购买表中的临时最高价格int shuliang = 0;/ 保存商品信息表中的临时商品数量float beginprice = 0;/ 保存商品信息表中的临时的起始价格/ 设置时间Date d = new Date();SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd");String date = f.format(d);long id = Long.parseLong(String) session.getAttribute("selectGoodsId");/ 获得商品IDlong userid = Long.parseLong(String) session.getAttribute("loginedUserId");/ 获取用户IDString sql = "select BuyPrice from BuyGoodsInfo where Fk_GoodsId="+ id + " "/ 查询商品购买表中的最高竟价String sqlcount = "select BeginPrice,Amount from GoodsInfo where pkid="+ id + ""/ 查询商品信息表中商品的数量ResultSet rs1 = consql.lookfor(sqlcount);ResultSet rs = consql.lookfor(sql);try while (rs1.next() beginprice = rs1.getFloat(1);/ 获取商品信息表中的起始价格shuliang = rs1.getInt(2);/ 获取商品信息表中商品的数量while (rs.next() price = rs.getFloat(1);/ 获取商品购买表中买者的最高竟价 catch (SQLException e) / TODO Auto-generated catch blocke.printStackTrace(); finally try consql.sqlCon().close(); catch (SQLException e) / TODO Auto-generated catch blocke.printStackTrace(); / 购买价格float money = Float.parseFloat(request.getParameter("txtprice"); if (money > price && money > beginprice) / 竟价成功int count = Integer.parseInt(request.getParameter("txtbuycount");/ 购买数量if (count <= shuliang) String address = request.getParameter("txtaddress");String sendFin = request.getParameter("txtsendFin");/ 检查数据库中是否存在对当前用户正在购买的商品信息String sqlexists = "select * from BuyGoodsInfo where Fk_GoodsId="+ id + ""ResultSet rsex = consql.lookfor(sqlexists);try if (rsex.next() = true) / 更新记录String sqlupdate = "update BuyGoodsInfo set Fk_BuUserId="+ userid+ ",BuyPrice="+ money+ ",BuyCount="+ count+ ""+ ",BuyTime='"+ date+ "',SendAddress='"+ address+ "',SendFashion='"+ sendFin+ "' where Fk_GoodsId=" + id + ""boolean tag = consql.conupdate(sqlupdate);if (tag = false) / 操作失败session.setAttribute("buyinfo", "竟价购买操作失败!");response.sendRedirect(request.getContextPath()+ "/BuyGoods.jsp"); else / 操作成功session.setAttribute("buyinfo","您的竟价拍买信息已成功发送!");response.sendRedirect(request.getContextPath()+ "/BuyGoods.jsp"); else / 保存新记录String sqlinsert = "insert into BuyGoodsInfo values("+ userid+ ","+ id+ ""+ ","+ money+ ","+ count+ ",'"+ date+ "','"+ address+ "','"+ sendFin+ "',"+ 1+ ")"boolean tag = consql.conupdate(sqlinsert);if (tag = false) / 操作失败session.setAttribute("buyinfo", "竟价购买操作失败!");response.sendRedirect(request.getContextPath()+ "/BuyGoods.jsp"); else / 操作成功session.setAttribute("buyinfo","您的竞价拍买信息已成功发送!");response.sendRedirect(request.getContextPath()+ "/BuyGoods.jsp"); catch (SQLException e) / TODO Auto-generated catch blocke.printStackTrace(); catch (IOException e) / TODO Auto