📄 reportclass.cpp
字号:
// ReportClass.cpp : implementation file
//
#include "stdafx.h"
#include "ExMIS.h"
#include "ReportClass.h"
//数学计算类
#include "Math.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CReportClass dialog
CReportClass::CReportClass(CWnd* pParent /*=NULL*/)
: CDialog(CReportClass::IDD, pParent)
{
//{{AFX_DATA_INIT(CReportClass)
m_n100 = 0;
m_n50 = 0;
m_n60 = 0;
m_n70 = 0;
m_n80 = 0;
m_n90 = 0;
m_fAvg = 0.0f;
m_nCount = 0;
m_fDelta = 0.0f;
m_fHigh = 0.0f;
m_fLow = 0.0f;
//}}AFX_DATA_INIT
}
void CReportClass::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CReportClass)
DDX_Text(pDX, IDC_EDIT_100, m_n100);
DDX_Text(pDX, IDC_EDIT_50, m_n50);
DDX_Text(pDX, IDC_EDIT_60, m_n60);
DDX_Text(pDX, IDC_EDIT_70, m_n70);
DDX_Text(pDX, IDC_EDIT_80, m_n80);
DDX_Text(pDX, IDC_EDIT_90, m_n90);
DDX_Text(pDX, IDC_EDIT_AVG, m_fAvg);
DDX_Text(pDX, IDC_EDIT_COUNT, m_nCount);
DDX_Text(pDX, IDC_EDIT_DELTA, m_fDelta);
DDX_Text(pDX, IDC_EDIT_HIGH, m_fHigh);
DDX_Text(pDX, IDC_EDIT_LOW, m_fLow);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CReportClass, CDialog)
//{{AFX_MSG_MAP(CReportClass)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CReportClass message handlers
BOOL CReportClass::OnInitDialog()
{
CDialog::OnInitDialog();
//打开数据集
m_pRS.ADOOpen();
//计算
Calculate(m_strClassID);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
//统计计算
void CReportClass::Calculate(CString classID)
{
//先打开数据集;
m_pRS.ADOOpen();
//清空所有
m_fLow = 0.0f;
m_fHigh = 0.0f;
m_fDelta = 0.0f;
m_fAvg = 0.0f;
m_n90 = 0;
m_n80 = 0;
m_n70 = 0;
m_n60 = 0;
m_n50 = 0;
m_n100 = 0;
m_nCount = 0;
CString sql;
//先提出某门课程的平均分
sql.Format("SELECT Avg(Score) FROM ScoreTab WHERE ClassID='%s'",classID);
m_pRS.ADOExcute(sql);
//因为ACCESS中提取的平均数是字符类型
m_fAvg=atof(m_pRS.GetFieldString(0));
m_fHigh=m_fAvg;
m_fLow=m_fAvg;
//再算出标准差
float sum,score;
sum=0;
sql.Format("SELECT score FROM ScoreTab WHERE ClassID='%s'",classID);
m_pRS.ADOExcute(sql);
m_nCount=m_pRS.nFieldRows;
while(!m_pRS.ADOEOF())
{
score=m_pRS.GetFieldFloat(0);
if(score>m_fHigh) m_fHigh=score;
if(score<m_fLow) m_fLow=score;
sum+=(score-m_fAvg)*(score-m_fAvg);
if(score<50)
m_n50++;
else if(score<60)
m_n60++;
else if(score<70)
m_n70++;
else if(score<80)
m_n80++;
else if(score<90)
m_n90++;
else if(score<=100)
m_n100++;
m_pRS.MoveNext();
}
if(m_pRS.nFieldRows>1){
//标准差公式
m_fDelta=sqrt(sum/(m_pRS.nFieldRows-1));
}else{
m_fDelta=0;
}
UpdateData(false);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -