中南财经政法大学2011届本科生毕业论文(设计)
Mat_Pre_Pro Mat_cycle Mat_Name Mat_Introduce Sell_Flag 预测生产量 生产周期(天数) 物料名称 物料描述 是否产品 Int Int Varchar Text Bit 4 4 50 50 1 >0 0/1 表7 生产计划表 Production 数据项名 Pro_ID Pro_Code G_ID Pro_Number Pro_Start Pro_Days Pro_End 含义说明 数据库流水号 生产计划编号 生产商品编号 计划生产数量 生产开始日期 计划生产天数 生产完成日期 数据类型 Int Varchar int Int Datetime Int Datetime 长度 4 8 4 4 4 4 4 取值范围 表8 材料需求表 Mat_Need 数据项名 Mat_Need_ID Pro_ID Mat_ID Mat_Need_Num 含义说明 数据库流水号 生产计划ID 材料ID 材料需求数量 数据类型 Int int Int Int 长度 4 4 4 4 取值范围 表9 商品评价表Judges 数据项名 J_ID G_ID Mem_ID G_Mark J_Context 含义说明 数据库流水号 商品编号 会员编号 商品分数 评价内容 数据类型 Int Int Int Int Text 长度 4 8 4 4 50 取值范围 1.0~5.0
2. 数据库访问设计
由于后台管理系统的每个操作几乎都与数据库打交道,因此数据库的访问设计十分重要。本系统所采用的数据库访问技术是ODBC,数据源的登录方式设置为使用用户名和密码的形式,这样可以限制访问数据源的群体。
访问设计的基本流程:调用SQLConnect启动与数据的连接,连接模式是以用户名和密码的形式,然后通过分配语句句柄、执行语句、诊断语句、处理结果、最后断开连接等操作,完成对数据库的访问。
3. 数据库程序设计
本系统所用到的数据库设计了两个触发器:ProductionDel和GoodTypeDel。 ProductionDel触发器是当生产计划被删除的时候,当前存在于Mat_Need中,属于被删除计划ID的所有数据都级联删除。
-12-
中南财经政法大学2011届本科生毕业论文(设计)
GoodTypeDel触发器是当平台中的商品类别被管理员删除的时候,当前属于该类别的商品的类别都会自动改为其他类别。
五、 网站的功能实现
本系统采用JSP与Servlet结合,系统源代码中有4个包,分别是bean、dao、
db和servlets。bean包包含了每个数据库中的表形成的一个javabean,类中成员是表的所有字段名;dao包包含每个表的增删改查,以及系统能够用到的用于获取数据的方法,以简化JSP页面的代码编写,加强代码的可读性;db包存放了用于连接数据库的方法;sevlets包存放了控制系统操作的代码,是视图层与模型层的连接处。在webroot文件夹中存放的是css文件、js文件、图片文件和JSP页面。①
(一) 会员管理模块
本模块的主要功能是会员的注册、登录、注销和店铺开设功能。 会员注册主要经过两大判断过程,具体流程如图9所示:
注册用户进入注册页面 输入注册信息 输出出错信息 信息符合规范? 是 否 否 注册成功? 是 输出出错信息 结束
图9 会员注册流程
注册功能实现:用户进入注册页面时候,需要用户输入用户名、密码以及邮箱信息。流程图所提到的信息规范判断主要是判断用户名唯一、两次输入密码相同和邮箱书写规范。所使用的方法主要是表单认证,利用js检测数据的规范性。在站点代码中,建立了一个JS文件checkforms.js,主要存放通用的验证代码。如验证是否为空、字符串长度是否符合标准、验证日期、邮箱号码等。在本模块填写注册信息的mem_logon.jsp页面中调用checkforms.js,再调用里面的函数编写详细的验证脚本,并在需要验证的form中加入onSubmit=\属性,使表单在提交的时候调用验证脚本。由于对Ajax不熟悉,因此采用servlet调用MemberDAO中的检测用户名唯一性的函数来实现功能,具体代码如下:
public int checkName(String name){
①
赵甲庆 基于Java+EE5的Web应用框架研究与实践. 大连海事大学硕士学位论文
-13-
中南财经政法大学2011届本科生毕业论文(设计)
DB db=new DB(); int isValid=0; String sql=\ ResultSet rs=db.query(sql); try{ if(rs.next()){ isValid=-1; } }catch(Exception e){ System.err.println(\ } return isValid; }
登陆功能用于验证用户的登陆信息,具体流程如下图所示:
进入注册页面 输入用户名和密码 否 验证成功? 是 进入管理界面 输出验证失败 结束
图10 登陆功能流程图
登陆功能的实现:首先通过表单,将用户输入的用户名和密码传送到servlets,servlets再调用javabean中用于检验用户合法性的方法,关键代码如下:
public boolean Check(String account,String password){ boolean isValid=false; String sql=\\ List
-14-
中南财经政法大学2011届本科生毕业论文(设计)
isValid=true; } } return isValid; }
该方法返回的是一个布尔型结果,代表验证是否成功。方法实现的过程是先以用户输入的用户名为条件,查询Member表中是否有该用户名,如果有就查找该条记录中的密码是否与用户输入的密码相符合,trim()方法是用于除去从表中读出代码的空格符。判断完毕后,将返回值返回到servlet中,然后servlet也对返回值进行判断,如果返回时true,则新建一个session对象,用于存放用户ID,再返回登陆成功信息,进入会员管理页面;如果返回false,则提示错误信息,然后进行页面跳转。Session的设立除了用来验证用户是否登录成功外,还在日后的操作中识别用户。因为如订单、商品、店铺、生产计划等数据表都添加了用户ID的字段。当用户发出管理请求的时候,系统将以session里面存放的用户ID作为查询依据,并返回查询结果给用户。
注销功能:当会员点击注销按钮后,当前页面将跳转到注销页面,注销页面的功能是把存放了用户ID的session对象清空,然后再进行页面跳转。
关键代码如下: <%
session.setAttribute(\response.sendRedirect(\%>
店铺开设功能的实现:本功能的实现流程与会员注册的差不多。会员进入店铺注册页面,填写店铺名称、店铺介绍等店铺信息,点击注册按钮,将信息传到servlet中。在servlet中获取session中存放的用户ID号和利用date()函数获取当前系统时间,然后与之前传过来的信息一同添加到数据库中,返回操作结果,完成店铺注册。
(二) 商品管理模块
商品管理模块主要是包括商品的添加、删除、修改等操作。
-15-
中南财经政法大学2011届本科生毕业论文(设计)
输入商品信息及图片路径 选择关联物料ID 否 添加成功? 是 返回商品管理界面 输出“添加失败” 结束
图11 添加商品路程图
添加商品时需要上传图片,在之前做的项目当中,采用的是分别利用两种表单,先将图片上传到服务器,再获取存储路径字符串,然后与其他商品信息一同添加到数据库中。这样的商品添加方法显得不够便捷,为了可以在上传图片的时候同时上传商品信息,本文使用了smartupload①的方法。将网上下载的smartupload的jar文件存放到WebRoot/WEB-INF/lib路径下,然后通过“import com.jspsmart.upload.*;”语句在servlet中使用,关键代码如下:
SmartUpload mySmartUpload = new SmartUpload(); String image=\int count=0; //上传文件计数
//初始化,传入pageContext内置变量
mySmartUpload.initialize(this.getServletConfig(),request,response); try {
// 上传操作
mySmartUpload.upload();
Files files = mySmartUpload.getFiles();
count = files.getCount();//返回上传的文件数 // 显示文件上载数
GoodsDAO gDao=new GoodsDAO();
String gName=mySmartUpload.getRequest().getParameter(\??
if(count>0){
com.jspsmart.upload.File fileB=mySmartUpload.getFiles().getFile(0); if(!fileB.isMissing()){
Date d = new Date();
SimpleDateFormat sdf = new SimpleDateFormat(\ String name = sdf.format(d);
①
jspSmartUpload上传下载全攻略 http://www.knowsky.com/3136.html
-16-