亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ecserverdlg.cpp

?? 用Visual c++.net實現電子商務的實現(內含源代碼)
?? CPP
字號:
// ECSERVERDlg.cpp : 實現文件
//

#include "stdafx.h"
#include "ECSERVER.h"
#include "ECSERVERDlg.h"

#include ".\ecserverdlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// 用于應用程序“關于”菜單項的 CAboutDlg 對話框
////////////////////////////////////////////////////////////
//全局或者靜態變量初始化
int CECSERVERDlg::m_conn_num = 0;
CECSERVERDlg* pDlg;//窗口指針,便于線程執行體獲得
bool ThreadRun[MAX_CONNECT_NUM];
class CAboutDlg : public CDialog
{
public:
	CAboutDlg();

// 對話框數據
	enum { IDD = IDD_ABOUTBOX };

	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持

// 實現
protected:
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
END_MESSAGE_MAP()


// CECSERVERDlg 對話框



CECSERVERDlg::CECSERVERDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CECSERVERDlg::IDD, pParent)
	, m_pSet(NULL)	
{
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
	
}

void CECSERVERDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_EDIT1, m_message_list);
}

BEGIN_MESSAGE_MAP(CECSERVERDlg, CDialog)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	//}}AFX_MSG_MAP
	ON_WM_CLOSE()
END_MESSAGE_MAP()


// CECSERVERDlg 消息處理程序

BOOL CECSERVERDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// 將\“關于...\”菜單項添加到系統菜單中。

	// IDM_ABOUTBOX 必須在系統命令范圍內。
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// 設置此對話框的圖標。當應用程序主窗口不是對話框時,框架將自動
	//  執行此操作
	SetIcon(m_hIcon, TRUE);			// 設置大圖標
	SetIcon(m_hIcon, FALSE);		// 設置小圖標

	// TODO: 在此添加額外的初始化代碼
	pDlg = this;//維護窗口指針
	ServerInit();//服務器初始化

	for(int i=0;i<MAX_CONNECT_NUM;i++)
	{
		ThreadRun[i] = true;
	}

		try
	{
	    CString  sDSN="ODBC;DRIVER=Microsoft Access Driver (*.mdb);DSN='';DBQ=system.mdb";
     
		m_database = new CDatabase;
		if(!m_database->Open(NULL,FALSE,FALSE,sDSN,FALSE))
		{      
			CDialog::EndDialog(0);
			return FALSE;
		}	
        //打開數據庫的BOOK表設置記錄集
		CString strSQL="select * from BOOK";
		m_pSet = new CRecordset(m_database);
		m_pSet->Open(CRecordset::dynaset,strSQL);
	
		if(!m_pSet->Requery())	AfxMessageBox("can not requery");	
		if(m_pSet->IsBOF() && m_pSet->IsEOF())	return -1;	
		
	}
	catch(CDBException* pEx)
	{
		pEx->ReportError();
	}
	return TRUE;  // 除非設置了控件的焦點,否則返回 TRUE
}

void CECSERVERDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialog::OnSysCommand(nID, lParam);
	}
}

// 如果向對話框添加最小化按鈕,則需要下面的代碼
//  來繪制該圖標。對于使用文檔/視圖模型的 MFC 應用程序,
//  這將由框架自動完成。

void CECSERVERDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // 用于繪制的設備上下文

		SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

		// 使圖標在工作矩形中居中
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// 繪制圖標
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

//當用戶拖動最小化窗口時系統調用此函數取得光標顯示。
HCURSOR CECSERVERDlg::OnQueryDragIcon()
{
	return static_cast<HCURSOR>(m_hIcon);
}

int CECSERVERDlg::ServerInit(void)//服務器初始化
{
     m_psocket = new TCPSocket();
	 m_psocket->Create(PORT_LISTEN);//在端口PORT_LISTEN上創建套接字	
	m_psocket->Listen(MAX_CONNECT_NUM);//設置最大連接數為CONNECT_NUM
		
	//創建接受客戶連接的工作線程
	AfxBeginThread(ThreadAccept,this->GetSafeHwnd(),THREAD_PRIORITY_NORMAL);
    WriteStr("服務器初始化成功!");
	return 0;
}

