订餐系统javaee课程设计Word文档下载推荐.docx
- 文档编号:17003296
- 上传时间:2022-11-27
- 格式:DOCX
- 页数:24
- 大小:384.80KB
订餐系统javaee课程设计Word文档下载推荐.docx
《订餐系统javaee课程设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《订餐系统javaee课程设计Word文档下载推荐.docx(24页珍藏版)》请在冰豆网上搜索。
菜品信息表,记录系统中的菜品信息。
把汉字转化为汉语拼音,作为字段名。
把ID设为主键,且不为空,bianhao、mingcheng、leibie、tupian、jianjie、jiage、faburen、addtime及之相关联,如表1所示。
表1菜品信息表
字段名
类型
长度
是否为主键
是否为空
说明
id
int
11
是
否
菜品编号
bianhao
varchar
20
菜品编码
mingcheng
50
菜品名称
leibie
菜品类别
tupian
菜品图片
jianjie
菜品简介
faburen
30
发布人
2.4.2管理员信息表
管理员信息表,存储系统中的管理员信息。
其中,ID设置为int型,并设为主键,且不能为空;
username、pwd设置为varchar型,如表2所示。
表2管理员信息表
Id
Int
10
用户编号
username
Varchar
用户姓名
Pwd
用户密码
2.4.3用户注册信息表
用户注册信息表,记录系统中的注册用户信息。
把ID设为主键,且不为空,zhanghao、mima、ximgming、diqu、zhaopian、issh及之相关联。
表3用户注册信息表
编号
Zhanghao
账号
mima
密码
Xingming
姓名
Diqu
地区
Zhaopian
照片
Issh
备注
2.5主要功能
用struts框架中的异常处理机制,本系统自定义了异常类SystemException和异常处理类SystemExceptionHandler。
在MessageResources.properties中定义需要在Dao中抛出异常时声明的内容。
在struts-config.xml中配置公共异常处理文件<
global-exceptions>
,加入资源文件<
message-resourcesparameter="
MessageResources"
/>
在Dao中抛出自定义异常。
并在公共异常处理页面中使用struts标签<
html:
errors/>
进行异常信息显示。
顾客模块为封装的异常跳转页面如下图3所示:
图3
在struts-config.xml文件中的配置信息如下:
<
<
exceptionkey="
errors.detail"
type="
com.hhq.util.SystemException"
handler="
com.hhq.util.SystemExceptionHandler"
path="
/jsp/clientError.jsp"
/>
/global-exceptions>
在配置文件中可见,异常是以键值对的方式在struts1.1中存放,type属性是指异常类,handler属性是指异常的处理类,path属性是指出现异常后跳转的错误页面。
3.设计结果及分析
3.1订餐系统登录界面设计
该系统通过输入用户名和密码进行登录,登录界面如图4所示。
图4登录界面
功能描述:
顾客登陆管理,包括登陆时管理员需要输入用户名、密码、验证码、也可已选择是否记录用户名和密码以便以后登录。
如果管理员选择记住用户名和密码则下一次登陆的时候只需要输入验证码,即可直接登录。
(1)登录页面控制模块Login相关代码如下:
login.jsp:
%@pagelanguage="
java"
import="
java.util.*,com.actions.*"
pageEncoding="
gbk"
%>
%Stringpath=request.getContextPath();
StringbasePath=request.getScheme()+"
:
//"
+request.getServerName()+"
"
+request.getServerPort()
+path+"
/"
;
%@taglibprefix="
s"
uri="
/struts-tags"
!
DOCTYPEHTMLPUBLIC"
-//W3C//DTDHTML4.01Transitional//EN"
>
html>
<
head>
title>
登录页面<
/title>
styletype="
text/css"
/style>
/head>
body>
divalign="
center"
br>
spanclass="
STYLE2"
订餐系统<
/span>
/div>
s:
formaction="
login"
textfieldname="
userName"
label="
用户名"
value="
/s:
textfield>
passwordname="
password"
密码"
password>
submitvalue="
登录"
propertyvalue="
resultMSG"
form>
/body>
/html>
publicclassALogin
{publicvoiddoLogin(HashtableinputData,HashtableoutputData,
HttpSessionmySession)
throwsException
{//获取输入信息
StringsUsername=(String)inputData.get("
username"
);
StringsPassword=(String)inputData.get("
//校验用户输入信息
LUserlUser=(LUser)GlobalObjectProvider.getLogicService(CommonConst.LOGIC_KEY_USER);
//如果对应的类没有的话,报错并返回login页面
if(lUser==null)
{thrownewException("
用户名或密码错误请重新输入!
);
}
//获取用户信息
UseruserInfo=lUser.getUserInfo(sUsername,sPassword);
if(userInfo==null)
{
outputData.put("
pageId"
CommonConst.VIEWID_LOGIN);
errMsg"
"
用户名密码检查失败!
请重新输入。
sUsername);
return;
}
Else
{
CommonConst.VIEWID_MENU);
//往session中设置用户信息
mySession.setAttribute("
loginUser"
userInfo);
}}}
3.2订餐系统主页面模块设计
用户可以通过订餐系统主页面进行订餐如图5所示。
图5
顾客登陆管理,包括
(1)登陆时可以以游客或者会员的两种方式进行订餐操作,如果是会员登陆,先前需要录入用户名、密码、验证码,以便系统确认登陆成功。
(2)会员个人信息管理,会员可以修改个人资料(如:
电话,地址等),也可以查看订餐信息,了解当前订餐的动态(详见会员登录流程图)。
(3)选购美食,作为顾客,在挑选美食的过程中,可以直接将称心的美食选进购物车中也可通过一系列查询,进一步了解后,再选择美食(详见选购美食流程图)。
选购美食部分代码如下:
……//得到在Spring中动态注入的Service层对象
……//得到日志对象log
publicActionForwardqueryForAll(ActionMappingmapping,ActionFormform,
HttpServletRequestrequest,HttpServletResponseresponse){
Stringforward="
first"
if(request.getParameter("
user"
).equals("
manager"
)){
forward="
queryDishes"
;
}
Foodfood=newFood();
List<
Food>
foodList=null;
topList=null;
intallRecorders=foodService.queryForAllRecorders(food);
//当不是第一次登陆页面时
if(request.getParameter("
cp"
)!
=null&
&
request.getParameter("
ls"
=null){
intcurrentPage=Integer.parseInt(request.getParameter("
));
intlineSize=Integer.parseInt(request.getParameter("
if(currentPage>
1&
lineSize>
allRecorders){
currentPage=1;
food.setCurrentPage(currentPage);
food.setLineSize(lineSize);
foodList=foodService.queryForFood(food);
}else{
//第一次来到页面,top5和食品图片等信息
foodList=foodService.queryForFood();
}
intpageSize=(allRecorders+food.getLineSize()-1)/food.getLineSize();
request.setAttribute("
pageSize"
pageSize);
allRecorders"
allRecorders);
topList=foodService.queryForTop();
//下拉列表中的信息
FoodAttribute>
foodAttributeList=foodService.querySelectInfo();
//传给top10的list
topList"
topList);
//传给视频图片等信息的list
foodList"
foodList);
//传给下拉列表的list
foodAttributeList"
foodAttributeList);
returnmapping.findForward(forward);
首先判断是从哪个页面跳到到这里来调用这一方法,随着调用者的不同,方法也会将最后的传输到不同的页面中去。
然后查询出所有美食的记录数,再对是否是第一次登录到此页面进行判断,以为,第一次登录时当前页数和每页显示行数是默认的,而此后登录到此页面时有可能发生改变,最后再用Spring中动态注入的服务层中食品类的对象调用查询食品信息的方法,再将结果通过request对象传输到对应的页面中去。
publicStringgetFoodInfo(Stringsrc){
//图片绝对路径
Stringpicsrc=null;
StringfoodInfo=null;
//只保留相对路径,将绝对路径去掉
Stringtemp[]=src.split("
for(inti=0;
i<
temp.length;
i++){
//得到图片的相对路径
picsrc=temp[temp.length-1];
Foodfd=foodDAO.query(picsrc);
foodInfo=fd.getFoodDescription();
returnfoodInfo;
此方法要在jsp页面中有DWR的对象调用,其中得到的路径是图片在服务器上的绝对路径,首先用String类中的split方法将其截成数据库中所存入得图片路径形式,然后再作为查询条件在数据库中查询,查询出美食的信息。
然后DWR对象会将查询出来的信息作为jsp页面中回调函数的参数传回页面端。
3.3美食信息添加功能模块
对菜品信息进行维护,包括:
添加菜品,添加菜品图品,价格,是否是推荐菜品等。
菜品过季下架,用于菜品原料缺少或菜品过季等情况,进行逻辑删除。
菜品的查询,可以按菜品的名称、价格、销售量、是否是推荐菜品进行查询,默认是推荐菜品查询。
修改维护菜品信息,主要针对菜品原料的价格更变菜品的价格及菜品是打折时的价格更变,如图6所示。
图6
美食添加中图片上传功能代码如下:
/**图片上传**/
……//定义局部变量
try{
IPTimeStampits=newIPTimeStamp(request.getRemoteAddr());
//自动为上传图片命名,以确定图片的唯一性,以防覆盖
foodPictureAddr=its.getIPTimeStampRand()+"
."
+its.getLastName(());
stream=();
=this.getServlet().getServletContext().getRealPath("
/images/food"
)+"
+foodPictureAddr;
bos=new();
intbytesRead=0;
byte[]buffer=newbyte[8192];
while((bytesRead=stream.read(buffer,0,8192))!
=-1){
bos.write(buffer,0,bytesRead);
}
}catch(Exceptione){
e.printStackTrace();
}finally{
try{
bos.close();
stream.close();
}catch(IOExceptione){
e.printStackTrace();
}catch(Exceptione){}
();
/**图片上传结束**/
首先,有系统自动未上传图片命名,防止覆盖,然后通过字符串拼接的方式作为图片的地址存入数据库(例如:
图片名称叫aaa,扩展名为jpg,在存入数据库中的地址就是相对地址系统自动生成的名字.jpg),在通过输入输出流的方式将图片上传到服务器上。
即由从form中得到的图片路径以流的方式服务器上的一本系统自动并命好的文件上,最后关闭输入流和输入流,并将文件损毁。
另附图片自动命名类的部分代码如下
//为了得到不重复的图片名称(首先用数字零给本机IP地址的点补位,然后再加上当前时间(精确到毫秒),最后再加上三个随机数)
……//定义局部变量
publicStringgetIPTimeStampRand(){
StringBufferbuf=newStringBuffer();
if(ip!
=null){
Stringstr[]=this.ip.split("
\\."
for(inti=0;
str.length;
buf.append(this.addZero(str[i],3));
buf.append(this.getTimeStamp());
Randomrand=newRandom();
3;
buf.append(rand.nextInt(10));
returnbuf.toString();
ip已经在实例化自动命名类对象是赋值,即是本机的ip地址,将ip地址通过“.”字符来分开有字符串数组接收,再将每部分未满三位的进行补零操作,再加上时间戳,最后加上三位随机数,再将StringBuffer转换成String对象最后得到的内容既是系统为图片自动赋好的名字。
另附美食类别处理代码如下:
if((!
attributeId.trim().equals("
0"
))&
(attributeId.trim().equals("
))){
food.setFoodTypeId(attributeId);
//新类别
foodAttributeValue=foodService.queryFoodAttributeId();
foodAttributeId=foodAttributeValue.getAttributeId();
//调用bean中的changeAttributeId方法将foodAttributeId转换成foodattribute表中的格式
attributeid=foodAttributeValue.changeAttributeId(foodAttributeId);
}catch(Exceptione){
//超过3位,提示减少不必要的食品类型,或者联系hhq
log.error("
系统添加食品类别信息过多!
e);
thrownewSystemException("
foodattributelargenum.error"
foodattribute=newFoodAttribute();
foodattribute.setAttributeId(attributeid);
foodattribute.setAttributeName(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 系统 javaee 课程设计