⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clientsheetdlg.cpp

📁 用Visual c++.net实现电子商务的实现(内含源代码)
💻 CPP
字号:
// ClientSheetDlg.cpp : 实现文件
//

#include "stdafx.h"
#include "ECClient.h"
#include "ClientSheetDlg.h"
#include ".\clientsheetdlg.h"

#include "MyInfoPage.h"
#include "BookInfoPage.h"

// CClientSheetDlg
//////////全局变量
CClientSheetDlg* pDlg;//窗口指针,便于线程执行体获得
bool ThreadRun = true;//线程的控制参数
IMPLEMENT_DYNAMIC(CClientSheetDlg, CPropertySheet)
CClientSheetDlg::CClientSheetDlg(UINT nIDCaption, CWnd* pParentWnd, UINT iSelectPage)
	:CPropertySheet(nIDCaption, pParentWnd, iSelectPage)
{	
}

CClientSheetDlg::CClientSheetDlg(LPCTSTR pszCaption, CWnd* pParentWnd, UINT iSelectPage)
	:CPropertySheet(pszCaption, pParentWnd, iSelectPage)
{	
	AddPage(&myinfopage);//加入个人信息属性页
	AddPage(&bookinfopage);	//加入书目信息属性页
}

CClientSheetDlg::~CClientSheetDlg()
{
	LogOut(); 
}


BEGIN_MESSAGE_MAP(CClientSheetDlg, CPropertySheet)
	ON_WM_CLOSE()
END_MESSAGE_MAP()


// CClientSheetDlg 消息处理程序

BOOL CClientSheetDlg::OnInitDialog()
{
	BOOL bResult = CPropertySheet::OnInitDialog();

	// TODO:  在此添加您的专用代码	
	//隐藏属性页默认按钮
	GetDlgItem(IDOK)->ShowWindow(SW_HIDE);
	GetDlgItem(IDCANCEL)->ShowWindow(SW_HIDE);
	GetDlgItem(IDHELP)->ShowWindow(SW_HIDE);
	GetDlgItem(12321)->ShowWindow(SW_HIDE);
    //设置窗体位置
	CRect rectWnd;
	GetWindowRect(rectWnd);
	SetWindowPos(NULL, 0, 0,rectWnd.Width() ,rectWnd.Height()-25,SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE);
	//清空个人信息
	ZeroMemory(&m_info,sizeof(m_info));  

	pDlg = this;//全局变量用来维护窗体指针
	CreateClientSocket();//创建客户端socket
    Login();//登陆
	return bResult;
}
int CClientSheetDlg::Login(void)//登陆
{
	
	CLogin logindlg;
   	DataPack datapack;
    
	memset(&datapack,0,DATAPACK_SIZE);

	INT_PTR nResponse = logindlg.DoModal();//显示登陆对话框
	if(nResponse == IDOK)
	{
		char* m_pserver_ip = new char[16];
		strcpy(m_pserver_ip,SERVER_IP);//得到服务器ip
        //用户登陆
		datapack.flag = LOGIN;
		datapack.DataInfo.user.id =atoi(logindlg.m_id.GetBuffer(0)) ;//用户号码
		strcpy(datapack.DataInfo.user.name,logindlg.m_nikyname);//用户名
		strcpy(datapack.DataInfo.user.password,logindlg.m_password);  //用户密码    
						
		if((m_psocket->Connect(m_pserver_ip,PORT_LISTEN))==0)//连接成功
			{
				m_psocket->Send((char*)&datapack,DATAPACK_SIZE);
				//创建接收数据的工作线程
				AfxBeginThread(ThreadProc,this->GetSafeHwnd(),THREAD_PRIORITY_NORMAL);
			}
	}
	else
	{
		exit(0);
	}
	return 0;
}

