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

📄 devicedbsdlg.cpp

📁 通过VC++6.0连接数据库,实现的是一个公司设备管理系统,采购设备,借出和归还设备的详细记录,提高库存管理.
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		sql.Format("update device_info_tab "
			"set device_name = '%s',"
			"description = '%s',"
			"oper_date = '%s',"
			"buyer = '%s' "	
			"where device_code = '%s'",m_strDeviceName,
			m_strDescription,strDate,m_strBuyer,strDeviceCode);
		TRACE(sql);
		m_db.ExecuteSQL(sql);
		//更新列表框控件的值.
		m_listDevice.SetItemText(nItem,1,m_strDeviceName);
		m_listDevice.SetItemText(nItem,2,strDate);	
		m_listDevice.SetItemText(nItem,3,m_strBuyer);	
		m_listDevice.SetItemText(nItem,4,m_strDescription);	
		//更新设备名称和设备编号组合框的数据
		RefreshComboNameData();
	}
	CATCH(CDBException,ex)
	{
		AfxMessageBox (ex->m_strError);
		AfxMessageBox (ex->m_strStateNativeOrigin);		
	}
	AND_CATCH(CException,e)
	{
		TCHAR szError[100];
		e->GetErrorMessage(szError,100);
		AfxMessageBox (szError);
	}
	END_CATCH			
}

void CDeviceDBSDlg::OnBtnDeviceDel() 
{
	// TODO: Add your control notification handler code here
	int nItem = m_listDevice.GetNextItem(-1, LVNI_SELECTED);
	//如果没有选择要修改的纪录,返回.
	if(nItem == -1){
		AfxMessageBox("没有选择要修改的设备信息");
		return;
	}
	CString strDeviceCode = m_listDevice.GetItemText(nItem,0);
	TRY{
		CString deletedSql;
		//首先删除设备编号为strDeviceCode的所有借出信息
		deletedSql.Format("delete from device_lend_info_tab where device_code = '%s'",strDeviceCode);
		m_db.ExecuteSQL(deletedSql);
		//然后删除设备编号为strDeviceCode设备信息记录
		deletedSql.Format("delete from device_info_tab where device_code = '%s'",strDeviceCode);
		m_db.ExecuteSQL(deletedSql);
		//从界面中删除记录信息.
		m_listDevice.DeleteItem(nItem);
		//更新设备名称和设备编号组合框的数据
		RefreshComboNameData();
	}
	CATCH(CDBException,ex)
	{
		AfxMessageBox (ex->m_strError);
		AfxMessageBox (ex->m_strStateNativeOrigin);		
	}
	AND_CATCH(CException,e)
	{
		TCHAR szError[100];
		e->GetErrorMessage(szError,100);
		AfxMessageBox (szError);
	}
	END_CATCH		
}

void CDeviceDBSDlg::OnCloseupComboName() 
{
	// TODO: Add your control notification handler code here
 	TRY{
		CRecordset rs(&m_db);
		//打开所有的设备信息记录.
		CString sql;
		CString strSelected;
		//获取当前选择项目
		int nIndex = m_comboName.GetCurSel();
		//如果没有选择,退出
		if(nIndex == -1)
			return;
		//获取当前选择的设备名称
		m_comboName.GetLBText(nIndex,strSelected);
		//如果选项为空,退出
		if(strSelected.IsEmpty())
			return;
		//打开所有设备名称为strSelected的设备编号,因为会有相同的设备,但是
		//设备的编号是不一样的,这样比较方便检索
		sql.Format("select device_code from device_info_tab "
			"where device_name = '%s'",strSelected);
		rs.Open(CRecordset::dynaset,sql);
		m_comboCode.ResetContent();
		while (!rs.IsEOF()) {
			CString strCode;
			//获取设备编号字段值
			rs.GetFieldValue((short)0, strCode);
			//向设备编号组合框添加名称为前面选择的设备名称的所有设备编号.
			m_comboCode.AddString(strCode);
			rs.MoveNext();	
		}
		m_comboCode.SetCurSel(0);
	}
	CATCH(CDBException,ex)
	{
		AfxMessageBox (ex->m_strError);
		AfxMessageBox (ex->m_strStateNativeOrigin);		
	}
	AND_CATCH(CMemoryException,pEx)
	{
		pEx->ReportError();
		AfxMessageBox ("memory exception");
	}
	AND_CATCH(CException,e)
	{
		TCHAR szError[100];
		e->GetErrorMessage(szError,100);
		AfxMessageBox (szError);
	}
	END_CATCH  			
}

