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

📄 queryattenddlg.cpp

📁 基于指纹技术的学生考勤系统
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// QueryAttendDlg.cpp : implementation file
//

#include "stdafx.h"
#include "FPSys.h"
#include "QueryAttendDlg.h"

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

/////////////////////////////////////////////////////////////////////////////
// CQueryAttendDlg dialog
extern CDatabase m_db;
CString Weedday[7]={"一","二","三","四","五","六","日"};
int OpenFrm=1;
extern m_iConnDes;
extern CString FromIDToName(CString tabName,CString attr,int id);	//通过编号获得名字
extern int FromNameToID(CString tabName,CString attr,CString name);	//通过名字获得编号
int FromNameToID(CString tabName,CString attr,CString name);	//通过名字获得编号

CQueryAttendDlg::CQueryAttendDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CQueryAttendDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CQueryAttendDlg)
	m_strAttendTime = _T("");
	//}}AFX_DATA_INIT
}


void CQueryAttendDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CQueryAttendDlg)
	DDX_Control(pDX, IDC_LIST_QATTEND, m_listQAttend);
	DDX_Control(pDX, IDC_LIST_QSTUDENT, m_listQStudent);
	DDX_Control(pDX, IDC_DTP_DOWN, m_dtpDown);
	DDX_Control(pDX, IDC_DTP_UP, m_dtpUp);
	DDX_Control(pDX, IDC_CHECK_TIME, m_checkTime);
	DDX_Control(pDX, IDC_COMBO_QCLASS, m_cQClass);
	DDX_Control(pDX, IDC_COMBO_QDEPART, m_cQDepart);
	DDX_Text(pDX, IDC_EDIT_ATTENDTIME, m_strAttendTime);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CQueryAttendDlg, CDialog)
	//{{AFX_MSG_MAP(CQueryAttendDlg)
	ON_BN_CLICKED(IDC_BTN_DEPARTSET, OnBtnDepartset)
	ON_BN_CLICKED(IDC_BTN_STUDENT, OnBtnStudent)
	ON_BN_CLICKED(IDC_BTN_CLASSROOOM, OnBtnClassrooom)
	ON_BN_CLICKED(IDC_BTN_COURSE, OnBtnCourse)
	ON_BN_CLICKED(IDC_BTN_ATTEND_MANAGE, OnBtnAttendManage)
	ON_BN_CLICKED(IDC_BTN_TERMINAL_CTRL, OnBtnTerminalCtrl)
	ON_BN_CLICKED(IDC_BTN_TERMINAL_DATA, OnBtnTerminalData)
	ON_BN_CLICKED(IDC_BTN_CLASS_SET, OnBtnClassSet)
	ON_CBN_SELCHANGE(IDC_COMBO_QDEPART, OnSelchangeComboQdepart)
	ON_CBN_SELCHANGE(IDC_COMBO_QCLASS, OnSelchangeComboQclass)
	ON_NOTIFY(NM_CLICK, IDC_LIST_QSTUDENT, OnClickListQstudent)
	ON_NOTIFY(NM_RCLICK, IDC_LIST_QATTEND, OnRclickListQattend)
	ON_WM_CLOSE()
	ON_BN_CLICKED(IDC_CHECK_TIME, OnCheckTime)
	ON_EN_CHANGE(IDC_EDIT_ATTENDTIME, OnChangeEditAttendtime)
	ON_BN_CLICKED(IDC_BTN_QUERY, OnBtnQuery)
	ON_BN_CLICKED(IDC_BTN_LOOKCOURSE, OnBtnLookcourse)
	ON_WM_CREATE()
	ON_NOTIFY(NM_RCLICK, IDC_LIST_QSTUDENT, OnRclickListQstudent)
	ON_COMMAND(IDM_DEL, OnDel)
	ON_COMMAND(IDM_DELALL, OnDelall)
	ON_COMMAND(IDM_DELDETAIL, OnDeldetail)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CQueryAttendDlg message handlers
extern int m_iSetType;
void CQueryAttendDlg::OnBtnDepartset() 
{
	// TODO: Add your control notification handler code here
	m_iSetType=1;
	CSetDlg dlg;
	dlg.DoModal();
	
	int Item1=m_cQDepart.GetCurSel();
	int Item2=m_cQClass.GetCurSel();
	int iCount=m_cQClass.GetCount();
	if(iCount!=1)
	{
		for(int i=0;i<iCount;i++)
			m_cQClass.DeleteString(0);
	//	m_cQClass.ResetContent();
	}
	m_cQClass.AddString("所有班级");
	iCount=m_cQDepart.GetCount();
	if(iCount!=1)
	{
		for(int i=0;i<iCount;i++)
			m_cQDepart.DeleteString(0);
		m_cQDepart.ResetContent();
	}
	m_cQDepart.AddString("所有系别");

	InitCtrlData();
	m_cQDepart.SetCurSel(Item1);
	m_cQClass.SetCurSel(Item2);

}

void CQueryAttendDlg::OnBtnStudent() 
{
	// TODO: Add your control notification handler code here
	CStudentInfoDlg dlg;
	dlg.DoModal();
	InitCtrlData();
}

void CQueryAttendDlg::OnBtnClassrooom() 
{
	// TODO: Add your control notification handler code here
	m_iSetType=4;
	CSetDlg dlg;
	dlg.DoModal();
}

void CQueryAttendDlg::OnBtnCourse() 
{
	// TODO: Add your control notification handler code here
	m_iSetType=3;
	CSetDlg dlg;
	dlg.DoModal();
}

void CQueryAttendDlg::OnBtnAttendManage() 
{
	// TODO: Add your control notification handler code here
	CSysSetSheet m_Sheet("系统设置");
	m_Sheet.SetActivePage(0);
	m_Sheet.DoModal();
}

void CQueryAttendDlg::OnBtnTerminalCtrl() 
{
	// TODO: Add your control notification handler code here
	m_iConnDes=1;
	CDevConnectDlg dlg;
	dlg.DoModal();
}

void CQueryAttendDlg::OnBtnTerminalData() 
{
	// TODO: Add your control notification handler code here
	m_iConnDes=2;
	CDevConnectDlg dlg;
	dlg.DoModal();
}

void CQueryAttendDlg::OnBtnClassSet() 
{
	// TODO: Add your control notification handler code here
	m_iSetType=2;
	CSetDlg dlg;
	dlg.DoModal();

	int Item1=m_cQClass.GetCurSel();
	int Item2=m_cQDepart.GetCurSel();
	int iCount=m_cQClass.GetCount();
	if(iCount!=1)
	{
		for(int i=0;i<iCount;i++)
			m_cQClass.DeleteString(0);
			//m_cQClass.ResetContent();
	}
	m_cQClass.AddString("所有班级");
	iCount=m_cQDepart.GetCount();
	if(iCount!=1)
	{
		for(int i=0;i<iCount;i++)
			m_cQDepart.DeleteString(0);
		//m_cQDepart.ResetContent();
	}
	m_cQDepart.AddString("所有系别");

	InitCtrlData();
	m_cQClass.SetCurSel(Item1);
	m_cQDepart.SetCurSel(Item2);
}

BOOL CQueryAttendDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	m_cQDepart.AddString("所有系别");
	m_cQDepart.SetCurSel(0);
	m_cQClass.AddString("所有班级");
	m_cQClass.SetCurSel(0);

	GetDlgItem(IDC_DTP_UP)->EnableWindow(FALSE);
	GetDlgItem(IDC_DTP_DOWN)->EnableWindow(FALSE);

	DWORD dwExStyle=LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_HEADERDRAGDROP|
					LVS_EX_ONECLICKACTIVATE|LVS_EX_UNDERLINEHOT;
	m_listQStudent.SetExtendedStyle(dwExStyle);
	m_listQStudent.InsertColumn(0,"学号",LVCFMT_CENTER,80);
	m_listQStudent.InsertColumn(1,"姓名",LVCFMT_CENTER,80);
	m_listQStudent.InsertColumn(2,"系别",LVCFMT_CENTER,80);
	m_listQStudent.InsertColumn(3,"班级",LVCFMT_CENTER,80);
	m_listQStudent.InsertColumn(4,"考勤次数",LVCFMT_CENTER,80);

	m_listQAttend.SetExtendedStyle(dwExStyle);
	m_listQAttend.InsertColumn(0,"考勤类型",LVCFMT_CENTER,80);
	m_listQAttend.InsertColumn(1,"课程",LVCFMT_CENTER,80);
	m_listQAttend.InsertColumn(2,"星期",LVCFMT_CENTER,80);
	m_listQAttend.InsertColumn(3,"时间",LVCFMT_CENTER,160);	

	LPCTSTR FILE_NAME=".\\time.ini";
	CString strCaption;
	GetPrivateProfileString("Time","Caption","Default Caption",
							strCaption.GetBuffer(MAX_PATH),MAX_PATH,FILE_NAME);

	int Counter=GetPrivateProfileInt("Time","Conter",0,FILE_NAME);
	m_strAttendTime.Format("%d",Counter);

	UpdateData(FALSE);

	InitCtrlData();
	OnSelchangeComboQdepart();
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CQueryAttendDlg::InitCtrlData()
{	
	TRY{
		CString sql;
		sql.Format("select *from tab_Depart");
		CRecordset rs(&m_db);
		rs.Open(CRecordset::dynaset,sql);
		while(!rs.IsEOF()){		//显示系别控件
			int id;
			CString temp,name;
			CDBVariant var;
			rs.GetFieldValue((short)0,var,SQL_C_SLONG);
			if(var.m_dwType!=DBVT_NULL)
				id=var.m_iVal;
			var.Clear();
			temp.Format("%d",id);
				rs.GetFieldValue(1,name);
			m_cQDepart.AddString(name);
			rs.MoveNext();
		}
		rs.Close();

		sql.Format("select *from tab_Class");
		rs.Open(CRecordset::dynaset,sql);
		while(!rs.IsEOF()){		
			int id;
			CString temp,name;
			CDBVariant var;
			rs.GetFieldValue((short)0,var,SQL_C_SLONG);
			if(var.m_dwType!=DBVT_NULL)
				id=var.m_iVal;
			var.Clear();
			temp.Format("%d",id);
				rs.GetFieldValue(1,name);
			m_cQClass.AddString(name);
			rs.MoveNext();
		}
		rs.Close();
	}
	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 CQueryAttendDlg::OnSelchangeComboQdepart() 
{
	// TODO: Add your control notification handler code here
	m_cQClass.Clear();
	int iCount=m_cQClass.GetCount();
	for(int i=0;i<iCount;i++)
	{	
		m_cQClass.DeleteString(0);	//每删除一个,下一个就又变为第一个
	}
	m_cQClass.AddString("所有班级");
	m_cQClass.SetCurSel(0);
	CString departName;

	int departId;
	m_cQDepart.GetLBText(m_cQDepart.GetCurSel(),departName);
	CString sql;
	if(strcmp(departName,"所有系别")==0)
		sql.Format("select *from tab_Class");
	else
	{
		departId=FromNameToID("tab_Depart","DepartName",departName);
		sql.Format("select *from tab_Class where DepartID=%d",departId);
	}
	TRY{
		CRecordset rs(&m_db);
		rs.Open(CRecordset::dynaset,sql);
		CString className;
		while(!rs.IsEOF())
		{
			rs.GetFieldValue(1,className);
			m_cQClass.AddString(className);
			rs.MoveNext();
		}
		m_listQStudent.DeleteAllItems();
		QueryStudentInfo();
	}
	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 CQueryAttendDlg::OnSelchangeComboQclass() 
{
	// TODO: Add your control notification handler code here
	m_listQStudent.DeleteAllItems();
	QueryStudentInfo();
}

void CQueryAttendDlg::QueryStudentInfo()
{
	UpdateData(FALSE);		//用于取得考勤次数条件的值
	CString sql;
	CString departName;
	CString className;
	int departId=-1;		//所有系别时的系别ID
	int classId=-1;			//所有班级时的班级ID
	m_cQDepart.GetLBText(m_cQDepart.GetCurSel(),departName);
//	departId=FromNameToID("tab_depart","DepartName",departName);
	m_cQClass.GetLBText(m_cQClass.GetCurSel(),className);
	
	if(strcmp(departName,"所有系别")!=0)			//如果不是所有系别,获得系别ID
		//m_cQClass.GetLBText(m_cQClass.GetCurSel(),className);
		departId=FromNameToID("tab_depart","DepartName",departName);
	if(strcmp(className,"所有班级")!=0)				//如果不是所有班级,获得班级ID
		classId=FromNameToID("tab_Class","ClassName",className);

	if(departId==-1)	//strcmp(departName,"所有系别")==0)
	{
		if(classId==-1)	//"所有系别","所有班级"
			sql.Format("select s.sid,s.sname,d.departname,c.classname,count(*) from tab_student as s, "
			"tab_AttendInfomation as a,tab_depart as d,tab_class as c"
			" where s.AttendID=a.attendID and s.classid=c.classid and c.departid=d.departid"
			" group by s.sid, a.AttendID,s.sname,d.departname,c.classname");
		else			//"所有系别","某个班级"
			sql.Format("select s.sid,s.sname,d.departname,c.classname,count(*) from tab_student as s, "
			"tab_AttendInfomation as a,tab_depart as d,tab_class as c"
			" where s.AttendID=a.attendID and s.classid=c.classid and c.departid=d.departid and c.classID=%d "
			" group by s.sid, a.AttendID,s.sname,d.departname,c.classname",classId);
	}
	else			//某个系别
	{
		if(classId==-1)	//"某个系别","所有班级"		if(strcmp(className,"所有班级")==0)
			sql.Format("select s.sid,s.sname,d.departname,c.classname,count(*) from tab_student as s, "
			"tab_AttendInfomation as a,tab_depart as d,tab_class as c "
			"where s.AttendID=a.attendID and s.classid=c.classid and c.departid=d.departid and d.departId=%d"
			" group by s.sid, a.AttendID,s.sname,d.departname,c.classname",departId);
		else
			sql.Format("select s.sid,s.sname,d.departname,c.classname,count(*) from tab_student as s, "
			"tab_AttendInfomation as a,tab_depart as d,tab_class as c "
			"where s.AttendID=a.attendID and s.classid=c.classid and c.departid=d.departid and d.departId=%d and c.classID=%d"
			" group by s.sid, a.AttendID,s.sname,d.departname,c.classname",departId,classId);
	}
	TRY{
		CRecordset rs(&m_db);
		rs.Open(CRecordset::dynaset,sql);
	/*	int counter=0;
		while(!rs.IsEOF())
			rs.MoveNext();
		counter=rs.GetRecordCount();
		CString str;
		str.Format("%d",counter);
		MessageBox(str);return;*/
		while(!rs.IsEOF())
		{
			int id,iCount;
			CString sName,sDepartName,sClassName;

⌨️ 快捷键说明

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