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

📄 dlgkqinput.cpp

📁 用户管理系统
💻 CPP
字号:
// DlgKqInput.cpp : implementation file
//

#include "stdafx.h"
#include "Kvip.h"
#include "DlgKqInput.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#include "MyMdi.H"
#include "StringSQL.H"
#include "DlgKqCopyto.H"
//#include "XCtrl\MemDC.H"
/////////////////////////////////////////////////////////////////////////////
// CDlgKqInput

IMPLEMENT_DYNCREATE(CDlgKqInput, CFormView)

CDlgKqInput::CDlgKqInput()
	: CFormView(CDlgKqInput::IDD)
{
	//{{AFX_DATA_INIT(CDlgKqInput)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	m_pConnection = NULL;
	m_pApp = NULL;
}

CDlgKqInput::~CDlgKqInput()
{
//   if(m_pConnection) delete m_pConnection;
}

void CDlgKqInput::DoDataExchange(CDataExchange* pDX)
{
	CFormView::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDlgKqInput)
	DDX_Control(pDX, IDC_SAVE, m_btSave);
	DDX_Control(pDX, IDC_COPYTO, m_btCopyto);
	DDX_Control(pDX, IDC_APPEND, m_btAppend);
	DDX_Control(pDX, IDC_RETRIEVE, m_btRetrieve);
	DDX_Control(pDX, IDC_ED_PROJECT, m_edProject);
	DDX_Control(pDX, IDC_PROJECT, m_Project);
	DDX_Control(pDX, IDC_DEP, m_Dep);
	DDX_Control(pDX, IDC_LEFT, m_Left);
	DDX_Control(pDX, IDC_MASTER, m_Master);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CDlgKqInput, CFormView)
	//{{AFX_MSG_MAP(CDlgKqInput)
	ON_BN_CLICKED(IDC_SAVE, OnSave)
	ON_BN_CLICKED(IDC_APPEND, OnAppend)
	ON_BN_CLICKED(IDC_RETRIEVE, OnRetrieve)
	ON_BN_CLICKED(IDC_COPYTO, OnCopyto)
	ON_CBN_SELCHANGE(IDC_DEP, OnSelchangeDep)
	ON_NOTIFY(NM_CLICK, IDC_MASTER, OnClickMaster)
	ON_WM_CLOSE()
	ON_NOTIFY(LVN_ITEMCHANGED, IDC_LEFT, OnItemchangedLeft)
	ON_BN_CLICKED(IDCANCEL, OnCancel)
	ON_WM_PAINT()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDlgKqInput diagnostics

#ifdef _DEBUG
void CDlgKqInput::AssertValid() const
{
	CFormView::AssertValid();
}

