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

📄 studentview.cpp

📁 学生成绩管理系统
💻 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 + -