www.gusucode.com > 一个VC++课程管理程序,MSSQL数据库-源码程序 > 一个VC++课程管理程序,MSSQL数据库-源码程序\code\SourceCode\DialogSTAT.cpp

    //Download by http://www.NewXing.com
// DialogSTAT.cpp : implementation file
//

#include "stdafx.h"
#include "YDMS.h"
#include "DialogSTAT.h"

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

/////////////////////////////////////////////////////////////////////////////
// CDialogSTAT dialog


CDialogSTAT::CDialogSTAT(CWnd* pParent /*=NULL*/)
	: CDialog(CDialogSTAT::IDD, pParent)
{
	//{{AFX_DATA_INIT(CDialogSTAT)
	m_AvgL = 0;
	m_NotPassL = 0;
	m_AvgR = 0;
	m_NotPassR = 0;
	m_CouID = _T("");
	m_StuID = _T("");
	m_CouNum = 0;
	m_StuNum = 0;
	//}}AFX_DATA_INIT
}


void CDialogSTAT::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDialogSTAT)
	DDX_Control(pDX, IDC_DATAGRID_STU, m_DataL);
	DDX_Control(pDX, IDC_ADODC_STU, m_AdoL);
	DDX_Control(pDX, IDC_ADODC_COU, m_AdoR);
	DDX_Control(pDX, IDC_DATAGRID_COU, m_DataR);
	DDX_Text(pDX, IDC_EDIT_AVGL, m_AvgL);
	DDX_Text(pDX, IDC_EDIT_NOTPASSL, m_NotPassL);
	DDX_Text(pDX, IDC_EDIT_AVGR, m_AvgR);
	DDX_Text(pDX, IDC_EDIT_NOTPASSR, m_NotPassR);
	DDX_Text(pDX, IDC_EDIT_COUID, m_CouID);
	DDX_Text(pDX, IDC_EDIT_STUID, m_StuID);
	DDX_Text(pDX, IDC_EDIT_COUNTL, m_CouNum);
	DDX_Text(pDX, IDC_EDIT_COUNTR, m_StuNum);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CDialogSTAT, CDialog)
	//{{AFX_MSG_MAP(CDialogSTAT)
	ON_BN_CLICKED(IDC_BUTTON_OK, OnButtonOK)
	ON_BN_CLICKED(IDC_BUTTON_GOBACK, OnButtonGoback)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDialogSTAT message handlers

BOOL CDialogSTAT::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	m_pRecordset.CreateInstance(__uuidof(Recordset));
	try
	{
		//从SQL数据库中打开STUDENTS表
		m_pRecordset->Open("SELECT * FROM STUDENTS", 
							theApp.m_pConnection.GetInterfacePtr(),
							adOpenDynamic,
							adLockOptimistic,
							adCmdText);
	}
	catch(_com_error *e)
	{
		AfxMessageBox(e->ErrorMessage());
	}	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CDialogSTAT::OnButtonOK() 
{
	// TODO: Add your control notification handler code here
	UpdateData(true);
	_variant_t var;
	bool findStuID = false,findCouID = false;
	if(m_StuID != "")
	{
		try
		{
			//先关闭已经打开的记录集对象
			m_pRecordset->Close();
			//从SQL数据库中打开STUDENTS表
			m_pRecordset->Open("SELECT * FROM STUDENTS", 
								theApp.m_pConnection.GetInterfacePtr(),
								adOpenDynamic,
								adLockOptimistic,
								adCmdText);
		}
		catch(_com_error *e)
		{
			AfxMessageBox(e->ErrorMessage());
		}
		if(!m_pRecordset->BOF)
		{
			m_pRecordset->MoveFirst();
		}
		while(!m_pRecordset->adoEOF)
		{
			var = m_pRecordset->GetCollect("StuID");
			if(atoi(m_StuID) == var.iVal)
			{
				findStuID = true;
				QueryStuID();
				break;
			}
			else
			{
				m_pRecordset->MoveNext();
			}
		}
		if(findStuID == false)
		{
			MessageBox("学号输入不正确!");
		}
		UpdateData(true);
	}
	if(m_CouID != "")
	{
	    try
		{
			//先关闭已经打开的记录集对象
			m_pRecordset->Close();
			//从SQL数据库中打开COURSES表
			m_pRecordset->Open("SELECT * FROM COURSES", 
								theApp.m_pConnection.GetInterfacePtr(),
								adOpenDynamic,
								adLockOptimistic,
								adCmdText);
		}
		catch(_com_error *e)
		{
			AfxMessageBox(e->ErrorMessage());
		}
		if(!m_pRecordset->BOF)
		{
			m_pRecordset->MoveFirst();
		}
		while(!m_pRecordset->adoEOF)
		{
			var = m_pRecordset->GetCollect("CouID");
			if(atoi(m_CouID) == var.iVal)
			{
				findCouID = true;
				QueryCouID();
				break;
			}
			else
			{
				m_pRecordset->MoveNext();
			}
		}
		if(findCouID == false)
		{
			MessageBox("课程号输入不正确!");
		}
	}
}

void CDialogSTAT::QueryStuID()
{
	UpdateData(true);
	if(m_StuID != "")
	{
		m_AdoL.SetRecordSource("select StuID as 学号, CHOICES.CouID as 课程号, CouName as 课程名, Score as 分数 from COURSES, CHOICES WHERE COURSES.CouID = CHOICES.CouID and StuID = " + m_StuID);
		m_AdoL.Refresh();		
	}
	CString str;
	_variant_t var;
	int CouNum = 0,AvgL = 0,sum = 0,NotPassL = 0;
	str.Format("select StuID, CHOICES.CouID, CouName, Score from COURSES, CHOICES WHERE COURSES.CouID = CHOICES.CouID and StuID = '%s'",m_StuID);
	try
		{
			//先关闭已经打开的记录集对象
			m_pRecordset->Close();
			//
			//根据新的Sql查询语句,重新打开记录集对象
			//使用记录集对象的Open()函数
			//
			m_pRecordset->Open(str.AllocSysString(),                
						    theApp.m_pConnection.GetInterfacePtr(),
						    adOpenDynamic,
						    adLockOptimistic,
						    adCmdText);
		}
		catch(_com_error *e)
		{
			AfxMessageBox(e->ErrorMessage());
		}
	if(m_pRecordset->adoEOF)
	{
		AfxMessageBox("该生没有选课!");
		m_AdoL.SetRecordSource("select * from STUDENTS");
		m_AdoL.Refresh();
		return;
	}
	if(!m_pRecordset->BOF)
	{
		m_pRecordset->MoveFirst();
	}
	while(!m_pRecordset->adoEOF)
	{
		CouNum ++;
		var = m_pRecordset->GetCollect("Score");
		sum += var.iVal;
		if(var.iVal < 60)
		{
			NotPassL ++;
		}
		m_pRecordset->MoveNext();
	}
	m_CouNum = CouNum;
	if(CouNum != 0)
	{
		AvgL = sum/CouNum;
	}
	m_AvgL = AvgL;
	m_NotPassL = NotPassL;
	UpdateData(false);
}

void CDialogSTAT::QueryCouID()
{
	UpdateData(true);
	if(m_CouID != "")
	{
		m_AdoR.SetRecordSource("select CHOICES.CouID as 课程号, COURSES.CouName as 课程名, CHOICES.StuID as 学号,STUDENTS.StuName as 姓名,CHOICES.Score as 分数 from COURSES, CHOICES,STUDENTS WHERE CHOICES.CouID =COURSES.CouID AND CHOICES.StuID = STUDENTS.StuID AND CHOICES.CouID = " + m_CouID);
		m_AdoR.Refresh();
	}

	CString str;
	_variant_t var;
	int StuNum = 0,AvgR = 0,sum = 0,NotPassR = 0;
	str.Format("select CHOICES.CouID, COURSES.CouName, CHOICES.StuID,STUDENTS.StuName,CHOICES.Score from COURSES, CHOICES,STUDENTS WHERE CHOICES.CouID =COURSES.CouID AND CHOICES.StuID = STUDENTS.StuID AND CHOICES.CouID = '%s'",m_CouID);
	_variant_t RecordsAffected;	
	try
	{
		//先关闭已经打开的记录集对象
		m_pRecordset->Close();
		//利用连接对象的Execute方法执行SQL命令
		m_pRecordset =  theApp.m_pConnection->Execute(str.AllocSysString(),
									   &RecordsAffected,adCmdText);	
	}
	catch(_com_error *e)
	{
		AfxMessageBox(e->ErrorMessage());
	}
	if(m_pRecordset->adoEOF)
	{
		AfxMessageBox("该课没有人选!");
		m_AdoR.SetRecordSource("select * from COURSES");
		m_AdoR.Refresh();
		return;
	}
	m_pRecordset->MoveFirst();
	while(!m_pRecordset->adoEOF)
	{
		StuNum ++;
		var = m_pRecordset->GetCollect("Score");
		sum += var.iVal;
		if(var.iVal < 60)
		{
			NotPassR ++;
		}
		m_pRecordset->MoveNext();
	}
	m_StuNum = StuNum;
	if(StuNum != 0)
	{
		AvgR = sum/StuNum;
	}
	m_AvgR = AvgR;
	m_NotPassR = NotPassR;
	UpdateData(false);
}

void CDialogSTAT::OnButtonGoback() 
{
	// TODO: Add your control notification handler code here
	// TODO: Add your control notification handler code here
	//关闭记录集并退出
	m_pRecordset->Close();
	OnOK();	
}