void CDeviceDBSDlg::RefreshComboNameData()
{
	m_comboName.ResetContent();
	TRY{
		CRecordset rs(&m_db);
		//打开所有的设备名称记录.
		rs.Open(CRecordset::dynaset, "select distinct device_name from device_info_tab");
		bool a;
		a=rs.IsEOF()?true:false;
		while (!rs.IsEOF()) {
			CString strName;
			//获取设备名称字段值
			rs.GetFieldValue((short)0, strName);
			//向设备名称组合框添加所有设备名称.
			m_comboName.AddString(strName);
			rs.MoveNext();	
		}
		rs.Close();
		m_comboName.SetCurSel(0);
		//更新设备编号组合框的数据
		CString strSelected;
		if(!a){
			m_comboName.GetLBText(0,strSelected);
			CString sql;
			sql.Format("select device_code from device_info_tab "
				"where device_name = '%s'",strSelected);
			rs.Open(CRecordset::dynaset,sql);
			m_comboCode.ResetContent();
			while (!rs.IsEOF()) {
				CString strCode;
				//获取设备编号字段值
				rs.GetFieldValue((short)0, strCode);
				//向设备编号组合框添加名称为前面选择的设备名称的所有设备编号.
				m_comboCode.AddString(strCode);
					rs.MoveNext();	
			}
			
		}
		m_comboCode.SetCurSel(0);
	}
	CATCH(CDBException,ex)
	{
		AfxMessageBox (ex->m_strError);
		AfxMessageBox (ex->m_strStateNativeOrigin);		
	}
	AND_CATCH(CMemoryException,pEx)
	{
		pEx->ReportError();
		AfxMessageBox ("memory exception");
	}
	AND_CATCH(CException,e)
	{
		TCHAR szError[100];
		e->GetErrorMessage(szError,100);
		AfxMessageBox (szError);
	}
	END_CATCH   		
}


