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(); }