完整版酒店管理系统毕业设计论文.docx
《完整版酒店管理系统毕业设计论文.docx》由会员分享,可在线阅读,更多相关《完整版酒店管理系统毕业设计论文.docx(23页珍藏版)》请在冰豆网上搜索。
![完整版酒店管理系统毕业设计论文.docx](https://file1.bdocx.com/fileroot1/2023-1/9/c167e625-ff40-48aa-b0ed-09c8a640da3f/c167e625-ff40-48aa-b0ed-09c8a640da3f1.gif)
完整版酒店管理系统毕业设计论文
毕业论文(设计)
题目:
网上订餐系统
学院 / 系计算机科学与工程系
专业
学号
姓名
指导教师
2011年05月14日
1、开发环境
开发工具:
MyEclipse
开发环境:
windowsXP
开发语言:
jsp
数据库:
SQLServer2000
2、系统分析
2.1、需求分析
“民以食为天",随着人民生活水平的提高,餐饮业在服务行业中占有越来越重要的地位。
努力在当前餐饮行业日趋激烈的竞争中脱颖而出,已成为每位餐饮业经营者所追求的目标。
网络订餐实现了小店面大作为的成本效益,解决了因为店面小的限制而无法提高营业额的难题,是一个小投入大成效的经营新模式。
在网上参观订餐的人相对网下人来说还是比较少,一个是对网上餐馆的信用度持疑虑态度;另一个是网上订餐只可以看到物品的说明简介和外观,没有看到实体于细节处,无法通过快速浏览确定是不是自己想要的菜品。
而这正是传统的实体餐馆优于网上餐馆的地方。
而在网上订餐的人都是一般都是对电脑比较熟练的人,也就就是比较年青化的消费群体.就是白领、大学生、高中生和对计算机操作相对比较熟的人.因为这些人工作都比较忙,而且对计算机也比较熟,思想也比较超前,对于在网上订餐能够接受,并经常上网订餐。
2.2、可行性分析
经济可行性研究是对组织的经济现状和投资能力进行分析,对系统建设运行和维护费用进行估算,对系统建成后可能取得的社会和经济效益进行估计。
技术可行性要考虑现有的技术条件是否能够顺利完成开发工作,软硬件配置是否满足开发的需求等。
订餐管理系统用的是JSP开发语言,调试相对简单,当前的计算机硬件配置也完全能满足开发的需求。
软件方面:
由于目前单机模式相对发展成熟,故软件的开发平台成熟可行,它们速度快、容量大、可靠性能高、价格低,完全能满足系统的需求。
运行可行性对新系统运行后给现行系统带来的影响(包括组织机构、管理方式、工作环境等)和后果进行估计和评价。
同时还应考虑现有管理人员的培训、补充,分析在给定时间里能否完成预定的系统开发任务等。
3、系统设计
3。
1、模块设计
(a)用户注册
(b)用户登录
(c)菜品浏览
(d)菜品订购
(e)菜品查询
(f)订单修改
(g)修改密码
(h)修改个人信息
(i)管理员
3。
2、功能模块图
前台功能图(如图3—1)主要包括客户进入网站后进行的相应操作.首先,客户需要注册会员登录,如果不注册会员则不能进行订餐的下一步操作。
其次,会员注册成功后,以会员身份登录网站,则可以进行会员信息修改,订单信息查询修改,网上订餐以及网站留言等功能。
图3-1前台功能图
图3—2后台功能图
后台功能图(如图3—2)主要介绍系统管理员登录网站后台进行的相应操作.首先,管理者需登录后台网站.其次,登录成功后,可进行系统用户管理、菜品类别设置、网站新闻发布、菜品信息管理等。
订单及管理流程图(如图3-3)介绍了用户从开始订餐到网站后台管理者查看订单,实现送货,更改订单状态的整个过程,也是整个订餐系统的运作过程。
下订单流程图:
订单管理流程图:
图3-3订单及管理流程图
3.3、数据库设计概述
数据库设计是指对于一个给定的应用环境,提供一个确定最优数据模型与处理模式的逻辑设计,以及一个确定数据库存储结构与存取方法的物理设计,建立起既能反映现实世界信息和信息联系,满足用户数据要求和加工要求,又能被某个数据库管理系统所接受,同时能实现系统目标,并有效存取数据的数据库。
3.4、数据库设计周期
根据软件工程的思想,数据库设计的周期可以划分为六个阶段:
规划阶段:
确定开发的总目标,给出计划开发的软件系统的功能、性能以及可靠性等方面的设想。
需求分析阶段:
认真细致地了解用户对数据的加工要求,确定系统的功能与边界。
设计阶段:
把需求分析阶段所确定的功能细化,主要工作是概念设计阶段、逻辑设计阶段、物理设计阶段,然后,对每个阶段内部设计详细的流程。
程序编制阶段:
以一种或几种特定的程序设计语言表达上一阶段确定的各模块控制流程。
程序编制时应遵循结构化程序设计方法。
调试阶段:
对已编好的程序进行单元调试(分调),整体调试(联调)和系统测试(验收)。
运行和维护阶段:
是整个设计周期最长的阶段,其工作重点是收集和记录系统实际运行的数据。
在运行中,必须保持数据库的完整性,必须有效地处理数据故障和进行数据库恢复.同时解决开发过程的遗留问题,改正错误进行功能完善。
在我们的数据库系统建设中,着重考虑了以下两个标准保证数据的一致性:
字段标准:
字段标准不统一是造成数据库难以共享的一个主要原因,因为字段的设计处于数据库设计的最底层,或者可以说是最基本的一层,如果这一层都不能统一的话,会直接影响到数据库中数据的共享。
代码标准:
代码的引入为保持数据库中数据的一致性提供了一个重要手段。
此外本数据库设计主要遵循以下原则:
数据库文件的实用性,数据库文件的安全性,数据库文件的独立性,节省磁盘空间。
数据库设计是要在一个给定的应用环境(DBMS)中,通过合理的逻辑设计和有效的物理设计,构造较优的数据库模式、子模式,建立数据库和设计应用程序,满足用户的各种信息需求。
物理结构设计的原则如下:
1。
尽可能的减少数据冗余和重复.
2.结构设计与操作设计相结合。
3.数据结构具有相对的稳定性.
基于以上设计原则,本系统设计了一个数据库,包含基本信息表(如员工类别、存货等)及几个实体联系建模后的表(如散件销售、整机销售等)。
为了加快系统访问的速度把这些表放在一个数据库中。
3.5、E-R图设计
(a)系统E—R图
(b)用户基本信息处理E-R图
(c)用户订单处理E-R图
(d)菜品查询处理E—R图
(e)管理员E-R图
3.7、数据库设计
本系统的数据库其中包括九个表,分别为菜品菜品表t_goods,用户注册表t_user,管理员表t_admin,菜品类型表t_catelog,公告表t_gongao,定单表t_order,定单详细信息表t_orderItem。
详情请见下面的数据库表
1菜品表
2菜品类别表
3订单表
4订单详细表
5公告表
6管理员表
7注册用户表
4、详细设计
4.1、主页面模块
代码如下:
Maprequest=(Map)ServletActionContext。
getContext()。
get("request”);
Stringsql="fromTGoodswheregoodsDel='no'andgoodsIsnottejia='yes'orderbygoodsIddesc”;
ListgoodsYesTejiaList=goodsDAO.getHibernateTemplate().find(sql);
if(goodsYesTejiaList.size()>4)
{
goodsYesTejiaList=goodsYesTejiaList。
subList(0,4);
}
request.put(”goodsYesTejiaList”,goodsYesTejiaList);
sql=”fromTGoodswheregoodsDel=’no'andgoodsIsnottejia=’no’orderbygoodsIddesc";
ListgoodsNoTejiaList=goodsDAO.getHibernateTemplate().find(sql);
if(goodsNoTejiaList。
size()〉4)
{
goodsNoTejiaList=goodsNoTejiaList.subList(0,4);
}
request.put(”goodsNoTejiaList”,goodsNoTejiaList);
4。
2、用户注册模块
用户注册是为第一次登录网站的用户所设计的。
在用户成为本站用户之前一定要注册才可以访问我网站的其它网页。
①用户注册包括:
登录名称,真实姓名,设置密码,电子邮件等。
②注册成功后,才可以访问本站的其他页面.
代码如下
TUseruser=newTUser();
user.setUserName(userName);
user.setUserPw(userPw);
user.setUserAddress(userAddress);
user。
setUserTel(userTel);
user。
setUserRealname(userRealname);
user。
setUserEmail(userEmail);
user。
setUserSex(userSex);
user.setUserQq(userQq);
user.setUserDel("no”);
userDAO。
save(user);
Mapsession=ServletActionContext。
getContext()。
getSession();
session。
put(”user”,user);
return"successAdd";
4.3、用户登录模块
用户登录包括:
登录名称,输入密码.
当用户登录后由管理员核对该用户的名称和密码是否正确,如果无误的话用户可以通过检查直接进入网站的其它页面进行浏览和订购。
代码如下:
Stringsql="fromTUserwhereuserName=?
anduserPw=?
";
Object[]con={userName,userPw};
ListuserList=userDAO。
getHibernateTemplate().find(sql,con);
if(userList。
size()==0)
{
this.setMessage(”用户名或密码错误");
this.setPath("qiantai/default.jsp”);
}
else
{
Mapsession=ServletActionContext.getContext().getSession();
TUseruser=(TUser)userList.get(0);
session.put(”user”,user);
Cartcart=newCart();
session.put("cart”,cart);
this.setMessage(”成功登录");
this。
setPath(”qiantai/default。
jsp”);
}
return”succeed”;
4。
4、菜品浏览模块
菜品浏览:
成功登陆后的用户可以分页浏览菜品菜品,并将想要的菜品提交到填写订单页面。
代码如下:
Stringsql=”fromTGoodswheregoodsDel=’no’andgoodsIsnottejia='no’orderbygoodsCatelogId";
ListgoodsList=goodsDAO.getHibernateTemplate().find(sql);
for(inti=0;isize();i++)
{
TGoodsgoods=(TGoods)goodsList.get(i);
System。
out.println(goods.getGoodsCatelogId());
goods.setGoodsCatelogName(catelogDAO。
findById(goods.getGoodsCatelogId())。
getCatelogName());
}
Maprequest=(Map)ServletActionContext.getContext().get("request”);
request.put("goodsList”,goodsList);
returnActionSupport.SUCCESS;
4。
5、订餐车模块
代码如下:
TGoodsgoods=goodsDAO。
findById(goodsId);
TOrderItemorderItem=newTOrderItem();
orderItem.setGoods(goods);
orderItem。
setGoodsQuantity(quantity);
Mapsession=ServletActionContext.getContext()。
getSession();
Cartcart=(Cart)session。
get("cart");
cart。
addGoods(goodsId,orderItem);
session。
put("cart”,cart);
//this.setMessage("");
this。
setPath("myCart。
action”);
4.6、订单确认模块
代码如下:
Mapsession=ServletActionContext。
getContext().getSession();
Cartcart=(Cart)session。
get("cart");
TUseruser=(TUser)session。
get("user”);
TOrderorder=newTOrder();
order.setOrderBianhao(newSimpleDateFormat("yyyyMMddhhmmss")。
format(newDate()));
order.setOrderDate(newSimpleDateFormat("yyyy-MM—ddhh:
mm:
ss")。
format(newDate()));
order。
setOrderZhuangtai("no");//未受理
order。
setOrderUserId(user。
getUserId());
order.setOrderJine(cart。
getTotalPrice());
System.out.println(odderFukuangfangshi+"%%%%%%%%%”);
order。
setOdderFukuangfangshi(odderFukuangfangshi);
order。
setOdderSonghuodizhi(odderSonghuodizhi);
4。
7、订单提交模块
代码如下:
for(Iteratorit=cart。
getItems().values()。
iterator();it。
hasNext();)
{
TOrderItemorderItem=(TOrderItem)it.next();
orderItem。
setOrderId(order.getOrderId());
orderItem。
setGoodsId(orderItem。
getGoods()。
getGoodsId());
orderItemDAO.save(orderItem);
}
cart.getItems().clear();
session.put("cart",cart);
Maprequest=(Map)ServletActionContext.getContext().get("request”);
request。
put("order",order);
4。
8、后台管理员登陆
这是进入系统时的身份验证,用户首先要从软件开发者那里申请用户名和密码,才可以进入。
该过程的流程图如图4-2所示:
代码如下:
Stringsql="fromTAdminwhereuserName=?
anduserPw=?
”;
Object[]con={userName,userPw};
ListadminList=adminDAO.getHibernateTemplate().find(sql,con);
if(adminList.size()==0)
{
result="no”;
}
else
{
WebContextctx=WebContextFactory。
get();
HttpSessionsession=ctx。
getSession();
TAdminadmin=(TAdmin)adminList。
get(0);
session。
setAttribute(”userType”,0);
session.setAttribute("admin”,admin);
result=”yes”;
}
4。
9、后台主界面
代码如下:
/admin/top.jsp"noResizescrolling=no〉
jsp”noResizescrolling=notarget=”main”>
/admin/index/sysPro。
jsp”noResize>
4.10、菜品类别管理
代码如下:
Stringsql="fromTCatelogwherecatelogDel='no'”;
ListcateLogList=catelogDAO.getHibernateTemplate().find(sql);
Maprequest=(Map)ServletActionContext.getContext().get("request”);
request。
put("cateLogList”,cateLogList);
returnActionSupport.SUCCESS;
4。
11、菜品管理
代码如下:
Stringsql=”fromTGoodswheregoodsDel=’no'andgoodsIsnottejia='no'orderbygoodsCatelogId”;
ListgoodsList=goodsDAO.getHibernateTemplate()。
find(sql);
for(inti=0;i〈goodsList。
size();i++)
{
TGoodsgoods=(TGoods)goodsList。
get(i);
System.out.println(goods。
getGoodsCatelogId());
goods。
setGoodsCatelogName(catelogDAO.findById(goods.getGoodsCatelogId())。
getCatelogName());
}
Maprequest=(Map)ServletActionContext.getContext()。
get("request");
request.put("goodsList",goodsList);
returnActionSupport.SUCCESS;
4.12、订单管理
TOrderorder=orderDAO。
findById(orderId);
order。
setOrderZhuangtai(”yes”);//已经受理订单
orderDAO。
attachDirty(order);
this。
setMessage(”受理订单成功");
this.setPath(”orderMana。
action”);
return”succeed";
5、系统调试与测试
5。
1、程序调试
在设计系统的过程中,存在一些错误是必然的。
对于语句的语法错误,在程序运行时自动提示,并请求立即纠正,因此,这类错误比较容易发现和纠正。
但另一类错误是在程序执行时由于不正确的操作或对某些数据的计算公式的逻辑错误导致的错误结果。
这类错误隐蔽性强,有时会出现,有时又不出现,因此,对这一类动态发生的错误的排查是耗时费力的。
5.2、程序的测试
5.2.1、测试的重要性及目的
测试的重要性:
软件的测试在软件生命周期中占据重要的地位。
近来,软件工程界趋向于一种新的观点,即认为软件生命周期每一阶段中都应包含测试,从而检验本阶段的成果是否接近预期的目标,尽可能早的发现错误并加以修正,如果不在早期阶段进行测试,错误的延时扩散常常会导致最后成品测试的巨大困难。
测试的目的:
如果测试的目的是为了尽可能多地找出错误,那么测试就应该直接针对软件比较复杂的部分或是以前出错比较多的位置。
1。
软件测试是为了发现错误而执行程序的过程;
2.测试是为了证明程序有错,而不是证明程序无错误;
3.一个好的测试用例是在于它能发现至今未发现的错误;
4。
一个成功的测试是发现了至今未发现的错误的测试。
测试并不仅仅是为了要找出错误。
通过分析错误产生的原因和错误的分布特征,可以帮助项目管理者发现当前所采用的软件过程的缺陷,以便改进。
同时,这种分析也能帮助我们设计出有针对性地检测方法,改善测试的有效性。
其次,没有发现错误的测试也是有价值的,完整的测试是评定测试质量的一种方法。
5.2.2、测试的步骤
与开发过程类似,测试过程也必须分步骤进行,每个步骤在逻辑上是前一个步骤的继续。
大型软件系统通常由若干个子系统组成,每个子系统又由若干个模块组成。
因此,大型软件系统的测试基本上由下述几个步骤组成:
1。
模块测试在这个测试步骤中所发现的往往是编码和详细设计的错误。
2。
系统测试在这个测试步骤中发现的往往是软件设计中的错误,也可能发现需求说明中的错误.
3.验收测试在这个测试步骤中发现的往往是系统需求说明书中的错误.
5。
2.3、测试的主要内容
为了保证测试的质量,将测试过程分成几个阶段,即:
代码审查、单元测试、集成测试、确认测试和系统测试。
1。
单元测试
单元测试集中在检查软件设计的最小单位—模块上,通过测试发现实现该模块的实际功能与定义该模块的功能说明不符合的情况,以及编码的错误。
2