webService期末大作业——晚餐预定系统(大作业报告源代码)

部署说明

NANCHANG UNIVERSITY

题 目: 晚餐预定系统

学 院: 软 件 学 院

 业: 软 件 工 程

 级:

完成人数: 1 人

 员:

起讫日期:

任课教师: 职称: 副教授

完成时间:

填表日期: 年 月 日

一、开发环境的搭建及遇到的主要问题

1.开发环境

根据个人技术背景,选择开发环境如下:

  1. 将Demo部署为B/S架构的应用;
  2. 使用集成软件包搭建开发环境:PHP+Apache+MySQL;
  3. 借助NuSOAP库实现WSDL服务的部署;
    2.主要问题
    自己对于amp组合建站流程已经比较熟悉,借助集成软件包xampp或者wamp即可轻松搭建出开发环境。
    时间和精力主要耗费在NuSOAP库上,大概花了半天时间用于上手。
    二、数据库与服务端设计
    1. 数据库设计

  1. 数据库共设计两个表:
    1. 餐桌类集合表(tableset):tid, 餐桌容量,餐桌数目,餐桌可扩充人数,描述
    2. 预约表(reservation):rid,称谓,手机号,餐桌类型,人数,就餐日期,订餐时间

  1. 说明:
    1. tableset表是各种餐桌类别的集合,存放各类餐桌的属性,非常方便餐桌的集中管理;
    2. reservation表是用户预约的集合,所有的预约在该表中被动态地管理,对于预约的集中管理提供很大的便利;
    3. 用户在订餐时,首先根据就餐人数确定餐桌类型,结合就餐日期筛选“预约”表,得到空余的餐桌数目,从而安排新的预约。而“取消订餐”,则可以直接在“预约”表中操作。
      以上设计对于餐桌和预约的维护都具有很强的可扩展性。

  1. 初始数据

初始共往tableset表中插入3条数据记录:

10张座位为4的餐桌;

8张座位为8的餐桌(可扩充2个座位);

2张座位为12的餐桌(可扩充3个座位)

2. 主要服务:

  1. availableDinnerDate——获取有效订餐日期
    参数:(无)
    返回值:有效订餐日期与今天的距离天数(xsd:int)
  2. checkContact——检查联系方式格式
    参数:联系方式(str:xsd:string)
    返回值:格式是否正确,取1或0(xsd:int)
    说明:只支持国内的手机号码格式
  3. availableTable——根据用户给出的信息查询可用餐桌
    参数:日期(date xsd:int),就餐人数(total xsd:int)
    返回值:包含新预定id以及查询状态的组合字串(xsd:string)
  4. addContact——补充联系方式信息
    参数:预定id(rid xsd:int),称谓(title xsd:string),联系方式(contact xsd:string)
    返回值:状态字串(xsd:string)
  5. cancelReservation——取消一条预定
    参数:预定id(rid xsd:int)
    返回值:状态字串(xsd:string)
  6. inquiryReservation——查询某用户的预定
    参数:联系方式contact(xsd:string)
    返回值:一组预订记录(tns:Reservation)
    说明:返回值为自定义的复杂类型
  7. deleteReservation——删除预定
    参数:要删除的预定id组合rids(xsd:string)
    返回值:操作状态(xsd:int)
    说明:可一次删除多条预定
    三. 服务部署与客户端调用
    Demo的服务端最初由PHP脚本形式呈现,通过调用NuSOAP库将其封装并发布成WSDL。
    Demo的客户端采用网页的方式呈现,借用html/css/js技术进行设计,提供“订餐”和“取消订餐”等功能的前台操作界面。
    用户的请求通过ajax传递给后台上的一个中转服务脚本hub,该服务根据请求类型调用相应的web service,并将服务调用结果传递给前台。
    为了更加真实的模拟web service工作过程,本Demo将“DinnerB应用”和“Web Service服务中心”开发成两个独立的应用,并分别部署到不同的机器上,主要示意图如下:

图1 应用架构简略示意图
四、运行结果截图和文字说明

    1. 客户端登陆
      在浏览器中输入DinnerB应用的网址http://127.0.0.1/dinnerb,来到订餐前台,在主体区域的左侧可以找到主要的功能菜单:
    2. 订餐
      1. 点击“我要订餐”开始订餐的第一步(共两步),根据提示输入必要信息(带*的项目):就餐日期、就餐人数以及验证码;
      2. 验证无误后提交,中转服务会收集参数(就餐日期和人数),调用availableTable服务,如果有空余的餐桌,该服务会为用户创建一条“临时预约记录”,并返回该记录id。中转服务首先注册session,存放id,然后返回处理成功信息,并通知前台跳转至下一步页面“填写联系方式”,如图3。若因各种原因导致无法成功订餐(参数不合法或者没有空余餐桌),前台都将提示相应的“订餐失败”信息,如图4中因为就餐人数不符合系统要求导致订餐失败;


图2 DinnerB首页

      1. 需要说明的是,“就餐日期”中的日期选项是页面加载期间调用availableDinnerDate计算出的正确可订餐日期,这样控制了用户的可出错范围。


图3 有空余座位 图4 订餐失败

  1. 第二步,用户要在规定时间内填写其联系信息(称谓和联系方式,其中称谓选填),点提交,中转服务调用addContact为之前建立的临时记录补充客户联系信息,成功后返回用户编号(图5),用户在就餐时提供该编号,即可查询到预定的餐桌号(这是设想,本Demo暂时没添加就餐应用)。如因各种原因导致订餐失败(超时或者联系方式不正确),整个订餐过程都将停止,临时记录也会被删除,如图6和图7。


图5 订餐成功


图6 联系信息不正确


图7 填写信息超时

  1. 说明:由于订餐过程分两步进行,为了防止用户在两步之间人为地耽误过长时间,占用餐桌资源,因此设计出“临时记录”+“有效时间”机制,超时后,系统会自动终止订餐过程,并删除临时记录。

3. 取消订餐

A.点击“取消订餐”,填写订餐时提供的联系方式,提交(如图8)。中转服务调用inquiryReservation查询该用户所有的预约,成功的话,前台会列出该用户所有成功的预约,如图9;

B. 用户选择要取消的订餐选项(可多选),提交后,中转服务会调用deleteReservation删除对应的预约记录,取消订餐成功。为了安全考虑,该页面具有一次性属性,切换菜单或者删除不成功都无法重新回到该页面。

图8 取消订餐——填写联系方式

图8 订餐记录 图9 选择要取消的订餐记录

五、总结

WSDL为web服务提供了详细的接口说明,实现了服务的可阅读性,方便了服务的传播。在此之前,自己一直是一个web站点开发者,自己写服务自己调用,无法体会服务传播中的问题。

大作业给了一个加深WSDL理解的机会,由于自己在web方面的技术积累,做起来可谓是轻松加愉快。于是重点都放在了对WSDL具体实现的学习上。非常要感谢前人做的工作,NuSOAP库使得自己不用再担心去操作WSDL语言,而可以坐等自己的服务被翻译成WSDL接口文件。

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值