一
ODBC + WIN32 API 访问MYSQL 数据库实现简单QQ用户注册和登录
http://blog.youkuaiyun.com/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 me
SQLWCHAR 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 me
result = 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.youkuaiyun.com/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 strings
LoadString(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 variable
hWnd = 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 list
hIcon = 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.youkuaiyun.com/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; //位图资源的ID
SendMessage(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);
// 初始化ImageList
hImgListSm = 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)
{
// 销毁ImageList
ImageList_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=25
wsprintf(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)));
//创建listview
RECT 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,Sta
ffExtraInfo,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,Staff
Salary 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',Staf
fExtraInfo='%s',FastInfo='%s',StaffSalary='%s' where
StaffNumber='%d'",l_szStaffName,l_szStaffID,l_szStaffHomeAddress,ln_StaffPhoneNumber,l_szSt
affPost,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\serverinfo
WCHAR 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,StaffEx
traInfo) values
('%s','%s','%s','%s','%d','%s','%s','%s')",l_szStaffName,l_szRole,l_szStaffID,l_szStaffHome
Address,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,Sta
ffExtraInfo,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=25
wsprintf(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=25
wsprintf(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);//初始化listview
INT_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);
//初始化listview
InitListViewOnCustomerInfoProc(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,EatingH
abits 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_szSettlementCatego
ry,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 ,获取字段信息,设置listview
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,EatingH
abits 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;//不满足条件,返回
}
//满足条件的的情况下,执行数据库访问,表:customerinfo
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];
//条件查询
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_szCustomerCa
tegory,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~20
WCHAR 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_szCaiNumber
wsprintf(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_szDian
caiTime,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_szDian
caiTime,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)
{
//开始更新菜肴名
//访问数据库:表: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);
//先要将获取的菜的编号转为整形数值
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)//初始化餐桌组合框
{
//访问数据库,设置餐桌组合框的内容,访问的表为: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);
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,sz
Table,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,nCusNu
m,szExtraTableNumber,szCusName);
result = SQLPrepare(hstmt,(SQLWCHAR*)sql,SQL_NTS);//szCusNum
CHECKDBSTMTERROR(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 - opaque
SetLayeredWindowAttributes(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 - opaque
SetLayeredWindowAttributes(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 - opaque
SetLayeredWindowAttributes(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_szCusto
merName,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"餐桌信息");
//创建右侧子窗口2
if(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));//yellow
FillRect(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发送消息初始化
listview
SetListViewInfoWhenDBCLIK
(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 2001
HTREEITEM 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);
//创建radio
CreateWindow(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 control
RECT 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 list
HIMAGELIST hImages = ImageList_Create(
GetSystemMetrics(SM_CXSMICON),
GetSystemMetrics(SM_CYSMICON),
ILC_COLOR32 | ILC_MASK, 1, 1);
// Get an instance handle for a source of icon images
HINSTANCE 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 control
TreeView_SetImageList(hTreeview, hImages, TVSIL_NORMAL);
// Insert the first item at root level
HTREEITEM hPrev1 = InsertTreeviewItem(hTreeview, L"菜单大类
", TVI_ROOT);
// Sub item of first item
hPrev1 = InsertTreeviewItem(hTreeview, L"菜单大类浏览",
hPrev1);
HTREEITEM hPrev2 = InsertTreeviewItem(hTreeview, L"菜单小类",
TVI_ROOT);
hPrev1 = InsertTreeviewItem(hTreeview, L"菜单小类浏览",
hPrev2);
// Insert the second item at root level
HTREEITEM hPrev3 = InsertTreeviewItem(hTreeview, L"特价菜",
TVI_ROOT);
hPrev1 = InsertTreeviewItem(hTreeview, L"特价菜浏览", hPrev3);
HTREEITEM hPrev4 = InsertTreeviewItem(hTreeview, L"今日美味
", TVI_ROOT);
hPrev1 = InsertTreeviewItem(hTreeview, L"今日美味浏览",
hPrev4);
}
//创建listview控件
{
//创建listview
RECT 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:
{
//创建listview
RECT 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~2
switch(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);
//设置ID
WCHAR id[20];
ZeroMemory(id,sizeof(id)/sizeof(WCHAR));
wsprintf(id,L"%d",MenuID);
SetDlgItemText(hDlg,IDC_EDIT1,id);
//设置name
SetDlgItemText(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语句,取出ID
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];
//执行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;
}