void CDeviceDBSDlg::OnBtnLend() 
{
	// TODO: Add your control notification handler code here
	
	if(! helper.isOperAllowed(OPERATOR) ){
		AfxMessageBox("本用户权限不允许这个操作");
		return;
	};
	//从界面控件中获取信息更新到控件变量中.
	if(!UpdateData())
		return;
	if(m_strBorrower.IsEmpty()){
		MessageBox("请输入借书人的姓名");
		return;
	}
	if(m_strSelectedName.IsEmpty()){
		MessageBox("请选择设备名称");
		return;
	}
	if(m_strSelectedCode.IsEmpty()){
		MessageBox("请选择设备编号");
		return;
	}
	TRY{
		CRecordset rs(&m_db);
		CString sql;
		//获取需要借出设备的状态信息.
		sql.Format("Select lend_status,lend_id from device_info_tab "
			"where device_code = '%s'",m_strSelectedCode);
		rs.Open(CRecordset::snapshot, sql);
		int lendStatus = 0;
		int lendID = 0 ;
		//如果有记录,说明设备已经借出,提示用户谁借了设备.
		if(!rs.IsEOF()) {
			CDBVariant var;
			rs.GetFieldValue((short)0, var, SQL_C_SLONG);
			if (var.m_dwType != DBVT_NULL)	
				lendStatus = var.m_iVal;
			var.Clear();
			//获取借出ID,从而可以获取借出人的信息
			rs.GetFieldValue(1, var, SQL_C_SLONG);
			if (var.m_dwType != DBVT_NULL)	
				lendID = var.m_iVal;
		}
		rs.Close();	
		//如果已经借出
		if(lendStatus == 1){
			//获取借出人的姓名
			sql.Format("Select borrower from device_lend_info_tab "
				"where lend_id = %d",lendID);
			rs.Open(CRecordset::snapshot, sql);
			CString borrower;
			if(!rs.IsEOF()) {
				rs.GetFieldValue((short)0, borrower);
			}
			rs.Close();
			CString msg = "设备已经借出,借出人为:";
			msg += borrower;
			//提示用户,谁已经借出了设备.
			MessageBox(msg);
			return;
		}

		//借出时间为当前时间.
		CTime dt = CTime::GetCurrentTime();
        CString currentDT = dt.Format("%Y-%m-%d");
        //插入借出信息记录. 
		sql.Format("Insert into device_lend_info_tab("
			"device_code,borrower,borrow_date,"
			"return_date) "
			"VALUES("
			"'%s','%s','%s',null)",
			m_strSelectedCode,
			m_strBorrower,currentDT);
		TRACE(sql);
		m_db.ExecuteSQL(sql);

		//修改设备信息表中的借出状态和借出ID.
		sql.Format("update device_info_tab "
			"set lend_status = 1,"
			"lend_id = %d "
			"where device_code = '%s'",lendID,m_strSelectedCode);
		TRACE(sql);
		m_db.ExecuteSQL(sql);
		//向界面中插入新的设备信息.
		InsertLendInfoItem(lendID,m_strSelectedCode,
			m_strSelectedName,m_strBorrower,currentDT,"") ;
	}
	CATCH(CDBException,ex)
	{
		AfxMessageBox (ex->m_strError);
		AfxMessageBox (ex->m_strStateNativeOrigin);		
	}
	AND_CATCH(CException,e)
	{
		TCHAR szError[100];
		e->GetErrorMessage(szError,100);
		AfxMessageBox (szError);
	}
	END_CATCH			
}

void CDeviceDBSDlg::OnBtnReturn() 
{
	// TODO: Add your control notification handler code here
	//从界面控件中获取信息更新到控件变量中.
	if(!helper.isOperAllowed(OPERATOR))
	{
		AfxMessageBox("本用户权限不允许这个操作");
		return;
	}
	if(!UpdateData())
		return;
	if(m_strSelectedName.IsEmpty()){
		MessageBox("请选择设备名称");
		return;
	}
	if(m_strSelectedCode.IsEmpty()){
		MessageBox("请选择设备编号");
		return;
	}
	TRY{
		CRecordset rs(&m_db);
		CString sql;
		//查询设备是否已经借出,如果没有借出,则提示"此设备没有借出,归还失败"信息.
		sql.Format("Select lend_status,lend_id from device_info_tab "
			"where device_code = '%s'",m_strSelectedCode);
		rs.Open(CRecordset::snapshot, sql);
		int lendStatus = 0;
		int lendID = 0 ;
		if(!rs.IsEOF()) {
			CDBVariant var;
			rs.GetFieldValue((short)0, var, SQL_C_SLONG);
			if (var.m_dwType != DBVT_NULL)	
				lendStatus = var.m_iVal;
			var.Clear();
			rs.GetFieldValue(1, var, SQL_C_SLONG);
			if (var.m_dwType != DBVT_NULL)	
				lendID = var.m_iVal;
		}
		CString c;
		c.Format("lend id = %d",lendID);
		//MessageBox(c);
		rs.Close();		
		if(lendStatus == 0){
			MessageBox("此设备没有借出,归还失败");
			return;
		}
		
		//设置借出信息表中的归还日期为当前日期.
		COleDateTime dt = COleDateTime::GetCurrentTime();
        CString currentDT = dt.Format("%Y-%m-%d");
        //插入借出信息记录. 
		sql.Format("update device_lend_info_tab "
			"set return_date = '%s' "
			"where lend_id = %d",currentDT,lendID);
		TRACE(sql);
	//	AfxMessageBox(sql);
		m_db.ExecuteSQL(sql);
		//设置设备信息表中的借出状态为0,借出ID为0,该设备可以被下次借出.
		sql.Format("update device_info_tab "
			"set lend_status = 0,"
			"lend_id = 0 "
			"where device_code = '%s'",m_strSelectedCode);
		TRACE(sql);
		m_db.ExecuteSQL(sql);
		//设置标志,表示在借出信息的列表框控件中是否含有要归还的设备
		//信息,如果有就为1,否则为0
		int flag = 0 ;
		//查询借出信息控件上是否含有借出ID为LendID的借出信息,
		//如果有直接更新界面上的归还日期值.
		for(int i = 0  ; i< m_listLend.GetItemCount(); i++){
			int id = atoi(m_listLend.GetItemText(i,0));
			if(id == lendID){
				m_listLend.SetItemText(i,5,currentDT);
				flag = 1;
			}
		}
		//如果列表框控件中没有借出信息,则在借出信息列表框控件中的最后一行插入
		//借出信息,归还日期为当前日期.
		if(flag == 0){
			//从数据库中获取借出日期信息.
			sql.Format("Select borrower,borrow_date from device_lend_info_tab "
				"where lend_id = %d",lendID);
			rs.Open(CRecordset::snapshot, sql);
			CString borrower,date;
			if(!rs.IsEOF()) {
				rs.GetFieldValue((short)0, borrower);
				rs.GetFieldValue(1, date);
			}
			rs.Close();	
			InsertLendInfoItem(lendID,m_strSelectedCode,
				m_strSelectedName,borrower,date,currentDT) ;
		}
	}
	CATCH(CDBException,ex)
	{
		AfxMessageBox (ex->m_strError);
		AfxMessageBox (ex->m_strStateNativeOrigin);		
	}
	AND_CATCH(CException,e)
	{
		TCHAR szError[100];
		e->GetErrorMessage(szError,100);
		AfxMessageBox (szError);
	}
	END_CATCH			
}

void CDeviceDBSDlg::OnBtnLendList() 
{
	// TODO: Add your control notification handler code here
	//创建借出信息对话框实列.
	CLendInfoDlg dlg;
	//把数据库的指针传入对话框中.
	dlg.m_pDB = &m_db;
	//打开借出信息对话框.
	dlg.DoModal();	
}

void CDeviceDBSDlg::OnBtnFrequencyList() 
{
	// TODO: Add your control notification handler code here
	//创建借出频率信息对话框实列.
	CFreqListDlg dlg;
	//把数据库的指针传入对话框中.
	dlg.m_pDB = &m_db;
	//打开借出频率信息对话框.
	dlg.DoModal();	
}

void CDeviceDBSDlg::OnBtnLentDevice() 
{
	// TODO: Add your control notification handler code here
	//创建未归还信息对话框实列.
	CDeviceNRtDlg dlg;
	//把数据库的指针传入对话框中.
	dlg.m_pDB = &m_db;
	//打开未归还信息对话框.
	dlg.DoModal();		
}

void CDeviceDBSDlg::OnOK() 
{
	// TODO: Add extra validation here
//	CDialog::OnOK();
}

void CDeviceDBSDlg::OnSysExit() 
{
	// TODO: Add your control notification handler code here
	m_db.Close();
	CDialog::OnOK();	
}

void CDeviceDBSDlg::OnCancel() 
{
	// TODO: Add extra cleanup here
	
	CDialog::OnCancel();
}

void CDeviceDBSDlg::OnEditProfile() 
{

	//创建编辑用户资料对话框实列.
	CEditProfile dlg;
	//把数据库的指针传入对话框中.
	dlg.m_pDB = &m_db;
	//打开编辑用户资料对话框.
	dlg.DoModal();		
}

void CDeviceDBSDlg::OnEditUser() 
{
	if(!helper.isOperAllowed(LEADER)){
		AfxMessageBox("本用户权限不允许该操作");
		return ;
	}
	//创建编辑用户对话框实列.
	CEditUser dlg;
	//把数据库的指针传入对话框中.
	dlg.m_pDB = &m_db;
	//打开编辑用户对话框.
//	dlg.initData();
	dlg.DoModal();	
}

⌨️ 快捷键说明

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