📄 scoredlg.cpp
字号:
// ScoreDlg.cpp : implementation file
//
#include "stdafx.h"
#include "sm.h"
#include "class.h"
#include "ScoreList.h"
#include "UnitclassTree.h"
#include "ScoreDlg.h"
#include "ScoreSetDlg.h"
#include "searchdlg.h"
#include "Table.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CScoreDlg dialog
//##ModelId=40A481F500DA
CScoreDlg::CScoreDlg(CWnd* pParent /*=NULL*/)
: CDialog(CScoreDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CScoreDlg)
m_SubjectSel = -1;
//}}AFX_DATA_INIT
}
//##ModelId=40A481F5011A
void CScoreDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CScoreDlg)
DDX_Control(pDX, IDC_LIST4, m_List);
DDX_Control(pDX, IDC_TREE1, m_Tree);
DDX_Control(pDX, IDC_DTPICKER1, m_Begin);
DDX_Control(pDX, IDC_DTPICKER2, m_End);
DDX_CBIndex(pDX, IDC_SUBJECT_COMBO, m_SubjectSel);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CScoreDlg, CDialog)
//{{AFX_MSG_MAP(CScoreDlg)
ON_BN_CLICKED(IDC_PRINT, OnPrint)
ON_BN_CLICKED(IDC_NEW, OnNew)
ON_BN_CLICKED(IDC_EDIT, OnEdit)
ON_BN_CLICKED(IDC_DELETE, OnDelete)
ON_BN_CLICKED(IDC_SEARCH, OnSearch)
ON_WM_DESTROY()
ON_WM_CANCELMODE()
ON_NOTIFY(TVN_SELCHANGED, IDC_TREE1, OnSelchangedTree)
ON_CBN_SELCHANGE(IDC_SUBJECT_COMBO, OnSelchangeSubjectCombo)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CScoreDlg message handlers
//##ModelId=40A481F5012A
void CScoreDlg::OnPrint()
{
// TODO: Add your control notification handler code here
}
//##ModelId=40A481F50139
void CScoreDlg::OnNew()
{
long score = 0, class_id, student_id = 0, subject_id = 0, teaching_id;
COleDateTime dt(CTime::GetCurrentTime().GetTime());
CComboBox cb;
cb.Attach(GetDlgItem(IDC_SUBJECT_COMBO)->m_hWnd);
subject_id = cb.GetItemData(cb.GetCurSel());
cb.Detach();
if(pTree->GetSelectType()==1)
{
class_id = pTree->GetSelectClass().ID;
CScoreSetDlg dlg(class_id, &dt, &student_id, &subject_id, &score);
if(IDOK==dlg.DoModal())
{
teaching_id = GetTeachingID(class_id, subject_id);
if(teaching_id==-1)
{
AfxMessageBox("找不到这个课程记录!");
return;
}
Score sc(0, dt, student_id, teaching_id, score);
CTable t("score");
t.Open();
sc.AddNew(t.GetRS());
LoadScore();
pList->SetSelectedScore(sc.ID);
}
}
else
AfxMessageBox("必须选择一个班级!!");
}
//##ModelId=40A481F50148
void CScoreDlg::OnEdit()
{
long score = 0, class_id, student_id = 0, subject_id = 0, teaching_id;
COleDateTime dt(CTime::GetCurrentTime().GetTime());
if(pTree->GetSelectType()==1)
{
class_id = pTree->GetSelectClass().ID;
if(pList->IsSelected())
{
long id = pList->GetSelectData().Data.ID;
student_id = pList->GetSelectData().Data.StudentID;
subject_id = pList->GetSelectData().SubjectID;
score = pList->GetSelectData().Data.ScoreValue;
CScoreSetDlg dlg(class_id, &dt, &student_id, &subject_id, &score);
if(IDOK==dlg.DoModal())
{
teaching_id = GetTeachingID(class_id, subject_id);
if(teaching_id==-1)
{
AfxMessageBox("找不到这个课程记录!");
return;
}
Score sc(id, dt, student_id, teaching_id, score);
CTable t("score");
t.Open();
sc.Update(t.GetRS());
LoadScore();
pList->SetSelectedScore(id);
}
}
else
AfxMessageBox("必须选择一个记录!!");
}
else
AfxMessageBox("必须选择一个班级!!");
}
//##ModelId=40A481F5014A
void CScoreDlg::OnDelete()
{
if(pTree->GetSelectType()==1)
{
if(pList->IsSelected())
{
CTable t("score");
t.Open();
long i= pList->GetSelected();
pList->GetSelectData().Data.Delete(t.GetRS());
LoadScore();
pList->SetSelected(i-1);
}
else
AfxMessageBox("必须选择一个记录!!");
}
else
AfxMessageBox("必须选择一个班级!!");
}
//##ModelId=40A481F50157
void CScoreDlg::OnSearch()
{
CString s;
CSearchDlg dlg("请输入要查找的学生:", s);
if(IDOK==dlg.DoModal())
pList->Search(s);
}
//##ModelId=40A481F50159
void CScoreDlg::OnPrintAll()
{
// TODO: Add your control notification handler code here
}
//##ModelId=40A481F50167
void CScoreDlg::OnCancel()
{
// TODO: Add extra cleanup here
CDialog::OnCancel();
}
//##ModelId=40A481F50169
BOOL CScoreDlg::OnInitDialog()
{
CDialog::OnInitDialog();
pTree = new UnitClassTree(&m_Tree);
pTree->Load();
m_Tree.Expand(m_Tree.GetRootItem(), TVE_EXPAND);
pTree->SetSelectUnit(1);
pList = new ScoreList(&m_List);
pList->Init();
CTime t = CTime::GetCurrentTime();
CTimeSpan cts(60, 0, 0, 0);
m_End.SetYear(COleVariant((short)t.GetYear()));
m_End.SetMonth(COleVariant((short)t.GetMonth()));
m_End.SetDay(COleVariant((short)t.GetDay()));
t -= cts;
m_Begin.SetYear(COleVariant((short)t.GetYear()));
m_Begin.SetMonth(COleVariant((short)t.GetMonth()));
m_Begin.SetDay(COleVariant((short)t.GetDay()));
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
//##ModelId=40A481F50177
void CScoreDlg::OnDestroy()
{
CDialog::OnDestroy();
delete pList;
delete pTree;
// TODO: Add your message handler code here
}
//##ModelId=40A481F50179
void CScoreDlg::OnCancelMode()
{
CDialog::OnCancelMode();
// TODO: Add your message handler code here
}
BEGIN_EVENTSINK_MAP(CScoreDlg, CDialog)
//{{AFX_EVENTSINK_MAP(CScoreDlg)
ON_EVENT(CScoreDlg, IDC_DTPICKER1, 2 /* Change */, OnChangeDtpicker, VTS_NONE)
ON_EVENT(CScoreDlg, IDC_DTPICKER2, 2 /* Change */, OnChangeDtpicker, VTS_NONE)
//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()
//##ModelId=40A481F50186
void CScoreDlg::OnSelchangedTree(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
if(pTree->GetSelectType()==1)
{
LoadSubject(pTree->GetSelectClass().ID);
LoadScore();
}
else
{
CComboBox cb;
cb.Attach(GetDlgItem(IDC_SUBJECT_COMBO)->m_hWnd);
while(0!=cb.GetCount())
cb.DeleteString(0);
cb.Detach();
}
*pResult = 0;
}
//##ModelId=40A481F50197
void CScoreDlg::OnChangeDtpicker()
{
LoadScore();
}
//##ModelId=40A481F500CB
void CScoreDlg::LoadScore()
{
COleDateTime bt(m_Begin.GetYear().intVal, m_Begin.GetMonth().intVal, m_Begin.GetDay().intVal, 0, 0, 0);
COleDateTime et(m_End.GetYear().intVal, m_End.GetMonth().intVal, m_End.GetDay().intVal, 23, 59, 59);
if(pTree->GetSelectType()==1)
{
CComboBox cb;
cb.Attach(GetDlgItem(IDC_SUBJECT_COMBO)->m_hWnd);
long s_id = cb.GetItemData(cb.GetCurSel());
cb.Detach();
pList->Load(pTree->GetSelectClass().ID, bt.Format("%Y-%m-%d %H:%M:%S"), et.Format("%Y-%m-%d %H:%M:%S"), s_id);
}
}
//##ModelId=40A481F500BD
void CScoreDlg::LoadSubject(long class_id)
{
CString sql = "SELECT subject_id, subject from teaching, subject \
where teaching.subject_id = subject.id and class_id = ", s;
s.Format("%ld", class_id);
sql += s;
CDaoQueryDef tq(&theDatabase);
tq.Create(NULL, sql);
CDaoRecordset RS;
RS.Open(&tq);
CComboBox cb;
cb.Attach(GetDlgItem(IDC_SUBJECT_COMBO)->m_hWnd);
while(0!=cb.GetCount())
cb.DeleteString(0);
cb.AddString("全部科目");
cb.SetItemData(0, 0);
int i=1;
while(!RS.IsEOF())
{
cb.AddString(V_BSTRT(&RS.GetFieldValue("subject")));
cb.SetItemData(i++, RS.GetFieldValue("subject_id").lVal);
RS.MoveNext();
}
cb.SetCurSel(0);
cb.Detach();
RS.Close();
tq.Close();
}
//##ModelId=40A481F500AD
long CScoreDlg::GetTeachingID(long class_id, long subject_id)
{
CString s1, s2, sql;
s1.Format("%ld", class_id);
s2.Format("%ld", subject_id);
sql = "select id from teaching where class_id = " + s1 +" and subject_id = " + s2;
CDaoQueryDef QD(&theDatabase);
QD.Create(NULL, sql);
CDaoRecordset RS;
RS.Open(&QD);
long t_id;
if(!RS.IsEOF())
t_id = RS.GetFieldValue("id").lVal;
else
t_id = -1;
RS.Close();
QD.Close();
return t_id;
}
//##ModelId=40A481F50199
void CScoreDlg::OnSelchangeSubjectCombo()
{
LoadScore();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -