ODBC + WIN32 API 访问MYSQL 数据库实现简单QQ用户注册和登录
http://blog.csdn.net/dai_jing/article/details/8231645

// datadase odbc1.cpp : 定义应用程序的入口点。
//
#include "stdafx.h"
#include "datadase odbc1.h"
#include "resource.h"
#include "string.h"
#include "sql.h"
#include "sqlext.h"
#include "sqltypes.h"void Save(HWND hwnd);void Login(HWND hwnd);
#define LOGIN_TIMEOUT 30
#define MAXBUFLEN 255
#define CHECKDBSTMTERROR(hwnd,result,hstmt)   if(SQL_ERROR==result){ShowDBStmtError(hwnd,hstmt);return;}
#define MAX_LOADSTRING 100
// 全局变量:
HINSTANCE hInst;        // 当前实例
TCHAR szTitle[MAX_LOADSTRING];     // 标题栏文本
TCHAR szWindowClass[MAX_LOADSTRING];   // 主窗口类名
HWND ghdlg;
// 此代码模块中包含的函数的前向声明:INT_PTR CALLBACK About1(HWND, UINT, WPARAM, LPARAM);void DBTest(HWND hwnd);
int APIENTRY _tWinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPTSTR    lpCmdLine,int       nCmdShow)
{  DialogBox(hInst, MAKEINTRESOURCE(IDD_DIALOG1), NULL, About1);return 0;
}//
//  函数: MyRegisterClass()
//
//  目的: 注册窗口类。
//
//  注释:
//
//    仅当希望
//    此代码与添加到 Windows 95 中的“RegisterClassEx”
//    函数之前的 Win32 系统兼容时,才需要此函数及其用法。调用此函数十分重要,
//    这样应用程序就可以获得关联的
//    “格式正确的”小图标。
////
//   函数: InitInstance(HINSTANCE, int)
//
//   目的: 保存实例句柄并创建主窗口
//
//   注释:
//
//        在此函数中,我们在全局变量中保存实例句柄并
//        创建和显示主程序窗口。
////
//  函数: WndProc(HWND, UINT, WPARAM, LPARAM)
//
//  目的: 处理主窗口的消息。
//
//  WM_COMMAND - 处理应用程序菜单
//  WM_PAINT - 绘制主窗口
//  WM_DESTROY - 发送退出消息并返回
//
// void ShowDBError(HWND hwnd,SQLSMALLINT type,SQLHANDLE sqlHandle)
{WCHAR pStatus[10], pMsg[101];SQLSMALLINT SQLmsglen;TCHAR error[200] = {0};SQLINTEGER SQLerr;long erg2 = SQLGetDiagRec(type, sqlHandle,1,(SQLWCHAR *)pStatus,&SQLerr,(SQLWCHAR*)pMsg,100,&SQLmsglen);wsprintf(error,L"%s (%d)\n",pMsg,(int)SQLerr);MessageBox(hwnd,error,TEXT("数据库执行错误"),MB_ICONERROR|MB_OK);
}
void ShowDBConnError(HWND hwnd,SQLHDBC hdbc)
{ShowDBError(hwnd,SQL_HANDLE_DBC,hdbc);
}
void ShowDBStmtError(HWND hwnd,SQLHSTMT hstmt)
{ShowDBError(hwnd,SQL_HANDLE_STMT,hstmt);
}INT_PTR CALLBACK About1(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{ghdlg=hDlg;UNREFERENCED_PARAMETER(lParam);switch (message){case WM_INITDIALOG:return (INT_PTR)TRUE;case WM_COMMAND:{if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL){EndDialog(hDlg, LOWORD(wParam));return (INT_PTR)TRUE;}switch(LOWORD(wParam)){case IDC_BUTTON2://保存{Save(hDlg);break;}case IDC_BUTTON1://确认登陆{Login(hDlg);break;}default:break;}}}return (INT_PTR)FALSE;
}void Save(HWND hwnd)
{SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER=127.0.0.1;UID=root;PWD=root;DATABASE=database2;CharSet=gb2312;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);return;}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);//SQL_NTS telling the function the previous parameter is NullTerminated String,//please alculate the string length for meSQLWCHAR username[256];SQLWCHAR password[256];GetDlgItemText(hwnd,IDC_EDIT1,username,sizeof(username)/sizeof(SQLWCHAR));GetDlgItemText(hwnd,IDC_EDIT2,password,sizeof(password)/sizeof(SQLWCHAR));SQLWCHAR sql[256];wsprintf(sql,TEXT("insert into t_user1(FUserName,FPassWord) values('%s','%s')"),username,password);if (*username==NULL ||*password==NULL){MessageBox(hwnd,TEXT("有户名或密码不为空!"),TEXT("注册"),MB_OK|MB_ICONERROR);return;}result = SQLPrepare(hstmt,(SQLWCHAR*)sql,SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);MessageBox(hwnd,TEXT("保存成功"),TEXT("注册"),MB_OK|MB_ICONINFORMATION);SetDlgItemText(hwnd,IDC_EDIT1,NULL);SetDlgItemText(hwnd,IDC_EDIT2,NULL);
}void Login(HWND hwnd)
{SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=database2;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);return;}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);//SQL_NTS telling the function the previous parameter is NullTerminated String,//please alculate the string length for meresult = SQLPrepare(hstmt,(SQLWCHAR*)L"select FUserName,FPassWord from t_user1",SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;SQLWCHAR Inputusername[20];SQLWCHAR Inputpassword[20];GetDlgItemText(hwnd,IDC_EDIT3,Inputusername,30);GetDlgItemText(hwnd,IDC_EDIT4,Inputpassword,30);int found=1;while (SQLFetch(hstmt)!=SQL_NO_DATA_FOUND){SQLWCHAR username[20];SQLGetData(hstmt,1,SQL_C_WCHAR,username,30,&cbsatid);SQLWCHAR password[20];SQLGetData(hstmt,2,SQL_C_WCHAR,password,30,&cbsatid);if (lstrcmpW(Inputpassword,password)==0){if (lstrcmpW(Inputusername,username)==0){MessageBox(hwnd,TEXT("登陆成功"),TEXT("login"),MB_OK|MB_ICONINFORMATION);SetDlgItemText(hwnd,IDC_EDIT4,NULL);found=0;break;}}}if (1==found){MessageBox(hwnd,TEXT("登陆失败"),TEXT("login"),MB_OK|MB_ICONERROR);}SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);}

win32 sdk编程如何使用ado操作数据库

本人需要在win32 sdk环境下操作sql server数据库,没有了MFC,不知道如何开始动手。
哪位提供一个简单的SDK下连接数据库、查询、插入、删除、修改的示例代码,优先考虑ado,odbc也可

以。
或则提供参考资料链接也行。

用ADO的相关代码:
//stdafx.h文件中添加:
#import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename

("EOF","adoEOF")

//利用ADO访问数据库代码:
try
{
_RecordsetPtr m_pRs;
_ConnectionPtr m_pConn;

CoInitialize(NULL);

m_pConn.CreateInstance(__uuidof(Connection));
m_pRs.CreateInstance(__uuidof(Recordset));

//设置服务器端游标
m_pConn->CursorLocation = adUseServer;//adUseClient;adUseNone

//连接ACCESS数据库
                  //m_pConn->Open(L"Provider=Microsoft.Jet.OLEDB.4.0;Data

Source=test.mdb;Persist Security Info=False",
//  L"",L"",adOpenUnspecified);
//连接ORACLE数据库
                  m_pConn->Open(L"Provider=OraOLEDB.Oracle.1;User ID=tyz;password=tyz;Data

Source=sfhctest;Persist Security Info=False",
L"",L"",adOpenUnspecified);

m_pRs->PutRefActiveConnection(m_pConn);
m_pRs->Open("select rkxh,jmzh,xm from rkxx where rownum <=10",_variant_t((IDispatch*)

m_pConn,true),
adOpenDynamic,adLockOptimistic,adCmdUnknown);

while(!m_pRs->adoEOF)
{
AfxMessageBox((_bstr_t)m_pRs->GetCollect("rkxh"));
m_pRs->MoveNext();
}
m_pRs=NULL;
m_pConn=NULL;
CoUninitialize();
}
catch(_com_error &e)
{
AfxMessageBox(e.ErrorMessage());
}

有ODBC API函数!

http://www.vchelp.net/wyy/tour/odbc_api.asp#_Toc50053547

laiyiling(最熟悉的陌生人) 推荐的文章非常好,只是ODBC需要配置DSN,我个人还是希望最好有C语言

操作oledb api的资料,请大家继续推荐。谢谢。

#import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename

("EOF","adoEOF")
是C++的用法吗?我不熟悉C++,能有详细一点的介绍C++访问Com接口方法的资料也行。

推荐两篇关于COM的好文章,一篇是关于调用的,另一篇则是关于编写COM的。
http://www.vckbase.com/document/viewdoc/?id=212
http://www.vckbase.com/document/viewdoc/?id=213

#import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename

("EOF","adoEOF")
就是表示引入dll,然后修给它的名字空间,以防止冲突

http://download.csdn.net/download/radiorama/5232979

// Test.cpp : Defines the entry point for the application.
//
#include "stdafx.h"
#include "resource.h"
#include "stdio.h"
#include "time.h"
#include "ListView.h"
#define MAX_LOADSTRING 100// Global Variables:
HINSTANCE hInst;                                // current instance
TCHAR szTitle[MAX_LOADSTRING];                              // The title bar text
TCHAR szWindowClass[MAX_LOADSTRING];                                // The title bar text// Foward declarations of functions included in this code module:
ATOM                MyRegisterClass(HINSTANCE hInstance);
BOOL                InitInstance(HINSTANCE, int);
LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK    About(HWND, UINT, WPARAM, LPARAM);int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR     lpCmdLine,int       nCmdShow)
{// TODO: Place code here.MSG msg;HACCEL hAccelTable;// Initialize global stringsLoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);LoadString(hInstance, IDC_TEST, szWindowClass, MAX_LOADSTRING);MyRegisterClass(hInstance);// Perform application initialization:if (!InitInstance (hInstance, nCmdShow)) {return FALSE;}hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_TEST);// Main message loop:while (GetMessage(&msg, NULL, 0, 0)) {if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) {TranslateMessage(&msg);DispatchMessage(&msg);}}return msg.wParam;
}//
//  FUNCTION: MyRegisterClass()
//
//  PURPOSE: Registers the window class.
//
//  COMMENTS:
//
//    This function and its usage is only necessary if you want this code
//    to be compatible with Win32 systems prior to the 'RegisterClassEx'
//    function that was added to Windows 95. It is important to call this function
//    so that the application will get 'well formed' small icons associated
//    with it.
//
ATOM MyRegisterClass(HINSTANCE hInstance)
{WNDCLASSEX wcex;wcex.cbSize = sizeof(WNDCLASSEX); wcex.style          = CS_HREDRAW | CS_VREDRAW;wcex.lpfnWndProc = (WNDPROC)WndProc;wcex.cbClsExtra     = 0;wcex.cbWndExtra        = 0;wcex.hInstance     = hInstance;wcex.hIcon         = LoadIcon(hInstance, (LPCTSTR)IDI_TEST);wcex.hCursor      = LoadCursor(NULL, IDC_ARROW);wcex.hbrBackground   = (HBRUSH)(COLOR_WINDOW);wcex.lpszMenuName = (LPCSTR)IDC_TEST;wcex.lpszClassName  = szWindowClass;wcex.hIconSm       = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL);return RegisterClassEx(&wcex);
}//
//   FUNCTION: InitInstance(HANDLE, int)
//
//   PURPOSE: Saves instance handle and creates main window
//
//   COMMENTS:
//
//        In this function, we save the instance handle in a global variable and
//        create and display the main program window.
//
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{HWND hWnd;hInst = hInstance; // Store instance handle in our global variablehWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);if (!hWnd){return FALSE;}ShowWindow(hWnd, nCmdShow);UpdateWindow(hWnd);return TRUE;
}//
//  FUNCTION: WndProc(HWND, unsigned, WORD, LONG)
//
//  PURPOSE:  Processes messages for the main window.
//
//  WM_COMMAND  - process the application menu
//  WM_PAINT    - Paint the main window
//  WM_DESTROY  - post a quit message and return
//
//
HWND  cb,tv;
int ids;
char pst[10];
BOOL InitTreeViewImageLists(HWND hwndTV)
{ /* HIMAGELIST himl;  // handle to image list HBITMAP hbmp;     // handle to bitmap if ((himl = ImageList_Create(16, 16, ILC_COLOR24 | ILC_MASK,1,256)) == NULL) return FALSE; hbmp = LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP2)); if (ImageList_AddMasked (himl, hbmp, RGB (255, 255, 0)) == -1){return FALSE;}DeleteObject(hbmp);
*/HIMAGELIST  himlSmall;HIMAGELIST  himlLarge;  himlSmall = ImageList_Create(16, 16, ILC_COLORDDB | ILC_MASK, 1, 0);himlLarge = ImageList_Create(64, 64, ILC_COLORDDB | ILC_MASK, 1, 0);if (himlSmall && himlLarge){HICON hIcon;//set up the large image listhIcon = LoadIcon(hInst, MAKEINTRESOURCE(IDI_TEST));ImageList_AddIcon(himlLarge, hIcon);ImageList_AddIcon(himlSmall, hIcon);//  ListView_SetImageList(hwndListViewswq, himlSmall, LVSIL_SMALL);//   ListView_SetImageList(hwndListViewswq, himlLarge, LVSIL_NORMAL);}TreeView_SetImageList(hwndTV, himlSmall, TVSIL_NORMAL); return true;
}void insert()
{TVINSERTSTRUCT head = {0};head.item.mask = TVIF_TEXT|TVIF_PARAM|TVIF_IMAGE | TVIF_SELECTEDIMAGE;head.item.pszText = "管理信息系统";head.item.iImage= 0;head.item.iSelectedImage =0;HTREEITEM two = TreeView_InsertItem(tv,&head);TreeView_SelectItem(tv,two);head.item.mask = TVIF_TEXT|TVIF_PARAM|TVIF_IMAGE | TVIF_SELECTEDIMAGE;head.item.pszText = "游戏光碟";head.item.iImage= 0;head.item.iSelectedImage =0;head.hParent = two;HTREEITEM game = TreeView_InsertItem(tv,&head);head.item.mask = TVIF_TEXT|TVIF_PARAM|TVIF_IMAGE | TVIF_SELECTEDIMAGE;head.item.pszText = "四国军旗";head.item.iImage= 0;head.item.iSelectedImage =0;head.hParent = game;HTREEITEM siguo = TreeView_InsertItem(tv,&head);head.item.mask = TVIF_TEXT|TVIF_PARAM|TVIF_IMAGE | TVIF_SELECTEDIMAGE;head.item.pszText = "国际象棋";head.item.iImage= 2;head.item.iSelectedImage =2;head.hParent = game;HTREEITEM xiangqi = TreeView_InsertItem(tv,&head);head.item.mask = TVIF_TEXT|TVIF_PARAM|TVIF_IMAGE | TVIF_SELECTEDIMAGE;head.item.pszText = "中国象棋";head.item.iImage= 6;head.item.iSelectedImage =6;head.hParent = game;HTREEITEM cxq = TreeView_InsertItem(tv,&head);head.item.mask = TVIF_TEXT|TVIF_PARAM|TVIF_IMAGE | TVIF_SELECTEDIMAGE;head.item.pszText = "物资管理系统";head.item.iImage= 8;head.item.iSelectedImage =8;head.hParent = two;HTREEITEM wuzi = TreeView_InsertItem(tv,&head);head.item.mask = TVIF_TEXT|TVIF_PARAM|TVIF_IMAGE | TVIF_SELECTEDIMAGE;head.item.pszText = "定单查看";head.item.iImage= 3;head.item.iSelectedImage =3;head.hParent = wuzi;HTREEITEM dingdan = TreeView_InsertItem(tv,&head);head.item.mask = TVIF_TEXT|TVIF_PARAM|TVIF_IMAGE | TVIF_SELECTEDIMAGE;head.item.pszText = "今天定单查看";head.item.iImage= 5;head.item.iSelectedImage =5;head.hParent = dingdan;HTREEITEM nowdingdan = TreeView_InsertItem(tv,&head);head.item.mask = TVIF_TEXT|TVIF_PARAM|TVIF_IMAGE | TVIF_SELECTEDIMAGE;head.item.pszText = "以前定单查看";head.item.iImage= 5;head.item.iSelectedImage =5;head.hParent = dingdan;HTREEITEM olddingdan = TreeView_InsertItem(tv,&head);//  TreeView_Expand(tv,wuzi,TVE_EXPAND);head.item.mask = TVIF_TEXT|TVIF_PARAM|TVIF_IMAGE | TVIF_SELECTEDIMAGE;head.item.pszText = "定单添加";head.item.iImage= 3;head.item.iSelectedImage =3;head.hParent = wuzi;HTREEITEM dingdanadd = TreeView_InsertItem(tv,&head);head.item.mask = TVIF_TEXT|TVIF_PARAM|TVIF_IMAGE | TVIF_SELECTEDIMAGE;head.item.pszText = "定单修改";head.item.iImage= 3;head.item.iSelectedImage =3;head.hParent = wuzi;HTREEITEM dingdanupdate = TreeView_InsertItem(tv,&head);head.item.mask = TVIF_TEXT|TVIF_PARAM|TVIF_IMAGE | TVIF_SELECTEDIMAGE;head.item.pszText = "定单删除";head.item.iImage= 3;head.item.iSelectedImage =3;head.hParent = wuzi;HTREEITEM dingdandelete = TreeView_InsertItem(tv,&head);head.item.mask = TVIF_TEXT|TVIF_PARAM|TVIF_IMAGE | TVIF_SELECTEDIMAGE;head.item.pszText = "网络视频";head.item.iImage= 5;head.item.iSelectedImage =5;head.hParent = two;HTREEITEM shipin = TreeView_InsertItem(tv,&head);head.item.mask = TVIF_TEXT|TVIF_PARAM|TVIF_IMAGE | TVIF_SELECTEDIMAGE;head.item.pszText = "在线会议";head.item.iImage= 4;head.item.iSelectedImage =4;head.hParent = shipin;HTREEITEM huiyi = TreeView_InsertItem(tv,&head);head.item.mask = TVIF_TEXT|TVIF_PARAM|TVIF_IMAGE | TVIF_SELECTEDIMAGE;head.item.pszText = "消息群发";head.item.iImage= 4;head.item.iSelectedImage =4;head.hParent = shipin;HTREEITEM xiaoxi = TreeView_InsertItem(tv,&head);head.item.mask = TVIF_TEXT|TVIF_PARAM|TVIF_IMAGE | TVIF_SELECTEDIMAGE;head.item.pszText = "在线留言";head.item.iImage= 4;head.item.iSelectedImage =4;head.hParent = shipin;HTREEITEM liuyan = TreeView_InsertItem(tv,&head);TreeView_Expand(tv,two,TVE_EXPAND);}DWORD       dwwStyle;
HWND R1,R2;
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{COLORREF   clrBk   =RGB(255, 255, 255);
COLORREF    clrBkt  =RGB(88, 44, 44);
char pstr[256]={0};        //_variant_t p;
DBCONNECT *ptr;
char *ppsp,ioio[100];
_RecordsetPtr m_pRecordset;
HRESULT hr;LVITEM item = {0},items = {0};int sele,ssp;int wmId, wmEvent;PAINTSTRUCT ps;HDC hdc;TCHAR szHello[MAX_LOADSTRING];LoadString(hInst, IDS_HELLO, szHello, MAX_LOADSTRING);HWND btn_HD;
_variant_t lll;
//_variant_t lll;bool st;memset (pstr, 0, sizeof(pstr));// _bstr_t varSource="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D.mdb";
//_bstr_t varSource="Data Source=myServerAddress;Initial Catalog=myDataBase;User Id=myUsername;Password=myPassword;" //_ConnectionPtr m_pConnection; switch (message) {case WM_CREATE:cb = CreateWindow( "COMBOBOX",   // predefined class NULL,       // button text WS_VISIBLE | WS_CHILD |CBS_DROPDOWN|CBS_AUTOHSCROLL|CBS_SORT,  // styles //  CBS_DROPDOWN|CBS_HASSTRINGS,// Size and position values are given explicitly, because // the CW_USEDEFAULT constant gives zero values for buttons. 0,         // starting x position 0,         // starting y position 100,        // button width 200,        // button height hWnd,       // parent window NULL,  hInst,// No menu // (HINSTANCE) GetWindowLong(hwnd, GWL_HINSTANCE), NULL);         CreateWindow( "BUTTON",   // predefined class "添加项目",       // button text WS_VISIBLE | WS_CHILD|BS_PUSHBUTTON,//| BS_OWNERDRAW ,  // styles 110,         // starting x position 0,         // starting y position 100,        // button width 20,        // button height hWnd,       // parent window (HMENU)123,  hInst,// No menu NULL);  R1= CreateWindow( "BUTTON",   // predefined class "图标",       // button text WS_VISIBLE | WS_CHILD|BS_AUTORADIOBUTTON ,  // styles 360,         // starting x position 310,         // starting y position 50,        // button width 20,        // button height hWnd,       // parent window (HMENU)44441,  hInst,// No menu NULL);  R2 = CreateWindow( "BUTTON",   // predefined class "列表",       // button text WS_VISIBLE | WS_CHILD|BS_AUTORADIOBUTTON ,  // styles 300,         // starting x position 310,         // starting y position 50,        // button width 20,        // button height hWnd,       // parent window (HMENU)44442,  hInst,// No menu NULL);  btn_HD = CreateWindow( "BUTTON",   // predefined class "加载数据",       // button text WS_VISIBLE | WS_CHILD|BS_PUSHBUTTON ,  // styles 110,         // starting x position 20,         // starting y position 100,        // button width 20,        // button height hWnd,       // parent window (HMENU)1231,  hInst,// No menu NULL);     CreateWindow( "BUTTON",   "删除",       // button text WS_VISIBLE | WS_CHILD|BS_PUSHBUTTON ,  // styles // Size and position values are given explicitly, because // the CW_USEDEFAULT constant gives zero values for buttons. 210,         // starting x position 0,         // starting y position 100,        // button width 20,        // button height hWnd,       // parent window (HMENU)124,  hInst,// No menu // (HINSTANCE) GetWindowLong(hwnd, GWL_HINSTANCE), NULL);    tv = CreateWindowEx(        WS_EX_CLIENTEDGE|LVS_EX_GRIDLINES,WC_TREEVIEW,"Tree View",WS_CHILD | WS_VISIBLE | TVS_HASLINES | TVS_LINESATROOT |TVS_HASBUTTONS | TVS_SHOWSELALWAYS,580, 0, 300, 400,hWnd, NULL,hInst, NULL);
TreeView_SetBkColor(tv,clrBk);
TreeView_SetTextColor(tv,clrBkt
);InitTreeViewImageLists(tv);
SendMessage(R2,BM_SETCHECK,1,0L);insert();CreateListView(hWnd, hInst,400,200,2,100);ListView_SetItemState(hwndListViewswq,0,LVIS_SELECTED,LVIS_SELECTED);
ListView_SetExtendedListViewStyle(hwndListViewswq,LVS_EX_FULLROWSELECT|LVS_EX_CHECKBOXES|LVS_EX_GRIDLINES);item.mask = LVIF_TEXT;       // 文字item.cchTextMax = MAX_PATH;       // 文字长度item.iItem = 0;item.iSubItem = 0;item.pszText = "1001";SendMessage(hwndListViewswq, LVM_INSERTITEM, 0, (LPARAM)&item);item.mask = LVIF_TEXT;       // 文字item.cchTextMax = MAX_PATH;       // 文字长度item.iItem = 0;item.iSubItem = 1;item.pszText = "Win32程序设计";ListView_SetItem(hwndListViewswq,&item);item.mask = LVIF_TEXT;       // 文字item.cchTextMax = MAX_PATH;       // 文字长度item.iItem = 0;item.iSubItem = 2;item.pszText = "188";SendMessage(hwndListViewswq, LVM_SETITEM, 0, (LPARAM)&item);item.mask = LVIF_TEXT;       // 文字item.cchTextMax = MAX_PATH;       // 文字长度item.iItem = 0;item.iSubItem = 3;item.pszText = "65";SendMessage(hwndListViewswq, LVM_SETITEM, 0, (LPARAM)&item);break;
//  case WM_CTLCOLORBTN:  //   return (LRESULT)CreateSolidBrush(RGB(0, 255, 0));  //    break;      case WM_COMMAND:wmId    = LOWORD(wParam); wmEvent = HIWORD(wParam); // Parse the menu selections:switch (wmId){case 44442:
dwwStyle = GetWindowLong(hwndListViewswq, GWL_STYLE);//鑾峰彇褰撳墠绐楀彛style
dwwStyle &= ~LVS_TYPEMASK; //娓呴櫎鏄剧ず鏂瑰紡浣?
dwwStyle |= LVS_REPORT; //璁剧疆style
SetWindowLong(hwndListViewswq, GWL_STYLE, dwwStyle);//璁剧疆style
ListView_SetExtendedListViewStyle(hwndListViewswq,LVS_EX_FULLROWSELECT|LVS_EX_CHECKBOXES|LVS_EX_GRIDLINES);break;case 44441:
dwwStyle = GetWindowLong(hwndListViewswq, GWL_STYLE);//鑾峰彇褰撳墠绐楀彛style
dwwStyle &= ~LVS_TYPEMASK; //娓呴櫎鏄剧ず鏂瑰紡浣?
dwwStyle |= LVS_ICON; //璁剧疆style
SetWindowLong(hwndListViewswq, GWL_STYLE, dwwStyle);//璁剧疆style
ListView_SetExtendedListViewStyle(hwndListViewswq,0);break;case 123:ids++;sprintf(pst,"%d",ids);SendMessageA(cb, (UINT)CB_ADDSTRING, -1, (LPARAM)pst);
break;case 124://获取选中索引sele=SendMessage(cb,CB_GETCURSEL,0,0);//SendMessageA(cb, CB_DELETESTRING,删除的位置,0);SendMessageA(cb, CB_DELETESTRING,sele, 0);//  SendMessageA(cb, CB_DIR,DDL_EXCLUSIVE|DDL_DIRECTORY, (LPARAM) "*.*");
break;case 1231:ptr = new DBCONNECT();int sss;m_pRecordset = ptr->FetchData("select * from q",sss);//("insert into q ([ID],[name],[datee]) values(211,'joe123','2015-1-1')");m_pRecordset->MoveFirst();while(!m_pRecordset->adoEOF){lll=m_pRecordset->GetCollect("ID");sprintf(ioio,"%d",(long)lll);//  MessageBox(NULL,_com_util::ConvertBSTRToString(lll.bstrVal),"",0);items.mask = LVIF_TEXT;       // 文字items.cchTextMax = MAX_PATH;       // 文字长度items.iItem = 0;items.iSubItem = 0;items.pszText = ioio;SendMessage(hwndListViewswq, LVM_INSERTITEM, 0, (LPARAM)&items);lll=m_pRecordset->GetCollect("name");items.mask = LVIF_TEXT;       // 文字items.cchTextMax = MAX_PATH;       // 文字长度items.iItem = 0;items.iSubItem = 1;items.pszText = _com_util::ConvertBSTRToString(lll.bstrVal);SendMessage(hwndListViewswq, LVM_SETITEM, 0, (LPARAM)&items);lll=m_pRecordset->GetCollect("datee");items.mask = LVIF_TEXT;       // 文字items.cchTextMax = MAX_PATH;       // 文字长度items.iItem = 0;items.iSubItem = 2;if(lll.vt ==VT_DATE ){lll.ChangeType(VT_BSTR);items.pszText = _com_util::ConvertBSTRToString(lll.bstrVal);}else items.pszText = "";SendMessage(hwndListViewswq, LVM_SETITEM, 0, (LPARAM)&items);items.mask = LVIF_TEXT;       // 文字items.cchTextMax = MAX_PATH;       // 文字长度items.iItem = 0;items.iSubItem = 3;items.pszText = "dfgdfg";SendMessage(hwndListViewswq, LVM_SETITEM, 0, (LPARAM)&items);m_pRecordset->MoveNext();}
ptr->~DBCONNECT();break;case IDM_ABOUT:DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);break;case IDM_EXIT:DestroyWindow(hWnd);break;default:return DefWindowProc(hWnd, message, wParam, lParam);}break;case WM_PAINT:hdc = BeginPaint(hWnd, &ps);// TODO: Add any drawing code here...RECT rt;GetClientRect(hWnd, &rt);DrawText(hdc, szHello, strlen(szHello), &rt, DT_CENTER);EndPaint(hWnd, &ps);break;case WM_DESTROY:PostQuitMessage(0);break;default:return DefWindowProc(hWnd, message, wParam, lParam);}return 0;
}// Mesage handler for about box.
LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{switch (message){case WM_INITDIALOG:return TRUE;case WM_COMMAND:if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) {EndDialog(hDlg, LOWORD(wParam));return TRUE;}break;}return FALSE;
}

http://download.csdn.net/detail/dai_jing/5246377

#include "stdafx.h"
#include "MyMainWnd.h"
#include "MyLogInDlg.h"
#include "atlstr.h"
//工具栏相关
#include "Commctrl.h"
#include "resource.h"
//播放音乐必须的头文件
#include <mmsystem.h> 
#pragma comment(lib, "WINMM.LIB")
//数据库相关
#include "sql.h"
#include "sqlext.h"
#include "sqltypes.h"
TCHAR g_ManagerName[256];
//shell相关
#include <ShellAPI.h>
#include <ctime>//产生随机数
//属性页相关
#include "PrSht.h"
#pragma comment(lib,"comctl32.lib")
int DoPropertySheet(HWND hDlg); // 启用视觉样式
#pragma comment(linker,"\"/manifestdependency:type='win32' \
name='Microsoft.Windows.Common-Controls' version='6.0.0.0' \
processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
//属性页对话框
//INT_PTR CALLBACK ProDlg1(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
//INT_PTR CALLBACK ProDlg2(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
//响应鼠标在菜谱列表框的双击事件,在此函数中弹出对应菜肴的属性,增删改查数据库
void GetAttributeAboutMenuWhenDBCLK(HWND hWnd,WPARAM wParam,LPARAM lParam,TCHAR szStr[]);
//全局窗口过程定义
LRESULT CALLBACK MyLeftWndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lPram);//左侧窗口
LRESULT CALLBACK MyRightWndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lPram);//右侧窗口
LRESULT CALLBACK MyRightWnd2Proc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lPram);//右侧窗口
LRESULT CALLBACK MyTopWndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lPram);//上侧窗口HWND g_hLeftWnd=NULL;
HWND g_hRightWnd=NULL;
HWND g_hRightWnd2=NULL;
HWND g_hTopWnd=NULL;#define FILEPATHSIZE 2048
#define FILENAMESIZE 280
BOOL SaveFileDlg(HWND hWnd,WCHAR *strfp,WCHAR * strfn);TCHAR szLeftWndClass[256]=TEXT("leftwnd");
TCHAR szRightWndClass[256]=TEXT("rightwnd");
TCHAR szRightWnd2Class[256]=TEXT("rightwnd2");
TCHAR szTopWndClass[256]=TEXT("topwnd");
BOOL CreateChildWindow(HWND hWnd);
//全局变量
bool bShowInMainWndOnPain=true;
//工具栏#define T_ID1 20000
#define T_ID2 20001
#define T_ID3 20002
#define T_ID4 20003
#define T_ID5 20004
#define T_ID6 20005
#define T_ID7 20006
#define T_ID8 20007
#define T_ID9 20008
#define T_ID10 20009
#define T_ID11 20010
#define T_ID12 20011
#define T_ID13 20012
#define T_ID14 20013
#define T_ID15 20014
#define T_ID16 20015
#define T_ID17 20016
#define T_ID18 20017
#define T_ID19 20018
#define T_ID20 20019
//管理员登录的用户名全局变量,为以后修改登录口令服务WCHAR g_LogUserName[256];
//全局变量
HWND g_hToolBar=NULL;
#define  IDR_TOOLBAR2 10000
int iCapiton=0;
TBBUTTON ptoolbar[]=
{{0,                                                   //指定图标编号,用于按钮的以0开始的按钮图片索引 T_ID1,                                          //工具条按钮的ID,按钮的CommandID TBSTATE_ENABLED,                  //可用状态,按钮的状态标志 TBSTYLE_BUTTON,                    //指定创建一个可以下按的按钮,按钮的风格标志 0,                                                 //保留,由应用程序定义该参数意义 iCapiton},           //按钮字串索引 /*{0,0,TBSTATE_ENABLED,TBSTYLE_SEP,0,0}, */{1,T_ID2,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,iCapiton},{2,T_ID3,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,iCapiton},//{0,0,TBSTATE_ENABLED,TBSTYLE_SEP,0,0},{3,T_ID4,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,iCapiton},创建一个分割按钮用的竖线 //{0,0,TBSTATE_ENABLED,TBSTYLE_SEP,0,0}, {4,T_ID5,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,iCapiton},{5,T_ID6,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,iCapiton},{6,T_ID7,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,iCapiton},/*{0,0,TBSTATE_ENABLED,TBSTYLE_SEP,0,0}, */{7,T_ID8,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,iCapiton},    {8,T_ID9,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,iCapiton}, //{0,0,TBSTATE_ENABLED,TBSTYLE_SEP,0,0}, {9,T_ID10,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,iCapiton},    {10,T_ID11,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,iCapiton},/*{0,0,TBSTATE_ENABLED,TBSTYLE_SEP,0,0}, */{11,T_ID12,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,iCapiton},  /*{0,0,TBSTATE_ENABLED,TBSTYLE_SEP,0,0}, */{12,T_ID13,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,iCapiton}};HWND McreateToolbar(HWND hWnd,HINSTANCE hInst)
{HWND hTool=CreateWindowEx(0 ,TOOLBARCLASSNAME,0,WS_CHILD|WS_VISIBLE|TBSTYLE_FLAT|TBSTYLE_TOOLTIPS|CCS_NODIVIDER |CCS_ADJUSTABLE ,0,0,0,0,hWnd,0,hInst,0);/*UpdateWindow(hWnd);ShowWindow(hWnd,SW_SHOW);*/SendMessage(hTool, TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON), 0);g_hToolBar=hTool;if(hTool){TBADDBITMAP tab;                         //TBADDBITMAP结构包含了向工具栏添加的位图的信息,Win32下的位图结构tab.hInst=NULL; HBITMAP hbmp =LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP55));tab.nID=(ULONG)hbmp; //位图资源的IDSendMessage(hTool,TB_ADDBITMAP,(WPARAM)13,(LPARAM)&tab);SIZE_T ilen;TCHAR buff[30];int index=0;lstrcpyW(buff,_T("点菜"));ilen = _tcslen(buff);buff[ilen]=L'\0';iCapiton = (int)SendMessage(hTool,TB_ADDSTRING,0,(LPARAM)buff);ptoolbar[index++].iString = iCapiton;lstrcpyW(buff,_T("改菜"));ilen = _tcslen(buff);buff[ilen]=L'\0';iCapiton = (int)SendMessage(hTool,TB_ADDSTRING,0,(LPARAM)buff);ptoolbar[index++].iString = iCapiton;lstrcpyW(buff,_T("退菜"));ilen = _tcslen(buff);buff[ilen]=L'\0';iCapiton = (int)SendMessage(hTool,TB_ADDSTRING,0,(LPARAM)buff);ptoolbar[index++].iString = iCapiton;lstrcpyW(buff,_T("开台"));ilen = _tcslen(buff);buff[ilen]=L'\0';iCapiton = (int)SendMessage(hTool,TB_ADDSTRING,0,(LPARAM)buff);ptoolbar[index++].iString = iCapiton;lstrcpyW(buff,_T("预定"));ilen = _tcslen(buff);buff[ilen]=L'\0';iCapiton = (int)SendMessage(hTool,TB_ADDSTRING,0,(LPARAM)buff);ptoolbar[index++].iString = iCapiton;lstrcpyW(buff,_T("收入管理"));ilen = _tcslen(buff);buff[ilen]=L'\0';iCapiton = (int)SendMessage(hTool,TB_ADDSTRING,0,(LPARAM)buff);ptoolbar[index++].iString = iCapiton;lstrcpyW(buff,_T("登记支出"));ilen = _tcslen(buff);buff[ilen]=L'\0';iCapiton = (int)SendMessage(hTool,TB_ADDSTRING,0,(LPARAM)buff);ptoolbar[index++].iString = iCapiton;lstrcpyW(buff,_T("顾客档案"));ilen = _tcslen(buff);buff[ilen]=L'\0';iCapiton = (int)SendMessage(hTool,TB_ADDSTRING,0,(LPARAM)buff);ptoolbar[index++].iString = iCapiton;lstrcpyW(buff,_T("送餐结算"));ilen = _tcslen(buff);buff[ilen]=L'\0';iCapiton = (int)SendMessage(hTool,TB_ADDSTRING,0,(LPARAM)buff);ptoolbar[index++].iString = iCapiton;lstrcpyW(buff,_T("收银结算"));ilen = _tcslen(buff);buff[ilen]=L'\0';iCapiton = (int)SendMessage(hTool,TB_ADDSTRING,0,(LPARAM)buff);ptoolbar[index++].iString = iCapiton;lstrcpyW(buff,_T("顾客结算"));ilen = _tcslen(buff);buff[ilen]=L'\0';iCapiton = (int)SendMessage(hTool,TB_ADDSTRING,0,(LPARAM)buff);ptoolbar[index++].iString = iCapiton;lstrcpyW(buff,_T("固产管理"));ilen = _tcslen(buff);buff[ilen]=L'\0';iCapiton = (int)SendMessage(hTool,TB_ADDSTRING,0,(LPARAM)buff);ptoolbar[index++].iString = iCapiton;lstrcpyW(buff,_T("系统锁定"));ilen = _tcslen(buff);buff[ilen]=L'\0';iCapiton = (int)SendMessage(hTool,TB_ADDSTRING,0,(LPARAM)buff);ptoolbar[index++].iString = iCapiton;SendMessage(hTool,TB_ADDBUTTONS,(WPARAM)13,(LPARAM)&ptoolbar);SendMessage(hTool,TB_SETBUTTONWIDTH,0,(LPARAM) MAKELONG (45,45));SendMessage(hTool,TB_SETBUTTONSIZE,0,(LPARAM)MAKELPARAM(45,45));SendMessage(hTool,TB_SETBITMAPSIZE,0,(LPARAM)MAKELONG(35,35));SendMessage(hTool, TB_AUTOSIZE, 0, 0);return hTool;}return NULL;}
//状态栏
HWND hwndStatus;
void moveStatus(HWND hwnd)
{  RECT rcClient;  int width[3];                       //状态栏分割数组   GetClientRect(hwnd, &rcClient);     //获取父窗口矩形   int length=rcClient.right/3;        //根据父窗口宽度来分割指定大小   width[0]=length;                    //状态栏第一栏宽度,为分割长度length   width[1]=length*2;                  //状态栏往后栏目宽度,为length*栏目标号   width[2]=length*3;  //根据width数组来设置状态栏   SendMessage(hwndStatus, SB_SETPARTS, 3, (LPARAM)(LPINT)width);  MoveWindow(hwndStatus,0,0,0,0,TRUE);
}  //创建状态栏
HWND CreateMStatus(HWND hwnd)
{//创建一个状态栏   HINSTANCE hInst=(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE);hwndStatus=CreateWindow(STATUSCLASSNAME,L"",SBS_SIZEGRIP|WS_CHILD | WS_VISIBLE,  0,0,0,0,hwnd,NULL,hInst,NULL);  //移动初始化状态栏   moveStatus(hwnd);  //设置状态栏分栏文本,WPARAM指定栏目   SendMessage(hwndStatus, SB_SETTEXT, (WPARAM)0, (LPARAM)g_ManagerName);  //使用格式化字符串来设置状态栏文本 //获取本地时间static SYSTEMTIME mytime;GetLocalTime(&mytime);TCHAR szLocalTime[256];wsprintf(szLocalTime,L"登录时间:%04d—%02d—%02d %02d:%02d:%02d",mytime.wYear,mytime.wMonth,mytime.wDay,mytime.wHour,mytime.wMinute,mytime.wSecond);TCHAR status_line[256];TCHAR status_size[256];wsprintf(status_line,TEXT("%s %s所有"),TEXT("软件所有权归"),g_ManagerName);  wsprintf(status_size,TEXT("%s"),szLocalTime);  SendMessage(hwndStatus, SB_SETTEXT, (WPARAM)1, (LPARAM)status_line);  SendMessage(hwndStatus, SB_SETTEXT, (WPARAM)2, (LPARAM)status_size);  return NULL;
}
//定义菜谱数据库链接
void GetMenuFromDatabase(HWND hwnd,WPARAM wParam);
SQLBIGINT g_MenuID;
SQLWCHAR g_MenuName[200][200];
//工具栏消息处理
void InMainWndOnCommandMessageForToolBar(HWND hwnd,WPARAM wParam);
//数据库连接相关变量
#define LOGIN_TIMEOUT 30
#define MAXBUFLEN 255
#define CHECKDBSTMTERROR(hwnd,result,hstmt)   if(SQL_ERROR==result){ShowDBStmtError(hwnd,hstmt);return;}
#define MAX_LOADSTRING 100//对话框过程
INT_PTR CALLBACK LogInProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);//登录进度条对话框
INT_PTR CALLBACK ManagerProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);//管理员登录对话框
INT_PTR CALLBACK AboutProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);//关于对话框
INT_PTR CALLBACK AddItemToMenu(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);//增加菜肴
INT_PTR CALLBACK GetMenuInfoProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);//获取数据中菜肴信息对话框
//处理对话
void InMainWndOnCommandMessage(WPARAM,HWND);
void InManagerOnCommandMessage(WPARAM,HWND);void LoadToolBar(HWND hwnd);
//数据库处理相关函数
void ShowDBError(HWND hwnd,SQLSMALLINT type,SQLHANDLE sqlHandle);
void ShowDBConnError(HWND hwnd,SQLHDBC hdbc);
void ShowDBStmtError(HWND hwnd,SQLHSTMT hstmt);
void Login(HWND hwnd,WPARAM wParam);
void Save(HWND hwnd);//全局变量申明
CMyMainWnd *ghWnd=NULL;//MyMainWnd的实现部分
//构造函数实现
CMyMainWnd::CMyMainWnd()
{ZeroMemory(szClassName,sizeof(szClassName)/sizeof(WCHAR));WCHAR classname[MAX_PATH]=TEXT("MyMainWnd");wsprintf(szClassName,classname);}
//析构函数实现
CMyMainWnd::~CMyMainWnd()
{}
//初始化实现
void CMyMainWnd::Init()
{WNDCLASS wndclass;wndclass.cbClsExtra=0;wndclass.cbWndExtra=0;wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);wndclass.hCursor=LoadCursor(GetModuleHandle(NULL),MAKEINTRESOURCE(IDC_CURSOR1));wndclass.hIcon=LoadIcon(GetModuleHandle(NULL),MAKEINTRESOURCE(IDI_ICON13));wndclass.hInstance=GetModuleHandle(NULL);wndclass.lpfnWndProc= MyMainWndProc;wndclass.lpszClassName=szClassName;wndclass.lpszMenuName=MAKEINTRESOURCE(IDC_MY);wndclass.style=CS_HREDRAW|CS_VREDRAW;if (!RegisterClass(&wndclass)){return;}//注册左侧用户信息窗口wndclass.lpfnWndProc   = MyLeftWndProc;wndclass.lpszMenuName  = NULL;wndclass.lpszClassName  = szLeftWndClass;wndclass.hIcon = NULL;wndclass.hCursor       = LoadCursor(NULL, IDC_HAND);RegisterClass(&wndclass);//注册右侧窗口1信息wndclass.lpfnWndProc  = MyRightWndProc;wndclass.lpszMenuName = NULL;wndclass.lpszClassName  = szRightWndClass;wndclass.hIcon = NULL;wndclass.hCursor      = LoadCursor(NULL, IDC_HAND);RegisterClass(&wndclass);//注册右侧窗口2信息wndclass.lpfnWndProc  = MyRightWnd2Proc;wndclass.lpszMenuName    = NULL;wndclass.lpszClassName  = szRightWnd2Class;wndclass.hIcon = NULL;wndclass.hCursor     = LoadCursor(NULL, IDC_HAND);RegisterClass(&wndclass);//注册上侧窗口wndclass.lpfnWndProc = MyTopWndProc;wndclass.lpszMenuName   = NULL;wndclass.lpszClassName  = szTopWndClass;wndclass.hIcon = NULL;wndclass.hCursor        = LoadCursor(NULL, IDC_HAND);RegisterClass(&wndclass);hMainWnd=CreateWindow(szClassName,TEXT("财神餐饮管理系统1.0版"),WS_OVERLAPPEDWINDOW &~WS_MAXIMIZEBOX&~WS_THICKFRAME,0,0,1366,768,NULL,NULL,wndclass.hInstance,NULL);DialogBox(wndclass.hInstance,MAKEINTRESOURCE(IDD_LOGIN),NULL,LogInProc);ShowWindow(hMainWnd,TRUE);UpdateWindow(hMainWnd);
}
//消息循环实现
void CMyMainWnd::MessageLoop()
{MSG msg;while(GetMessage(&msg,NULL,0,0)){TranslateMessage(&msg);DispatchMessage(&msg);}
}
//主窗口过程
LRESULT CALLBACK CMyMainWnd::MyMainWndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lPram)
{PAINTSTRUCT ps;HDC hdc;static int cxClient,cyClient;RECT rect;static int time=0;//static int T=0;LPNMHDR pnmh;LPTOOLTIPTEXT lpttt;switch(message){//case WM_NCHITTEST://          break;//屏蔽鼠标信息,及鼠标移动,按下或释放case WM_COMMAND:{//管理员登录对话InMainWndOnCommandMessage(wParam,hwnd);//工具栏控件对话InMainWndOnCommandMessageForToolBar(hwnd,wParam);break;}case WM_NOTIFY:{pnmh = (LPNMHDR)lPram;switch (pnmh->code) {case TTN_GETDISPINFO: // 工具提示lpttt = (LPTOOLTIPTEXT)lPram;switch (lpttt->hdr.idFrom) {case T_ID1: lpttt->lpszText = _T("点菜"); break;case T_ID2: lpttt->lpszText = _T("改菜"); break;case T_ID3: lpttt->lpszText = _T("退菜"); break;case T_ID4: lpttt->lpszText = _T("开台"); break;case T_ID5: lpttt->lpszText = _T("预定"); break;case T_ID6: lpttt->lpszText = _T("收入管理"); break;case T_ID7: lpttt->lpszText = _T("登记支出"); break;case T_ID8: lpttt->lpszText = _T("顾客档案"); break;case T_ID9: lpttt->lpszText = _T("送餐结算"); break;case T_ID10: lpttt->lpszText = _T("收银结算"); break;case T_ID11: lpttt->lpszText = _T("顾客结算"); break;case T_ID12: lpttt->lpszText = _T("固产管理"); break;case T_ID13: lpttt->lpszText = _T("系统锁定"); break;}break;}break;}case WM_USER+2:{CreateChildWindow(hwnd);break;}case WM_USER+1:{CreateMStatus(hwnd);//KillTimer(hwnd,1);break;}case WM_CREATE:{设置分层属性//SetWindowLong(hwnd, GWL_EXSTYLE, GetWindowLong(hwnd, GWL_EXSTYLE) | WS_EX_LAYERED);设置透明度 0 - completely transparent   255 - opaque//SetLayeredWindowAttributes(hwnd, 0, 255, LWA_ALPHA);//SetTimer(hwnd,1,1000,NULL);//设置定时器cxClient=LOWORD(lPram);cyClient=HIWORD(lPram);HINSTANCE hInst=(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE);McreateToolbar(hwnd,hInst);//创建工具栏//禁用所有工具栏for (int ToolBarId=T_ID1;ToolBarId<=T_ID13;ToolBarId++){SendMessage(g_hToolBar, TB_SETSTATE, (WPARAM)ToolBarId, (LPARAM)MAKELONG(TBSTATE_INDETERMINATE , 0));}//创建状态栏CreateMStatus(hwnd);//禁用所有菜单HMENU hMenu= GetMenu(hwnd);for (int MenuId=ID_32779;MenuId<=ID_32823;MenuId++){EnableMenuItem(hMenu,MenuId, MF_GRAYED);}EnableMenuItem(hMenu,IDM_ABOUT, MF_GRAYED);EnableMenuItem(hMenu,ID_USEHELP, MF_GRAYED);EnableMenuItem(hMenu,ID_ACCESSNET, MF_GRAYED);break;}case WM_SIZE:{/*GetClientRect(hwnd,&rect);MoveWindow(hwnd,rect.left,rect.top,rect.right,rect.bottom,TRUE);*/return 0;}case WM_ERASEBKGND:{return 0;}case WM_TIMER:{time++;if (time>=5){KillTimer(hwnd,1);time=0;break;}SendMessage(hwnd,WM_USER+1,NULL,NULL);break;}case WM_PAINT:{hdc=BeginPaint(hwnd,&ps);GetClientRect(hwnd,&rect);cxClient=rect.right;cyClient=rect.bottom-40;HDC hMemDC=CreateCompatibleDC(hdc);HBITMAP hMemBM=CreateCompatibleBitmap(hdc,cxClient,cyClient);SelectObject(hMemDC,hMemBM);if (bShowInMainWndOnPain){static Image *gImag=NULL;Graphics g(hMemDC);if (gImag==NULL){gImag=Image::FromFile(_T("main.png"));}{g.DrawImage(gImag,0,0,cxClient,cyClient);}BitBlt(hdc,0,40,cxClient,cyClient,hMemDC,0,0,SRCCOPY);}DeleteDC(hMemDC);DeleteObject(hMemBM);EndPaint(hwnd,&ps);break;}case WM_DESTROY:{if (IDYES==MessageBox(hwnd,TEXT("应用程序即将关闭,\n确认退出吗?"),TEXT("安全提示"),MB_YESNO|MB_ICONINFORMATION)){DestroyWindow(hwnd);return 0;}return 0;}case WM_CLOSE:{if (IDYES==MessageBox(hwnd,TEXT("应用程序即将关闭,\n确认退出吗?"),TEXT("安全提示"),MB_YESNO|MB_ICONINFORMATION)){PostQuitMessage(0);return 0;}return 0;;}default:return DefWindowProc(hwnd,message,wParam,lPram);}return 0;
}//进度条对话框过程函数
INT_PTR CALLBACK LogInProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{UNREFERENCED_PARAMETER(lParam);HWND hwndprocess;static LONG nMinPos=0,nMaxPos=100,nPos=0,fRedraw=0;static int nT=0;switch(message){case WM_LBUTTONDOWN: //当鼠标左键点击时可以拖曳窗口{PostMessage(hDlg, WM_SYSCOMMAND, SC_MOVE | HTCAPTION, 0); return 0;}case WM_CTLCOLORSTATIC://设置静态文本框字体颜色{if (GetDlgItem(hDlg, IDC_STATIC1) == (HWND)lParam )//这里的1是静态文本框的ID{SetTextColor((HDC)wParam, RGB(255,0,0));SetBkMode((HDC)wParam, TRANSPARENT);//return (LRESULT)CreateSolidBrush(GetSysColor(COLOR_BTNFACE));return (BOOL)((HBRUSH)GetStockObject(NULL_BRUSH));}break;}case WM_INITDIALOG:{HWND hParent=GetParent(hDlg);ShowWindow(hParent,FALSE);//设置动画//将对话框提到Z轴最上方BringWindowToTop ( hDlg );//略微提高对话框的的优先级SetForegroundWindow(hDlg);//设置对话框图标HINSTANCE hInst=(HINSTANCE)GetWindowLong(hDlg,GWL_HINSTANCE);SendMessage(hDlg, WM_SETICON, ICON_BIG, (LPARAM)LoadIcon(hInst, MAKEINTRESOURCE(IDI_ICON1)));  SetTimer(hDlg,1,100,NULL);hwndprocess=GetDlgItem(hDlg,IDC_PROGRESS1);SendMessage( hwndprocess, SBM_SETRANGE, nMinPos, nMaxPos );//SendMessage(hwndPress,PBM_SETSTEP,20,0);SendMessage(hwndprocess,PBM_STEPIT,0,0);SendMessage(hwndprocess,PBM_SETBARCOLOR ,0,RGB(0,255,0));SendMessage(hwndprocess,PBM_SETBKCOLOR  ,0,RGB(120,120,120));//SendMessage( hwndPress, PBM_SETPOS, (WPARAM)nPos,0);SendMessage(hwndprocess,PBM_SETSTATE,PBST_NORMAL,0);return (INT_PTR)TRUE;}case WM_TIMER:{nPos+=1;/*hwndprocess=GetDlgItem(hDlg,IDC_PROGRESS1);srand((unsigned int)time(0));*/TCHAR szText[256];nT+=1;wsprintf(szText,TEXT("%d %%"),nT);SetDlgItemText(hDlg,IDC_STATIC22,NULL);SetDlgItemText(hDlg,IDC_STATIC22,szText);hwndprocess=GetDlgItem(hDlg,IDC_PROGRESS1);//SendMessage( hwndPress, SBM_SETRANGE, nMinPos, nMaxPos );SendMessage( hwndprocess, PBM_SETPOS, (WPARAM)nPos, 0 );if (nPos>=100){KillTimer(hDlg,1);EndDialog(hDlg,LOWORD(wParam));HWND hParent=GetParent(hDlg);BringWindowToTop(hParent);SetForegroundWindow(hParent);ShowWindow(hParent,SW_SHOW);return (INT_PTR)TRUE;}break;}case WM_COMMAND:{if ( LOWORD(wParam)==IDCANCEL){if (IDYES==MessageBox(NULL,TEXT("程序正在加载后台配置\n是否确认退出?"),TEXT("提示"),MB_YESNO|MB_ICONERROR)){   KillTimer(hDlg,1);EndDialog(hDlg,LOWORD(wParam));PostQuitMessage(0);break;}return (INT_PTR)TRUE;}break;}case WM_SIZE:{break;}case WM_PAINT:{return 0;}case WM_ERASEBKGND:{return 0;}case WM_DESTROY:{ShowWindow(hDlg,FALSE);break;}}return (INT_PTR)FALSE;
}//GID+载入保护管理
Gdiplus::GdiplusStartupInput m_gdiplusStartupInput;
ULONG_PTR m_pGdiToken;
//Main函数
int WINAPI WinMain( __in HINSTANCE hInstance, __in_opt HINSTANCE hPrevInstance, __in LPSTR lpCmdLine, __in int nShowCmd )
{HANDLE h=CreateMutex(NULL,FALSE,TEXT("zhengjinwei-zjw-tiance"));if (GetLastError()==ERROR_ALREADY_EXISTS){MessageBox(NULL,TEXT("当前已有 retaruant management实例在运行!\n你懂的!"),TEXT("天策提示"),MB_ICONINFORMATION);CloseHandle(h);return 0;}//初始化工具条INITCOMMONCONTROLSEX icex;// Ensure that the common control DLL is loaded. icex.dwSize = sizeof(INITCOMMONCONTROLSEX);icex.dwICC  = ICC_BAR_CLASSES;InitCommonControlsEx(&icex);Gdiplus::GdiplusStartup(&m_pGdiToken,&m_gdiplusStartupInput,NULL); CMyMainWnd *pmymainwnd=new CMyMainWnd();ghWnd=pmymainwnd;pmymainwnd->Init();pmymainwnd->MessageLoop();delete pmymainwnd;CloseHandle(h);Gdiplus::GdiplusShutdown(m_pGdiToken);return 0;
}
INT_PTR CALLBACK ChangeManagerInfoProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);//修改口令对话框过程声明
INT_PTR CALLBACK KaiTaiProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);//开台对话框o
void CommandToDianCai(HWND hwnd,WPARAM wParam);//点菜处理
INT_PTR CALLBACK PopDianCaiProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);//点菜对话框INT_PTR CALLBACK StartShangCaiProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);//开始上菜处理对话框
INT_PTR CALLBACK KaiTaiDetailInfoProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);//开台详细情况
INT_PTR CALLBACK UpdateKaiTaiInfoProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);//修改开台资料
INT_PTR CALLBACK GaiCaiProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);//改菜
INT_PTR CALLBACK TuiCaiProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);//退菜
INT_PTR CALLBACK CustomerInfoProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);//客户档案
INT_PTR CALLBACK CeTaiProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);//撤台
INT_PTR CALLBACK CustomerSuggestionsProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);//顾客意见反馈
INT_PTR CALLBACK StaffRecordProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);//员工档案
INT_PTR CALLBACK StaffSuggestionsProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);//员工计事
INT_PTR CALLBACK CaiDanDaLeiProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);//菜单大类维护
//此函数响应主窗口中鼠标点击菜单void InMainWndOnCommandMessage(WPARAM wParam,HWND hWnd)
{switch(LOWORD(wParam)){case IDM_LOGIN://用户登录{HINSTANCE hInst=(HINSTANCE)GetWindowLong(hWnd,GWL_HINSTANCE);DialogBox(hInst,MAKEINTRESOURCE(IDD_DIALOGMANAGER),hWnd,ManagerProc);break;}case ID_EXITFILES://退出{PostQuitMessage(0);break;}case IDM_ABOUT: //关于{HINSTANCE hInst=(HINSTANCE)GetWindowLong(hWnd,GWL_HINSTANCE);DialogBox(hInst,MAKEINTRESOURCE(IDD_ABOUTBOX),hWnd,AboutProc);break;}case ID_ACCESSNET://访问官网{ShellExecute(NULL,L"open",L"http://tiance.renhe.cn/",NULL,NULL,SW_SHOW);break;}case ID_USEHELP://用户帮助{ShellExecute(NULL,L"open",L"help.chm",NULL,NULL,SW_SHOW);break;}case ID_32779://点菜{//MessageBox(NULL,TEXT("点菜"),TEXT(""),MB_OK|MB_ICONINFORMATION);HINSTANCE hInst=(HINSTANCE)GetWindowLong(hWnd,GWL_HINSTANCE);DialogBox(hInst,MAKEINTRESOURCE(IDD_DIALOG3),hWnd,PopDianCaiProc);break;}case ID_32823://上菜{HINSTANCE hInst=(HINSTANCE)GetWindowLong(hWnd,GWL_HINSTANCE);DialogBox(hInst,MAKEINTRESOURCE(IDD_DIALOG4),hWnd,StartShangCaiProc);break;}case ID_32780://改菜{HINSTANCE hInst=(HINSTANCE)GetWindowLong(hWnd,GWL_HINSTANCE);DialogBox(hInst,MAKEINTRESOURCE(IDD_DIALOG8),hWnd,GaiCaiProc);break;}case ID_32781://退菜{HINSTANCE hInst=(HINSTANCE)GetWindowLong(hWnd,GWL_HINSTANCE);DialogBox(hInst,MAKEINTRESOURCE(IDD_DIALOG9),hWnd,TuiCaiProc);break;}case ID_32782://开台{//MessageBox(NULL,TEXT("开台"),TEXT(""),MB_OK|MB_ICONINFORMATION);HINSTANCE hInst=(HINSTANCE)GetWindowLong(hWnd,GWL_HINSTANCE);DialogBox(hInst,MAKEINTRESOURCE(IDD_DIALOG2),hWnd,KaiTaiProc);break;}case ID_32783://撤台{HINSTANCE hInst=(HINSTANCE)GetWindowLong(hWnd,GWL_HINSTANCE);DialogBox(hInst,MAKEINTRESOURCE(IDD_DIALOG16),hWnd,CeTaiProc);break;}//case ID_32784://换台//   {//     //MessageBox(NULL,TEXT("换台"),TEXT(""),MB_OK|MB_ICONINFORMATION);//      break;//    }case ID_32785://修改开台资料{HINSTANCE hInst=(HINSTANCE)GetWindowLong(hWnd,GWL_HINSTANCE);DialogBox(hInst,MAKEINTRESOURCE(IDD_DIALOG7),hWnd,UpdateKaiTaiInfoProc);break;}case ID_32786://开台详细资料{HINSTANCE hInst=(HINSTANCE)GetWindowLong(hWnd,GWL_HINSTANCE);DialogBox(hInst,MAKEINTRESOURCE(IDD_DIALOG6),hWnd,KaiTaiDetailInfoProc);break;}case ID_32787://收银员结算{MessageBox(NULL,TEXT("收银员结算"),TEXT(""),MB_OK|MB_ICONINFORMATION);break;}case ID_32788://送餐员结算{MessageBox(NULL,TEXT("送餐员结算"),TEXT(""),MB_OK|MB_ICONINFORMATION);break;}case ID_32789://顾客结算{MessageBox(NULL,TEXT("顾客结算"),TEXT(""),MB_OK|MB_ICONINFORMATION);break;}case ID_32790://收入管理{MessageBox(NULL,TEXT("收入管理"),TEXT(""),MB_OK|MB_ICONINFORMATION);break;}case ID_32791://支出及入库管理{MessageBox(NULL,TEXT("支出及入库管理"),TEXT(""),MB_OK|MB_ICONINFORMATION);break;}case ID_32792://库存管理{MessageBox(NULL,TEXT("库存管理"),TEXT(""),MB_OK|MB_ICONINFORMATION);break;}case ID_32793://出库管理{MessageBox(NULL,TEXT("出库管理"),TEXT(""),MB_OK|MB_ICONINFORMATION);break;}case ID_32813://收入分析{MessageBox(NULL,TEXT("收入分析"),TEXT(""),MB_OK|MB_ICONINFORMATION);break;}case ID_32814://支出分析{MessageBox(NULL,TEXT("支出分析"),TEXT(""),MB_OK|MB_ICONINFORMATION);break;}case ID_32815://利润分析{MessageBox(NULL,TEXT("利润分析"),TEXT(""),MB_OK|MB_ICONINFORMATION);break;}case ID_32816://毛利润分析{MessageBox(NULL,TEXT("毛利润分析"),TEXT(""),MB_OK|MB_ICONINFORMATION);break;}case ID_32817://投资、回报分析{MessageBox(NULL,TEXT("投资、回报分析"),TEXT(""),MB_OK|MB_ICONINFORMATION);break;}case ID_32818://入库分析{MessageBox(NULL,TEXT("入库分析"),TEXT(""),MB_OK|MB_ICONINFORMATION);break;}case ID_32819://出库分析{MessageBox(NULL,TEXT("出库分析"),TEXT(""),MB_OK|MB_ICONINFORMATION);break;}case ID_32820://菜肴消费分析{MessageBox(NULL,TEXT("菜肴消费分析"),TEXT(""),MB_OK|MB_ICONINFORMATION);break;}case ID_32821://顾客消费分析{MessageBox(NULL,TEXT("顾客消费分析"),TEXT(""),MB_OK|MB_ICONINFORMATION);break;}case ID_32822://员工工作分析{MessageBox(NULL,TEXT("员工工作分析"),TEXT(""),MB_OK|MB_ICONINFORMATION);break;}case ID_32811://顾客档案{HINSTANCE hInst=(HINSTANCE)GetWindowLong(hWnd,GWL_HINSTANCE);DialogBox(hInst,MAKEINTRESOURCE(IDD_DIALOG11),hWnd,CustomerInfoProc);break;}case ID_32812://顾客意见反馈{HINSTANCE hInst=(HINSTANCE)GetWindowLong(hWnd,GWL_HINSTANCE);DialogBox(hInst,MAKEINTRESOURCE(IDD_DIALOG17),hWnd,CustomerSuggestionsProc);break;}case ID_32807://员工档案{HINSTANCE hInst=(HINSTANCE)GetWindowLong(hWnd,GWL_HINSTANCE);DialogBox(hInst,MAKEINTRESOURCE(IDD_DIALOG18),hWnd,StaffRecordProc);break;}case ID_32808://员工卡管理{MessageBox(NULL,TEXT("员工卡管理功能尚未开通"),TEXT(""),MB_OK|MB_ICONINFORMATION);break;}case ID_32809://员工计事{HINSTANCE hInst=(HINSTANCE)GetWindowLong(hWnd,GWL_HINSTANCE);DialogBox(hInst,MAKEINTRESOURCE(IDD_DIALOG22),hWnd,StaffSuggestionsProc);break;}case ID_32810://角色管理权限{MessageBox(NULL,TEXT("角色管理权限功能尚未开通"),TEXT(""),MB_OK|MB_ICONINFORMATION);break;}case ID_32797://菜单{MessageBox(NULL,TEXT("菜单"),TEXT(""),MB_OK|MB_ICONINFORMATION);break;}case ID_32798://菜单大类{HINSTANCE hInst=(HINSTANCE)GetWindowLong(hWnd,GWL_HINSTANCE);DialogBox(hInst,MAKEINTRESOURCE(IDD_DIALOG23),hWnd,CaiDanDaLeiProc);break;}case ID_32799://菜单小类{MessageBox(NULL,TEXT("菜单小类"),TEXT(""),MB_OK|MB_ICONINFORMATION);break;}case ID_32800://特价菜{MessageBox(NULL,TEXT("特价菜"),TEXT(""),MB_OK|MB_ICONINFORMATION);break;}case ID_32801://餐桌设置{MessageBox(NULL,TEXT("餐桌设置"),TEXT(""),MB_OK|MB_ICONINFORMATION);break;}case ID_32802://餐厅管理{MessageBox(NULL,TEXT("餐厅管理"),TEXT(""),MB_OK|MB_ICONINFORMATION);break;}case ID_32803://固定资产管理{MessageBox(NULL,TEXT("固定资产管理"),TEXT(""),MB_OK|MB_ICONINFORMATION);break;}case ID_32804://系统参数设置{break;}case ID_32805://数据备份{MessageBox(NULL,TEXT("数据备份"),TEXT(""),MB_OK|MB_ICONINFORMATION);break;}case ID_32806://数据清理{MessageBox(NULL,TEXT("数据清理"),TEXT(""),MB_OK|MB_ICONINFORMATION);break;}case ID_32794://修改口令{//MessageBox(NULL,TEXT("修改口令"),TEXT(""),MB_OK|MB_ICONINFORMATION);//说明与分析:修改口令的功能是修改当前登录管理员的登录名和密码,所以先要获取当前登陆管理员的姓名和密码,然后再进行数据库更新操作//全局变量g_ManagerName中保存有管理员的用户名信息,哈哈,这是以前在设置工具栏的时候设置的,没想到现在用到了,真的是有先见之明啊//在此处弹出对话框进行处理HINSTANCE hInst=(HINSTANCE)GetWindowLong(hWnd,GWL_HINSTANCE);DialogBox(hInst,MAKEINTRESOURCE(IDD_DIALOG1),hWnd,ChangeManagerInfoProc);break;}case ID_32795://系统锁定{//MessageBox(NULL,TEXT("系统锁定"),TEXT(""),MB_OK|MB_ICONINFORMATION);ShowWindow(hWnd,FALSE);HINSTANCE hInst=(HINSTANCE)GetWindowLong(hWnd,GWL_HINSTANCE);DialogBox(hInst,MAKEINTRESOURCE(IDD_DIALOGMANAGER),hWnd,ManagerProc);break;}case ID_32796://操作日志{MessageBox(NULL,TEXT("操作日志"),TEXT(""),MB_OK|MB_ICONINFORMATION);break;}default:break;}
}HICON hicon;
HIMAGELIST hImgListSm; //ImageList的句柄
HIMAGELIST hImgListLg;
HWND hListview = NULL;//ListView的句柄INT_PTR CALLBACK AddCaiDanDaLeiProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);//增加菜单大类
INT_PTR CALLBACK CaiDanDaLeiProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)//菜单大类维护
{UNREFERENCED_PARAMETER(lParam);switch(message){case WM_INITDIALOG:{HINSTANCE hInst=(HINSTANCE)GetWindowLong(hDlg,GWL_HINSTANCE);//设置对话框图标SendMessage(hDlg, WM_SETICON, ICON_BIG,(LPARAM)LoadIcon(hInst, MAKEINTRESOURCE(IDI_ICON28))); // 获取ListView控件的句柄hListview = GetDlgItem(hDlg, IDC_LIST1);ListView_SetExtendedListViewStyle(hListview,LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_AUTOSIZECOLUMNS|LVS_EX_FULLROWSELECT); // 设置ListView的列LVCOLUMN vcl;vcl.mask = LVCF_TEXT | LVCF_WIDTH | LVCF_SUBITEM;// 第一列vcl.pszText = L"菜单大类";//列标题vcl.cx = 400;//列宽vcl.iSubItem = 0;//子项索引,第一列无子项//ListView_InsertColumn(hListview, 0, &vcl);SendMessage(hListview,LVM_INSERTCOLUMN,0,(LPARAM)&vcl);// 初始化ImageListhImgListSm = ImageList_Create(GetSystemMetrics(SM_CXSMICON),GetSystemMetrics(SM_CYSMICON),ILC_MASK,1,0);hImgListLg = ImageList_Create(GetSystemMetrics(SM_CXICON),GetSystemMetrics(SM_CYICON),ILC_MASK,1,0);hicon = LoadIcon(hInst,MAKEINTRESOURCE(IDI_ICON30));// 添加图标ImageList_AddIcon(hImgListSm, hicon);ImageList_AddIcon(hImgListLg, hicon);DestroyIcon(hicon);// 将ListView与ImageList关联ListView_SetImageList(hListview, hImgListLg, LVSIL_NORMAL);ListView_SetImageList(hListview, hImgListSm, LVSIL_SMALL);return (INT_PTR)TRUE;}case WM_COMMAND:{if (LOWORD(wParam)==IDCANCEL){// 销毁ImageListImageList_Destroy(hImgListLg);ImageList_Destroy(hImgListSm);DestroyWindow(hListview);//不再需要EndDialog(hDlg,LOWORD(wParam));break;}switch(LOWORD(wParam)){case IDC_BUTTON1://add{HINSTANCE hInst=(HINSTANCE)GetWindowLong(hDlg,GWL_HINSTANCE);DialogBox(hInst,MAKEINTRESOURCE(IDD_DIALOG24),hDlg,AddCaiDanDaLeiProc);break;}case IDC_BUTTON2://change{break;}case IDC_BUTTON3://delete{break;}case IDC_BUTTON4://return{EndDialog(hDlg,LOWORD(wParam));break;}}break;}}return (INT_PTR)FALSE;
}
void SureToAddCaiDanDaLeiOnAddCaiDanDaLeiProc(HWND hwnd);//确认增加菜单大类处理
INT_PTR CALLBACK AddCaiDanDaLeiProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)//增加菜单大类
{UNREFERENCED_PARAMETER(lParam);switch(message){case WM_INITDIALOG:{return (INT_PTR)TRUE;}case WM_COMMAND:{if (LOWORD(wParam)==IDCANCEL){EndDialog(hDlg,LOWORD(wParam));break;}switch(LOWORD(wParam)){case IDC_BUTTON1://q确认增加{break;}case IDC_BUTTON2://返回{EndDialog(hDlg,LOWORD(wParam));break;}}break;}}return (INT_PTR)FALSE;
}void SureToAddCaiDanDaLeiOnAddCaiDanDaLeiProc(HWND hwnd)//确认增加菜单大类处理{//获取输入的菜名WCHAR l_szCaiName[256];GetDlgItemText(hwnd,IDC_EDIT1,l_szCaiName,sizeof(l_szCaiName)/sizeof(WCHAR));//判断是否为空if (*l_szCaiName==NULL){MessageBox(hwnd,L"请输入菜名!",L"提示",MB_ICONERROR|MB_OK);return;}//}void SureToGetStaffSuggestions(HWND hwnd);//确认将员工的意见导入库处理
void ExportTxtFileOnStaffSuggestionsProc(HWND hwnd);//导出员工意见
INT_PTR CALLBACK StaffSuggestionsProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)//员工计事
{UNREFERENCED_PARAMETER(lParam);switch(message){case WM_CTLCOLORSTATIC:{if (GetDlgItem(hDlg,IDC_STATIC1) == (HWND)lParam||GetDlgItem(hDlg,IDC_STATIC2) == (HWND)lParam ){SetTextColor((HDC)wParam, RGB(255,0,255));SetBkMode((HDC)wParam, TRANSPARENT);//return (LRESULT)CreateSolidBrush(GetSysColor(COLOR_BTNFACE));return (BOOL)((HBRUSH)GetStockObject(NULL_BRUSH));}break;}case WM_INITDIALOG:{HINSTANCE hInst=(HINSTANCE)GetWindowLong(hDlg,GWL_HINSTANCE);//设置对话框图标SendMessage(hDlg, WM_SETICON, ICON_BIG,(LPARAM)LoadIcon(hInst, MAKEINTRESOURCE(IDI_ICON14))); HWND hBn1=GetDlgItem(hDlg,IDC_BUTTON1);HBITMAP hbmp1=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP20));//增加SendMessage(hBn1, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hbmp1);HWND hBn2=GetDlgItem(hDlg,IDC_BUTTON2);HBITMAP hbmp2=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP19));//修改SendMessage(hBn2, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hbmp2);HWND hBn3=GetDlgItem(hDlg,IDC_BUTTON3);HBITMAP hbmp3=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP51));//修改SendMessage(hBn3, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hbmp3);return (INT_PTR)TRUE;}case WM_COMMAND:{if (LOWORD(wParam)==IDCANCEL){EndDialog(hDlg,LOWORD(wParam));break;}switch(LOWORD(wParam)){case IDC_BUTTON1://确认{SureToGetStaffSuggestions(hDlg);break;}case IDC_BUTTON2://返回{EndDialog(hDlg,LOWORD(wParam));break;}case IDC_BUTTON3://导出txt文件{ExportTxtFileOnStaffSuggestionsProc(hDlg);break;}}break;}}return (INT_PTR)FALSE;
}
void ExportTxtFileOnStaffSuggestionsProc(HWND hwnd)//导出员工意见
{//访问数据库SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);result = SQLPrepare(hstmt,(SQLWCHAR*)L"select StaffSuggestions from staffsuggestion",SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;WCHAR  *g_szStaffSuggestions=(WCHAR *)calloc(65565,sizeof(WCHAR));lstrcatW(g_szStaffSuggestions,L"-----------------------------财神餐饮管理系统 员工反馈意见一览表-----------------------------");lstrcatW(g_szStaffSuggestions,L"\r\n");lstrcatW(g_szStaffSuggestions,L"\r\n");while (SQLFetch(hstmt)!=SQL_NO_DATA_FOUND){WCHAR l_szCusSuggestions[256];SQLGetData(hstmt,1,SQL_C_WCHAR,l_szCusSuggestions,100,&cbsatid);lstrcatW(g_szStaffSuggestions,l_szCusSuggestions);lstrcatW(g_szStaffSuggestions,L"\r\n");lstrcatW(g_szStaffSuggestions,L"\r\n");}//释放odbc资源SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);//保存{HANDLE hFile;ULONG TextLen;TextLen = lstrlenW(g_szStaffSuggestions);DWORD  num1=0;WCHAR *strFileNameTemp=(WCHAR *)calloc(FILENAMESIZE,sizeof(WCHAR));     //保存文件名WCHAR *strFilePathTemp=(WCHAR *)calloc(FILEPATHSIZE,sizeof(WCHAR));     //保存文件路径if(SaveFileDlg(hwnd,strFilePathTemp,strFileNameTemp))               //保存对话框{hFile = CreateFile(strFilePathTemp, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);if (hFile == INVALID_HANDLE_VALUE) {MessageBox(hwnd,L"打开文件失败!",NULL,MB_ICONEXCLAMATION);}else{WORD a = 0xfeff;//写入0xfeff让记事本以Unicode方式打开,中文不会乱码WriteFile(hFile, &a, 2, &num1, NULL);if(WriteFile(hFile,g_szStaffSuggestions,(TextLen+1)*2,&num1,NULL)){MessageBox(hwnd,L"导出txt文件成功!",L"成功",MB_ICONINFORMATION);}else{MessageBox(hwnd,L"导出失败!",L"失败",MB_ICONEXCLAMATION);}CloseHandle(hFile);}}free(strFileNameTemp);                          //释放名字空间free(strFilePathTemp);                          //释放地址空间}free(g_szStaffSuggestions);//释放意见空间}
void SureToGetStaffSuggestions(HWND hwnd)//确认将员工的意见导入库处理
{//获取编辑框内容WCHAR l_szInfo[256];GetDlgItemText(hwnd,IDC_EDIT1,l_szInfo,sizeof(l_szInfo)/sizeof(WCHAR));//判断是否为空if (*l_szInfo==NULL){MessageBox(hwnd,L"请输入内容!",L"提示",MB_OK|MB_ICONERROR);return;}//访问数据库SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);WCHAR sql[256];//DELETEt1,t2 from t1 LEFTJOINt2 ON t1.id=t2.id WHERE t1.id=25wsprintf(sql,L"insert into staffsuggestion(StaffSuggestions) values('%s')",l_szInfo);result = SQLPrepare(hstmt,(SQLWCHAR*)sql,SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;MessageBox(hwnd,L"员工意见已经保存\n您可以点击“导出txt文件”按钮查看客户意见!",L"提示",MB_ICONINFORMATION|MB_OK);//释放odbc资源SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);}
void InitListViewInfoOnStaffRecordProc(HWND hwnd,HWND hListView);//初始化员工档案listview信息
BOOL InitListViewImageList(HWND hWndListView) ;//插入listview图标
INT_PTR CALLBACK AddStaffInfoOnStaffRecordProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);//增加员工档案
INT_PTR CALLBACK ChangeStaffInfoOnStaffRecordProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);//修改员工档案
void InserStaffInfoToListViewOnStaffRecordProc(HWND hListView,WCHAR szStaffNumber[],WCHAR szStaffName[],WCHAR szStaffID[],WCHAR StaffHomeAddress[],WCHAR szStaffPhoneNumber[],WCHAR szStaffPost[],WCHAR szStaffState[],WCHAR szStaffExtraInfo[],WCHAR szFastInfo[]);//插入信息
INT_PTR CALLBACK DeleteStaffInfoOnStaffRecordProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);//删除员工档案
void ExportTxtFileOnStaffRecordProc(HWND hwnd);//导出txt文件
INT_PTR CALLBACK StaffRecordProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)//员工档案
{UNREFERENCED_PARAMETER(lParam);switch(message){case WM_INITDIALOG:{HINSTANCE hInst=(HINSTANCE)GetWindowLong(hDlg,GWL_HINSTANCE);//设置对话框图标SendMessage(hDlg, WM_SETICON, ICON_BIG,(LPARAM)LoadIcon(hInst, MAKEINTRESOURCE(IDI_ICON26))); //创建listviewRECT rect;GetClientRect(hDlg,&rect);HWND hListView;hListView = CreateWindowEx(LVS_EX_FULLROWSELECT,_T("SysListView32"),NULL,LVS_REPORT | WS_CHILD |WS_VISIBLE|WS_VSCROLL|WS_HSCROLL,0,50,rect.right,rect.bottom-100,hDlg,(HMENU)1001,hInst,NULL);SendMessage(hListView,LVM_SETTEXTCOLOR,0,RGB(0,0,255));//设置文本颜色SendMessage(hListView,LVM_SETTEXTBKCOLOR ,0,RGB(188,198,215));//设置背景颜色SetFocus(hListView);ListView_SetItemState(hListView,0,LVIS_SELECTED,LVIS_SELECTED);     //参数0使第一行处于选择中状态,若为-1则表示所有的行ListView_SetExtendedListViewStyle(hListView,LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_AUTOSIZECOLUMNS);              //设置整行选择风格/////插入列LV_COLUMN lvc;lvc.mask = LVCF_TEXT | LVCF_WIDTH | LVCF_FMT|LVCFMT_CENTER;lvc.fmt=LVCFMT_CENTER;lvc.pszText =L"员工编号";lvc.cx = 60;SendMessage(hListView,LVM_INSERTCOLUMN,0,(LPARAM)&lvc);lvc.pszText = L"员工姓名";lvc.cx = 150;SendMessage(hListView,LVM_INSERTCOLUMN,1,(LPARAM)&lvc);lvc.pszText = L"身份证号";   SendMessage(hListView,LVM_INSERTCOLUMN,2,(LPARAM)&lvc);lvc.pszText = L"家庭住址";SendMessage(hListView,LVM_INSERTCOLUMN,3,(LPARAM)&lvc);lvc.pszText = L"联系电话";SendMessage(hListView,LVM_INSERTCOLUMN,4,(LPARAM)&lvc);lvc.pszText = L"职位";SendMessage(hListView,LVM_INSERTCOLUMN,5,(LPARAM)&lvc);lvc.pszText = L"发卡状态";SendMessage(hListView,LVM_INSERTCOLUMN,6,(LPARAM)&lvc);lvc.pszText = L"备注";SendMessage(hListView,LVM_INSERTCOLUMN,7,(LPARAM)&lvc);lvc.pszText = L"角色";SendMessage(hListView,LVM_INSERTCOLUMN,8,(LPARAM)&lvc);//设置按钮位图HWND hBn1=GetDlgItem(hDlg,IDC_BUTTON1);HBITMAP hbmp1=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP48));//增加SendMessage(hBn1, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hbmp1);HWND hBn2=GetDlgItem(hDlg,IDC_BUTTON2);HBITMAP hbmp2=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP49));//修改SendMessage(hBn2, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hbmp2);HWND hBn3=GetDlgItem(hDlg,IDC_BUTTON3);HBITMAP hbmp3=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP50));//删除SendMessage(hBn3, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hbmp3);HWND hBn4=GetDlgItem(hDlg,IDC_BUTTON4);HBITMAP hbmp4=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP51));//导出txt文件SendMessage(hBn4, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hbmp4);HWND hBn5=GetDlgItem(hDlg,IDC_BUTTON5);HBITMAP hbmp5=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP52));//详细SendMessage(hBn5, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hbmp5);HWND hBn6=GetDlgItem(hDlg,IDC_BUTTON6);HBITMAP hbmp6=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP53));//返回SendMessage(hBn6, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hbmp6);//初始化listview数据InitListViewImageList(hListView);//图标InitListViewInfoOnStaffRecordProc(hDlg,hListView);return (INT_PTR)TRUE;}case WM_COMMAND:{if (LOWORD(wParam)==IDCANCEL){EndDialog(hDlg,LOWORD(wParam));break;}switch(LOWORD(wParam)){case IDC_BUTTON1://增加{HINSTANCE hInst=(HINSTANCE)GetWindowLong(hDlg,GWL_HINSTANCE);DialogBox(hInst,MAKEINTRESOURCE(IDD_DIALOG19),hDlg,AddStaffInfoOnStaffRecordProc);break;}case IDC_BUTTON2://修改{HINSTANCE hInst=(HINSTANCE)GetWindowLong(hDlg,GWL_HINSTANCE);DialogBox(hInst,MAKEINTRESOURCE(IDD_DIALOG20),hDlg,ChangeStaffInfoOnStaffRecordProc);break;}case IDC_BUTTON3://删除{HINSTANCE hInst=(HINSTANCE)GetWindowLong(hDlg,GWL_HINSTANCE);DialogBox(hInst,MAKEINTRESOURCE(IDD_DIALOG21),hDlg,DeleteStaffInfoOnStaffRecordProc);break;}case IDC_BUTTON4://导出txt文件{ExportTxtFileOnStaffRecordProc(hDlg);break;}case IDC_BUTTON5://详细{break;}case IDC_BUTTON6://返回{EndDialog(hDlg,LOWORD(wParam));break;}}break;}}return (INT_PTR)FALSE;
}
void ExportTxtFileOnStaffRecordProc(HWND hwnd)//导出txt文件
{//访问数据库,获取信息//访问数据库SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);result = SQLPrepare(hstmt,(SQLWCHAR*)L"select StaffNumber,StaffName,StaffID,StaffHomeAddress,StaffPhoneNumber,StaffPost,StaffCarState,StaffExtraInfo,FastInfo,StaffSalary from staffinfo",SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;WCHAR *g_szInfo=(WCHAR *)calloc(65556,sizeof(WCHAR));lstrcatW(g_szInfo,L"-----------------------------财神餐饮管理系统 员工档案明细一览表-----------------------------");lstrcatW(g_szInfo,L"\r\n");lstrcatW(g_szInfo,L"\r\n");int ln_StaffNumber[256];WCHAR l_szStaffName[256];WCHAR l_szStaffID[256];WCHAR L_szStaffHomeAddress[256];int ln_StaffPhoneNumber;WCHAR l_szStaffPost[256];WCHAR l_szStaffCarState[256];WCHAR l_szStaffExtraInfo[256];WCHAR l_szFastInfo[256];WCHAR l_szStaffSalary[256];while (SQLFetch(hstmt)!=SQL_NO_DATA_FOUND){SQLGetData(hstmt,1,SQL_C_ULONG,&ln_StaffNumber,100,&cbsatid);//转字符串WCHAR l_szStaffNumber[256];wsprintf(l_szStaffNumber,L"%d",ln_StaffNumber);lstrcatW(g_szInfo,L"编号:");//连接lstrcatW(g_szInfo,l_szStaffNumber);lstrcatW(g_szInfo,L"\r\n");SQLGetData(hstmt,2,SQL_C_WCHAR,l_szStaffName,256,&cbsatid);lstrcatW(g_szInfo,L"姓名:");lstrcatW(g_szInfo,l_szStaffName);lstrcatW(g_szInfo,L"\r\n");SQLGetData(hstmt,3,SQL_C_WCHAR,l_szStaffID,256,&cbsatid);lstrcatW(g_szInfo,L"身份证号:");lstrcatW(g_szInfo,l_szStaffID);lstrcatW(g_szInfo,L"\r\n");SQLGetData(hstmt,4,SQL_C_WCHAR,L_szStaffHomeAddress,256,&cbsatid);lstrcatW(g_szInfo,L"家庭住址:");lstrcatW(g_szInfo,L_szStaffHomeAddress);lstrcatW(g_szInfo,L"\r\n");SQLGetData(hstmt,5,SQL_C_ULONG,&ln_StaffPhoneNumber,256,&cbsatid);//转字符串WCHAR l_szStaffPhoneNumber[256];wsprintf(l_szStaffPhoneNumber,L"%d",ln_StaffPhoneNumber);lstrcatW(g_szInfo,L"电话号码:");lstrcatW(g_szInfo,l_szStaffPhoneNumber);lstrcatW(g_szInfo,L"\r\n");SQLGetData(hstmt,6,SQL_C_WCHAR,l_szStaffPost,256,&cbsatid);lstrcatW(g_szInfo,L"职位:");lstrcatW(g_szInfo,l_szStaffPost);lstrcatW(g_szInfo,L"\r\n");SQLGetData(hstmt,7,SQL_C_WCHAR,l_szStaffCarState,256,&cbsatid);lstrcatW(g_szInfo,L"发卡状态:");lstrcatW(g_szInfo,l_szStaffCarState);lstrcatW(g_szInfo,L"\r\n");SQLGetData(hstmt,8,SQL_C_WCHAR,l_szStaffExtraInfo,256,&cbsatid);lstrcatW(g_szInfo,L"备注信息:");lstrcatW(g_szInfo,l_szStaffExtraInfo);lstrcatW(g_szInfo,L"\r\n");SQLGetData(hstmt,9,SQL_C_WCHAR,l_szFastInfo,256,&cbsatid);lstrcatW(g_szInfo,L"系统角色:");lstrcatW(g_szInfo,l_szFastInfo);lstrcatW(g_szInfo,L"\r\n");SQLGetData(hstmt,10,SQL_C_WCHAR,l_szStaffSalary,256,&cbsatid);lstrcatW(g_szInfo,L"工资:");lstrcatW(g_szInfo,l_szStaffSalary);lstrcatW(g_szInfo,L"\r\n");lstrcatW(g_szInfo,L"\r\n");lstrcatW(g_szInfo,L"\r\n");}//释放odbc资源SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);//保存{HANDLE hFile;ULONG TextLen;TextLen = lstrlenW(g_szInfo);DWORD  num1=0;WCHAR *strFileNameTemp=(WCHAR *)calloc(FILENAMESIZE,sizeof(WCHAR));       //保存文件名WCHAR *strFilePathTemp=(WCHAR *)calloc(FILEPATHSIZE,sizeof(WCHAR));     //保存文件路径if(SaveFileDlg(hwnd,strFilePathTemp,strFileNameTemp))               //保存对话框{hFile = CreateFile(strFilePathTemp, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);if (hFile == INVALID_HANDLE_VALUE) {MessageBox(hwnd,L"打开文件失败!",NULL,MB_ICONEXCLAMATION);}else{WORD a = 0xfeff;//写入0xfeff让记事本以Unicode方式打开,中文不会乱码WriteFile(hFile, &a, 2, &num1, NULL);if(WriteFile(hFile,g_szInfo,(TextLen+1)*2,&num1,NULL)){MessageBox(hwnd,L"导出txt文件成功!",L"成功",MB_ICONINFORMATION);}else{MessageBox(hwnd,L"导出失败!",L"失败",MB_ICONEXCLAMATION);}CloseHandle(hFile);}}free(strFileNameTemp);                          //释放名字空间free(strFilePathTemp);                          //释放地址空间}free(g_szInfo);}
void InitStaffNumOnDeleteStaffInfoOnStaffRecordProc(HWND hwnd);//初始化员工编号组合框内容
void AutoSetStaffNameOnDeleteStaffInfoOnStaffRecordProc(HWND hwnd);//动态设置员工的姓名
void SureToDeleteStaffInfoOnDeleteStaffInfoOnStaffRecordProc(HWND hwnd);//确认删除处理
INT_PTR CALLBACK DeleteStaffInfoOnStaffRecordProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)//删除员工档案
{UNREFERENCED_PARAMETER(lParam);switch(message){case WM_CTLCOLORSTATIC://设置静态文本框字体颜色{if (GetDlgItem(hDlg,IDC_STATIC1) == (HWND)lParam ||GetDlgItem(hDlg,IDC_STATIC2) == (HWND)lParam)//这里的1是静态文本框的ID{SetTextColor((HDC)wParam, RGB(255,0,0));SetBkMode((HDC)wParam, TRANSPARENT);//return (LRESULT)CreateSolidBrush(GetSysColor(COLOR_BTNFACE));return (BOOL)((HBRUSH)GetStockObject(NULL_BRUSH));}if (GetDlgItem(hDlg,IDC_STATIC3) == (HWND)lParam||GetDlgItem(hDlg,IDC_STATIC4) == (HWND)lParam ){SetTextColor((HDC)wParam, RGB(0,0,255));SetBkMode((HDC)wParam, TRANSPARENT);//return (LRESULT)CreateSolidBrush(GetSysColor(COLOR_BTNFACE));return (BOOL)((HBRUSH)GetStockObject(NULL_BRUSH));}break;}case WM_INITDIALOG:{HINSTANCE hInst=(HINSTANCE)GetWindowLong(hDlg,GWL_HINSTANCE);//设置对话框图标SendMessage(hDlg, WM_SETICON, ICON_BIG,(LPARAM)LoadIcon(hInst, MAKEINTRESOURCE(IDI_ICON27)));//设置按钮位图HWND hBn1=GetDlgItem(hDlg,IDC_BUTTON1);HBITMAP hbmp1=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP44));//确认SendMessage(hBn1, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hbmp1);HWND hBn2=GetDlgItem(hDlg,IDC_BUTTON2);HBITMAP hbmp2=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP19));//取消SendMessage(hBn2, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hbmp2);//初始化员工编号组合框内容InitStaffNumOnDeleteStaffInfoOnStaffRecordProc(hDlg);//设置定时器SetTimer(hDlg,1,2000,NULL);return (INT_PTR)TRUE;}case WM_TIMER:{AutoSetStaffNameOnDeleteStaffInfoOnStaffRecordProc(hDlg);break;}case WM_COMMAND:{if (LOWORD(wParam)==IDCANCEL){EndDialog(hDlg,LOWORD(wParam));break;}switch(LOWORD(wParam)){case IDC_BUTTON1://确认删除{SureToDeleteStaffInfoOnDeleteStaffInfoOnStaffRecordProc(hDlg);break;}case IDC_BUTTON2://取消{KillTimer(hDlg,1);EndDialog(hDlg,LOWORD(wParam));break;}}break;}}return (INT_PTR)FALSE;
}
void SureToDeleteStaffInfoOnDeleteStaffInfoOnStaffRecordProc(HWND hwnd)//确认删除处理
{//获取编号WCHAR l_szStaffNumber[256];GetDlgItemText(hwnd,IDC_COMBO1,l_szStaffNumber,sizeof(l_szStaffNumber)/sizeof(WCHAR));//转编号字符串为整形数据int ln_StaffNumber;ln_StaffNumber=_wtoi(l_szStaffNumber);if (*l_szStaffNumber==NULL){MessageBox(hwnd,L"请先选择要删除的员工编号!",L"提示",MB_OK|MB_ICONERROR);return;}//不为空,访问数据库,获取该员工的FastInfo信息,是否是“服务员”、“系统管理员”{//访问数据库SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);WCHAR sql[256];wsprintf(sql,L"select FastInfo from staffinfo where StaffNumber='%d'",ln_StaffNumber);result = SQLPrepare(hstmt,(SQLWCHAR*)sql,SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;WCHAR l_szRole[256];while (SQLFetch(hstmt)!=SQL_NO_DATA_FOUND){SQLGetData(hstmt,1,SQL_C_WCHAR,l_szRole,100,&cbsatid);break;}//释放odbc资源SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);{//现在判断是“服务员”还是“系统管理员”if (lstrcmpW(l_szRole,L"服务员")==0){//是服务员的情况下删除serverinfo表的对应信息//访问数据库SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);WCHAR sql[256];wsprintf(sql,L"delete from staffinfo where StaffNumber='%d'",ln_StaffNumber);result = SQLPrepare(hstmt,(SQLWCHAR*)sql,SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;//释放odbc资源SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);}if (lstrcmpW(l_szRole,L"系统管理员")==0){//是系统管理员的情况下删除mytable表中的对应信息//访问数据库SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);//获取姓名姓名WCHAR l_szName[256];GetDlgItemText(hwnd,IDC_EDIT1,l_szName,sizeof(l_szName)/sizeof(WCHAR));WCHAR sql[256];wsprintf(sql,L"delete from mytable where FUserName='%s'",l_szName);result = SQLPrepare(hstmt,(SQLWCHAR*)sql,SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;//释放odbc资源SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);}}}{//删除staffinfo表中的对应项//访问数据库SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);//获取姓名姓名WCHAR sql[256];wsprintf(sql,L"delete from staffinfo where StaffNumber='%d'",ln_StaffNumber);result = SQLPrepare(hstmt,(SQLWCHAR*)sql,SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;HWND hParent=GetParent(hwnd);HWND hListView=::FindWindowExW(hParent,NULL,L"SysListView32",NULL);SendMessage(hListView,LVM_DELETEALLITEMS,0,NULL);InitListViewInfoOnStaffRecordProc(hParent,hListView);MessageBox(hwnd,L"删除成功!",L"提示",MB_ICONINFORMATION|MB_OK);//释放odbc资源SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);}
}
void AutoSetStaffNameOnDeleteStaffInfoOnStaffRecordProc(HWND hwnd)//动态设置员工的姓名
{//根据用户选择的员工的编号设置姓名信息WCHAR l_szStaffNumber[256];GetDlgItemText(hwnd,IDC_COMBO1,l_szStaffNumber,sizeof(l_szStaffNumber)/sizeof(WCHAR));//转为整形数据int ln_StaffNumber;ln_StaffNumber=_wtoi(l_szStaffNumber);//访问数据库SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);WCHAR sql[256];wsprintf(sql,L"select StaffName from staffinfo where StaffNumber='%d'",ln_StaffNumber);result = SQLPrepare(hstmt,(SQLWCHAR*)sql,SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;WCHAR l_szName[256];while (SQLFetch(hstmt)!=SQL_NO_DATA_FOUND){SQLGetData(hstmt,1,SQL_C_WCHAR,l_szName,100,&cbsatid);SetDlgItemText(hwnd,IDC_EDIT1,l_szName);break;}//释放odbc资源SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);}
void InitStaffNumOnDeleteStaffInfoOnStaffRecordProc(HWND hwnd)//初始化员工编号组合框内容
{//访问数据库SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);result = SQLPrepare(hstmt,(SQLWCHAR*)L"select StaffNumber from staffinfo order by StaffNumber desc",SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;int l_nStaffNumber;//编号while (SQLFetch(hstmt)!=SQL_NO_DATA_FOUND){SQLGetData(hstmt,1,SQL_C_ULONG,&l_nStaffNumber,100,&cbsatid);//转整形数据为字符串WCHAR l_szStaffNumber[256];wsprintf(l_szStaffNumber,L"%d",l_nStaffNumber);//设置组合框信息SendDlgItemMessage(hwnd,IDC_COMBO1,CB_ADDSTRING,NULL,(LPARAM)l_szStaffNumber);}//释放odbc资源SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);}
void SureToChangeStaffInfoOnChangeStaffInfoOnStaffRecordProc(HWND hwnd);//确认修改处理
void GetStaffNumberOnChangeStaffInfoOnStaffRecordProc(HWND hwnd);//初始化员工编号
void AutoSetStaffSomeAtherInfoOnChangeStaffInfoOnStaffRecordProc(HWND hwnd);//动态设置其他信息
INT_PTR CALLBACK ChangeStaffInfoOnStaffRecordProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)//修改员工档案
{UNREFERENCED_PARAMETER(lParam);static BOOL gb_test=FALSE;switch(message){case WM_CTLCOLORSTATIC://设置静态文本框字体颜色{if (GetDlgItem(hDlg,IDC_STATIC3) == (HWND)lParam || GetDlgItem(hDlg,IDC_STATIC5) == (HWND)lParam||GetDlgItem(hDlg,IDC_STATIC12) == (HWND)lParam ||GetDlgItem(hDlg,IDC_STATIC13) == (HWND)lParam ||GetDlgItem(hDlg,IDC_STATIC16) == (HWND)lParam ||GetDlgItem(hDlg,IDC_STATIC17) == (HWND)lParam)//这里的1是静态文本框的ID{SetTextColor((HDC)wParam, RGB(255,0,0));SetBkMode((HDC)wParam, TRANSPARENT);//return (LRESULT)CreateSolidBrush(GetSysColor(COLOR_BTNFACE));return (BOOL)((HBRUSH)GetStockObject(NULL_BRUSH));}if (GetDlgItem(hDlg,IDC_STATIC1) == (HWND)lParam || GetDlgItem(hDlg,IDC_STATIC2) == (HWND)lParam ||GetDlgItem(hDlg,IDC_STATIC4) == (HWND)lParam  ||GetDlgItem(hDlg,IDC_STATIC6) == (HWND)lParam ||GetDlgItem(hDlg,IDC_STATIC7) == (HWND)lParam ||GetDlgItem(hDlg,IDC_STATIC8) == (HWND)lParam ||GetDlgItem(hDlg,IDC_STATIC9) == (HWND)lParam ||GetDlgItem(hDlg,IDC_STATIC10) == (HWND)lParam ||GetDlgItem(hDlg,IDC_STATIC11) == (HWND)lParam ||GetDlgItem(hDlg,IDC_STATIC14) == (HWND)lParam ||GetDlgItem(hDlg,IDC_STATIC15) == (HWND)lParam ){SetTextColor((HDC)wParam, RGB(0,0,255));SetBkMode((HDC)wParam, TRANSPARENT);//return (LRESULT)CreateSolidBrush(GetSysColor(COLOR_BTNFACE));return (BOOL)((HBRUSH)GetStockObject(NULL_BRUSH));}break;}//case WM_CTLCOLOREDIT://   { //        int i=GetWindowLong((HWND)lParam,GWL_ID);//        if(i==IDC_EDIT1 ||i==IDC_EDIT2 ||i==IDC_EDIT3||i==IDC_EDIT4||i==IDC_EDIT5||i==IDC_EDIT6||i==IDC_EDIT7||i==IDC_EDIT8)//      {//         SetTextColor((HDC)wParam,RGB(255,0,0));//文字颜色//         SetBkColor((HDC)wParam,GetSysColor(COLOR_BTNFACE));//文字的背后颜色//      }//     return (BOOL)((HBRUSH)GetStockObject(NULL_BRUSH));//    }// case WM_INITDIALOG:{HINSTANCE hInst=(HINSTANCE)GetWindowLong(hDlg,GWL_HINSTANCE);//设置对话框图标SendMessage(hDlg, WM_SETICON, ICON_BIG,(LPARAM)LoadIcon(hInst, MAKEINTRESOURCE(IDI_ICON14)));//设置按钮位图HWND hBn1=GetDlgItem(hDlg,IDC_BUTTON1);HBITMAP hbmp1=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP17));//确认SendMessage(hBn1, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hbmp1);HWND hBn2=GetDlgItem(hDlg,IDC_BUTTON2);HBITMAP hbmp2=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP19));//取消SendMessage(hBn2, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hbmp2);HWND hBn3=GetDlgItem(hDlg,IDC_BUTTON3);HBITMAP hbmp3=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP18));//启用SendMessage(hBn3, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hbmp3);HWND hBn4=GetDlgItem(hDlg,IDC_BUTTON4);HBITMAP hbmp4=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP57));//启用SendMessage(hBn4, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hbmp4);//禁用控件EnableWindow(GetDlgItem(hDlg,IDC_EDIT1),FALSE);EnableWindow(GetDlgItem(hDlg,IDC_EDIT2),FALSE);EnableWindow(GetDlgItem(hDlg,IDC_EDIT3),FALSE);EnableWindow(GetDlgItem(hDlg,IDC_EDIT4),FALSE);EnableWindow(GetDlgItem(hDlg,IDC_EDIT5),FALSE);EnableWindow(GetDlgItem(hDlg,IDC_EDIT6),FALSE);EnableWindow(GetDlgItem(hDlg,IDC_EDIT7),FALSE);EnableWindow(GetDlgItem(hDlg,IDC_EDIT8),FALSE);EnableWindow(GetDlgItem(hDlg,IDC_COMBO1),FALSE);EnableWindow(GetDlgItem(hDlg,IDC_COMBO2),FALSE);//初始化员工编号 GetStaffNumberOnChangeStaffInfoOnStaffRecordProc(hDlg);//设置定时器SetTimer(hDlg,1,3000,NULL);ShowWindow(GetDlgItem(hDlg,IDC_BUTTON4),SW_HIDE);//初始化角色//角色有系统管理员、服务员、收银员、餐厅经理、领班、大堂经理SendDlgItemMessage(hDlg,IDC_COMBO1,CB_ADDSTRING,NULL,(LPARAM)L"系统管理员");SendDlgItemMessage(hDlg,IDC_COMBO1,CB_ADDSTRING,NULL,(LPARAM)L"服务员");SendDlgItemMessage(hDlg,IDC_COMBO1,CB_ADDSTRING,NULL,(LPARAM)L"收银员");SendDlgItemMessage(hDlg,IDC_COMBO1,CB_ADDSTRING,NULL,(LPARAM)L"餐厅经理");SendDlgItemMessage(hDlg,IDC_COMBO1,CB_ADDSTRING,NULL,(LPARAM)L"领班");SendDlgItemMessage(hDlg,IDC_COMBO1,CB_ADDSTRING,NULL,(LPARAM)L"大堂经理");//设置职位COMB 初始值//职位有服务员、送餐员、领班、主管、经理、其它SendDlgItemMessage(hDlg,IDC_COMBO2,CB_ADDSTRING,NULL,(LPARAM)L"服务员");SendDlgItemMessage(hDlg,IDC_COMBO2,CB_ADDSTRING,NULL,(LPARAM)L"送餐员");SendDlgItemMessage(hDlg,IDC_COMBO2,CB_ADDSTRING,NULL,(LPARAM)L"领班");SendDlgItemMessage(hDlg,IDC_COMBO2,CB_ADDSTRING,NULL,(LPARAM)L"主管");SendDlgItemMessage(hDlg,IDC_COMBO2,CB_ADDSTRING,NULL,(LPARAM)L"经理");SendDlgItemMessage(hDlg,IDC_COMBO2,CB_ADDSTRING,NULL,(LPARAM)L"其它");return (INT_PTR)TRUE;}case WM_TIMER:{//动态设置各项信息AutoSetStaffSomeAtherInfoOnChangeStaffInfoOnStaffRecordProc(hDlg);break;}case WM_COMMAND:{if (LOWORD(wParam)==IDCANCEL){EndDialog(hDlg,LOWORD(wParam));break;}switch(LOWORD(wParam)){case IDC_BUTTON4://重新选择{if (gb_test==TRUE){SetTimer(hDlg,1,3000,NULL);EnableWindow(GetDlgItem(hDlg,IDC_COMBO3),TRUE);//隐藏和现实按钮ShowWindow(GetDlgItem(hDlg,IDC_BUTTON4),SW_HIDE);ShowWindow(GetDlgItem(hDlg,IDC_BUTTON3),SW_SHOW);}break;}case IDC_BUTTON1://确认修改信息{SureToChangeStaffInfoOnChangeStaffInfoOnStaffRecordProc(hDlg);break;}case IDC_BUTTON2://取消{KillTimer(hDlg,1);EndDialog(hDlg,LOWORD(wParam));break;}case IDC_BUTTON3://确认选择,启用控件,允许用户输入{//判空WCHAR l_szStaffNumber[256];GetDlgItemText(hDlg,IDC_COMBO3,l_szStaffNumber,sizeof(l_szStaffNumber)/sizeof(WCHAR));if (*l_szStaffNumber==NULL){MessageBox(hDlg,L"请选择要进行修改的员工编号!",L"提示",MB_ICONERROR|MB_OK);break;}KillTimer(hDlg,1);EnableWindow(GetDlgItem(hDlg,IDC_COMBO3),FALSE);gb_test=TRUE;EnableWindow(GetDlgItem(hDlg,IDC_EDIT1),TRUE);EnableWindow(GetDlgItem(hDlg,IDC_EDIT2),TRUE);EnableWindow(GetDlgItem(hDlg,IDC_EDIT3),TRUE);EnableWindow(GetDlgItem(hDlg,IDC_EDIT4),TRUE);EnableWindow(GetDlgItem(hDlg,IDC_EDIT5),TRUE);EnableWindow(GetDlgItem(hDlg,IDC_EDIT6),TRUE);EnableWindow(GetDlgItem(hDlg,IDC_EDIT7),TRUE);EnableWindow(GetDlgItem(hDlg,IDC_EDIT8),TRUE);EnableWindow(GetDlgItem(hDlg,IDC_COMBO1),TRUE);EnableWindow(GetDlgItem(hDlg,IDC_COMBO2),TRUE);MessageBeep(1);//隐藏和现实按钮ShowWindow(GetDlgItem(hDlg,IDC_BUTTON3),SW_HIDE);ShowWindow(GetDlgItem(hDlg,IDC_BUTTON4),SW_SHOW);break;}}break;}}return (INT_PTR)FALSE;
}
void AutoSetStaffSomeAtherInfoOnChangeStaffInfoOnStaffRecordProc(HWND hwnd)//动态设置其他信息
{//先要获取用户选择的客户的编号信息WCHAR l_szStaffNumber[256];GetDlgItemText(hwnd,IDC_COMBO3,l_szStaffNumber,sizeof(l_szStaffNumber)/sizeof(WCHAR));//判断是否为空if (*l_szStaffNumber==NULL){return;//不显示信息}//开始访问数据库,利用用户选择的员工编号作为匹配条件SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);//转字符串类型的staffnumber为整形数据int ln_StaffNumber;ln_StaffNumber=_wtoi(l_szStaffNumber);WCHAR sql[256];wsprintf(sql,L"select StaffName,StaffID,StaffHomeAddress,StaffPhoneNumber,StaffPost,StaffExtraInfo,FastInfo,StaffSalary from staffinfo where StaffNumber='%d'",ln_StaffNumber);result = SQLPrepare(hstmt,(SQLWCHAR*)sql,SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;WCHAR l_szStaffName[256];//姓名WCHAR l_szStaffID[256];//身份证号WCHAR l_szStaffHomeAddress[256];//家庭住址int l_nStaffPhoneNumber;//电话号码WCHAR l_szStaffPost[256];//职位WCHAR l_szStaffExtraInfo[256];//备注信息WCHAR l_szFastInfo[256];//管理信息WCHAR l_szStaffSalary[256];while (SQLFetch(hstmt)!=SQL_NO_DATA_FOUND){ZeroMemory(l_szStaffName,sizeof(l_szStaffName)/sizeof(WCHAR));ZeroMemory(l_szStaffID,sizeof(l_szStaffID)/sizeof(WCHAR));ZeroMemory(l_szStaffHomeAddress,sizeof(l_szStaffHomeAddress)/sizeof(WCHAR));ZeroMemory(l_szStaffPost,sizeof(l_szStaffPost)/sizeof(WCHAR));ZeroMemory(l_szStaffExtraInfo,sizeof(l_szStaffExtraInfo)/sizeof(WCHAR));ZeroMemory(l_szFastInfo,sizeof(l_szFastInfo)/sizeof(WCHAR));ZeroMemory(l_szStaffSalary,sizeof(l_szStaffSalary)/sizeof(WCHAR));SQLGetData(hstmt,1,SQL_C_WCHAR,l_szStaffName,100,&cbsatid);SQLGetData(hstmt,2,SQL_C_WCHAR,l_szStaffID,100,&cbsatid);SQLGetData(hstmt,3,SQL_C_WCHAR,l_szStaffHomeAddress,100,&cbsatid);SQLGetData(hstmt,4,SQL_C_ULONG,&l_nStaffPhoneNumber,100,&cbsatid);SQLGetData(hstmt,5,SQL_C_WCHAR,l_szStaffPost,256,&cbsatid);SQLGetData(hstmt,6,SQL_C_WCHAR,l_szStaffExtraInfo,100,&cbsatid);SQLGetData(hstmt,7,SQL_C_WCHAR,l_szFastInfo,100,&cbsatid);SQLGetData(hstmt,8,SQL_C_WCHAR,l_szStaffSalary,100,&cbsatid);//转整形数据为字符串WCHAR l_szStaffPhoneNumber[256];wsprintf(l_szStaffPhoneNumber,L"%d",l_nStaffPhoneNumber);//设置各项信息SetDlgItemText(hwnd,IDC_EDIT1,l_szStaffName);SetDlgItemText(hwnd,IDC_COMBO1,l_szFastInfo);SetDlgItemText(hwnd,IDC_EDIT2,l_szStaffID);SetDlgItemText(hwnd,IDC_EDIT3,l_szStaffHomeAddress);SetDlgItemText(hwnd,IDC_EDIT4,l_szStaffPhoneNumber);SetDlgItemText(hwnd,IDC_EDIT5,l_szStaffSalary);SetDlgItemText(hwnd,IDC_COMBO2,l_szStaffPost);SetDlgItemText(hwnd,IDC_EDIT6,l_szStaffExtraInfo);break;}//释放odbc资源SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);}
void GetStaffNumberOnChangeStaffInfoOnStaffRecordProc(HWND hwnd)//初始化员工编号
{//访问数据库中 的staffinfo 表,获取StaffNumber字段信息SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);result = SQLPrepare(hstmt,(SQLWCHAR*)L"select StaffNumber from staffinfo order by StaffNumber desc",SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;int l_nStaffNumber;//编号while (SQLFetch(hstmt)!=SQL_NO_DATA_FOUND){SQLGetData(hstmt,1,SQL_C_ULONG,&l_nStaffNumber,100,&cbsatid);//转整形数据为字符串WCHAR l_szStaffNumber[256];wsprintf(l_szStaffNumber,L"%d",l_nStaffNumber);//设置组合框信息SendDlgItemMessage(hwnd,IDC_COMBO3,CB_ADDSTRING,NULL,(LPARAM)l_szStaffNumber);}//释放odbc资源SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);}
void SureToChangeStaffInfoOnChangeStaffInfoOnStaffRecordProc(HWND hwnd)//确认修改处理
{//获取用户的输入的信息//获取编号WCHAR l_szStaffNumber[256];GetDlgItemText(hwnd,IDC_COMBO3,l_szStaffNumber,sizeof(l_szStaffNumber)/sizeof(WCHAR));//获取姓名WCHAR l_szStaffName[256];GetDlgItemText(hwnd,IDC_EDIT1,l_szStaffName,sizeof(l_szStaffName)/sizeof(WCHAR));//获取角色WCHAR l_szStaffRole[256];GetDlgItemText(hwnd,IDC_COMBO1,l_szStaffRole,sizeof(l_szStaffRole)/sizeof(WCHAR));//获取身份证号WCHAR l_szStaffID[256];GetDlgItemText(hwnd,IDC_EDIT2,l_szStaffID,sizeof(l_szStaffID)/sizeof(WCHAR));//获取家庭住址WCHAR l_szStaffHomeAddress[256];GetDlgItemText(hwnd,IDC_EDIT3,l_szStaffHomeAddress,sizeof(l_szStaffHomeAddress)/sizeof(WCHAR));//获取电话号码WCHAR l_szPhoneNumber[256];GetDlgItemText(hwnd,IDC_EDIT4,l_szPhoneNumber,sizeof(l_szPhoneNumber)/sizeof(WCHAR));//获取工资WCHAR l_szStaffSalary[256];GetDlgItemText(hwnd,IDC_EDIT5,l_szStaffSalary,sizeof(l_szStaffSalary)/sizeof(WCHAR));//获取职位WCHAR l_szStaffPost[256];GetDlgItemText(hwnd,IDC_COMBO2,l_szStaffPost,sizeof(l_szStaffPost)/sizeof(WCHAR));//获取备注WCHAR l_szExtraInfo[256];GetDlgItemText(hwnd,IDC_EDIT6,l_szExtraInfo,sizeof(l_szExtraInfo)/sizeof(WCHAR));//获取密码WCHAR l_szPassWord[256];GetDlgItemText(hwnd,IDC_EDIT7,l_szPassWord,sizeof(l_szPassWord)/sizeof(WCHAR));//获取二次密码WCHAR l_szPassWordAgain[256];GetDlgItemText(hwnd,IDC_EDIT8,l_szPassWordAgain,sizeof(l_szPassWordAgain)/sizeof(WCHAR));//获取完毕,现在进行异常检查if (*l_szStaffName==NULL || *l_szStaffRole==NULL){MessageBox(hwnd,L"标有“*”的项必须填写!",L"提示",MB_OK|MB_ICONERROR);return;}if (lstrcmpW(l_szStaffRole,L"系统管理员")==0){if (*l_szPassWord==NULL ||*l_szPassWordAgain==NULL){MessageBox(hwnd,L"系统管理员密码项必须填写!",L"提示",MB_ICONERROR|MB_OK);return;}if (lstrcmpW(l_szPassWordAgain,l_szPassWord)!=0){SetDlgItemText(hwnd,IDC_EDIT7,NULL);SetDlgItemText(hwnd,IDC_EDIT8,NULL);MessageBox(hwnd,L"请重新输入密码!",L"提示",MB_OK|MB_ICONERROR);return;}}if (lstrcmpW(l_szStaffRole,L"系统管理员")!=0){if (*l_szPassWord!=NULL || *l_szPassWordAgain!=NULL){MessageBox(hwnd,L"非系统管理员密码不能填写!",L"提示",MB_ICONERROR|MB_OK);return;}}//转编号为整形数据int ln_StaffNumber;ln_StaffNumber=_wtoi(l_szStaffNumber);//转电话号码为整形数据int ln_StaffPhoneNumber;ln_StaffPhoneNumber=_wtoi(l_szPhoneNumber);//全局变量WCHAR szName[256];WCHAR szPost[256];WCHAR szRole[256];//异常排除,访问数据库,进行多表更新{//先要利用编号匹配数据库的表,取出StaffRole段,判断是否是"服务员"、“系统管理员”SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);WCHAR sql1[256];wsprintf(sql1,L"select StaffName,StaffPost,FastInfo from staffinfo where StaffNumber='%d'",ln_StaffNumber);result = SQLPrepare(hstmt,(SQLWCHAR*)sql1,SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;while (SQLFetch(hstmt)!=SQL_NO_DATA_FOUND){SQLGetData(hstmt,1,SQL_C_WCHAR,szName,100,&cbsatid);SQLGetData(hstmt,2,SQL_C_WCHAR,szPost,100,&cbsatid);SQLGetData(hstmt,3,SQL_C_WCHAR,szRole,100,&cbsatid);break;}//释放odbc资源SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);}//判断数据if (lstrcmpW(szRole,L"服务员")==0){//判断用户现在选择的是否还是服务员if (lstrcmpW(l_szStaffRole,L"服务员")==0){//更新serverinfo表SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);WCHAR sql[256];wsprintf(sql,L"update serverinfo set ServerName='%s',Apartment='%s' where ServerName='%s'",l_szStaffName,l_szStaffPost,szName);result = SQLPrepare(hstmt,(SQLWCHAR*)sql,SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;//MessageBox(hwnd,L"执行成功!",L"提示",MB_ICONINFORMATION|MB_OK);//释放odbc资源SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);}//用户现在选择的不是服务员了,就要删除服务员表的对应内容else{SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);WCHAR sql[256];wsprintf(sql,L"delete from serverinfo where ServerName='%s'",szName);result = SQLPrepare(hstmt,(SQLWCHAR*)sql,SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;//MessageBox(hwnd,L"执行成功!",L"提示",MB_ICONINFORMATION|MB_OK);//释放odbc资源SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);}}if (lstrcmpW(szRole,L"系统管理员")==0){//判断用户现在选择是否还是系统管理员if (lstrcmpW(l_szStaffRole,L"系统管理员")==0){//更新mytable表SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);WCHAR sql[256];wsprintf(sql,L"update mytable set  FUserName='%s', FPassWord='%s' where FUserName='%s'",l_szStaffName,l_szPassWord,szName);result = SQLPrepare(hstmt,(SQLWCHAR*)sql,SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;//MessageBox(hwnd,L"执行成功!",L"提示",MB_ICONINFORMATION|MB_OK);//释放odbc资源SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);}else{//用户现在选择不是系统管理员了,就要删除mytable表的对应内容SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);WCHAR sql[256];wsprintf(sql,L"delete from mytable where FUserName='%s'",szName);result = SQLPrepare(hstmt,(SQLWCHAR*)sql,SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;//MessageBox(hwnd,L"执行成功!",L"提示",MB_ICONINFORMATION|MB_OK);//释放odbc资源SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);}}else//既不是服务员,又不是系统管理员{//再判断现在用户选择的是“服务员”还是“系统管理员”if (lstrcmpW(l_szStaffRole,L"服务员")==0){//向serverinfo表中插入数据SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);WCHAR sql[256];wsprintf(sql,L"insert into serverinfo(ServerName,Apartment) values('%s','%s')",l_szStaffName,l_szStaffPost);result = SQLPrepare(hstmt,(SQLWCHAR*)sql,SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;//MessageBox(hwnd,L"执行成功!",L"提示",MB_ICONINFORMATION|MB_OK);//释放odbc资源SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);}if (lstrcmpW(l_szStaffRole,L"系统管理员")==0){//向mytable表中插入数据SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);WCHAR sql[256];wsprintf(sql,L"insert into mytable(FUserName,FPassWord) values('%s','%s')",l_szStaffName,l_szPassWord);result = SQLPrepare(hstmt,(SQLWCHAR*)sql,SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;//MessageBox(hwnd,L"执行成功!",L"提示",MB_ICONINFORMATION|MB_OK);//释放odbc资源SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);}}{SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);WCHAR sql[256];wsprintf(sql,L"update staffinfo set StaffName='%s',StaffID='%s',StaffHomeAddress='%s',StaffPhoneNumber='%d',StaffPost='%s',StaffExtraInfo='%s',FastInfo='%s',StaffSalary='%s' where StaffNumber='%d'",l_szStaffName,l_szStaffID,l_szStaffHomeAddress,ln_StaffPhoneNumber,l_szStaffPost,l_szExtraInfo,l_szStaffRole,l_szStaffSalary,ln_StaffNumber);result = SQLPrepare(hstmt,(SQLWCHAR*)sql,SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;HWND hParent=GetParent(hwnd);HWND hListView=::FindWindowExW(hParent,NULL,L"SysListView32",NULL);SendMessage(hListView,LVM_DELETEALLITEMS,0,NULL);InitListViewInfoOnStaffRecordProc(hParent,hListView);MessageBox(hwnd,L"执行成功!",L"提示",MB_ICONINFORMATION|MB_OK);//释放odbc资源SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);}}
void SureToAddStaffInfoOnAddStaffInfoOnStaffRecordProc(HWND hwnd);//确认增加
INT_PTR CALLBACK AddStaffInfoOnStaffRecordProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)//增加员工档案
{UNREFERENCED_PARAMETER(lParam);switch(message){/*case WM_CTLCOLORDLG:{HBRUSH g_hbrBackground = CreateSolidBrush(RGB(13,120,50));return (LONG)g_hbrBackground;}*/case WM_CTLCOLORSTATIC://设置静态文本框字体颜色{if (GetDlgItem(hDlg,IDC_STATIC3) == (HWND)lParam || GetDlgItem(hDlg,IDC_STATIC5) == (HWND)lParam||GetDlgItem(hDlg,IDC_STATIC12) == (HWND)lParam ||GetDlgItem(hDlg,IDC_STATIC13) == (HWND)lParam )//这里的1是静态文本框的ID{SetTextColor((HDC)wParam, RGB(255,0,0));SetBkMode((HDC)wParam, TRANSPARENT);//return (LRESULT)CreateSolidBrush(GetSysColor(COLOR_BTNFACE));return (BOOL)((HBRUSH)GetStockObject(NULL_BRUSH));}if (GetDlgItem(hDlg,IDC_STATIC1) == (HWND)lParam || GetDlgItem(hDlg,IDC_STATIC2) == (HWND)lParam ||GetDlgItem(hDlg,IDC_STATIC4) == (HWND)lParam  ||GetDlgItem(hDlg,IDC_STATIC6) == (HWND)lParam ||GetDlgItem(hDlg,IDC_STATIC7) == (HWND)lParam ||GetDlgItem(hDlg,IDC_STATIC8) == (HWND)lParam ||GetDlgItem(hDlg,IDC_STATIC9) == (HWND)lParam ||GetDlgItem(hDlg,IDC_STATIC10) == (HWND)lParam ||GetDlgItem(hDlg,IDC_STATIC11) == (HWND)lParam ||GetDlgItem(hDlg,IDC_STATIC14) == (HWND)lParam ||GetDlgItem(hDlg,IDC_STATIC15) == (HWND)lParam ){SetTextColor((HDC)wParam, RGB(0,0,255));SetBkMode((HDC)wParam, TRANSPARENT);//return (LRESULT)CreateSolidBrush(GetSysColor(COLOR_BTNFACE));return (BOOL)((HBRUSH)GetStockObject(NULL_BRUSH));}break;}case WM_INITDIALOG:{HINSTANCE hInst=(HINSTANCE)GetWindowLong(hDlg,GWL_HINSTANCE);//设置对话框图标SendMessage(hDlg, WM_SETICON, ICON_BIG,(LPARAM)LoadIcon(hInst, MAKEINTRESOURCE(IDI_ICON14)));//设置按钮位图HWND hBn1=GetDlgItem(hDlg,IDC_BUTTON1);HBITMAP hbmp1=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP20));//确认SendMessage(hBn1, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hbmp1);HWND hBn2=GetDlgItem(hDlg,IDC_BUTTON2);HBITMAP hbmp2=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP19));//取消SendMessage(hBn2, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hbmp2);//设置角色COMBO BOX 初始值//角色有系统管理员、服务员、收银员、餐厅经理、领班、大堂经理SendDlgItemMessage(hDlg,IDC_COMBO1,CB_ADDSTRING,NULL,(LPARAM)L"系统管理员");SendDlgItemMessage(hDlg,IDC_COMBO1,CB_ADDSTRING,NULL,(LPARAM)L"服务员");SendDlgItemMessage(hDlg,IDC_COMBO1,CB_ADDSTRING,NULL,(LPARAM)L"收银员");SendDlgItemMessage(hDlg,IDC_COMBO1,CB_ADDSTRING,NULL,(LPARAM)L"餐厅经理");SendDlgItemMessage(hDlg,IDC_COMBO1,CB_ADDSTRING,NULL,(LPARAM)L"领班");SendDlgItemMessage(hDlg,IDC_COMBO1,CB_ADDSTRING,NULL,(LPARAM)L"大堂经理");//设置职位COMB 初始值//职位有服务员、送餐员、领班、主管、经理、其它SendDlgItemMessage(hDlg,IDC_COMBO2,CB_ADDSTRING,NULL,(LPARAM)L"服务员");SendDlgItemMessage(hDlg,IDC_COMBO2,CB_ADDSTRING,NULL,(LPARAM)L"送餐员");SendDlgItemMessage(hDlg,IDC_COMBO2,CB_ADDSTRING,NULL,(LPARAM)L"领班");SendDlgItemMessage(hDlg,IDC_COMBO2,CB_ADDSTRING,NULL,(LPARAM)L"主管");SendDlgItemMessage(hDlg,IDC_COMBO2,CB_ADDSTRING,NULL,(LPARAM)L"经理");SendDlgItemMessage(hDlg,IDC_COMBO2,CB_ADDSTRING,NULL,(LPARAM)L"其它");return (INT_PTR)TRUE;}case WM_COMMAND:{if (LOWORD(wParam)==IDCANCEL){EndDialog(hDlg,LOWORD(wParam));break;}switch(LOWORD(wParam)){case IDC_BUTTON1://确认{SureToAddStaffInfoOnAddStaffInfoOnStaffRecordProc(hDlg);break;}case IDC_BUTTON2://取消{EndDialog(hDlg,LOWORD(wParam));break;}}break;}}return (INT_PTR)FALSE;
}
void SureToAddStaffInfoOnAddStaffInfoOnStaffRecordProc(HWND hwnd)//确认增加
{//获取用户输入的信息//获取姓名WCHAR l_szStaffName[256];GetDlgItemText(hwnd,IDC_EDIT2,l_szStaffName,sizeof(l_szStaffName)/sizeof(WCHAR));//获取角色WCHAR l_szRole[256];GetDlgItemText(hwnd,IDC_COMBO1,l_szRole,sizeof(l_szRole)/sizeof(WCHAR));//获取身份证号WCHAR l_szStaffID[256];GetDlgItemText(hwnd,IDC_EDIT3,l_szStaffID,sizeof(l_szStaffID)/sizeof(WCHAR));//获取家庭住址WCHAR l_szStaffHomeAddress[256];GetDlgItemText(hwnd,IDC_EDIT4,l_szStaffHomeAddress,sizeof(l_szStaffHomeAddress)/sizeof(WCHAR));//获取电话号码WCHAR l_szPhoneNumber[256];GetDlgItemText(hwnd,IDC_EDIT5,l_szPhoneNumber,sizeof(l_szPhoneNumber)/sizeof(WCHAR));//获取工资WCHAR l_szSalary[256];GetDlgItemText(hwnd,IDC_EDIT6,l_szSalary,sizeof(l_szSalary)/sizeof(WCHAR));//获取职位WCHAR l_szPost[256];GetDlgItemText(hwnd,IDC_COMBO2,l_szPost,sizeof(l_szPost)/sizeof(WCHAR));//获取备注(毕业院校等信息)WCHAR l_szExtraInfo[256];GetDlgItemText(hwnd,IDC_EDIT7,l_szExtraInfo,sizeof(l_szExtraInfo)/sizeof(WCHAR));//获取密码WCHAR l_szPassword[256];GetDlgItemText(hwnd,IDC_EDIT8,l_szPassword,sizeof(l_szPassword)/sizeof(WCHAR));//获取再次输入的密码WCHAR l_szPassWordAgain[256];GetDlgItemText(hwnd,IDC_EDIT9,l_szPassWordAgain,sizeof(l_szPassWordAgain)/sizeof(WCHAR));//现在对用户输入的信息进行判断,进行异常检查//先判断员工姓名和角色是否为空if (*l_szStaffName==NULL || *l_szRole==NULL){//提示用户MessageBox(hwnd,L"标有“*”的项均要填写!",L"提示",MB_OK|MB_ICONERROR);return;}//再对用户输入的角色判断是否是管理员if (lstrcmpW(l_szRole,L"系统管理员")==0){//是管理员的前提下检查密码是否为空,是否正确if (*l_szPassword==NULL){//提示用户MessageBox(hwnd,L"管理员密码必须填写!",L"提示",MB_ICONERROR|MB_OK);return;}if (lstrcmpW(l_szPassword,l_szPassWordAgain)!=0){//提示用户两次密码输入的不正确MessageBox(hwnd,L"请再次确认密码是否输入正确!",L"提示",MB_OK|MB_ICONERROR);return;}}if (lstrcmpW(l_szRole,L"系统管理员")!=0)//不是系统管理员的情况下,判断密码是否为空{if (*l_szPassword!=NULL ||*l_szPassWordAgain!=NULL){MessageBox(hwnd,L"非系统管理员不能注册密码!",L"提示",MB_ICONERROR|MB_OK);return;}}//异常已经处理,现在可以访问数据库了,这里涉及到多表插入,若是“系统管理员”,就要向mytable表中插入数据,若是“服务员”,就要向serverinfo表中添加数据{//访问数据库:表:staffinfo \mytable\serverinfoWCHAR sql[256];WCHAR sql1[256];WCHAR sql2[256];//转电话号码为整形数据int ln_PhoneNumber;ln_PhoneNumber=_wtoi(l_szPhoneNumber);SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);wsprintf(sql,L"insert into staffinfo(StaffName,FastInfo,StaffID,StaffHomeAddress,StaffPhoneNumber,StaffSalary,StaffPost,StaffExtraInfo) values('%s','%s','%s','%s','%d','%s','%s','%s')",l_szStaffName,l_szRole,l_szStaffID,l_szStaffHomeAddress,ln_PhoneNumber,l_szSalary,l_szPost,l_szExtraInfo);result = SQLPrepare(hstmt,(SQLWCHAR*)sql,SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;//MessageBox(hwnd,L"添加成功!",L"提示",MB_OK|MB_ICONINFORMATION);//释放odbc资源HWND hParent=GetParent(hwnd);HWND hListView=::FindWindowExW(hParent,NULL,L"SysListView32",NULL);SendMessage(hListView,LVM_DELETEALLITEMS,0,NULL);InitListViewInfoOnStaffRecordProc(hParent,hListView);SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);if (lstrcmpW(l_szRole,L"系统管理员")==0){SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);wsprintf(sql1,L"insert into mytable(FUserName,FPassWord) values('%s','%s')",l_szStaffName,l_szPassword);result = SQLPrepare(hstmt,(SQLWCHAR*)sql1,SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;MessageBox(hwnd,L"添加成功!",L"提示",MB_OK|MB_ICONINFORMATION);//释放odbc资源SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);}if (lstrcmpW(l_szRole,L"服务员")==0){SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);wsprintf(sql2,L"insert into serverinfo(ServerName,Apartment) values('%s','%s')",l_szStaffName,l_szPost);result = SQLPrepare(hstmt,(SQLWCHAR*)sql2,SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;MessageBox(hwnd,L"添加成功!",L"提示",MB_OK|MB_ICONINFORMATION);//释放odbc资源SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);}}}
BOOL InitListViewImageList(HWND hWndListView)
{ HICON hiconItem;     // Icon for list-view items.HIMAGELIST hLarge;   // Image list for icon view.HIMAGELIST hSmall;   // Image list for other views.// Create the full-sized icon image lists. hLarge = ImageList_Create(GetSystemMetrics(SM_CXICON), GetSystemMetrics(SM_CYICON), ILC_MASK, 1, 1); hSmall = ImageList_Create(GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), ILC_MASK, 1, 1); // Add an icon to each image list.  HWND hParent=GetParent(hWndListView);HINSTANCE g_hInst=(HINSTANCE)GetWindowLong(hParent,GWL_HINSTANCE);hiconItem = LoadIcon(g_hInst, MAKEINTRESOURCE(IDI_ICON23));ImageList_AddIcon(hLarge, hiconItem);ImageList_AddIcon(hSmall, hiconItem);DestroyIcon(hiconItem);// When you are dealing with multiple icons, you can use the previous four lines of
// code inside a loop. The following code shows such a loop. The
// icons are defined in the application's header file as resources, which
// are numbered consecutively starting with IDS_FIRSTICON. The number of
// icons is defined in the header file as C_ICONS.
/*    for(index = 0; index < C_ICONS; index++){hIconItem = LoadIcon (g_hinst, MAKEINTRESOURCE(IDS_FIRSTICON + index));ImageList_AddIcon(hSmall, hIconItem);ImageList_AddIcon(hLarge, hIconItem);Destroy(hIconItem);}
*/// Assign the image lists to the list-view control. ListView_SetImageList(hWndListView, hLarge, LVSIL_NORMAL); ListView_SetImageList(hWndListView, hSmall, LVSIL_SMALL); return TRUE;
}void InitListViewInfoOnStaffRecordProc(HWND hwnd,HWND hListView)//初始化员工档案listview信息
{//访问数据库,获取staffinfo表的信息//访问数据库SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);result = SQLPrepare(hstmt,(SQLWCHAR*)L"select StaffNumber,StaffName,StaffID,StaffHomeAddress,StaffPhoneNumber,StaffPost,StaffCarState,StaffExtraInfo,FastInfo from staffinfo order by StaffNumber desc",SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;int l_nStaffNumber;//编号WCHAR l_szStaffName[256];//姓名WCHAR l_szStaffID[256];//身份证号WCHAR l_szStaffHomeAddress[256];//家庭住址int l_nStaffPhoneNumber;//电话号码WCHAR l_szStaffPost[256];//职位WCHAR l_szStaffCarState[256];//发卡状态WCHAR l_szStaffExtraInfo[256];//备注信息WCHAR l_szFastInfo[256];//管理信息while (SQLFetch(hstmt)!=SQL_NO_DATA_FOUND){ZeroMemory(l_szStaffName,sizeof(l_szStaffName)/sizeof(WCHAR));ZeroMemory(l_szStaffID,sizeof(l_szStaffID)/sizeof(WCHAR));ZeroMemory(l_szStaffHomeAddress,sizeof(l_szStaffHomeAddress)/sizeof(WCHAR));ZeroMemory(l_szStaffPost,sizeof(l_szStaffPost)/sizeof(WCHAR));ZeroMemory(l_szStaffCarState,sizeof(l_szStaffCarState)/sizeof(WCHAR));ZeroMemory(l_szStaffExtraInfo,sizeof(l_szStaffExtraInfo)/sizeof(WCHAR));ZeroMemory(l_szFastInfo,sizeof(l_szFastInfo)/sizeof(WCHAR));SQLGetData(hstmt,1,SQL_C_ULONG,&l_nStaffNumber,100,&cbsatid);SQLGetData(hstmt,2,SQL_C_WCHAR,l_szStaffName,100,&cbsatid);SQLGetData(hstmt,3,SQL_C_WCHAR,l_szStaffID,100,&cbsatid);SQLGetData(hstmt,4,SQL_C_WCHAR,l_szStaffHomeAddress,100,&cbsatid);SQLGetData(hstmt,5,SQL_C_ULONG,&l_nStaffPhoneNumber,100,&cbsatid);SQLGetData(hstmt,6,SQL_C_WCHAR,l_szStaffPost,100,&cbsatid);SQLGetData(hstmt,7,SQL_C_WCHAR,l_szStaffCarState,100,&cbsatid);SQLGetData(hstmt,8,SQL_C_WCHAR,l_szStaffExtraInfo,100,&cbsatid);SQLGetData(hstmt,9,SQL_C_WCHAR,l_szFastInfo,100,&cbsatid);//转整形数据为字符串WCHAR l_szStaffNumber[256];wsprintf(l_szStaffNumber,L"%d",l_nStaffNumber);WCHAR l_szStaffPhoneNumber[256];wsprintf(l_szStaffPhoneNumber,L"%d",l_nStaffPhoneNumber);//向listview插入数据InserStaffInfoToListViewOnStaffRecordProc(hListView,l_szStaffNumber,l_szStaffName,l_szStaffID,l_szStaffHomeAddress,l_szStaffPhoneNumber,l_szStaffPost,l_szStaffCarState,l_szStaffExtraInfo,l_szFastInfo);}//释放odbc资源SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);}
void InserStaffInfoToListViewOnStaffRecordProc(HWND hListView,WCHAR szStaffNumber[],WCHAR szStaffName[],WCHAR szStaffID[],WCHAR StaffHomeAddress[],WCHAR szStaffPhoneNumber[],WCHAR szStaffPost[],WCHAR szStaffState[],WCHAR szStaffExtraInfo[],WCHAR szFastInfo[])
{WCHAR buffer[30];LV_ITEM lvi;lvi.mask = LVIF_TEXT;lvi.iItem = 0;lvi.iSubItem = 0;wsprintf(buffer,szStaffNumber);lvi.pszText =buffer;SendMessage(hListView,LVM_INSERTITEM,0,(LPARAM)&lvi);////lvi.iSubItem++;ZeroMemory(buffer,sizeof(buffer)/sizeof(TCHAR));wsprintf(buffer,szStaffName);lvi.pszText =buffer;SendMessage(hListView,LVM_SETITEM,0,(LPARAM)&lvi);///lvi.iSubItem++;ZeroMemory(buffer,sizeof(buffer)/sizeof(TCHAR));wsprintf(buffer,szStaffID);lvi.pszText =buffer;SendMessage(hListView,LVM_SETITEM,0,(LPARAM)&lvi);///lvi.iSubItem++;ZeroMemory(buffer,sizeof(buffer)/sizeof(TCHAR));wsprintf(buffer,StaffHomeAddress);lvi.pszText =buffer;SendMessage(hListView,LVM_SETITEM,0,(LPARAM)&lvi);///lvi.iSubItem++;ZeroMemory(buffer,sizeof(buffer)/sizeof(TCHAR));wsprintf(buffer,szStaffPhoneNumber);lvi.pszText =buffer;SendMessage(hListView,LVM_SETITEM,0,(LPARAM)&lvi);//lvi.iSubItem++;ZeroMemory(buffer,sizeof(buffer)/sizeof(TCHAR));wsprintf(buffer,szStaffPost);lvi.pszText =buffer;SendMessage(hListView,LVM_SETITEM,0,(LPARAM)&lvi);//lvi.iSubItem++;ZeroMemory(buffer,sizeof(buffer)/sizeof(TCHAR));wsprintf(buffer,szStaffState);lvi.pszText =buffer;SendMessage(hListView,LVM_SETITEM,0,(LPARAM)&lvi);//lvi.iSubItem++;ZeroMemory(buffer,sizeof(buffer)/sizeof(TCHAR));wsprintf(buffer,szStaffExtraInfo);lvi.pszText =buffer;SendMessage(hListView,LVM_SETITEM,0,(LPARAM)&lvi);//lvi.iSubItem++;ZeroMemory(buffer,sizeof(buffer)/sizeof(TCHAR));wsprintf(buffer,szFastInfo);lvi.pszText =buffer;SendMessage(hListView,LVM_SETITEM,0,(LPARAM)&lvi);
}
void GetCusSuggestionsAndInsertIntoDB(HWND hwnd);//获取用户意见内容,且插入数据库
void GetCusInfoFromTxtFileOnCustomerSuggestionsProc(HWND hwnd);//导出TXT文件
INT_PTR CALLBACK CustomerSuggestionsProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)//顾客意见反馈
{UNREFERENCED_PARAMETER(lParam);switch(message){//case WM_CTLCOLOREDIT://   { //        int i=GetWindowLong((HWND)lParam,GWL_ID);//        if(i==IDC_EDIT2)//        {//         SetTextColor((HDC)wParam,RGB(0,0,255));//文字颜色//         SetBkColor((HDC)wParam,GetSysColor(COLOR_BTNFACE));//文字的背后颜色//      }//     return (BOOL)((HBRUSH)GetStockObject(NULL_BRUSH));//    }case WM_CTLCOLORSTATIC://设置静态文本框字体颜色{if (GetDlgItem(hDlg, IDC_STATIC11) == (HWND)lParam||GetDlgItem(hDlg, IDC_STATIC33) == (HWND)lParam)//这里的1是静态文本框的ID{SetTextColor((HDC)wParam, RGB(255,0,255));SetBkMode((HDC)wParam, TRANSPARENT);//return (LRESULT)CreateSolidBrush(GetSysColor(COLOR_BTNFACE));return (BOOL)((HBRUSH)GetStockObject(NULL_BRUSH));}break;}case WM_INITDIALOG:{HINSTANCE hInst=(HINSTANCE)GetWindowLong(hDlg,GWL_HINSTANCE);//设置对话框图标SendMessage(hDlg, WM_SETICON, ICON_BIG,(LPARAM)LoadIcon(hInst, MAKEINTRESOURCE(IDI_ICON25))); //设置按钮位图HWND hBn1=GetDlgItem(hDlg,IDC_BUTTON1);HBITMAP hbmp1=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP20));//确认SendMessage(hBn1, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hbmp1);HWND hBn2=GetDlgItem(hDlg,IDC_BUTTON2);HBITMAP hbmp2=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP19));//取消SendMessage(hBn2, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hbmp2);HWND hBn3=GetDlgItem(hDlg,IDC_BUTTON3);HBITMAP hbmp3=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP47));//取消SendMessage(hBn3, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hbmp3);return (INT_PTR)TRUE;}case WM_COMMAND:{if (LOWORD(wParam)==IDCANCEL){EndDialog(hDlg,LOWORD(wParam));break;}switch(LOWORD(wParam)){case IDC_BUTTON1://确认{//获取用户输入的顾客意见,将其导入数据库GetCusSuggestionsAndInsertIntoDB(hDlg);break;}case IDC_BUTTON2://取消{EndDialog(hDlg,LOWORD(wParam));break;}case IDC_BUTTON3://导出txt文件{GetCusInfoFromTxtFileOnCustomerSuggestionsProc(hDlg);break;}}break;}}return (INT_PTR)FALSE;
}void GetCusInfoFromTxtFileOnCustomerSuggestionsProc(HWND hwnd)//导出TXT文件
{//访问数据库SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);result = SQLPrepare(hstmt,(SQLWCHAR*)L"select CustomerSuggestion from customersuggestions",SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;WCHAR  *g_szCusSuggestions=(WCHAR *)calloc(65565,sizeof(WCHAR));lstrcatW(g_szCusSuggestions,L"-----------------------------财神餐饮管理系统 客户反馈意见一览表-----------------------------");lstrcatW(g_szCusSuggestions,L"\r\n");lstrcatW(g_szCusSuggestions,L"\r\n");while (SQLFetch(hstmt)!=SQL_NO_DATA_FOUND){WCHAR l_szCusSuggestions[256];SQLGetData(hstmt,1,SQL_C_WCHAR,l_szCusSuggestions,100,&cbsatid);lstrcatW(g_szCusSuggestions,l_szCusSuggestions);lstrcatW(g_szCusSuggestions,L"\r\n");lstrcatW(g_szCusSuggestions,L"\r\n");}//释放odbc资源SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);//保存{HANDLE hFile;ULONG TextLen;TextLen = lstrlenW(g_szCusSuggestions);DWORD  num1=0;WCHAR *strFileNameTemp=(WCHAR *)calloc(FILENAMESIZE,sizeof(WCHAR));       //保存文件名WCHAR *strFilePathTemp=(WCHAR *)calloc(FILEPATHSIZE,sizeof(WCHAR));     //保存文件路径if(SaveFileDlg(hwnd,strFilePathTemp,strFileNameTemp))               //保存对话框{hFile = CreateFile(strFilePathTemp, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);if (hFile == INVALID_HANDLE_VALUE) {MessageBox(hwnd,L"打开文件失败!",NULL,MB_ICONEXCLAMATION);}else{WORD a = 0xfeff;//写入0xfeff让记事本以Unicode方式打开,中文不会乱码WriteFile(hFile, &a, 2, &num1, NULL);if(WriteFile(hFile,g_szCusSuggestions,(TextLen+1)*2,&num1,NULL)){MessageBox(hwnd,L"导出txt文件成功!",L"成功",MB_ICONINFORMATION);}else{MessageBox(hwnd,L"导出失败!",L"失败",MB_ICONEXCLAMATION);}CloseHandle(hFile);}}free(strFileNameTemp);                            //释放名字空间free(strFilePathTemp);                          //释放地址空间}free(g_szCusSuggestions);//释放意见空间}
void GetCusSuggestionsAndInsertIntoDB(HWND hwnd)//获取用户意见内容,且插入数据库
{//获取意见WCHAR l_szCustomerSuggestions[256];GetDlgItemText(hwnd,IDC_EDIT2,l_szCustomerSuggestions,sizeof(l_szCustomerSuggestions)/sizeof(WCHAR));//判空if (*l_szCustomerSuggestions==NULL || lstrlenW(l_szCustomerSuggestions)>100){MessageBox(hwnd,L"输入的字数有误(确认字数在1~100之间)?",L"提示",MB_ICONERROR|MB_OK);return;}//访问数据库SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);WCHAR sql[256];//DELETEt1,t2 from t1 LEFTJOINt2 ON t1.id=t2.id WHERE t1.id=25wsprintf(sql,L"insert into customersuggestions(CustomerSuggestion) values('%s')",l_szCustomerSuggestions);result = SQLPrepare(hstmt,(SQLWCHAR*)sql,SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;MessageBox(hwnd,L"客户意见已经保存\n您可以点击“导出txt文件”按钮查看客户意见!",L"提示",MB_ICONINFORMATION|MB_OK);//释放odbc资源SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);}
void SetTableInfoOnCeTaiProc(HWND hwnd);//初始化餐桌信息
void SureToCheTaiOnCeTaiProc(HWND hwnd);//确认撤台处理
INT_PTR CALLBACK CeTaiProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)//撤台
{UNREFERENCED_PARAMETER(lParam);switch(message){case WM_CTLCOLORSTATIC://设置静态文本框字体颜色{if (GetDlgItem(hDlg,IDC_STATIC11) == (HWND)lParam ||GetDlgItem(hDlg,IDC_STATIC22) == (HWND)lParam)//这里的1是静态文本框的ID{SetTextColor((HDC)wParam, RGB(0,0,255));SetBkMode((HDC)wParam, TRANSPARENT);//return (LRESULT)CreateSolidBrush(GetSysColor(COLOR_BTNFACE));return (BOOL)((HBRUSH)GetStockObject(NULL_BRUSH));}break;}case WM_INITDIALOG:{HINSTANCE hInst=(HINSTANCE)GetWindowLong(hDlg,GWL_HINSTANCE);//设置对话框图标SendMessage(hDlg, WM_SETICON, ICON_BIG,(LPARAM)LoadIcon(hInst, MAKEINTRESOURCE(IDI_ICON25))); //设置按钮位图HWND hBn1=GetDlgItem(hDlg,IDC_BUTTON1);HBITMAP hbmp1=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP20));//确认SendMessage(hBn1, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hbmp1);HWND hBn2=GetDlgItem(hDlg,IDC_BUTTON2);HBITMAP hbmp2=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP19));//取消SendMessage(hBn2, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hbmp2);//初始化餐桌信息SetTableInfoOnCeTaiProc(hDlg);return (INT_PTR)TRUE;}case WM_COMMAND:{if (LOWORD(wParam)==IDCANCEL){EndDialog(hDlg,LOWORD(wParam));break;}switch(LOWORD(wParam)){case IDC_BUTTON1://确认撤台{SureToCheTaiOnCeTaiProc(hDlg);break;}case IDC_BUTTON2://退出{EndDialog(hDlg,LOWORD(wParam));break;}}break;}}return (INT_PTR)FALSE;
}
void SureToCheTaiOnCeTaiProc(HWND hwnd)//确认撤台处理
{//先要获取用户选择的是哪个餐桌WCHAR l_szTableNumber[256];GetDlgItemText(hwnd,IDC_COMBO2,l_szTableNumber,sizeof(l_szTableNumber)/sizeof(WCHAR));//判空if (*l_szTableNumber==NULL){MessageBox(hwnd,L"请先选择要撤台的餐桌!",L"友情提示",MB_ICONERROR|MB_OK);return;}//访问数据库,进行多表删除操作//分析:将用户选择的餐桌匹配项在dingingtable表中删除掉,同时还要删除diancai表中餐桌匹配项SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);WCHAR sql[256];//DELETEt1,t2 from t1 LEFTJOINt2 ON t1.id=t2.id WHERE t1.id=25wsprintf(sql,L"delete diningtable,diancai from diningtable left join diancai on diningtable.ExtraTableNumber=diancai.TableNumber where diningtable.ExtraTableNumber='%s'",l_szTableNumber);result = SQLPrepare(hstmt,(SQLWCHAR*)sql,SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;MessageBox(hwnd,L"撤台成功!",L"提示",MB_ICONINFORMATION|MB_OK);//释放odbc资源SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);}
void SetTableInfoOnCeTaiProc(HWND hwnd)//初始化餐桌信息
{//访问数据库SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);result = SQLPrepare(hstmt,(SQLWCHAR*)L"select ExtraTableNumber from diningtable",SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;WCHAR l_szExtraTableNumber[256];while (SQLFetch(hstmt)!=SQL_NO_DATA_FOUND){SQLGetData(hstmt,1,SQL_C_WCHAR,l_szExtraTableNumber,30,&cbsatid);SendDlgItemMessage(hwnd,IDC_COMBO2,CB_ADDSTRING,NULL,(LPARAM)l_szExtraTableNumber);}//释放odbc资源SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);
}
void InsertCustomerListView(HWND hListView,WCHAR szCustomerNumber[],WCHAR szCustomerName[],WCHAR szPhoneNumber[],WCHAR szAddress[],WCHAR szCustomerCategory[],WCHAR szSettlementCategory[],WCHAR szEatingHabits[]);//插入客户信息的listview
INT_PTR CALLBACK AddCustomerInfoProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);//增加客户档案
INT_PTR CALLBACK DetailCustomerInfoProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);//详细信息INT_PTR CALLBACK XiuGaiCustomerInfoProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);//修改详细信息
void InitListViewOnCustomerInfoProc(HWND hwnd,HWND hListView);//初始化listviewINT_PTR CALLBACK DeleteCustomerInfoProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);//修改详细信息
void ExPortTxtFile(HWND hwnd);//导出TXT文件处理
INT_PTR CALLBACK CustomerInfoProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)//客户档案
{UNREFERENCED_PARAMETER(lParam);HWND hListView;switch(message){case WM_INITDIALOG:{HINSTANCE hInst=(HINSTANCE)GetWindowLong(hDlg,GWL_HINSTANCE);//设置对话框图标SendMessage(hDlg, WM_SETICON, ICON_BIG,(LPARAM)LoadIcon(hInst, MAKEINTRESOURCE(IDI_ICON23))); //设置按钮位图HWND hBn1=GetDlgItem(hDlg,IDC_BUTTON1);HBITMAP hbmp1=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP35));//客户就餐记录SendMessage(hBn1, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hbmp1);HWND hBn2=GetDlgItem(hDlg,IDC_BUTTON2);HBITMAP hbmp2=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP36));//增加SendMessage(hBn2, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hbmp2);HWND hBn3=GetDlgItem(hDlg,IDC_BUTTON3);HBITMAP hbmp3=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP33));//修改SendMessage(hBn3, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hbmp3);HWND hBn4=GetDlgItem(hDlg,IDC_BUTTON4);HBITMAP hbmp4=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP32));//删除SendMessage(hBn4, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hbmp4);HWND hBn5=GetDlgItem(hDlg,IDC_BUTTON5);HBITMAP hbmp5=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP34));//详细信息SendMessage(hBn5, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hbmp5);HWND hBn6=GetDlgItem(hDlg,IDC_BUTTON6);HBITMAP hbmp6=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP30));//导出txt文件SendMessage(hBn6, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hbmp6);HWND hBn7=GetDlgItem(hDlg,IDC_BUTTON7);HBITMAP hbmp7=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP31));//返回SendMessage(hBn7, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hbmp7);//创建listview RECT rect;GetClientRect(hDlg,&rect);hListView = CreateWindowEx(LVS_EX_FULLROWSELECT,_T("SysListView32"),NULL,LVS_REPORT | WS_CHILD |WS_VISIBLE|WS_VSCROLL|WS_HSCROLL,0,0,rect.right,rect.bottom-45,hDlg,(HMENU)100,hInst,NULL);SendMessage(hListView,LVM_SETTEXTCOLOR,0,RGB(0,0,0));//设置文本颜色SendMessage(hListView,LVM_SETTEXTBKCOLOR ,0,RGB(188,198,215));//设置背景颜色SetFocus(hListView);ListView_SetItemState(hListView,0,LVIS_SELECTED,LVIS_SELECTED);     //参数0使第一行处于选择中状态,若为-1则表示所有的行ListView_SetExtendedListViewStyle(hListView,LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_AUTOSIZECOLUMNS);              //设置整行选择风格/////插入列LV_COLUMN lvc;lvc.mask = LVCF_TEXT | LVCF_WIDTH | LVCF_FMT|LVCFMT_CENTER;lvc.fmt=LVCFMT_CENTER;lvc.pszText =L"客户号";lvc.cx = 60;SendMessage(hListView,LVM_INSERTCOLUMN,0,(LPARAM)&lvc);lvc.pszText = L"客户名称";lvc.cx = 150;SendMessage(hListView,LVM_INSERTCOLUMN,1,(LPARAM)&lvc);lvc.pszText = L"联系电话";   SendMessage(hListView,LVM_INSERTCOLUMN,2,(LPARAM)&lvc);lvc.pszText = L"地址";SendMessage(hListView,LVM_INSERTCOLUMN,3,(LPARAM)&lvc);lvc.pszText = L"客户类别";SendMessage(hListView,LVM_INSERTCOLUMN,4,(LPARAM)&lvc);lvc.pszText = L"结算类型";SendMessage(hListView,LVM_INSERTCOLUMN,5,(LPARAM)&lvc);lvc.pszText = L"饮食习惯";SendMessage(hListView,LVM_INSERTCOLUMN,6,(LPARAM)&lvc);//初始化listviewInitListViewOnCustomerInfoProc(hDlg,hListView);return (INT_PTR)TRUE;}case WM_COMMAND:{if (LOWORD(wParam)==IDCANCEL){EndDialog(hDlg,LOWORD(lParam));break;}switch(LOWORD(wParam)){case IDC_BUTTON1://客户就餐信息{break;}case IDC_BUTTON2://增加{HINSTANCE hInst=(HINSTANCE)GetWindowLong(hDlg,GWL_HINSTANCE);DialogBox(hInst,MAKEINTRESOURCE(IDD_DIALOG12),hDlg,AddCustomerInfoProc);break;}case IDC_BUTTON3://修改{HINSTANCE hInst=(HINSTANCE)GetWindowLong(hDlg,GWL_HINSTANCE);DialogBox(hInst,MAKEINTRESOURCE(IDD_DIALOG14),hDlg,XiuGaiCustomerInfoProc);break;}case IDC_BUTTON4://删除{HINSTANCE hInst=(HINSTANCE)GetWindowLong(hDlg,GWL_HINSTANCE);DialogBox(hInst,MAKEINTRESOURCE(IDD_DIALOG15),hDlg,DeleteCustomerInfoProc);break;}case IDC_BUTTON5://详细信息{HINSTANCE hInst=(HINSTANCE)GetWindowLong(hDlg,GWL_HINSTANCE);DialogBox(hInst,MAKEINTRESOURCE(IDD_DIALOG13),hDlg,DetailCustomerInfoProc);break;}case IDC_BUTTON6://导出TXT文件{ExPortTxtFile(hDlg);break;}case IDC_BUTTON7://返回{EndDialog(hDlg,LOWORD(wParam));break;}}break;}}return (INT_PTR)FALSE;
}
#include <cstring>
//#define FILEPATHSIZE 2048
//#define FILENAMESIZE 280
BOOL SaveFileDlg(HWND hWnd,WCHAR *strfp,WCHAR * strfn)
{   OPENFILENAME ofn; ZeroMemory(&ofn, sizeof(ofn));ofn.lStructSize = sizeof(ofn);ofn.hwndOwner = hWnd;ofn.lpstrFile = strfp;ofn.lpstrFile[0] = L'\0';ofn.nMaxFile = FILEPATHSIZE;ofn.lpstrFilter = L"文本文档(*.txt)\0*.txt\0所有文件\0*.*";ofn.nFilterIndex = 1;ofn.lpstrFileTitle = strfn;ofn.nMaxFileTitle = FILENAMESIZE;ofn.lpstrInitialDir = NULL;ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_OVERWRITEPROMPT;if ( GetSaveFileName(&ofn) ){if(ofn.nFileExtension==0){lstrcatW(strfn,L".txt");lstrcatW(strfp,L".txt");}return TRUE;}return FALSE;
}void ExPortTxtFile(HWND hwnd)//导出TXT文件处理
{//先访问数据库中的customerinfo表,取出各段的信息,没访问一次就将信息连接起来(lstrcatW),最后组成一个大得字符串//利用GetSaveFileName处理保存//第一步:访问数据库SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);//转客户编号为整形result = SQLPrepare(hstmt,(SQLWCHAR*)L"select CustomerNumber,CustomerName,PhoneNumber,Address,CustomerCategory,SettlementCategory,EatingHabits from customerinfo",SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;int ln_CustomerNumber;//客户编号WCHAR l_szCustomerName[256];//客户的姓名int ln_PhoneNumber;//电话号码WCHAR l_szAddress[256];//地址WCHAR l_szCustomerCategory[256];//客户类型WCHAR l_szSettlementCategory[256];//客户的结算类型WCHAR l_szEatingHabits[256];//饮食习惯//设置全局变量WCHAR  *g_str=(WCHAR *)calloc(65565,sizeof(WCHAR));lstrcatW(g_str,L"————————————————财神餐饮管理系统 客户信息一览————————————————————");lstrcatW(g_str,L"\r\n");lstrcatW(g_str,L"\r\n");while (SQLFetch(hstmt)!=SQL_NO_DATA_FOUND){SQLGetData(hstmt,1,SQL_C_ULONG,&ln_CustomerNumber,30,&cbsatid);//转字符串WCHAR l_szCustomerNumber[30];wsprintf(l_szCustomerNumber,L"%d",ln_CustomerNumber);WCHAR info1[256];wsprintf(info1,L"客户编号:%s",l_szCustomerNumber);lstrcatW(g_str,info1);lstrcatW(g_str,L"\r\n");SQLGetData(hstmt,2,SQL_C_WCHAR,l_szCustomerName,30,&cbsatid);WCHAR info2[256];wsprintf(info2,L"客户姓名:%s",l_szCustomerName);lstrcatW(g_str,info2);lstrcatW(g_str,L"\r\n");SQLGetData(hstmt,3,SQL_C_ULONG,&ln_PhoneNumber,30,&cbsatid);//转字符串WCHAR l_szPhoneNumber[30];wsprintf(l_szPhoneNumber,L"%d",ln_PhoneNumber);WCHAR info3[256];wsprintf(info3,L"客户电话号码:%s",l_szPhoneNumber);lstrcatW(g_str,info3);lstrcatW(g_str,L"\r\n");SQLGetData(hstmt,4,SQL_C_WCHAR,l_szAddress,60,&cbsatid);WCHAR info4[256];wsprintf(info4,L"地址:%s",l_szAddress);lstrcatW(g_str,info4);lstrcatW(g_str,L"\r\n");SQLGetData(hstmt,5,SQL_C_WCHAR,l_szCustomerCategory,30,&cbsatid);WCHAR info5[256];wsprintf(info5,L"类型:%s",l_szCustomerCategory);lstrcatW(g_str,info5);lstrcatW(g_str,L"\r\n");SQLGetData(hstmt,6,SQL_C_WCHAR,l_szSettlementCategory,30,&cbsatid);WCHAR info6[256];wsprintf(info6,L"结算类型:%s",l_szSettlementCategory);lstrcatW(g_str,info6);lstrcatW(g_str,L"\r\n");SQLGetData(hstmt,7,SQL_C_WCHAR,l_szEatingHabits,60,&cbsatid);WCHAR info7[256];wsprintf(info7,L"饮食习惯:%s",l_szEatingHabits);lstrcatW(g_str,info7);lstrcatW(g_str,L"\r\n");lstrcatW(g_str,L"\r\n");lstrcatW(g_str,L"\r\n");}//MessageBox(NULL,g_str,NULL,MB_OK);//释放odbc资源SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);//好了现在已经为完全获取了所有客户字符串信息,保存在了g_str中//第二步:保存{HANDLE hFile;ULONG TextLen;TextLen = lstrlenW(g_str);DWORD  num1=0;WCHAR *strFileNameTemp=(WCHAR *)calloc(FILENAMESIZE,sizeof(WCHAR));       //保存文件名WCHAR *strFilePathTemp=(WCHAR *)calloc(FILEPATHSIZE,sizeof(WCHAR));     //保存文件路径if(SaveFileDlg(hwnd,strFilePathTemp,strFileNameTemp))               //保存对话框{hFile = CreateFile(strFilePathTemp, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);if (hFile == INVALID_HANDLE_VALUE) {MessageBox(hwnd,L"打开文件失败!",NULL,MB_ICONEXCLAMATION);}else{WORD a = 0xfeff;//写入0xfeff让记事本以Unicode方式打开,中文不会乱码WriteFile(hFile, &a, 2, &num1, NULL);if(WriteFile(hFile,g_str,(TextLen+1)*2,&num1,NULL)){MessageBox(hwnd,L"导出txt文件成功!",L"成功",MB_ICONINFORMATION);}else{MessageBox(hwnd,L"导出失败!",L"失败",MB_ICONEXCLAMATION);}CloseHandle(hFile);}}free(strFileNameTemp);                         //释放名字空间free(strFilePathTemp);                          //释放地址空间}free(g_str);
}
void SetCob1InfoOnDeleteCustomerInfoProc(HWND hwnd);//设置客户编号组合框的内容
void SetCustomerNameOnDeleteCustomerInfoProc(HWND hwnd);//根据编号,设置客户名信息
void SureToDeleteCustomerInfoOnDeleteCustomerInfoProc(HWND hwnd);//确认删除客户信息处理
INT_PTR CALLBACK DeleteCustomerInfoProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)//删除客户信息
{UNREFERENCED_PARAMETER(lParam);switch(message){case WM_INITDIALOG:{HINSTANCE hInst=(HINSTANCE)GetWindowLong(hDlg,GWL_HINSTANCE);//设置对话框图标SendMessage(hDlg, WM_SETICON, ICON_BIG,(LPARAM)LoadIcon(hInst, MAKEINTRESOURCE(IDI_ICON25))); //设置按钮位图HWND hBn1=GetDlgItem(hDlg,IDC_BUTTON1);HBITMAP hbmp1=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP43));//确认选择SendMessage(hBn1, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hbmp1);HWND hBn2=GetDlgItem(hDlg,IDC_BUTTON2);HBITMAP hbmp2=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP44));//确认删除SendMessage(hBn2, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hbmp2);HWND hBn3=GetDlgItem(hDlg,IDC_BUTTON3);HBITMAP hbmp3=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP45));//返回SendMessage(hBn3, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hbmp3);HWND hBn4=GetDlgItem(hDlg,IDC_BUTTON4);HBITMAP hbmp4=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP46));//返回SendMessage(hBn4, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hbmp4);//访问数据库,设置客户编号组合框的内容SetCob1InfoOnDeleteCustomerInfoProc(hDlg);//设置定时器SetTimer(hDlg,1,3000,NULL);//禁用控件EnableWindow(GetDlgItem(hDlg,IDC_COMBO2),FALSE);return (INT_PTR)TRUE;}case WM_TIMER:{//根据用户的选择的编号,设置客户名信息SetCustomerNameOnDeleteCustomerInfoProc(hDlg);break;}case WM_COMMAND:{if (LOWORD(wParam)==IDCANCEL){KillTimer(hDlg,1);EndDialog(hDlg,LOWORD(wParam));break;}switch(LOWORD(wParam)){case IDC_BUTTON1://确认选择{WCHAR l_szCustomerNumber[256];GetDlgItemText(hDlg,IDC_COMBO1,l_szCustomerNumber,sizeof(l_szCustomerNumber)/sizeof(WCHAR));if (*l_szCustomerNumber==NULL){MessageBox(hDlg,L"请先选择客户编号!",L"提示",MB_OK|MB_ICONERROR);break;}EnableWindow(GetDlgItem(hDlg,IDC_COMBO1),FALSE);break;}case IDC_BUTTON2://确认删除{SureToDeleteCustomerInfoOnDeleteCustomerInfoProc(hDlg);break;}case IDC_BUTTON3://返回{KillTimer(hDlg,1);EndDialog(hDlg,LOWORD(wParam));break;}case IDC_BUTTON4://重新选择{EnableWindow(GetDlgItem(hDlg,IDC_COMBO1),TRUE);break;}}break;}}return (INT_PTR)FALSE;
}
void SureToDeleteCustomerInfoOnDeleteCustomerInfoProc(HWND hwnd)//确认删除客户信息处理
{//先要获取用户的选择WCHAR l_szCustomerNumber[256];GetDlgItemText(hwnd,IDC_COMBO1,l_szCustomerNumber,sizeof(l_szCustomerNumber)/sizeof(WCHAR));//判断是否为空if (*l_szCustomerNumber==NULL){MessageBox(hwnd,L"请选择要删除的客户编号,\n并确认客户名!",L"提示",MB_OK|MB_ICONERROR);return;}//满足条件,访问数据库,进行删除操作//访问数据库SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);//转客户编号为整形int ln_customernumber;ln_customernumber=_wtoi(l_szCustomerNumber);WCHAR sql[256];wsprintf(sql,L"delete from customerinfo where CustomerNumber='%d'",ln_customernumber);result = SQLPrepare(hstmt,(SQLWCHAR*)sql,SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;WCHAR l_szCustomerName[256];GetDlgItemText(hwnd,IDC_COMBO2,l_szCustomerName,sizeof(l_szCustomerName)/sizeof(WCHAR));WCHAR l_szInfo[256];wsprintf(l_szInfo,L"编号为'%d',客户名为'%s'的用户已经从名单中成功删除'",ln_customernumber,l_szCustomerName);MessageBox(hwnd,l_szInfo,L"提示",MB_ICONINFORMATION|MB_OK);//刷新listview信息HWND hListView=FindWindowEx(GetParent(hwnd),NULL,L"SysListView32",NULL);//获取listview的窗口句柄SendMessage(hListView,LVM_DELETEALLITEMS,0,NULL);InitListViewOnCustomerInfoProc(GetParent(hwnd),hListView);//释放odbc资源SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);}
void SetCustomerNameOnDeleteCustomerInfoProc(HWND hwnd)//根据编号,设置客户名信息
{//获取编号WCHAR l_szCustomerNumber[256];GetDlgItemText(hwnd,IDC_COMBO1,l_szCustomerNumber,sizeof(l_szCustomerNumber)/sizeof(WCHAR));if (*l_szCustomerNumber==NULL){return;}//访问数据库SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);//转客户编号为整形int ln_customernumber;ln_customernumber=_wtoi(l_szCustomerNumber);WCHAR sql[256];wsprintf(sql,L"select CustomerName from customerinfo where CustomerNumber='%d'",ln_customernumber);result = SQLPrepare(hstmt,(SQLWCHAR*)sql,SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;WCHAR l_szCusName[256];while (SQLFetch(hstmt)!=SQL_NO_DATA_FOUND){SQLGetData(hstmt,1,SQL_C_WCHAR,l_szCusName,30,&cbsatid);SetDlgItemText(hwnd,IDC_COMBO2,l_szCusName);break;}//释放odbc资源SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);}
void SetCob1InfoOnDeleteCustomerInfoProc(HWND hwnd)//设置客户编号组合框的内容
{//访问数据库SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);result = SQLPrepare(hstmt,(SQLWCHAR*)L"select CustomerNumber from customerinfo order by CustomerNumber desc",SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;int l_nCustomerNumber;while (SQLFetch(hstmt)!=SQL_NO_DATA_FOUND){SQLGetData(hstmt,1,SQL_C_ULONG,&l_nCustomerNumber,30,&cbsatid);WCHAR l_szCustomerNumber[256];wsprintf(l_szCustomerNumber,L"%d",l_nCustomerNumber);SendDlgItemMessage(hwnd,IDC_COMBO1,CB_ADDSTRING,NULL,(LPARAM)l_szCustomerNumber);}//释放odbc资源SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);
}
void SureToXiuGaiOnXiuGaiCustomerInfoProc(HWND hwnd);//确认修改处理
void InitCustomerNumberOnXiuGaiCustomerInfoProc(HWND hwnd);//初始化客户编号组合框内容
void SetCustomerInfoWhenGetNumberOnXiuGaiCustomerInfoProc(HWND hwnd);//在timer消息里设置客户信息
INT_PTR CALLBACK XiuGaiCustomerInfoProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)//修改详细信息
{UNREFERENCED_PARAMETER(lParam);switch(message){case WM_INITDIALOG:{HINSTANCE hInst=(HINSTANCE)GetWindowLong(hDlg,GWL_HINSTANCE);//设置对话框图标SendMessage(hDlg, WM_SETICON, ICON_BIG,(LPARAM)LoadIcon(hInst, MAKEINTRESOURCE(IDI_ICON23))); //设置按钮位图HWND hBn1=GetDlgItem(hDlg,IDC_BUTTON1);HBITMAP hbmp1=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP20));//确认修改SendMessage(hBn1, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hbmp1);HWND hBn2=GetDlgItem(hDlg,IDC_BUTTON2);HBITMAP hbmp2=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP19));//返回SendMessage(hBn2, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hbmp2);HWND hBn3=GetDlgItem(hDlg,IDC_BUTTON3);HBITMAP hbmp3=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP41));//启用修改SendMessage(hBn3, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hbmp3);//禁用控件EnableWindow(GetDlgItem(hDlg,IDC_COMBO2),FALSE);EnableWindow(GetDlgItem(hDlg,IDC_COMBO4),FALSE);EnableWindow(GetDlgItem(hDlg,IDC_EDIT1),FALSE);EnableWindow(GetDlgItem(hDlg,IDC_COMBO6),FALSE);EnableWindow(GetDlgItem(hDlg,IDC_EDIT2),FALSE);EnableWindow(GetDlgItem(hDlg,IDC_EDIT3),FALSE);//初始化客户编号信息InitCustomerNumberOnXiuGaiCustomerInfoProc(hDlg);//初始化客户的类型SendDlgItemMessage(hDlg,IDC_COMBO4,CB_ADDSTRING,NULL,(LPARAM)L"普通");SendDlgItemMessage(hDlg,IDC_COMBO4,CB_ADDSTRING,NULL,(LPARAM)L"VIP");//初始化客户的结算类型SendDlgItemMessage(hDlg,IDC_COMBO6,CB_ADDSTRING,NULL,(LPARAM)L"现金结算");SendDlgItemMessage(hDlg,IDC_COMBO6,CB_ADDSTRING,NULL,(LPARAM)L"到期结算");//设置定时器SetTimer(hDlg,1,3000,NULL);return (INT_PTR)TRUE;}case WM_TIMER:{//访问数据库中的customerinfo表,设置各个控件的信息内容SetCustomerInfoWhenGetNumberOnXiuGaiCustomerInfoProc(hDlg);break;}case WM_COMMAND:{if (LOWORD(wParam)==IDCANCEL){KillTimer(hDlg,1);EndDialog(hDlg,LOWORD(wParam));break;}if (LOWORD(wParam)==IDC_BUTTON2)//退出{KillTimer(hDlg,1);EndDialog(hDlg,LOWORD(wParam));break;}if (LOWORD(wParam)==IDC_BUTTON1)//确认修改{SureToXiuGaiOnXiuGaiCustomerInfoProc(hDlg);break;}if (LOWORD(wParam)==IDC_BUTTON3)//启用修改{WCHAR l_szCustomerNumber[256];GetDlgItemText(hDlg,IDC_COMBO3,l_szCustomerNumber,sizeof(l_szCustomerNumber)/sizeof(WCHAR));if (*l_szCustomerNumber==NULL){MessageBox(hDlg,L"请先选择客户编号",L"提示",MB_OK|MB_ICONERROR);break;}KillTimer(hDlg,1);//启用控件EnableWindow(GetDlgItem(hDlg,IDC_COMBO2),TRUE);EnableWindow(GetDlgItem(hDlg,IDC_COMBO4),TRUE);EnableWindow(GetDlgItem(hDlg,IDC_EDIT1),TRUE);EnableWindow(GetDlgItem(hDlg,IDC_COMBO6),TRUE);EnableWindow(GetDlgItem(hDlg,IDC_EDIT2),TRUE);EnableWindow(GetDlgItem(hDlg,IDC_EDIT3),TRUE);break;}break;}}return (INT_PTR)FALSE;
}
void SetCustomerInfoWhenGetNumberOnXiuGaiCustomerInfoProc(HWND hwnd)//在timer消息里设置客户信息
{//先要检测用户是否选择了客户编号WCHAR l_szCustomerNumber[256];GetDlgItemText(hwnd,IDC_COMBO3,l_szCustomerNumber,sizeof(l_szCustomerNumber)/sizeof(WCHAR));if (*l_szCustomerNumber==NULL){return;//没有选择,退出访问}//开始访问//访问数据库SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);int ln_customernumber;ln_customernumber=_wtoi(l_szCustomerNumber);WCHAR sql[256];wsprintf(sql,L"select CustomerName,PhoneNumber,Address,CustomerCategory,SettlementCategory,EatingHabits from customerinfo where CustomerNumber='%d'",ln_customernumber);result = SQLPrepare(hstmt,(SQLWCHAR*)sql,SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;WCHAR l_szCustomerName[256];int l_nPhoneNumber;WCHAR l_szAddress[256];WCHAR l_szCustomerCategory[256];WCHAR l_szSettlementCategory[256];WCHAR l_szEatingHabits[256];while (SQLFetch(hstmt)!=SQL_NO_DATA_FOUND){ZeroMemory(l_szCustomerName,sizeof(l_szCustomerName)/sizeof(WCHAR));ZeroMemory(l_szAddress,sizeof(l_szAddress)/sizeof(WCHAR));ZeroMemory(l_szCustomerCategory,sizeof(l_szCustomerCategory)/sizeof(WCHAR));ZeroMemory(l_szSettlementCategory,sizeof(l_szSettlementCategory)/sizeof(WCHAR));ZeroMemory(l_szEatingHabits,sizeof(l_szEatingHabits)/sizeof(WCHAR));SQLGetData(hstmt,1,SQL_C_WCHAR,l_szCustomerName,30,&cbsatid);SQLGetData(hstmt,2,SQL_C_ULONG,&l_nPhoneNumber,30,&cbsatid);SQLGetData(hstmt,3,SQL_C_WCHAR,l_szAddress,30,&cbsatid);SQLGetData(hstmt,4,SQL_C_WCHAR,l_szCustomerCategory,30,&cbsatid);SQLGetData(hstmt,5,SQL_C_WCHAR,l_szSettlementCategory,30,&cbsatid);SQLGetData(hstmt,6,SQL_C_WCHAR,l_szEatingHabits,30,&cbsatid);WCHAR l_szPhoneNumber[256];wsprintf(l_szPhoneNumber,L"%d",l_nPhoneNumber);SetDlgItemText(hwnd,IDC_COMBO2,l_szCustomerName);SetDlgItemText(hwnd,IDC_EDIT3,l_szPhoneNumber);SetDlgItemText(hwnd,IDC_EDIT1,l_szAddress);SetDlgItemText(hwnd,IDC_COMBO4,l_szCustomerCategory);SetDlgItemText(hwnd,IDC_COMBO6,l_szSettlementCategory);SetDlgItemText(hwnd,IDC_EDIT2,l_szEatingHabits);break;}//释放odbc资源SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);}
void InitCustomerNumberOnXiuGaiCustomerInfoProc(HWND hwnd)//初始化客户编号组合框内容
{//访问数据库,获取客户编号信息SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);result = SQLPrepare(hstmt,(SQLWCHAR*)L"select CustomerNumber from customerinfo order by CustomerNumber desc",SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;int l_nCustomerNumber;while (SQLFetch(hstmt)!=SQL_NO_DATA_FOUND){SQLGetData(hstmt,1,SQL_C_ULONG,&l_nCustomerNumber,30,&cbsatid);WCHAR l_szCustomerNumber[256];wsprintf(l_szCustomerNumber,L"%d",l_nCustomerNumber);SendDlgItemMessage(hwnd,IDC_COMBO3,CB_ADDSTRING,NULL,(LPARAM)l_szCustomerNumber);}//释放odbc资源SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);
}
void SureToXiuGaiOnXiuGaiCustomerInfoProc(HWND hwnd)//确认修改处理
{//获取用户的输入WCHAR l_szCustomerNumber[256];GetDlgItemText(hwnd,IDC_COMBO3,l_szCustomerNumber,sizeof(l_szCustomerNumber)/sizeof(WCHAR));//判空if (*l_szCustomerNumber==NULL){//提示用户MessageBox(hwnd,L"请先选择客户的编号!",L"提示",MB_OK|MB_ICONERROR);return;//失败,返回}//如果已经选择客户编号,就要获取用户的输入WCHAR l_szCustomerName[256];//获取客户名GetDlgItemText(hwnd,IDC_COMBO2,l_szCustomerName,sizeof(l_szCustomerName)/sizeof(WCHAR));WCHAR l_szCustomerCategory[256];//获取客户类型GetDlgItemText(hwnd,IDC_COMBO4,l_szCustomerCategory,sizeof(l_szCustomerCategory)/sizeof(WCHAR));WCHAR l_szAddress[256];//获取客户的地址GetDlgItemText(hwnd,IDC_EDIT1,l_szAddress,sizeof(l_szAddress)/sizeof(WCHAR));WCHAR l_szSettlementCategory[256];//获取客户的结算类型GetDlgItemText(hwnd,IDC_COMBO6,l_szSettlementCategory,sizeof(l_szSettlementCategory)/sizeof(WCHAR));WCHAR l_szEatingHabits[256];//获取客户的饮食习惯GetDlgItemText(hwnd,IDC_EDIT2,l_szEatingHabits,sizeof(l_szEatingHabits)/sizeof(WCHAR));WCHAR l_szPhoneNumber[256];//获取电话号码GetDlgItemText(hwnd,IDC_EDIT3,l_szPhoneNumber,sizeof(l_szPhoneNumber)/sizeof(WCHAR));int ln_Number;//转电话号码为整形数据ln_Number=_wtoi(l_szPhoneNumber);int ln_customernumber;//转客户编号为整形数据ln_customernumber=_wtoi(l_szCustomerNumber);//访问数据库,修改数据SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄// result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);WCHAR sql[256];wsprintf(sql,L"update customerinfo set CustomerName='%s',CustomerCategory='%s',Address='%s',SettlementCategory='%s',EatingHabits='%s',PhoneNumber='%d' where CustomerNumber='%d'",l_szCustomerName,l_szCustomerCategory,l_szAddress,l_szSettlementCategory,l_szEatingHabits,ln_Number,ln_customernumber);result = SQLPrepare(hstmt,(SQLWCHAR*)sql,SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;//刷新listview信息HWND hListView=FindWindowEx(GetParent(hwnd),NULL,L"SysListView32",NULL);//获取listview的窗口句柄SendMessage(hListView,LVM_DELETEALLITEMS,0,NULL);InitListViewOnCustomerInfoProc(GetParent(hwnd),hListView);//提示用户MessageBox(hwnd,L"修改成功!",L"提示",MB_OK|MB_ICONINFORMATION);//释放odbc资源SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);}
void GetCustomerNameInfoOnDetailCustomerInfoProc(HWND hwnd);//设置客户名组合框的内容
void GetOtherInfoOnTimerOnDetailCustomerInfoProc(HWND hwnd);//获取其他信息
INT_PTR CALLBACK DetailCustomerInfoProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)//详细信息
{UNREFERENCED_PARAMETER(lParam);switch(message){//case WM_CTLCOLOREDIT://   { //        int i=GetWindowLong((HWND)lParam,GWL_ID);//        if(i==IDC_EDIT1 ||i==IDC_EDIT2 || i==IDC_EDIT3 ||i==IDC_EDIT4||i==IDC_COMBO1 ||i==IDC_COMBO2 ||i==IDC_COMBO3)//       {//         SetTextColor((HDC)wParam,RGB(0,0,255));//文字颜色//         //SetBkColor((HDC)wParam,GetSysColor(COLOR_HOTLIGHT));//文字的背后颜色//       }//     return (BOOL)((HBRUSH)GetStockObject(NULL_BRUSH));//}case WM_CTLCOLORSTATIC://设置静态文本框字体颜色{if (GetDlgItem(hDlg,IDC_STATIC11) == (HWND)lParam)//这里的1是静态文本框的ID{SetTextColor((HDC)wParam, RGB(255,0,0));SetBkMode((HDC)wParam, TRANSPARENT);//return (LRESULT)CreateSolidBrush(GetSysColor(COLOR_BTNFACE));return (BOOL)((HBRUSH)GetStockObject(NULL_BRUSH));}if (GetDlgItem(hDlg,IDC_STATIC22) == (HWND)lParam || GetDlgItem(hDlg,IDC_STATIC33) == (HWND)lParam || GetDlgItem(hDlg,IDC_STATIC44) == (HWND)lParam ||GetDlgItem(hDlg,IDC_STATIC55) == (HWND)lParam  ||GetDlgItem(hDlg,IDC_STATIC66) == (HWND)lParam ||GetDlgItem(hDlg,IDC_STATIC77) == (HWND)lParam || GetDlgItem(hDlg,IDC_STATIC99) == (HWND)lParam  )//这里的1是静态文本框的ID{SetTextColor((HDC)wParam, RGB(255,0,255));SetBkMode((HDC)wParam, TRANSPARENT);//return (LRESULT)CreateSolidBrush(GetSysColor(COLOR_BTNFACE));return (BOOL)((HBRUSH)GetStockObject(NULL_BRUSH));}break;}case WM_TIMER:{//根据客户名来访问数据库获取其他段的信息GetOtherInfoOnTimerOnDetailCustomerInfoProc(hDlg);break;}case WM_INITDIALOG:{HINSTANCE hInst=(HINSTANCE)GetWindowLong(hDlg,GWL_HINSTANCE);//设置对话框图标SendMessage(hDlg, WM_SETICON, ICON_BIG,(LPARAM)LoadIcon(hInst, MAKEINTRESOURCE(IDI_ICON22))); //设置按钮位图HWND hBn1=GetDlgItem(hDlg,IDC_BUTTON1);HBITMAP hbmp1=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP39));//返回SendMessage(hBn1, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hbmp1);//访问数据库获取客户名信息GetCustomerNameInfoOnDetailCustomerInfoProc(hDlg);SetTimer(hDlg,1,2000,NULL);return (INT_PTR)TRUE;}case WM_COMMAND:{if (LOWORD(wParam)==IDCANCEL){KillTimer(hDlg,1);EndDialog(hDlg,LOWORD(wParam));break;}if (LOWORD(wParam)==IDC_BUTTON1){KillTimer(hDlg,1);EndDialog(hDlg,LOWORD(wParam));break;}break;}}return (INT_PTR)FALSE;
}
void GetOtherInfoOnTimerOnDetailCustomerInfoProc(HWND hwnd)//获取其他信息
{//先要获取组合框1里是否有内容WCHAR l_szCustomerNumber[256];GetDlgItemText(hwnd,IDC_COMBO1,l_szCustomerNumber,sizeof(l_szCustomerNumber)/sizeof(WCHAR));if (*l_szCustomerNumber==NULL){return;//不执行一下语句}//访问数据库SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);int ln_customernumber;ln_customernumber=_wtoi(l_szCustomerNumber);WCHAR sql[256];wsprintf(sql,L"select CustomerName,PhoneNumber,Address,CustomerCategory,SettlementCategory,EatingHabits from customerinfo where CustomerNumber='%d'",ln_customernumber);result = SQLPrepare(hstmt,(SQLWCHAR*)sql,SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;WCHAR l_szCustomerName[256];int l_nPhoneNumber;WCHAR l_szAddress[256];WCHAR l_szCustomerCategory[256];WCHAR l_szSettlementCategory[256];WCHAR l_szEatingHabits[256];while (SQLFetch(hstmt)!=SQL_NO_DATA_FOUND){ZeroMemory(l_szCustomerName,sizeof(l_szCustomerName)/sizeof(WCHAR));ZeroMemory(l_szAddress,sizeof(l_szAddress)/sizeof(WCHAR));ZeroMemory(l_szCustomerCategory,sizeof(l_szCustomerCategory)/sizeof(WCHAR));ZeroMemory(l_szSettlementCategory,sizeof(l_szSettlementCategory)/sizeof(WCHAR));ZeroMemory(l_szEatingHabits,sizeof(l_szEatingHabits)/sizeof(WCHAR));SQLGetData(hstmt,1,SQL_C_WCHAR,l_szCustomerName,30,&cbsatid);SQLGetData(hstmt,2,SQL_C_ULONG,&l_nPhoneNumber,30,&cbsatid);SQLGetData(hstmt,3,SQL_C_WCHAR,l_szAddress,30,&cbsatid);SQLGetData(hstmt,4,SQL_C_WCHAR,l_szCustomerCategory,30,&cbsatid);SQLGetData(hstmt,5,SQL_C_WCHAR,l_szSettlementCategory,30,&cbsatid);SQLGetData(hstmt,6,SQL_C_WCHAR,l_szEatingHabits,30,&cbsatid);WCHAR l_szPhoneNumber[256];wsprintf(l_szPhoneNumber,L"%d",l_nPhoneNumber);SetDlgItemText(hwnd,IDC_EDIT4,l_szCustomerName);SetDlgItemText(hwnd,IDC_EDIT1,l_szPhoneNumber);SetDlgItemText(hwnd,IDC_EDIT2,l_szAddress);SetDlgItemText(hwnd,IDC_COMBO2,l_szCustomerCategory);SetDlgItemText(hwnd,IDC_COMBO3,l_szSettlementCategory);SetDlgItemText(hwnd,IDC_EDIT3,l_szEatingHabits);break;}//释放odbc资源SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);
}
void GetCustomerNameInfoOnDetailCustomerInfoProc(HWND hwnd)//设置客户名组合框的内容
{//访问数据库SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);result = SQLPrepare(hstmt,(SQLWCHAR*)L"select CustomerNumber from customerinfo order by CustomerNumber desc",SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;int l_nCustomerName;while (SQLFetch(hstmt)!=SQL_NO_DATA_FOUND){SQLGetData(hstmt,1,SQL_C_ULONG,&l_nCustomerName,30,&cbsatid);WCHAR l_szCustomerName[256];wsprintf(l_szCustomerName,L"%d",l_nCustomerName);SendDlgItemMessage(hwnd,IDC_COMBO1,CB_ADDSTRING,NULL,(LPARAM)l_szCustomerName);}//释放odbc资源SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);
}
void InitListViewOnCustomerInfoProc(HWND hwnd,HWND hListView)//初始化listview
{//访问数据库的表:customerinfo ,获取字段信息,设置listviewSQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);result = SQLPrepare(hstmt,(SQLWCHAR*)L"select CustomerNumber,CustomerName,PhoneNumber,Address,CustomerCategory,SettlementCategory,EatingHabits from customerinfo order by CustomerNumber desc",SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;int l_nCustomerNumber;WCHAR l_szCustomerName[256];int l_nPhoneNumber;WCHAR l_szAddress[256];WCHAR l_szCustomerCategory[256];WCHAR l_szSettlementCategory[256];WCHAR l_szEatingHabits[256];while (SQLFetch(hstmt)!=SQL_NO_DATA_FOUND){ZeroMemory(l_szCustomerName,sizeof(l_szCustomerName)/sizeof(WCHAR));ZeroMemory(l_szAddress,sizeof(l_szAddress)/sizeof(WCHAR));ZeroMemory(l_szCustomerCategory,sizeof(l_szCustomerCategory)/sizeof(WCHAR));ZeroMemory(l_szSettlementCategory,sizeof(l_szSettlementCategory)/sizeof(WCHAR));ZeroMemory(l_szEatingHabits,sizeof(l_szEatingHabits)/sizeof(WCHAR));SQLGetData(hstmt,1,SQL_C_ULONG,&l_nCustomerNumber,30,&cbsatid);SQLGetData(hstmt,2,SQL_C_WCHAR,l_szCustomerName,30,&cbsatid);SQLGetData(hstmt,3,SQL_C_ULONG,&l_nPhoneNumber,30,&cbsatid);SQLGetData(hstmt,4,SQL_C_WCHAR,l_szAddress,30,&cbsatid);SQLGetData(hstmt,5,SQL_C_WCHAR,l_szCustomerCategory,30,&cbsatid);SQLGetData(hstmt,6,SQL_C_WCHAR,l_szSettlementCategory,30,&cbsatid);SQLGetData(hstmt,7,SQL_C_WCHAR,l_szEatingHabits,30,&cbsatid);WCHAR l_szCustomerNumber[256];wsprintf(l_szCustomerNumber,L"%d",l_nCustomerNumber);WCHAR l_szPhoneNumber[256];wsprintf(l_szPhoneNumber,L"%d",l_nPhoneNumber);InsertCustomerListView(hListView,l_szCustomerNumber,l_szCustomerName,l_szPhoneNumber, l_szAddress,l_szCustomerCategory,  l_szSettlementCategory,l_szEatingHabits);//插入客户信息的listview}//释放odbc资源SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);}
void SureToAddCustomerInfoOnCustomerInfoProc(HWND hwnd);//确认处理增加客户信息
INT_PTR CALLBACK AddCustomerInfoProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)//增加客户档案
{UNREFERENCED_PARAMETER(lParam);switch(message){//case WM_CTLCOLOREDIT://   { //        int i=GetWindowLong((HWND)lParam,GWL_ID);//        if(i==IDC_EDIT1 ||i==IDC_EDIT2 || i==IDC_EDIT3 ||i==IDC_EDIT4)//        {//         SetTextColor((HDC)wParam,RGB(0,0,255));//文字颜色//         //SetBkColor((HDC)wParam,GetSysColor(COLOR_HOTLIGHT));//文字的背后颜色//       }//     return (BOOL)((HBRUSH)GetStockObject(NULL_BRUSH));//    }case WM_CTLCOLORSTATIC://设置静态文本框字体颜色{if (GetDlgItem(hDlg,IDC_STATIC11) == (HWND)lParam)//这里的1是静态文本框的ID{SetTextColor((HDC)wParam, RGB(255,0,0));SetBkMode((HDC)wParam, TRANSPARENT);//return (LRESULT)CreateSolidBrush(GetSysColor(COLOR_BTNFACE));return (BOOL)((HBRUSH)GetStockObject(NULL_BRUSH));}if (GetDlgItem(hDlg,IDC_STATIC22) == (HWND)lParam || GetDlgItem(hDlg,IDC_STATIC33) == (HWND)lParam || GetDlgItem(hDlg,IDC_STATIC44) == (HWND)lParam ||GetDlgItem(hDlg,IDC_STATIC55) == (HWND)lParam  ||GetDlgItem(hDlg,IDC_STATIC66) == (HWND)lParam ||GetDlgItem(hDlg,IDC_STATIC77) == (HWND)lParam )//这里的1是静态文本框的ID{SetTextColor((HDC)wParam, RGB(0,0,255));SetBkMode((HDC)wParam, TRANSPARENT);//return (LRESULT)CreateSolidBrush(GetSysColor(COLOR_BTNFACE));return (BOOL)((HBRUSH)GetStockObject(NULL_BRUSH));}break;}case WM_INITDIALOG:{HINSTANCE hInst=(HINSTANCE)GetWindowLong(hDlg,GWL_HINSTANCE);//设置对话框图标SendMessage(hDlg, WM_SETICON, ICON_BIG,(LPARAM)LoadIcon(hInst, MAKEINTRESOURCE(IDI_ICON17))); //设置位图按钮HWND hBn1=GetDlgItem(hDlg,IDC_BUTTON1);HBITMAP hbmp1=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP40));//确认SendMessage(hBn1, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hbmp1);HWND hBn2=GetDlgItem(hDlg,IDC_BUTTON2);HBITMAP hbmp2=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP39));//取消SendMessage(hBn2, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hbmp2);//初始化几个组合框//初始化客户类型SendDlgItemMessage(hDlg,IDC_COMBO1,CB_ADDSTRING,NULL,(LPARAM)L"普通");SendDlgItemMessage(hDlg,IDC_COMBO1,CB_ADDSTRING,NULL,(LPARAM)L"VIP");//初始化结算类型SendDlgItemMessage(hDlg,IDC_COMBO2,CB_ADDSTRING,NULL,(LPARAM)L"现金结算");SendDlgItemMessage(hDlg,IDC_COMBO2,CB_ADDSTRING,NULL,(LPARAM)L"到期结算");return (INT_PTR)TRUE;}case WM_COMMAND:{if (LOWORD(wParam)==IDCANCEL){EndDialog(hDlg,LOWORD(wParam));break;}switch(LOWORD(wParam)){case IDC_BUTTON1://确认{SureToAddCustomerInfoOnCustomerInfoProc(hDlg);break;}case IDC_BUTTON2://取消{EndDialog(hDlg,NULL);break;}}break;}}return (INT_PTR)FALSE;
}
void SureToAddCustomerInfoOnCustomerInfoProc(HWND hwnd)//确认处理增加客户信息
{//先要获取用户的输入WCHAR l_szPhoneNumber[256];//获取客户的电话号码GetDlgItemText(hwnd,IDC_EDIT1,l_szPhoneNumber,sizeof(l_szPhoneNumber)/sizeof(WCHAR));WCHAR l_szCustomerName[256];//获取客户姓名GetDlgItemText(hwnd,IDC_EDIT2,l_szCustomerName,sizeof(l_szCustomerName)/sizeof(WCHAR));WCHAR l_szAddress[256];//获取客户的地址GetDlgItemText(hwnd,IDC_EDIT3,l_szAddress,sizeof(l_szAddress)/sizeof(WCHAR));WCHAR l_szCustomerCategory[256];//获取客户的类型(普通,VIP)GetDlgItemText(hwnd,IDC_COMBO1,l_szCustomerCategory,sizeof(l_szCustomerCategory)/sizeof(WCHAR));WCHAR l_szSettlementCategory[256];//获取客户的结算类型(现金结算,定期结算)GetDlgItemText(hwnd,IDC_COMBO2,l_szSettlementCategory,sizeof(l_szSettlementCategory)/sizeof(WCHAR));WCHAR l_szEatingHabits[256];//获取客户的饮食习惯GetDlgItemText(hwnd,IDC_EDIT4,l_szEatingHabits,sizeof(l_szEatingHabits)/sizeof(WCHAR));//判空(号码,姓名,类型和结算类型不能为空)if (*l_szPhoneNumber==NULL ||*l_szCustomerName==NULL || *l_szCustomerCategory==NULL || *l_szSettlementCategory==NULL){MessageBox(hwnd,L"号码,姓名,客户类型和结算类型必须填写!",L"提示",MB_OK|MB_ICONERROR);return;//不满足条件,返回}//满足条件的的情况下,执行数据库访问,表:customerinfoSQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);WCHAR sql[256];//条件查询int ln_phonenumber;ln_phonenumber=_wtoi(l_szPhoneNumber);wsprintf(sql,L"insert into customerinfo(CustomerName,PhoneNumber,Address,CustomerCategory,SettlementCategory,EatingHabits) values('%s','%d','%s','%s','%s','%s')",l_szCustomerName,ln_phonenumber,l_szAddress,l_szCustomerCategory,l_szSettlementCategory,l_szEatingHabits);result = SQLPrepare(hstmt,(SQLWCHAR*)sql,SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;MessageBox(hwnd,L"执行成功",L"提示",MB_ICONINFORMATION|MB_OK);HWND hListView=FindWindowEx(GetParent(hwnd),NULL,L"SysListView32",NULL);//获取listview的窗口句柄SendMessage(hListView,LVM_DELETEALLITEMS,0,NULL);InitListViewOnCustomerInfoProc(GetParent(hwnd),hListView);//释放odbc资源SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);
}
void InsertCustomerListView(HWND hListView,WCHAR szCustomerNumber[],WCHAR szCustomerName[],WCHAR szPhoneNumber[],WCHAR szAddress[],WCHAR szCustomerCategory[],WCHAR szSettlementCategory[],WCHAR szEatingHabits[])//插入客户信息的listview
{   WCHAR buffer[30];LV_ITEM lvi;lvi.mask = LVIF_TEXT;lvi.iItem = 0;lvi.iSubItem = 0;wsprintf(buffer,szCustomerNumber);lvi.pszText =buffer;SendMessage(hListView,LVM_INSERTITEM,0,(LPARAM)&lvi);/lvi.iSubItem++;ZeroMemory(buffer,sizeof(buffer)/sizeof(TCHAR));wsprintf(buffer,szCustomerName);lvi.pszText =buffer;SendMessage(hListView,LVM_SETITEM,0,(LPARAM)&lvi);///lvi.iSubItem++;ZeroMemory(buffer,sizeof(buffer)/sizeof(TCHAR));wsprintf(buffer,szPhoneNumber);lvi.pszText =buffer;SendMessage(hListView,LVM_SETITEM,0,(LPARAM)&lvi);///lvi.iSubItem++;ZeroMemory(buffer,sizeof(buffer)/sizeof(TCHAR));wsprintf(buffer,szAddress);lvi.pszText =buffer;SendMessage(hListView,LVM_SETITEM,0,(LPARAM)&lvi);//lvi.iSubItem++;ZeroMemory(buffer,sizeof(buffer)/sizeof(TCHAR));wsprintf(buffer,szCustomerCategory);lvi.pszText =buffer;SendMessage(hListView,LVM_SETITEM,0,(LPARAM)&lvi);//lvi.iSubItem++;ZeroMemory(buffer,sizeof(buffer)/sizeof(TCHAR));wsprintf(buffer,szSettlementCategory);lvi.pszText =buffer;SendMessage(hListView,LVM_SETITEM,0,(LPARAM)&lvi);//lvi.iSubItem++;ZeroMemory(buffer,sizeof(buffer)/sizeof(TCHAR));wsprintf(buffer,szEatingHabits);lvi.pszText =buffer;SendMessage(hListView,LVM_SETITEM,0,(LPARAM)&lvi);
}
void GetTableInfoFromDataBaseOnTuiCaiProc(HWND hwnd);//访问数据库,获取餐桌信息
void InitCoB2OnTimerOnTuiCaiProc(HWND hwnd);//更新菜肴信息
void SureToTuiCaiOnTuiCaiProc(HWND hwnd);//退菜处理
INT_PTR CALLBACK TuiCaiProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)//退菜
{UNREFERENCED_PARAMETER(lParam);switch(message){case WM_INITDIALOG:{HINSTANCE hInst=(HINSTANCE)GetWindowLong(hDlg,GWL_HINSTANCE);//设置对话框图标SendMessage(hDlg, WM_SETICON, ICON_BIG,(LPARAM)LoadIcon(hInst, MAKEINTRESOURCE(IDI_ICON19))); //设置按钮位图HWND hBn1=GetDlgItem(hDlg,IDC_BUTTON1);HBITMAP hbmp1=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP22));//确认SendMessage(hBn1, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hbmp1);HWND hBn2=GetDlgItem(hDlg,IDC_BUTTON2);HBITMAP hbmp2=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP16));//返回SendMessage(hBn2, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hbmp2);//访问数据库中的diancai 表,获取餐桌号GetTableInfoFromDataBaseOnTuiCaiProc(hDlg);//设置定时器SetTimer(hDlg,1,2000,NULL);return (INT_PTR)TRUE;}case WM_CTLCOLORSTATIC://设置静态文本框字体颜色{if (GetDlgItem(hDlg,IDC_STATIC11) == (HWND)lParam || GetDlgItem(hDlg,IDC_STATIC22) == (HWND)lParam)//这里的1是静态文本框的ID{SetTextColor((HDC)wParam, RGB(255,0,0));SetBkMode((HDC)wParam, TRANSPARENT);return (BOOL)((HBRUSH)GetStockObject(NULL_BRUSH));}break;}case WM_TIMER:{InitCoB2OnTimerOnTuiCaiProc(hDlg);break;}case WM_COMMAND:{if (LOWORD(wParam)==IDCANCEL){EndDialog(hDlg,LOWORD(wParam));break;}switch(LOWORD(wParam)){case IDC_BUTTON1://确认退菜{//在此处理,删除数据库中项SureToTuiCaiOnTuiCaiProc(hDlg);break;}case IDC_BUTTON2://返回{EndDialog(hDlg,LOWORD(wParam));break;}}break;}}return (INT_PTR)FALSE;
}
void SureToTuiCaiOnTuiCaiProc(HWND hwnd)//退菜处理
{//获取餐桌号WCHAR l_szTableName[256];GetDlgItemText(hwnd,IDC_COMBO1,l_szTableName,sizeof(l_szTableName)/sizeof(WCHAR));//获取菜肴名WCHAR l_szCaiName[256];GetDlgItemText(hwnd,IDC_COMBO2,l_szCaiName,sizeof(l_szCaiName)/sizeof(WCHAR));//判空if (*l_szTableName==NULL || *l_szCaiName==NULL){MessageBox(hwnd,L"标有“*”的项必须填写!",L"提示",MB_ICONERROR|MB_OK);return;}//满足条件,开始访问数据库SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);WCHAR szInfo[256];wsprintf(szInfo,L"退菜之前请再次确认信息是否正确:\n菜名:'%s'\n退菜餐桌:'%s'",l_szCaiName,l_szTableName);if (IDYES==MessageBox(hwnd,szInfo,L"提示",MB_YESNO|MB_ICONINFORMATION)){WCHAR sql[256];//条件查询wsprintf(sql,L"delete from diancai where TableNumber='%s' and MenuName='%s'",l_szTableName,l_szCaiName);result = SQLPrepare(hstmt,(SQLWCHAR*)sql,SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;MessageBox(hwnd,L"退菜成功!",L"提示",MB_OK|MB_ICONINFORMATION);//释放odbc资源SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);}else{EndDialog(hwnd,NULL);}
}
void InitCoB2OnTimerOnTuiCaiProc(HWND hwnd)//更新菜肴信息
{//先要获取餐桌信息WCHAR l_szTable[256];GetDlgItemText(hwnd,IDC_COMBO1,l_szTable,sizeof(l_szTable)/sizeof(WCHAR));if (*l_szTable==NULL){return;}//根据这个餐桌信息,访问数据库中的diancai表设置菜肴组合框的信息SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);WCHAR sql[256];//条件查询wsprintf(sql,L"select MenuName from diancai where TableNumber='%s'",l_szTable);result = SQLPrepare(hstmt,(SQLWCHAR*)sql,SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;WCHAR l_szmenuname[256];while (SQLFetch(hstmt)!=SQL_NO_DATA_FOUND){ZeroMemory(l_szmenuname,sizeof(l_szmenuname)/sizeof(WCHAR));SQLGetData(hstmt,1,SQL_C_WCHAR,l_szmenuname,30,&cbsatid);//获取额外的餐桌号SendDlgItemMessage(hwnd,IDC_COMBO2,CB_ADDSTRING,NULL,(LPARAM)l_szmenuname);}//释放odbc资源SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);}
void GetTableInfoFromDataBaseOnTuiCaiProc(HWND hwnd)//访问数据库,获取餐桌信息
{SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);WCHAR sql[256];wsprintf(sql,L"select ExtraTableNumber from diningtable where State='%s'",L"等待上菜");result = SQLPrepare(hstmt,(SQLWCHAR*)sql,SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;WCHAR l_sztablename[256];while (SQLFetch(hstmt)!=SQL_NO_DATA_FOUND){ZeroMemory(l_sztablename,sizeof(l_sztablename)/sizeof(WCHAR));SQLGetData(hstmt,1,SQL_C_WCHAR,l_sztablename,30,&cbsatid);//获取额外的餐桌号SendDlgItemMessage(hwnd,IDC_COMBO1,CB_ADDSTRING,NULL,(LPARAM)l_sztablename);}//释放odbc资源SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);}
void InitTableComBoOnGaiCaiProc(HWND hwnd);//初始化餐桌组合框
void InitCaiYaoNumComBoOnGaiCaiProc(HWND hwnd);//初始化菜肴编号组合框i
void UpdateSomeInfoOnTimerOnGaiCaiProc(HWND hwnd);//更新操作几个控件内容
void SureToUpdateOnGaiCaiProc(HWND hwnd);//确认修改处理
INT_PTR CALLBACK GaiCaiProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)//改菜
{UNREFERENCED_PARAMETER(lParam);switch(message){case WM_INITDIALOG:{//设置位图按钮HINSTANCE hInst=(HINSTANCE)GetWindowLong(hDlg,GWL_HINSTANCE);HWND hBn1=GetDlgItem(hDlg,IDC_BUTTON1);HBITMAP hbmp1=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP20));//确认SendMessage(hBn1, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hbmp1);HWND hBn2=GetDlgItem(hDlg,IDC_BUTTON2);HBITMAP hbmp2=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP19));//取消SendMessage(hBn2, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hbmp2);HWND hBn3=GetDlgItem(hDlg,IDC_BUTTON3);HBITMAP hbmp3=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP21));//确认选择SendMessage(hBn3, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hbmp3);//设置图标SendMessage(hDlg, WM_SETICON, ICON_BIG,(LPARAM)LoadIcon(hInst, MAKEINTRESOURCE(IDI_ICON17))); //禁用几个控件//禁用编辑框EnableWindow(GetDlgItem(hDlg,IDC_EDIT1),FALSE);EnableWindow(GetDlgItem(hDlg,IDC_EDIT2),FALSE);EnableWindow(GetDlgItem(hDlg,IDC_EDIT3),FALSE);EnableWindow(GetDlgItem(hDlg,IDC_EDIT4),FALSE);EnableWindow(GetDlgItem(hDlg,IDC_EDIT5),FALSE);//禁用组合框EnableWindow(GetDlgItem(hDlg,IDC_COMBO1),FALSE);EnableWindow(GetDlgItem(hDlg,IDC_COMBO3),FALSE);EnableWindow(GetDlgItem(hDlg,IDC_COMBO4),FALSE);//禁用按钮EnableWindow(GetDlgItem(hDlg,IDC_BUTTON1),FALSE);EnableWindow(GetDlgItem(hDlg,IDC_BUTTON2),FALSE);//初始化餐桌组合框InitTableComBoOnGaiCaiProc(hDlg);return (INT_PTR)TRUE;}case WM_TIMER:{UpdateSomeInfoOnTimerOnGaiCaiProc(hDlg);break;}case WM_COMMAND:{if (LOWORD(wParam)==IDCANCEL){EndDialog(hDlg,LOWORD(wParam));break;}switch(LOWORD(wParam)){case IDC_BUTTON1://确认{//当用户点击确认按钮,处理用户的输入,更新diancai表的信息SureToUpdateOnGaiCaiProc(hDlg);break;}case IDC_BUTTON2://取消{EndDialog(hDlg,LOWORD(wParam));break;}case IDC_BUTTON3://确认选择{//获取用户选择的餐桌WCHAR szSelectTable[256];GetDlgItemText(hDlg,IDC_COMBO5,szSelectTable,sizeof(szSelectTable)/sizeof(WCHAR));if (*szSelectTable==NULL){MessageBox(hDlg,L"请先选择餐桌!",L"提示",MB_OK|MB_ICONERROR);break;}//启用组合框EnableWindow(GetDlgItem(hDlg,IDC_COMBO1),TRUE);EnableWindow(GetDlgItem(hDlg,IDC_COMBO3),TRUE);EnableWindow(GetDlgItem(hDlg,IDC_COMBO4),TRUE);//启用按钮EnableWindow(GetDlgItem(hDlg,IDC_BUTTON1),TRUE);EnableWindow(GetDlgItem(hDlg,IDC_BUTTON2),TRUE);//启用编辑框EnableWindow(GetDlgItem(hDlg,IDC_EDIT5),TRUE);//初始化菜肴编号组合框,用用户选择的餐桌去访问数据库进行匹配查找InitCaiYaoNumComBoOnGaiCaiProc(hDlg);//初始化数量,自己设置几个变量:范围:1~20WCHAR l_szCaiCount[256];for (int i=1;i<=20;i++){ZeroMemory(l_szCaiCount,sizeof(l_szCaiCount)/sizeof(WCHAR));wsprintf(l_szCaiCount,L"%d",i);SendDlgItemMessage(hDlg,IDC_COMBO3,CB_ADDSTRING,0,(LPARAM)l_szCaiCount);}//初始化份量:自己设置:包括大份、小份SendDlgItemMessage(hDlg,IDC_COMBO4,CB_ADDSTRING,0,(LPARAM)L"大份");SendDlgItemMessage(hDlg,IDC_COMBO4,CB_ADDSTRING,0,(LPARAM)L"小份");//初始化点菜时间:获取本地时间SYSTEMTIME mytime;GetLocalTime(&mytime);TCHAR strtime[256];wsprintf(strtime,L"%04d—%02d—%02d %02d:%02d:%02d",mytime.wYear,mytime.wMonth,mytime.wDay,mytime.wHour,mytime.wMinute,mytime.wSecond);SetDlgItemText(hDlg,IDC_EDIT4,strtime);//设置定时器,当用户改变组合框的选择时,要马上同时改变菜肴名SetTimer(hDlg,1,2000,NULL);//每两秒更新一次内容break;}}break;}}return (INT_PTR)FALSE;
}
void SureToUpdateOnGaiCaiProc(HWND hwnd)//确认修改处理
{//先要获取用户的输入//获取菜肴编号WCHAR l_szCaiNumber[256];GetDlgItemText(hwnd,IDC_COMBO1,l_szCaiNumber,sizeof(l_szCaiNumber)/sizeof(WCHAR));//转为整形值int ln_CaiNumber;ln_CaiNumber=_wtoi(l_szCaiNumber);//获取菜肴名WCHAR l_szCaiName[256];GetDlgItemText(hwnd,IDC_EDIT1,l_szCaiName,sizeof(l_szCaiName)/sizeof(WCHAR));//获取菜数量WCHAR l_szCaiCount[256];GetDlgItemText(hwnd,IDC_COMBO3,l_szCaiCount,sizeof(l_szCaiCount)/sizeof(WCHAR));//转为整形值int ln_CaiCount;ln_CaiCount=_wtoi(l_szCaiCount);//获取单价WCHAR l_szCaiPerPrice[256];GetDlgItemText(hwnd,IDC_EDIT2,l_szCaiPerPrice,sizeof(l_szCaiPerPrice)/sizeof(WCHAR));//获取总价WCHAR l_szAllPrice[256];GetDlgItemText(hwnd,IDC_EDIT3,l_szAllPrice,sizeof(l_szAllPrice)/sizeof(WCHAR));//获取附加信息WCHAR l_szCustomerDemmand[256];GetDlgItemText(hwnd,IDC_EDIT5,l_szCustomerDemmand,sizeof(l_szCustomerDemmand)/sizeof(WCHAR));//获取点菜时间WCHAR l_szDiancaiTime[256];GetDlgItemText(hwnd,IDC_EDIT4,l_szDiancaiTime,sizeof(l_szDiancaiTime)/sizeof(WCHAR));//更新操作{//访问数据库中的表:diancai表//更新的字段有:MenuNumber\MenuName\MenuCount\MenuPrice\AllPrice\CustomerDemmand\DianCaiTime//用用户所选择要修改的餐桌号来匹配,所以先要获取餐桌号WCHAR l_szTableSelected[256];GetDlgItemText(hwnd,IDC_COMBO5,l_szTableSelected,sizeof(l_szTableSelected)/sizeof(WCHAR));//判空,要判断用户所选择的餐桌不为空且选择修改的菜的信息不为空if (*l_szTableSelected!=NULL && *l_szCaiNumber!=NULL && *l_szCaiPerPrice!=NULL && *l_szCaiCount!=NULL){//满足条件,开始访问SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);//先要判断用户是否修改了要求,要进行IF判断,WCHAR sql[256];if (*l_szCustomerDemmand!=NULL){//更新操作要进行条件的限制:条件为:餐桌为用户所选餐桌l_szTableSelected,所修改的菜式用户所选的菜l_szCaiNumberwsprintf(sql,L"update diancai set MenuNumber='%d',MenuName='%s',MenuCount='%d',MenuPrice='%s',AllPrice='%s',DianCaiTime='%s',CustomerDemmand='%s' where TableNumber='%s' and MenuNumber='%d'",ln_CaiNumber,l_szCaiName,ln_CaiCount,l_szCaiPerPrice,l_szAllPrice,l_szDiancaiTime,l_szCustomerDemmand,l_szTableSelected,ln_CaiNumber);}if (*l_szCustomerDemmand==NULL){wsprintf(sql,L"update diancai set MenuNumber='%d',MenuName='%s',MenuCount='%d',MenuPrice='%s',AllPrice='%s',DianCaiTime='%s' where TableNumber='%s' and MenuNumber='%d'",ln_CaiNumber,l_szCaiName,ln_CaiCount,l_szCaiPerPrice,l_szAllPrice,l_szDiancaiTime,l_szTableSelected,ln_CaiNumber);}result = SQLPrepare(hstmt,(SQLWCHAR*)sql,SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;MessageBox(hwnd,L"修改成功!",L"提示",MB_OK|MB_ICONINFORMATION);//释放odbc资源SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);}else{//不满足条件MessageBox(hwnd,L"请确认已选择要修改的菜的信息",L"提示",MB_OK|MB_ICONERROR);}}
}
void UpdateSomeInfoOnTimerOnGaiCaiProc(HWND hwnd)//更新操作几个控件内容
{//更新菜肴名:菜肴名是根据菜肴编号来响应的,所以先要获取菜肴编号WCHAR l_szCaiNumber[256];GetDlgItemText(hwnd,IDC_COMBO1,l_szCaiNumber,sizeof(l_szCaiNumber)/sizeof(WCHAR));//判空:如果菜肴编号为空,就不更新{if (*l_szCaiNumber!=NULL){//开始更新菜肴名//访问数据库:表:diancaiSQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);//先要将获取的菜的编号转为整形数值int l_nCaiNumber;l_nCaiNumber=_wtoi(l_szCaiNumber);WCHAR sql[256];wsprintf(sql,L"select MenuName from diancai where MenuNumber='%d'",l_nCaiNumber);result = SQLPrepare(hstmt,(SQLWCHAR*)sql,SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;WCHAR l_szmenuname[256];while (SQLFetch(hstmt)!=SQL_NO_DATA_FOUND){ZeroMemory(l_szmenuname,sizeof(l_szmenuname)/sizeof(WCHAR));SQLGetData(hstmt,1,SQL_C_WCHAR,l_szmenuname,30,&cbsatid);//获取额外的餐桌号SetDlgItemText(hwnd,IDC_EDIT1,l_szmenuname);break;}//释放odbc资源SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);}}//更新单价:单价也是根据菜肴编号来更新的,同时还要根据份量{//获取份量信息WCHAR l_szCaiFenLiang[256];GetDlgItemText(hwnd,IDC_COMBO4,l_szCaiFenLiang,sizeof(l_szCaiFenLiang)/sizeof(WCHAR));//菜肴编号的信息已经获取:l_szCaiNumber//判空if (*l_szCaiFenLiang!=NULL && l_szCaiNumber!=NULL){//设置更新单价,访问数据库SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);result = SQLPrepare(hstmt,(SQLWCHAR*)L"select ID,PriceBig,PriceSmall from menu",SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;SQLBIGINT ln_ID;WCHAR l_szPriceBig[256];WCHAR l_szPriceSmall[256];while (SQLFetch(hstmt)!=SQL_NO_DATA_FOUND){ZeroMemory(l_szPriceBig,sizeof(l_szPriceBig)/sizeof(WCHAR));ZeroMemory(l_szPriceSmall,sizeof(l_szPriceSmall)/sizeof(WCHAR));SQLGetData(hstmt,1,SQL_C_UBIGINT,&ln_ID,30,&cbsatid);//获取菜的编号SQLGetData(hstmt,2,SQL_C_WCHAR,l_szPriceBig,30,&cbsatid);//获取大份价格SQLGetData(hstmt,3,SQL_C_WCHAR,l_szPriceSmall,30,&cbsatid);//获取小份价格//查询判断//先将获取的菜的编号转为整形数值int ln_CaiNumber;ln_CaiNumber=_wtoi(l_szCaiNumber);if (ln_CaiNumber==ln_ID){if (lstrcmpW(l_szCaiFenLiang,L"大份")==0){SetDlgItemText(hwnd,IDC_EDIT2,l_szPriceBig);}if (lstrcmpW(l_szCaiFenLiang,L"小份")==0){SetDlgItemText(hwnd,IDC_EDIT2,l_szPriceSmall);}}}//释放odbc资源SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);}}//更新总金额:总金额是根据单价和数量以及菜肴编号{//这次不用访问数据库了,直接在编辑框中去取//获取数量WCHAR l_szCaiCount[256];GetDlgItemText(hwnd,IDC_COMBO3,l_szCaiCount,sizeof(l_szCaiCount)/sizeof(WCHAR));//获取单价WCHAR l_szPerPrice[256];GetDlgItemText(hwnd,IDC_EDIT2,l_szPerPrice,sizeof(l_szPerPrice)/sizeof(WCHAR));//判空if (*l_szCaiCount!=NULL && *l_szPerPrice!=NULL){//设置总金额//先将获取的数值字符串信息转为数字信息//转菜数量int ln_CaiCount;ln_CaiCount=_wtoi(l_szCaiCount);//转菜的单价float lf_PerPrice;lf_PerPrice=_wtof(l_szPerPrice);//计算最后的金额float ln_AllPrice;ln_AllPrice=ln_CaiCount*lf_PerPrice;//将获取的浮点数值转为字符串CString str;str.Format(L"%f", ln_AllPrice); WCHAR l_szAfterAllPrice[256];wsprintf(l_szAfterAllPrice, L"%s",str.GetBuffer(str.GetLength()));//设置编辑框内容SetDlgItemText(hwnd,IDC_EDIT3,l_szAfterAllPrice);}}
}
void InitCaiYaoNumComBoOnGaiCaiProc(HWND hwnd)//初始化菜肴编号组合框
{//获取用户选择的餐桌WCHAR szSelectTable[256];GetDlgItemText(hwnd,IDC_COMBO5,szSelectTable,sizeof(szSelectTable)/sizeof(WCHAR));//访问数据库SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);result = SQLPrepare(hstmt,(SQLWCHAR*)L"select TableNumber,MenuNumber from diancai",SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;WCHAR l_sztablenumber[256];SQLBIGINT l_nmenunumber;while (SQLFetch(hstmt)!=SQL_NO_DATA_FOUND){ZeroMemory(l_sztablenumber,sizeof(l_sztablenumber)/sizeof(WCHAR));SQLGetData(hstmt,1,SQL_C_WCHAR,l_sztablenumber,30,&cbsatid);//获取餐桌号SQLGetData(hstmt,2,SQL_C_UBIGINT,&l_nmenunumber,30,&cbsatid);//获取菜肴编号if (lstrcmpW(szSelectTable,l_sztablenumber)==0){//将菜肴编号转为字符串WCHAR l_szCaiYaoNum[256];wsprintf(l_szCaiYaoNum,L"%d",l_nmenunumber);//向组合框内添加内容SendDlgItemMessage(hwnd,IDC_COMBO1,CB_ADDSTRING,0,(LPARAM)l_szCaiYaoNum);}}//释放odbc资源SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);
}
void InitTableComBoOnGaiCaiProc(HWND hwnd)//初始化餐桌组合框
{//访问数据库,设置餐桌组合框的内容,访问的表为:diningtableSQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);WCHAR sql[256];wsprintf(sql,L"select ExtraTableNumber from diningtable where State='%s'",L"等待上菜");result = SQLPrepare(hstmt,(SQLWCHAR*)sql,SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;WCHAR l_szextablenumber[256];while (SQLFetch(hstmt)!=SQL_NO_DATA_FOUND){ZeroMemory(l_szextablenumber,sizeof(l_szextablenumber)/sizeof(WCHAR));SQLGetData(hstmt,1,SQL_C_WCHAR,l_szextablenumber,30,&cbsatid);//获取额外的餐桌号SendDlgItemMessage(hwnd,IDC_COMBO5,CB_ADDSTRING,0,(LPARAM)l_szextablenumber);}//释放odbc资源SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);}
void  AccessDataBaseForInitTable(HWND hwnd);//访问数据库初始化餐桌组合框
void SureToUpdateKaiTai(HWND hwnd,WCHAR szTable[]);//确认修改处理
void AccessDataBaseForGetServerNameInfoOnUpdateKaiTaiInfoProc(HWND hwnd);//访问数据库,获取服务员信息
INT_PTR CALLBACK UpdateKaiTaiInfoProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)//修改开台资料
{UNREFERENCED_PARAMETER(lParam);switch(message){case WM_INITDIALOG:{//设置位图按钮HINSTANCE hInst=(HINSTANCE)GetWindowLong(hDlg,GWL_HINSTANCE);HWND hBn1=GetDlgItem(hDlg,IDC_BUTTON1);HBITMAP hbmp1=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP17));SendMessage(hBn1, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hbmp1);HWND hBn2=GetDlgItem(hDlg,IDC_BUTTON2);HBITMAP hbmp2=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP16));SendMessage(hBn2, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hbmp2);HWND hBn4=GetDlgItem(hDlg,IDC_BUTTON4);HBITMAP hbmp4=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP18));SendMessage(hBn4, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hbmp4);//设置对话框图标SendMessage(hDlg, WM_SETICON, ICON_BIG,(LPARAM)LoadIcon(hInst, MAKEINTRESOURCE(IDI_ICON14))); //访问数据库,初始化用户选择餐桌的组合框AccessDataBaseForInitTable(hDlg);//在用户点击确认选择之前要禁用信息修改控件EnableWindow(GetDlgItem(hDlg,IDC_COMBO5),FALSE);EnableWindow(GetDlgItem(hDlg,IDC_COMBO3),FALSE);EnableWindow(GetDlgItem(hDlg,IDC_EDIT1),FALSE);//初始化新餐桌组合框的内容共20桌WCHAR l_szInitNewTable[256];for (int i=1;i<=20;i++){ZeroMemory(l_szInitNewTable,sizeof(l_szInitNewTable)/sizeof(WCHAR));wsprintf(l_szInitNewTable,L"第%d桌",i);SendDlgItemMessage(hDlg,IDC_COMBO5,CB_ADDSTRING,0,(LPARAM)l_szInitNewTable);}//初始化新服务员组合框的内容//访问数据库,获取服务员的信息AccessDataBaseForGetServerNameInfoOnUpdateKaiTaiInfoProc(hDlg);return (INT_PTR)TRUE;}case WM_COMMAND:{if (LOWORD(wParam)==IDCANCEL){EndDialog(hDlg,LOWORD(wParam));return (INT_PTR)TRUE;}switch(LOWORD(wParam)){case IDC_BUTTON1://确认修改{//获取用户选择的要修改的餐桌WCHAR l_szSelectToUpdateTable[256];GetDlgItemText(hDlg,IDC_COMBO11,l_szSelectToUpdateTable,sizeof(l_szSelectToUpdateTable)/sizeof(WCHAR));SureToUpdateKaiTai(hDlg,l_szSelectToUpdateTable);//确认修改处理break;}case IDC_BUTTON2://返回{EndDialog(hDlg,LOWORD(wParam));break;}case IDC_BUTTON4://确认选择{WCHAR l_szSelectTableName[256];GetDlgItemText(hDlg,IDC_COMBO11,l_szSelectTableName,sizeof(l_szSelectTableName)/sizeof(WCHAR));if (*l_szSelectTableName==NULL){MessageBox(hDlg,L"请先选择要修改的餐桌!",L"提示",MB_ICONERROR|MB_OK);break;}//先要启用控件,让用户可以更改信息EnableWindow(GetDlgItem(hDlg,IDC_COMBO5),TRUE);EnableWindow(GetDlgItem(hDlg,IDC_COMBO3),TRUE);EnableWindow(GetDlgItem(hDlg,IDC_EDIT1),TRUE);break;}}break;}}return (INT_PTR)FALSE;
}
void AccessDataBaseForGetServerNameInfoOnUpdateKaiTaiInfoProc(HWND hwnd)//访问数据库,获取服务员信息
{SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);result = SQLPrepare(hstmt,(SQLWCHAR*)L"select ServerName from diningtable",SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;WCHAR l_szServerName[256];while (SQLFetch(hstmt)!=SQL_NO_DATA_FOUND){ZeroMemory(l_szServerName,sizeof(l_szServerName)/sizeof(WCHAR));SQLGetData(hstmt,1,SQL_C_WCHAR,l_szServerName,30,&cbsatid);//获取额外的餐桌号SendDlgItemMessage(hwnd,IDC_COMBO3,CB_ADDSTRING,0,(LPARAM)l_szServerName);}//释放odbc资源SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);}
void SureToUpdateKaiTai(HWND hwnd,WCHAR szTable[])//确认修改处理
{BOOL lb_Testtablenumber=TRUE;//布尔值测试结果//获取控件中的内容WCHAR l_szNewTable[256];WCHAR l_szNewCustomerCount[256];WCHAR l_szNewServerName[256];GetDlgItemText(hwnd,IDC_COMBO5,l_szNewTable,sizeof(l_szNewTable)/sizeof(WCHAR));//获取新餐桌号GetDlgItemText(hwnd,IDC_COMBO3,l_szNewServerName,sizeof(l_szNewServerName)/sizeof(WCHAR));//获取新服务员GetDlgItemText(hwnd,IDC_EDIT1,l_szNewCustomerCount,sizeof(l_szNewCustomerCount)/sizeof(WCHAR));//获取人数//好了,现在访问数据库,用传进的szTable进行匹配,所访问的表为:diningtable{SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);result = SQLPrepare(hstmt,(SQLWCHAR*)L"select ExtraTableNumber,TableNumber,ServerName,CustomerNumber from diningtable",SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;WCHAR l_szExtablenumber[256];//额外的餐桌号SQLBIGINT l_ntablenumber;//餐桌号WCHAR l_szservername[256];//服务员名SQLBIGINT l_ncustomercount;//客户人数while (SQLFetch(hstmt)!=SQL_NO_DATA_FOUND){ZeroMemory(l_szExtablenumber,sizeof(l_szExtablenumber)/sizeof(WCHAR));SQLGetData(hstmt,1,SQL_C_WCHAR,l_szExtablenumber,30,&cbsatid);//获取额外的餐桌号SQLGetData(hstmt,2,SQL_C_UBIGINT,&l_ntablenumber,30,&cbsatid);//获取餐桌号ZeroMemory(l_szservername,sizeof(l_szservername)/sizeof(WCHAR));SQLGetData(hstmt,3,SQL_C_WCHAR,l_szservername,30,&cbsatid);//获取服务员名SQLGetData(hstmt,4,SQL_C_UBIGINT,&l_ncustomercount,30,&cbsatid);//获取客户名//匹配判断if (lstrcmpW(szTable,l_szExtablenumber)==0){//匹配成功,先要判断用户选择餐桌是否已经有人预定或就坐:用l_szNewTable判断匹配{//访问数据库,进行匹配操作SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);result = SQLPrepare(hstmt,(SQLWCHAR*)L"select ExtraTableNumber from diningtable",SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;WCHAR l_szextablenumber2[256];while (SQLFetch(hstmt)!=SQL_NO_DATA_FOUND){ZeroMemory(l_szextablenumber2,sizeof(l_szextablenumber2)/sizeof(WCHAR));SQLGetData(hstmt,1,SQL_C_WCHAR,l_szextablenumber2,30,&cbsatid);//获取额外的餐桌号if (lstrcmpW(l_szNewTable,l_szextablenumber2)==0){MessageBox(hwnd,L"对不起,您所选的餐桌已经有人预定,\n请重新选择!",L"提示",MB_OK|MB_ICONERROR);lb_Testtablenumber=FALSE;break;}}if (lb_Testtablenumber==TRUE)//如果用户的选择的餐桌不矛盾(无人就坐){//更新数据库SQLHENV henv1 = NULL;SQLHDBC hdbc1 = NULL;SQLHSTMT hstmt1 = NULL;SQLRETURN result1;SQLWCHAR ConnStrIn1[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut1[MAXBUFLEN];//分配环境句柄result1 = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv1);//设置管理环境属性result1 = SQLSetEnvAttr(henv1, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result1 = SQLAllocHandle(SQL_HANDLE_DBC, henv1, &hdbc1);//设置连接属性result1 = SQLSetConnectAttr(hdbc1, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result1 = SQLDriverConnect(hdbc1,NULL,ConnStrIn1,SQL_NTS,ConnStrOut1,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result1){ShowDBConnError(hwnd,hdbc1);}//初始化语句句柄result1 = SQLAllocHandle(SQL_HANDLE_STMT, hdbc1, &hstmt1);//将餐桌号(整形)和额外的餐桌号信息匹配起来//判断用户的选择,例如:用户选择的是“第一桌”,就将餐桌号设为“1”,“第二桌”,就设为“2”....WCHAR l_szTestTable[256];int ln_NewTable;for (int i=1;i<=20;i++){ZeroMemory(l_szTestTable,sizeof(l_szTestTable)/sizeof(WCHAR));//清空空间,防止数据叠加出错wsprintf(l_szTestTable,L"第%d桌",i);if (lstrcmpW(l_szTestTable,l_szNewTable)==0)//判断用户的选择是否是这个{ln_NewTable=i;break;}}//好了现在已经获取了餐桌的额外信息l_szNewTable,//餐桌信息ln_NewTable,服务员信息l_szNewServerName,人数信息l_szNewCustomerCount//将用户选择的人数字符串信息转为整形数值int l_nCount;l_nCount=_wtoi(l_szNewCustomerCount);//执行更新操作WCHAR sql[400];//多表更新执行,同时更新diningtable 和 diancai表的字段内容wsprintf(sql,L"update diningtable din1,diancai dian1 set din1.ExtraTableNumber='%s',din1.TableNumber='%d',din1.ServerName='%s',din1.CustomerNumber='%d',dian1.TableNumber='%s' where din1.ExtraTableNumber='%s' AND dian1.TableNumber='%s'",l_szNewTable,ln_NewTable,l_szNewServerName,l_nCount,l_szNewTable,szTable,szTable);result1 = SQLPrepare(hstmt1,(SQLWCHAR*)sql,SQL_NTS);CHECKDBSTMTERROR(hwnd,result1,hstmt1);result1 =SQLExecute(hstmt1);CHECKDBSTMTERROR(hwnd,result1,hstmt1);SQLINTEGER cbsatid1=SQL_NTS;MessageBox(hwnd,L"修改执行成功!",L"提示",MB_ICONINFORMATION|MB_OK);//释放odbc资源SQLFreeStmt(hstmt1,SQL_CLOSE);SQLDisconnect(hdbc1);SQLFreeHandle(SQL_HANDLE_DBC,hdbc1);SQLFreeHandle(SQL_HANDLE_ENV,henv1);}//释放odbc资源SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);}}}//释放odbc资源SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);}}
void InitKaiTaiDetailInfoFromDataBase(HWND hwnd,WCHAR szTableName[]);//从数据库获取开台详细信息INT_PTR CALLBACK KaiTaiDetailInfoProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)//开台详细情况
{UNREFERENCED_PARAMETER(lParam);switch(message){case WM_INITDIALOG:{//设置按钮为位图按钮HWND hBn1=GetDlgItem(hDlg,IDC_BUTTON1);HINSTANCE hInst=(HINSTANCE)GetWindowLong(hDlg,GWL_HINSTANCE);HBITMAP hbmp=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP14));SendMessage(hBn1, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hbmp);HWND hBn2=GetDlgItem(hDlg,IDC_BUTTON2);HBITMAP hbmp2=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP15));SendMessage(hBn2, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hbmp2);//设置对话框图标SendMessage(hDlg, WM_SETICON, ICON_BIG, (LPARAM)LoadIcon(hInst, MAKEINTRESOURCE(IDI_ICON15))); //初始化对话框上的各个控件中的内容//先要初始化餐桌号组合框的内容,共20桌//SendDlgItemMessage(hDlg,IDC_COMBO4,CB_ADDSTRING,0,(LPARAM)_T("+"));//访问数据库初始化餐桌组合框AccessDataBaseForInitTable(hDlg);//获取餐桌组合框的内容return (INT_PTR)TRUE;}case WM_COMMAND:{if (LOWORD(wParam)==IDCANCEL){EndDialog(hDlg,NULL);break;}switch(LOWORD(wParam)){case IDC_BUTTON1:{EndDialog(hDlg,NULL);break;}case IDC_BUTTON2:{WCHAR l_szTableName[256];ZeroMemory(l_szTableName,sizeof(l_szTableName)/sizeof(WCHAR));GetDlgItemText(hDlg,IDC_COMBO11,l_szTableName,sizeof(l_szTableName)/sizeof(WCHAR));if (*l_szTableName!=NULL){InitKaiTaiDetailInfoFromDataBase(hDlg,l_szTableName);}else{MessageBox(hDlg,L"请确认选择了餐桌!",L"提示",MB_OK|MB_ICONERROR);}break;}}break;}}return (INT_PTR)FALSE;
}
void  AccessDataBaseForInitTable(HWND hwnd)//访问数据库初始化餐桌组合框
{SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);result = SQLPrepare(hstmt,(SQLWCHAR*)L"select ExtraTableNumber from diningtable",SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;WCHAR l_sztablenumber[256];while (SQLFetch(hstmt)!=SQL_NO_DATA_FOUND){ZeroMemory(l_sztablenumber,sizeof(l_sztablenumber)/sizeof(WCHAR));SQLGetData(hstmt,1,SQL_C_WCHAR,l_sztablenumber,30,&cbsatid);SendDlgItemMessage(hwnd,IDC_COMBO11,CB_ADDSTRING,0,(LPARAM)l_sztablenumber);}//释放odbc资源SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);
}
void InitKaiTaiDetailInfoFromDataBase(HWND hwnd,WCHAR szTableName[])//从数据库获取开台详细信息
{SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);result = SQLPrepare(hstmt,(SQLWCHAR*)L"select ExtraTableNumber,KaiTaiTime,ServerName,CustomerNumber,CustomerName from diningtable",SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;WCHAR l_sztablenumber[256];WCHAR l_szkaitaitime[256];WCHAR l_szservername[256];WCHAR l_szcustomernumber[256];WCHAR l_szcustomername[256];while (SQLFetch(hstmt)!=SQL_NO_DATA_FOUND){SQLGetData(hstmt,1,SQL_C_WCHAR,l_sztablenumber,30,&cbsatid);SQLGetData(hstmt,2,SQL_C_WCHAR,l_szkaitaitime,60,&cbsatid);SQLGetData(hstmt,3,SQL_C_WCHAR,l_szservername,30,&cbsatid);SQLGetData(hstmt,4,SQL_C_WCHAR,l_szcustomernumber,30,&cbsatid);SQLGetData(hstmt,5,SQL_C_WCHAR,l_szcustomername,30,&cbsatid);if (lstrcmpW(szTableName,l_sztablenumber)==0){//匹配成功,开始设置信息SetDlgItemText(hwnd,IDC_EDIT1,l_szkaitaitime);SetDlgItemText(hwnd,IDC_COMBO2,l_szservername);SetDlgItemText(hwnd,IDC_EDIT2,l_szcustomernumber);SetDlgItemText(hwnd,IDC_EDIT3,l_szcustomername);break;}}//释放odbc资源SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);
}void SureToShangCai(HWND hwnd);//确认上菜
void InitShangCaiItem(HWND hwnd);//初始化上菜组合框的项
INT_PTR CALLBACK StartShangCaiProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)//开始上菜处理对话框
{UNREFERENCED_PARAMETER(lParam);switch(message){case WM_INITDIALOG:{//设置对话框图标HINSTANCE hInst=(HINSTANCE)GetWindowLong(hDlg,GWL_HINSTANCE);SendMessage(hDlg, WM_SETICON, ICON_BIG, (LPARAM)LoadIcon(hInst, MAKEINTRESOURCE(IDI_ICON15)));//设置位图按钮HWND hBn1=GetDlgItem(hDlg,IDC_BUTTON1);HBITMAP hbmp1=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP6));  SendMessage(hBn1, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM) hbmp1);HWND hBn2=GetDlgItem(hDlg,IDC_BUTTON2);HBITMAP hbmp2=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP5));  SendMessage(hBn2, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM) hbmp2);//初始化餐桌号 的组合框的内容项InitShangCaiItem(hDlg);//初始化上菜组合框的项return (INT_PTR)TRUE;}case WM_COMMAND:{if (LOWORD(wParam)==IDCANCEL){EndDialog(hDlg,LOWORD(wParam));return (INT_PTR)TRUE;}switch(LOWORD(wParam)){case IDC_BUTTON1://确认上菜{SureToShangCai(hDlg);break;}case IDC_BUTTON2://退出对话框{EndDialog(hDlg,LOWORD(wParam));break;}}break;}}return (INT_PTR)FALSE;
}
void InitShangCaiItem(HWND hwnd)//初始化上菜组合框的项
{
//访问数据库中的diningtable表,将State段为“等待上菜”的餐桌号加至组合框内//开始访问数据库SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);result = SQLPrepare(hstmt,(SQLWCHAR*)L"select ExtraTableNumber,State from diningtable",SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;WCHAR l_sztablenumber[256];WCHAR l_szstate[256];while (SQLFetch(hstmt)!=SQL_NO_DATA_FOUND){SQLGetData(hstmt,1,SQL_C_WCHAR,l_sztablenumber,30,&cbsatid);SQLGetData(hstmt,2,SQL_C_WCHAR,l_szstate,30,&cbsatid);if (lstrcmpW(L"等待上菜",l_szstate)==0){SendDlgItemMessage(hwnd,IDC_COMBO1,CB_ADDSTRING,0,(LPARAM)l_sztablenumber);}}//释放odbc资源SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);
}
void SureToShangCai(HWND hwnd)//确认上菜处理
{//先要获取用户选择的餐桌WCHAR szSelectTable[256];GetDlgItemText(hwnd,IDC_COMBO1,szSelectTable,sizeof(szSelectTable)/sizeof(WCHAR));//当管理员点击确认上菜时,将diningtable表的State段改为“正在用餐”//访问数据库SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);result = SQLPrepare(hstmt,(SQLWCHAR*)L"select ExtraTableNumber,State from diningtable",SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;WCHAR l_sztablenumber[256];WCHAR l_szstate[256];while (SQLFetch(hstmt)!=SQL_NO_DATA_FOUND){SQLGetData(hstmt,1,SQL_C_WCHAR,l_sztablenumber,30,&cbsatid);SQLGetData(hstmt,2,SQL_C_WCHAR,l_szstate,30,&cbsatid);if (lstrcmpW(szSelectTable,l_sztablenumber)==0){//访问数据库将用户选择对的餐桌的state段更改为“正在用餐”SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);WCHAR sql[256];wsprintf(sql,L"update diningtable set State='%s' where  ExtraTableNumber='%s'",L"正在用餐",szSelectTable);result = SQLPrepare(hstmt,(SQLWCHAR*)sql,SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);WCHAR szInfo[256];wsprintf(szInfo,L"系统正在通知为%s上菜",szSelectTable);MessageBox(hwnd,szInfo,L"友情提示",MB_OK|MB_ICONINFORMATION);//释放odbc资源SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);}}//释放odbc资源SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);
}
DWORD WINAPI  InitComBInfo(LPVOID lpParam);//点菜中初始化组合框中的信息,线程处理过程
void  SetCustomerInfo(HWND hwnd);//设置客户编辑框的信息
void AccessDataBaseSetPriceEditFrame(HWND hwnd);//设置价格编辑框的信息
void AccessDataBaseToSetState(HWND hwnd);//设置用户餐桌信息等待上菜
INT_PTR CALLBACK PopDianCaiProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)//点菜对话框
{UNREFERENCED_PARAMETER(lParam);HDC hdc;PAINTSTRUCT ps;HANDLE hThread=NULL;switch(message){case WM_PAINT:{hdc=BeginPaint(hDlg,&ps);static Image *gImag=NULL;Graphics g(hdc);if (gImag==NULL){gImag=Image::FromFile(_T("diancai.png"));}{g.DrawImage(gImag,0,0,70,70);}BitBlt(hdc,0,0,70,70,NULL,0,0,SRCCOPY);EndPaint(hDlg,&ps);return 0;}case WM_TIMER:{//根据餐桌号数据信息访问数据库用餐桌号去匹配设置客户名//创建线程,减小开销//获取餐桌号编辑框内内容WCHAR szTableNum[256];GetDlgItemText(hDlg,IDC_COMBO7,szTableNum,sizeof(szTableNum)/sizeof(WCHAR));if (*szTableNum==NULL){break;}SetCustomerInfo(hDlg);//折后价处理//在设置价格编辑框之前要判断用户是否选择了菜名、份量WCHAR szMenuName[256];WCHAR szVolume[256];GetDlgItemText(hDlg,IDC_COMBO2,szMenuName,sizeof(szMenuName)/sizeof(WCHAR));GetDlgItemText(hDlg,IDC_COMBO3,szVolume,sizeof(szVolume)/sizeof(WCHAR));if (*szMenuName==NULL || *szVolume==NULL){break;}//根据选择的菜的信息,设置价格//访问menu表,根据菜名(Name)和菜的份量(大份或小份)以及打折信息获取菜的价格信息AccessDataBaseSetPriceEditFrame(hDlg);//合计金额处理{//根据价格信息和数量信息自动设置合计金额信息。WCHAR l_szPrice[256];WCHAR l_szCount[256];//获取价格GetDlgItemText(hDlg,IDC_EDIT1,l_szPrice,sizeof(l_szPrice)/sizeof(WCHAR));//获取数量GetDlgItemText(hDlg,IDC_EDIT2,l_szCount,sizeof(l_szCount)/sizeof(WCHAR));//判空if (*l_szCount==NULL || *l_szPrice==NULL){break;}//设置合计金额信息//先将取得的价格转换成浮点数据double lf_money;lf_money=_wtof(l_szPrice);//再将获取的数量转换成整形数据int ln_count;ln_count=_wtoi(l_szCount);//设置一个金额变量存储金额信息double lf_AllMoney;lf_AllMoney=ln_count*lf_money;//将获取的合计金额的浮点数据转换成字符串CString str;  WCHAR szAllMoney[256];str.Format(L"%f", lf_AllMoney);  wsprintf(szAllMoney, L"%s元",str.GetBuffer(str.GetLength()));  SetDlgItemText(hDlg,IDC_EDIT3,szAllMoney);}break;}case WM_ERASEBKGND:{return 0;}case WM_CTLCOLORBTN ://设置按钮的颜色if ((HWND)lParam == GetDlgItem(hDlg, IDC_BUTTON2)||(HWND)lParam == GetDlgItem(hDlg, IDC_BUTTON3)){HWND hbn = (HWND)lParam;HDC hdc = (HDC)wParam;RECT rc;TCHAR text[64];GetWindowText(hbn, text, 63);GetClientRect(hbn, &rc);SetTextColor(hdc, RGB(255, 255, 255));//设置按钮上文本的颜色SetBkMode(hdc, TRANSPARENT);DrawText(hdc, text, _tcslen(text), &rc, DT_CENTER | DT_VCENTER | DT_SINGLELINE);return (INT_PTR)CreateSolidBrush(RGB(127,0,255));//返回画刷设置按钮的背景色}break;case WM_INITDIALOG:{SetTimer(hDlg,1,2000,NULL);//设置对话框图标HINSTANCE hInst=(HINSTANCE)GetWindowLong(hDlg,GWL_HINSTANCE);SendMessage(hDlg, WM_SETICON, ICON_BIG, (LPARAM)LoadIcon(hInst, MAKEINTRESOURCE(IDI_ICON9))); //访问数据库初始化几个组合框的内容//由于要访问的数据库工作较多,只好创建额外的线程去处理比较好hThread=CreateThread(NULL, 0,InitComBInfo,hDlg,0,NULL);//InitComBInfo(hDlg,wParam);return (INT_PTR)TRUE;}case WM_COMMAND:{if (LOWORD(wParam)==IDCANCEL){KillTimer(hDlg,1);EndDialog(hDlg,LOWORD(wParam));return (INT_PTR)TRUE;}switch(LOWORD(wParam)){case IDC_BUTTON2://确认点菜{//MessageBox(hDlg,L"确认点菜",NULL,MB_OK);//当用户点击确认点菜,转向数据库访问处理,将信息输入数据库,以餐桌号为匹配标准CommandToDianCai(hDlg,wParam);break;}case IDC_BUTTON3://退出对话框{KillTimer(hDlg,1);//关闭线程对象,防止泄露内存if (hThread!=NULL){CloseHandle(hThread);}EndDialog(hDlg,LOWORD(wParam));break;}}break;}}return (INT_PTR)FALSE;
}
void AccessDataBaseToSetState(HWND hwnd)//设置用户餐桌信息“等待上菜”
{//访问数据库中的diningtable表,update State字段为“等待上菜”{//先要根据用户选择的餐桌号去寻找匹配对象//获取用户输入的餐桌WCHAR szTableNum[256];GetDlgItemText(hwnd,IDC_COMBO7,szTableNum,sizeof(szTableNum)/sizeof(WCHAR));//开始访问数据库SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);result = SQLPrepare(hstmt,(SQLWCHAR*)L"select ExtraTableNumber,State from diningtable",SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;WCHAR l_sztablenumber[256];WCHAR l_szstate[256];while (SQLFetch(hstmt)!=SQL_NO_DATA_FOUND){SQLGetData(hstmt,1,SQL_C_WCHAR,l_sztablenumber,30,&cbsatid);SQLGetData(hstmt,2,SQL_C_WCHAR,l_szstate,30,&cbsatid);//匹配成功的话就去更新数据库if (lstrcmpW(szTableNum,l_sztablenumber)==0){//开始访问数据库SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);WCHAR sql[256];wsprintf(sql,L"update diningtable set State='%s' where ExtraTableNumber='%s'",L"等待上菜",szTableNum);result = SQLPrepare(hstmt,(SQLWCHAR*)sql,SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);break;}}SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);}}
void AccessDataBaseSetPriceEditFrame(HWND hwnd)//访问数据库设置价格编辑框中的价格信息
{//先要获取用户选择的菜肴信息和份量信息WCHAR szMenuName[256];WCHAR szVolume[256];GetDlgItemText(hwnd,IDC_COMBO2,szMenuName,sizeof(szMenuName)/sizeof(WCHAR));GetDlgItemText(hwnd,IDC_COMBO3,szVolume,sizeof(szVolume)/sizeof(WCHAR));//好了,现在访问数据库SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);result = SQLPrepare(hstmt,(SQLWCHAR*)L"select Name,PriceBig,PriceSmall,Discount from menu",SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;//先判断用户输入的是大份还是小份BOOL lb_TestVolume=FALSE;if (lstrcmpW(szVolume,L"大份")==0){lb_TestVolume=TRUE;}if (lstrcmpW(szVolume,L"小份")==0){lb_TestVolume=FALSE;}//WCHAR l_menuname[256];WCHAR l_price[256];WCHAR l_discount[256];while (SQLFetch(hstmt)!=SQL_NO_DATA_FOUND){//获取菜名SQLGetData(hstmt,1,SQL_C_WCHAR,l_menuname,30,&cbsatid);//获取打折信息SQLGetData(hstmt,4,SQL_C_WCHAR,l_discount,30,&cbsatid);//两个if获取价格if (lb_TestVolume==TRUE)//如果为大份,获取大份价格{SQLGetData(hstmt,2,SQL_C_WCHAR,l_price,30,&cbsatid);}if (lb_TestVolume==FALSE)//如果为小份,获取小份价格{SQLGetData(hstmt,3,SQL_C_WCHAR,l_price,30,&cbsatid);}if (lstrcmpW(l_menuname,szMenuName)==0)//菜名匹配成功{//将获取的价格和打折信息转换成浮点数据double lf_discount;double lf_price;//先转换价格lf_price=_wtof(l_price);//再获取打折信息lf_discount=_wtof(l_discount);//然后将打折的数值乘以价格获取折后价double lf_PriceAfterDiscount;lf_PriceAfterDiscount=lf_price*lf_discount;//将获取的折后价转换成字符串WCHAR szPriceAfterDiscount[256];//ZeroMemory(szPriceAfterDiscount,sizeof(szPriceAfterDiscount)/sizeof(WCHAR));CString str;  str.Format(L"%f", lf_PriceAfterDiscount);  wsprintf(szPriceAfterDiscount, L"%s元",str.GetBuffer(str.GetLength()));  //将获取的折后价字符串数据填充到折后价的编辑框中SetDlgItemText(hwnd,IDC_EDIT1,szPriceAfterDiscount);//将获取的打折信息填充到对话框上的打折信息的静态框中WCHAR szCount[256];wsprintf(szCount,L"%s折",l_discount);SetDlgItemText(hwnd,IDC_STATIC20,szCount);//好了,一切搞定, break;}}SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);}
void SetCustomerInfo(HWND hwnd)//设置客户编辑框的信息
{//获取餐桌号编辑框内内容WCHAR szTableNum[256];GetDlgItemText(hwnd,IDC_COMBO7,szTableNum,sizeof(szTableNum)/sizeof(WCHAR));if (*szTableNum==NULL){return;}//访问数据库,用szTableNum进行匹配SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);result = SQLPrepare(hstmt,(SQLWCHAR*)L"select ExtraTableNumber,CustomerName from diningtable",SQL_NTS);//CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);//CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;WCHAR l_tablenumber[256];WCHAR l_custmername[256];while (SQLFetch(hstmt)!=SQL_NO_DATA_FOUND){SQLGetData(hstmt,1,SQL_C_WCHAR,l_tablenumber,30,&cbsatid);SQLGetData(hstmt,2,SQL_C_WCHAR,l_custmername,30,&cbsatid);if (lstrcmpW(szTableNum,l_tablenumber)==0){SetDlgItemText(hwnd,IDC_EDIT7,l_custmername);break;}}SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);}
DWORD WINAPI InitComBInfo(LPVOID lpParam)//点菜中初始化组合框中的信息
{HWND hwnd=(HWND)lpParam;//获取传进的窗口句柄//点菜时间获取当地时间SYSTEMTIME mytime;GetLocalTime(&mytime);TCHAR strtime[256];wsprintf(strtime,L"%04d—%02d—%02d %02d:%02d:%02d",mytime.wYear,mytime.wMonth,mytime.wDay,mytime.wHour,mytime.wMinute,mytime.wSecond);//设置点菜时间的信心SetDlgItemText(hwnd,IDC_EDIT4,strtime);//餐桌号访问diningtable表初始化餐桌组合框{SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);result = SQLPrepare(hstmt,(SQLWCHAR*)L"select ExtraTableNumber from diningtable",SQL_NTS);//CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);//CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;WCHAR l_tablenumber[256];while (SQLFetch(hstmt)!=SQL_NO_DATA_FOUND){SQLGetData(hstmt,1,SQL_C_WCHAR,l_tablenumber,30,&cbsatid);SendDlgItemMessage(hwnd,IDC_COMBO7,CB_ADDSTRING,0,(LPARAM)l_tablenumber);}SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);}//菜肴名访问menu表初始化菜肴组合框{SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);result = SQLPrepare(hstmt,(SQLWCHAR*)L"select Name,PriceBig,PriceSmall from menu",SQL_NTS);//CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);//CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;WCHAR l_menuname[256];while (SQLFetch(hstmt)!=SQL_NO_DATA_FOUND){SQLGetData(hstmt,1,SQL_C_WCHAR,l_menuname,30,&cbsatid);SendDlgItemMessage(hwnd,IDC_COMBO2,CB_ADDSTRING,0,(LPARAM)l_menuname);}SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);}//份量初始化份量组合框(大份,小份){SendDlgItemMessage(hwnd,IDC_COMBO3,CB_ADDSTRING,0,(LPARAM)L"大份");SendDlgItemMessage(hwnd,IDC_COMBO3,CB_ADDSTRING,0,(LPARAM)L"小份");}//负责人访问serverinfo表初始化负责人组合框{SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);result = SQLPrepare(hstmt,(SQLWCHAR*)L"select ServerName from serverinfo",SQL_NTS);//CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);//CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;WCHAR l_servername[256];while (SQLFetch(hstmt)!=SQL_NO_DATA_FOUND){SQLGetData(hstmt,1,SQL_C_WCHAR,l_servername,30,&cbsatid);SendDlgItemMessage(hwnd,IDC_COMBO4,CB_ADDSTRING,0,(LPARAM)l_servername);}SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);}return 0;
}
void CommandToDianCai(HWND hwnd,WPARAM wParam)//点菜处理
{//在此处接收用户输入到编辑框中的所有信息//获取菜肴名WCHAR szMenuName[256];GetDlgItemText(hwnd,IDC_COMBO2,szMenuName,sizeof(szMenuName)/sizeof(WCHAR));//由菜肴名去访问数据库中的menu表获取菜肴编号int nID;{SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);result = SQLPrepare(hstmt,(SQLWCHAR*)L"select ID,Name from menu",SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;WCHAR l_menurname[256];SQLBIGINT ln_menuid;while (SQLFetch(hstmt)!=SQL_NO_DATA_FOUND){SQLGetData(hstmt,1,SQL_C_UBIGINT,&ln_menuid,30,&cbsatid);SQLGetData(hstmt,2,SQL_C_WCHAR,l_menurname,30,&cbsatid);if (lstrcmpW(szMenuName,l_menurname)==0){nID=ln_menuid;break;}}SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);}//获取菜肴数量WCHAR szMenuCount[256];GetDlgItemText(hwnd,IDC_EDIT2,szMenuCount,sizeof(szMenuCount)/sizeof(WCHAR));//将菜肴数量的字符数据转换为整形数据int nMenuCount;nMenuCount=_wtoi(szMenuCount);//获取菜肴的价格WCHAR szMenuPrice[256];GetDlgItemText(hwnd,IDC_EDIT1,szMenuPrice,sizeof(szMenuPrice)/sizeof(WCHAR));//获取合计金额WCHAR szAllPrice[256];GetDlgItemText(hwnd,IDC_EDIT3,szAllPrice,sizeof(szAllPrice)/sizeof(WCHAR));//获取点菜时间WCHAR szDianCaiTime[256];GetDlgItemText(hwnd,IDC_EDIT4,szDianCaiTime,sizeof(szDianCaiTime)/sizeof(WCHAR));//获取顾客要求WCHAR szCustomerDemmand[256];GetDlgItemText(hwnd,IDC_EDIT5,szCustomerDemmand,sizeof(szCustomerDemmand)/sizeof(WCHAR));//获取餐桌号WCHAR szTableNumber[256];GetDlgItemText(hwnd,IDC_COMBO7,szTableNumber,sizeof(szTableNumber)/sizeof(WCHAR));//获取份量WCHAR szVolume[256];GetDlgItemText(hwnd,IDC_COMBO3,szVolume,sizeof(szVolume)/sizeof(WCHAR));//在插入之前要判断用户输入是否为空if (*szTableNumber==NULL||*szMenuName==NULL|| *szMenuCount==NULL||*szVolume==NULL){MessageBox(hwnd,L"必要的信息必须填写!",L"提示",MB_ICONERROR|MB_OK);return;}//好了,获取信息完毕,开始将数据全部插入数据库的diancai表中了{//访问数据库将数据全部插入数据表中SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);WCHAR sql[256];wsprintf(sql,L"insert into diancai(MenuNumber,MenuName,MenuCount,MenuPrice,AllPrice,DianCaiTime,CustomerDemmand,TableNumber) values('%d','%s','%d','%s','%s','%s','%s','%s')",nID,szMenuName,nMenuCount,szMenuPrice,szAllPrice,szDianCaiTime,szCustomerDemmand,szTableNumber);result = SQLPrepare(hstmt,(SQLWCHAR*)sql,SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);}//插入成功后要设置静态信息提示框的信息为“点菜...几份...成功”{PlaySound(L"1.wav",NULL,SND_ALIAS|SND_ASYNC);WCHAR szInfo[256];wsprintf(szInfo,L"点菜%s%s份成功,正在通知厨房准备...",szMenuName,szMenuCount);SetDlgItemText(hwnd,IDC_EDIT6,szInfo);//设置餐桌状态“等待上菜”AccessDataBaseToSetState(hwnd);}}
void SureToKaiTai(HWND hwnd,WPARAM wParam);//确认开台处理
void GetServerNameInfoFromDataBase(HWND hwnd);//获取服务员信息
INT_PTR CALLBACK KaiTaiProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)//开台对话框
{UNREFERENCED_PARAMETER(lParam);switch(message){case WM_CTLCOLORBTN ://设置按钮的颜色{if ((HWND)lParam == GetDlgItem(hDlg, IDC_BUTTON1)||(HWND)lParam == GetDlgItem(hDlg, IDC_BUTTON3)){HWND hbn = (HWND)lParam;HDC hdc = (HDC)wParam;RECT rc;TCHAR text[64];GetWindowText(hbn, text, 63);GetClientRect(hbn, &rc);SetTextColor(hdc, RGB(255, 255, 255));//设置按钮上文本的颜色SetBkMode(hdc, TRANSPARENT);DrawText(hdc, text, _tcslen(text), &rc, DT_CENTER | DT_VCENTER | DT_SINGLELINE);return (INT_PTR)CreateSolidBrush(RGB(127,0,155));//返回画刷设置按钮的背景色}break;}case WM_INITDIALOG:{//设置对话框图标HINSTANCE hInst=(HINSTANCE)GetWindowLong(hDlg,GWL_HINSTANCE);SendMessage(hDlg, WM_SETICON, ICON_BIG, (LPARAM)LoadIcon(hInst, MAKEINTRESOURCE(IDI_ICON8))); //设置按钮的属性为可自绘HWND hBn1 = GetDlgItem(hDlg, IDC_BUTTON1);SetWindowLong(hBn1, GWL_STYLE, GetWindowLong(hBn1, GWL_STYLE) | BS_OWNERDRAW);HWND hBn3 = GetDlgItem(hDlg, IDC_BUTTON3);SetWindowLong(hBn3, GWL_STYLE, GetWindowLong(hBn3, GWL_STYLE) | BS_OWNERDRAW);//设置时间//获取本地时间WCHAR szLocalTimer[256];SYSTEMTIME mytime;GetLocalTime(&mytime);wsprintf(szLocalTimer,L"%04d—%02d—%02d %02d:%02d:%02d",mytime.wYear,mytime.wMonth,mytime.wDay,mytime.wHour,mytime.wMinute,mytime.wSecond);SetDlgItemText(hDlg,IDC_EDIT2,szLocalTimer);//设置成禁用状态EnableWindow(GetDlgItem(hDlg,IDC_EDIT2),FALSE);//设置状态WCHAR szState[256];wsprintf(szState,L"%s",L"等待点菜");SetDlgItemText(hDlg,IDC_EDIT4,szState);//设置成禁用状态EnableWindow(GetDlgItem(hDlg,IDC_EDIT4),FALSE);//向下拉列表框中插入餐桌信息,总共20桌for (int i=1;i<=20;i++){WCHAR szTable[256];wsprintf(szTable,L"%d",i);SendDlgItemMessage(hDlg,IDC_COMBO10,CB_ADDSTRING,0,(LPARAM)szTable);}GetServerNameInfoFromDataBase(hDlg);return (INT_PTR)TRUE;}case WM_COMMAND:{if (LOWORD(wParam)==IDCANCEL){EndDialog(hDlg,LOWORD(wParam));return (INT_PTR)TRUE;}switch(LOWORD(wParam)){case IDC_BUTTON1://确认开台{//MessageBox(hDlg,TEXT("确认开台"),TEXT(""),MB_OK);SureToKaiTai(hDlg,wParam);//确认开台处理break;}case IDC_BUTTON3://退出{EndDialog(hDlg,LOWORD(wParam));break;}}break;}}return (INT_PTR)FALSE;
}
void GetServerNameInfoFromDataBase(HWND hwnd)//获取服务员信息
{//访问数据库获取服务员信息SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);result = SQLPrepare(hstmt,(SQLWCHAR*)L"select ServerName from serverinfo",SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;WCHAR szCustomerName[256];while (SQLFetch(hstmt)!=SQL_NO_DATA_FOUND){SQLGetData(hstmt,1,SQL_C_WCHAR,szCustomerName,30,&cbsatid);SendDlgItemMessage(hwnd,IDC_COMBO9,CB_ADDSTRING,0,(LPARAM)szCustomerName);}SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);}
void SureToKaiTai(HWND hwnd,WPARAM wParam)//确认开台处理
{//用户点击确认开台时要获取用户输入的信息//获取服务员信息WCHAR szServerName[256];GetDlgItemText(hwnd,IDC_COMBO9,szServerName,sizeof(szServerName)/sizeof(WCHAR));//获取开台时间信息WCHAR szKaiTaiTime[256];GetDlgItemText(hwnd,IDC_EDIT2,szKaiTaiTime,sizeof(szKaiTaiTime)/sizeof(WCHAR));//获取餐桌号信息,根据组合框的索引来获取信息WCHAR szTableNumber[256];GetDlgItemText(hwnd,IDC_COMBO10,szTableNumber,sizeof(szTableNumber)/sizeof(WCHAR));//设置额外的信息WCHAR szExtraTableNumber[256];wsprintf(szExtraTableNumber,L"第%s桌",szTableNumber);// MessageBox(NULL,szTableNumber,NULL,MB_OK);//获取状态信息WCHAR szState[256];GetDlgItemText(hwnd,IDC_EDIT4,szState,sizeof(szState)/sizeof(WCHAR));//获取人数信息WCHAR szCusNum[256];GetDlgItemText(hwnd,IDC_EDIT5,szCusNum,sizeof(szCusNum)/sizeof(WCHAR));//获取客户名信息WCHAR szCusName[256];GetDlgItemText(hwnd,IDC_EDIT20,szCusName,sizeof(szCusName)/sizeof(WCHAR));//判断用户输入是否为空if (*szServerName==NULL||*szTableNumber==NULL || *szCusNum==NULL ||*szCusName==NULL){MessageBox(hwnd,L"服务员名、餐桌号、客户名和人数都必须填写!",L"错误",MB_ICONERROR|MB_OK);return;}//访问数据库对用户输入的餐桌号进行判断,是否改号已经有人预定,如果预定,提示用户重新输入//访问数据库SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);result = SQLPrepare(hstmt,(SQLWCHAR*)L"select TableNumber from diningtable",SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;SQLBIGINT l_Id;int nTableNumber;//将字符串转为整形数据nTableNumber= _wtoi(szTableNumber);BOOL lbTest=FALSE;while (SQLFetch(hstmt)!=SQL_NO_DATA_FOUND){SQLGetData(hstmt,1,SQL_C_UBIGINT,&l_Id,30,&cbsatid);//进行匹配if (nTableNumber==l_Id){lbTest=TRUE;break;}}SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);if (lbTest==TRUE){//提示用户出错MessageBox(hwnd,TEXT("该餐桌已经有人预定,请选择其他餐桌号!"),TEXT("提示"),MB_OK|MB_ICONERROR);return;}if (lbTest==FALSE){//没有预定的情况下,将用户输入的信息插入到数据库中//MessageBox(hwnd,TEXT("成功!"),TEXT("提示"),MB_OK|MB_ICONINFORMATION);SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);int nCusNum=_wtoi(szCusNum);WCHAR sql[256];wsprintf(sql,L"insert into diningtable(ServerName,KaiTaiTime,TableNumber,State,CustomerNumber,ExtraTableNumber,CustomerName) values('%s','%s','%d','%s','%d','%s','%s')",szServerName,szKaiTaiTime,nTableNumber,szState,nCusNum,szExtraTableNumber,szCusName);result = SQLPrepare(hstmt,(SQLWCHAR*)sql,SQL_NTS);//szCusNumCHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);MessageBox(hwnd,TEXT("开台成功!"),L"提示",MB_OK|MB_ICONINFORMATION);SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);}}
void UpdateUserName(HWND hwnd,WPARAM wParam,WCHAR szUserName[]);//修改口令处理过程
INT_PTR CALLBACK ChangeManagerInfoProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)//修改口令对话框过程定义
{UNREFERENCED_PARAMETER(lParam);switch(message){case WM_CTLCOLORSTATIC://设置静态文本框字体颜色{if (GetDlgItem(hDlg, IDC_STATIC1) == (HWND)lParam || GetDlgItem(hDlg, IDC_STATIC2) == (HWND)lParam)//这里的1是静态文本框的ID{SetTextColor((HDC)wParam, RGB(0,0,255));SetBkMode((HDC)wParam, TRANSPARENT);//return (LRESULT)CreateSolidBrush(GetSysColor(COLOR_BTNFACE));return (BOOL)((HBRUSH)GetStockObject(NULL_BRUSH));}break;}case WM_CTLCOLORDLG:{HBRUSH g_hbrBackground = CreateSolidBrush(RGB(252,251,159));return (LONG)g_hbrBackground;}case WM_CTLCOLORBTN ://设置按钮的颜色if ((HWND)lParam == GetDlgItem(hDlg, IDC_BUTTON3)){HWND hbn = (HWND)lParam;HDC hdc = (HDC)wParam;RECT rc;TCHAR text[64];GetWindowText(hbn, text, 63);GetClientRect(hbn, &rc);SetTextColor(hdc, RGB(255, 255, 255));SetBkMode(hdc, TRANSPARENT);DrawText(hdc, text, _tcslen(text), &rc, DT_CENTER | DT_VCENTER | DT_SINGLELINE);return (INT_PTR)CreateSolidBrush(RGB(127,0,255));}case WM_INITDIALOG:{//设置对话框图标HINSTANCE hInst=(HINSTANCE)GetWindowLong(hDlg,GWL_HINSTANCE);SendMessage(hDlg, WM_SETICON, ICON_BIG, (LPARAM)LoadIcon(hInst, MAKEINTRESOURCE(IDI_ICON6))); //设置按钮的属性为可自绘HWND hBn1 = GetDlgItem(hDlg, IDC_BUTTON3);SetWindowLong(hBn1, GWL_STYLE, GetWindowLong(hBn1, GWL_STYLE) | BS_OWNERDRAW);return (INT_PTR)TRUE;}case WM_COMMAND:{if (LOWORD(wParam)==IDCANCEL){EndDialog(hDlg,NULL);break;}if (LOWORD(wParam)==IDC_BUTTON3)//确认更改{//MessageBox(NULL,NULL,NULL,MB_OK);//然后转入函数过程去处理UpdateUserName(hDlg,wParam,g_LogUserName);break;}break;}}return (INT_PTR)FALSE;
}
void UpdateUserName(HWND hwnd,WPARAM wParam,WCHAR szUserName[])//修改口令处理过程函数定义
{//获取编辑框中的内容WCHAR szName[40];GetDlgItemText(hwnd,IDC_EDIT1,szName,sizeof(szName)/sizeof(WCHAR));//获取用户名WCHAR szPassWord[40];GetDlgItemText(hwnd,IDC_EDIT2,szPassWord,sizeof(szPassWord)/sizeof(WCHAR));//获取密码//执行判断,用户输入的用户名和密码是否为空,为空就提示失败if (*szName==NULL || *szPassWord==NULL){MessageBox(hwnd,TEXT("用户名或密码必须填写!"),TEXT("错误提示"),MB_OK|MB_ICONERROR);return;}//好了现在访问数据库,进行数据更新//访问数据库SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);result = SQLPrepare(hstmt,(SQLWCHAR*)L"select FUserName from mytable",SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;WCHAR lusername[256];while (SQLFetch(hstmt)!=SQL_NO_DATA_FOUND){SQLGetData(hstmt,1,SQL_C_WCHAR,lusername,30,&cbsatid);if (lstrcmpW(szUserName,lusername)==0)//匹配成功,更改对应数据项{//访问数据库SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);WCHAR sql[256];wsprintf(sql,L"update mytable set FUserName='%s',FPassWord='%s' where FUserName='%s'",szName,szPassWord,szUserName);result = SQLPrepare(hstmt,(SQLWCHAR*)sql,SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);MessageBox(hwnd,TEXT("登录口令修改成功!"),TEXT("修改口令"),MB_OK|MB_ICONINFORMATION);SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);break;}}SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);}
//管理员对话框
INT_PTR CALLBACK ManagerProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{UNREFERENCED_PARAMETER(lParam);HDC hdc;PAINTSTRUCT ps;static int gn_T=255;switch(message){//case WM_CTLCOLOREDIT://   { //        int i=GetWindowLong((HWND)lParam,GWL_ID);//        if(i==IDC_EDIT1 || i==IDC_EDIT2)//      {//         SetTextColor((HDC)wParam,RGB(0,0,255));//文字颜色//         SetBkColor((HDC)wParam,GetSysColor(COLOR_BTNFACE));//文字的背后颜色//      }//     if(i==IDC_EDIT3 || i==IDC_EDIT4 || i==IDC_EDIT5)//        {//         SetTextColor((HDC)wParam,RGB(255,0,0));//文字颜色//         SetBkColor((HDC)wParam,GetSysColor(COLOR_BTNFACE));//文字的背后颜色//      }//     return (BOOL)((HBRUSH)GetStockObject(NULL_BRUSH));//    }case WM_CTLCOLORSTATIC://设置静态文本框字体颜色{if (GetDlgItem(hDlg, IDC_SHOWERROR) == (HWND)lParam||GetDlgItem(hDlg, IDC_STATIC1) == (HWND)lParam||GetDlgItem(hDlg, IDC_STATIC2) == (HWND)lParam||GetDlgItem(hDlg, IDC_STATIC3) == (HWND)lParam||GetDlgItem(hDlg, IDC_STATIC4) == (HWND)lParam||GetDlgItem(hDlg, IDC_STATIC5) == (HWND)lParam||GetDlgItem(hDlg, IDC_STATIC6) == (HWND)lParam||GetDlgItem(hDlg, IDC_STATIC7) == (HWND)lParam||GetDlgItem(hDlg, IDC_STATIC8) == (HWND)lParam)//这里的1是静态文本框的ID{SetTextColor((HDC)wParam, RGB(255,0,255));SetBkMode((HDC)wParam, TRANSPARENT);//return (LRESULT)CreateSolidBrush(GetSysColor(COLOR_BTNFACE));return (BOOL)((HBRUSH)GetStockObject(NULL_BRUSH));}if (GetDlgItem(hDlg, IDC_STATIC56) == (HWND)lParam||GetDlgItem(hDlg, IDC_STATIC78) == (HWND)lParam)//这里的1是静态文本框的ID{SetTextColor((HDC)wParam, RGB(0,0,255));SetBkMode((HDC)wParam, TRANSPARENT);//return (LRESULT)CreateSolidBrush(GetSysColor(COLOR_CAPTIONTEXT));return (BOOL)((HBRUSH)GetStockObject(NULL_BRUSH));}break;}case WM_ERASEBKGND:{return 0;}case WM_PAINT:{hdc=BeginPaint(hDlg,&ps);HDC hMemDC=CreateCompatibleDC(hdc);HBITMAP hMemBM=CreateCompatibleBitmap(hdc,500,500);SelectObject(hMemDC,hMemBM);static Image *gImag=NULL;Graphics g(hMemDC);if (gImag==NULL){gImag=Image::FromFile(_T("top9.bmp"));}{g.DrawImage(gImag,0,0,500,500);}BitBlt(hdc,0,0,500,500,hMemDC,0,0,SRCCOPY);DeleteDC(hMemDC);DeleteObject(hMemBM);EndPaint(hDlg,&ps);break;}case WM_MOUSEMOVE:{gn_T=255;// 设置分层属性SetWindowLong(hDlg, GWL_EXSTYLE, GetWindowLong(hDlg, GWL_EXSTYLE) | WS_EX_LAYERED);// 设置透明度 0 - completely transparent   255 - opaqueSetLayeredWindowAttributes(hDlg,0,255, LWA_ALPHA);break;}case WM_LBUTTONDOWN:{gn_T=255;// 设置分层属性SetWindowLong(hDlg, GWL_EXSTYLE, GetWindowLong(hDlg, GWL_EXSTYLE) | WS_EX_LAYERED);// 设置透明度 0 - completely transparent   255 - opaqueSetLayeredWindowAttributes(hDlg,0,255, LWA_ALPHA);break;}case WM_TIMER:{if (gn_T<=0){gn_T=255;KillTimer(hDlg,1);EndDialog(hDlg,LOWORD(wParam));break;}gn_T-=10;// 设置分层属性SetWindowLong(hDlg, GWL_EXSTYLE, GetWindowLong(hDlg, GWL_EXSTYLE) | WS_EX_LAYERED);// 设置透明度 0 - completely transparent   255 - opaqueSetLayeredWindowAttributes(hDlg,0,gn_T, LWA_ALPHA);break;}case WM_INITDIALOG:{SetTimer(hDlg,1,3000,NULL);设置按钮位图HINSTANCE hInst=(HINSTANCE)GetWindowLong(hDlg,GWL_HINSTANCE);HWND hBn1 = GetDlgItem(hDlg, IDC_BUTTON1);HBITMAP hbmp1=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP9));  SendMessage(hBn1, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM) hbmp1);HWND hBn2 = GetDlgItem(hDlg, IDC_BUTTON2);HBITMAP hbmp2=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP8));  SendMessage(hBn2, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM) hbmp2);HWND hBn3 = GetDlgItem(hDlg, IDC_BUTTON3);HBITMAP hbmp3=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP7));  SendMessage(hBn3, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM) hbmp3);SetFocus(GetDlgItem(hDlg,IDC_EDIT1));//设置对话框图标SendMessage(hDlg, WM_SETICON, ICON_BIG, (LPARAM)LoadIcon(hInst, MAKEINTRESOURCE(IDI_ICON2)));  HWND hButton2Wnd=GetDlgItem(hDlg,IDC_BUTTON2);EnableWindow(hButton2Wnd,FALSE);HWND hEdit3Wnd=GetDlgItem(hDlg,IDC_EDIT3);HWND hEdit4Wnd=GetDlgItem(hDlg,IDC_EDIT4);EnableWindow(hEdit3Wnd,FALSE);EnableWindow(hEdit4Wnd,FALSE);return (INT_PTR)TRUE;}case WM_COMMAND:{if (LOWORD(wParam)==IDCANCEL){KillTimer(hDlg,1);EndDialog(hDlg,NULL);return (INT_PTR)TRUE;}InManagerOnCommandMessage(wParam,hDlg);break;}default:break;}return (INT_PTR)FALSE;
}
//管理员对话框登录实现部分
void InManagerOnCommandMessage(WPARAM wParam,HWND hwnd)
{switch(LOWORD(wParam)){case IDC_BUTTON1://确认登录{PlaySound(TEXT("click.wav"),NULL,SND_ALIAS| SND_ASYNC);Login(hwnd,wParam);break;}case IDC_BUTTON2://确认注册{PlaySound(TEXT("click.wav"),NULL,SND_ALIAS| SND_ASYNC);Save(hwnd);break;}case IDC_BUTTON3://确认密钥{PlaySound(TEXT("click.wav"),NULL,SND_ALIAS| SND_ASYNC);TCHAR *Buffer=TEXT("zhengjinwei");TCHAR szText[256];GetDlgItemText(hwnd,IDC_EDIT5,szText,256);if (lstrcmpW(Buffer,szText)==0){MessageBox(NULL,TEXT("密码输入正确"),TEXT("yes"),MB_OK|MB_ICONINFORMATION);HWND hButton2Wnd=GetDlgItem(hwnd,IDC_BUTTON2);EnableWindow(hButton2Wnd,TRUE);HWND hEdit3Wnd=GetDlgItem(hwnd,IDC_EDIT3);HWND hEdit4Wnd=GetDlgItem(hwnd,IDC_EDIT4);EnableWindow(hEdit3Wnd,TRUE);EnableWindow(hEdit4Wnd,TRUE);}else{//MessageBox(NULL,TEXT("密码输入错误,请联系管理员!"),TEXT("错误"),MB_OK|MB_ICONINFORMATION);//MessageBox(NULL,TEXT("管理员QQ:2538698032"),TEXT("提示"),MB_OK|MB_ICONINFORMATION);TCHAR *szTextError=TEXT("密码输入错误,请联系管理员!管理员QQ:2538698032");SetDlgItemText(hwnd,IDC_SHOWERROR,szTextError);}break;}default:break;}
}//数据库登录异常处理
void ShowDBError(HWND hwnd,SQLSMALLINT type,SQLHANDLE sqlHandle)
{WCHAR pStatus[10], pMsg[101];SQLSMALLINT SQLmsglen;TCHAR error[200] = {0};SQLINTEGER SQLerr;long erg2 = SQLGetDiagRec(type, sqlHandle,1,(SQLWCHAR *)pStatus,&SQLerr,(SQLWCHAR*)pMsg,100,&SQLmsglen);wsprintf(error,L"%s (%d)\n",pMsg,(int)SQLerr);MessageBox(hwnd,error,TEXT("数据库执行错误"),MB_ICONERROR|MB_OK);
}
void ShowDBConnError(HWND hwnd,SQLHDBC hdbc)
{ShowDBError(hwnd,SQL_HANDLE_DBC,hdbc);
}
void ShowDBStmtError(HWND hwnd,SQLHSTMT hstmt)
{ShowDBError(hwnd,SQL_HANDLE_STMT,hstmt);
}
//注册用户数据库实现
void Save(HWND hwnd)
{SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER=127.0.0.1;UID=root;PWD=root;DATABASE=management;CharSet=gb2312;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);return;}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);SQLWCHAR username[256];SQLWCHAR password[256];GetDlgItemText(hwnd,IDC_EDIT3,username,sizeof(username)/sizeof(SQLWCHAR));GetDlgItemText(hwnd,IDC_EDIT4,password,sizeof(password)/sizeof(SQLWCHAR));SQLWCHAR sql[256];wsprintf(sql,TEXT("insert into MyTable(FUserName,FPassWord) values('%s','%s')"),username,password);if (*username==NULL ||*password==NULL){MessageBox(hwnd,TEXT("有户名或密码不为空!"),TEXT("注册"),MB_OK|MB_ICONERROR);return;}result = SQLPrepare(hstmt,(SQLWCHAR*)sql,SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);MessageBox(hwnd,TEXT("保存成功"),TEXT("注册"),MB_OK|MB_ICONINFORMATION);SetDlgItemText(hwnd,IDC_EDIT3,NULL);SetDlgItemText(hwnd,IDC_EDIT4,NULL);}
//管理员登录数据库实现
void Login(HWND hwnd,WPARAM wParam)
{SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);result = SQLPrepare(hstmt,(SQLWCHAR*)L"select FUserName,FPassWord from MyTable",SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;SQLWCHAR Inputusername[20];SQLWCHAR Inputpassword[20];GetDlgItemText(hwnd,IDC_EDIT1,Inputusername,30);GetDlgItemText(hwnd,IDC_EDIT2,Inputpassword,30);int found=1;while (SQLFetch(hstmt)!=SQL_NO_DATA_FOUND){SQLWCHAR username[20];SQLGetData(hstmt,1,SQL_C_WCHAR,username,30,&cbsatid);SQLWCHAR password[20];SQLGetData(hstmt,2,SQL_C_WCHAR,password,30,&cbsatid);if (lstrcmpW(Inputpassword,password)==0){if (lstrcmpW(Inputusername,username)==0){KillTimer(hwnd,1);lstrcpyW(g_LogUserName,username);//MessageBox(hwnd,username,TEXT("login"),MB_OK|MB_ICONINFORMATION);SetDlgItemText(hwnd,IDC_EDIT4,NULL);found=0;//lstrcpy(g_ManagerName,username);//在此处载入工具栏,更换背景,使菜单按钮失效/*LoadToolBar(hwnd);*/wsprintf(g_ManagerName,TEXT("当前登录管理员:%s"),username);//启用所有工具栏for (int ToolBarId=T_ID1;ToolBarId<=T_ID13;ToolBarId++){SendMessage(g_hToolBar, TB_SETSTATE, (WPARAM)ToolBarId, (LPARAM)MAKELONG(TBSTATE_ENABLED , 0));}//启用所有菜单项HWND hParent=GetParent(hwnd);ShowWindow(hParent,TRUE);HMENU hMenu= GetMenu(hParent);for (int MenuId=ID_32779;MenuId<=ID_32823;MenuId++){EnableMenuItem(hMenu,MenuId, MF_ENABLED);}EnableMenuItem(hMenu,IDM_ABOUT, MF_ENABLED);EnableMenuItem(hMenu,ID_USEHELP, MF_ENABLED);EnableMenuItem(hMenu,ID_ACCESSNET, MF_ENABLED);//发送给主窗口的消息,要求对状态栏进行重绘SendMessage(hParent,WM_TIMER,NULL,NULL);SendMessage(hParent,WM_USER+2,NULL,NULL);//发送给主窗口的消息,要求对pain消息进行响应bShowInMainWndOnPain=false;//更新区域SetTimer(hParent,1,1000,NULL);InvalidateRect(hParent,NULL,TRUE);EndDialog(hwnd,LOWORD(wParam));break;}}}if (1==found){MessageBox(hwnd,TEXT("登陆失败"),TEXT("login"),MB_OK|MB_ICONERROR);}SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);}//关于对话框实现部分
INT_PTR CALLBACK AboutProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{UNREFERENCED_PARAMETER(lParam);switch(message){case WM_CTLCOLORSTATIC://设置静态文本框字体颜色{if (GetDlgItem(hDlg, IDC_STATIC11) == (HWND)lParam){SetTextColor((HDC)wParam, RGB(255,0,0));SetBkMode((HDC)wParam, TRANSPARENT);return (LRESULT)CreateSolidBrush(GetSysColor(COLOR_BTNFACE));}break;}case WM_CTLCOLORBTN ://设置按钮的颜色if ((HWND)lParam == GetDlgItem(hDlg, IDOK)){HWND hbn = (HWND)lParam;HDC hdc = (HDC)wParam;RECT rc;TCHAR text[64];GetWindowText(hbn, text, 63);GetClientRect(hbn, &rc);SetTextColor(hdc, RGB(255, 255, 255));SetBkMode(hdc, TRANSPARENT);DrawText(hdc, text, _tcslen(text), &rc, DT_CENTER | DT_VCENTER | DT_SINGLELINE);return (INT_PTR)CreateSolidBrush(RGB(127,0,255));}break;case WM_INITDIALOG:{//设置静态文本框文本SetDlgItemText(hDlg,IDC_STATIC11,TEXT("本软件由郑金玮学习测试制作,如有bug,敬请见谅!"));//设置对话框图标HINSTANCE hInst=(HINSTANCE)GetWindowLong(hDlg,GWL_HINSTANCE);SendMessage(hDlg, WM_SETICON, ICON_BIG, (LPARAM)LoadIcon(hInst, MAKEINTRESOURCE(IDI_ICON4))); //设置按钮的属性为可自绘HWND hBn = GetDlgItem(hDlg, IDOK);SetWindowLong(hBn, GWL_STYLE, GetWindowLong(hBn, GWL_STYLE) | BS_OWNERDRAW);return INT_PTR(TRUE);}case WM_COMMAND:{if (LOWORD(wParam)==IDCANCEL ||LOWORD(wParam)==IDOK){EndDialog(hDlg,LOWORD(wParam));break;}break;}default: break;}return INT_PTR(FALSE);
}
//工具栏消息处理实现部分
INT_PTR CALLBACK YuDingProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);//预定对话框过程声明
void InMainWndOnCommandMessageForToolBar(HWND hwnd,WPARAM wParam)
{switch(LOWORD(wParam)){case T_ID1://点菜{//MessageBox(NULL,TEXT("点菜"),TEXT(""),MB_ICONINFORMATION|MB_OK);//弹出对话框进行处理HINSTANCE hInst=(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE);DialogBox(hInst,MAKEINTRESOURCE(IDD_DIALOG3),hwnd,PopDianCaiProc);break;}case T_ID2://改菜{HINSTANCE hInst=(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE);DialogBox(hInst,MAKEINTRESOURCE(IDD_DIALOG8),hwnd,GaiCaiProc);break;}case T_ID3://退菜{HINSTANCE hInst=(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE);DialogBox(hInst,MAKEINTRESOURCE(IDD_DIALOG9),hwnd,TuiCaiProc);break;}case T_ID4://开台,在数据库中插入服务员信息,开台时间信息,餐桌号信息,状态信息(是否用餐,默认值为等待中){//MessageBox(NULL,TEXT("开台"),TEXT(""),MB_ICONINFORMATION|MB_OK);开台响应时弹出对话框进行用户输入处理HINSTANCE hInst=(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE);DialogBox(hInst,MAKEINTRESOURCE(IDD_DIALOG2),hwnd,KaiTaiProc);break;}case T_ID5://预定{HINSTANCE hInst=(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE);DialogBox(hInst,MAKEINTRESOURCE(IDD_DIALOG10),hwnd,YuDingProc);break;}case T_ID6://收入管理{MessageBox(NULL,TEXT("收入管理"),TEXT(""),MB_ICONINFORMATION|MB_OK);break;}case T_ID7://登记支出{MessageBox(NULL,TEXT("登记支出"),TEXT(""),MB_ICONINFORMATION|MB_OK);break;}case T_ID8://顾客档案{HINSTANCE hInst=(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE);DialogBox(hInst,MAKEINTRESOURCE(IDD_DIALOG11),hwnd,CustomerInfoProc);break;}case T_ID9://送餐结算{MessageBox(NULL,TEXT("送餐结算"),TEXT(""),MB_ICONINFORMATION|MB_OK);break;}case T_ID10://收银结算{MessageBox(NULL,TEXT("收银结算"),TEXT(""),MB_ICONINFORMATION|MB_OK);break;}case T_ID11://顾客结算{MessageBox(NULL,TEXT("顾客结算"),TEXT(""),MB_ICONINFORMATION|MB_OK);break;}case T_ID12://固产管理{MessageBox(NULL,TEXT("固产管理"),TEXT(""),MB_ICONINFORMATION|MB_OK);break;}case T_ID13://系统锁定{//MessageBox(NULL,TEXT("系统锁定"),TEXT(""),MB_ICONINFORMATION|MB_OK);ShowWindow(hwnd,FALSE);HINSTANCE hInst=(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE);DialogBox(hInst,MAKEINTRESOURCE(IDD_DIALOGMANAGER),hwnd,ManagerProc);break;}default:break;}
}
void SureToSubmitOnYuDingProc(HWND hwnd);//提交处理INT_PTR CALLBACK YuDingProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)//预定对话框过程定义{UNREFERENCED_PARAMETER(lParam);static SYSTEMTIME mytime;switch(message){case WM_INITDIALOG:{//设置对话框图标HINSTANCE hInst=(HINSTANCE)GetWindowLong(hDlg,GWL_HINSTANCE);SendMessage(hDlg, WM_SETICON, ICON_BIG, (LPARAM)LoadIcon(hInst, MAKEINTRESOURCE(IDI_ICON21))); //设置按钮位图HBITMAP hbmp1=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP28));  SendMessage(GetDlgItem(hDlg,IDC_BUTTON1), BM_SETIMAGE, IMAGE_BITMAP, (LPARAM) hbmp1);HBITMAP hbmp2=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP29));  SendMessage(GetDlgItem(hDlg,IDC_BUTTON2), BM_SETIMAGE, IMAGE_BITMAP, (LPARAM) hbmp2);//初始化餐桌组合框WCHAR l_szTable[256];for (int i=1;i<=20;i++){ZeroMemory(l_szTable,sizeof(l_szTable)/sizeof(WCHAR));wsprintf(l_szTable,L"第%d桌",i);SendDlgItemMessage(hDlg,IDC_COMBO1,CB_ADDSTRING,NULL,(LPARAM)l_szTable);}//时间设置GetLocalTime(&mytime);TCHAR strtime[256];wsprintf(strtime,L"%04d—%02d—%02d %02d:%02d:%02d",mytime.wYear,mytime.wMonth,mytime.wDay,mytime.wHour,mytime.wMinute,mytime.wSecond);SetDlgItemText(hDlg,IDC_EDIT3,strtime);return (INT_PTR)TRUE;}case WM_COMMAND:{if (LOWORD(wParam)==IDCANCEL){EndDialog(hDlg,LOWORD(wParam));break;}switch(LOWORD(wParam)){case IDC_BUTTON1://提交{SureToSubmitOnYuDingProc(hDlg);break;}case IDC_BUTTON2://取消{EndDialog(hDlg,LOWORD(wParam));break;}}break;}}return (INT_PTR)FALSE;}void SureToSubmitOnYuDingProc(HWND hwnd)//提交处理{//获取信息WCHAR l_szCustomerName[256];GetDlgItemText(hwnd,IDC_EDIT1,l_szCustomerName,sizeof(l_szCustomerName)/sizeof(WCHAR));WCHAR l_szPhoneNumber[256];GetDlgItemText(hwnd,IDC_EDIT2,l_szPhoneNumber,sizeof(l_szPhoneNumber)/sizeof(WCHAR));WCHAR l_szLocalTime[256];GetDlgItemText(hwnd,IDC_EDIT3,l_szLocalTime,sizeof(l_szLocalTime)/sizeof(WCHAR));WCHAR l_szTable[256];GetDlgItemText(hwnd,IDC_COMBO1,l_szTable,sizeof(l_szTable)/sizeof(WCHAR));//判空if (*l_szCustomerName==NULL||*l_szPhoneNumber==NULL || *l_szTable==NULL){MessageBox(hwnd,L"信息必须都要填写!",L"",MB_OK|MB_ICONERROR);return;}//访问数据库先要测试用户选择的餐桌是否已经有人预定或者就坐SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);result = SQLPrepare(hstmt,(SQLWCHAR*)L"select ExtraTableNumber from diningtable",SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;WCHAR l_Table[256];BOOL lb_Test=TRUE;while (SQLFetch(hstmt)!=SQL_NO_DATA_FOUND){ZeroMemory(l_Table,sizeof(l_Table)/sizeof(WCHAR));SQLGetData(hstmt,1,SQL_C_WCHAR,l_Table,255,&cbsatid);if (lstrcmpW(l_szTable,l_Table)==0){lb_Test=FALSE;break;}}if (lb_Test){//满足条件,开始向diningtable表中插入数据SQLHENV henv1 = NULL;SQLHDBC hdbc1 = NULL;SQLHSTMT hstmt1 = NULL;SQLRETURN result1;SQLWCHAR ConnStrIn1[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut1[MAXBUFLEN];//分配环境句柄result1 = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv1);//设置管理环境属性result1 = SQLSetEnvAttr(henv1, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result1 = SQLAllocHandle(SQL_HANDLE_DBC, henv1, &hdbc1);//设置连接属性result1 = SQLSetConnectAttr(hdbc1, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result1 = SQLDriverConnect(hdbc1,NULL,ConnStrIn1,SQL_NTS,ConnStrOut1,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result1){ShowDBConnError(hwnd,hdbc1);}//初始化语句句柄result1 = SQLAllocHandle(SQL_HANDLE_STMT, hdbc1, &hstmt1);//根据用户选择的额外餐桌号,设置餐桌int ln_table;WCHAR szTableInfo[256];for (int i=1;i<=20;i++){ZeroMemory(szTableInfo,255);wsprintf(szTableInfo,L"第%d桌",i);if (lstrcmpW(l_szTable,szTableInfo)==0){ln_table=i;break;}}WCHAR sql[256];wsprintf(sql,L"insert into diningtable(TableNumber,ExtraTableNumber,YudingTime,PhoneNumber,CustomerName,State) values('%d','%s','%s','%s','%s','%s')",ln_table,l_szTable,l_szLocalTime,l_szPhoneNumber,l_szCustomerName,L"已预定");result1 = SQLPrepare(hstmt1,(SQLWCHAR*)sql,SQL_NTS);CHECKDBSTMTERROR(hwnd,result1,hstmt1);result1 =SQLExecute(hstmt1);CHECKDBSTMTERROR(hwnd,result1,hstmt1);MessageBox(hwnd,L"信息提交成功!",L"成功",MB_OK|MB_ICONINFORMATION);SQLINTEGER cbsatid1=SQL_NTS;SQLFreeStmt(hstmt1,SQL_CLOSE);SQLDisconnect(hdbc1);SQLFreeHandle(SQL_HANDLE_DBC,hdbc1);SQLFreeHandle(SQL_HANDLE_ENV,henv1);}if (lb_Test==FALSE){WCHAR l_szInfo[256];wsprintf(l_szInfo,L"对不起,第%s桌已经有人预定或者就坐\n请重新选择其他餐桌!",l_szTable);MessageBox(hwnd,l_szInfo,L"提示",MB_ICONERROR|MB_OK);}SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);}
BOOL CreateChildWindow(HWND hWnd)
{RECT rect;GetClientRect(hWnd,&rect);int cxClient,cyClient;cxClient=rect.right;cyClient=rect.bottom;HINSTANCE hInst=(HINSTANCE)GetWindowLong(hWnd,GWL_HINSTANCE);//创建上侧子窗口if(NULL == (g_hTopWnd = CreateWindow(szTopWndClass, NULL, WS_CHILDWINDOW|WS_BORDER|WS_VISIBLE,0, 62, cxClient, cyClient/7-3, hWnd, NULL, hInst, NULL))){MessageBox(hWnd, _T("创建上侧子窗口"), _T(""), MB_OK | MB_ICONERROR);return FALSE;}ShowWindow(g_hTopWnd, SW_SHOW);UpdateWindow(g_hTopWnd);//SetWindowText(g_hTopWnd,TEXT("付款信息"));//创建右侧子窗口if(NULL == (g_hRightWnd = CreateWindow(szRightWndClass, NULL, WS_CHILDWINDOW  |WS_CAPTION|WS_BORDER |WS_VISIBLE,cxClient/7+40, 59+cyClient/7, cxClient-cxClient/7-40, cyClient-59-cyClient/7-22-200, hWnd, NULL, hInst, NULL))){MessageBox(hWnd, _T("创建右侧子窗口"), _T(""), MB_OK | MB_ICONERROR);return FALSE;}ShowWindow(g_hRightWnd, SW_SHOW);UpdateWindow(g_hRightWnd);SetWindowText(g_hRightWnd,L"餐桌信息");//创建右侧子窗口2if(NULL == (g_hRightWnd2 = CreateWindow(szRightWnd2Class, NULL, WS_CHILDWINDOW|WS_BORDER |WS_VISIBLE,cxClient/7+40,498, cxClient-cxClient/7-40, 200, hWnd, NULL, hInst, NULL))){MessageBox(hWnd, _T("创建右侧子窗口22"), _T(""), MB_OK | MB_ICONERROR);return FALSE;}ShowWindow(g_hRightWnd2, SW_SHOW);UpdateWindow(g_hRightWnd2);//创建左侧子窗口if(NULL == (g_hLeftWnd = CreateWindow(szLeftWndClass, NULL, WS_CHILDWINDOW  | WS_CAPTION|WS_BORDER|WS_VISIBLE   ,0, 59+cyClient/7, cxClient/7+40, cyClient-59-cyClient/7-19, hWnd, NULL, hInst, NULL))){MessageBox(hWnd, _T("创建左侧子窗口"), _T(""), MB_OK | MB_ICONERROR);return FALSE;}SetWindowText(g_hLeftWnd,TEXT("餐厅/外卖管理"));ShowWindow(g_hLeftWnd, SW_SHOW);UpdateWindow(g_hLeftWnd);/*DoPropertySheet(g_hLeftWnd);*/return TRUE;
}
void AddItemForMenuOnCommand(HWND hwnd,WPARAM wParam);//增加菜肴函数声明
void AccessDataBaseForUpdateDiningTableInFo(HWND hwnd,WPARAM wParam);//更新餐厅信息列表框处理过程
void SetListViewInfoWhenDBCLIK(HWND hwnd,WPARAM wParam,WCHAR szBuff[]);//当用户双击餐厅管理的列表时设置右侧窗口中的各个项
void SetFuKuanInfoWhenDBCLK(HWND hwnd,WCHAR szBuff[]);//当用户双击餐饮管理列表时设置上侧的窗口内付款信息
LRESULT CALLBACK MyLeftWndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)//左侧窗口
{PAINTSTRUCT ps;HDC hdc;RECT rect;switch(message){case WM_MEASUREITEM://ODT_LISTBOX{if((UINT) wParam==11 ||(UINT) wParam==17){LPMEASUREITEMSTRUCT lpmis = (LPMEASUREITEMSTRUCT) lParam;lpmis->itemWidth=400;lpmis->itemHeight=22;}break;}case WM_DRAWITEM:{if((UINT) wParam==11||(UINT) wParam==17){HWND m_hListBox=GetDlgItem(hwnd,(UINT) wParam);LPDRAWITEMSTRUCT pDI=(LPDRAWITEMSTRUCT) lParam;HBRUSH brsh=CreateSolidBrush(RGB(255-80*pDI->itemID,255, 255-50*pDI->itemID));//yellowFillRect(pDI->hDC,&pDI->rcItem,brsh);DeleteObject(brsh);// text HFONT hFont=CreateFont(14,13,0,0,FW_HEAVY|FW_LIGHT,false,false,false,GB2312_CHARSET,OUT_CHARACTER_PRECIS,CLIP_CHARACTER_PRECIS,DEFAULT_QUALITY,FF_MODERN,L"楷体_GB2312");SelectObject(pDI->hDC,hFont);SetTextColor(pDI->hDC,RGB(0,0,0));SetBkMode(pDI->hDC,TRANSPARENT);TCHAR szText[260];SendMessage(m_hListBox,LB_GETTEXT,pDI->itemID,(LPARAM)szText);const DWORD dwStyle = DT_LEFT | DT_SINGLELINE | DT_VCENTER | DT_NOPREFIX | DT_END_ELLIPSIS;DrawText(pDI->hDC, szText, lstrlen(szText), &pDI->rcItem, dwStyle);}break;}case WM_NCLBUTTONDOWN:PostMessage(hwnd,WM_LBUTTONDOWN, wParam,HTCLIENT);//非客户区点击,转换为客户区点击使得移动窗口失效case WM_CTLCOLORSTATIC://设置静态文本框字体颜色{if (GetDlgItem(hwnd, 8) == (HWND)lParam){SetTextColor((HDC)wParam, RGB(0,0,255));SetBkMode((HDC)wParam, TRANSPARENT);//return (LRESULT)CreateSolidBrush(GetSysColor(COLOR_BTNFACE));return (BOOL)((HBRUSH)GetStockObject(NULL_BRUSH));}break;}case WM_LBUTTONDOWN:{//MessageBox(NULL,TEXT("left"),TEXT(""),MB_OK);break;}case WM_COMMAND:{switch(LOWORD(wParam)){case 17://响应列表框双击,餐厅管理的列表框事件响应{switch (HIWORD(wParam)){case LBN_DBLCLK:   //双击事件{ HWND hListBox=GetDlgItem(hwnd,17);TCHAR szBuffer[256];int nCurSel = SendMessage(hListBox, LB_GETCURSEL, 0, 0);SendMessage(hListBox, LB_GETTEXT, (WPARAM)nCurSel, (LPARAM)szBuffer);//MessageBox(hwnd,szBuffer,NULL,MB_OK); //向右侧的listview发送消息初始化listviewSetListViewInfoWhenDBCLIK(hwnd,wParam,szBuffer);//设置TOP窗口信息SetFuKuanInfoWhenDBCLK(hwnd,szBuffer);}default:return TRUE;}break;}case 11://响应列表框双击事件{switch (HIWORD(wParam)){case LBN_DBLCLK:   //双击事件{  HWND hListBox=GetDlgItem(hwnd,11);TCHAR szBuffer[256];int nCurSel = SendMessage(hListBox, LB_GETCURSEL, 0, 0);SendMessage(hListBox, LB_GETTEXT, (WPARAM)nCurSel, (LPARAM)szBuffer);//MessageBox(NULL, szBuffer, L"listbox item", MB_OK);GetAttributeAboutMenuWhenDBCLK(hwnd,wParam,lParam,szBuffer);}default:return TRUE;}break;}case 15://更新菜谱,在此处载入数据库中菜谱数据至列表框中{//MessageBox(NULL,TEXT("更新菜谱"),TEXT(""),MB_OK);PlaySound(TEXT("click.wav"),NULL,SND_ALIAS| SND_ASYNC);GetMenuFromDatabase(hwnd,wParam);break;}case 16://增加菜肴{//MessageBox(NULL,TEXT("增加菜肴"),TEXT(""),MB_OK);PlaySound(TEXT("click.wav"),NULL,SND_ALIAS| SND_ASYNC);HINSTANCE hInst=(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE);DialogBox(hInst,MAKEINTRESOURCE(IDD_ADDITEMTOMENU),hwnd,AddItemToMenu);break;}case 18://更新餐厅信息{//MessageBox(NULL,TEXT("更新餐厅信息"),TEXT(""),MB_OK);//在此处访问数据库向列表框中添加餐桌数据PlaySound(TEXT("click.wav"),NULL,SND_ALIAS| SND_ASYNC);AccessDataBaseForUpdateDiningTableInFo(hwnd,wParam);break;}default:break;}break;}case WM_CREATE:{HINSTANCE hInst=(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE);HWND hStatic2;hStatic2=CreateWindow(L"static",TEXT("菜谱列表"),WS_CHILD|WS_VISIBLE|SS_LEFT,0,170,100,20,hwnd,(HMENU)8,((LPCREATESTRUCT)lParam)->hInstance,NULL);ShowWindow(hStatic2,TRUE);UpdateWindow(hStatic2);//创建列表框//创建餐厅管理列表框HWND hListBoxtop=CreateWindow(L"listbox",TEXT(""),WS_VISIBLE |WS_CHILD|LBS_STANDARD|WS_HSCROLL|LBS_COMBOBOX | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS,0,30,228,140,hwnd,(HMENU)17,((LPCREATESTRUCT)lParam)->hInstance,NULL);ShowWindow(hListBoxtop,TRUE);UpdateWindow(hListBoxtop);//创建菜肴列表框HWND hListBox=CreateWindow(L"listbox",TEXT(""),WS_VISIBLE |WS_CHILD|LBS_STANDARD|WS_HSCROLL|LBS_COMBOBOX|LBS_OWNERDRAWFIXED | LBS_HASSTRINGS,0,240,228,272,hwnd,(HMENU)11,((LPCREATESTRUCT)lParam)->hInstance,NULL);ShowWindow(hListBox,TRUE);UpdateWindow(hListBox);//创建更新餐桌的按钮HWND hButton5=CreateWindow(L"BUTTON",TEXT("Refresh"),WS_VISIBLE |WS_CHILD |BS_USERBUTTON|BS_BITMAP,0,6,80,25,hwnd,(HMENU)18,((LPCREATESTRUCT)lParam)->hInstance,NULL);ShowWindow(hButton5,TRUE);UpdateWindow(hButton5);HBITMAP hbmp5=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP12));  SendMessage(hButton5, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM) hbmp5);//创建更新菜谱列表框的内容按钮HWND hButton3=CreateWindow(L"BUTTON",TEXT("Refresh"),WS_VISIBLE |WS_CHILD |BS_USERBUTTON|BS_BITMAP,130,200,80,25,hwnd,(HMENU)15,((LPCREATESTRUCT)lParam)->hInstance,NULL);ShowWindow(hButton3,TRUE);UpdateWindow(hButton3);HBITMAP hbmp3=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP10));  SendMessage(hButton3, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM) hbmp3);HWND hButton4=CreateWindow(L"BUTTON",TEXT("Add"),WS_VISIBLE |WS_CHILD |BS_USERBUTTON|BS_BITMAP,0,200,80,25,hwnd,(HMENU)16,((LPCREATESTRUCT)lParam)->hInstance,NULL);ShowWindow(hButton4,TRUE);UpdateWindow(hButton4);HBITMAP hbmp4=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP11));  SendMessage(hButton4, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM) hbmp4);break;}case WM_CLOSE:{DestroyWindow(hwnd);break;}case WM_PAINT:{GetClientRect(hwnd,&rect);hdc=BeginPaint(hwnd,&ps);HDC hMemDC=CreateCompatibleDC(hdc);HBITMAP hMemBM=CreateCompatibleBitmap(hdc,250,600);SelectObject(hMemDC,hMemBM);static Image *gImag=NULL;Graphics g(hMemDC);if (gImag==NULL){gImag=Image::FromFile(_T("right1.png"));}{g.DrawImage(gImag,0,0,250,600);}BitBlt(hdc,0,0,250,600,hMemDC,0,0,SRCCOPY);//HBRUSH hBrush=CreateSolidBrush(RGB(174,202,240));//FillRect(hdc,&rect,hBrush);DeleteDC(hMemDC);DeleteObject(hMemBM);EndPaint(hwnd,&ps);return 0;}case WM_ERASEBKGND:{return 0;}case WM_SIZE:{break;}default: return DefWindowProc(hwnd,message,wParam,lParam);}return 0;
}void SetFuKuanInfoWhenDBCLK(HWND hwnd,WCHAR szBuff[])//当用户双击餐饮管理列表时设置上侧的窗口内付款信息
{//先要获取top窗口的句柄和各个编辑框 的句柄HWND hParent=GetParent(hwnd);HWND hTop=::FindWindowEx(hParent,NULL,szTopWndClass,NULL);//获取合计编辑框句柄HWND hHeJi=GetDlgItem(hTop,3);//获取实收句柄HWND hShiShou=GetDlgItem(hTop,4);//获取顾客实付句柄HWND hCusShiFu=GetDlgItem(hTop,5);//根据传入的szbuff去和数据库中diancai表的TableNumber匹配,设置数据//访问数据库SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);WCHAR sql[256];wsprintf(sql,L"select a.AllPrice,b.CustomerName from diancai a,diningtable b where a.TableNumber='%s' and b.ExtraTableNumber='%s'",szBuff,szBuff);result = SQLPrepare(hstmt,(SQLWCHAR*)sql,SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;WCHAR l_szAllPrice[256];WCHAR l_szCustomerName[256];float lf_AllMoney=0.0;//设置全局变量,将下面获取的金额叠加进这个变量中while (SQLFetch(hstmt)!=SQL_NO_DATA_FOUND){SQLGetData(hstmt,1,SQL_C_WCHAR,l_szAllPrice,30,&cbsatid);//总金额SQLGetData(hstmt,2,SQL_C_WCHAR,l_szCustomerName,30,&cbsatid);//总金额//转为浮点数据float lf_money;lf_money=_wtof(l_szAllPrice);lf_AllMoney+=lf_money;}//将获取的总金额转为字符信息设置到编辑框中WCHAR l_szAllMoney[256];CString str;str.Format(L"%0.3f", lf_AllMoney);  wsprintf(l_szAllMoney, L"%s",str.GetBuffer(str.GetLength()));  SetDlgItemText(hTop,3,l_szAllMoney);SetDlgItemText(hTop,13,l_szCustomerName);//设置客户名//设置实收银两SetDlgItemText(hTop,4,l_szAllMoney);//释放资源SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);}
void AccessDianCaiForInitListViewProc(HWND hwnd,WCHAR szTable[]);// 初始化listview
void SetListViewInfoWhenDBCLIK(HWND hwnd,WPARAM wParam,WCHAR szBuff[])//当用户双击餐厅管理的列表时设置右侧窗口中的各个项
{//根据传入的szbuff去和数据库中diningtable表的ExtraTableNumber匹配,设置数据HWND hParent=GetParent(hwnd);//获取left窗口的父窗口,left窗口的父窗口也是right窗口的父窗口HWND hwndRightWnd= ::FindWindowEx(hParent,NULL,szRightWndClass,NULL);//获取right窗口的句柄HWND hListView=::FindWindowEx(hwndRightWnd,NULL,L"SysListView32",NULL);//获取listview的窗口句柄//获取餐桌(ID=20)、服务员(ID=21)、状态(ID=22)、开台时间(ID=23)静态文本框 的句柄HWND hTable=GetDlgItem(hwndRightWnd,20);//获取餐桌窗口句柄HWND hServer=GetDlgItem(hwndRightWnd,21);HWND hState=GetDlgItem(hwndRightWnd,22);HWND hKaiTaiTime=GetDlgItem(hwndRightWnd,23);//访问数据库SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);result = SQLPrepare(hstmt,(SQLWCHAR*)L"select ExtraTableNumber,ServerName,KaiTaiTime,State from diningtable",SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;WCHAR szEx[30];WCHAR szSer[30];WCHAR szKai[60];WCHAR szSta[30];SendMessage(hListView,LVM_DELETEALLITEMS,0,NULL);while (SQLFetch(hstmt)!=SQL_NO_DATA_FOUND){SQLGetData(hstmt,1,SQL_C_WCHAR, szEx,30,&cbsatid);//额外的餐桌信息SQLGetData(hstmt,2,SQL_C_WCHAR,szSer,30,&cbsatid);//服务员信息SQLGetData(hstmt,3,SQL_C_WCHAR,szKai,60,&cbsatid);//开台时间信息SQLGetData(hstmt,4,SQL_C_WCHAR,szSta,30,&cbsatid);//状态信息if (lstrcmpW(szBuff,szEx)==0){//匹配成功后进行数据设置//MessageBox(NULL,szBuff,NULL,MB_OK);SetWindowText(hServer,szSer);SetWindowText(hKaiTaiTime,szKai);SetWindowText(hState,szSta);SetWindowText(hTable,szEx);//在此判断diningtable表的State段是否为“正在用餐”或“等待上菜”,如果是的话,就向列表框中插入数据if (lstrcmpW(szSta,L"正在用餐")==0 || lstrcmpW(szSta,L"等待上菜")==0){//匹配成功,开始初始化listview//现在访问数据库中的diancai表,用餐桌号来匹配AccessDianCaiForInitListViewProc(hwnd,szEx);}break;}}//释放资源SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);
}
void AddItemOfListView(HWND hListView,WCHAR ListMenuNumber[],WCHAR ListMenuName[],WCHAR ListMenuCount[],WCHAR ListMenuPrice[],WCHAR ListMenuAllPrice[],WCHAR ListDianCaiTime[],WCHAR ListCustomerDemmand[]);//向listview增加项
void AccessDianCaiForInitListViewProc(HWND hwnd,WCHAR szTable[])// 初始化listview
{//访问数据库中的diancai表获取信息SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);result = SQLPrepare(hstmt,(SQLWCHAR*)L"select TableNumber,MenuNumber,MenuName,MenuCount,MenuPrice,AllPrice,DianCaiTime,CustomerDemmand from diancai",SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;WCHAR l_szTableNumber[256];SQLBIGINT l_nMenuNumber;WCHAR l_szMenuName[256];SQLBIGINT l_nMenuCount;WCHAR l_szMenuPrice[256];WCHAR l_szAllPrice[256];WCHAR l_szDianCaiTime[256];WCHAR l_szCustomerDemmand[256];//先要获取listview窗口句柄HWND hParent=GetParent(hwnd);//获取left窗口的父窗口,left窗口的父窗口也是right窗口的父窗口HWND hwndRightWnd= ::FindWindowEx(hParent,NULL,szRightWndClass,NULL);//获取right窗口的句柄HWND hListView=::FindWindowEx(hwndRightWnd,NULL,L"SysListView32",NULL);//获取listview的窗口句柄//SendMessage(hListView,LVM_DELETEALLITEMS,0,NULL);while (SQLFetch(hstmt)!=SQL_NO_DATA_FOUND){SQLGetData(hstmt,1,SQL_C_WCHAR,l_szTableNumber,30,&cbsatid);SQLGetData(hstmt,2,SQL_C_UBIGINT,&l_nMenuNumber,30,&cbsatid);SQLGetData(hstmt,3,SQL_C_WCHAR,l_szMenuName,30,&cbsatid);SQLGetData(hstmt,4,SQL_C_UBIGINT,&l_nMenuCount,30,&cbsatid);SQLGetData(hstmt,5,SQL_C_WCHAR,l_szMenuPrice,30,&cbsatid);SQLGetData(hstmt,6,SQL_C_WCHAR,l_szAllPrice,30,&cbsatid);SQLGetData(hstmt,7,SQL_C_WCHAR,l_szDianCaiTime,60,&cbsatid);SQLGetData(hstmt,8,SQL_C_WCHAR,l_szCustomerDemmand,256,&cbsatid);if (lstrcmpW(l_szTableNumber,szTable)==0)//餐桌匹配成功,开始设置listview信息{//一切搞定,开始设置//下面要向自定义函数中传入参数//row=ln_Row,先将l_nMenuNumber转为字符串WCHAR szMenuNumber[256];wsprintf(szMenuNumber,L"%d",l_nMenuNumber);//再将l_nMenuCount转为字符串WCHAR szMenuCount[256];wsprintf(szMenuCount,L"%d",l_nMenuCount);//开始插入AddItemOfListView(hListView,szMenuNumber,l_szMenuName,szMenuCount,l_szMenuPrice,l_szAllPrice,l_szDianCaiTime,l_szCustomerDemmand);}}SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);}
void AddItemOfListView(HWND hListView,WCHAR ListMenuNumber[],WCHAR ListMenuName[],WCHAR ListMenuCount[],WCHAR ListMenuPrice[],WCHAR ListMenuAllPrice[],WCHAR ListDianCaiTime[],WCHAR ListCustomerDemmand[])//向listview增加项
{WCHAR buffer[30];LV_ITEM lvi;lvi.mask = LVIF_TEXT;lvi.iItem = 0;lvi.iSubItem = 0;wsprintf(buffer,ListMenuNumber);lvi.pszText =buffer;SendMessage(hListView,LVM_INSERTITEM,0,(LPARAM)&lvi);/lvi.iSubItem++;ZeroMemory(buffer,sizeof(buffer)/sizeof(TCHAR));wsprintf(buffer,ListMenuName);lvi.pszText =buffer;SendMessage(hListView,LVM_SETITEM,0,(LPARAM)&lvi);///lvi.iSubItem++;ZeroMemory(buffer,sizeof(buffer)/sizeof(TCHAR));wsprintf(buffer,ListMenuCount);lvi.pszText =buffer;SendMessage(hListView,LVM_SETITEM,0,(LPARAM)&lvi);///lvi.iSubItem++;ZeroMemory(buffer,sizeof(buffer)/sizeof(TCHAR));wsprintf(buffer,ListMenuPrice);lvi.pszText =buffer;SendMessage(hListView,LVM_SETITEM,0,(LPARAM)&lvi);//lvi.iSubItem++;ZeroMemory(buffer,sizeof(buffer)/sizeof(TCHAR));wsprintf(buffer,ListMenuAllPrice);lvi.pszText =buffer;SendMessage(hListView,LVM_SETITEM,0,(LPARAM)&lvi);//lvi.iSubItem++;ZeroMemory(buffer,sizeof(buffer)/sizeof(TCHAR));wsprintf(buffer,ListDianCaiTime);lvi.pszText =buffer;SendMessage(hListView,LVM_SETITEM,0,(LPARAM)&lvi);//lvi.iSubItem++;ZeroMemory(buffer,sizeof(buffer)/sizeof(TCHAR));wsprintf(buffer,ListCustomerDemmand);lvi.pszText =buffer;SendMessage(hListView,LVM_SETITEM,0,(LPARAM)&lvi);}
void AccessDataBaseForUpdateDiningTableInFo(HWND hwnd,WPARAM wParam)//更新餐厅信息列表框处理过程
{//访问数据库SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);result = SQLPrepare(hstmt,(SQLWCHAR*)L"select ExtraTableNumber from diningtable",SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;WCHAR sztablenum[256];HWND hListBox=GetDlgItem(hwnd,17);SendMessage(hListBox,LB_RESETCONTENT,0,0);//更新之前清空列表while (SQLFetch(hstmt)!=SQL_NO_DATA_FOUND){SQLGetData(hstmt,1,SQL_C_WCHAR,sztablenum,30,&cbsatid);SendDlgItemMessage(hwnd,17,LB_ADDSTRING,0,(LPARAM)sztablenum); }SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);}BOOL InitListViewImageLists(HWND hWndListView)
{ HICON hiconItem;     // Icon for list-view items.HIMAGELIST hLarge;   // Image list for icon view.HIMAGELIST hSmall;   // Image list for other views.// Create the full-sized icon image lists. hLarge = ImageList_Create(GetSystemMetrics(SM_CXICON), GetSystemMetrics(SM_CYICON), ILC_MASK, 1, 1); hSmall = ImageList_Create(GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), ILC_MASK, 1, 1); // Add an icon to each image list.  HWND hParent=GetParent(hWndListView);HINSTANCE g_hInst=(HINSTANCE)GetWindowLong(hParent,GWL_HINSTANCE);hiconItem = LoadIcon(g_hInst, MAKEINTRESOURCE(IDI_ICON12));ImageList_AddIcon(hLarge, hiconItem);ImageList_AddIcon(hSmall, hiconItem);DestroyIcon(hiconItem);ListView_SetImageList(hWndListView, hLarge, LVSIL_NORMAL); ListView_SetImageList(hWndListView, hSmall, LVSIL_SMALL); return TRUE;
}#define  IDC_TREEVIEW 2001HTREEITEM InsertTreeviewItem(const HWND hTreeview, const LPTSTR pszText, HTREEITEM htiParent)
{TVITEM tvi = {0};tvi.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE;tvi.pszText = pszText;tvi.cchTextMax = wcslen(pszText);tvi.iImage = 0;TVINSERTSTRUCT tvis = {0};tvi.iSelectedImage = 1;tvis.item = tvi; tvis.hInsertAfter = 0;tvis.hParent = htiParent;return (HTREEITEM)SendMessage(hTreeview, TVM_INSERTITEM, 0, (LPARAM)&tvis);
}TV_ITEM tvi;
HTREEITEM Selected;
HTREEITEM Root;
bool flagSelected=false;
HWND hListView;UINT GetCheckRadioButton(HWND hwnd,int firstID,int lastID)
{int id;for (id=firstID;id<=lastID;id++){UINT idChecked;idChecked=IsDlgButtonChecked(hwnd,id);if(idChecked==BST_CHECKED){return id;}}return -1;
}
void AddItemOfListViewOnMyRightWnd2Proc(HWND hListView,WCHAR szCategory[]);//向listview增加项
LRESULT CALLBACK MyRightWnd2Proc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)//右侧窗口
{HDC hdc;PAINTSTRUCT ps;UINT id;switch(message){/*case WM_DRAWITEM:{LPDRAWITEMSTRUCT pDIS = (LPDRAWITEMSTRUCT)lParam;if (pDIS->hwndItem == GetDlgItem(hwnd,1002)){SetTextColor(pDIS->hDC, RGB(0, 0, 255));SetBkColor(pDIS->hDC,TRANSPARENT);WCHAR staticText[99];int len = SendMessage( GetDlgItem(hwnd,1002), WM_GETTEXT, ARRAYSIZE(staticText), (LPARAM)staticText);TextOut(pDIS->hDC, pDIS->rcItem.left, pDIS->rcItem.top, staticText, len);}return TRUE;}*//*case WM_LBUTTONDOWN: {ReleaseCapture(); SendMessage(hwnd,WM_NCLBUTTONDOWN,HTCAPTION,0); break;}*/case WM_NOTIFY:{case IDC_TREEVIEW:{if(((LPNMHDR)lParam)->code == NM_DBLCLK) // if code == NM_CLICK - Single click on an item{WCHAR Text[255]=L"";memset(&tvi,0,sizeof(tvi));Selected=(HTREEITEM)SendDlgItemMessage(hwnd,IDC_TREEVIEW,TVM_GETNEXTITEM,TVGN_CARET,(LPARAM)Selected);if(Selected==NULL){MessageBox(hwnd,L"No Items in TreeView",L"Error",MB_OK|MB_ICONINFORMATION);break;}TreeView_EnsureVisible(hwnd,Selected);SendDlgItemMessage(hwnd,IDC_TREEVIEW,TVM_SELECTITEM,TVGN_CARET,(LPARAM)Selected);flagSelected=true;tvi.mask=TVIF_TEXT;tvi.pszText=Text;tvi.cchTextMax=256;tvi.hItem=Selected;if(SendDlgItemMessage(hwnd,IDC_TREEVIEW,TVM_GETITEM,TVGN_CARET,(LPARAM)&tvi)){if(tvi.cChildren==0 && lstrcmpW(tvi.pszText,L"菜单大类浏览")==0){SendMessage(hwnd,WM_COMMAND,(WPARAM)1,NULL);flagSelected=false;break;}}if(SendDlgItemMessage(hwnd,IDC_TREEVIEW,TVM_GETITEM,TVGN_CARET,(LPARAM)&tvi)){if(tvi.cChildren==0 && lstrcmpW(tvi.pszText,L"菜单小类浏览")==0){SendMessage(hwnd,WM_COMMAND,(WPARAM)2,NULL);flagSelected=false;break;}}if(SendDlgItemMessage(hwnd,IDC_TREEVIEW,TVM_GETITEM,TVGN_CARET,(LPARAM)&tvi)){if(tvi.cChildren==0 && lstrcmpW(tvi.pszText,L"特价菜浏览")==0){SendMessage(hwnd,WM_COMMAND,(WPARAM)3,NULL);flagSelected=false;break;}}if(SendDlgItemMessage(hwnd,IDC_TREEVIEW,TVM_GETITEM,TVGN_CARET,(LPARAM)&tvi)){if(tvi.cChildren==0 && lstrcmpW(tvi.pszText,L"今日美味浏览")==0){SendMessage(hwnd,WM_COMMAND,(WPARAM)4,NULL);flagSelected=false;break;}}}break;}break;}case WM_COMMAND:{id=LOWORD(wParam);switch(LOWORD(wParam)){case 100:case 101:{CheckRadioButton(hwnd,100,101,id);break;}case 1002://find{UINT idWay=GetCheckRadioButton(hwnd,100,101);if (idWay==-1){MessageBox(hwnd,TEXT("请选择查找方式!"),TEXT("财神餐饮"),MB_OK|MB_ICONINFORMATION);break;}TCHAR chBuffer[256];GetDlgItemText(hwnd,idWay,chBuffer,sizeof(chBuffer)/sizeof(TCHAR));MessageBox(hwnd,chBuffer,TEXT("财神餐饮"),MB_OK);break;}case 1://菜单大类{//MessageBox(hwnd,L"菜单大类浏览",L"Example",MB_OK|MB_ICONINFORMATION);AddItemOfListViewOnMyRightWnd2Proc(hListView,L"大类");break;}case 2://菜单小类{AddItemOfListViewOnMyRightWnd2Proc(hListView,L"小类");break;}case 3://特价菜{AddItemOfListViewOnMyRightWnd2Proc(hListView,L"特价菜");break;}case 4://今日美味{AddItemOfListViewOnMyRightWnd2Proc(hListView,L"今日美味");break;}}break;}case WM_NCLBUTTONDOWN:{PostMessage(hwnd,WM_LBUTTONDOWN, wParam,HTCLIENT);//非客户区点击,转换为客户区点击使得移动窗口失效return 0;}case WM_CREATE:{HINSTANCE hInst=(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE);//创建radioCreateWindow(L"Button",L"菜肴编号",WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON | WS_GROUP|WS_BORDER,  60,10,80,20,hwnd,(HMENU)100,((LPCREATESTRUCT)lParam)->hInstance,NULL);  CreateWindow(L"Button",L"拼音字母",WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON|WS_BORDER ,  180,10,80,20,hwnd,(HMENU)101,((LPCREATESTRUCT)lParam)->hInstance,NULL);//创建静态框CreateWindow(L"button",TEXT("查找"),WS_CHILD|WS_VISIBLE|WS_BORDER|BS_DEFPUSHBUTTON,440,10,80,30,hwnd,(HMENU)1002,((LPCREATESTRUCT)lParam)->hInstance,NULL);//创建编辑框CreateWindow(TEXT("edit"),NULL,WS_CHILD|WS_VISIBLE|ES_LEFT|WS_BORDER,300,10,100,20,hwnd,(HMENU)104,((LPCREATESTRUCT)lParam)->hInstance,NULL);//创建tree控件{INITCOMMONCONTROLSEX iccx;iccx.dwSize = sizeof(INITCOMMONCONTROLSEX);iccx.dwICC = ICC_TREEVIEW_CLASSES;if (!InitCommonControlsEx(&iccx))return FALSE;// Create the Treeview controlRECT rc;GetClientRect(hwnd, &rc);HWND hTreeview = CreateWindowEx(0, WC_TREEVIEW, 0, TVS_HASLINES | TVS_LINESATROOT | TVS_HASBUTTONS | WS_CHILD | WS_VISIBLE|WS_BORDER, rc.left, 40, rc.right/8, rc.bottom-40, hwnd, (HMENU)IDC_TREEVIEW, hInst, 0);SetWindowLongPtr(hwnd, GWLP_USERDATA, (LONG_PTR)hTreeview);// Create an image listHIMAGELIST hImages = ImageList_Create(GetSystemMetrics(SM_CXSMICON),GetSystemMetrics(SM_CYSMICON), ILC_COLOR32 | ILC_MASK, 1, 1);// Get an instance handle for a source of icon imagesHINSTANCE hLib = LoadLibrary(L"shell32.dll");if (hLib){for (int i = 4; i < 6; i++){// Because the icons are loaded from system resources (i.e. they are // shared), it is not necessary to free resources with 'DestroyIcon'.HICON hIcon = (HICON)LoadImage(hLib, MAKEINTRESOURCE(i), IMAGE_ICON,0, 0, LR_SHARED);ImageList_AddIcon(hImages, hIcon); }FreeLibrary(hLib);hLib = NULL;}// Attach image lists to tree view common controlTreeView_SetImageList(hTreeview, hImages, TVSIL_NORMAL);// Insert the first item at root levelHTREEITEM hPrev1 = InsertTreeviewItem(hTreeview, L"菜单大类", TVI_ROOT);// Sub item of first itemhPrev1 = InsertTreeviewItem(hTreeview, L"菜单大类浏览", hPrev1);HTREEITEM hPrev2 = InsertTreeviewItem(hTreeview, L"菜单小类", TVI_ROOT);hPrev1 = InsertTreeviewItem(hTreeview, L"菜单小类浏览", hPrev2);// Insert the second item at root levelHTREEITEM hPrev3 = InsertTreeviewItem(hTreeview, L"特价菜", TVI_ROOT);hPrev1 = InsertTreeviewItem(hTreeview, L"特价菜浏览", hPrev3);HTREEITEM hPrev4 = InsertTreeviewItem(hTreeview, L"今日美味", TVI_ROOT);hPrev1 = InsertTreeviewItem(hTreeview, L"今日美味浏览", hPrev4);}//创建listview控件{//创建listviewRECT rect;GetClientRect(hwnd,&rect);HINSTANCE hInst=(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE);hListView = CreateWindowEx(LVS_EX_FULLROWSELECT,_T("SysListView32"),NULL,LVS_REPORT |LVS_ICON |WS_CHILD |WS_VISIBLE|WS_HSCROLL|WS_VSCROLL|WS_BORDER,rect.right/8,40,rect.right-rect.right/8,rect.bottom-40,hwnd,(HMENU)12,hInst,NULL);SendMessage(hListView,LVM_SETTEXTCOLOR,0,RGB(0,0,0));//设置文本颜色SendMessage(hListView,LVM_SETTEXTBKCOLOR ,0,RGB(96,210,247));//设置文本颜色SetFocus(hListView);ListView_SetItemState(hListView,0,LVIS_SELECTED,LVIS_SELECTED);     //参数0使第一行处于选择中状态,若为-1则表示所有的行ListView_SetExtendedListViewStyle(hListView,LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_AUTOSIZECOLUMNS);              //设置整行选择风格//插入列LV_COLUMN lvc;lvc.mask = LVCF_TEXT | LVCF_WIDTH | LVCF_FMT|LVCFMT_CENTER;lvc.fmt=LVCFMT_CENTER;lvc.pszText =L"菜肴编号";lvc.cx = 100;SendMessage(hListView,LVM_INSERTCOLUMN,0,(LPARAM)&lvc);lvc.pszText = L"菜肴名称";lvc.cx = 140;SendMessage(hListView,LVM_INSERTCOLUMN,1,(LPARAM)&lvc);lvc.pszText = L"大份价格";   SendMessage(hListView,LVM_INSERTCOLUMN,2,(LPARAM)&lvc);lvc.pszText = L"小份价格";   SendMessage(hListView,LVM_INSERTCOLUMN,3,(LPARAM)&lvc);lvc.pszText = L"折扣";SendMessage(hListView,LVM_INSERTCOLUMN,4,(LPARAM)&lvc);lvc.pszText = L"单位";SendMessage(hListView,LVM_INSERTCOLUMN,5,(LPARAM)&lvc);lvc.pszText = L"特点";SendMessage(hListView,LVM_INSERTCOLUMN,6,(LPARAM)&lvc);InitListViewImageLists(hListView);//在每行前插入图标}break;}case WM_CLOSE:{PostQuitMessage(0);break;}case WM_SIZE:{break;}case WM_PAINT:{RECT rect;GetClientRect(hwnd,&rect);rect.bottom=50;hdc=BeginPaint(hwnd,&ps);HBRUSH hBrush=CreateSolidBrush(RGB(174,202,240));FillRect(hdc,&rect,hBrush);EndPaint(hwnd,&ps);return 0;}case WM_ERASEBKGND:{return 0;}default: return DefWindowProc(hwnd,message,wParam,lParam);}return 0;
}void AddItemOfListViewOnMyRightWnd2Proc(HWND hListView,WCHAR szCategory[])//向listview增加项
{HWND hwnd=GetParent(hListView);int ListMenuNumber;WCHAR ListMenuName[256];WCHAR ListMenuPriceBig[256];WCHAR ListMenuPriceSmall[256];WCHAR ListMenuDisCount[256];WCHAR ListMenuUnits[256];WCHAR ListMenuFeture[256];//访问数据库:表为:menu,用szCategory进行匹配{SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);WCHAR sql[256];wsprintf(sql,L"select ID,Name,PriceBig,PriceSmall,Discount,Units,Feature from menu where Category='%s'",szCategory);result = SQLPrepare(hstmt,(SQLWCHAR*)sql,SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;SendMessage(hListView,LVM_DELETEALLITEMS,0,0);//更新之前清空列表while (SQLFetch(hstmt)!=SQL_NO_DATA_FOUND){ ZeroMemory(ListMenuName,sizeof(ListMenuName)/sizeof(WCHAR));ZeroMemory(ListMenuPriceBig,sizeof(ListMenuPriceBig)/sizeof(WCHAR));ZeroMemory(ListMenuPriceSmall,sizeof(ListMenuPriceSmall)/sizeof(WCHAR));ZeroMemory(ListMenuDisCount,sizeof(ListMenuDisCount)/sizeof(WCHAR));ZeroMemory(ListMenuUnits,sizeof(ListMenuUnits)/sizeof(WCHAR));ZeroMemory(ListMenuFeture,sizeof(ListMenuFeture)/sizeof(WCHAR));SQLGetData(hstmt,1,SQL_C_ULONG,&ListMenuNumber,30,&cbsatid);SQLGetData(hstmt,2,SQL_C_WCHAR,ListMenuName,30,&cbsatid);SQLGetData(hstmt,3,SQL_C_WCHAR,ListMenuPriceBig,30,&cbsatid);SQLGetData(hstmt,4,SQL_C_WCHAR,ListMenuPriceSmall,30,&cbsatid);SQLGetData(hstmt,5,SQL_C_WCHAR,ListMenuDisCount,30,&cbsatid);SQLGetData(hstmt,6,SQL_C_WCHAR,ListMenuUnits,30,&cbsatid);SQLGetData(hstmt,7,SQL_C_WCHAR,ListMenuFeture,30,&cbsatid);{//转ID为字符串WCHAR l_szNumber[256];wsprintf(l_szNumber,L"%d",ListMenuNumber);WCHAR buffer[30];LV_ITEM lvi;lvi.mask = LVIF_TEXT;lvi.iItem = 0;lvi.iSubItem = 0;wsprintf(buffer,l_szNumber);lvi.pszText =buffer;SendMessage(hListView,LVM_INSERTITEM,0,(LPARAM)&lvi);/lvi.iSubItem++;ZeroMemory(buffer,sizeof(buffer)/sizeof(TCHAR));wsprintf(buffer,ListMenuName);lvi.pszText =buffer;SendMessage(hListView,LVM_SETITEM,0,(LPARAM)&lvi);//////lvi.iSubItem++;ZeroMemory(buffer,sizeof(buffer)/sizeof(TCHAR));wsprintf(buffer,ListMenuPriceBig);lvi.pszText =buffer;SendMessage(hListView,LVM_SETITEM,0,(LPARAM)&lvi);lvi.iSubItem++;ZeroMemory(buffer,sizeof(buffer)/sizeof(TCHAR));wsprintf(buffer,ListMenuPriceSmall);lvi.pszText =buffer;SendMessage(hListView,LVM_SETITEM,0,(LPARAM)&lvi);//lvi.iSubItem++;ZeroMemory(buffer,sizeof(buffer)/sizeof(TCHAR));wsprintf(buffer,ListMenuDisCount);lvi.pszText =buffer;SendMessage(hListView,LVM_SETITEM,0,(LPARAM)&lvi);//lvi.iSubItem++;ZeroMemory(buffer,sizeof(buffer)/sizeof(TCHAR));wsprintf(buffer,ListMenuUnits);lvi.pszText =buffer;SendMessage(hListView,LVM_SETITEM,0,(LPARAM)&lvi);//lvi.iSubItem++;ZeroMemory(buffer,sizeof(buffer)/sizeof(TCHAR));wsprintf(buffer,ListMenuFeture);lvi.pszText =buffer;SendMessage(hListView,LVM_SETITEM,0,(LPARAM)&lvi);}}     SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);}}LRESULT CALLBACK MyRightWndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)//右侧窗口
{HDC hdc;PAINTSTRUCT ps;switch(message){case WM_NCLBUTTONDOWN:PostMessage(hwnd,WM_LBUTTONDOWN, wParam,HTCLIENT);//非客户区点击,转换为客户区点击使得移动窗口失效case WM_LBUTTONDOWN:{//MessageBox(NULL,TEXT("right"),TEXT(""),MB_OK);break;}case WM_ERASEBKGND:{return 0;}case WM_PAINT:{RECT rectclient;GetClientRect(hwnd,&rectclient);RECT rect;rect.left=0;rect.right=rectclient.right;rect.top=0;rect.bottom=60;hdc=BeginPaint(hwnd,&ps);HDC hMemDC=CreateCompatibleDC(hdc);HBITMAP hMemBM=CreateCompatibleBitmap(hdc,1200,60);SelectObject(hMemDC,hMemBM);static Image *gImag=NULL;Graphics g(hMemDC);if (gImag==NULL){gImag=Image::FromFile(_T("right1.png"));}{g.DrawImage(gImag,0,0,1200,60);}BitBlt(hdc,0,0,1200,60,hMemDC,0,0,SRCCOPY);/*HBRUSH hBrush=CreateSolidBrush(RGB(174,202,240));FillRect(hdc,&rect,hBrush);*//*TextOut(hdc,0,0,TEXT("餐桌信息"),4);*/TCHAR *szName1=TEXT("餐桌:");SetBkColor(hdc,RGB(174,202,240));SetTextColor(hdc,RGB(255,255,255));SetBkMode(hdc,TRANSPARENT);TextOut(hdc,60,20,szName1,sizeof(szName1)/sizeof(TCHAR));TCHAR *szName2=TEXT("服务员:");TextOut(hdc,250,20,szName2,3);TCHAR *szName3=TEXT("状态:");TextOut(hdc,450,20,szName3,2);TCHAR *szName4=TEXT("开台时间:");TextOut(hdc,630,20,szName4,4);DeleteDC(hMemDC);DeleteObject(hMemBM);EndPaint(hwnd,&ps);break;}case WM_CTLCOLORSTATIC://设置静态文本框字体颜色{if (GetDlgItem(hwnd, 20) == (HWND)lParam ||GetDlgItem(hwnd, 21) == (HWND)lParam ||GetDlgItem(hwnd, 22) == (HWND)lParam ||GetDlgItem(hwnd, 23) == (HWND)lParam )//这里的1是静态文本框的ID{SetTextColor((HDC)wParam, RGB(0,0,255));//SetBkMode((HDC)wParam, TRANSPARENT);return (LRESULT)CreateSolidBrush(GetSysColor(COLOR_BTNFACE));//return (BOOL)((HBRUSH)GetStockObject(NULL_BRUSH));}break;}case WM_COMMAND:{break;}case WM_CREATE:{//创建listviewRECT rect;GetClientRect(hwnd,&rect);HINSTANCE hInst=(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE);HWND hListView = CreateWindowEx(LVS_EX_FULLROWSELECT,_T("SysListView32"),NULL,LVS_REPORT |LVS_ICON |WS_CHILD |WS_VISIBLE|WS_HSCROLL|WS_VSCROLL|WS_BORDER,0,60,rect.right,rect.bottom-60,hwnd,(HMENU)12,hInst,NULL);SendMessage(hListView,LVM_SETTEXTCOLOR,0,RGB(0,0,0));//设置文本颜色SendMessage(hListView,LVM_SETTEXTBKCOLOR ,0,RGB(96,210,247));//设置文本颜色SetFocus(hListView);ListView_SetItemState(hListView,0,LVIS_SELECTED,LVIS_SELECTED);     //参数0使第一行处于选择中状态,若为-1则表示所有的行ListView_SetExtendedListViewStyle(hListView,LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_AUTOSIZECOLUMNS);              //设置整行选择风格//插入列LV_COLUMN lvc;lvc.mask = LVCF_TEXT | LVCF_WIDTH | LVCF_FMT|LVCFMT_CENTER;lvc.fmt=LVCFMT_CENTER;lvc.pszText =L"菜肴编号";lvc.cx = 150;SendMessage(hListView,LVM_INSERTCOLUMN,0,(LPARAM)&lvc);lvc.pszText = L"菜肴名称";lvc.cx = 170;SendMessage(hListView,LVM_INSERTCOLUMN,1,(LPARAM)&lvc);lvc.pszText = L"数量";   SendMessage(hListView,LVM_INSERTCOLUMN,2,(LPARAM)&lvc);lvc.pszText = L"价格";SendMessage(hListView,LVM_INSERTCOLUMN,3,(LPARAM)&lvc);lvc.pszText = L"合计金额";SendMessage(hListView,LVM_INSERTCOLUMN,4,(LPARAM)&lvc);lvc.pszText = L"点菜时间";SendMessage(hListView,LVM_INSERTCOLUMN,5,(LPARAM)&lvc);lvc.pszText = L"顾客要求";SendMessage(hListView,LVM_INSERTCOLUMN,6,(LPARAM)&lvc);InitListViewImageLists(hListView);//在每行前插入图标//在信息中创建静态文本框HWND hStatic1;hStatic1=CreateWindow(L"static",NULL,WS_CHILD|WS_VISIBLE|SS_LEFT|WS_BORDER,120,20,100,20,hwnd,(HMENU)20,((LPCREATESTRUCT)lParam)->hInstance,NULL);ShowWindow(hStatic1,TRUE);UpdateWindow(hStatic1);HWND hStatic2;hStatic2=CreateWindow(L"static",NULL,WS_CHILD|WS_VISIBLE|SS_LEFT|WS_BORDER,320,20,100,20,hwnd,(HMENU)21,((LPCREATESTRUCT)lParam)->hInstance,NULL);ShowWindow(hStatic2,TRUE);UpdateWindow(hStatic2);HWND hStatic3;hStatic3=CreateWindow(L"static",NULL,WS_CHILD|WS_VISIBLE|SS_LEFT|WS_BORDER,500,20,100,20,hwnd,(HMENU)22,((LPCREATESTRUCT)lParam)->hInstance,NULL);ShowWindow(hStatic3,TRUE);UpdateWindow(hStatic3);HWND hStatic4;hStatic4=CreateWindow(L"static",NULL,WS_CHILD|WS_VISIBLE|SS_LEFT|WS_BORDER,700,20,160,20,hwnd,(HMENU)23,((LPCREATESTRUCT)lParam)->hInstance,NULL);ShowWindow(hStatic4,TRUE);UpdateWindow(hStatic4);break;}case WM_CLOSE:{DestroyWindow(hwnd);break;}case WM_SIZE:{break;}default: return DefWindowProc(hwnd,message,wParam,lParam);}return 0;
}LRESULT CALLBACK MyTopWndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)//上侧窗口
{PAINTSTRUCT ps;HDC hdc;RECT rect;static int cxClient,cyClient;static BOOL gb_Test=FALSE;switch(message){//case WM_CTLCOLOREDIT:// { //        int i=GetWindowLong((HWND)lParam,GWL_ID);//        if(i==3 ||i==4 || i==5|| i==15 || i==13 || i==12 || i==14)//      {//         SetTextColor((HDC)wParam,RGB(0,0,255));//文字颜色//         //SetBkColor((HDC)wParam,GetSysColor(COLOR_HOTLIGHT));//文字的背后颜色//       }//     if (i==15)//      {//         SetTextColor((HDC)wParam,RGB(255,0,255));//文字颜色//           SetBkColor((HDC)wParam,GetSysColor(COLOR_BTNFACE));//文字的背后颜色//      }//     return (BOOL)((HBRUSH)GetStockObject(NULL_BRUSH));//    }case WM_NCLBUTTONDOWN:PostMessage(hwnd,WM_LBUTTONDOWN, wParam,HTCLIENT);//非客户区点击,转换为客户区点击使得移动窗口失效case WM_CTLCOLORSTATIC://设置静态文本框字体颜色{if (GetDlgItem(hwnd, 6) == (HWND)lParam){SetTextColor((HDC)wParam, RGB(0,0,255));SetBkMode((HDC)wParam, TRANSPARENT);//return (LRESULT)CreateSolidBrush(GetSysColor(COLOR_BTNFACE));return (BOOL)((HBRUSH)GetStockObject(NULL_BRUSH));}break;}case WM_TIMER://在定时器里设置实收银两{//获取打折信息WCHAR l_szGetDisCount[256];GetDlgItemText(hwnd,14,l_szGetDisCount,sizeof(l_szGetDisCount)/sizeof(WCHAR));//获取合计数据WCHAR l_szHeJi[256];GetDlgItemText(hwnd,3,l_szHeJi,sizeof(l_szHeJi)/sizeof(WCHAR));//将获取的合计字符信息转为浮点数据float lf_HeJi;lf_HeJi=_wtof(l_szHeJi);//根据获取的字符信息,设置打折数据WCHAR l_szShiShou[256];//实收信息float lf_ShiShou;//实收信息if (lstrcmpW(l_szGetDisCount,L"不打折")==0){//实收银两==合计*折扣lf_ShiShou=lf_HeJi;}if (lstrcmpW(l_szGetDisCount,L"五折")==0){lf_ShiShou=lf_HeJi*0.5;}if (lstrcmpW(l_szGetDisCount,L"六折")==0){lf_ShiShou=lf_HeJi*0.6;}if (lstrcmpW(l_szGetDisCount,L"七折")==0){lf_ShiShou=lf_HeJi*0.7;}if (lstrcmpW(l_szGetDisCount,L"八折")==0){lf_ShiShou=lf_HeJi*0.8;}if (lstrcmpW(l_szGetDisCount,L"九折")==0){lf_ShiShou=lf_HeJi*0.9;}//已经获取了浮点实收数据,现在将其转为字符信息CString str;  str.Format(L"%0.3f", lf_ShiShou);  wsprintf(l_szShiShou, L"%s",str.GetBuffer(str.GetLength()));  //设置编辑框信息SetDlgItemText(hwnd,4,l_szShiShou);break;}case WM_LBUTTONDOWN:{//MessageBox(NULL,TEXT("top"),TEXT(""),MB_OK);break;}case WM_PAINT:{hdc=BeginPaint(hwnd,&ps);GetClientRect(hwnd,&rect);HDC hMemDC=CreateCompatibleDC(hdc);HBITMAP hMemBM=CreateCompatibleBitmap(hdc,rect.right,500);SelectObject(hMemDC,hMemBM);static Image *gImag=NULL;Graphics g(hMemDC);if (gImag==NULL){gImag=Image::FromFile(_T("top4.jpg"));}{g.DrawImage(gImag,0,0,rect.right,500);}BitBlt(hdc,0,0,rect.right,500,hMemDC,0,0,SRCCOPY);//SetTextColor(hdc,RGB(100,40,0));/*HBRUSH hBrush=CreateSolidBrush(RGB(203,229,247));FillRect(hdc,&rect,hBrush);*/TCHAR *szName1=TEXT("合计:");SetBkColor(hdc,RGB(174,202,240));SetTextColor(hdc,RGB(0,0,0));SetBkMode(hdc,TRANSPARENT);TextOut(hdc,80,30,szName1,sizeof(szName1)/sizeof(TCHAR));TCHAR *szName2=TEXT("实收:");TextOut(hdc,240,30,szName2,sizeof(szName2)/sizeof(TCHAR));TCHAR *szName3=TEXT("顾客实付");TextOut(hdc,400,30,szName3,4);if (gb_Test==TRUE){}SetTextColor(hdc,RGB(0,0,0));SetBkMode(hdc,TRANSPARENT);TCHAR *szName4=TEXT("付款信息");TextOut(hdc,0,0,szName4,4);SetTextColor(hdc,RGB(255,0,0));SetBkMode(hdc,TRANSPARENT);if (gb_Test==TRUE){TCHAR *szName5=TEXT("付款方式");TextOut(hdc,50,60,szName5,4);TCHAR *szName6=TEXT("客户名称");TextOut(hdc,240,60,szName6,4);TCHAR *szName7=TEXT("打折");TextOut(hdc,430,60,szName7,2);TCHAR *szName8=TEXT("备注");TextOut(hdc,600,60,szName8,2);}DeleteDC(hMemDC);DeleteObject(hMemBM);EndPaint(hwnd,&ps);return 0;}case WM_ERASEBKGND:{return 0;}case WM_COMMAND:{switch(LOWORD(wParam)){case 6://高级{//设置定时器SetTimer(hwnd,1,3000,NULL);BOOL bcheck=SendDlgItemMessage(hwnd,6,BM_GETCHECK,0,0);if (bcheck==TRUE){//启用且显示控件ShowWindow(GetDlgItem(hwnd,12),SW_SHOW);ShowWindow(GetDlgItem(hwnd,13),SW_SHOW);ShowWindow(GetDlgItem(hwnd,14),SW_SHOW);ShowWindow(GetDlgItem(hwnd,15),SW_SHOW);gb_Test=TRUE;InvalidateRect(hwnd,NULL,FALSE);}if (bcheck==FALSE){//禁用且隐藏控件ShowWindow(GetDlgItem(hwnd,12),SW_HIDE);ShowWindow(GetDlgItem(hwnd,13),SW_HIDE);ShowWindow(GetDlgItem(hwnd,14),SW_HIDE);ShowWindow(GetDlgItem(hwnd,15),SW_HIDE);gb_Test=FALSE;InvalidateRect(hwnd,NULL,FALSE);}break;}case 7://确认收银{PlaySound(TEXT("click.wav"),NULL,SND_ALIAS| SND_ASYNC);//先要获取合计内容WCHAR l_szHeJi[256];GetDlgItemText(hwnd,3,l_szHeJi,sizeof(l_szHeJi)/sizeof(WCHAR));//判空if (*l_szHeJi==NULL){MessageBox(hwnd,L"请先选择要结算的餐桌!",L"提示",MB_OK|MB_ICONERROR);break;}//如果不为空,就要将获取的字符串转为浮点数据float lf_HeJi;lf_HeJi=_wtof(l_szHeJi);//判断是否为零if (lf_HeJi==0.0){MessageBox(hwnd,L"该餐桌还没有点菜!",L"提示",MB_OK|MB_ICONERROR);break;}//不为零,正确处理//先要获取用户输入的客户实付WCHAR l_szCusShiFu[256];GetDlgItemText(hwnd,5,l_szCusShiFu,sizeof(l_szCusShiFu)/sizeof(WCHAR));//判空if (*l_szCusShiFu==NULL){MessageBox(hwnd,L"客户未付款!",L"提示",MB_ICONERROR|MB_OK);break;}//好了,现在可以处理正确的情况了,收银要显示实付信息,实收信息,找零信息//将实付转为浮点数据float lf_ShiFu;lf_ShiFu=_wtof(l_szCusShiFu);//获取实收信息WCHAR l_szShiShou[256];GetDlgItemText(hwnd,4,l_szShiShou,sizeof(l_szShiShou)/sizeof(WCHAR));//将实收转为浮点数据float lf_ShiShou;lf_ShiShou=_wtof(l_szShiShou);//设置找零变量float lf_ZhaoLing;//找零==实付信息-实收信息lf_ZhaoLing=lf_ShiFu-lf_ShiShou;//判断是否合理,要确认不能亏本if (lf_ZhaoLing<0){MessageBox(hwnd,L"客户支付有误!请确认收银金额是否正确!",L"提示",MB_OK|MB_ICONERROR);break;}//将找零浮点数据转为字符数据WCHAR l_szZhaoLing[256];CString str;  str.Format(L"%0.3f", lf_ZhaoLing);  wsprintf(l_szZhaoLing, L"%s",str.GetBuffer(str.GetLength()));  //现在可以正确的提示用户信息了WCHAR l_szInfo[256];wsprintf(l_szInfo,L"收银前请再次确认信息是否正确:\n实收:'%s'\n客户支付:'%s'\n找零:'%s'\n确认收银吗?",l_szShiShou,l_szCusShiFu,l_szZhaoLing);//提示框if(IDYES==MessageBox(hwnd,l_szInfo,L"收银",MB_YESNO|MB_ICONINFORMATION)){MessageBox(hwnd,L"收银成功!",L"提示",MB_OK|MB_ICONINFORMATION);}break;}case 10://播放音乐按钮的处理,随机播放音乐{static BOOL lbTest=FALSE;TCHAR szBuffer[256] = {0};TCHAR Buffer[256] = {0};srand((unsigned int)time(0));//产生随机种子,防止绑定程序static int l_nRand=rand()%3;//获取随机数0~2switch(l_nRand){case 0:{wsprintf(szBuffer,L"music1.mp3");break;}case 1:{wsprintf(szBuffer,L"music2.mp3");break;}case 2:{wsprintf(szBuffer,L"music3.mp3");break;}default:break;}if (lbTest==FALSE){wsprintf(Buffer,L"open \"%s\"",szBuffer);mciSendString(Buffer,NULL,0,NULL);wsprintf(Buffer,L"play \"%s\" repeat",szBuffer);mciSendString(Buffer,NULL,0,NULL);SetWindowText(GetDlgItem(hwnd,10),L"关闭音乐");UpdateWindow(GetDlgItem(hwnd,10));lbTest=!lbTest;break;}else{wsprintf(Buffer,L"close \"%s\"",szBuffer);mciSendString(Buffer,NULL,0,NULL);SetWindowText(GetDlgItem(hwnd,10),L"开启音乐");UpdateWindow(GetDlgItem(hwnd,10));lbTest=!lbTest;break;}break;}}break;}case WM_CREATE:{HINSTANCE hInst=(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE);//创建静态文本框/*HWND hStatic;hStatic=CreateWindow(L"static",TEXT("付款信息"),WS_CHILD|WS_VISIBLE|SS_LEFT,0,5,80,30,hwnd,(HMENU)2,((LPCREATESTRUCT)lParam)->hInstance,NULL);ShowWindow(hStatic,TRUE);UpdateWindow(hStatic);*///创建按钮名称和编辑框(合计)HWND  hEditheji;hEditheji=CreateWindow(TEXT("edit"),TEXT(""),WS_CHILD|WS_VISIBLE|ES_LEFT|WS_BORDER,120,30,100,20,hwnd,(HMENU)3,((LPCREATESTRUCT)lParam)->hInstance,NULL);ShowWindow(hEditheji,TRUE);UpdateWindow(hEditheji);EnableWindow(hEditheji,FALSE);//创建按钮和编辑框(实收HWND  hEditshishou;hEditshishou=CreateWindow(TEXT("edit"),TEXT(""),WS_CHILD|WS_VISIBLE|ES_LEFT|WS_BORDER,280,30,100,20,hwnd,(HMENU)4,((LPCREATESTRUCT)lParam)->hInstance,NULL);ShowWindow(hEditshishou,TRUE);UpdateWindow(hEditshishou);//创建顾客支付HWND  hEditgukezhifu;hEditgukezhifu=CreateWindow(TEXT("edit"),TEXT(""),WS_CHILD|WS_VISIBLE|ES_LEFT|WS_BORDER,480,30,100,20,hwnd,(HMENU)5,((LPCREATESTRUCT)lParam)->hInstance,NULL);ShowWindow(hEditgukezhifu,TRUE);UpdateWindow(hEditgukezhifu);HWND hFuKuanWay=CreateWindow(TEXT("ComboBox"),TEXT("付款方式"), WS_CHILD | WS_VISIBLE | WS_VSCROLL | CBS_DROPDOWNLIST |CBS_AUTOHSCROLL| WS_BORDER,120,60,100,80,hwnd,(HMENU)12,((LPCREATESTRUCT)lParam)->hInstance,NULL);HWND hCusName=CreateWindow(TEXT("edit"),TEXT(""),WS_CHILD|WS_VISIBLE |ES_AUTOHSCROLL|ES_AUTOVSCROLL|ES_MULTILINE|ES_NOHIDESEL|ES_OEMCONVERT|WS_BORDER,310,60,100,20,hwnd,(HMENU)13,((LPCREATESTRUCT)lParam)->hInstance,NULL);EnableWindow(hCusName,FALSE);HWND hDiscount=CreateWindow(TEXT("ComboBox"),TEXT(""), WS_CHILD | WS_VISIBLE | WS_VSCROLL | CBS_DROPDOWNLIST | CBS_HASSTRINGS|CBS_AUTOHSCROLL| WS_BORDER,480,60,100,80,hwnd,(HMENU)14,((LPCREATESTRUCT)lParam)->hInstance,NULL);HWND hBeiZhu=CreateWindow(TEXT("edit"),NULL, WS_CHILD | WS_VISIBLE  |WS_BORDER | ES_LEFT | ES_MULTILINE |ES_AUTOHSCROLL | ES_AUTOVSCROLL|WS_BORDER,650,60,400,25,hwnd,(HMENU)15,((LPCREATESTRUCT)lParam)->hInstance,NULL);//初始化备注SetWindowText(hBeiZhu,L"请输入该签单用户的详细情况,以便跟踪该单。");//隐藏窗口ShowWindow(GetDlgItem(hwnd,12),SW_HIDE);ShowWindow(GetDlgItem(hwnd,13),SW_HIDE);ShowWindow(GetDlgItem(hwnd,14),SW_HIDE);ShowWindow(GetDlgItem(hwnd,15),SW_HIDE);//初始化付款方式DWORD dwIndex;dwIndex=SendDlgItemMessage(hwnd,12,CB_ADDSTRING,NULL,(LPARAM)L"现金");SendDlgItemMessage(hwnd,12,CB_ADDSTRING,NULL,(LPARAM)L"签单");SendDlgItemMessage(hwnd,12,CB_ADDSTRING,NULL,(LPARAM)L"信用卡");//初始化客户名//初始化打折DWORD dwIndex2;SendDlgItemMessage(hwnd,14,CB_ADDSTRING,NULL,(LPARAM)L"五折");SendDlgItemMessage(hwnd,14,CB_ADDSTRING,NULL,(LPARAM)L"六折");SendDlgItemMessage(hwnd,14,CB_ADDSTRING,NULL,(LPARAM)L"七折");SendDlgItemMessage(hwnd,14,CB_ADDSTRING,NULL,(LPARAM)L"八折");SendDlgItemMessage(hwnd,14,CB_ADDSTRING,NULL,(LPARAM)L"九折");dwIndex2=SendDlgItemMessage(hwnd,14,CB_ADDSTRING,NULL,(LPARAM)L"不打折");//设置默认项SendMessage(hFuKuanWay, CB_SETCURSEL, dwIndex, 0); SendMessage(hDiscount, CB_SETCURSEL, dwIndex2, 0); //创建复选框HWND hBtn1;hBtn1 =CreateWindow(L"BUTTON",TEXT("高级"),WS_TABSTOP |WS_VISIBLE |WS_CHILD |BS_AUTOCHECKBOX|BS_FLAT|WS_BORDER,600,30,60,20,hwnd,(HMENU)6,((LPCREATESTRUCT)lParam)->hInstance,NULL);ShowWindow(hBtn1,TRUE);UpdateWindow(hBtn1);//创建收银按钮HWND hButton=CreateWindow(L"BUTTON",TEXT("确认收银"),WS_VISIBLE |WS_CHILD | BS_DEFPUSHBUTTON|BS_BITMAP|WS_BORDER,700,30,80,30,hwnd,(HMENU)7,((LPCREATESTRUCT)lParam)->hInstance,NULL);ShowWindow(hButton,TRUE);UpdateWindow(hButton);HBITMAP hbmp=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP13));  SendMessage(hButton, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM) hbmp);//创建音乐按钮HWND hButtonMusic=CreateWindow(L"BUTTON",TEXT("开启音乐"),WS_TABSTOP |WS_VISIBLE |WS_CHILD | BS_DEFPUSHBUTTON|BS_FLAT|WS_BORDER,1250,0,70,30,hwnd,(HMENU)10,((LPCREATESTRUCT)lParam)->hInstance,NULL);ShowWindow(hButtonMusic,TRUE);UpdateWindow(hButtonMusic);break;}case WM_CLOSE:{DestroyWindow(hwnd);break;}case WM_SIZE:{break;}default: return DefWindowProc(hwnd,message,wParam,lParam);}return 0;
}
属性页函数
//int DoPropertySheet(HWND hwndOwner)
//{
//
//  HINSTANCE hInst=(HINSTANCE)GetWindowLong(hwndOwner,GWL_HINSTANCE);
//  PROPSHEETPAGE psp[2];
//  PROPSHEETHEADER psh;
//  psp[0].dwSize = sizeof(PROPSHEETPAGE);
//  psp[0].dwFlags = PSP_USEICONID | PSP_USETITLE;
//  psp[0].hInstance = hInst;
//  psp[0].pszTemplate = MAKEINTRESOURCE(IDD_PROPERTY1);
//  psp[0].pszIcon = MAKEINTRESOURCE(IDI_MY);
//  psp[0].pfnDlgProc =ProDlg1;
//  psp[0].pszTitle = TEXT("1");
//  psp[0].lParam = 0;
//  psp[0].pfnCallback = NULL;
//
//  psp[1].dwSize = sizeof(PROPSHEETPAGE);
//  psp[1].dwFlags = PSP_USEICONID | PSP_USETITLE;
//  psp[1].hInstance = hInst;
//  psp[1].pszTemplate =MAKEINTRESOURCE(IDD_PROPERTY2);
//  psp[1].pszIcon = MAKEINTRESOURCE(IDI_MY);
//  psp[1].pfnDlgProc =ProDlg2;
//  psp[1].pszTitle = TEXT("2");
//  psp[1].lParam = 0;
//  psp[1].pfnCallback =NULL;
//
//  psh.dwSize = sizeof(PROPSHEETHEADER);
//  psh.dwFlags = PSH_USEICONID | PSH_PROPSHEETPAGE|PSH_USEPSTARTPAGE;
//  psh.hwndParent = hwndOwner;
//  psh.hInstance = hInst;
//  psh.pszIcon =MAKEINTRESOURCE(IDI_MY);
//  psh.pszCaption = (LPCWSTR) L"Cell Properties";
//  psh.nPages = sizeof(psp) /sizeof(PROPSHEETPAGE);
//  psh.nStartPage = 0;
//  psh.ppsp = (LPCPROPSHEETPAGE) &psp;
//  psh.pfnCallback = NULL;
//
//  PropertySheet(&psh);
//  return 0;
//
//}
属性页对话框
//INT_PTR CALLBACK ProDlg1(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
//{
//  UNREFERENCED_PARAMETER(lParam);
//  switch(message)
//  {
//  case WM_INITDIALOG:
//      {
//          return INT_PTR(TRUE);
//      }
//  case WM_COMMAND:
//      {
//          if (LOWORD(wParam)==IDCANCEL ||LOWORD(wParam)==IDOK)
//          {
//              EndDialog(hDlg,LOWORD(wParam));
//              return INT_PTR(TRUE);
//          }
//          break;
//      }
//  default:
//      break;
//  }
//  return INT_PTR(FALSE);
//}
//INT_PTR CALLBACK ProDlg2(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
//{
//  UNREFERENCED_PARAMETER(lParam);
//  switch(message)
//  {
//  case WM_INITDIALOG:
//      {
//          return INT_PTR(TRUE);
//      }
//  case WM_COMMAND:
//      {
//          if (LOWORD(wParam)==IDCANCEL ||LOWORD(wParam)==IDOK)
//          {
//              EndDialog(hDlg,LOWORD(wParam));
//              return INT_PTR(TRUE);
//          }
//          break;
//      }
//  default:
//      break;
//  }
//  return INT_PTR(FALSE);
//}
void GetMenuFromDatabase(HWND hwnd,WPARAM wParam)
{SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);result = SQLPrepare(hstmt,(SQLWCHAR*)L"select Name from menu",SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;HWND hListBox=GetDlgItem(hwnd,11);//获取列表框的窗口句柄SendMessage(hListBox,LB_RESETCONTENT,0,0);//更新之前清空列表while (SQLFetch(hstmt)!=SQL_NO_DATA_FOUND){SQLWCHAR menuname[30];SQLGetData(hstmt,1,SQL_C_WCHAR,menuname,30,&cbsatid);SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)menuname);}    SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);
}
//全局变量
SQLBIGINT MenuID;
SQLWCHAR MenuName[30];
SQLWCHAR MenuPriceBig[30];
SQLWCHAR MenuPriceSmall[30];
SQLWCHAR MenuUnits[30];
SQLWCHAR MenuCosts[30];
SQLWCHAR MenuFeature[30];
SQLWCHAR MenuState[30];
SQLWCHAR MenuDiscount[30];
//响应鼠标在菜谱列表框的双击事件,在此函数中弹出对应菜肴的属性,增删改查数据库
void GetAttributeAboutMenuWhenDBCLK(HWND hwnd,WPARAM wParam,LPARAM lParam,TCHAR szStr[])
{//初始化全局变量ZeroMemory(&MenuID,sizeof(MenuID)/sizeof(SQLBIGINT));ZeroMemory(MenuName,sizeof(MenuName)/sizeof(SQLWCHAR));ZeroMemory(MenuPriceBig,sizeof(MenuPriceBig)/sizeof(SQLWCHAR));ZeroMemory(MenuPriceSmall,sizeof(MenuPriceSmall)/sizeof(SQLWCHAR));ZeroMemory(MenuUnits,sizeof(MenuUnits)/sizeof(SQLWCHAR));ZeroMemory(MenuCosts,sizeof(MenuCosts)/sizeof(SQLWCHAR));ZeroMemory(MenuFeature,sizeof(MenuFeature)/sizeof(SQLWCHAR));ZeroMemory(MenuState,sizeof(MenuState)/sizeof(SQLWCHAR));ZeroMemory(MenuDiscount,sizeof(MenuDiscount)/sizeof(SQLWCHAR));SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);//执行sql语句查询menu表中的所有段result = SQLPrepare(hstmt,(SQLWCHAR*)L"select ID,Name,PriceBig,PriceSmall,Units,Costs,Feature,State,Discount from menu",SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;//执行数据匹配while (SQLFetch(hstmt)!=SQL_NO_DATA_FOUND){SQLGetData(hstmt,1,SQL_C_UBIGINT,&MenuID,30,&cbsatid);//获取菜肴名称SQLGetData(hstmt,2,SQL_C_WCHAR,MenuName,30,&cbsatid);//获取大份价格SQLGetData(hstmt,3,SQL_C_WCHAR,MenuPriceBig,30,&cbsatid);//获取小份价格SQLGetData(hstmt,4,SQL_C_WCHAR,MenuPriceSmall,30,&cbsatid);//获取菜肴价格单位SQLGetData(hstmt,5,SQL_C_WCHAR,MenuUnits,30,&cbsatid);//获取菜肴本钱SQLGetData(hstmt,6,SQL_C_WCHAR,MenuCosts,30,&cbsatid);//获取菜肴特色SQLGetData(hstmt,7,SQL_C_WCHAR,MenuFeature,30,&cbsatid);//获取菜肴当前状态SQLGetData(hstmt,8,SQL_C_WCHAR,MenuState,30,&cbsatid);//获取菜肴打折情况SQLGetData(hstmt,9,SQL_C_WCHAR,MenuDiscount,30,&cbsatid);if (lstrcmpW(MenuName,szStr)==0)//执行匹配{//在此处执行弹出所选菜肴的属性对话框HINSTANCE hInst=(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE);/*WCHAR str[20];wsprintf(str,L"%d",MenuPriceBig);MessageBox(NULL,str,NULL,MB_OK);*/DialogBox(hInst,MAKEINTRESOURCE(IDD_MENUINFO),hwnd,GetMenuInfoProc);break;}}SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);
}
void OnCommandInGetMenuInfoProc(HWND hwnd,WPARAM wParam);
INT_PTR CALLBACK GetMenuInfoProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)//获取数据中菜肴信息对话框
{UNREFERENCED_PARAMETER(lParam);switch(message){case WM_CTLCOLORBTN ://设置按钮的颜色{if ((HWND)lParam == GetDlgItem(hDlg, IDC_BUTTON1)  ||(HWND)lParam == GetDlgItem(hDlg, IDC_BUTTON4)|| (HWND)lParam == GetDlgItem(hDlg, IDC_BUTTONEXIT)|| (HWND)lParam == GetDlgItem(hDlg, IDC_BUTTONDELETE)){HWND hbn = (HWND)lParam;HDC hdc = (HDC)wParam;RECT rc;TCHAR text[64];GetWindowText(hbn, text, 63);GetClientRect(hbn, &rc);SetTextColor(hdc, RGB(255, 255, 255));//设置按钮上文本的颜色SetBkMode(hdc, TRANSPARENT);DrawText(hdc, text, _tcslen(text), &rc, DT_CENTER | DT_VCENTER | DT_SINGLELINE);return (INT_PTR)CreateSolidBrush(RGB(127,0,255));//返回画刷设置按钮的背景色}break;}case WM_CTLCOLORSTATIC://设置静态文本框字体颜色{if (GetDlgItem(hDlg, IDC_STATIC11) == (HWND)lParam)//这里的1是静态文本框的ID{SetTextColor((HDC)wParam, RGB(255,0,255));SetBkMode((HDC)wParam, TRANSPARENT);//return (LRESULT)CreateSolidBrush(GetSysColor(COLOR_BTNFACE));return (BOOL)((HBRUSH)GetStockObject(NULL_BRUSH));}if (GetDlgItem(hDlg, IDC_STATICSETTEXT) == (HWND)lParam)//这里的1是静态文本框的ID{SetTextColor((HDC)wParam, RGB(0,0,255));SetBkMode((HDC)wParam, TRANSPARENT);//return (LRESULT)CreateSolidBrush(GetSysColor(COLOR_BTNFACE));return (BOOL)((HBRUSH)GetStockObject(NULL_BRUSH));}if (GetDlgItem(hDlg, IDC_STATICGETSUCCESSINFO) == (HWND)lParam)//这里的1是静态文本框的ID{SetTextColor((HDC)wParam, RGB(255,0,0));SetBkMode((HDC)wParam, TRANSPARENT);//return (LRESULT)CreateSolidBrush(GetSysColor(COLOR_BTNFACE));return (BOOL)((HBRUSH)GetStockObject(NULL_BRUSH));}if (GetDlgItem(hDlg, IDC_STATICDELETESUCCESS) == (HWND)lParam)//这里的1是静态文本框的ID{SetTextColor((HDC)wParam, RGB(89,56,23));SetBkMode((HDC)wParam, TRANSPARENT);//return (LRESULT)CreateSolidBrush(GetSysColor(COLOR_BTNFACE));return (BOOL)((HBRUSH)GetStockObject(NULL_BRUSH));}break;}case WM_INITDIALOG:{// //动画设置IDC_ANIMATE1//HWND hAnimate=GetDlgItem(hDlg,IDC_ANIMATE1);//动画控件ID,获取动画控件句柄//if (Animate_Open(hAnimate,L"欢迎.avi") == 0)//{//    MessageBox(hDlg,_T("文件打开失败"),_T("错误"),MB_OK);//}//Animate_Play(hAnimate,0,-1,-1);//设置对话框图标HINSTANCE hInst=(HINSTANCE)GetWindowLong(hDlg,GWL_HINSTANCE);SendMessage(hDlg, WM_SETICON, ICON_BIG, (LPARAM)LoadIcon(hInst, MAKEINTRESOURCE(IDI_ICON4))); //设置按钮的属性为可自绘HWND hBn1 = GetDlgItem(hDlg, IDC_BUTTON1);SetWindowLong(hBn1, GWL_STYLE, GetWindowLong(hBn1, GWL_STYLE) | BS_OWNERDRAW);HWND hBn2 = GetDlgItem(hDlg, IDC_BUTTONEXIT);SetWindowLong(hBn2, GWL_STYLE, GetWindowLong(hBn2, GWL_STYLE) | BS_OWNERDRAW);HWND hBn4 = GetDlgItem(hDlg, IDC_BUTTON4);SetWindowLong(hBn4, GWL_STYLE, GetWindowLong(hBn4, GWL_STYLE) | BS_OWNERDRAW);HWND hBn5 = GetDlgItem(hDlg, IDC_BUTTONDELETE);SetWindowLong(hBn5, GWL_STYLE, GetWindowLong(hBn5, GWL_STYLE) | BS_OWNERDRAW);//禁用所有编辑框EnableWindow(GetDlgItem(hDlg,IDC_EDIT1),FALSE);EnableWindow(GetDlgItem(hDlg,IDC_EDIT2),FALSE);EnableWindow(GetDlgItem(hDlg,IDC_EDIT3),FALSE);EnableWindow(GetDlgItem(hDlg,IDC_EDIT4),FALSE);EnableWindow(GetDlgItem(hDlg,IDC_EDIT5),FALSE);EnableWindow(GetDlgItem(hDlg,IDC_EDIT6),FALSE);EnableWindow(GetDlgItem(hDlg,IDC_EDIT7),FALSE);EnableWindow(GetDlgItem(hDlg,IDC_EDIT8),FALSE);//设置IDWCHAR id[20];ZeroMemory(id,sizeof(id)/sizeof(WCHAR));wsprintf(id,L"%d",MenuID);SetDlgItemText(hDlg,IDC_EDIT1,id);//设置nameSetDlgItemText(hDlg,IDC_EDIT2,MenuName);//设置大份价格SetDlgItemText(hDlg,IDC_EDIT3,MenuPriceBig);//设置小份价格SetDlgItemText(hDlg,IDC_EDIT4,MenuPriceSmall);//设置成本SetDlgItemText(hDlg,IDC_EDIT5,MenuCosts);//设置状态SetDlgItemText(hDlg,IDC_EDIT6,MenuState);//设置特征SetDlgItemText(hDlg,IDC_EDIT7,MenuFeature);//设置打折SetDlgItemText(hDlg,IDC_EDIT8,MenuDiscount);return (INT_PTR)TRUE;}case WM_COMMAND:{if (LOWORD(wParam)==IDCANCEL ||LOWORD(wParam)==IDOK){EndDialog(hDlg,LOWORD(wParam));break;}OnCommandInGetMenuInfoProc(hDlg,wParam);break;}default:break;}return INT_PTR(FALSE);
}
//在OnCommandInGetMenuInfoProc过程里响应数据库更新和匹配
void AccessDatabaseForUpdateData(HWND hwnd,WPARAM wParam,int ID,WCHAR szName[],WCHAR szPriceBig[],WCHAR szPriceSmall[],WCHAR szCosts[],WCHAR szState[],WCHAR szFeature[],WCHAR szDiscount[]);
//删除菜肴的函数声明
void DeleteAllInfoAboutThisMenu(HWND hwnd,WPARAM wParam,int ID);
//菜谱信息command消息的响应函数过程void OnCommandInGetMenuInfoProc(HWND hwnd,WPARAM wParam)
{switch(LOWORD(wParam)){case IDC_BUTTON1://保存修改{//禁用编辑框按钮//MessageBox(hwnd,TEXT("保存修改"),NULL,MB_OK);EnableWindow(GetDlgItem(hwnd,IDC_EDIT1),FALSE);EnableWindow(GetDlgItem(hwnd,IDC_EDIT2),FALSE);EnableWindow(GetDlgItem(hwnd,IDC_EDIT3),FALSE);EnableWindow(GetDlgItem(hwnd,IDC_EDIT4),FALSE);EnableWindow(GetDlgItem(hwnd,IDC_EDIT5),FALSE);EnableWindow(GetDlgItem(hwnd,IDC_EDIT6),FALSE);EnableWindow(GetDlgItem(hwnd,IDC_EDIT7),FALSE);EnableWindow(GetDlgItem(hwnd,IDC_EDIT8),FALSE);//执行数据存储,访问数据库,update数据//现获取对话框的编辑框的内容WCHAR szName[256];GetDlgItemText(hwnd,IDC_EDIT2,szName,sizeof(szName)/sizeof(WCHAR));//获取菜肴名称WCHAR szBigPrice[256];GetDlgItemText(hwnd,IDC_EDIT3,szBigPrice,sizeof(szBigPrice)/sizeof(WCHAR));//获取大份价格WCHAR szSmallPrice[256];GetDlgItemText(hwnd,IDC_EDIT4,szSmallPrice,sizeof(szSmallPrice)/sizeof(WCHAR));//获取小份价格WCHAR szCosts[256];GetDlgItemText(hwnd,IDC_EDIT5,szCosts,sizeof(szCosts)/sizeof(WCHAR));//获取成本WCHAR szState[256];GetDlgItemText(hwnd,IDC_EDIT6,szState,sizeof(szState)/sizeof(WCHAR));//获取状态,是否有货WCHAR szFeature[256];GetDlgItemText(hwnd,IDC_EDIT7,szFeature,sizeof(szFeature)/sizeof(WCHAR));//获取特征WCHAR szDiscount[256];GetDlgItemText(hwnd,IDC_EDIT8,szDiscount,sizeof(szDiscount)/sizeof(WCHAR));//获取打折信息//获取信息后执行对应数据库段信息修改//先要获取ID框ID,以ID为对应段进行数据库匹配WCHAR szID[256];GetDlgItemText(hwnd,IDC_EDIT1,szID,sizeof(szID)/sizeof(WCHAR));//因为数据库中的ID项是int类型,必须将wchar类型转换为int,在这里执行转换int MenuID;MenuID=_wtoi(szID);//好吧,一切工作都搞定,现在访问数据库AccessDatabaseForUpdateData(hwnd,wParam,MenuID,szName,szBigPrice,szSmallPrice,szCosts,szState,szFeature,szDiscount);break;}case IDC_BUTTON4://修改{//MessageBox(hwnd,TEXT("修改"),NULL,MB_OK);//当用户点击修改按钮时启用所有编辑框,除ID框之外,用户可以在编辑框内修改数值EnableWindow(GetDlgItem(hwnd,IDC_EDIT2),TRUE);EnableWindow(GetDlgItem(hwnd,IDC_EDIT3),TRUE);EnableWindow(GetDlgItem(hwnd,IDC_EDIT4),TRUE);EnableWindow(GetDlgItem(hwnd,IDC_EDIT5),TRUE);EnableWindow(GetDlgItem(hwnd,IDC_EDIT6),TRUE);EnableWindow(GetDlgItem(hwnd,IDC_EDIT7),TRUE);EnableWindow(GetDlgItem(hwnd,IDC_EDIT8),TRUE);SetDlgItemText(hwnd,IDC_STATICSETTEXT,TEXT("修改指令已经提交完成,您可以在左侧的编辑框内执行修改"));break;}case IDC_BUTTONEXIT://退出对话框{EndDialog(hwnd,LOWORD(wParam));break;}case  IDC_BUTTONDELETE://在数据库中删除此菜肴项的一切信息{//删除指定项的菜肴,必须根据其ID来与数据库进行匹配,所以要获取编辑框中的ID号//获取编辑框中菜肴的ID号WCHAR szID[256];GetDlgItemText(hwnd,IDC_EDIT1,szID,sizeof(szID)/sizeof(WCHAR));//因为数据库中的ID项是int类型,必须将wchar类型转换为int,在这里执行转换int MenuID;MenuID=_wtoi(szID);//好了一切搞定,进行数据库访问DeleteAllInfoAboutThisMenu(hwnd,wParam,MenuID);break;}default:break;}
}
//访问数据库的定义
void AccessDatabaseForUpdateData(HWND hwnd,WPARAM wParam,int ID,WCHAR szName[],WCHAR szPriceBig[],WCHAR szPriceSmall[],WCHAR szCosts[],WCHAR szState[],WCHAR szFeature[],WCHAR szDiscount[])
{//访问数据库SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);result = SQLPrepare(hstmt,(SQLWCHAR*)L"select ID from menu",SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;SQLBIGINT IdInDataBase;ZeroMemory(&IdInDataBase,sizeof(IdInDataBase)/sizeof(SQLBIGINT));while (SQLFetch(hstmt)!=SQL_NO_DATA_FOUND){SQLGetData(hstmt,1,SQL_C_UBIGINT,&IdInDataBase,30,&cbsatid);if (ID==IdInDataBase)//尝试执行匹配{//匹配成功后进行数据库更细SQLWCHAR sql[256];wsprintf(sql,TEXT("update menu set Name='%s',PriceBig='%s',PriceSmall='%s',Costs='%s',Feature='%s',State='%s',Discount='%s' where ID='%d'"),szName,szPriceBig,szPriceSmall,szCosts,szFeature,szState,szDiscount,IdInDataBase);SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);result = SQLPrepare(hstmt,(SQLWCHAR*)sql,SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);//修改成功//刷新编辑框内的内容//显示执行修改成功的信息在静态框内MessageBeep(0);SetDlgItemText(hwnd,IDC_STATICGETSUCCESSINFO,TEXT("修改执行成功!点击“exit“按钮退出菜肴信息对话框"));break;}}SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);}//删除菜肴信息的函数定义
void DeleteAllInfoAboutThisMenu(HWND hwnd,WPARAM wParam,int ID)
{//数据库访问SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);//执行sql语句,取出IDresult = SQLPrepare(hstmt,(SQLWCHAR*)L"select ID from menu",SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;//关键部分就在这里了,执行数据匹配后的删除SQLBIGINT IdInDataBase;ZeroMemory(&IdInDataBase,sizeof(IdInDataBase)/sizeof(SQLBIGINT));while (SQLFetch(hstmt)!=SQL_NO_DATA_FOUND){SQLGetData(hstmt,1,SQL_C_UBIGINT,&IdInDataBase,30,&cbsatid);if (ID==IdInDataBase)//尝试执行匹配{//好了,匹配成功,就要执行数据删除了SQLWCHAR sql[256];//执行sql语句,删除ID指定项wsprintf(sql,TEXT("delete from menu where ID='%d'"),IdInDataBase);SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER={127.0.0.1};UID=root;PWD=root;DATABASE=management;CharSet=GBK;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);result = SQLPrepare(hstmt,(SQLWCHAR*)sql,SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);//执行静态信息框信息提示成功SetDlgItemText(hwnd,IDC_STATICDELETESUCCESS,TEXT("删除执行成功!库存已经清理该数据项!"));break;}}//释放ODBC接口资源SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);}void AddItemForMenuOnCommand(HWND hwnd,WPARAM wParam)//增加菜肴函数定义
{//先获取编辑框中的数据//获取菜肴名称WCHAR szMenuName[256];GetDlgItemText(hwnd,IDC_EDIT1,szMenuName,sizeof(szMenuName)/sizeof(WCHAR));//获取菜肴大份价格WCHAR szBigPrice[256];GetDlgItemText(hwnd,IDC_EDIT2,szBigPrice,sizeof(szBigPrice)/sizeof(WCHAR));//获取菜肴小份价格WCHAR szSmallPrice[256];GetDlgItemText(hwnd,IDC_EDIT3,szSmallPrice,sizeof(szSmallPrice)/sizeof(WCHAR));//获取菜肴成本WCHAR szCosts[256];GetDlgItemText(hwnd,IDC_EDIT4,szCosts,sizeof(szCosts)/sizeof(WCHAR));//获取菜肴状态WCHAR szState[256];GetDlgItemText(hwnd,IDC_EDIT5,szState,sizeof(szState)/sizeof(WCHAR));//获取菜肴的特征WCHAR szFeature[256];GetDlgItemText(hwnd,IDC_EDIT6,szFeature,sizeof(szFeature)/sizeof(WCHAR));//获取菜肴打折情况WCHAR szDiscount[256];GetDlgItemText(hwnd,IDC_EDIT7,szDiscount,sizeof(szDiscount)/sizeof(WCHAR));//在访问数据 库之前判断数据项是否为空,为空就不执行插入if (*szMenuName==NULL || *szBigPrice==NULL ||*szSmallPrice==NULL || *szCosts==NULL || *szState==NULL|| *szDiscount==NULL){MessageBox(hwnd,TEXT("指定信息必须填写"),TEXT("错误"),MB_OK|MB_ICONERROR);return;}//再继续判断是否与数据库中的数据有重复部分,访问数据库先SQLHENV henv1 = NULL;SQLHDBC hdbc1 = NULL;SQLHSTMT hstmt1 = NULL;SQLRETURN result1;SQLWCHAR ConnStrIn1[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER=127.0.0.1;UID=root;PWD=root;DATABASE=management;CharSet=gb2312;";SQLWCHAR ConnStrOut1[MAXBUFLEN];//分配环境句柄result1 = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv1);//设置管理环境属性result1 = SQLSetEnvAttr(henv1, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result1 = SQLAllocHandle(SQL_HANDLE_DBC, henv1, &hdbc1);//设置连接属性result1 = SQLSetConnectAttr(hdbc1, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result1 = SQLDriverConnect(hdbc1,NULL,ConnStrIn1,SQL_NTS,ConnStrOut1,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result1){ShowDBConnError(hwnd,hdbc1);return;}//初始化语句句柄result1 = SQLAllocHandle(SQL_HANDLE_STMT, hdbc1, &hstmt1);result1 = SQLPrepare(hstmt1,(SQLWCHAR*)L"select ID,Name from menu",SQL_NTS);CHECKDBSTMTERROR(hwnd,result1,hstmt1);result1=SQLExecute(hstmt1);CHECKDBSTMTERROR(hwnd,result1,hstmt1);bool lbTest=FALSE;SQLINTEGER cbsatid1=SQL_NTS;while (SQLFetch(hstmt1)!=SQL_NO_DATA_FOUND){SQLWCHAR menuname[30];SQLGetData(hstmt1,2,SQL_C_WCHAR,menuname,30,&cbsatid1);if (lstrcmpW(szMenuName,menuname)==0){lbTest=TRUE;break;}}if (lbTest==TRUE){//释放资源SQLFreeStmt(hstmt1,SQL_CLOSE);SQLDisconnect(hdbc1);SQLFreeHandle(SQL_HANDLE_DBC,hdbc1);SQLFreeHandle(SQL_HANDLE_ENV,henv1);MessageBox(hwnd,L"仓库中已经存有该菜肴!",L"错误",MB_OK|MB_ICONERROR);return;}else{//释放资源SQLFreeStmt(hstmt1,SQL_CLOSE);SQLDisconnect(hdbc1);SQLFreeHandle(SQL_HANDLE_DBC,hdbc1);SQLFreeHandle(SQL_HANDLE_ENV,henv1);}//好了一切准备就绪,现在向数据库menu表中插入数据//访问数据库增加菜肴SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLWCHAR ConnStrIn[MAXBUFLEN] = L"DRIVER={MySQL ODBC 5.1 Driver};SERVER=127.0.0.1;UID=root;PWD=root;DATABASE=management;CharSet=gb2312;";SQLWCHAR ConnStrOut[MAXBUFLEN];//分配环境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&henv);//设置管理环境属性result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0);//分配连接句柄result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//设置连接属性result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT,(void*)LOGIN_TIMEOUT, 0);//连接数据库result = SQLDriverConnect(hdbc,NULL,ConnStrIn,SQL_NTS,ConnStrOut,MAXBUFLEN,(SQLSMALLINT*)0,SQL_DRIVER_NOPROMPT);if(SQL_ERROR==result){ShowDBConnError(hwnd,hdbc);return;}//初始化语句句柄result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);SQLWCHAR sql[256];wsprintf(sql,TEXT("insert into menu(Name,PriceBig,PriceSmall,Costs,Feature,State,Discount) values('%s','%s','%s','%s','%s','%s','%s')"),szMenuName,szBigPrice,szSmallPrice,szCosts,szFeature,szState,szDiscount);result = SQLPrepare(hstmt,(SQLWCHAR*)sql,SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);//执行插入数据成功后要在静态文本框中显示成功信息SetDlgItemText(hwnd,IDC_STATIC1,TEXT("增加菜肴执行成功"));//将编辑框全部禁用EnableWindow(GetDlgItem(hwnd,IDC_EDIT1),FALSE);EnableWindow(GetDlgItem(hwnd,IDC_EDIT2),FALSE);EnableWindow(GetDlgItem(hwnd,IDC_EDIT3),FALSE);EnableWindow(GetDlgItem(hwnd,IDC_EDIT4),FALSE);EnableWindow(GetDlgItem(hwnd,IDC_EDIT5),FALSE);EnableWindow(GetDlgItem(hwnd,IDC_EDIT6),FALSE);EnableWindow(GetDlgItem(hwnd,IDC_EDIT7),FALSE);//释放资源SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);
}//增加菜肴对话框
INT_PTR CALLBACK AddItemToMenu(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)//增加菜肴
{UNREFERENCED_PARAMETER(lParam);switch(message){case WM_CTLCOLORSTATIC://设置静态文本框字体颜色{if (GetDlgItem(hDlg, IDC_STATIC1) == (HWND)lParam)//这里的1是静态文本框的ID{SetTextColor((HDC)wParam, RGB(255,0,255));SetBkMode((HDC)wParam, TRANSPARENT);//return (LRESULT)CreateSolidBrush(GetSysColor(COLOR_BTNFACE));return (BOOL)((HBRUSH)GetStockObject(NULL_BRUSH));}if (GetDlgItem(hDlg, IDC_STATIC2) == (HWND)lParam)//这里的1是静态文本框的ID{SetTextColor((HDC)wParam, RGB(0,0,255));SetBkMode((HDC)wParam, TRANSPARENT);//return (LRESULT)CreateSolidBrush(GetSysColor(COLOR_BTNFACE));return (BOOL)((HBRUSH)GetStockObject(NULL_BRUSH));}break;}case WM_INITDIALOG:{//设置按钮的属性为可自绘HWND hBn1 = GetDlgItem(hDlg, IDC_BUTTON1);SetWindowLong(hBn1, GWL_STYLE, GetWindowLong(hBn1, GWL_STYLE) | BS_OWNERDRAW);HWND hBn2 = GetDlgItem(hDlg, IDC_BUTTON2);SetWindowLong(hBn2, GWL_STYLE, GetWindowLong(hBn2, GWL_STYLE) | BS_OWNERDRAW);HWND hBn3 = GetDlgItem(hDlg, IDC_BUTTON3);SetWindowLong(hBn3, GWL_STYLE, GetWindowLong(hBn3, GWL_STYLE) | BS_OWNERDRAW);//设置对话框图标HINSTANCE hInst=(HINSTANCE)GetWindowLong(hDlg,GWL_HINSTANCE);SendMessage(hDlg, WM_SETICON, ICON_BIG, (LPARAM)LoadIcon(hInst, MAKEINTRESOURCE(IDI_ICON5))); return (INT_PTR)TRUE;}case WM_CTLCOLORBTN ://设置按钮的颜色{if ((HWND)lParam == GetDlgItem(hDlg, IDC_BUTTON1)|| (HWND)lParam == GetDlgItem(hDlg, IDC_BUTTON2)||(HWND)lParam == GetDlgItem(hDlg, IDC_BUTTON3)){HWND hbn = (HWND)lParam;HDC hdc = (HDC)wParam;RECT rc;TCHAR text[64];GetWindowText(hbn, text, 63);GetClientRect(hbn, &rc);SetTextColor(hdc, RGB(255, 255, 255));//设置按钮上文本的颜色SetBkMode(hdc, TRANSPARENT);DrawText(hdc, text, _tcslen(text), &rc, DT_CENTER | DT_VCENTER | DT_SINGLELINE);return (INT_PTR)CreateSolidBrush(RGB(127,0,255));//返回画刷设置按钮的背景色}break;}case WM_COMMAND:{switch(LOWORD(wParam)){case IDOK:{EndDialog(hDlg,LOWORD(wParam));break;}case IDCANCEL:{EndDialog(hDlg,LOWORD(wParam));break;}case IDC_BUTTON1://确认增加{//MessageBox(hDlg,TEXT("确认增加"),NULL,MB_OK);//在此处执行数据库访问,项数据库中插入数据,AddItemForMenuOnCommand(hDlg,wParam);break;}case IDC_BUTTON2://重新输入{//MessageBox(hDlg,TEXT("重新输入"),NULL,MB_OK);//将编辑框全部启用EnableWindow(GetDlgItem(hDlg,IDC_EDIT1),TRUE);EnableWindow(GetDlgItem(hDlg,IDC_EDIT2),TRUE);EnableWindow(GetDlgItem(hDlg,IDC_EDIT3),TRUE);EnableWindow(GetDlgItem(hDlg,IDC_EDIT4),TRUE);EnableWindow(GetDlgItem(hDlg,IDC_EDIT5),TRUE);EnableWindow(GetDlgItem(hDlg,IDC_EDIT6),TRUE);EnableWindow(GetDlgItem(hDlg,IDC_EDIT7),TRUE);SetDlgItemText(hDlg,IDC_STATIC2,TEXT("重新输入命令执行成功,您可以继续在编辑框内修改菜肴信息"));break;}case IDC_BUTTON3://退出{EndDialog(hDlg,LOWORD(wParam));break;}}break;}default:break;}return (INT_PTR)FALSE;
}

Win32 SDK 访问数据库相关推荐

  1. 小型餐饮管理系统(c++/win32 SDK/MYSQL 数据库)

    坚持了20个晚上的餐饮系统(这个工程的设计上就耗费了我一个星期时间,主要是数据库的设计),基本上完成了(关于库存管理的功能没有去做,因为最近很忙),本系统模仿网上下载的"店小二餐饮管理系统& ...

  2. Win32 API 和 ODBC 访问数据库一

    准备用Win32 API和ODBC来访问数据库: 代码如下: /*------------------------------------------------------------win32, ...

  3. ODBC + WIN32 API 访问MYSQL 数据库实现简单QQ用户注册和登录 的代码分析

    ODBC + WIN32 API 访问MYSQL 数据库实现简单QQ用户注册和登录 的代码分析 . /   // datadase odbc1.cpp : 定义应用程序的入口点.  //   #inc ...

  4. VC++ 访问数据库实例详解图解

    一 ADO 方式访问 Access 新建一个对话框工程,添加控件,如图: 创建Access数据库如图: 应用程序启动时进行COM初始化: BOOL CDemoApp::InitInstance() { ...

  5. MSSQL · 最佳实践 · RDS SDK实现数据库迁移上阿里云RDS SQL Server

    title: MSSQL · 最佳实践 · RDS SDK实现数据库迁移上阿里云RDS SQL Server author: 风移 摘要 至今,我们完成了SQL Server备份还原专题系列七篇月报分 ...

  6. ajax定时取数据库,ajax定时访问数据库数据

    ajax定时访问数据库数据 内容精选 换一换 旨在帮助用户周期性的备份重要的库表数据或者SQL结果集,以便数据丢失时及时恢复.存储位置:系统将把加密后的文件存储在OBS桶中.AK/SK:访问密钥即AK ...

  7. Windows游戏设计(二)- 打砖块游戏 - 使用Win32 SDK

    注:以下内容为学习笔记,多数是从书本.资料中得来,只为加深印象,及日后参考.然而本人表达能力较差,写的不好.因非翻译.非转载,只好选原创,但多数乃摘抄,实为惭愧.但若能帮助一二访客,幸甚! 前一阵子学 ...

  8. 转:在 .NET 中实现异步回调访问数据库

    在 .NET 中实现异步回调访问数据库 时间:2009-11-17 19:52来源:网络收集 作者:佚名 点击: 334 次 技术论坛 某些场合下,在对数据库进行访问时,为了避免同步访问数据时所带来的 ...

  9. 使用浏览器wpf应用程序时访问数据库需要报权限错误的解决方法

    在这篇wpf教程中,如果选用浏览器wpf应用程序模板我遇到了  访问数据库时权限不够  不能打开连接 将项目属性的安全性中设置为完全信任后即解决 转载于:https://www.cnblogs.com ...

最新文章

  1. mysql的优化之table_open_cache 篇_mysql性能优化之table_open_cache
  2. numpy 的array 用于矩阵运算 与 python的列表表示矩阵的区别
  3. linux命令eval的用法
  4. 经典C语言程序100例之一
  5. 2019ICPC(银川) - Take Your Seat(概率公式)
  6. FFMPEG学习(一)---【命令行】采集视频和音频
  7. c++整理程序 dev_C编程从入门到实践:C语言开发工具详解(2)
  8. mysql 数据库事务处理_Mysql事务处理问题 - mysql数据库栏目 - 自学php
  9. 苹果cms对接影视小程序源码完整源码
  10. angular2创建应用_如何在Angular 2+应用程序中使用JavaScript库
  11. JavaScript学习笔记(五)--深拷贝浅拷贝
  12. sqltype java_【SQL参考】SQL数据类型与JAVA中type的对应
  13. Flash务实主义——Loading
  14. 疲劳检测(一)Landmark + HeadPose
  15. 关于mysql优化的文章
  16. Win10 输入法v模式
  17. win10安装账户卡住_安装win10系统卡住不动的原因和处理方法
  18. java web开发(一) Java Web开发框架对比
  19. nodejs+express对微信公众号进行二次开发--接收消息,自动回复文本,图片以及代码优化
  20. [论文阅读]Capturing Associations in Graphs 阅读笔记

热门文章

  1. re模块——正则表达式操作
  2. DA, DH, MDA, MDH,MSA到底是什么
  3. 三七互娱-游戏运维岗笔试题(无答案)
  4. UVA 10074 Take the Land dp/暴力+剪枝
  5. python日期函数
  6. 2021年12种高级UX / UI设计趋势
  7. Arduino最便宜的模拟量采集
  8. CynosDB for PostgreSQL 一主多读架构设计及优化[内附独家PPT]
  9. tmap的使用_(转载)UE4容器TArray、TMap的使用
  10. 「有趣」基因组上除了ATCGN还能有什么字符