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

📄

📁 银行队列模拟 1). 随机产生顾客的到达时间和服务时间存盘。 2). 利用存盘数据实现队列的插入和删除。 2). 当有顾客离开时
💻
字号:
// BankNumCallDlg.cpp : implementation file
#include "stdafx.h"
#include "BankNumCall.h"
#include "BankNumCallDlg.h"
#include "windowsx.h"
#include "queue"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
HANDLE Serv_hMutex,CalNum_hMutex;
std::queue<int> Work_q;
int CalNum=0;
class CAboutDlg : public CDialog
{
public:
	CAboutDlg(); //函数成员
	enum { IDD = IDD_ABOUTBOX };
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);  
	DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)//析构函数
{
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)//析构函数
{
	CDialog::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
END_MESSAGE_MAP()
BOOL CBankNumCallDlg::M_bt1=FALSE;
BOOL CBankNumCallDlg::M_bt2=FALSE;
BOOL CBankNumCallDlg::M_Ser1=FALSE;
BOOL CBankNumCallDlg::M_Ser2=FALSE;
BOOL CBankNumCallDlg::M_Ser3=FALSE;
CBankNumCallDlg::CBankNumCallDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CBankNumCallDlg::IDD, pParent)
{
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CBankNumCallDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CBankNumCallDlg, CDialog)
	//{{AFX_MSG_MAP(CBankNumCallDlg)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
	ON_BN_CLICKED(IDC_BUTTON2, OnButton2)
	ON_BN_CLICKED(IDC_BUTTON3, OnButton3)
	ON_BN_CLICKED(IDC_BUTTON4, OnButton4)
	ON_BN_CLICKED(IDC_BUTTON5, OnButton5)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()
