酒店点餐系统2系统管理模块设计.docx
- 文档编号:10797189
- 上传时间:2023-02-23
- 格式:DOCX
- 页数:47
- 大小:271.85KB
酒店点餐系统2系统管理模块设计.docx
《酒店点餐系统2系统管理模块设计.docx》由会员分享,可在线阅读,更多相关《酒店点餐系统2系统管理模块设计.docx(47页珍藏版)》请在冰豆网上搜索。
酒店点餐系统2系统管理模块设计
2009-2010学年第二学期
管理信息系统
—系统设计报告
专业:
计算机科学与技术
班级:
071011班
题目:
酒店点餐系统
成员:
姓名
分工
邓军
成员任务分配、软件设计、软件调试
靳鹏
界面美化、成果汇报
王锐强
系统分析、数据库设计
王隽捷
系统分析、软件测试
边金虎
数据录入、软件测试
赵佳欢
数据录入、软件测试
系统管理模块设计
1、主界面设计3
1.1开发过程3
1.2关键程序4
1.2.1类CSystemManagementApp设计4
1.2.2类CSystemManagementDlg设计7
2、登录对话框设计12
2.1开发过程12
2.2关键程序12
3、账号管理模块设计14
3.1开发过程14
3.2关键程序14
4、厨师管理模块设计16
4.1开发过程16
4.2关键程序16
5、菜品管理模块设计18
5.1开发过程18
5.2关键程序18
6、收银模块设计20
6.1开发过程20
6.2关键程序21
7、销售统计模块设计23
7.1开发过程23
7.2关键程序24
8、通信模块设计25
9、资源对话框对照说明29
1、主界面设计
1.1开发过程
1)向项目中添加Dialog资源,设置其ID为IDD_SYSTEMMANAGEMENT_DIALOG,修改属性“Caption”为“酒店点餐系统-306工作室制作”。
其设计界面如图1:
图1
2)向对话框中添加3个GroupBox、2个ListControl、1个RichEditControl。
设置其属性如表1:
表1
ID
Properties
MemberVariables
Types
Member
IDC_DESK_LIST
View:
Icon,Sort:
Ascending
CListCtrl
m_DeskList
IDC_DESK_USING_LIST
View:
Report,Sort:
Ascending
CListCtrl
m_DeskUsingList
IDC_MESSAGE_LIST
WantReturn,Read-Only
CRichEditCtrl
m_MessageList
3)向项目添加一个Menu和一个Toolbar,设计如图2--图7:
图2
图3
图4
图5
图6
图7
4)添加一个Menu作为系统托盘菜单,如图8:
图8
1.2关键程序
1.2.1类CSystemManagementApp设计
1)向类CSystemManagementApp中添加类变量如下:
CSocket*m_CookTerminal;//厨师终端套接字
CPtrListm_CTList;//顾客终端列表
CDatabaseOperationm_DbOp;//数据库操作对象
CWelcomem_WDlg;//欢迎界面
2)在头文件“systemmanagement.h”中引入头文件如下:
#include"../DatabaseOperation.h"
#include"Welcome.h"
3)客户端类结构:
classCClientInfo
{
public:
intm_DeskID;//桌号
CStringm_DishedTime;//点菜时间
CClientSocket*m_ClientSock;//通信套接字
CClientInfo();
virtual~CClientInfo();
};
4)在InitInstance()中初始数据库连接,显示启动画面等:
BOOLCSystemManagementApp:
:
InitInstance()
{
//显示欢迎界面
m_WDlg.m_elapse=5000;
m_WDlg.Create(IDD_WELCOME);
m_WDlg.ShowWindow(SW_SHOW);
AfxEnableControlContainer();
AfxInitRichEdit();
:
:
CoInitialize(NULL);//初始化com环境
//网络连接初始化
AfxSocketInit(NULL);
//数据库连接初始化
ConnectSQLServer();
m_CookTerminal=NULL;
……
}
5)数据库连接设置,从配置文件读取数据库信息:
//数据库连接
voidCSystemManagementApp:
:
ConnectSQLServer()
{
CStringIP,User,Passwd;
intPort;
GetPrivateProfileString("SQLServer","IP","local",IP.GetBuffer(20),20,".\\default.ini");
IP.ReleaseBuffer();
GetPrivateProfileString("SQLServer","User","sa",User.GetBuffer(20),20,".\\default.ini");
User.ReleaseBuffer();
GetPrivateProfileString("SQLServer","Passwd","",Passwd.GetBuffer(20),20,".\\default.ini");
Passwd.ReleaseBuffer();
Port=GetPrivateProfileInt("SQLServer","Port",1433,".\\default.ini");
//数据库连接初始化
m_DbOp.CreateInstance();
if(IP=="local")
m_DbOp.OpenLocalDatabase("DishesSystem");
else{
CStringstr;
str.Format("%s,%d",IP,Port);
m_DbOp.OpenRemoteDatabase(str,"DishesSystem",User,Passwd);
}
}
6)在程序退出时,清空客户端链表信息:
intCSystemManagementApp:
:
ExitInstance()
{
CoUninitialize();
//断开连接
CloseConnect();
returnCWinApp:
:
ExitInstance();
}
//断开连接
voidCSystemManagementApp:
:
CloseConnect()
{
POSITIONpos=m_CTList.GetHeadPosition();
CMessageMsg;
intcount=m_CTList.GetCount();
if(pos){
CClientInfo*m_pClientInfo;
for(inti=0;i if(pos! =NULL){ m_pClientInfo=static_cast if(m_pClientInfo! =NULL){ if(m_pClientInfo->m_ClientSock! =NULL){ //发送系统管理端退出消息OSM_SERVER_EXIT Msg.CreateMsg(OSM_SERVER_EXIT,OST_SERVER|0x0001,OST_CLIENT|m_pClientInfo->m_DeskID); m_pClientInfo->m_ClientSock->Send(&Msg,sizeof(CMessage)); } //注意m_pClientInfo中已自动关闭套接字 deletem_pClientInfo; } } } } if(m_CookTerminal! =NULL){ m_CookTerminal->ShutDown(); m_CookTerminal->Close(); deletem_CookTerminal; } } 1.2.2类CSystemManagementDlg设计 1)在初始化函数OnInitDialog()中添加工具栏和菜单栏的设置,在CDialog: : OnInitDialog()后添加如下代码,m_wndToolBar为重载CToolBar的类: if(! m_wndToolBar.CreateEx(this,TBSTYLE_FLAT,WS_CHILD|WS_VISIBLE|CBRS_TOP|CBRS_GRIPPER|CBRS_TOOLTIPS|CBRS_FLYBY|CBRS_SIZE_DYNAMIC)|| ! m_wndToolBar.LoadToolBar(IDR_TOOLBAR1)){ TRACE0(_T("工具栏创建失败! \n")); returnFALSE;//failtocreate }/**/ RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);//定位工具条 m_wndToolBar.LoadTrueColorToolBar(32,IDB_BITMAP_TB_DIS,IDB_BITMAP_TB_ABL,IDB_BITMAP_TB_DIS); m_wndMenu.LoadMenu(IDR_MENU1); SetMenu(&m_wndMenu); 2)主窗口初始化操作: //系统托盘初始化 TrayInit(); //初始账号为空,权限为NONEUSER,此时用户只有登录的权利 m_CurAccount.Empty(); m_Permission=NONEUSER; //依据权限设置系统可用功能 ButtonPermission(m_Permission); //初始化所有对话框 InitAllDlgs(); //初始化列表 InitList(); //启动监听服务 StartServer(); //动态隐藏欢迎界面,并销毁该窗口 if(theApp.m_WDlg.GetSafeHwnd()! =NULL){ AnimateWindow(theApp.m_WDlg.m_hWnd,2000,AW_HIDE|AW_CENTER|AW_BLEND); theApp.m_WDlg.DestroyWindow(); } 3)启动监听服务: //启动监听服务 voidCSystemManagementDlg: : StartServer() { m_Port=GetPrivateProfileInt("ServerInfo","Port",8880,".\\default.ini"); m_MaxDeskNum=GetPrivateProfileInt("Desks","Max",50,".\\default.ini"); charchName[MAX_PATH]={0}; gethostname(chName,MAX_PATH); hostent*phost=gethostbyname(chName); char*chIP=inet_ntoa(*(in_addr*)phost->h_addr_list[0]); charchDisable=1; BOOLbRet=m_ServerSocket.Create(m_Port,SOCK_STREAM,chIP); setsockopt(m_ServerSocket.m_hSocket,IPPROTO_TCP,TCP_NODELAY,&chDisable,sizeof(chDisable)); BOOLbEnable=TRUE; m_ServerSocket.SetSockOpt(SO_OOBINLINE,&bEnable,sizeof(BOOL)); bRet=m_ServerSocket.Listen(m_MaxDeskNum); DWORDdwEnable=1; m_ServerSocket.IOCtl(FIONBIO,&dwEnable); } 4)根据权限启用或禁用某些操作: voidCSystemManagementDlg: : ButtonPermission(intpermission) { switch(permission){ caseSUPER: //将账户管理置为可用 m_wndToolBar.SetButtonInfo(2,ID_ACCOUNT_MANAGEMENT,TBSTATE_ENABLED,1); m_wndMenu.EnableMenuItem(ID_ACCOUNT_MANAGEMENT,MF_ENABLED); //将菜品管理置为可用 m_wndToolBar.SetButtonInfo(3,ID_DISHES_MANAGEMENT,TBSTATE_ENABLED,2); m_wndMenu.EnableMenuItem(ID_DISHES_MANAGEMENT,MF_ENABLED); //将厨师管理置为可用 m_wndToolBar.SetButtonInfo(4,ID_COOK_MANAGEMENT,TBSTATE_ENABLED,3); m_wndMenu.EnableMenuItem(ID_COOK_MANAGEMENT,MF_ENABLED); //将收银置为可用 m_wndToolBar.SetButtonInfo(6,ID_CHECK_OUT,TBSTATE_ENABLED,4); m_wndMenu.EnableMenuItem(ID_CHECK_OUT,MF_ENABLED); //将销售统计置为可用 m_wndToolBar.SetButtonInfo(7,ID_SALES_STATISTICS,TBSTATE_ENABLED,5); m_wndMenu.EnableMenuItem(ID_SALES_STATISTICS,MF_ENABLED); //显示列表 ShowAllTable(TRUE); break; caseORDINARY: //将账户管理置为可用 m_wndToolBar.SetButtonInfo(2,ID_ACCOUNT_MANAGEMENT,TBSTATE_ENABLED,1); m_wndMenu.EnableMenuItem(ID_ACCOUNT_MANAGEMENT,MF_ENABLED); //将菜品管理置为不可用 m_wndToolBar.SetButtonInfo(3,ID_DISHES_MANAGEMENT,TBBS_DISABLED,2); m_wndMenu.EnableMenuItem(ID_DISHES_MANAGEMENT,MF_DISABLED); //将厨师管理置为不可用 m_wndToolBar.SetButtonInfo(4,ID_COOK_MANAGEMENT,TBBS_DISABLED,3); m_wndMenu.EnableMenuItem(ID_COOK_MANAGEMENT,MF_DISABLED); //将收银置为可用 m_wndToolBar.SetButtonInfo(6,ID_CHECK_OUT,TBSTATE_ENABLED,4); m_wndMenu.EnableMenuItem(ID_CHECK_OUT,MF_ENABLED); //将销售统计置为可用 m_wndToolBar.SetButtonInfo(7,ID_SALES_STATISTICS,TBSTATE_ENABLED,5); m_wndMenu.EnableMenuItem(ID_SALES_STATISTICS,MF_ENABLED); //显示列表 ShowAllTable(TRUE); break; caseNONEUSER: //将账户管理置为不可用 m_wndToolBar.SetButtonInfo(2,ID_ACCOUNT_MANAGEMENT,TBBS_DISABLED,1); m_wndMenu.EnableMenuItem(ID_ACCOUNT_MANAGEMENT,MF_DISABLED); //将菜品管理置为不可用 m_wndToolBar.SetButtonInfo(3,ID_DISHES_MANAGEMENT,TBBS_DISABLED,2); m_wndMenu.EnableMenuItem(ID_DISHES_MANAGEMENT,MF_DISABLED); //将厨师管理置为不可用 m_wndToolBar.SetButtonInfo(4,ID_COOK_MANAGEMENT,TBBS_DISABLED,3); m_wndMenu.EnableMenuItem(ID_COOK_MANAGEMENT,MF_DISABLED); //将收银置为不可用 m_wndToolBar.SetButtonInfo(6,ID_CHECK_OUT,TBBS_DISABLED,4); m_wndMenu.EnableMenuItem(ID_CHECK_OUT,MF_DISABLED); //将销售统计置为不可用 m_wndToolBar.SetButtonInfo(7,ID_SALES_STATISTICS,TBBS_DISABLED,5); m_wndMenu.EnableMenuItem(ID_SALES_STATISTICS,MF_DISABLED); //隐藏各列表 ShowAllTable(FALSE); break; } } 5)获取终端客户信息: //获取顾客终端信息 CClientInfo*CSystemManagementDlg: : GetClientInfo(intid) { CClientInfo*pClientInfo=NULL; intdeskid=0; CPtrList*pList=&((CSystemManagementApp*)AfxGetApp())->m_CTList; POSITIONpos=pList->GetHeadPosition(); while(pos){ pClientInfo=static_cast if(pClientInfo! =NULL){ deskid=pClientInfo->m_DeskID; if(deskid! =0&&deskid==id){//找到所要找的顾客终端 break; } } } returnpClientInfo; } 6)账号管理: voidCSystemManagementDlg: : OnAccountManagement() { //依据当前用户名称和权限初始化账号管理对话框 if(m_pAMDlg->GetSafeHwnd()==NULL){ m_pAMDlg->m_CurAccountName=m_CurAccount; m_pAMDlg->m_Permission=m_Permission; m_pAMDlg->Create(IDD_ACCOUNT_MANAGE); m_pAMDlg->ShowWindow(SW_SHOW); } } 7)收银: voidCSystemManagementDlg: : OnCheckOut() {CInputDeskIDDlgIDDlg;//提示输入桌号,并得到该桌点菜时间 if(IDDlg.DoModal()==IDCANCEL){return;} intid;id=IDDlg.m_DeskID;CClientInfo*pClientInfo=GetClientInfo(id); if(pClientInfo==NULL)//显示收银对话框 ShowCheckOutDlg(NULL,id,""); else ShowCheckOutDlg(pClientInfo->m_ClientSock,id,pClientInfo->m_DishedTime); } 8)厨师管理: voidCSystemManagementDlg: : OnCookManagement() { if(m_pCMDlg->GetSafeHwnd()==NULL){ m_pCMDlg->Create(IDD_COOK_MANAGEMENT_DIALOG); m_pCMDlg->ShowWindow(SW_SHOW); } } 9)菜品管理: voidCSystemManagementDlg: : OnSalesStatistics() { if(m_pSSDlg->GetSafeHwnd()==NULL){ m_pSSDlg->Create(IDD_SALES_STATISTICS_DIALOG); m_pSSDlg->ShowWindow(SW_SHOW); } } 10)销售统计: voidCSystemManagementDlg: : OnDishesManagement() { if(m_pDMDlg->GetSafeHwnd()==NULL){ m_pDMDlg->Create(IDD_DISHES_MANAGEMENT_DIALOG); m_pDMDlg->ShowWindow(SW_SHOW); } } 11)登录系统: voidCSystemManagementDlg: : OnLogin() { //显示登录对话框,并获取用户名及权限 CLoginDlgLDDlg; if(LDDlg.DoModal()==IDCANCEL) return; m_Permission=LDDlg.m_Permission; m_CurAccount=LDDlg.m_UserName; //依据权限设置系统可用功能 ButtonPermission(m_Permission); } 12)帮助: voidCSystemManagementDlg: : OnHelp() { CAboutDlgdlgAbout;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 酒店 系统 系统管理 模块 设计