收藏 分销(赏)

软件工程-餐厅管理系统设计报告.doc

上传人:w****g 文档编号:3529249 上传时间:2024-07-08 格式:DOC 页数:27 大小:242KB
下载 相关 举报
软件工程-餐厅管理系统设计报告.doc_第1页
第1页 / 共27页
软件工程-餐厅管理系统设计报告.doc_第2页
第2页 / 共27页
软件工程-餐厅管理系统设计报告.doc_第3页
第3页 / 共27页
软件工程-餐厅管理系统设计报告.doc_第4页
第4页 / 共27页
软件工程-餐厅管理系统设计报告.doc_第5页
第5页 / 共27页
点击查看更多>>
资源描述

1、 题 目:软件工程餐厅管理设计报告目 录1绪 论第一章 需求分析31.1 设计任务31.2设计目标41.3 要达到的技术要求4第二章 总体设计62.1 软件结构图62.2 服务与处理的数据结构设计72.3 安全设计8第三章 数据库设计9 3.1 总体设计9 3.1.1概念结构设计9 3.2逻辑结构设计11 3.3物理结构设计11第四章 详细设计12第五章 编 码155.1 包房信息模块功能编码155.1.1查询功能155.1.2添加功能165.1.3修改功能165.1.4删除功能175.2 结账信息模块功能编码175.2.1 连接到账单表功能175.2.2 消费金额计算显示功能185.2.3

2、退台功能18第六章 测试19设计总结20学习体会21致谢22参考文献23绪 论随着我国市场经济的快速发展,餐饮业的发展日新月异,近两年来已呈现出高速发展的态势。但在快速发展的同时,餐饮业在日常经营管理中仍普遍采用手工管理方式,整体科技含量低。随着餐饮企业规模和数量的不断增长,手工管理模式无论是在工作效率、人员成本还是提供决策信息方面都已难以适应现代化经营管理的要求,因此制约了整个餐饮业的规模化发展和整体服务水平的提升。有效的管理成为了一个难题,为能有效的解决这些问题提高企业的经济效益,在这些中小型饭店中采用工作流技术,结合饭店绿色管理内容,实施计算机管理信息系统视为一条有效的解决途径。本系统是

3、为了有效解决现行系统中手工运作所面临的工作量大、数据传递不及时、数据统计和计算易发生差错等造成餐饮管理效率低的种种问题,提供一个检索迅速、查找方便、存储量大、成本低的优势,从而大大提高信息管理的效率,促进餐饮行业健康、完善、稳步发展。在人力与设备费用的节省方面,系统采用人机交互的方式,界面美观友好,信息查询灵活、方便,数据存储安全可靠。控制精度或生产能力的提高方面对用户输入的数据,进行严格的数据检验,尽可能的避免人为错误。在管理信息服务的改进方面实现对消费的历史记录进行查询。系统应最大限度地实现易维护性和易操作性。实现对餐厅顾客开台、点菜/加菜、账目查询和结账等操作。 因此本项目应实现系统人机

4、交互的方式,使界面美观友好,信息查询灵活、方便,数据存储安全可靠,功能齐全。如菜品的增删,价格的改变、桌台的增删、人员的流动,还能很好的管理顾客的点菜、查询消费记录、结账,改善传统意义上的管理,使管理变得方便并且有效。 我们设计的人间使用c+builder6.0编写程序,建造窗口,美化界面,改进操作,是软件和数据库完美结合。旨在达到技术和操作两方面的要求。技术方面,做全面细致的用户需求分析,明确所要开发的软件应具有的功能、性能与界面,使系统分析人员及软件开发人员能清楚地了解用户的需求,并在此基础上做出界面美观 ,人机交互能力强,满足用户需求的软件。操作方面,人机交互能力强,界面友好,操作方便。

5、第一章 需求分析1.1 设计任务 完成以下功能要求:前台营业:日常营业操作日始日结:设定每个营业日的开始和结束接待预订:显示房台状态,进行房台预订点菜收银:开台、点菜、结帐、交班,提供最主要的营业功能营业设置:日常营业所必需的数据库设定酒菜设置:按类别(酒水饮料、凉菜、热菜、主食、包桌、服务用品等)设置酒菜数据房台设置:类别设置包房或餐台其他设置:付款方式(现金、银行卡、赠券、挂账、免单)、点菜说明等营业分析:对营业数据进行统计分析、打印报表销售分析:营业总况、收入金额房台分析:按房台统计分析营业情况酒菜分析:各种酒菜的详细销售情况统计操作分析:统计分析服务员的营业情况业绩分析:统计分析提成服

6、务员的销售业绩和提成金额财务查询:查询各类单据和消费情况帐单查询:查询所有已结帐单点单查询:查询所有历史点单挂帐查询:查询挂帐(签单)客人消费情况辅助管理:日常营业所需的其他管理功能操作员管理:管理操作员信息,并设置系统操作权限和最低折扣值挂帐管理:挂帐人信息录入、修改、挂帐归还1.2设计目标(1)支持日常业务运作。(2)集中管理业务数据,支持管理预测与决策。(3)有良好的可扩充性(系统配置灵活,支持用户未来信息化进程的发展)。(4)汉字图形用户界面,人机对话友好,操作方便。(5)响应速度合理,安全性较高(对折扣、退菜、赠送、优惠操作提供权限校验,并有记录备查。数据库安全中支持前后台双数据库管

7、理),网络运行稳定。(6)系统建设费用较低。1.3 要达到的技术要求(1)功能:该系统可以帮助餐饮企业处理日常工作业务,规范管理工作和操作流程,是餐饮行业的得力助手。可以帮助管理者们边工作、边了解企业经营状况,为经营者提供决策分析的数据;可以杜绝内部管理的漏洞和避免人为错误给企业造成损失;可以为顾客提供全方位满意的服务;可以为顾客提供正规、精美、具有企业特色的结帐单;可以保证企业营业额数目的准确;可以了解常客的不同消费习惯和消费历史信息;可以知道畅销菜品和不受欢迎菜品;同时还能建立全方位的管理模式。(2)输入/输出:条形码英文和汉字输入,英文和汉字输出(3)性能:稳定快速,实时控制。本系统属于

8、小型的餐饮管理系统,可以有效地对中小型餐厅消费进行管理。本研究报告结合公司对餐饮业的实地调查所得出的许多数据,对餐饮业的发展概况和现状、投资特性、行业发展预测等进行详细的分析,并重点对本行业及市场竞争格局做了具体的剖析。(4)安全与保密要求:不能轻易被破坏,不能让管理人员以外的人删改餐饮等信息,对断电、死机、系统崩溃等问题有有力措施以保障数据不受损失。该系统包含有密码装置来实现基本密码操作。在系统功能中通过身份鉴别分别授予经理与员工不同的权限。它是为增强普通关系数据库管理系统的安全性而设计的。该系统中通过基本设置实现了数据库数据存储等的完整性要求。第二章 总体设计2.1 软件结构图图21 餐饮

9、管理软件功能结构图2.2 服务与处理的数据结构设计图22 餐饮管理系统的业务流程图2.3 安全设计本系统考虑到了安全方面的问题,因此,设置了系统的登录权限,工作人员分经理和员工,并且每个工作人员进入界面都有自己的登录名和密码,只有用户名和密码一致,才能进入系统。不同职位的人员有着不同的负责部分,进入到不同的界面,只能在自己的界面上进行业务,比如增、删、改信息。员工只负责日常服务工作,不可以对员工信息和房间信息性进行访问和修。经理权限要大一些,可以对员工信息和房间信息性进行访问和修。 第三章 数据库设计3.1 总体设计在此系统中,本人主要负责包房信息管理,结账功能管理两个模块。在此,针对这两个功

10、能模块所涉及到得有关数据库设计过程作一下描述。3.1.1概念结构设计(1)总体ER模型设计 图31 各实体及其联系图1、房间和顾客之间是使用关系; 供房间可以供不同的顾客所使用,顾客也可是选择不同的包房使用,所以是多对多的对应关系。2、 顾客与账单之间是付账的关系; 一张账单只对应固定的消费顾客,所以他们之间是一对一的对应关系。且只有在进行付账过程中才有付款方式的选择和找零,所以这两个属性应该在对应关系上标出。3、 房间与账单的之间是对应关系; 房间在不同顾客使用过程中,对应不同的账单;而账单可以来自不同的房间,所以两者之间是多对多的关系。(2) 部分ER模型设计图32 房间实体及属性图房间必

11、须有以一个房间号和所能容纳的顾客人数,在实际使用中需要有一个属性来表示房间是否已经被使用,根据房间具有不同的大、中、小包需要给出房间类型属性,还有专门的员工对某一房间进行管理,在添加管理员工号这一属性。便构成了如图所示的结构。 图33 账单实体及属性图 账单通常是都有一个账单号的,账单需要显示顾客所选用的菜名以及数量,并标明是那个房间号。便需要以上的个属性。3.2逻辑结构设计将概念模型转换为逻辑结构,给出关系模式:此为房间实体对应的关系模式: 房间(房间号,状态,容量,房间类型,管理员工号)此为账单实体对应的关系模式。 账单(账单号,菜名,点菜数量,房间号)3.3物理结构设计将逻辑结构转化为物

12、理结构,根据ER图和逻辑结构设计,可以创建数据表。表31 房间信息表字段名称数据类型长度可否为空约束条件说明roomidint4NOT NULL主键房间号stateint4NULL无状态capacityint10NULL无容量roomkindchar10NULL无房间类型chiefint4NULL无管理员工号 表32 账单信息表字段名称数据类型长度可否为空约束条件说明billidint8NOT NULL主键账单号dishidchar10NULL无菜名dishamountint4NULL无点菜数量roomidchar10NULL无房间号第四章 详细设计4.1 包房信息模块图 41 房间信息功能结

13、构4.1.1 模块设计:运用c+builder6.0进行可视化页面的设计,并且连接数据库,在数据库中建立包房信息的数据库。数据库中包含房间信息表,表中有roomid(房间号),state(房间状态),capacity(房间容纳人次),roomkind(房间类型)和chief(负责员工号)五项属性。 4.1.2 功能描述:具体功能描述如下:1) 按房间类型查询:通过对房间类型的查询,查看某类房间的使用情况,方便员工和顾客选择房间和了解房间使用情况。如:顾客光临的时候,根据顾客人数的多少,选择合适的房间类型后,通过按类型查询,查看该类房间的使用情况,了解是否还有空余的房间。2) 按房间号查询:通过

14、对某一房间号查询到具体房间,了解该房间此时的使用情况。方便餐厅工作人员了解具体房间的使用情况,对给该房间的开放时间,到目前的使用时间,负责房间的员工等信息直观显示。如:顾客结账时,查看该房间是在什么时间开始使用的,到结账时间位置,总共消费使用了多长时间和负责该房间服务员工的员工号是多少,据此找到是负责该房间的员工。3) 删除房间和增加房间:此项主要是考虑到在具体的实际生活中,餐厅的中房间,可能会因为某种原因不能使用和在问题接触后重新恢复使用,或者餐厅扩大规模,缩小规模的实际情况。如:房间需要重新装修,或者由于设施等反面的原因在一段时间内,该房间不能使用,置于停止使用状态,为了能够在平日的工作中

15、直观的表现出来,将把此房间从数据库中暂时删除掉。便用到了此项操作,这样在日常的营业中,进行相关操作时便不会出现该房间的任何信息,避免将此房间开出而不能使用的尴尬局面。在暂停使用的房间重新开始使用,或者是餐厅扩大规模,增加了新的房间时。就需要恢复数据库信息或者修改增加数据库中的信息。这就用到了增加房间的操作。4) 修改房间信息:在实际的工作中,房间的相关信息并不是一成不变的,所以就需要对房间的相关信息进行及时的修改,以保证信息的正确性。如:由于员工的变动,本来负责某一房间的员工告假,就需要安排新的员工负责该房间。或者,由于员工的辞职离去,招聘了新的员工进入,在员工数据库信息发生变动的同时,间接的

16、影响到了房间信息数据库的异常。此时,就需要根据具体情况,对包房信息数据库进行相应的修改。4.1.3界面设计:利用c+builder6.0自动生成的界面,进行添加所需要的项目框,构成实际操作中所需要的功能栏。然后通过数据库连接连接到相应的数据库信息。在然后通过程序代码的编写,就可以实现通过在界面的相应操作框中输入正确的信息,进行查询,增加,删除和修改,以及显示的具体操作了。 4.2 结账信息管理 图42 结账模块功能结构此模块与包房信息模块虽然在某些功能上不同,但是在实现界面设计和实现方式上是基本相同,类似的。在此仅对功能进行简要的描述。4.1.1 功能描述:具体功能如下:1) 连接包房表:通过

17、连接包房表,找到顾客消费时使用的包房编号,包房类型;2) 连接账单表:连接到账单,显示所选择的菜品和数量;3) 结账方式选择:此程序系统为顾客提供了多种支付方式供选择,并且直接在营业额显示中按不同的支付方式总额的比例;4) 退台:将使用完毕的包房重新在前台包房信息中恢复显示,供前台服务员安排包房的使用。第五章 编 码5.1 包房信息模块功能编码5.1.1查询功能 1)显示包房全部信息:TForm1 *Form1;/-_fastcall TForm1:TForm1(TComponent* Owner) : TForm(Owner)/-void _fastcall TForm1:Button14C

18、lick(TObject *Sender) if(Edit11-Text!=) String mysql=select roomid 餐桌代码,capacity 可容人数,chief 负责编号,name 负责人姓名,roomkind 包间类型 from Room,Staff where chief=id and roomkind=+Edit11-Text+ ; ADOQuery1-Active=false; ADOQuery1-SQL-Clear(); ADOQuery1-SQL-Add(mysql); ADOQuery1-Open(); if(Edit11-Text=) String mys

19、ql=select roomid 餐桌代码,capacity 可容人数,chief 负责编号,name 负责人姓名,roomkind 包间类型 from Room,Staff where chief=id ; ADOQuery1-Active=false; ADOQuery1-SQL-Clear(); ADOQuery1-SQL-Add(mysql); ADOQuery1-Open(); 5.1.2添加功能void _fastcall TForm1:Button1Click(TObject *Sender) ADOQuery1-Insert() ; ADOQuery1-FieldByName(

20、餐桌代码)-Value=Edit1-Text ; ADOQuery1-FieldByName(可容人数)-Value=Edit2-Text ; ADOQuery1-FieldByName(负责编号)-Value=Edit3-Text ; ADOQuery1-FieldByName(包间类型)-Value=Edit4-Text ; ADOQuery1-Post() ;5.1.3修改功能void _fastcall TForm1:Button2Click(TObject *Sender) /1 得到用户输入的新值 String newValue=Edit1-Text; /第二步 向TADOTabl

21、e组件发出编辑的请求 ADOQuery1-Edit(); /给字段赋值 ADOQuery1-FieldByName(餐桌代码)-Value=newValue; /第四步 提交更改 ADOQuery1-Post(); /1 得到用户输入的新值 String newValue2=Edit2-Text; /第二步 向TADOTable组件发出编辑的请求 ADOQuery1-Edit(); /给字段赋值 ADOQuery1-FieldByName(可容人数)-Value=newValue2; /第四步 提交更改 ADOQuery1-Post(); /1 得到用户输入的新值 String newValu

22、e3=Edit3-Text; /第二步 向TADOTable组件发出编辑的请求 ADOQuery1-Edit(); /给字段赋值 ADOQuery1-FieldByName(负责编号)-Value=newValue3; /第四步 提交更改 ADOQuery1-Post(); /1 得到用户输入的新值 String newValue4=Edit4-Text; /第二步 向TADOTable组件发出编辑的请求 ADOQuery1-Edit(); /给字段赋值 ADOQuery1-FieldByName(包间类型)-Value=newValue4; /第四步 提交更改 ADOQuery1-Post(

23、); String mysql=select roomid 餐桌代码,capacity 可容人数,chief 负责编号,name 负责人姓名,roomkind 包间类型 from Room,Staff where chief=id ; ADOQuery1-Active=false; ADOQuery1-SQL-Clear(); ADOQuery1-SQL-Add(mysql); ADOQuery1-Open();5.1.4删除功能void _fastcall TForm1:Button3Click(TObject *Sender) Application-MessageBoxA(餐桌将被删除,

24、信息提示框); ADOQuery1-Delete() ;5.2 结账信息模块功能编码5.2.1 连接到账单表功能void _fastcall TForm_jiezhangxinxi:Button2Click(TObject *Sender) String mysql=select dish.dishid 菜品编号,dishname 菜品名称,dishamount 菜品数量 from dishs,dish where dishs.dishid=dish.dishid and roomid=+ComboBox2-Text+; ADOQuery1-Active=false; ADOQuery1-SQ

