为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

点餐系统

2017-09-27 33页 doc 136KB 63阅读

用户头像

is_841159

暂无简介

举报
点餐系统点餐系统 点菜系统文档 I 系统设计 一、系统设计目标 1、通过一个模拟点菜系统,使企业的餐饮管理电子化、人性化、便捷化、自动化,从而提高企业管理效率及企业形象; 2、系统开发的总体任务是实现餐饮管理电子化、人性化、自动化。 二、 开发设计思想 1、尽量采用现有的软硬件环境,及陷阱的管理系统开发方案,从而达到充分利用公司现有资源,提高系统公开发水平和应用效果的目的。 2、 系统应符合餐饮管理的规定,满足企业日常经营工作需要,并达到操作过程中的直观、 方便、实用、安全等要求。 3、系统采用C/S体系结构,客户端...
点餐系统
点餐系统 点菜系统文档 I 系统 一、系统设计目标 1、通过一个模拟点菜系统,使企业的餐饮管理电子化、人性化、便捷化、自动化,从而提高企业管理效率及企业形象; 2、系统开发的总体任务是实现餐饮管理电子化、人性化、自动化。 二、 开发设计思想 1、尽量采用现有的软硬件环境,及陷阱的管理系统开发,从而达到充分利用公司现有资源,提高系统公开发水平和应用效果的目的。 2、 系统应符合餐饮管理的规定,满足企业日常经营工作需要,并达到操作过程中的直观、 方便、实用、安全等要求。 3、系统采用C/S体系结构,客户端负责提供表达逻辑、显示用户点菜界面、提供点菜功能,访问数据库服务器;服务器端父子提供数据服务及管理功能。 4、 系统采用模块化程序设计,既便于系统功能的各种组合和修改,又便于未参与开发 的技术维护人员补充、维护。 5、 系统应具备数据库维护功能,及时根据用户需求进行数据的添加、修改、删除、备份等 操作。 三、系统功能分析 系统功能分析是在系统开发总体任务的基础上完成的。系统将要完成的功能主要有: 1、前台主要负责点菜,其具体功能为: , 点菜 点菜时设备显示每个菜的介绍,含有菜名,分类,菜价,图片信息 , 菜单下载 , 订菜信息上传 2、后台主要负责菜单维护功能,具体主要功能有: , 楼面管理,主要查看桌子的当前状态。包含桌号、状态信息 , 菜色管理,包含名称、种类、价格、图片等信息 , 权限管理,该模块可以随身定制权限,其权限主要包括:订单管理,员工管理,菜色分类 管理及菜色管理等四种权限 , 员工管理,包含姓名\密码\权限\性别等信息 四、系统功能模块设计 在系统功能分析的基础上,得到如图1的功能结构图。 点菜系统 系统订单菜色 管理管理管理 权员订类菜限工单别品管管查管管 理理看理理 图1 功能结构图 II 数据库设计 数据库结构设计的好坏将直接对应用系统的效率以及实现的效果产生影响,好的数据库结构设计会减少数据库的存储量,数据的完整性和一致性比较高,系统具有较快的响应速度,简化基于此数据库的应用程的实现方法等。 在数据库系统开始设计的时候应该尽量考虑全面,尤其应该仔细考虑用户的各种需求,避免浪费不必要的人力和物力。 一、数据库分析 通过上述系统功能模块分析,设计相应的数据项及数据结构如下: 1、 员工基本情况: 2、 二、数据库概念结构设计 这一设计阶段是在需求分析的基础上而进行的,设计出能够满足用户需求的各种实体,以及它们之间的关系,为后面的逻辑结构设计打下基础。 本系统根据上面设计规划出来的实体有: 员工 姓名密码权限性别 桌子: 桌子 编号状态 菜品: 菜品 编号名称备注价格分类图片 类别: 类别 编号名称 订单: 订单 订单号时间桌号菜品费用付费状态收银员 权限管理: 权限 编号雇员管理订单管理菜品管理分类管理 权限分类 权限分类 名称编号 实体间的关系图如下: 三、数据库逻辑结构设计 在上面的实体之间的关系的基础上,形成数据库中的以及各个表格之间的关系。 点菜系统数据库中各个表格的设计结果如下面的几个表格所示。各个表格表示在数据库中的一个表。 表1 员工表EmployeInfo 列名 数据类型 可否为空 说明 EmployeID nchar(10) 否 员工号(主键) Name nchar(10) 可以 姓名 Age Int 可以 年龄 Pwd nchar(10) 可以 密码 PurviewID nchar(3) 否 权限号 表2 桌子表TableInfo 列名 数据类型 可否为空 说明 TableID nchar(10) 否 桌号(主键) TableState Int 可以 状态 表3 菜品表DishInfo 列名 数据类型 可否为空 说明 DishID nchar(10) 否 菜号(主键) Name nchar(10) 可以 菜名 SortID nchar(10) 可以 菜类号 Demo ntext 可以 备注 Price money 否 价格 Picture nchar(50) 可以 图片位置 表4 分类表DishSort 列名 数据类型 可否为空 说明 SortID nchar(10) 否 类别号(主键) Name nchar(10) 可以 类别名 订单表OrderInfo 列名 数据类型 可否为空 说明 OrderID nchar(10) 否 订单号(主键) OrderTime datetime 可以 下单时间 TableID nchar(10) 可以 桌号 DishID nchar(10) 可以 菜号 Fee money 可以 费用 FeeState int 可以 收费状态 EmployeID nchar(10) 可以 员工ID 表5 权限表PurviewManage 列名 数据类型 可否为空 说明 PurviewID nchar(3) 否 权限号(主键) EmployeManage Int 可以 员工管理 OrderManage Int 可以 订单管理 SortManage Int 可以 分类管理 DishManage Int 可以 菜色管理 表6 权限分类PurviewSort 列名 数据类型 可否为空 说明 PurviewID nchar(3) 否 权限号(主键) Name nchar(10) 可以 权限名 四、数据库结构实现 在需求分析、概念结构设计的基础上得到数据库逻辑结构后,就可以在数据库系统中实现该逻辑结构。具体生成过程参看SQL教程。 IV 创建应用程序 此系统采用MFC ADO方法开发,工程的创建步骤如下: (1)选择菜单“File|New”中的”新建项目”选项卡中“MFC appwizard(exe)”,设置合适的目录和项目名,如“D:\临时资料\AustOrder”目录下的“RestManagement”项目。 (2)创建一个对话框应用程序,选择“Dialog based”选项,然后单击“Next”按钮。 (3)再接连单击“Next”按钮,然后单击“Finish”按钮就完成了应用程序的创建。 III 数据库操作的准备 一、数据库连接 A)在stdafx. H文件中加入 #import "C:\Program Files\Common Files\System\ado\msado15.dll"\ no_namespace rename("EOF","adoEOF") B)在RestManagement.h文件中加入 class CRestManagementApp : public CWinApp { public: CRestManagementApp(); ~CRestManagementApp(); _ConnectionPtr m_pConnection; 。。。。。。。 }; C)在RestManagement.cpp文件BOOL CRestManagementApp::InitInstance()中加入 BOOL CRestManagementApp::InitInstance() {。。。。。。。 AfxOleInit(); //初始化ADO AfxEnableControlContainer(); // 初始化 // 如果未使用这些功能并希望减小 // 最终可执行文件的大小,则应移除下列 // 不需要的特定初始化例程 // 更改用于存储设置的注册表项 // TODO: 应适当修改该字符串, // 例如修改为公司或组织名 SetRegistryKey(_T("应用程序向导生成的本地应用程序")); m_pConnection.CreateInstance(__uuidof(Connection)); //m_pConnection->Open("Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=DishOrder;Data Source=HUGUOXIONG-PC","","",adModeUnknown); //设置数据源,即数据库连接字段 try { // 打开本地sql库 m_pConnection->Open("Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=DishOrder;DataSource=HUGUOXIONG-PC\SQLEXPRESS","","",adModeUnknown); } catch(_com_error e) { AfxMessageBox(_T("数据库连接失败,确认数据库DishOrder.mdb是否在当前路径下!")); return FALSE; } 。。。。。。。 } D)在系统退出时要在RestManagement.cpp文件中加入: int CRestManagementApp::ExitInstance(void) { m_pConnection=NULL; return CWinApp::ExitInstance(); } 二、数据库添加、删除、插入、查询操作 经过上面操作,已经成功和数据库连接上,下面将要通过记录集对象进行数据库的添加操作。具体操作如下: 1、在每个对话框类的头文件中添加如下语句: class CPurviewsort : public CDialog { 。。。。。。 public: _ConnectionPtr m_pConnection; _RecordsetPtr m_pRecordset; _CommandPtr m_pCommand; 。。。。。。 }; 2、在需要加入的地方写上如下语句: sqlStr.Format(_T("Insert into PurviewSort (PurviewID,Name) values ('%s','%s')"),m_strPurID,m_strPurName); theApp.m_pConnection->Execute((_bstr_t)sqlStr,NULL,adCmdText);/*记录集指针执行SQL语句*/ 对于数据库其他的诸如删除、查询、插入等操作与添加操作类似。 IV 登陆窗口的设计 由于此应用程序采用的是基于对话框开发,因此该应用程序的登录窗口应该在主对话框(即运行应用程序后出现的对话框)之前出现。该窗口的设计如下图所示。 该窗口放置了2个静态文本框(Static)空间,在窗口的相应位置显示文字。放置了2个编辑框(Edit)空间,一个供用户输入登录的用户名(strName),另一个供用户输入口令(strPwd),这一编辑框Password属性要设置成TRUE。输入的值存放在编辑框控件对应的变量中。另外还放置了2个按钮(Button)控件,一个是登陆控件,一个是退出控件。 为了数据库使用的安全,允许的用户和口令都预先存在数据库中,如果要加入新的用户,必须修改数据库中对应的表。 单击“登录”按钮后,应用程序先执行一次数据库的查询,看输入的用户名和口令是不是在数据库的EmployeInfo表中存在,如果存在则且密码正确就查询相应权限,并打开系统主对话框;如果用户名不存在或密码错误,则登录失败,从新输入。 下面是实现这些功能的代码,写在“登录”按钮的单击事件函数中: void CDiaLogin::OnBnClickedButOk() { // TODO: 在此添加控件通知处理程序代码 UpdateData(TRUE); CString Name,Pwd; CString SQL; //SQL.Format(_T("select Name,Pwd,PurviewID from EmployeInfo")); SQL.Format(_T("select RTRIM(Name),RTRIM(Pwd),PurviewID from EmployeInfo")); /*声明相应的SQL语句*/ m_pRecordset=theApp.m_pConnection->Execute((_bstr_t)SQL,NULL,adCmdText);/*记录集指针执行SQL语句*/ // int Counter=0; if(!(m_pRecordset->BOF))//若记录集指针未指向数据库中的首元素 { bool t=FALSE; m_pRecordset->MoveFirst();//则将其指向首元素位置 while (!m_pRecordset->adoEOF)//若记录集指针未指向数据库中的尾元素,则循环永远不会结束 { Name=(char*)(_bstr_t)m_pRecordset->GetCollect((long)0); Pwd=(char*)(_bstr_t)m_pRecordset->GetCollect((long)1); if((strName==Name)&&(strPwd==Pwd)) { Purview=(char*)(_bstr_t)m_pRecordset->GetCollect((long)2); EndDialog(IDOK); t=TRUE; break; } m_pRecordset->MoveNext(); } if(t==FALSE) { ::MessageBox(NULL,_T("请确认用户名和密码,注意大小写~请重新输入。"),_T("认证失败"), MB_OK); strName.SetString(_T("")); strPwd.SetString(_T("")); UpdateData(FALSE); GetDlgItem(IDC_EDIT_LOG)->SetFocus(); } } } 对话框上的“退出”按钮为退出整个应用程序,其代码如下: void CDiaLogin::OnBnClickedButExit() { // TODO: 在此添加控件通知处理程序代码 EndDialog(IDCANCEL); } V 建立主窗口 系统的应用程序的各个不同功能是通过选择窗口菜单实现的。每个功能模块由一个或多个对话框实现。 主窗口菜单如下图所示: 具体菜单设计如下表: ID 菜单名称 \ 系统管理 \ …权限管理 ID_PURMAN ……权限分配 ID_PURSORT ……权限类别 ID_ID_EMPMAN …员工管理 ID_APP_EXIT …退出 \ 订单管理 ID_MENUORDER …订单查看 \ 菜色管理 ID_SORTMANA …类别管理 ID_DISHINFO …菜色管理 帮助 ID_APP_ABOUT …关于 RestManagemen 把菜单添加到主对话框中,在RestManagementDlg.cpp文件中加入 BOOL CRestManagementDlg::OnInitDialog() { 。。。。。。 // TODO: 在此添加额外的初始化代码 m_Menu.LoadMenu(IDR_MAINFRAME); SetMenu(&m_Menu); 。。。。。。 } 主窗口图片加载,在RestManagementDlg.cpp文件中加入 void CRestManagementDlg::OnPaint() { if (IsIconic()) { 。。。。。。 } else { CPaintDC dc(this); CRect rect; GetClientRect(&rect); CDC dcMem; dcMem.CreateCompatibleDC(&dc); CBitmap bmpBackground; bmpBackground.LoadBitmap(IDB_BITMAP_MAIN); BITMAP bitmap; bmpBackground.GetBitmap(&bitmap); CBitmap *pbmpOld=dcMem.SelectObject(&bmpBackground); dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,bitmap.bmWidth,bitmap.bmHeight,SRCCO PY); CDialog::OnPaint(); } } VI 类别管理的设计与实现 类别管理模块主要完成菜的分类管理,包括对分类信息的添加删除等操作。窗口由一个List Control控件和若干个Edit Control控件组成。具体如下图所示: 其各控件参数设计如下表: ID 控件类型 成员变量 说明 List Control IDC_LIST_SORT m_ListCtrlSortMana 类别显示 Static Text IDC_STATIC 无 类别号 Static Text IDC_STATIC 无 类别名 Edit Control IDC_EDIT_SORT strSortNum 类别号 Edit Control IDC_SORT_NAME strSortName 类别名 Button IDC_BTN_ADD 无 添加按钮 Button IDC_BTN_DEL 无 删除按钮 Button IDC_BTN_ALT 无 修改按钮 对于该模块的触发,是由主界面中的“类别管理”菜单单击而得到的,具体代码: 1、 在RestManagementDlg.cpp文件中的菜单响应函数中输入: void CRestManagementDlg::OnSortmana() { // TODO: 在此添加命令处理程序代码 CSort dlgSort; dlgSort.DoModal(); } 2、 添加对List Control控件标题栏的添加 在sort.cpp文件中加入: BOOL CSort::OnInitDialog() { CDialog::OnInitDialog(); // TODO: 在此添加额外的初始化 //建立列表控件的列表头 m_ListCtrlSortMana.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES); m_ListCtrlSortMana.InsertColumn(1,_T("类别号"),LVCFMT_LEFT,180); m_ListCtrlSortMana.InsertColumn(2,_T("类别名"),LVCFMT_LEFT,180); ReadList(); return TRUE; // return TRUE unless you set the focus to a control // 异常: OCX 属性页应返回FALSE } 其中ReadList()函数是对List Control控件的操作的。具体代码: void CSort::ReadList() { UpdateData(); m_ListCtrlSortMana.DeleteAllItems();//首先将ListControl中已有的数据清空,而后重新从数据库读入,以实现刷新效果 CString SQL,Columnname1,Columnname2; /*****************************通过以下两句代码即可实现实质上的以SQL语句操控数据库 ***************************/ SQL.Format(_T("select SortID,Name from DishSort")); /*声明相应的SQL语句*/ m_pRecordset=theApp.m_pConnection->Execute((_bstr_t)SQL,NULL,adCmdText);/*记录集指针执行SQL语句*/ int Counter=0; if(!(m_pRecordset->BOF))//若记录集指针未指向数据库中的首元素 { m_pRecordset->MoveFirst();//则将其指向首元素位置 while (!m_pRecordset->adoEOF)//若记录集指针未指向数据库中的尾元素,则循环永远不会结束 { Columnname1=(char*)(_bstr_t)m_pRecordset->GetCollect((long)0); Columnname2=(char*)(_bstr_t)m_pRecordset->GetCollect((long)1); //............................... m_ListCtrlSortMana.InsertItem(Counter,_T("")); m_ListCtrlSortMana.SetItemText(Counter,0,Columnname1);//其中的Counter为行号;为列号即字段号 m_ListCtrlSortMana.SetItemText(Counter,1,Columnname2);//同上 //........................................... m_pRecordset->MoveNext(); Counter++; } } UpdateData(false); } 3、 对其添加操作 直接在窗口下方的两个编辑窗口中输入要添加的内容值,然后点添加按钮即可。代码如 下: void CSort::OnBnClickedBtnAdd() { // TODO: 在此添加控件通知处理程序代码 CString strSQL; UpdateData(TRUE); if(strSortNum!="") { CString sqlStr; sqlStr.Format(_T("Insert into DishSort (SortID,Name) values ('%s','%s')"),strSortNum,strSortName); theApp.m_pConnection->Execute((_bstr_t)sqlStr,NULL,adCmdText);/*记录集指针执行SQL语句*/ ReadList(); } strSortNum=""; strSortName=""; UpdateData(FALSE); } 4、 修改操作 双击List Control控件中想要修改的项,在下方的编辑框中进行修改后,单击修改按钮即可。代码如 下: void CSort::OnBnClickedBtnAlt() { // TODO: 在此添加控件通知处理程序代码 CString strSQL; UpdateData(TRUE); if(strSortNum!="") { CString sqlStr; sqlStr.Format(_T("delete from DishSort where SortID='%s'"),strSortNumAmd); theApp.m_pConnection->Execute((_bstr_t)sqlStr,NULL,adCmdText);/*记录集指针执行SQL 语句*/ sqlStr.Format(_T("Insert into DishSort (SortID,Name) values ('%s','%s')"),strSortNum,strSortName); theApp.m_pConnection->Execute((_bstr_t)sqlStr,NULL,adCmdText);/*记录集指针执行SQL 语句*/ ReadList(); } strSortNum=""; strSortName=""; UpdateData(FALSE); } 5、 删除操作 双击List Control控件中想要修改的项,单击删除按钮即可。代码如下: void CSort::OnBnClickedBtnDel() { // TODO: 在此添加控件通知处理程序代码 int i,iState; int nItemSelected = m_ListCtrlSortMana.GetSelectedCount();//所选表项数 int nItemCount = m_ListCtrlSortMana.GetItemCount();//表项总数 if(nItemSelected <1) { return ; } for(i = nItemCount-1;i>=0;i--) { iState=m_ListCtrlSortMana.GetItemState(i,LVIS_SELECTED); if(iState!=0) { CString str = m_ListCtrlSortMana.GetItemText(i,0); CString sqlStr; sqlStr.Format(_T("delete from DishSort where SortID='%s'"),str); theApp.m_pConnection->Execute((_bstr_t)sqlStr,NULL,adCmdText); m_ListCtrlSortMana.DeleteItem(i); } } ReadList(); } 6、 双击List Control控件操作代码如下: void CSort::OnNMDblclkListSort(NMHDR *pNMHDR, LRESULT *pResult) { // TODO: 在此添加控件通知处理程序代码 *pResult = 0; CString str; int nId; //首先得到点击的位置 POSITION pos=m_ListCtrlSortMana.GetFirstSelectedItemPosition(); if(pos==NULL) { MessageBox(_T("请至少选择一项"),_T("提示信息"),MB_ICONEXCLAMATION); return; } //得到行号,通过POSITION转化 nId=(int)m_ListCtrlSortMana.GetNextSelectedItem(pos); //得到列中的内容(表示第一列,同理,2,3...表示第二,三,四...列) UpdateData(TRUE); str=m_ListCtrlSortMana.GetItemText(nId,0); strSortNum=str; strSortNumAmd=str; str=m_ListCtrlSortMana.GetItemText(nId,1); strSortName=str; UpdateData(FALSE); } VII 菜色管理的设计与实现 菜色管理模块主要管理菜的基本信息添加,其窗口信息包含List Control、编辑框等控件,如下图所示。 窗口控件信息入下表所示: ID 控件类型 成员变量 说明 List Control IDC_LIST_DISH m_ListDish 菜显示 Static Text IDC_STATIC 无 编号 Static Text IDC_STATIC 无 名称 Static Text IDC_STATIC 无 种类 Static Text IDC_STATIC 无 价格 Static Text IDC_STATIC 无 说明 Edit Control IDC_EDIT_DISHID strDishID 编号 Edit Control IDC_EDIT_NAME strDishName 名称 Edit Control IDC_EDIT_SORT strSort 种类 Edit Control IDC_EDIT_PRICE strPrice 价格 Edit Control IDC_EDIT_DEMO strDemo 说明 Group Box IDC_STATIC 无 商品细节 Picture Control IDC_STATIC_PIC m_nImage 菜照片 Button IDC_BUTADD 无 添加菜按钮 Button IDC_BUTDEL 无 删除菜按钮 Button IDC_BUTMOD 无 修改菜按钮 单击菜单中的“菜色管理”触发该事件。打开如上图对话框,双击其中的ListControl中的数据,其详细信息显示在对话框下方。具体代码如下: 1、 List Control控件初始化 BOOL CDlgDish::OnInitDialog() { CDialog::OnInitDialog(); // TODO: 在此添加额外的初始化 建立列表控件的列表头 // m_ListDish.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES); m_ListDish.InsertColumn(0,_T("菜号"),LVCFMT_LEFT,180); m_ListDish.InsertColumn(1,_T("菜名"),LVCFMT_LEFT,180); m_ListDish.InsertColumn(2,_T("类别号"),LVCFMT_LEFT,180); m_ListDish.InsertColumn(3,_T("价格"),LVCFMT_LEFT,180); m_ListDish.InsertColumn(4,_T("说明"),LVCFMT_LEFT,180); m_ListDish.InsertColumn(5,_T("图片"),LVCFMT_LEFT,180); ReadList(); return TRUE; // return TRUE unless you set the focus to a control // 异常: OCX 属性页应返回FALSE } 2、 List Control控件双击事件 void CDlgDish::OnNMDblclkListDish(NMHDR *pNMHDR, LRESULT *pResult) //List控件双击 { // TODO: 在此添加控件通知处理程序代码 *pResult = 0; CString str; int nId; //首先得到点击的位置 POSITION pos=m_ListDish.GetFirstSelectedItemPosition(); if(pos==NULL) { MessageBox(_T("请至少选择一项"),_T("提示信息"),MB_ICONEXCLAMATION); return; } //得到行号,通过POSITION转化 nId=(int)m_ListDish.GetNextSelectedItem(pos); //得到列中的内容(表示第一列,同理,2,3...表示第二,三,四...列) UpdateData(TRUE); strDishID=m_ListDish.GetItemText(nId,0); strDishIDAmd=m_ListDish.GetItemText(nId,0); strName=m_ListDish.GetItemText(nId,1); strSort=m_ListDish.GetItemText(nId,2); strPrice=m_ListDish.GetItemText(nId,3); strDemo=m_ListDish.GetItemText(nId,4); strPict=m_ListDish.GetItemText(nId,5); t=TRUE; Display_Pic(); UpdateData(FALSE); } 3、 图片控件的显示 void CDlgDish::Display_Pic(void) //图片显示 { CString strPicPath; strPicPath.Format(_T("%s"),strPict); CRect rect; m_nImage.GetClientRect(&rect); //m_picture为Picture控件IDC_PIC的member variables,获得控件的区域对象,在class wizard 中定义 CImage image; //使用图片类 image.Load(strPicPath); //filename为图片的路径及名称 CDC* pDC = m_nImage.GetWindowDC(); //获得显示控件的DC image.Draw( pDC -> m_hDC,rect); ReleaseDC(pDC); // delete image; } 4、 添加按钮 void CDlgDish::OnBnClickedButadd() //添加按钮 { // TODO: 在此添加控件通知处理程序代码 CString strSQL; UpdateData(TRUE); //if(strDishID!="") //{ // CString sqlStr,strPicPath; // CFileDialog dlg(TRUE, _T("jpg"),NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, _T("JPG Files (*.jpg)|*.jpg||"),this); // if (dlg.DoModal() == IDOK) // strPict = dlg.GetPathName(); //获取文件名称与路径 // Display_Pic(); //} if(selectPic == TRUE) { strSQL.Format(_T("Insert into DishInfo (DishID,Name,SortID,Demo,Price,Picture ) \ values ('%s','%s','%s','%s','%s','%s')"),strDishID,strName,strSort,strDemo,strPrice,strPict); theApp.m_pConnection->Execute((_bstr_t)strSQL,NULL,adCmdText);/*记录集指针执行SQL语句*/ ReadList(); strDishID=""; strName=""; strSort=""; strDemo=""; strPrice=""; m_nImage.SetBitmap(NULL);//删除BitMap strPict=""; selectPic = FALSE; Invalidate(TRUE); UpdateData(FALSE); } else { MessageBox(_T("未选择图片,请双击图片框选择"),_T("提示信息"),MB_ICONEXCLAMATION); return ; } } 5、 删除按钮 void CDlgDish::OnBnClickedButdel() //删除按钮 { // TODO: 在此添加控件通知处理程序代码 int i,iState; int nItemSelected = m_ListDish.GetSelectedCount();//所选表项数 int nItemCount = m_ListDish.GetItemCount();//表项总数 if(nItemSelected <1) { return ; } for(i = nItemCount-1;i>=0;i--) { iState=m_ListDish.GetItemState(i,LVIS_SELECTED); if(iState!=0) { CString str = m_ListDish.GetItemText(i,0); CString sqlStr; sqlStr.Format(_T("delete from DishInfo where DishID='%s'"),str); theApp.m_pConnection->Execute((_bstr_t)sqlStr,NULL,adCmdText); m_ListDish.DeleteItem(i); } } ReadList(); } 6、 修改按钮 void CDlgDish::OnBnClickedButmod() //修改按钮 { // TODO: 在此添加控件通知处理程序代码 CString strSQL; UpdateData(TRUE); if(strDishIDAmd!="") { CString sqlStr; sqlStr.Format(_T("delete from DishInfo where DishID='%s'"),strDishIDAmd); theApp.m_pConnection->Execute((_bstr_t)sqlStr,NULL,adCmdText);/*删除数据库中选中记录*/ sqlStr.Format(_T("Insert into DishInfo (DishID,Name,SortID,Demo,Price,Picture ) \ values ('%s','%s','%s','%s','%s','%s')"),strDishID,strName,strSort,strDemo,strPrice,strPict); theApp.m_pConnection->Execute((_bstr_t)sqlStr,NULL,adCmdText);/*记录集指针执行SQL语句*/ ReadList(); } strDishID=""; strName=""; strSort=""; strDemo=""; strPrice=""; selectPic = FALSE; m_nImage.SetBitmap(NULL);//删除BitMap Invalidate(TRUE); UpdateData(FALSE); } 7、图片的修改 void CDlgDish::OnStnDblclickStaticPic() { // TODO: 在此添加控件通知处理程序代码 CString sqlStr,strPicPath; CFileDialog dlg(TRUE, _T("jpg"),NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, _T("JPG Files (*.jpg)|*.jpg||"),this); if (dlg.DoModal() == IDOK) { strPict = dlg.GetPathName(); //获取文件名称与路径 selectPic = TRUE; } Display_Pic(); } 7、 List Control数据的读取操作 void CDlgDish::ReadList() //从数据库中将数据读入List控件 { UpdateData(); m_ListDish.DeleteAllItems();//首先将ListControl中已有的数据清空,而后重新从数据库读入,以实现刷新效果 CString SQL,m_strDishID,m_strName,m_strSortID,m_strDemo,m_strPrice; /*****************************通过以下两句代码即可实现实质上的以SQL语句操控数据库***************************/ SQL.Format(_T("select DishID,Name,SortID,Demo,Price,Picture from DishInfo")); /*声明相应的SQL语句*/ m_pRecordset=theApp.m_pConnection->Execute((_bstr_t)SQL,NULL,adCmdText);/*记录集指针执行SQL语句*/ /******************************************************************************************* **************************************/ int Counter=0; if(!(m_pRecordset->BOF))//若记录集指针未指向数据库中的首元素 { m_pRecordset->MoveFirst();//则将其指向首元素位置 while (!m_pRecordset->adoEOF)//若记录集指针未指向数据库中的尾元素,则循环永远不会结束 { m_strDishID=(char*)(_bstr_t)m_pRecordset->GetCollect((long)0); m_strName=(char*)(_bstr_t)m_pRecordset->GetCollect((long)1); m_strSortID=(char*)(_bstr_t)m_pRecordset->GetCollect((long)2); m_strDemo=(char*)(_bstr_t)m_pRecordset->GetCollect((long)3); m_strPrice=(char*)(_bstr_t)m_pRecordset->GetCollect((long)4); strPict=(char*)(_bstr_t)m_pRecordset->GetCollect((long)5); //............................... m_ListDish.InsertItem(Counter,_T("")); m_ListDish.SetItemText(Counter,0,m_strDishID);//其中的Counter为行号;为列号即字段号 m_ListDish.SetItemText(Counter,1,m_strName);//同上 m_ListDish.SetItemText(Counter,2,m_strSortID);//其中的Counter为行号;为列号即字段号 m_ListDish.SetItemText(Counter,3,m_strPrice);//其中的Counter为行号;为列号即字段号 m_ListDish.SetItemText(Counter,4,m_strDemo);//同上 m_ListDish.SetItemText(Counter,5,strPict); //........................................... m_pRecordset->MoveNext(); Counter++; } } UpdateData(false); }
/
本文档为【点餐系统】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索