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

📄 repaired.cpp

📁 一个用vc++做的数据库系统
💻 CPP
字号:
// Repaired.cpp : implementation file
//

#include "stdafx.h"
#include "FixedAssets.h"
#include "Repaired.h"
#include "CRACK.h"
#include "PromptDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CRepaired dialog


CRepaired::CRepaired(CWnd* pParent /*=NULL*/)
	: CDialog(CRepaired::IDD, pParent)
{
	//{{AFX_DATA_INIT(CRepaired)
	m_strAssetID = _T("");
	m_strName = _T("");
	m_strReason = _T("");
	m_strRemark = _T("");
	m_RepairDate = 0;
	m_SendDate = 0;
	m_strSender = _T("");
	m_strStatus = _T("");
	m_dSum = 0.0;
	m_strPlace = _T("");
	m_strFitting = _T("");
	m_strRepairer = _T("");
	//}}AFX_DATA_INIT
}


void CRepaired::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CRepaired)
	DDX_Control(pDX, IDC_RD_REPAIRER, m_CtrlCBRepairer);
	DDX_Control(pDX, IDC_RD_FITTING, m_CtrlCBFitting);
	DDX_Control(pDX, IDC_RD_PLACE, m_CtrlCBPlace);
	DDX_Control(pDX, IDC_RD_REASON, m_CtrlEditReason);
	DDX_Control(pDX, IDC_RD_LIST, m_CtrlList);
	DDX_Text(pDX, IDC_RD_ASSETID, m_strAssetID);
	DDX_Text(pDX, IDC_RD_NAME, m_strName);
	DDX_Text(pDX, IDC_RD_REASON, m_strReason);
	DDX_Text(pDX, IDC_RD_REMARK, m_strRemark);
	DDX_DateTimeCtrl(pDX, IDC_RD_REPAIRDATE, m_RepairDate);
	DDX_DateTimeCtrl(pDX, IDC_RD_SENDDATE, m_SendDate);
	DDX_Text(pDX, IDC_RD_SENDER, m_strSender);
	DDX_Text(pDX, IDC_RD_STATUS, m_strStatus);
	DDX_Text(pDX, IDC_RD_SUM, m_dSum);
	DDV_MinMaxDouble(pDX, m_dSum, 0., 1.e+024);
	DDX_CBString(pDX, IDC_RD_PLACE, m_strPlace);
	DDX_CBString(pDX, IDC_RD_FITTING, m_strFitting);
	DDX_CBString(pDX, IDC_RD_REPAIRER, m_strRepairer);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CRepaired, CDialog)
	//{{AFX_MSG_MAP(CRepaired)
	ON_NOTIFY(LVN_ITEMCHANGED, IDC_RD_LIST, OnItemchangedRdList)
	ON_BN_CLICKED(ID_RD_REPAIRED, OnRdRepaired)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CRepaired message handlers

BOOL CRepaired::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	m_CtrlList.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
	//连接数据库
    m_pDatabase=new CDaoDatabase;
	try{
		m_pDatabase->Open("FixedAssets");
        m_pRecordset=new CDaoRecordset(m_pDatabase);
	}
	catch(CDaoException *e)
	{
		e->ReportError();
		delete m_pDatabase;
		m_pDatabase=NULL;
		e->Delete();
	}	
	
	if(!m_pDatabase->IsOpen()) return 0;
	if(!m_pRecordset) return 0;
	if(m_pRecordset->IsOpen()) m_pRecordset->Close();
	CString strSelect;
	m_strTableName = _T("维修资产");
	strSelect = _T("Select DISTINCT 维修人 From [");
	strSelect += m_strTableName;
	strSelect += _T("]");
	m_pRecordset->Open(dbOpenDynaset,strSelect);
	while (!m_pRecordset->IsEOF())
	{
		COleVariant var;
		var = m_pRecordset->GetFieldValue(0);
		m_CtrlCBRepairer.AddString(CCrack::strVARIANT(var));
		m_pRecordset->MoveNext();
	}
		// close recordset
	m_pRecordset->Close();
		strSelect = _T("Select DISTINCT 维修地点 From [");
	strSelect += m_strTableName;
	strSelect += _T("]");
	m_pRecordset->Open(dbOpenDynaset,strSelect);
	while (!m_pRecordset->IsEOF())
	{
		COleVariant var;
		var = m_pRecordset->GetFieldValue(0);
		m_CtrlCBPlace.AddString(CCrack::strVARIANT(var));
		m_pRecordset->MoveNext();
	}
		// close recordset
	m_pRecordset->Close();
		strSelect = _T("Select DISTINCT 配件名称 From [");
	strSelect += m_strTableName;
	strSelect += _T("]");
	m_pRecordset->Open(dbOpenDynaset,strSelect);
	while (!m_pRecordset->IsEOF())
	{
		COleVariant var;
		var = m_pRecordset->GetFieldValue(0);
		m_CtrlCBFitting.AddString(CCrack::strVARIANT(var));
		m_pRecordset->MoveNext();
	}
		// close recordset
	m_pRecordset->Close();
	Refresh();
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

