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

📄 scoredlg.cpp

📁 课程设计的简单Access学生数据库系统
💻 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 + -