《电子技术应用》
您所在的位置:首页 > 通信与网络 > 设计应用 > 基于C/S结构的小型餐饮管理系统设计与实现
基于C/S结构的小型餐饮管理系统设计与实现
来源:微型机与应用2013年第22期
王新宇
(南京旅游职业学院, 江苏 南京211100)
摘要: 为使酒店管理(信息工程)专业的学生掌握设计和实现旅游信息管理系统的方法,对酒店餐饮管理工作的业务流程进行了分析,并在此基础上设计了可供学生在管理信息系统设计课程中使用的餐饮管理系统设计方案。通过教学实践证明,该小型餐饮管理系统完全可以满足教学需求,并且具有一定的实用价值,可以在中小型酒店餐饮部使用。
Abstract:
Key words :

摘  要: 为使酒店管理(信息工程)专业的学生掌握设计和实现旅游信息管理系统的方法,对酒店餐饮管理工作的业务流程进行了分析,并在此基础上设计了可供学生在管理信息系统设计课程中使用的餐饮管理系统设计方案。通过教学实践证明,该小型餐饮管理系统完全可以满足教学需求,并且具有一定的实用价值,可以在中小型酒店餐饮部使用。
关键词:餐饮信息管理系统C/S模式;酒店信息管理

    现代酒店是指向各类旅游者提供食、宿、行、娱、购等综合服务,具有涉外性质的商业性的公共场所。餐饮部是酒店组织机构中的重要组成部分。餐饮部经营点多,管辖范围广,分工细,员工人数多(约占酒店员工的三分之一),人员文化程度和年龄层次差异大。要将这样一个复杂的部门管理好,必须建立合理有效的组织网络,并进行科学分工,明确职责,使各部门人员各司其职,以保证餐饮部的正常运转[1]。餐饮管理系统是餐饮部不可缺少的部分,它对酒店及餐饮部的管理者都至关重要。
    酒店管理信息系统一直是我院酒店信息管理专业学生的核心课程之一,但在这门课的项目实践过程中,只是让学生熟练使用某种酒店信息管理软件,其主要原因是成品酒店管理软件不可能提供源代码,故无法在代码的基础上进行讲解,而只能讲解一些软件设计基本理论,课程比较枯燥。对于酒店信息管理专业的学生来说,如果只是停留在简单的软件应用层次上,对于学生能力的培养显然是不够的,这个专业要求学生具备一定的软件开发能力,另外,学生在修完高级程序设计和数据库应用的课程后,也需要结合一个实际的小型信息管理系统,在源代码的基础上,对照源程序进行项目课程的实践学习。为此,本文对酒店餐饮管理工作的业务流程进行了分析,在此基础上,设计了可供学生在管理信息系统设计课程中使用的餐饮管理系统设计方案。通过教学实践证明,该小型餐饮管理系统完全可以满足教学需求,并且具有一定的实用价值,可以在中小型酒店餐饮部使用。
    目前软件开发的体系结构主要为C/S模式和B/S模式。在C/S模式中,客户机与服务器相连,客户端执行前台操作任务,负责用户交互、采集用户录入数据以及将数据传递给服务器;而服务器负责接收客户端传来的数据,并对数据进行处理,访问数据库,处理客户端的操作要求。在B/S模式中,用浏览器代替了客户端程序,与传统的C/S 模式不同,浏览器不直接与数据库相连,而是增加了中间层,浏览器通过中间层服务器与数据库服务器相连。
    基于B/S模式的应用程序在过去几年非常流行[2-3],因其把所有的应用程序都放在一个服务器上,便于管理和维护,软件升级也十分方便,但缺点是它们不能提供丰富的用户交互功能,对于一些非常复杂的“重型”应用程序,用B/S模式有些不方便,一般倾向于用C/S模式。根据餐饮管理业务的特点,本系统采用了C/S模式。
1 系统功能设计
    (1)桌台基本信息
    该模块用于设置、保存所有桌台的信息,包括桌台名称、桌台位置、桌台状态、桌台类型等信息。
    (2)桌台状态
    该模块实际上显示的是餐饮桌态图(类似于酒店客房部的“房态图”[3-4]),可以使用餐厅平面布局图的形式显示桌态,操作员根据不同的图标状态,可以观察到某桌是否可用,确定可用后,即可直接在图上选定餐桌进行开台作业,如图1所示。

    (4)点单
    如图3所示,在开台结束后进行“点单”操作,操作员记录客人所需的菜名和数量,然后保存到数据库,相关数据供结账时使用。
    (5)结帐
 图4为客人就餐结束后结账的设计界面。收银员列出清单供客人核对,客人确认后,录入支付的金额,计算所付款是否需要找零,提示找零数量。

    (6)职员信息
    该模块可以输入和查询桌台服务生的基本情况,主要包括员工代码、姓名、性别、联系电话等基本信息。
    (7)消费查询
    主要为客人提供消费查询,并可打印出消费清单。
    (8)菜肴设置
    该模块用于增加、设置、保存所有可提供的菜肴信息。
    (9)系统设置
    设置系统用户的不同权限、备份数据库等。
    (10)报表
    提供营业收入日报表(部门)、营业收入汇总表、营业收入汇总明细表、营业明细表(组)、缴款明细表(班)、缴款汇总表、日客流量分析表、日营业报表、当日交款表、账项明细表、各站点收银报表、营业汇总表、成本分析报表、折扣一览表等,供主管核对。
2 数据库管理系统的选择
   在开发管理信息系统的应用程序时,对数据库的操作是必不可少的,所以先要选择一个合适的数据库管理系统产品。对于学校来说,选用的数据库最好是免费的,这样可以节约学校的经费。本系统选用了MySQL作为数据库,MySQL是使用最广泛的开源数据库系统,其突出的优点包括[3,5]:
 (1)适用面广,可在多种操作系统上运行。
 (2)性能优异,运行稳定。使用MySQL的成功案例很多,另外MySQL对硬件性能的要求也不苛刻,完全可以在一般的教师机上运行。
 (3)性价比高。MySQL是一个开源软件产品,一般非商业项目使用MySQL数据库,均可以免费使用。
3 前台开发语言
    前台开发工具选用微软的C#,选用C#的原因主要有[2,5-6]:
    (1)C#是一种相当新的编程语言,吸取了C++、JAVA等语言的优点,并摈弃了它们的缺点,是微软多年来最重要的新技术之一,不但可以开发C/S模式的程序,也可以方便地开发B/S模式的程序[7]。
    (2)近年来,开源开发环境MonoDevlop可以很方便地把C#从Windows下移植到Linux等平台,实现了跨平台应用。今后如有需要,该餐饮管理系统可以移植到Linux平台。
    (3)本酒店信息专业的高级程序设计课程采用C#
语言作为教学语言,通过一个学期的学习,学生可以用C#编写一些简单的程序,在掌握了C#语言的基础上,使用C#作为前台开发工具可以节省学习的时间。
    (4)从经济方面考虑,因为微软为使用C#的学生们提供学习版的C#(Visual C# Express),可以免费使用,另外,MonoDevlop和SharpDevlop也可以免费获得,这样可以节约一大笔经费,同时还可以使用正版的开发软件,既经济又实惠。
4 关键技术
4.1 树型菜单的实现

     设数据库有两张表:tb_dishbaseinfo(菜肴基本信息表)和tb_dishtype(菜肴类型表),分别如表1、表2所示。
    其中,表2中的DishTypeName字段,可以是冷盘、锅仔、汤羹、饮料、酒等名称。


  算法思想是:
  (1)先执行SQL语句,读取菜肴基本信息表和菜肴类型表,通过内连接,得到菜肴编号、菜肴名称、菜肴类型名称,并将数据放入数据集,供前台程序处理。
     (2)生成一个树节点,先令其为空,用于显示菜肴信息的控件为TreeView控件(命名为tvfood)。然后对从数据库中读取的数据集进行循环处理:判断当前的菜肴类型,如果tvfood树节点中没有该类型,则新添加一个根节点(菜肴类型),并在新的根节点下增加子节点(菜肴名称);如有该类型,则无需建立新根节点,直接在当前根节点下增加子节点。
    树型菜单实现代码如下:
     string sqlstr = "select tb_dishbaseinfo.dishid,tb_dishbaseinfo.dishname,"+
          "tb_dishtype.dishtypename"+
          " from tb_dishbaseinfo join tb_dishtype on tb_dishbaseinfo.dishtypeID"+
          "=tb_dishtype.dishtypeid";
     string temp="";
  TreeNode newnode=null;
  tvfood.Nodes.Clear();
  MySqlConnection conn =MySqlCon();
  conn.Open();
  MySqlCommand cmd = new MySqlCommand(sqlstr,conn);
  MySqlDataReader rdb = cmd.ExecuteReader();
  while(rdb.Read()){
        if(temp!=rdb["dishtypename"].ToString()){
             temp=rdb["dishtypename"].ToString();
             newnode = tvfood.Nodes.Add(temp);
             newnode.Nodes.Add(rdb["dishID"].ToString(),rdb
                ["dishname"].ToString());
           }
              else
        newnode.Nodes.Add(rdb["dishID"].ToString(), rdb
                ["dishname"].ToString());
   }
     cmd.Dispose();
     rdb.Dispose();
     conn.Dispose();
4.2 存储过程
 前台程序访问数据库时,如果是简单的业务操作,尽量利用一条SQL语句完成;如果是需要多条SQL语句的比较复杂的业务操作,一般认为要通过MySQL的存储过程来完成,以提高效率[3,5]。存储过程SP(Stored Procedure)是由一些直接存储和执行的定制过程或函数组成,有了存储过程就可以实现复杂的SQL操作,从而可以完成单条(或少量几条)SQL语句无法完成的业务操作。存储过程集中完成多条SQL语句,在数据库端直接执行完成,可以节省数据在网络上反复传输的时间,从而获得更快的速度,提高业务处理效率。另外,存储过程可以实现数据库回滚等操作,提高了数据的安全性和程序的健壮性。餐饮管理系统中有不少复杂的业务,有些操作在失败的情况下需要进行回滚操作,故本系统在数据库设计时引入存储过程。
    例如,清空当天的营业数据,并将其复制到历史表的存储过程代码如下:
    CREATE DEFINER=′root′@′localhost′PROCEDURE

          ′SP_Clear′(out v_msg varchar(1))
     BEGIN
         declare v_error integer default 0;
         declare continue handler for sqlexception set v_error=1;
         set autocommit = 0;
         start transaction;
         insert into tb_history_bill select * from tb_bill;
         delete from tb_bill;
         if v_error = 1 then
            rollback;
          else
              commit;
         end if;  
         set autocommit = 1;
     END;
    本文根据小型餐饮店的实际情况,从教学的需要出发,设计并实现了基于C/S架构的餐饮管理系统。整个系统实现了餐饮业务流程过程中的基本功能,达到设计目的。结合源代码讲解旅游管理信息系统,提高了学生的学习兴趣;学生自己动手编程,又进一步锻炼了编程能力。投入课堂教学4年以来,教学效果良好。
    如今平板电脑等移动设备逐渐用于前台点菜,而本文中的餐饮管理系统不支持移动设备,所以,今后需要进一步研究在本系统中增加移动设备远程点菜的功能。
参考文献
[1] 郭敏文.餐饮部运行与管理[M].北京:旅游教育出版社,2005.
[2] NAGEL C, EVJEN B, GLYNN J. C#高级编程[M].李铭,译.北京:清华大学出版社,2006.
[3] 王新宇,陈婕. 基于工作过程的“旅游管理软件开发技术”课程教学设计——以“小型客房管理系统”学习情境
设计为例[J].电子商务,2012(7):78-80.
[4] 陈婕. 酒店管理信息系统中“房态图”的设计和实现[J].软件导刊,2011,10(11):122-124.
[5] KOFLER M. MySQL 5权威指南[M].北京:人民邮电出版社,2008.
[6] 唐政.C#项目开发全程实录[M]. 北京:清华大学出版社,2008.
[7] 李丹,曹小佳.电子病历信息管理系统的设计与实现[J].微型机与应用, 2013,32(1):11-13.

此内容为AET网站原创,未经授权禁止转载。