UINT CClientSheetDlg::ThreadProc(LPVOID lpram)//接收或者发送数据的管理线程
{
	
	char* buf = new char[DATAPACK_SIZE];//数据接收缓冲区
	DataPack* m_pdatapack = new DataPack();
	
	while(ThreadRun)//bool变量ThreadRun设置程序的运行状态
	{	
		memset(buf,0,DATAPACK_SIZE);
		memset(m_pdatapack,0,DATAPACK_SIZE);
		
		pDlg->m_psocket->Recv(buf,DATAPACK_SIZE);//接收数据
		m_pdatapack = (DataPack*)buf;

		switch(m_pdatapack->flag)
		{
		case LOGINSUCCESS:
			{   //用户登陆成功
				pDlg->SetUserInfo(m_pdatapack->DataInfo.user);
				break;
			}
		case BOOK:
			{   //书目信息
				pDlg->SetBookInfo(m_pdatapack->DataInfo.book);
				break;
			}
		case BUYBOOK_SUCCESS:
			{   //购书成功
				pDlg->SetBuyBookInfo(m_pdatapack->DataInfo.buyitem);
				break;
			}
		case DROPBOOK_SUCCESS:
			{   //退书成功
                pDlg->DropBookSuccess(m_pdatapack->DataInfo.buyitem);		
				break;
			}
		}

	}

	AfxEndThread(0);//结束线程

return 0;
}

int CClientSheetDlg::SetUserInfo(User& user)//保存个人信息
{
	CMyInfoPage* m_pinfopage = (CMyInfoPage*)pDlg->GetPage(0);
	m_pinfopage->SetUserInfo(user);//在界面上显示个人信息
	//保存个人信息
	m_info.id = user.id;
	strcpy(m_info.name,user.name);
	strcpy(m_info.password,user.password);
	return 0;
}

int CClientSheetDlg::SetBookInfo(Book& book)//保存书目信息
{   
    BOOL ret =  this->SetActivePage(1);
	CBookInfoPage* m_pbookpage = (CBookInfoPage*)pDlg->GetPage(1);
	m_pbookpage->SetBookInfo(book);  //在界面上显示书目信息  
	return 0;
}

int CClientSheetDlg::BuyBook(long book_id,CString book_name, int buy_num)//买书处理
{
	DataPack datapack;
    memset(&datapack,0,DATAPACK_SIZE);

	datapack.flag = BUYBOOK;
	datapack.DataInfo.buyitem.book.book_id = book_id;
	strcpy(datapack.DataInfo.buyitem.book.book_name,book_name);
	datapack.DataInfo.buyitem.buy_num = buy_num;
	datapack.DataInfo.buyitem.user.id = m_info.id;
    //向服务器发送购书信息
	m_psocket->Send((const char*)&datapack,DATAPACK_SIZE);
	return 0;
}

int CClientSheetDlg::SetBuyBookInfo(BuyItem& buyitem)//购书后的界面显示
{
	CMyInfoPage* m_pinfopage = (CMyInfoPage*)pDlg->GetPage(0);
	m_pinfopage->SetBuyBookInfo(buyitem);//显示用户购书信息
	return 0;
}

int CClientSheetDlg::DropBook(int book_id)//退购
{
	DataPack datapack;
    memset(&datapack,0,DATAPACK_SIZE);

	datapack.flag = DROPBOOK;
	datapack.DataInfo.buyitem.book.book_id = book_id;
	datapack.DataInfo.buyitem.user.id = m_info.id;
    //向服务器发送退购信息
	m_psocket->Send((const char*)&datapack,DATAPACK_SIZE);

	return 0;
}

int CClientSheetDlg::DropBookSuccess(BuyItem& buyitem)//退购成功
{

	CMyInfoPage* m_pinfopage = (CMyInfoPage*)pDlg->GetPage(0);
	m_pinfopage->DropBook(buyitem);
	return 0;
}
int CClientSheetDlg::LogOut(void)//退出
{	
	DataPack datapack;
    memset(&datapack,0,DATAPACK_SIZE);
	//退出消息
	datapack.flag = LOGOUT;
	datapack.DataInfo.user.id = m_info.id;
	m_psocket->Send((const char*)&datapack,DATAPACK_SIZE);
	//关闭socket
	m_psocket->Close();

	ThreadRun = false;//数据收发线程停止工作
	return 0;
}

int CClientSheetDlg::CreateClientSocket(void)//创建客户端socket
{
			m_psocket = new TCPSocket();
		if((m_psocket->Create(0))==false)//创建套接字
			{
				AfxMessageBox("Socket Create Failed");
				exit(0);
			} 
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -