餐饮管理系统实现功能:
①利用MFC的向导,创建基于对话框的应用程序,添加按钮、编辑框等控件;
②用文件保存餐桌信息,包括餐桌编号、座位数、状态(0:空闲;1:已订;2:就餐);可以按座位数和餐桌状态查询;
③用文件管理餐厅业务信息,包括:顾客姓名、订座时间、就餐时间、金额、餐桌编号、联系电话、用餐人数、备注;
④点击“订座”按钮,录入订座信息顾客姓名、订座时间、就餐时间、餐桌编号、联系电话、用餐人数、备注等,注意订座成功后修改餐桌信息文件中的餐桌状态,以保证餐桌编号不能重复预订或就餐;
⑤可以按顾客姓名、联系电话、餐桌编号等信息查询订座信息;
⑥点击“就餐”按钮可以录入餐厅业务信息;
⑦点击“结账”,即可删除该桌的信息或将其状态改为结账;
⑧订座查询后,将订座信息关联到“就餐”信息录入界面,省去一部分信息的录入工作。
本系统需要实现的功能有餐桌信息的管理,餐厅业务信息管理,预定座位管理,就餐结账等。系统存储数据采用MySQL数据库,根据不同的功能,对于用户产生的消息以及行为产生不同的响应,同时对数据库进行增删改查等一系列操作,将结果重新展示至界面。
一、系统需求分析:
开发餐厅就餐管理系统,主要实现餐桌信息、座位管理、就餐、结账、业务信息等内容。
餐桌信息模块实现查看餐桌信息与录入餐桌信息的功能,方便使用者在为客人服务时能及时查看座位的预定情况,录入餐桌信息时要尽可能详细,方便后期管理和使用。
座位管理模块实现订座与订座信息查询的功能,在有客人来时,可以为客人预定餐桌,并记录餐桌信息。订座信息查询方便使用者直接查看座位预定情况并直接进入就餐环节。
就餐模块录入就餐人的信息,在原来订座的基础上方便客人的非预定就餐。
结账模块在客人用完餐之后能准确的结账同时方便餐厅信息管理。
业务信息模块,可随时查看餐厅的餐桌信息、订座信息以及是否结账等信息,方便使用者的管理。
二、功能设计
1.餐桌信息管理
餐桌信息管理在数据库中的字段有餐桌编号,餐桌人数,餐桌状态,其中餐桌状态采用enum数据格式存储,0表示空闲,1表示预定,2表示就餐,在录入信息模块,用户需要填写必要的信息,点击确定按钮后,将所填信息数据录入数据库中存储,在后端将用户所选择的餐桌状态对应于0,1,2插入数据库。用户点击查看餐桌信息时,后端从数据库中查找所有餐桌信息,并将展示至前端界面。并且支持用户通过某些字段进行查询。
2.餐厅业务信息管理
餐厅业务信息管理主要展示餐厅的就餐记录,用户进行就餐之后将数据存储至数据库,字段包含顾客姓名、订座时间、就餐时间、金额、餐桌编号、联系电话、用餐人数、备注以及订单状态,状态分为就餐和结账,就餐时对应餐桌状态为就餐,确保数据的准确性,用户结账之后将状态改为结账,并且餐桌状态改为空闲。当用户填写就餐信息时,后端将数据存储至数据库中,金额一栏为空,待结账时,将金额填写至数据库中。
3.预定座位管理
预定座位管理,主要有两个模块,一是预定座位,二是查看目前预定座位的信息。预定座位需要填写相关的信息,并且当就餐人数大于餐桌人数时无法预定,预定之后,将预定信息插入至数据库中,并且修改餐桌状态为预定,确保一个桌子不会同时被预定。查看目前预定座位信息则是后端获取预定信息后,展示至前端。同时用户可以选择直接在预定界面进行就餐,可以省去录入信息的步骤,方便使用。
4.就餐结账
就餐人群分为两部分,一是无预订人群,此类人需要重新填写各个字段信息,且字段不可以为空,数据插入后后端将字段信息写入数据库,并且修改相关联的字段,二是已经预定的人群,此类人可以通过预定信息查询来直接预定。结账时则输入餐桌的id以及花费金额即可结账。修改餐桌状态以及业务信息的状态。此时如果对应餐桌ID未就餐,则提示无法结账,操作失误。
三、界面设计
本系统尽量采取最简洁的设计,使用户能方便操作,下面给出部分设计页面。
四、系统流程图
五、核心代码展示
下面给出几个主要模块的代码及实现页面
数据库的连接核心代码:
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);
测试结果如下图所示
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++;
}
功能测试如下图所示
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);
}
功能测试如下图所示
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();
}
}
测试结果如下图所示
点击就餐按钮后,测试结果如下图
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);
}
}
测试结果如下图所示
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();
}
测试结果如下图所示
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的餐饮管理系统