基于MFC的餐饮管理系统(C++实现 后附源码)

您所在的位置:网站首页 MFC餐厅 基于MFC的餐饮管理系统(C++实现 后附源码)

基于MFC的餐饮管理系统(C++实现 后附源码)

2023-05-04 10:05| 来源: 网络整理| 查看: 265

基于MFC的餐饮管理系统(C++实现 后附源码) 基于MFC的餐饮管理系统(C++实现 后附源码)

餐饮管理系统实现功能: ①利用MFC的向导,创建基于对话框的应用程序,添加按钮、编辑框等控件; ②用文件保存餐桌信息,包括餐桌编号、座位数、状态(0:空闲;1:已订;2:就餐);可以按座位数和餐桌状态查询; ③用文件管理餐厅业务信息,包括:顾客姓名、订座时间、就餐时间、金额、餐桌编号、联系电话、用餐人数、备注; ④点击“订座”按钮,录入订座信息顾客姓名、订座时间、就餐时间、餐桌编号、联系电话、用餐人数、备注等,注意订座成功后修改餐桌信息文件中的餐桌状态,以保证餐桌编号不能重复预订或就餐; ⑤可以按顾客姓名、联系电话、餐桌编号等信息查询订座信息; ⑥点击“就餐”按钮可以录入餐厅业务信息; ⑦点击“结账”,即可删除该桌的信息或将其状态改为结账; ⑧订座查询后,将订座信息关联到“就餐”信息录入界面,省去一部分信息的录入工作。

本系统需要实现的功能有餐桌信息的管理,餐厅业务信息管理,预定座位管理,就餐结账等。系统存储数据采用MySQL数据库,根据不同的功能,对于用户产生的消息以及行为产生不同的响应,同时对数据库进行增删改查等一系列操作,将结果重新展示至界面。

一、系统需求分析: 开发餐厅就餐管理系统,主要实现餐桌信息、座位管理、就餐、结账、业务信息等内容。 餐桌信息模块实现查看餐桌信息与录入餐桌信息的功能,方便使用者在为客人服务时能及时查看座位的预定情况,录入餐桌信息时要尽可能详细,方便后期管理和使用。 座位管理模块实现订座与订座信息查询的功能,在有客人来时,可以为客人预定餐桌,并记录餐桌信息。订座信息查询方便使用者直接查看座位预定情况并直接进入就餐环节。 就餐模块录入就餐人的信息,在原来订座的基础上方便客人的非预定就餐。 结账模块在客人用完餐之后能准确的结账同时方便餐厅信息管理。 业务信息模块,可随时查看餐厅的餐桌信息、订座信息以及是否结账等信息,方便使用者的管理。

二、功能设计 1.餐桌信息管理 餐桌信息管理在数据库中的字段有餐桌编号,餐桌人数,餐桌状态,其中餐桌状态采用enum数据格式存储,0表示空闲,1表示预定,2表示就餐,在录入信息模块,用户需要填写必要的信息,点击确定按钮后,将所填信息数据录入数据库中存储,在后端将用户所选择的餐桌状态对应于0,1,2插入数据库。用户点击查看餐桌信息时,后端从数据库中查找所有餐桌信息,并将展示至前端界面。并且支持用户通过某些字段进行查询。

2.餐厅业务信息管理 餐厅业务信息管理主要展示餐厅的就餐记录,用户进行就餐之后将数据存储至数据库,字段包含顾客姓名、订座时间、就餐时间、金额、餐桌编号、联系电话、用餐人数、备注以及订单状态,状态分为就餐和结账,就餐时对应餐桌状态为就餐,确保数据的准确性,用户结账之后将状态改为结账,并且餐桌状态改为空闲。当用户填写就餐信息时,后端将数据存储至数据库中,金额一栏为空,待结账时,将金额填写至数据库中。

3.预定座位管理 预定座位管理,主要有两个模块,一是预定座位,二是查看目前预定座位的信息。预定座位需要填写相关的信息,并且当就餐人数大于餐桌人数时无法预定,预定之后,将预定信息插入至数据库中,并且修改餐桌状态为预定,确保一个桌子不会同时被预定。查看目前预定座位信息则是后端获取预定信息后,展示至前端。同时用户可以选择直接在预定界面进行就餐,可以省去录入信息的步骤,方便使用。

4.就餐结账 就餐人群分为两部分,一是无预订人群,此类人需要重新填写各个字段信息,且字段不可以为空,数据插入后后端将字段信息写入数据库,并且修改相关联的字段,二是已经预定的人群,此类人可以通过预定信息查询来直接预定。结账时则输入餐桌的id以及花费金额即可结账。修改餐桌状态以及业务信息的状态。此时如果对应餐桌ID未就餐,则提示无法结账,操作失误。

三、界面设计 本系统尽量采取最简洁的设计,使用户能方便操作,下面给出部分设计页面。 基于MFC的餐饮管理系统(C++实现 后附源码) 基于MFC的餐饮管理系统(C++实现 后附源码) 四、系统流程图 基于MFC的餐饮管理系统(C++实现 后附源码) 五、核心代码展示 下面给出几个主要模块的代码及实现页面

数据库的连接核心代码:

MYSQL_RES *res; //这个结构代表返回行的一个查询结果集 MYSQL_ROW sql_row; //一个行数据的类型安全(type-safe)的表示,表示数据行的列 MYSQL myCont; mysql_init(&myCont); int field_count; int row_count; if(mysql_real_connect(&myCont,"localhost","root","nuli08111314","restaurant",3306,NULL,0))//连接成功 { mysql_query(&myCont,"set names gbk"); //设置编码格式 //返回0 查询成功,返回1查询失败 query = "select * from ks_table_message where `table_id` = " + tableId;}

1.餐桌信息录入 录入时采用编辑框加静态文本框的形式,为编辑框修改ID后,用户点击确定按钮后,GetDlgItem(IDC_EDIT_TABLE_ID) ->GetWindowText(tableId);通过类似语句获取用户输入的值,通过如下语句对用户输入进行验证判断。

CString tableId,tableNumber,tableStatus, query; if(tableStatus == "空闲"){ tableStatus = "0"; } else if (tableStatus == "已定"){ tableStatus = "1"; } else if (tableStatus == "就餐"){ tableStatus = "2"; } if(atoi(tableId) == 0 || atoi(tableNumber) == 0 || atoi(tableNumber) < 0){ MessageBox("提交数据有误,请确认后填写"); //MessageBox(query); } 判断成功后将数据插入数据库代码如下: mysql_query(&myCont,"set names gbk"); //设置编码格式 //返回0 查询成功,返回1查询失败 query = "select * from ks_table_message where `table_id` = " + tableId; mysql_query(&myCont, query); //执行SQL语句 res = mysql_store_result(&myCont); row_count = mysql_num_rows(res); if(row_count == 0) { query = "insert into `ks_table_message`(`table_id`,`number`,`status`) values("+tableId+","+tableNumber+",'"+tableStatus+"')"; if (!mysql_query(&myCont, query)){ MessageBox("录入成功"); } else { MessageBox("网络原因,录入失败"); } } else { MessageBox("餐桌ID重复,请重新录入!"); } mysql_free_result(res); mysql_close(&myCont);

测试结果如下图所示 基于MFC的餐饮管理系统(C++实现 后附源码)

2.餐桌信息查询 在对话框初始化的时候从数据库获取数据并展示至前端,代码如下:

m_comboTableStatus.AddString(_T("空闲")); // 为组合框控件的列表框添加列表项“已定” m_comboTableStatus.AddString(_T("已定")); // 在组合框控件的列表框中索引为1的位置插入列表项“就餐” m_comboTableStatus.InsertString(1, _T("就餐")); // 默认选择第一项 m_comboTableStatus.SetCurSel(0); // 为列表视图控件添加全行选中和栅格风格 CRect rect; // 获取编程语言列表视图控件的位置和大小 m_tableMessageList.GetClientRect(&rect); // 为列表视图控件添加全行选中和栅格风格 m_tableMessageList.SetExtendedStyle(m_tableMessageList.GetExtendedStyle() | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES); // 为列表视图控件添加三列 m_tableMessageList.InsertColumn(0, _T("餐桌ID"), LVCFMT_CENTER, rect.Width()/3, 0); m_tableMessageList.InsertColumn(1, _T("餐桌人数"), LVCFMT_CENTER, rect.Width()/3, 1); m_tableMessageList.InsertColumn(2, _T("餐桌状态"), LVCFMT_CENTER, rect.Width()/3, 2); MYSQL_RES *res; //这个结构代表返回行的一个查询结果集 MYSQL_ROW sql_row; //一个行数据的类型安全(type-safe)的表示,表示数据行的列 MYSQL myCont; mysql_init(&myCont); int field_count; int row_count; if(mysql_real_connect(&myCont,"localhost","root","nuli08111314","restaurant",3306,NULL,0))//连接成功 { mysql_query(&myCont,"set names gbk"); //设置编码格式 //返回0 查询成功,返回1查询失败 mysql_query(&myCont, "select * from ks_table_message"); //执行SQL语句 res = mysql_store_result(&myCont); row_count = mysql_num_rows(res); field_count = mysql_num_fields(res); int i = 0; while(sql_row = mysql_fetch_row(res)){ for(int j = 0; j < field_count; j++){ if(j == 0){ m_tableMessageList.InsertItem(i,sql_row[j]); } else if(j == 2){ if(atoi(sql_row[j]) == 0) { m_tableMessageList.SetItemText(i,j,"空闲"); } else if(atoi(sql_row[j]) == 1) { m_tableMessageList.SetItemText(i,j,"已定"); } else if(atoi(sql_row[j]) == 2) { m_tableMessageList.SetItemText(i,j,"就餐"); } } else { m_tableMessageList.SetItemText(i,j,sql_row[j]); } } i++; } mysql_free_result(res); mysql_close(&myCont); }

当用户输入查询信息之后,触发另一事件,获取到用户的筛选条件之后,再次前往数据库中查询,并且将列表内容清空,重新赋值。代码如下:

//连接数据库 MYSQL_RES *res; //这个结构代表返回行的一个查询结果集 MYSQL_ROW sql_row; //一个行数据的类型安全(type-safe)的表示,表示数据行的列 MYSQL myCont; mysql_init(&myCont); int field_count; int row_count; mysql_real_connect(&myCont,"localhost","root","nuli08111314","restaurant",3306,NULL,0); mysql_query(&myCont,"set names gbk"); //设置编码格式 int nSel; // TODO: Add your control notification handler code here CString tableNumber,tableStatus, query; GetDlgItem(IDC_EDIT_TABLE_NUMBER)->GetWindowText(tableNumber); // 获取组合框控件的列表框中选中项的索引 nSel = m_comboTableStatus.GetCurSel(); // 根据选中项索引获取该项字符串 m_comboTableStatus.GetLBText(nSel, tableStatus); if(tableStatus == "空闲"){ tableStatus = "0"; } else if (tableStatus == "已定"){ tableStatus = "1"; } else if (tableStatus == "就餐"){ tableStatus = "2"; } if(atoi(tableNumber) == 0 || tableNumber == ""){ //MessageBox(tableStatus); query = "select * from `ks_table_message` where status = '" + tableStatus + "'"; //返回0 查询成功,返回1查询失败 mysql_query(&myCont, query); //执行SQL语句 res = mysql_store_result(&myCont); row_count = mysql_num_rows(res); field_count = mysql_num_fields(res); if(row_count == 0){ MessageBox("未查找到相关数据 "); } }else { query = "select * from `ks_table_message` where status = '"+ tableStatus + "'" + " and number = "+tableNumber; //返回0 查询成功,返回1查询失败 mysql_query(&myCont, query); //执行SQL语句 //MessageBox(query); res = mysql_store_result(&myCont); row_count = mysql_num_rows(res); field_count = mysql_num_fields(res); if(row_count == 0){ MessageBox("未查找到相关数据"); } } m_tableMessageList.DeleteAllItems(); mysql_free_result(res); mysql_close(&myCont); int i = 0; while(sql_row = mysql_fetch_row(res)){ for(int j = 0; j < field_count; j++){ if(j == 0){ m_tableMessageList.InsertItem(i,sql_row[j]); } else if(j == 2){ if(atoi(sql_row[j]) == 0) { m_tableMessageList.SetItemText(i,j,"空闲"); } else if(atoi(sql_row[j]) == 1) { m_tableMessageList.SetItemText(i,j,"已定"); } else if(atoi(sql_row[j]) == 2) { m_tableMessageList.SetItemText(i,j,"就餐"); } } else { m_tableMessageList.SetItemText(i,j,sql_row[j]); } } i++; }

功能测试如下图所示 基于MFC的餐饮管理系统(C++实现 后附源码)

3.订座 用户输入订座的相关信息,后端通过编辑框ID来获取输入值,在确定输入信息无误后,插入数据库,并且修改餐桌状态,代码如下:

CString userName,orderTime,eatTime,tableId,userPhone,userNumber,remark, query; GetDlgItem(IDC_EDIT_USER_NAME)->GetWindowText(userName); GetDlgItem(IDC_EDIT_ORDER_TIME)->GetWindowText(orderTime); GetDlgItem(IDC_EDIT_EAT_TIME)->GetWindowText(eatTime); GetDlgItem(IDC_EDIT_TABLE_ID)->GetWindowText(tableId); GetDlgItem(IDC_EDIT_USER_PHONE)->GetWindowText(userPhone); GetDlgItem(IDC_EDIT_USER_NUMBER)->GetWindowText(userNumber); GetDlgItem(IDC_EDIT_REMARK)->GetWindowText(remark); if(userName == "" || orderTime == "" || eatTime == "" || tableId == "" || userPhone == "" || userNumber == "" || remark == ""){ MessageBox("录入信息有误,请重新录入"); } else { //连接数据库 MYSQL_RES *res; //这个结构代表返回行的一个查询结果集 MYSQL_ROW sql_row; //一个行数据的类型安全(type-safe)的表示,表示数据行的列 MYSQL myCont; mysql_init(&myCont); int field_count; int row_count; mysql_real_connect(&myCont,"localhost","root","nuli08111314","restaurant",3306,NULL,0); mysql_query(&myCont,"set names gbk"); //设置编码格式 query = "select * from `ks_table_message` where table_id = " + tableId + " and status = '0' and number >=" + userNumber; mysql_query(&myCont, query); //执行SQL语句 res = mysql_store_result(&myCont); row_count = mysql_num_rows(res); if(row_count == 0){ MessageBox("该桌目前无法预定,请更换!"); } else { query = "insert into `ks_order_seat_message`(`table_id`,`user_name`,`order_time`,`eat_time`,`user_phone`,`user_number`,`remark`) values("+tableId+",'"+userName+"','"+orderTime+ "','" + eatTime + "'," + userPhone+","+userNumber+",'"+remark+ "')"; if(!mysql_query(&myCont, query)){ //执行SQL语句 query = "UPDATE `ks_table_message` SET `status`= '1' WHERE `table_id` = " + tableId; mysql_query(&myCont, query); //执行SQL语句 MessageBox("预定成功"); CDialog::OnOK(); } else { MessageBox(query); MessageBox("网络原因,预定失败!"); } } //CString s; //s.Format("%d",row_count); //MessageBox(s); }

功能测试如下图所示 基于MFC的餐饮管理系统(C++实现 后附源码)

4.订座信息查询 订座信息查询,在对话框初始化时,默认将数据库中所有信息搜索并且展示,之后用户提交的查询条件将表中内容清空并且重新赋值。

MYSQL_RES *res; //这个结构代表返回行的一个查询结果集 MYSQL_ROW sql_row; //一个行数据的类型安全(type-safe)的表示,表示数据行的列 MYSQL myCont; mysql_init(&myCont); int field_count; int row_count; mysql_real_connect(&myCont,"localhost","root","nuli08111314","restaurant",3306,NULL,0); mysql_query(&myCont,"set names gbk"); //设置编码格式 int nSel; CString tableId,userName,userPhone, query; GetDlgItem(IDC_EDIT_TABLE_ID)->GetWindowText(tableId); GetDlgItem(IDC_EDIT_USER_PHONE)->GetWindowText(userPhone); GetDlgItem(IDC_EDIT_USER_NAME)->GetWindowText(userName); if(tableId == "" && userName == "" && userPhone == ""){ MessageBox("请填写查询条件!"); }else { if( tableId == ""){ if(userName == ""){ query = "select * from `ks_order_seat_message` where user_phone = "+ userPhone; } else { if(userPhone == ""){ query = "select * from `ks_order_seat_message` where user_name = '"+ userName + "'"; } else { query = "select * from `ks_order_seat_message` where user_name = '"+ userName + "' and user_phone = " + userPhone; } } } else { if(userName == ""){ if(userPhone == ""){ query = "select * from `ks_order_seat_message` where table_id = "+ tableId; } else { query = "select * from `ks_order_seat_message` where table_id = "+ tableId + " and user_phone = "+userPhone; } } else { if(userPhone == "" ){ query = "select * from `ks_order_seat_message` where user_name = '"+ userName + "' and table_id = " + tableId; } else { query = "select * from `ks_order_seat_message` where user_name = '"+ userName + "' and table_id = " + tableId + " and user_phone = " + userPhone; } } } //返回0 查询成功,返回1查询失败 mysql_query(&myCont, query); //执行SQL语句 //MessageBox(query); res = mysql_store_result(&myCont); row_count = mysql_num_rows(res); field_count = mysql_num_fields(res); if(row_count == 0){ MessageBox("未查找到相关数据"); } } m_orderSeatMessageList.DeleteAllItems(); mysql_free_result(res); mysql_close(&myCont); int i = 0; while(sql_row = mysql_fetch_row(res)){ for(int j = 0; j < field_count; j++){ if(j == 0){ m_orderSeatMessageList.InsertItem(i,sql_row[j+1]); } else { m_orderSeatMessageList.SetItemText(i,j,sql_row[j+1]); } } i++; }

同时用户选中提前预定的信息,点击就餐按钮可以省去录入信息的步骤。 代码如下:

void CorderSeatMessageDlg::OnClickListOrderSeatMessage(NMHDR* pNMHDR, LRESULT* pResult) { // TODO: Add your control notification handler code here *pResult = 0; CString strTableId; NMLISTVIEW *pNMListView = (NMLISTVIEW*)pNMHDR; if (-1 != pNMListView->iItem) // 如果iItem不是-1,就说明有列表项被选择 { // 获取被选择列表项第一个子项的文本 strTableId = m_orderSeatMessageList.GetItemText(pNMListView->iItem, 0); // 将选择的语言显示与编辑框中 SetDlgItemText(IDC_EDIT_SELECT_TABLE_ID, strTableId); } } void CorderSeatMessageDlg::OnButtonOrderEat() { // TODO: Add your control notification handler code here CImportBusinessMessageDlg Dlg; GetDlgItem(IDC_EDIT_SELECT_TABLE_ID)->GetWindowText(m_selectTableId); if(m_selectTableId == ""){ MessageBox("请选择提前预定的用户"); } else { Dlg.fromOrderTableId = m_selectTableId; Dlg.DoModal(); CDialog::OnOK(); } }

测试结果如下图所示 基于MFC的餐饮管理系统(C++实现 后附源码) 点击就餐按钮后,测试结果如下图 基于MFC的餐饮管理系统(C++实现 后附源码)

5.就餐 用户点击就餐按钮,则需要重新录入所需要的信息,由后端写入数据库。代码如下:

void CImportBusinessMessageDlg::OnOK() { // TODO: Add extra validation here CString userName,orderTime,eatTime,tableId,userPhone,userNumber,remark, query; GetDlgItem(IDC_EDIT_USER_NAME)->GetWindowText(userName); GetDlgItem(IDC_EDIT_ORDER_TIME)->GetWindowText(orderTime); GetDlgItem(IDC_EDIT_EAT_TIME)->GetWindowText(eatTime); GetDlgItem(IDC_EDIT_TABLE_ID)->GetWindowText(tableId); GetDlgItem(IDC_EDIT_USER_PHONE)->GetWindowText(userPhone); GetDlgItem(IDC_EDIT_USER_NUMBER)->GetWindowText(userNumber); GetDlgItem(IDC_EDIT_REMARK)->GetWindowText(remark); if(userName == "" || eatTime == "" || tableId == "" || userPhone == "" || userNumber == "" || remark == ""){ MessageBox("录入信息有误,请重新录入"); } else { //连接数据库 MYSQL_RES *res; //这个结构代表返回行的一个查询结果集 MYSQL_ROW sql_row; //一个行数据的类型安全(type-safe)的表示,表示数据行的列 MYSQL myCont; mysql_init(&myCont); int field_count; int row_count; mysql_real_connect(&myCont,"localhost","root","nuli08111314","restaurant",3306,NULL,0); mysql_query(&myCont,"set names gbk"); //设置编码格式 query = "select * from `ks_table_message` where table_id = " + tableId + " and status != '2' and number >=" + userNumber; mysql_query(&myCont, query); //执行SQL语句 res = mysql_store_result(&myCont); row_count = mysql_num_rows(res); if(row_count == 0){ MessageBox("该桌目前无法就餐,请更换!"); } else { query = "insert into `ks_business_message`(`table_id`,`user_name`,`order_time`,`eat_time`,`user_phone`,`user_number`,`remark`,`money`,`status`) values("+tableId+",'"+userName+"','"+orderTime+ "','" + eatTime + "'," + userPhone+","+userNumber+",'"+remark+ "' ,0,'0')"; if(!mysql_query(&myCont, query)){ //执行SQL语句 query = "UPDATE `ks_table_message` SET `status`= '2' WHERE `table_id` = " + tableId; mysql_query(&myCont, query); //执行SQL语句 MessageBox("就餐信息录入成功"); CDialog::OnOK(); } else { MessageBox(query); MessageBox("网络原因,就餐信息录入失败!"); } } //CString s; //s.Format("%d",row_count); //MessageBox(s); } }

测试结果如下图所示 基于MFC的餐饮管理系统(C++实现 后附源码) 6.结账 结账功能,用户需要输入餐桌号以及花费的金额,后端判断数据没有问题之后,则进行处理。代码如下:

void CAccountDlg::OnOK() { // TODO: Add extra validation here CString tableId,spendMoney, query; GetDlgItem(IDC_EDIT_SPEND_MONEY)->GetWindowText(spendMoney); GetDlgItem(IDC_EDIT_TABLE_ID)->GetWindowText(tableId); if(spendMoney == "" || tableId == ""){ MessageBox("录入信息不可以为空,请重新录入"); } else { //连接数据库 MYSQL_RES *res; //这个结构代表返回行的一个查询结果集 MYSQL_ROW sql_row; //一个行数据的类型安全(type-safe)的表示,表示数据行的列 MYSQL myCont; mysql_init(&myCont); int field_count; int row_count; mysql_real_connect(&myCont,"localhost","root","nuli08111314","restaurant",3306,NULL,0); mysql_query(&myCont,"set names gbk"); //设置编码格式 query = "select * from `ks_table_message` where table_id = " + tableId + " and status = '2'"; mysql_query(&myCont, query); //执行SQL语句 res = mysql_store_result(&myCont); row_count = mysql_num_rows(res); if(row_count == 0){ MessageBox("该桌无人就餐,无法结账,请检查!"); } else { query = "UPDATE `ks_business_message` SET `status` = '1' ,`money`= " +spendMoney +" where `table_id` = " + tableId; if(!mysql_query(&myCont, query)){ //执行SQL语句 query = "UPDATE `ks_table_message` SET `status`= '0' WHERE `table_id` = " + tableId; mysql_query(&myCont, query); //执行SQL语句 query = "DELETE FROM `ks_order_seat_message` WHERE table_id = " + tableId; mysql_query(&myCont, query); //执行SQL语句 MessageBox("成功结账"); CDialog::OnOK(); } else { MessageBox(query); MessageBox("网络原因,结账失败!"); } } } CDialog::OnOK(); }

测试结果如下图所示 基于MFC的餐饮管理系统(C++实现 后附源码)

7.业务信息查询 从后端获取数据,将数据在前端展示,代码如下:

BOOL CBusinessMessageDlg::OnInitDialog() { CDialog::OnInitDialog(); // TODO: Add extra initialization here CRect rect; // 获取编程语言列表视图控件的位置和大小 m_businessMessageList.GetClientRect(&rect); // 为列表视图控件添加全行选中和栅格风格 m_businessMessageList.SetExtendedStyle(m_businessMessageList.GetExtendedStyle() | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES); // 为列表视图控件添加三列 m_businessMessageList.InsertColumn(0, _T("餐桌ID"), LVCFMT_CENTER, rect.Width()/9, 0); m_businessMessageList.InsertColumn(1, _T("顾客姓名"), LVCFMT_CENTER, rect.Width()/9, 1); m_businessMessageList.InsertColumn(2, _T("订座时间"), LVCFMT_CENTER, rect.Width()/9, 2); m_businessMessageList.InsertColumn(3, _T("就餐时间"), LVCFMT_CENTER, rect.Width()/9, 3); m_businessMessageList.InsertColumn(4, _T("消费金额"), LVCFMT_CENTER, rect.Width()/9, 4); m_businessMessageList.InsertColumn(5, _T("联系方式"), LVCFMT_CENTER, rect.Width()/9, 5); m_businessMessageList.InsertColumn(6, _T("用餐人数"), LVCFMT_CENTER, rect.Width()/9, 6); m_businessMessageList.InsertColumn(7, _T("备注"), LVCFMT_CENTER, rect.Width()/9, 7); m_businessMessageList.InsertColumn(8, _T("状态"), LVCFMT_CENTER, rect.Width()/9, 8); MYSQL_RES *res; //这个结构代表返回行的一个查询结果集 MYSQL_ROW sql_row; //一个行数据的类型安全(type-safe)的表示,表示数据行的列 MYSQL myCont; mysql_init(&myCont); int field_count; int row_count; if(mysql_real_connect(&myCont,"localhost","root","nuli08111314","restaurant",3306,NULL,0))//连接成功 { mysql_query(&myCont,"set names gbk"); //设置编码格式 //返回0 查询成功,返回1查询失败 mysql_query(&myCont, "select * from ks_business_message"); //执行SQL语句 res = mysql_store_result(&myCont); row_count = mysql_num_rows(res); field_count = mysql_num_fields(res); int i = 0; while(sql_row = mysql_fetch_row(res)){ for(int j = 0; j < field_count; j++){ if(j == 0){ m_businessMessageList.InsertItem(i,sql_row[j+1]); } else if(j == field_count-2){ if(atoi(sql_row[j+1]) == 0) { m_businessMessageList.SetItemText(i,j,"就餐"); } else { m_businessMessageList.SetItemText(i,j,"结账"); } } else { m_businessMessageList.SetItemText(i,j,sql_row[j+1]); } } i++; } mysql_free_result(res); mysql_close(&myCont); } return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE }

测试结果如下图所示 基于MFC的餐饮管理系统(C++实现 后附源码) 写在最后 基本内容展示完毕,这是学完面向对象之后做的一个小型系统,全组两个人,尽心尽力做到我们所认为的最好,今天放到平台上也是希望大神们能给一些改进意见,整个包可以在下面下载。

基于MFC的餐饮管理系统(C++实现 后附源码)相关教程 基于JavaWeb的旅游项目--导航功能

基于JavaWeb的旅游项目--导航功能 文章目录 1、导航功能---界面展示 2、导航后台代码开发 (1)CategoryServiceTest (2)CategoryService (3)CategoryDao (4)CategoryServlet 3、导航前台代码开发 header.jsp 4、导航优化 (1)redis缓存json (2)redis

基于协同过滤,NMF和Baseline的推荐算法

基于协同过滤,NMF和Baseline的推荐算法 为什么80%的码农都做不了架构师? 老早就想整理一篇推荐算法的入门博文,今天抽空写一下。本文以电影推荐系统为例,简单地介绍基于协同过滤,PMF概率矩阵分解,NMF非负矩阵分解和Baseline的推荐系统算法。NMF的实现具

基于Vue.js的2048小游戏的实现

基于Vue.js的2048小游戏的实现 基于Vue.js的2048小游戏的实现 游戏规则 一、准备工作 1. 项目结构 2. 入口组件App.vue 3. 路由文件router - index.js 二、界面布局 1. 游戏盘背景 Background.vue 2. 游戏界面的头部信息 3. 游戏界面主体的编写 总结 游戏规则

Vs2017开发简单的MFC程序

Vs2017开发简单的MFC程序 今天我们编写简单的MFC窗口文件,使用软件VS2017。然后是vs2017的cl.exe和link.exe编译连接。 下面省略安装vs2017安装过程。 目录 一、vs2017编写简单mfc程序 二、使用cl.exe和link.exe工具运行window窗口程序 三、使用cl.exe和link.

SSM----Mybatis的高级查询之 一对一、一对多、多对多查询基于控

SSM----Mybatis的高级查询之 一对一、一对多、多对多查询基于控制台的实现完整案例 1、Mybatis的Dao接口动态代理实现CRUD(增、删、改、查)案例 2、项目开发工具: (1) jdk1.8.0_92 (2) mysql-5.5.45-winx64 (3) Navicat_for_MySQL_11.0.10 (4) IDEA-2019.3.

基于JavaWeb的旅游项目--搜索分页功能

基于JavaWeb的旅游项目--搜索分页功能 文章目录 1、搜索功能---界面展示 2、搜索与分页的后台代码 RouteServiceTest.java RouteService.java RouteDao.java RouteServlet.java MyBatis的多参数传递 3、搜索与分页的前台代码 header.jsp 编写搜索框架事件 sear

cl.exe以及linker.exe编译连接windows API、MFC程序

cl.exe以及linker.exe编译连接windows API、MFC程序 文章目录 一、完成一个简单的MFC程序 1.建立MFC工程文件 1) 使用工具 2) 创建项目 2.编写代码 1)代码 2)运行窗口 二、使用cl.exe、linker.exe使用编译连接 1.设置环境变量 2.使用命令行工具编译链接Wind

基于JavaWeb的旅游项目--分类分页功能

基于JavaWeb的旅游项目--分类分页功能 文章目录 1、分类功能---界面展示 2、分类分页的后台代码 RouteServiceTest.java RouteService.java RouteDao.java Route2Servlet.java 3、分类分页的前台代码 header.jsp route_list.jsp 如果导入的js文件出现中文乱码



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3