UINT CECSERVERDlg::ThreadAccept(LPVOID lpram)//接收用戶連接線程
{
	while(m_conn_num<MAX_CONNECT_NUM)
	{
		pDlg->m_psocket->Accept(&(pDlg->clientsocket[m_conn_num]));//接受新的連接,都由clientsocket[i]來處理
		int socketid = m_conn_num;
		AfxBeginThread(ThreadProc,(LPVOID)&socketid,THREAD_PRIORITY_NORMAL);//新創建線程,專門接受發送過來的數據
        m_conn_num++;
	}
	AfxEndThread(0);

return 0;
}

UINT CECSERVERDlg::ThreadProc(LPVOID lpram)
{	
	char* buf = new char[DATAPACK_SIZE];
	DataPack* m_pdatapack = new DataPack();
    int* sockid =(int*)lpram ;	
	
	while(ThreadRun[*sockid])//運行參數
	{	
		memset(buf,0,DATAPACK_SIZE);
		memset(m_pdatapack,0,DATAPACK_SIZE);

		pDlg->clientsocket[*sockid].Recv(buf,DATAPACK_SIZE);
 
		m_pdatapack = (DataPack*)buf;

		switch(m_pdatapack->flag)
		{
		case LOGIN://用戶登陸處理
			{
                 //查找用戶
				if((pDlg->GetUser(m_pdatapack->DataInfo.user))==-1)					
					break;
				else
				{
					CString str;
					str.Format("用戶:%d登陸成功!",m_pdatapack->DataInfo.user.id);
					pDlg->WriteStr(str);
					//通知用戶登陸成功,并把個人信息發送給用戶
					m_pdatapack->flag = LOGINSUCCESS;
					pDlg->clientsocket[*sockid].Send((const char*)m_pdatapack,DATAPACK_SIZE);
					//把書目信息發送給用戶
					pDlg->SendBookInfo(*sockid);
					//把該用戶的購書信息發送給用戶
					pDlg->SendBuyBookInfo(*sockid,m_pdatapack->DataInfo.user.id);

				}	
				break;
			}
		case BUYBOOK://用戶購書
			{
				CString str;
				str.Format("用戶:%d購書成功",m_pdatapack->DataInfo.buyitem.user.id);
				pDlg->WriteStr(str);
				//用戶購書處理
				pDlg->BuyBook(m_pdatapack->DataInfo.buyitem);
                //通知用戶購書成功          
                m_pdatapack->flag = BUYBOOK_SUCCESS;
                pDlg->clientsocket[*sockid].Send((const char*)m_pdatapack,DATAPACK_SIZE);
				break;
			}
		case DROPBOOK://用戶退書
			{
				CString str;
				str.Format("用戶:%d退購成功",m_pdatapack->DataInfo.buyitem.user.id);
				pDlg->WriteStr(str);
				//用戶退購處理
				if(pDlg->DropBook(m_pdatapack->DataInfo.buyitem)==0)
				{
					m_pdatapack->flag = DROPBOOK_SUCCESS;
					pDlg->clientsocket[*sockid].Send((const char*)m_pdatapack,DATAPACK_SIZE);
				}					
				break;
			}
		case LOGOUT:
			{//用戶退出
				CString str;
				str.Format("用戶:%d退出",m_pdatapack->DataInfo.buyitem.user.id);
				pDlg->WriteStr(str);
				pDlg->clientsocket[*sockid].Close; 
				ThreadRun[*sockid] = false;
				break;
			}
		}


	}

	AfxEndThread(0);//結束線程

return 0;
}
void CECSERVERDlg::OnClose()
{
	// TODO: 在此添加消息處理程序代碼和/或調用默認值
	CDialog::OnClose();
}

//本函數用于從數據庫中根據用戶ID:userin.id查找用戶user,找到的話把其余信息放在user中,否則直接注冊
int CECSERVERDlg::GetUser(User& user)//
{
	CString m_errmsg;
	CDBVariant m_value;
    //安全性處理
	if(user.id==0||strcmp(user.name,"")==0||strcmp(user.password,"")==0)
	{
		return -1;
	}

	TRY
	{	

		CString strSQL; 
		strSQL.Format("select * from User where USER_ID=%d AND USER_PASSWORD='%s'",user.id,user.password);
		CRecordset* m_pSet_tmp = new CRecordset(m_database);
		m_pSet_tmp->Open(CRecordset::dynaset,strSQL);
    
	if(m_pSet_tmp->IsBOF())//沒有這個id,插入新紀錄注冊這個用戶
	{
		CString strSQL ;
		strSQL.Format("insert into User(USER_ID,USER_NAME,USER_PASSWORD) values(%d,'%s',%s)",user.id,user.name,user.password);
		m_database->ExecuteSQL(strSQL);
		return 0;
	}	 
    //得到對應id的用戶名
	 m_pSet_tmp->GetFieldValue("USER_NAME",m_value);	 
	 strcpy(user.name,m_value.m_pstring->GetBuffer(0)); 
	 m_pSet_tmp->Close();

	}
	CATCH_ALL(e)
	{
		e->GetErrorMessage(m_errmsg.GetBuffer(128),128);
		AfxMessageBox(m_errmsg);
		return -1;
	}
	END_CATCH_ALL
	return 0;
}
int CECSERVERDlg::SendBookInfo(int socketid)//向用戶發送書目信息
{
	CString temp;	
	DataPack datapack;
	memset(&datapack,0,DATAPACK_SIZE);
	datapack.flag = BOOK;
    //依次把書目信息發送給用戶
    m_pSet->MoveFirst();
	while( !m_pSet->IsEOF() )
	{
		m_pSet->GetFieldValue("BOOK_ID",temp);
        datapack.DataInfo.book.book_id = atoi(temp.GetBuffer(0));

		m_pSet->GetFieldValue("BOOK_NAME",temp);
		strcpy(datapack.DataInfo.book.book_name,temp.GetBuffer(0));

		m_pSet->GetFieldValue("BOOK_AUTHOR",temp);
		strcpy(datapack.DataInfo.book.book_author,temp.GetBuffer(0));

		m_pSet->GetFieldValue("PUBLISHER",temp);
		strcpy(datapack.DataInfo.book.publisher,temp.GetBuffer(0));

		m_pSet->GetFieldValue("PUBLISH_TIME",temp);
		strcpy(datapack.DataInfo.book.publish_time,temp.GetBuffer(0));

		m_pSet->GetFieldValue("PRICE",temp);
		strcpy(datapack.DataInfo.book.price,temp.GetBuffer(0));

		m_pSet->GetFieldValue("LEFT_NUM",temp);
		datapack.DataInfo.book.left_num = atoi(temp.GetBuffer(0));

		m_pSet->GetFieldValue("PRIVIEW",temp);
		strcpy(datapack.DataInfo.book.priview,temp.GetBuffer(0));
        //向用戶發送書目信息
		clientsocket[socketid].Send((const char*)&datapack,DATAPACK_SIZE);

		m_pSet->MoveNext();
	}

	return 0;
}

int CECSERVERDlg::BuyBook(BuyItem& buyitem)//購書處理
{
	CString m_errmsg;	

	TRY
	{//向表BUY_ITEM插入購書記錄
		CString strSQL ;
		strSQL.Format("insert into BUY_ITEM(BOOK_ID,BOOK_NAME,USER_ID,BUY_NUM) values(%d,'%s',%d,%d)",buyitem.book.book_id,buyitem.book.book_name,buyitem.user.id,buyitem.buy_num);
		m_database->ExecuteSQL(strSQL);
	}
	CATCH_ALL(e)
	{
		e->GetErrorMessage(m_errmsg.GetBuffer(128),128);
		AfxMessageBox(m_errmsg);
		return -1;
	}
	END_CATCH_ALL
	
	return 0;
}

