📄 studentview.cpp
字号:
// StudentView.cpp : implementation of the CStudentView class
//
#include "stdafx.h"
#include "Student.h"
#include "StudentDoc.h"
#include "StudentView.h"
#include "DlgSelPeriod.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
BOOL DlgExist = false;
/////////////////////////////////////////////////////////////////////////////
// CStudentView
IMPLEMENT_DYNCREATE(CStudentView, CScrollView)
BEGIN_MESSAGE_MAP(CStudentView, CScrollView)
//{{AFX_MSG_MAP(CStudentView)
ON_COMMAND(ID_SELECT_PERIOD, OnSelectPeriod)
ON_COMMAND(ID_PROCESS_SORT, OnProcessSort)
ON_COMMAND(ID_PROCESS_STATISTICS, OnProcessStatistics)
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CScrollView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CScrollView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CScrollView::OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CStudentView construction/destruction
CStudentView::CStudentView()
{
// TODO: add construction code here
m_nPeriod = -1;
}
CStudentView::~CStudentView()
{
}
BOOL CStudentView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CScrollView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CStudentView drawing
void CStudentView::OnDraw(CDC* pDC)
{
CStudentDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
UpdateGrid(pDC);
UpdateDialog();
}
void CStudentView::OnInitialUpdate()
{
CScrollView::OnInitialUpdate();
}
/////////////////////////////////////////////////////////////////////////////
// CStudentView printing
BOOL CStudentView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CStudentView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CStudentView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CStudentView diagnostics
#ifdef _DEBUG
void CStudentView::AssertValid() const
{
CScrollView::AssertValid();
}
void CStudentView::Dump(CDumpContext& dc) const
{
CScrollView::Dump(dc);
}
CStudentDoc* CStudentView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CStudentDoc)));
return (CStudentDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CStudentView message handlers
void CStudentView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint)
{
// TODO: Add your specialized code here and/or call the base class
CSize sizeTotal;
sizeTotal.cx = 600;
sizeTotal.cy = (lHint + 1) * 20;
SetScrollSizes(MM_TEXT, sizeTotal);
Invalidate();
}
void CStudentView::UpdateGrid(CDC* pDC)
{
CStudentDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
int x[8] = { 0, 75, 200, 300, 375, 450, 525, 600 };
int dy = 20;
COLORREF pOldColor;
// 显示标题
pDC->TextOut(x[0], 0, "序号");
pDC->TextOut(x[1]+18, 0, "学号");
pDC->TextOut(x[2]+7, 0, "姓名");
pDC->TextOut(x[3], 0, "平时");
pDC->TextOut(x[4], 0, "实验");
pDC->TextOut(x[5], 0, "期中");
pDC->TextOut(x[6], 0, "期末");
pDC->TextOut(x[7], 0, "总评");
switch (m_nPeriod)
{
case 0:
pOldColor = pDC->SetTextColor(RGB(255, 0, 0));
pDC->TextOut(x[3], 0, "平时");
pDC->SetTextColor(pOldColor);
break;
case 1:
pOldColor = pDC->SetTextColor(RGB(255, 0, 0));
pDC->TextOut(x[4], 0, "实验");
pDC->SetTextColor(pOldColor);
break;
case 2:
pOldColor = pDC->SetTextColor(RGB(255, 0, 0));
pDC->TextOut(x[5], 0, "期中");
pDC->SetTextColor(pOldColor);
break;
case 3:
pOldColor = pDC->SetTextColor(RGB(255, 0, 0));
pDC->TextOut(x[6], 0, "期末");
pDC->SetTextColor(pOldColor);
break;
case 4:
pOldColor = pDC->SetTextColor(RGB(255, 0, 0));
pDC->TextOut(x[7], 0, "总评");
pDC->SetTextColor(pOldColor);
break;
}
// 显示学生数据
if (pDoc->m_studentlist.GetnStudent() == 1 && pDoc->m_studentlist.GetpStudent()[0].GetID() == "")
return;
int y = 0;
char str[32];
for (int i = 0; i < pDoc->m_studentlist.GetnStudent(); i ++)
{
y += dy;
pDC->TextOut(x[0], y, itoa(i + 1, str, 10));
pDC->TextOut(x[1], y, pDoc->m_studentlist.GetpStudent()[i].GetID().data());
pDC->TextOut(x[2], y, pDoc->m_studentlist.GetpStudent()[i].GetName().data());
sprintf(str, "%4.0f", pDoc->m_studentlist.GetpStudent()[i].GetExercise());
pDC->TextOut(x[3], y, str);
sprintf(str, "%4.0f", pDoc->m_studentlist.GetpStudent()[i].GetReport());
pDC->TextOut(x[4], y, str);
sprintf(str, "%4.0f", pDoc->m_studentlist.GetpStudent()[i].GetMidterm());
pDC->TextOut(x[5], y, str);
sprintf(str, "%4.0f", pDoc->m_studentlist.GetpStudent()[i].GetTerminal());
pDC->TextOut(x[6], y, str);
sprintf(str, "%4.1f", pDoc->m_studentlist.GetpStudent()[i].GetMark());
pDC->TextOut(x[7], y, str);
switch (m_nPeriod)
{
case 0:
pOldColor = pDC->SetTextColor(RGB(255, 0, 0));
sprintf(str, "%4.0f", pDoc->m_studentlist.GetpStudent()[i].GetExercise());
pDC->TextOut(x[3], y, str);
pDC->SetTextColor(pOldColor);
break;
case 1:
pOldColor = pDC->SetTextColor(RGB(255, 0, 0));
sprintf(str, "%4.0f", pDoc->m_studentlist.GetpStudent()[i].GetReport());
pDC->TextOut(x[4], y, str);
pDC->SetTextColor(pOldColor);
break;
case 2:
pOldColor = pDC->SetTextColor(RGB(255, 0, 0));
sprintf(str, "%4.0f", pDoc->m_studentlist.GetpStudent()[i].GetMidterm());
pDC->TextOut(x[5], y, str);
pDC->SetTextColor(pOldColor);
break;
case 3:
pOldColor = pDC->SetTextColor(RGB(255, 0, 0));
sprintf(str, "%4.0f", pDoc->m_studentlist.GetpStudent()[i].GetTerminal());
pDC->TextOut(x[6], y, str);
pDC->SetTextColor(pOldColor);
break;
case 4:
pOldColor = pDC->SetTextColor(RGB(255, 0, 0));
sprintf(str, "%4.1f", pDoc->m_studentlist.GetpStudent()[i].GetMark());
pDC->TextOut(x[7], y, str);
pDC->SetTextColor(pOldColor);
break;
}
}
}
void CStudentView::OnSelectPeriod()
{
// TODO: Add your command handler code here
CStudentDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CDlgSelPeriod dlg;
if (dlg.DoModal() == IDOK)
m_nPeriod = dlg.m_nPeriod;
Invalidate();
}
void CStudentView::OnProcessSort()
{
// TODO: Add your command handler code here
CStudentDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
pDoc->m_studentlist.BubSort(m_nPeriod);
Invalidate();
}
void CStudentView::OnProcessStatistics()
{
// TODO: Add your command handler code here
pDlg = new CDlgStatistics;
pDlg->Create(IDD_DIALOG_STATISTICS);
pDlg->ShowWindow(SW_NORMAL);
UpdateDialog();
}
void CStudentView::UpdateDialog()
{
CStudentDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CString str;
if (DlgExist && pDoc->m_studentlist.GetnStudent() > 0 && m_nPeriod >= 0)
{
pDlg->m_Average = pDoc->m_studentlist.Average(m_nPeriod);
pDlg->m_StdDev = pDoc->m_studentlist.StdDev(m_nPeriod);
pDlg->m_ID = pDoc->m_studentlist.FindMax(m_nPeriod).GetID().data();
pDlg->m_Name = pDoc->m_studentlist.FindMax(m_nPeriod).GetName().data();
pDlg->m_Exercise = pDoc->m_studentlist.FindMax(m_nPeriod).GetExercise();
pDlg->m_Report = pDoc->m_studentlist.FindMax(m_nPeriod).GetReport();
pDlg->m_Midterm = pDoc->m_studentlist.FindMax(m_nPeriod).GetMidterm();
pDlg->m_Terminal = pDoc->m_studentlist.FindMax(m_nPeriod).GetTerminal();
pDlg->m_Mark = pDoc->m_studentlist.FindMax(m_nPeriod).GetMark();
for (int i = 0; i < 10; i ++)
{
str.Format("%2d~%3d %2d", pDoc->m_studentlist.Distribution(m_nPeriod)[i].x, pDoc->m_studentlist.Distribution(m_nPeriod)[i].x + 10, pDoc->m_studentlist.Distribution(m_nPeriod)[i].y);
pDlg->m_Distrib.AddString(str);
}
pDlg->UpdateData(FALSE);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -