您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 酒店餐饮 > 酒店点餐系统3-厨师终端模块设计
12009-2010学年第二学期专业:计算机科学与技术班级:071011班题目:酒店点餐系统成员:姓名分工邓军成员任务分配、软件设计、软件调试靳鹏界面美化、成果汇报王锐强系统分析、数据库设计王隽捷系统分析、软件测试边金虎数据录入、软件测试赵佳欢数据录入、软件测试管理信息系统—系统设计报告2厨师终端模块设计1、任务分配......................................................................................32、厨师终端模块..............................................................................73、出勤管理模块..............................................................................94、任务管理模块(CTaskManager)..........................................105、通信模块....................................................................................156、资源对话框对照说明................................................................1531、任务分配本模块重点在任务分配上,从公平的角度,采取“先来先服务”原则更为适合,但是顾客在点菜时可能出现指定了某个厨师做某道菜的情况,所以本系统针对未指定厨师的情况设计了一个非指定队列用于保存未指定做菜厨师的任务信息,同时为每个厨师添加了一个指定队列用于存放指定其要做的任务信息。为了更好的分配任务,本系统将厨师分为三种状态:全空闲、半空闲、忙。全空闲,指没有正在做的任务,其指定队列也为空;半空闲,指没有正在进行的任务,但是其指定队列不为空;忙,指有正在进行的任务。任务分配分两种情况,一是自动分配任务,二是非自动分配任务。自动分配,指每当有做菜任务到达时,先由系统根据现有厨师的状态分配任务,并在终端显示任务分配情况;非自动分配,指厨师在完成某菜品后,在终端输入其厨师编号后显示其下一任务信息。自动分配任务是为了避免在所有厨师都处于全空闲而有新任务到达时,厨师不能知道有任务到达的情况。自动分配任务流程图,如图1:4开始读取任务取出非指定队列的首任务给厨师A显示分配任务的详情取出厨师B的指定队列的首任务给厨师B取出非指定队列的首任务给厨师B结束非指定队列非空?有完全空闲的厨师A?有半空闲的厨师B?非指定队列的首任务早于厨师B的指定队列的首任务?是是否否显示分配任务的详情是否是否非指定队列非空?是否任务自动分配流程图图15读取任务模块流程图,如图2:开始依据点菜时间和桌号检索点菜表,获取点菜记录集点菜记录集非空?读取记录信息该记录Cookid字段为NONE?将该记录添加到临时队列将该记录添加到相应厨师的指定队列移动到下一条记录移动到首记录记录未到记录集尾?结束是是否是否否读取任务流程图图26非自动任务分配流程图,如图3:开始获取厨师编号厨师队列有该厨师?该厨师先前有任务?向顾客终端发送完成消息设置厨师状态为半空闲该厨师为完全空闲状态?该厨师的指定队列非空?设置厨师状态为全空闲非指定队列非空?将非指定队列的首任务分配给该厨师,设置其状态为忙非指定队列非空?非指定队列首任务早于该厨师指定队列首任务?分配非指定队列首任务给该厨师分配其指定队列首任务给该厨师设置厨师状态为忙厨师状态为忙状态?显示任务分配情况通知厨师无后续任务结束是是是否是是否是是否是显示厨师不存在信息否结束否否否否厨师任务非自动分配流程图图372、厨师终端模块1)向项目添加Dialog资源,其ID设置为IDD_COOKTERMINAL_DIALOG,修改其属性“Caption”为“厨师终端”。具体设计如图4:图42)向对话框资源添加1个StaticText、1个Button和1个EditBox,其属性设置如表1:表1IDPropertiesMemberVariablesTypesMemberIDC_COOKID默认CStringm_CookID3)初始化终端,首先得到厨师的出勤情况,然后根据出勤创建厨师队列,最后初始化网络连接,启动定时重连以确保网络通畅。m_TaskMan负责任务分配:CAttendanceManagementDlgAMDlg;//弹出出勤管理对话框if(AMDlg.DoModal()==IDOK)m_TaskMan.CreateCookQueue();//创建厨师队列ConnectInit();//连接管理系统服务器//连接服务器GetPrivateProfileString(ServerIP,IP,127.0.0.1,m_SerIP.GetBuffer(20),20,.\\default.ini);m_SerIP.ReleaseBuffer();m_SerPort=GetPrivateProfileInt(ServerIP,PORT,8880,.\\default.ini);BOOLbRet=m_Socket.Connect(m_SerIP,m_SerPort);intnNum=0;while(!bRet){nNum++;bRet=m_Socket.Connect(m_SerIP,m_SerPort);if(nNum20){MessageBox(_T(连接服务器超时,系统将自动进行连接!),_T(友情提示));break;}8}//发送连接消息if(bRet==TRUE){CMessageMsg;Msg.CreateMsg(OSM_CONNECT,OST_COOK|0x0001,OST_SERVER|0x0001);m_Socket.Send(&Msg,sizeof(CMessage));}//启动定时重连m_ReconnectNum=0;SetTimer(1,2000,NULL);if(theApp.m_SDlg.GetSafeHwnd()!=NULL){AnimateWindow(theApp.m_SDlg.m_hWnd,2000,AW_HIDE|AW_CENTER|AW_BLEND);theApp.m_SDlg.DestroyWindow();}4)自动分配任务操作://自动分配任务voidCCookTerminalDlg::AutoTaskAssign(intdeskid,char*dishedtime){m_TaskMan.AutoAssignTask(deskid,dishedtime);}5)非自动分配任务操作,厨师完成某菜品后在终端输入其编号,任务管理器向其返回分配结果:voidCCookTerminalDlg::OnOK(){if(CheckInput()==TRUE){m_TaskMan.AssignTaskToCook(m_CookID.GetBuffer(0));m_CookID.ReleaseBuffer();}((CEdit*)GetDlgItem(IDC_COOKID))-SetWindowText(_T(COOK));//将光标移动到编辑框中字符结尾处((CEdit*)GetDlgItem(IDC_COOKID))-SetSel(-1);((CEdit*)GetDlgItem(IDC_COOKID))-SetFocus();}6)网络重连操作://重连管理voidCCookTerminalDlg::OnTimer(UINTnIDEvent){if(nIDEvent==1){//连接测试CMessageMsg;Msg.CreateMsg(OSM_TEST,OST_COOK|0x0001,OST_SERVER|0x0001);m_Socket.Send(&Msg,sizeof(CMessage));if(m_ReconnectNum4){//4*2秒种没有收到服务器发来的信息,表示已经断线9m_ReconnectNum=0;//重新连接服务器ConnectInit();if(m_Socket.Connect(m_SerIP,m_SerPort)==TRUE){Msg.CreateMsg(OSM_CONNECT,OST_COOK|0x0001,OST_SERVER|0x0001);m_Socket.Send(&Msg,sizeof(CMessage));}}else{m_ReconnectNum++;}}CDialog::OnTimer(nIDEvent);}3、出勤管理模块1)向项目添加Dialog资源,其ID设置为IDD_ATTENDANCE_MANAGEMENT_DIALOG,其属性“Caption”设置为“出勤管理”。设计如图5:图52)向对话框中1个CheckBox、1个Button、1个ListControl,设置其属性如表:IDPropertiesMemberVariablesTypesMemberIDC_ATTENDANCE_LISTView:ReportCListCtrlm_AttendanceList3)初始化列表内容://初始化列表项voidCAttendanceManagementDlg::InitListData()10{CStringselected,cookid,cookname;introw,i=0;selected.Format(SELECTcookid,LEFT(cookname,LEN(cookname))ascooknameFROMCookTable);if(theApp.m_DbOp.OpenRecordset(selected)==FALSE)//数据库打开失败,则返回return;if(theApp.m_DbOp.MoveFirst()==FALSE)return;do{cookid=theApp.m_DbOp.GetAttrValues(cookid);cookname=theApp.m_DbOp.GetAttrValues(cookname);if(cookid.Left(4)==NONE)//为空的行,则不显示continue;row=m_AttendanceList.InsertItem(i++,cookid);m_AttendanceList.SetItemText(row,1,cookname);}while(theApp.m_DbOp.MoveNext());}4)记录厨师在岗情况://记录厨师在岗情况voidCAttendanceManagementDlg::CookDuty(){CStringupdated;CStringcookid;for(inti=0;im_AttendanceList.GetItemCount();i++){cookid=m_AttendanceList.GetItemText(i,0);if(m_AttendanceList.GetCheck(i))//在岗updated.Format(UPDATECookTableSETduty=1WHEREcookid='%s',cookid);else//未在岗updated.Format(UPDATECookTableSETduty=0WHEREcookid='%s',cookid);theApp.m_DbOp.UpdateItem(updated);}}4、任务管理模块(CTaskManager)1)任务分配结构:#defineCS_BUSY1/*忙*/#defineCS_FREE2/*全空闲*/#defineCS_HALFFREE3/*半空闲*///任务结构体structTASK{11intdeskid;chardishtime[DISHED_TIME_LEN];chardish
本文标题:酒店点餐系统3-厨师终端模块设计
链接地址:https://www.777doc.com/doc-3585023 .html