int CRepaired::DoModal() 
{
	// TODO: Add your specialized code here and/or call the base class
	return CDialog::DoModal();
}
void CRepaired::Refresh()//刷新
{
    m_strTableName = _T("维修资产");
	if(!m_pDatabase->IsOpen()) return;
	if(!m_pRecordset) return;
	if(m_pRecordset->IsOpen()) m_pRecordset->Close();
	//清空list控件
	m_CtrlList.DeleteAllItems();
	while(m_CtrlList.DeleteColumn(0));
	CDaoFieldInfo fieldInfo;
	int nFields;

	CDaoTableDef td(m_pDatabase);
	try
	{
		td.Open(m_strTableName);
		nFields = td.GetFieldCount();
		int nWidth;
		for (int j=0; j < nFields; j++)
		{
			td.GetFieldInfo(j,fieldInfo);
			nWidth = m_CtrlList.GetStringWidth(fieldInfo.m_strName) + 15;
			if(j>=2)
			  m_CtrlList.InsertColumn(j+2,fieldInfo.m_strName, LVCFMT_LEFT, nWidth);
			else
			  m_CtrlList.InsertColumn(j,fieldInfo.m_strName, LVCFMT_LEFT, nWidth);
		}
		nWidth=100;
		m_CtrlList.InsertColumn(2,"资产编号", LVCFMT_LEFT, nWidth);
		m_CtrlList.InsertColumn(3,"资产名称", LVCFMT_LEFT, nWidth);
	}
	catch (CDaoException* e)
	{
		e->ReportError(); 
		e->Delete();
		return;
	}
	td.Close();

	int nItem = 0,i;
	try
	{
		CString select,strSelect(_T("Select * From ["));
		strSelect += m_strTableName;
		strSelect += _T("]");
		m_pRecordset->Open(dbOpenDynaset,strSelect);
		while (!m_pRecordset->IsEOF())
		{
			COleVariant var;
			var = m_pRecordset->GetFieldValue(12);
			if(CCrack::strVARIANT(var)=="TRUE") 
			{   
				m_pRecordset->MoveNext();
				continue;
			}
			var = m_pRecordset->GetFieldValue(0);
			m_CtrlList.InsertItem(nItem,CCrack::strVARIANT(var));
			for (i=0; i < nFields; i++)
			{
				var = m_pRecordset->GetFieldValue(i);
				if(i>=2)
				{
				    m_CtrlList.SetItemText( nItem,i+2,CCrack::strVARIANT(var));
				}
				if(i==1)
                    m_CtrlList.SetItemText( nItem,i,CCrack::strVARIANT(var));
			}
            CDaoRecordset *m_pSet;
			m_pSet=new CDaoRecordset(m_pDatabase);
			var = m_pRecordset->GetFieldValue(1);
			select.Format("select 资产编号,资产名称 from 资产信息 where 资产ID=%d",atoi(CCrack::strVARIANT(var)));
		try{   
			m_pSet->Open(dbOpenDynaset,select);
			var = m_pSet->GetFieldValue(0);
            m_CtrlList.SetItemText( nItem,2,CCrack::strVARIANT(var));
			var = m_pSet->GetFieldValue(1);
            m_CtrlList.SetItemText( nItem,3,CCrack::strVARIANT(var));
            m_pSet->Close();
			}  
	       catch(CDaoException* e){
		       m_CtrlList.SetItemText( nItem,2,"该项已删除");
			   m_CtrlList.SetItemText( nItem,3,"该项已删除");
		       e->Delete();}
			m_pRecordset->MoveNext();
			nItem++;
		}
	} 
	catch (CDaoException* e)
	{
		e->ReportError(); 
		e->Delete();
		return;
	}
	m_ID.Empty();
	m_strName.Empty();
	m_strAssetID.Empty();
	m_strSender.Empty();
	m_strRepairer.Empty();
	m_strPlace.Empty();
	m_strReason.Empty();
	m_strStatus.Empty();
	m_strFitting.Empty();
	m_strRemark.Empty();
	m_RepairDate=CTime::GetCurrentTime();
	m_SendDate=CTime::GetCurrentTime();
	UpdateData(0);
}