void CDlgKqInput::Dump(CDumpContext& dc) const
{
	CFormView::Dump(dc);
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CDlgKqInput message handlers

void CDlgKqInput::OnSave(WPARAM nExit) 
{
	// TODO: Add your control notification handler code here
   if (m_MasterDoc.IsModify())
	{//数据已修改
      if(nExit == 1 || MessageBox("注意:是否保存数据???", "系统提示", MB_OKCANCEL|MB_ICONEXCLAMATION) ==	IDOK)
	  {
 	    m_MasterDoc.Save();
		return ;
	  }
	}
}



void CDlgKqInput::OnAppend() 
{
	// TODO: Add your control notification handler code here
   CString sProject = _T(""), sText, sName;
   CString sSQL;
   long nCount = 0;
//输入效对
   m_edProject.GetWindowText(sProject);
   if(_IsValidInput(sProject)==false) return;
//计划是否存在
   sSQL = _T("Select Count(*) From kv_kq_Input Where ");
   sSQL = sSQL + _T("kq_id Like '") + sProject + _T("%%'");
   if(m_RecordSet.Open(sSQL))
	  m_RecordSet.GetCollect((long)0, nCount);
   if(nCount != 0)
   {
     MessageBox("提示:" + sProject + "计划已存在,不能重复创建!", "系统提示",
	           MB_OK|MB_ICONSTOP);
	 return ;
   }
//读入所有用户,创建计划
   m_pConnection->BeginTrans();
   sSQL = _T("Select sm_code, sm_name From kv_staff_mr");
   if(!m_RecordSet.Open(sSQL)) goto err01;
   while(m_RecordSet.IsEOF() == false)
   {
	m_RecordSet.GetCollect("sm_code", sText);
	m_RecordSet.GetCollect("sm_name", sName);
	//sText = sProject + sText;
    sSQL = _T("Insert Into kv_kq_Input (kq_id, kq_code,kq_name) Values ('");
	sSQL = sSQL + sProject+sText + _T("','");
	sSQL = sSQL + sText + _T("'");
	sSQL = sSQL + _T(",'") + sName + _T("')");
    if(!m_Command.SetCommandText(sSQL)) goto err01;
	if(m_Command.Execute(adCmdText) == NULL) goto err01;
	m_RecordSet.MoveNext();
   }
   m_pConnection->CommitTrans();
   //AfxMessageBox("OK");
   //SetState(1);
   PostMessage(WM_COMMAND, IDC_RETRIEVE);
   return ;
err01:   	
   m_pConnection->RollbackTrans();
   MessageBox("提示:创建" + sProject + "计划失败!", "系统提示",
	           MB_OK|MB_ICONSTOP);
	 return ;
}

void CDlgKqInput::OnRetrieve() 
{
	// TODO: Add your control notification handler code here
   CString sProject = _T(""), sText;
   CString sSQL;
   long nCount = 0;
   COleDateTime tNow;
   CDlgDataCell Cell;
   m_btRetrieve.GetWindowText(sText);
   if(sText == _T("(&R)检索"))
   {
//输入效对
   m_edProject.GetWindowText(sProject);
   if(_IsValidInput(sProject)==false) return;
//设置画面
//   m_Master.SetDateMode(sProject);
   sSQL = _T("Select * From kv_kq_Input Where ");
   sSQL = sSQL + _T("kq_id Like '") + sProject + _T("%%'");
   if(m_MasterDoc.Retrieve(sSQL) != 0)  return ;
   SetState(1);
   }
   else
   {
	OnSave(0);
    SetState(0);
   }//end if
}

void CDlgKqInput::OnCopyto() 
{
	// TODO: Add your control notification handler code here
   CDlgKqCopyTo dlg;
   CString sCode;
   int nItem = m_Master.GetSelected();
   if(nItem < 0 )return ;
   dlg.SetParent(this);
   dlg.DoModal();
}

void CDlgKqInput::OnInitialUpdate() 
{
	CFormView::OnInitialUpdate();
//1登记
	CMyMdi Mdi;
	Mdi.SetSubView((CWnd*)GetParent(), (CWnd*)this);

	m_pApp = (CKvipApp *)AfxGetApp();
	m_pConnection = m_pApp->m_pConWrite;
//	m_pConnection = m_pApp->CreaterAdoConnection();
	if(m_pConnection == NULL) 
	{
		GetParent()->PostMessage(WM_CLOSE);
		return ;
	}
	m_RecordSet.SetAdoConnection(m_pConnection);
	// TODO: Add your specialized code here and/or call the base class
//2装入部门
	CString sSQL, sText;
	sSQL = _T("Select sm_Dept From kv_staff_mr group by sm_dept");
	if(m_RecordSet.Open(sSQL))
	{
	   while(m_RecordSet.IsEOF() == false)
	   {
	    m_RecordSet.GetCollect("sm_dept", sText);
        m_Dep.AddString(sText);
        m_RecordSet.MoveNext();
	   }
	}
	m_Dep.InsertString(0,"所有部门");
    m_Dep.SetCurSel(0);
//3装入计划
	long lTxColor, lBkColor;
	sSQL = _T("Select * From kv_kq_project Where kp_no = 1");
	if(m_RecordSet.Open(sSQL))
	{
	   while(m_RecordSet.IsEOF() == false)
	   {
	    m_RecordSet.GetCollect("kp_code", sText);
	    m_RecordSet.GetCollect("kp_tx_Color", lTxColor);
	    m_RecordSet.GetCollect("kp_bk_color", lBkColor);
        m_Project.AddStringEx(sText, lTxColor, lBkColor);
		m_Master.Add(sText, lTxColor, lBkColor);
        m_RecordSet.MoveNext();
	   }
	}
    m_Project.SetCurSel(0);

//4初始化员工列表
    CDlgDataCell Cell;
	m_ListDoc.SetConnection(m_pConnection);
	m_ListDoc.Construe(&Cell, _T("=sm_Code;TEXT=编号;INDEXCOL=0;WIDTH=0"));
	m_ListDoc.m_data.push_back(Cell);
	m_ListDoc.Construe(&Cell, _T("=sm_Name;TEXT=名称;INDEXCOL=1;WIDTH=60"));
	m_ListDoc.m_data.push_back(Cell);
	m_ListDoc.Construe(&Cell, _T("=sm_Dept;TEXT=部门;INDEXCOL=2;WIDTH=60"));
	m_ListDoc.m_data.push_back(Cell);
	m_ListDoc.SetListCtrl(&m_Left);
    m_ListDoc.InitList();
	m_ListDoc.Retrieve("Select sm_code, sm_name, sm_dept From kv_staff_mr", false);
	//OnSelchangeDep();
	m_edProject.SetMaxCharacters(6);

//装入主表
	m_Command.SetConnection(m_pConnection);
//初始化员工列表
	m_MasterDoc.SetConnection(m_pConnection);
	m_MasterDoc.Construe(&Cell, _T("=kq_id;TEXT=ID;INDEXCOL=32;WIDTH=0;SETKEY=ID"));
	m_MasterDoc.m_data.push_back(Cell);
	m_MasterDoc.Construe(&Cell, _T("=kq_code;TEXT=编号;INDEXCOL=33;WIDTH=0"));
	m_MasterDoc.m_data.push_back(Cell);
	m_MasterDoc.Construe(&Cell, _T("=kq_Name;TEXT=名称;INDEXCOL=0;WIDTH=80;STYLE=RIGHT"));
	m_MasterDoc.m_data.push_back(Cell);
	for(int i=1; i <= 31; i++)
	{
	  sText.Format("=kq_d%d;TEXT=%02d;INDEXCOL=%d;WIDTH=25;STYLE=CENTER",i,i,i);
	  m_MasterDoc.Construe(&Cell,(LPSTR)(LPCSTR)sText);
	  m_MasterDoc.m_data.push_back(Cell);
	}
	m_MasterDoc.SetListCtrl(&m_Master);
    m_MasterDoc.InitList();
}

void CDlgKqInput::OnSelchangeDep() 
{
	// TODO: Add your control notification handler code here
	CString sSQL;
	CString sText, sProject;

//选择部门
	sSQL = _T("Select * From kv_staff_mr");
	int nSel = m_Dep.GetCurSel();
	if(nSel > 0)
	{
	  m_Dep.GetWindowText(sText);
	  if (sText != _T(""))
	    sSQL = sSQL + _T(" Where sm_dept = '") + sText + _T("'");
	}
    if(m_ListDoc.Retrieve(sSQL) < 0)return;
	return;
/*
//选择部门员工
    m_edProject.GetWindowText(sProject);
	if(sProject == _T("")) return ;   //first
    sSQL = _T("Select * From kv_kq_Input, kv_staff_mr Where ");
    sSQL = sSQL + _T("kq_id Like '") + sProject + _T("%%'");
    sSQL = sSQL + _T(" AND sm_code = kq_code");
	if(sText != _T(""))
      sSQL = sSQL + _T(" AND sm_dept = '") + sText + _T("'");
    m_MasterDoc.Retrieve(sSQL);
    return ;

//选择部门
    CAdoRecordSet *pRecordSet;
    
	m_edProject.GetWindowText(sProject);
	if(sProject == _T("")) return ;   //first
	int nSel = m_Dep.GetCurSel();
	if(nSel < 0) return ;

    pRecordSet = m_ListDoc.GetRecordSet();
//过滤
    m_Dep.GetWindowText(sText);
	if(nSel == 0 || sText == _T(""))
      sSQL = _T("'Y' = 'Y'");
	else
	  sSQL.Format("sm_dept = '%s'", sText);
	pRecordSet->MoveFirst();
    if(pRecordSet->Find(sSQL) < 0)return;
//显示内容
	m_Left.SetRedraw(false);
	m_Left.DeleteAllItems();
	while(pRecordSet->IsEOF()==false)
	{
     m_ListDoc.Db2List(pRecordSet);
     pRecordSet->MoveNext();
	}
	m_Left.SetRedraw(true);
//选择部门员工
pRecordSet = m_MasterDoc.GetRecordSet();
    sSQL.Format("kq_id = '%s%%' AND sm_dept = '%s'",
	            sProject, sText);
    if(pRecordSet->Find(sSQL) < 0)return;
//显示内容
	m_Master.SetRedraw(false);
	m_Master.DeleteAllItems();
	while(pRecordSet->IsEOF()==false)
	{
     m_MasterDoc.Db2List(pRecordSet);
     pRecordSet->MoveNext();
	}
	m_Master.SetRedraw(true);
*/
}

void CDlgKqInput::OnCancel() 
{
	// TODO: Add your control notification handler code here
  GetParent()->PostMessage(WM_CLOSE);	
}

//输入效对
BOOL CDlgKqInput::_IsValidInput(CString sText)
{
   COleDateTime tDate;
   if(sText.GetLength() != 6) goto err01;
   sText = sText.Left(4) + _T("-") + sText.Right(2) + _T("-01");
   tDate = COleDateTime(COleVariant(sText));
   if (tDate.GetStatus() != COleDateTime::valid) goto err01;

   return true;

err01:
     MessageBox("提示:输入格式错误(YYYYMM) !", "系统提示",
	           MB_OK|MB_ICONSTOP);
	 return false;
}

void CDlgKqInput::SetState(int nState)
{
  switch(nState)
  {
  case 0:m_btRetrieve.SetWindowText(_T("(&R)检索"));
	     m_btAppend.EnableWindow(true);
	     //m_btRetrieve.EnableWindow(true);
	     m_btCopyto.EnableWindow(false);
	     m_btSave.EnableWindow(false);
		 m_edProject.EnableWindow(true);
		 m_edProject.SetWindowText(_T(""));
		 m_Dep.EnableWindow(false);
		 //m_Project.EnableWindow(false);
		 m_Master.SetRedraw(false);
		 m_Master.DeleteAllItems();
		 m_Master.SetRedraw(true);
		 m_edProject.SetFocus();
	     break;
  case 1: 
	     m_btRetrieve.SetWindowText(_T("(&R)清除"));
	     m_btAppend.EnableWindow(false);
	     //m_btRetrieve.EnableWindow(false);
	     m_btCopyto.EnableWindow(true);
	     m_btSave.EnableWindow(true);
		 m_edProject.EnableWindow(false);
		 m_Dep.EnableWindow(true);
		 //m_Project.EnableWindow(true);
	     break;
  }
}



void CDlgKqInput::OnClickMaster(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
	const int nColumn = pNMListView->iSubItem;
	//const int nItem = pNMListView->iItem;
	int nItem = m_MasterDoc._GetSelected();
	CString sText;
	COLORREF crColor, crTxColor;
	if (nColumn > 0 && nItem >= 0)
	{   
		m_MasterDoc.SetModify(nItem, LD_EDIT);
		sText = m_Project.GetItemText();
		m_Project.GetColor(crColor, crTxColor);
		//m_Master.SetItemTextEx(nItem, nColumn, sText, crTxColor, crColor);
		m_Master.SetItemText(nItem, nColumn, sText);
	}
	*pResult = 0;
}

void CDlgKqInput::OnClose() 
{
	// TODO: Add your message handler code here and/or call default
    int nRet = IDNO;
//提示
	if(m_MasterDoc.IsModify())
	   nRet= MessageBox("注意:你确定要关闭窗口吗???", "系统提示", MB_YESNOCANCEL|MB_ICONQUESTION);
   
	if(nRet == IDYES)
	  {//保存
 	    OnSave(1);
		return ;
	  }
	 else if(nRet == IDCANCEL) 
	 {//取消退出
		CMyMdi::m_bExitCode = false;
		return ;
	 }
	
	CFormView::OnClose();
}

void CDlgKqInput::SelectProject()
{
   int nSel = m_Project.GetCurSel();
   if (nSel == m_Project.GetCount() -1)
	   nSel = 0;
   else
       nSel++;
   m_Project.SetCurSel(nSel);
}





BOOL CDlgKqInput::PreTranslateMessage(MSG* pMsg) 
{
	// TODO: Add your specialized code here and/or call the base class
	if(pMsg->message == WM_KEYDOWN &&
	    (int)pMsg->wParam == VK_F4)
		SelectProject();
	return CFormView::PreTranslateMessage(pMsg);
}

void CDlgKqInput::OnItemchangedLeft(NMHDR* pNMHDR, LRESULT* pResult) 
{
   NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
   const int nItem = pNMListView->iItem;
   int nSubItem;
   CString sCode, sSQL, sPro, sName;

   if (pNMListView->uNewState == 3 && nItem >= 0) 
   {
	//m_Master.SetItemState(m_Master.GetSelected(), 0, LVIS_SELECTED);
//合成主键
    m_edProject.GetWindowText(sPro);
    sCode = m_Left.GetItemTextEx(nItem, "编号");
    sName = m_Left.GetItemTextEx(nItem, "名称");
	sPro = sPro + sCode;
    nSubItem = m_Master.GetSubItem("编号");
	for(int i = 0; i < m_Master.GetItemCount(); i++)
	{
		sSQL = m_Master.GetItemText(i, nSubItem);
		if(sSQL == sCode) 
		{//found
           m_Master.MoveToTop(i);
		   m_Master.UnSelectItem(m_Master.GetSelected());
	       m_Master.SelectItem(i);
	       return ;
		}
	}//end for
//new
	  m_MasterDoc.New(true, sPro);
	  nSubItem = m_Master.GetSubItem("编号");
	  m_Master.SetItemText(m_Master.GetSelected(), nSubItem, sCode);
	  nSubItem = m_Master.GetSubItem("名称");
	  m_Master.SetItemText(m_Master.GetSelected(), nSubItem, sName);
	  return ;
   }
	*pResult = 0;
}

void CDlgKqInput::OnPaint() 
{
	CPaintDC dc(this); // device context for painting
	
	// TODO: Add your message handler code here
	
	// Do not call CFormView::OnPaint() for painting messages
}

⌨️ 快捷键说明

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