BOOL CBankNumCallDlg::OnInitDialog()
{
	CDialog::OnInitDialog();
	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);	
	Serv_hMutex=CreateMutex(NULL,false,"ser");
    CalNum_hMutex=CreateMutex(NULL,false,"cal");
	R_PARAM *pR_Param=new R_PARAM;
	pR_Param->hwnd=m_hWnd;
    HANDLE hThread_1=CreateThread(NULL,0,ServWin1,(LPVOID)pR_Param,0,NULL);
	CloseHandle(hThread_1);
    HANDLE hThread_2=CreateThread(NULL,0,ServWin2,(LPVOID)pR_Param,0,NULL);
	CloseHandle(hThread_2);
    HANDLE hThread_3=CreateThread(NULL,0,ServWin3,(LPVOID)pR_Param,0,NULL);
	CloseHandle(hThread_3);
    HANDLE hThread_4=CreateThread(NULL,0,Caller1,(LPVOID)pR_Param,0,NULL);
	CloseHandle(hThread_4);
    HANDLE hThread_5=CreateThread(NULL,0,Caller2,(LPVOID)pR_Param,0,NULL);
	CloseHandle(hThread_5);//线程
		return TRUE; 
}
void CBankNumCallDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialog::OnSysCommand(nID, lParam);
	}
}
void CBankNumCallDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this);
		SendMessage(WM_ICONERASEBKGND, (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 CBankNumCallDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}
void CBankNumCallDlg::OnButton3() 
{   CString str1="办理中";
    CString str2="暂停";
	M_Ser1=!M_Ser1;
	M_Ser1?::SetDlgItemText(m_hWnd,IDC_BUTTON3,str1): ::SetDlgItemText(m_hWnd,IDC_BUTTON3,str2);	
}
void CBankNumCallDlg::OnButton4() 
{   CString str1="办理中";
    CString str2="暂停";
	M_Ser2=!M_Ser2;
	M_Ser2?::SetDlgItemText(m_hWnd,IDC_BUTTON4,str1): ::SetDlgItemText(m_hWnd,IDC_BUTTON4,str2);	
}
void CBankNumCallDlg::OnButton5() 
{   CString str1="办理中";
    CString str2="暂停";
	M_Ser3=!M_Ser3;
	M_Ser3?::SetDlgItemText(m_hWnd,IDC_BUTTON5,str1): ::SetDlgItemText(m_hWnd,IDC_BUTTON5,str2);	
}
DWORD WINAPI CBankNumCallDlg::ServWin1( LPVOID lpParameter)
 {CString str;
  CString str1="稍候";
  HWND hwnd=((R_PARAM*)lpParameter)->hwnd;
   while(TRUE){
   if(M_Ser1)
   ::SetDlgItemText(hwnd,IDC_EDIT1,str1);
   else{
	WaitForSingleObject(Serv_hMutex,INFINITE);
    if(Work_q.size()!=0){
	 str.Format("%d",Work_q.front());
     Work_q.pop();
   ::SetDlgItemText(hwnd,IDC_EDIT1,str);
	}
   ReleaseMutex(Serv_hMutex);	 
   }
   Sleep(1000);	    
   } 
 return 0;
}
DWORD WINAPI CBankNumCallDlg::ServWin2( LPVOID lpParameter)
 {CString str;
  CString str1="稍候";
  HWND hwnd=((R_PARAM*)lpParameter)->hwnd;
   while(TRUE){
   if(M_Ser2)
   ::SetDlgItemText(hwnd,IDC_EDIT2,str1);
   else{
	WaitForSingleObject(Serv_hMutex,INFINITE);
    if(Work_q.size()!=0){
	 str.Format("%d",Work_q.front());
     Work_q.pop();
   ::SetDlgItemText(hwnd,IDC_EDIT2,str);
	}
   ReleaseMutex(Serv_hMutex);	 
   }
   Sleep(2000);	    
   } 
 return 0;
}
DWORD WINAPI CBankNumCallDlg::ServWin3( LPVOID lpParameter)
 {CString str;
  CString str1="稍候";
  HWND hwnd=((R_PARAM*)lpParameter)->hwnd;
   while(TRUE){
   if(M_Ser3)
   ::SetDlgItemText(hwnd,IDC_EDIT3,str1);
   else{
	WaitForSingleObject(Serv_hMutex,INFINITE);
    if(Work_q.size()!=0){
	 str.Format("%d",Work_q.front());
     Work_q.pop();
   ::SetDlgItemText(hwnd,IDC_EDIT3,str);
	}
   ReleaseMutex(Serv_hMutex);	 
   }
   Sleep(3000);	    
   } 
 return 0;
}
DWORD WINAPI CBankNumCallDlg::Caller1( LPVOID lpParameter)
{   CString str;  
while(TRUE)
{ 
 if(M_bt1)
 {	HWND hwnd=((R_PARAM*)lpParameter)->hwnd;
	 str="";
	 ::SetDlgItemText(hwnd,IDC_EDIT5,str);
	 WaitForSingleObject(CalNum_hMutex,INFINITE);
     CalNum++;
	 str.Format("%d",CalNum);
	 Work_q.push(CalNum);
     M_bt1=FALSE;
 ::SetDlgItemText(hwnd,IDC_EDIT4,str);
str.Format("%d",Work_q.size());
::SetDlgItemText(hwnd,IDC_EDIT6,str);
     ReleaseMutex(CalNum_hMutex);
 }
Sleep(50);
}
 return 0;
}
DWORD WINAPI CBankNumCallDlg::Caller2( LPVOID lpParameter)
{   CString str;  
while(TRUE)
{ 
 if(M_bt2)
 {	HWND hwnd=((R_PARAM*)lpParameter)->hwnd;
	 str="";
	 ::SetDlgItemText(hwnd,IDC_EDIT4,str);
	 WaitForSingleObject(CalNum_hMutex,INFINITE);
     CalNum++;
	 str.Format("%d",CalNum);
	 Work_q.push(CalNum);
     M_bt2=FALSE;
	// HWND hwnd=((R_PARAM*)lpParameter)->hwnd;
   ::SetDlgItemText(hwnd,IDC_EDIT5,str);
str.Format("%d",Work_q.size());
::SetDlgItemText(hwnd,IDC_EDIT6,str);
     ReleaseMutex(CalNum_hMutex);
 }
Sleep(50);
}
 return 0;
}
void CBankNumCallDlg::OnButton1() 
{
	// TODO: Add your control notification handler code here
  M_bt1=TRUE;	
}
void CBankNumCallDlg::OnButton2() 
{
	// TODO: Add your control notification handler code here
  M_bt2=TRUE;	
}

⌨️ 快捷键说明

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