BOOL CRepaired::DestroyWindow() 
{
	// TODO: Add your specialized code here and/or call the base class
	m_pDatabase->Close();
	delete m_pDatabase;
	m_pDatabase=NULL;
	return CDialog::DestroyWindow();
}

void CRepaired::OnItemchangedRdList(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
	UpdateData(1);
    if(pNMListView->uNewState&LVIS_SELECTED)
	{  
		char pContent[50] ;
       	int iCurrent = pNMListView->iItem;
        m_CtrlList.GetItemText(iCurrent,1,pContent,50);
		m_ID.Format("%s", pContent);
		m_CtrlList.GetItemText(iCurrent,2,pContent,50);
		m_strAssetID.Format("%s", pContent);
        m_CtrlList.GetItemText(iCurrent,3,pContent,50);
		m_strName.Format("%s", pContent);
		m_CtrlList.GetItemText(iCurrent,4,pContent,50);
		m_strSender.Format("%s", pContent);
		m_CtrlList.GetItemText(iCurrent,8,pContent,50);
		CString str,year,month,day;
		str.Format("%s",pContent);
		if(str.GetAt(6)=='0') 
			year.Format("20%c%c",str.GetAt(6),str.GetAt(7));
		else
			year.Format("19%c%c",str.GetAt(6),str.GetAt(7));
		month.Format("%c%c",str.GetAt(0),str.GetAt(1));
		day.Format("%c%c",str.GetAt(3),str.GetAt(4));
		CTime time(atoi(year),atoi(month),atoi(day),0,0,0);
		m_SendDate=time;
		UpdateData(FALSE);
		(CButton*)GetDlgItem(ID_RD_REPAIRED)->EnableWindow(1);
	    (CEdit*)GetDlgItem(IDC_RD_STATUS)->EnableWindow(1);
		(CEdit*)GetDlgItem(IDC_RD_SUM)->EnableWindow(1);
		(CEdit*)GetDlgItem(IDC_RD_REASON)->EnableWindow(1);
		(CEdit*)GetDlgItem(IDC_RD_REMARK)->EnableWindow(1);
	   	(CComboBox*)GetDlgItem(IDC_RD_PLACE)->EnableWindow(1);
		(CComboBox*)GetDlgItem(IDC_RD_REPAIRER)->EnableWindow(1);
		(CComboBox*)GetDlgItem(IDC_RD_FITTING)->EnableWindow(1);
	    (CDateTimeCtrl*)GetDlgItem(IDC_RD_REPAIRDATE)->EnableWindow(1);
	}
	else
	{
	    if(m_CtrlList.GetSelectedCount()<=0) 
		{
		   (CButton*)GetDlgItem(ID_RD_REPAIRED)->EnableWindow(0);
	       (CEdit*)GetDlgItem(IDC_RD_STATUS)->EnableWindow(0);
		   (CEdit*)GetDlgItem(IDC_RD_SUM)->EnableWindow(0);
		   (CEdit*)GetDlgItem(IDC_RD_REASON)->EnableWindow(0);
		   (CEdit*)GetDlgItem(IDC_RD_REMARK)->EnableWindow(0);
	   	   (CComboBox*)GetDlgItem(IDC_RD_PLACE)->EnableWindow(0);
		   (CComboBox*)GetDlgItem(IDC_RD_REPAIRER)->EnableWindow(0);
		   (CComboBox*)GetDlgItem(IDC_RD_FITTING)->EnableWindow(0);
	       (CDateTimeCtrl*)GetDlgItem(IDC_RD_REPAIRDATE)->EnableWindow(0);
	       m_ID.Empty();
	       m_strName.Empty();
	       m_strAssetID.Empty();
	       m_strSender.Empty();
	       m_strRepairer.Empty();
	       m_strPlace.Empty();
	       m_strReason.Empty();
	       m_strStatus.Empty();
	       m_strFitting.Empty();
	       m_strRemark.Empty();
	       m_RepairDate=CTime::GetCurrentTime();
	       m_SendDate=CTime::GetCurrentTime();
	       UpdateData(0);
		}
	}	
	*pResult = 0;
}

void CRepaired::OnRdRepaired() 
{
    UpdateData(1);
	if(!m_pDatabase->IsOpen()) return;
	if(!m_pRecordset) return;
	if(m_pRecordset->IsOpen()) m_pRecordset->Close();
	CString strSql;
	//检查数据是否正确
	if(m_strPlace.IsEmpty()) {AfxMessageBox("维修地点不能为空!");m_CtrlCBPlace.SetFocus();return;}
	if(m_strReason.IsEmpty()) {AfxMessageBox("故障原因不能为空!");m_CtrlEditReason.SetFocus();return;}
    CPromptDlg dlg;
	dlg.m_Prompt="\n修回这些物品?";
	if(dlg.DoModal()==IDCANCEL) return;
	CString RepairDate,useinfo="在库";
	RepairDate.Format("%d %d %d",m_RepairDate.GetYear(),m_RepairDate.GetMonth(),m_RepairDate.GetDay());//归还日期
	UINT  uSelectedCount = m_CtrlList.GetSelectedCount();
    int  nItemIndex = -1,rd=1;
	CString RepairId;
    // Update all of the selected items.
    if (uSelectedCount > 0)
	{
		while((nItemIndex=m_CtrlList.GetNextItem(nItemIndex,LVNI_SELECTED ) ) != -1 )
		{ 
			RepairId=m_CtrlList.GetItemText ( nItemIndex, 0 );
			m_ID=m_CtrlList.GetItemText ( nItemIndex, 1 );
      	    try{
                 if(m_pDatabase->CanUpdate())
				 {
			   	     strSql.Format("Update 资产信息 set 使用情况='%s' where 资产ID=%d",useinfo,atoi(m_ID));
  			         m_pDatabase->Execute(strSql, dbDenyWrite|dbConsistent);
                     strSql.Format("Update 维修资产 set 维修人='%s',维修地点='%s',故障原因='%s',维修日期='%s',\
						 维修状况='%s',配件名称='%s',金额=%0.3f,备注='%s',是否修完=%d where 维修记录ID=%d",m_strRepairer,\
						 m_strPlace,m_strReason,RepairDate,m_strStatus,m_strFitting,m_dSum,m_strRemark,rd,atoi(RepairId));
					 m_pDatabase->Execute(strSql, dbDenyWrite|dbFailOnError);
				 }
			}  
	       catch(CDaoException* e){
		       e->ReportError();
		       e->Delete();}
		} 
	}
	(CButton*)GetDlgItem(ID_RD_REPAIRED)->EnableWindow(0);
	(CEdit*)GetDlgItem(IDC_RD_STATUS)->EnableWindow(0);
	(CEdit*)GetDlgItem(IDC_RD_SUM)->EnableWindow(0);
	(CEdit*)GetDlgItem(IDC_RD_REASON)->EnableWindow(0);
	(CEdit*)GetDlgItem(IDC_RD_REMARK)->EnableWindow(0);
	(CComboBox*)GetDlgItem(IDC_RD_PLACE)->EnableWindow(0);
	(CComboBox*)GetDlgItem(IDC_RD_REPAIRER)->EnableWindow(0);
	(CComboBox*)GetDlgItem(IDC_RD_FITTING)->EnableWindow(0);
	(CDateTimeCtrl*)GetDlgItem(IDC_RD_REPAIRDATE)->EnableWindow(0);
	Refresh();	
}

⌨️ 快捷键说明

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