华北科技学院课程设计说明书技能训练类(三)学号:201207034102班级:信管B121姓名:何欢设计题目:_____在线拍卖系统________________设计地点:____基础五_______________________设计时间:2015.3.10至2015.4.17成绩评定:1、工作量:A(),B(),C(),D(),F()2、难易度:A(),B(),C(),D(),F()3、答辩情况:基本操作:A(),B(),C(),D(),F()代码理解:A(),B(),C(),D(),F()4、报告规范度:A(),B(),C(),D(),F()5、学习态度:A(),B(),C(),D(),F()总评成绩:_________________________________指导教师:_________________________________21、课程设计的目的技能训练的内容围绕一个信息管理系统的实际开发过程进行组织,重点在于程序设计开发部分。信息管理系统的题目由教师指定或学生自行拟定,学生根据教师提出的系统在应用环境、系统规模、数据量、业务流程等方面的要求,进行需求分析、数据库设计、数据库实施、程序开发和测试,最终完成系统。技能训练的目的和要求:(1)使学生巩固和加强《java基础》与《》课程的理论知识。(2)使学生掌握程序设计开发的步骤。(3)使学生掌握model2以上的开发系统的方法。(4)使学生掌握使用数据库管理信息数据的方法。(5)使学生掌握使用JAVA等程序设计语言连接和操作数据库的方法。(6)使学生掌握调试程序的基本方法及上机操作方法。(7)使学生初步掌握开发一个小型信息管理系统的基本步骤,引导学生根据实际业务流程和需求进行系统分析与设计,并建立需要的数据库,最后通过编写代码和调试完成系统。2、软件需求分析和总体设计2.1软件功能拍卖系统是一个在线系统,系统设计为B/S模式,用户在浏览器请求服务端的资源。包含的功能有:①查看竟得物品②浏览流拍物品③管理种类④管理物品⑤浏览拍卖物品⑥查看自己的竞标功能模块框图下图所示(图2-1-1):3登录查看自己已经竞得的物品浏览流拍物品管理物品管理种类浏览拍卖物品查看自己的竞标的竞标记录返回首页注销显示种类添加种类查看自己拍卖物品添加自己要拍卖物品查看当前拍卖物品种类查看详细竞拍物品竞拍刷新图2-1-12.2设计模式拍卖系统采用Model2设计,即代码结构。JSP+Servlet+JavaBean。图2-2-1系统通过JSP技术来表现页面,通过Servlet技术来完成大量的事务处理工作。在model2中,Servlet用来处理请求的事务,充当着一个控制者的角色,并负责向客户端4发送请求。Servlet创建JSP需要的Bean和对象,然后根据用户的请求行为,决定将哪个JSP页面发送给用户。JSP页面没有任何商业处理逻辑,JSP页面只是简单地检索ervlet先前创建的Bean和对象,再将动态内容插入到预定义的HTML模板中。Model2符合MVC架构模式,即(Model-View-Controller)。MVC设计模式模式三部分组成。模型是应用对象,没有用户界面;视图表示在屏幕上的显示,代表流向用户的数据;控制器定义用户界面对用户输入的相应方式,负责把用户的动作转成对Model的操作;Model通过更新View的数据来反映数据的变化。图2-2-2优点:各司其职、互不干涉、有利于开发中的分工、有利于组件的重用缺点:系统结构和实现复杂、视图和控制器过于紧密、适合大型应用程序2.3数据库设计数据库设计为五个表:auction_user、kind、item、bid、state(1)auction_user:用户表。存放用户数据:表2-3-1(2)kind:种类表,存放种类信息。字段名字段说明字段类型字段约束Kind_id物品种类idintPKauto_incrementKind_name种类名varcharNotnull字段名字段说明字段类型字段约束User_id用户的idintPKUsername用户名varchar(50)NotnullUNIQUEUserpass用户密码varchar(50)Notnullemail用户emailvarchar(100)Notnull5Kind_desc种类描述varcharNotnull表2-3-2(3)state:状态表,存放物品状态信息。字段名字段说明字段类型字段约束State_id物品状态idintPKauto_incrementState_name物品状态名varchardefaultnull表2-3-3(4)item:物品表,存放物品信息外键关联到auction_user,kind,state。字段名字段说明字段类型字段约束Item_id物品idintPKauto_incrementItem_name物品名称varcharNotnullItem_remark物品标注varcharNotnullItem_desc物品描述varchardefaultnullKind_id物品的种类IntForeignkeyNotnullAddtime物品起拍时间dateNotnullEndtime拍卖物品截止时间dateNotnullInit_price物品拍卖底价doubleNotnullMax_price物品拍卖最高价doubleNotnullOwner_id物品的所有者IntForeignkeyNotnullWiner_id赢取物品者IntForeignkeydefaultnullState_id物品的状态intForeignkeyNotnull表2-3-4(5)bid:竞价表。存放用户竞价信息。外键关联到item。字段名字段说明字段类型字段约束Bid_id竞拍id号intPKauto_incrementUser_id用户idintForeignkeyNotnullItem_id物品idintForeignkeyNotnullBid_price竞拍价格doubleNotnullBid_date竞拍日期dateNotnull表2-3-562.4类图设计(1)类主要包括:①data类存放封装的数据:图2-4-1②Dao类主要存放对数据库操作的代码:图2-4-2③Manager类主要存放对实体类的操作代码:图2-4-3④Servlet类主要存放处理页面请求的数据的代码:7图2-4-4(2)概念类图如下:data-Attribute1+get()+set()Dao+connect()Maneger+add()+search()+updata()Servlet+doPost()+doGet()图2-4-53、程序实现说明(1)如果未登录,点击任何连接进入登录界面:图3-1登陆时候用户名与密码不匹配会有提示信息(2)如果没有账号进入用户注册界面:8图3-2关键代码实现:if(aud.findUser(username,userpass)!=null){session.setAttribute(username,username);session.setAttribute(register,error);RequestDispatcherrq=request.getRequestDispatcher(/register.jsp);rq.forward(request,response);}else{um.addUser(au);session.setAttribute(username,username);session.setAttribute(register,ok);RequestDispatcherrq=request.getRequestDispatcher(/login.jsp);rq.forward(request,response);}(3)查看自己竞得物品界面:图3-3配置servlet:9servletservlet-nameViewWin/servlet-nameservlet-classcom.blue.servlet.ViewWin/servlet-class/servletservlet-mappingservlet-nameViewWin/servlet-nameurl-pattern/ViewWin/url-pattern/servlet-mapping(4)浏览流拍物品界面:图3-4关键代码是对数据库视图查询的操作:publicArrayListWingetWinItem(intuserid){ArrayListWinlist=newArrayListWin();Winwin=null;doublewinprice=0;if(m.createCon()){Stringsql=select*fromwinwherewiner_id=+userid+andstate_id=2;m.query(sql);while(m.next()){try{item=newItem();item.setItem_name(m.getRs().getString(item_name));kind=newKind(m.getRs().getString(kind_name));winprice=m.getRs().getDouble(max_price);item.setItem_remark(m.getRs().getString(item_remark));win=newWin(item,kind,winprice);list.add(win);}catch(SQLExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}}}m.close();returnlist;}(5)管理物品种类页面:10图3-5添加物品使用了存储过程向数据库添加。if(m.createCon()){Stringsql=execInsert_Kind@kind_name=?,@kind_desc=?;try{PreparedStatementps=m.getCon().prepareStatement(sql);ps.setString(1,kind.getKind_name());ps.setString(2,kind.getKind_desc());intnum=ps.executeUpdate();}catch(SQLExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}}(6)管理物品页面:图3-6添加物品的时候关联种类表,物品种类下拉菜单是动态的。11(7)浏览拍卖物品界面:图3-7(8)查看自己竞标记录界面:图3-8(9)当物品到期,就要更新物品的状态id,刷新数据库的实现:publicvoidupdateItemState(){Dated=newDate();java.text.SimpleDateFormatdateFormat=newjava.text.SimpleDateFormat(yyyy-MM-dd);Strings=dateFormat.format(d);//可以连接一次//将到期的物品如果init_pricemax_price则状态更新为2if(m.createCon()){Stringsql=updateitemsetstate_id=2whereendtime'+s+'andinit_pricemax_price;m.update(sql);}m.close();//将到期的物品如果init_price=max_price则状态更新为3,说明没有人拍卖if(m.createCon()){Stringsql1=updateitemsetstate_id=3whereendtime'+s+'andinit_price=