int CECSERVERDlg::SendBuyBookInfo(int sockid, int user_id)//發送用戶的購書信息
{
	CString m_errmsg;
	CString temp;

	DataPack datapack;
    memset(&datapack,0,DATAPACK_SIZE);

	datapack.flag = BUYBOOK_SUCCESS;

	TRY
	{	
       //從表BUY_ITEM中查找用戶的購書記錄
		CString strSQL; 
		strSQL.Format("select * from BUY_ITEM where USER_ID=%d",user_id);
		CRecordset* m_pSet_tmp = new CRecordset(m_database);
		m_pSet_tmp->Open(CRecordset::dynaset,strSQL);
    
	if(m_pSet_tmp->IsBOF())
	return -1; 
    //發送用戶的購書記錄
	while(!m_pSet_tmp->IsEOF())
	{
		m_pSet_tmp->GetFieldValue("BOOK_ID",temp);
		datapack.DataInfo.buyitem.book.book_id = atoi(temp.GetBuffer(0));
		m_pSet_tmp->GetFieldValue("BOOK_NAME",temp);		
		strcpy(datapack.DataInfo.buyitem.book.book_name,temp);
		m_pSet_tmp->GetFieldValue("USER_ID",temp);
		datapack.DataInfo.buyitem.user.id = atoi(temp.GetBuffer(0));
		m_pSet_tmp->GetFieldValue("BUY_NUM",temp);
		datapack.DataInfo.buyitem.buy_num = atoi(temp.GetBuffer(0));
		clientsocket[sockid].Send((const char*)&datapack,DATAPACK_SIZE);
		m_pSet_tmp->MoveNext();
	} 

	}
	CATCH_ALL(e)
	{
		e->GetErrorMessage(m_errmsg.GetBuffer(128),128);
		AfxMessageBox(m_errmsg);
		return -1;
	}
	END_CATCH_ALL

	return 0;
}

int CECSERVERDlg::DropBook(BuyItem& buyitem)//退購處理
{
	CString m_errmsg;	

	TRY
	{//刪除用戶的購書記錄
		CString strSQL ;
		strSQL.Format("delete * from BUY_ITEM where USER_ID = %d AND BOOK_ID = %d",buyitem.user.id,buyitem.book.book_id);
		m_database->ExecuteSQL(strSQL);
	}
	CATCH_ALL(e)
	{
		e->GetErrorMessage(m_errmsg.GetBuffer(128),128);
		AfxMessageBox(m_errmsg);
		return -1;
	}
	END_CATCH_ALL
	return 0;
}

int CECSERVERDlg::WriteStr(CString str)//向界面上輸出狀態信息
{
	CString strTemp = str;	
	strTemp += _T("\r\n");	
	m_message_list.ReplaceSel(strTemp);
	return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
不卡大黄网站免费看| 欧美三级在线视频| 欧美日韩在线播放一区| 亚洲精品在线三区| 一片黄亚洲嫩模| 福利电影一区二区三区| 91精品国产综合久久精品| 亚洲欧美在线aaa| 久久99久久99小草精品免视看| 99国产精品久| 国产视频一区在线观看| 美女视频黄频大全不卡视频在线播放| 色综合久久久久久久久久久| 久久久精品免费网站| 男男成人高潮片免费网站| 在线观看91视频| 国产精品夫妻自拍| 国产成a人亚洲精| 26uuu另类欧美亚洲曰本| 日韩av不卡一区二区| 在线观看日韩毛片| 亚洲日本在线天堂| 色综合天天综合网国产成人综合天| 国产日韩欧美一区二区三区综合| 久久精品国产秦先生| 在线综合+亚洲+欧美中文字幕| 亚洲一区二区影院| 91福利在线看| 亚洲激情男女视频| 欧美在线你懂得| 亚洲国产另类av| 亚洲免费毛片网站| 欧美肥妇free| 91久久线看在观草草青青 | 国内外成人在线| 午夜精品久久久久久不卡8050| 国产日韩欧美a| 精品欧美一区二区久久| 精品成人佐山爱一区二区| 欧洲av在线精品| 亚洲精品久久久久久国产精华液| av男人天堂一区| 亚洲乱码国产乱码精品精可以看 | 日本一区二区三区在线不卡| 国产精一品亚洲二区在线视频| 久久午夜色播影院免费高清| 国产suv精品一区二区883| 国产精品欧美综合在线| 94-欧美-setu| 亚洲伊人伊色伊影伊综合网| 欧美麻豆精品久久久久久| 日本最新不卡在线| 2022国产精品视频| 国产高清不卡二三区| 中文字幕一区av| 欧美日韩成人综合在线一区二区 | 国产毛片精品国产一区二区三区| 国产亚洲一区二区在线观看| 99视频在线精品| 日韩电影在线观看一区| 精品99一区二区三区| 91在线看国产| 日韩在线观看一区二区| 亚洲精品一区二区三区福利| 成人av资源下载| 日韩电影在线观看网站| 国产精品久久久久7777按摩| 欧美三级电影网| 国产一区二区三区精品视频| 亚洲欧美怡红院| 日韩一区二区三区免费看| 成人一级视频在线观看| 怡红院av一区二区三区| 欧美大片免费久久精品三p| a在线欧美一区| 免费在线看成人av| 中文字幕一区二区三区av| 日韩一区二区在线观看视频| 懂色av噜噜一区二区三区av| 亚洲一区在线免费观看| 国产拍欧美日韩视频二区| 欧美日韩国产影片| 色综合天天性综合| 国产精一区二区三区| 日本亚洲视频在线| 亚洲乱码国产乱码精品精的特点| 欧美成人一区二区| 欧美军同video69gay| 91色乱码一区二区三区| 激情小说欧美图片| 免费在线看一区| 天堂午夜影视日韩欧美一区二区| 日本一区二区综合亚洲| 精品国产乱子伦一区| 欧美吻胸吃奶大尺度电影| 成人不卡免费av| 国产精品一区二区三区网站| 轻轻草成人在线| 五月天久久比比资源色| 玉足女爽爽91| 亚洲你懂的在线视频| 中文字幕av一区二区三区高| 久久久亚洲欧洲日产国码αv| 欧美一级日韩一级| 欧美日韩国产高清一区二区| 色综合久久精品| 色欧美片视频在线观看| 99久久综合国产精品| 成人动漫一区二区三区| 成人av资源下载| 99精品国产99久久久久久白柏| 国产不卡在线播放| 国产黄色精品网站| 国产精华液一区二区三区| 国产一区二区在线电影| 国精产品一区一区三区mba视频| 日本色综合中文字幕| 日本一道高清亚洲日美韩| 日韩一区精品字幕| 久久99精品国产| 国产精品亚洲一区二区三区在线| 韩国中文字幕2020精品| 国产乱码一区二区三区| 国产成人在线色| 成人免费高清视频| 91色|porny| 欧美日韩一区三区四区| 日韩欧美一二三区| 久久久91精品国产一区二区精品| 国产日产欧美精品一区二区三区| 欧美国产1区2区| 亚洲欧美日韩国产综合| 亚洲一区二区三区四区中文字幕| 日韩二区三区四区| 国产一区二区毛片| av午夜一区麻豆| 欧美三级乱人伦电影| 日韩欧美国产精品| 国产欧美一区视频| 一区二区三区在线观看网站| 日韩中文字幕区一区有砖一区| 激情伊人五月天久久综合| 成人一区二区三区视频 | 精品国产乱码久久久久久老虎| 久久亚洲免费视频| 一区在线观看免费| 视频一区二区三区在线| 国产精品18久久久久| 欧美综合一区二区| 久久久激情视频| 亚洲国产一区二区在线播放| 精品一区二区在线观看| 91免费观看视频在线| 日韩一区二区精品| 中文字幕在线不卡国产视频| 首页综合国产亚洲丝袜| 国产精品一区在线观看你懂的| 日本韩国欧美在线| 26uuu欧美日本| 亚洲午夜久久久久| 丁香六月综合激情| 正在播放亚洲一区| 中文字幕综合网| 久久成人久久爱| 欧洲激情一区二区| 日本一区二区成人在线| 午夜久久久影院| www.亚洲精品| 久久久久久久一区| 视频一区视频二区中文| 99精品视频在线免费观看| 欧美不卡一区二区三区| 亚洲成人一区在线| 91天堂素人约啪| 久久久久国产免费免费| 亚洲成人av一区二区| 91在线porny国产在线看| 国产视频一区不卡| 捆绑调教一区二区三区| 欧美无乱码久久久免费午夜一区| 欧美国产成人在线| 国产美女娇喘av呻吟久久 | 欧美日韩高清影院| 亚洲精品国产成人久久av盗摄| 福利一区福利二区| 久久亚洲私人国产精品va媚药| 日韩国产精品久久久久久亚洲| 欧美在线观看视频在线| 亚洲欧美乱综合| 99国产精品99久久久久久| 国产无遮挡一区二区三区毛片日本| 美女一区二区视频| 欧美大度的电影原声| 日韩精品每日更新| 欧美高清视频在线高清观看mv色露露十八 | 欧美熟乱第一页| 一区二区三国产精华液| 在线这里只有精品| 亚洲一区二区视频在线| 欧美日韩一区三区|