25、L-Clear(); ADOQuery1-SQL-Add(mysql); ADOQuery1-Open(); String mysqls=select distinct billid from dishs where roomid=+ComboBox2-Text+; ADOQuery4-Active=false; ADOQuery4-SQL-Clear(); ADOQuery4-SQL-Add(mysqls); ADOQuery4-Open(); AnsiString q=ADOQuery4-FieldByName(billid)-AsString; Edit5-Text=q; 5.2.2 消

26、费金额计算显示功能void _fastcall TForm_jiezhangxinxi:Button3Click(TObject *Sender) String mysql=select sum(uniteprice) a from dishs,dish where dishs.dishid=dish.dishid and roomid=+ComboBox2-Text+; ADOQuery4-Active=false; ADOQuery4-SQL-Clear(); ADOQuery4-SQL-Add(mysql); ADOQuery4-Open(); AnsiString s=ADOQuery

27、4-FieldByName(a)-AsString; Edit1-Text=s;5.2.3 退台功能void _fastcall TForm_jiezhangxinxi:Button1Click(TObject *Sender) String mysql=insert into consume(billid,money,roomid,chargerid,discount,payways) values(+Edit5-Text+,+Edit3-Text+,+ComboBox2-Text+,+ComboBox1-Text+,+Edit2-Text+,+k+); ADOQuery3-Active=f

28、alse; ADOQuery3-SQL-Add(mysql); ADOQuery3-ExecSQL(); Application-MessageBoxA(操作成功,信息提示框); mysql=update room set state=0 where roomid=+ComboBox2-Text+; ADOQuery3-Active=false; ADOQuery3-SQL-Clear(); ADOQuery3-SQL-Add(mysql); ADOQuery3-ExecSQL(); Form_yuangong-ADOQuery1-Close(); Form_yuangong-ADOQuery

29、1-Open(); mysql=delete from dishs where roomid=+ComboBox2-Text+; ADOQuery3-Active=false; ADOQuery3-SQL-Clear(); ADOQuery3-SQL-Add(mysql); ADOQuery3-ExecSQL(); Form_yuangong-ADOQuery1-Close(); Form_yuangong-ADOQuery1-Open(); this-Close() ;第六章 测试6.1包房信息管理模块:一、 查询功能:1 在“餐桌类型”输入框中,输入“中包”,点击“查询”,将在显示框中显示

30、出房间类型为“中包”的元组;2 在“负责人”输输入框中,输入“和平”,点击“查询”,将在显示框中显示出员工姓名为“和平”的元组;3 当输入的输入项不符合要求时,在显示框中出现空表,没有显示内容;二、 插入功能:在出现的对话框右侧,依次输入房间号为5,容纳人数为10,负责编号为123,包房类型大包后,点击“确定”,在显示框中便会立即出现新插入的数组5,10,123, ,大包;三、 删除功能:在对话框中直接输入房间号,便可以直接删除对应的房间元组; 出现的错误:再删除房间元组后,出现了产出异常,对应的管理员工的数据也被删除,在其他表中,涉及到该员工的信息元组都一并被删除了。 解决方案:经删除语句中

31、,将当初设计的“级联”修改为“限制”。四、 修改功能:如插入功能类似,在输入框中输入需要修改的信息,点击修改,然后点击确定,在显示框中便会立即显示出修改后的新数组信息。6.2结账功能模块:1 进入页面后,点击“房间号”输入框后的下拉菜单即可选择房间号码,在选中具体号码之后,便会在“账单号”输入框中自动显示,该房间的账单号;2点击查询后,在显示框中就会心输出账单信息;3点击“总金额”,便会在“折扣前总金额”显示出消费金额;设计总结 此餐厅管理系统历时多个多星期已基本完成了,实现了餐厅管理系统的基本功能,并具有友好的界面,操作简单方便,基本实现了前台管理、桌台信息的查询、开台信息、点菜、打印,报表

32、、收银、桌台信息管理、员工管理、菜单维护、消费查询和盈利信息查询等功能。在此餐厅管理系统中,我主要看重其中包房信息和点菜信息两个功能模块。一、架构模式及运行环境: 1 、系统采用当今流行的 C/S 结构和三层架构模式,支持 SQL Server 等大型数据库系统。 2 、在vs20008开发环境下,以C+builder为开发语言。二、系统特点: 1、 系统界面友好,在包房信息模块和点菜信息模块中能够以直接、清晰的界面显示所需要的信息,不显示对用户无用的信息; 2、操作简单,在界面上点击所要的操作,便可进入到具体的操作中;进行查询、修改时,只需按界面上的文字提示输入正确数据后,即可显示所需操作运

33、行后的信息; 3、功能齐全,在两个板块中的操作中基本上包括了实际生活中餐厅关于包房和点菜两个方面的全部所需内容;三、不足之处 1、在点菜信息模块中,进行需该操作时显示过于死板,不能满足高要求用户的显示和操作要求,在显示顾客点菜清单时,只能通过具体包房号一项属性进行查询,带有一定的局限性; 2、在显示一些信息时,需要按照固定要求输入关键字才能够查询,对于实际操作中是暂时无法满足用户的方便性需求的。学习体会通过为期一学期的软件工程设计学习,终于完成了餐厅管理系统的设计,其中运用到了SQL语句对数据库的编写,以及利用C+builder对可视化界面的设计和与数据库的连接等知识。让我们在实际的操作中,将

34、学过的理论知识在实践中得到了运用和巩固,并且面对陌生的知识,我们刻苦钻研,不断补充自己的课外知识,并将所学知识灵活运用,才使得程序能够圆满的完成。 我从中学到了很多东西。在理论知识方面,我感觉结实的基础是尤为重要的,只有掌握了坚实的理论知识基础后,才能够在具体的实际操作中得以发挥。没有理论知识作为低级,在简单的程序也是无法编写成功的;在实际操作中,我认识到了理论知识在实际操作中成功的实现,才是对自己知识掌握情况最好的证明。在实际操作中,我不断发现问题,不断改正问题,在反复的摸索中巩固理论知识,接触、了解新知识让自己的专业知识的得到了进一步的提高;此外,我还领会到,细节对一个从事计算机编程工作的

35、人是尤为的重要,细节常常是大家所容易忽略的、最容易出现错误的地方,而正是这些地方决定着我们这个整体程序的成功与否,正所谓,细节决定成功。在今后的学习中,我将会保持这种积极地状态,不断总结学习中遇到的问题和经验,不断吸取教训,并且虚心的向他人请教问题,不断进步,不断提高自己。希望在今后的学习中,取得更好的成绩。致谢感谢软件工程老师龙海老师为我们提供了这样一个好的机会,能让我们每个同学都能有完成此次课程设计的机会。并感谢相关课程老师,为我们提过许多的教导和知识,不辞辛苦的为我们服务,在此一并表示感谢,感谢你们对我的帮助和支持,谢谢!参考文献1 王珊 萨师煊数据库系统概论(第四版)北京高等教育出版社20062 郭睿志C# +SQL Server项目开发实践北京中国铁道出版社20073 John SharpVisual C#2005从入门到精通北京清华大学出版社20064飞狼 李春萌数据库管理与应用指南人民邮电出版社20055 西尔伯沙茨 杨冬青数据库系统概念机械工业出版社6 钱雪忠 李京数据库原理及应用北京邮电大学出版社THANKS !致力为企业和个人提供合同协议,策划案计划书,学习课件等等打造全网一站式需求欢迎您的下载,资料仅供参考

展开阅读全文
部分上传会员的收益排行 01、路***(¥15400+),02、曲****(¥15300+),
03、wei****016(¥13200+),04、大***流(¥12600+),
05、Fis****915(¥4200+),06、h****i(¥4100+),
07、Q**(¥3400+),08、自******点(¥2400+),
09、h*****x(¥1400+),10、c****e(¥1100+),
11、be*****ha(¥800+),12、13********8(¥800+)。
相似文档                                   自信AI助手自信AI助手
搜索标签

当前位置:首页 > 行业资料 > 酒店餐饮

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服