📄 queryattenddlg.cpp
字号:
// 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 + -