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

📄 studentlist.cpp

📁 学生成绩管理系统
💻 CPP
字号:
#include "stdafx.h"
#include <cmath>
#include "StudentList.h"

StudentList::StudentList(Student2* pStudent, int nStudent)
{
	m_pStudent = new Student2[nStudent];
	for (int i = 0; i < nStudent; i ++)
		m_pStudent[i] = pStudent[i];
	m_nStudent = nStudent;
}

StudentList::StudentList()
{
	m_pStudent = NULL;
	m_nStudent = 0;
}

StudentList::StudentList(const StudentList& studlist)
{
	m_nStudent = studlist.m_nStudent;
	m_pStudent = new Student2[m_nStudent];
	for (int i = 0; i < studlist.m_nStudent; i ++)
		m_pStudent[i] = studlist.m_pStudent[i];
}

StudentList& StudentList::operator=(const StudentList& studlist)
{
	m_nStudent = studlist.m_nStudent;
	for (int i = 0; i < studlist.m_nStudent; i ++)
		m_pStudent[i] = studlist.m_pStudent[i];
	return *this;
}

StudentList::~StudentList()
{
	delete[] m_pStudent;
	m_nStudent = 0;
}

void StudentList::SetStudentList(Student2* pStudent, int nStudent)
{
	if (m_pStudent != NULL)
		delete[] m_pStudent;
	m_pStudent = new Student2[nStudent];
	for (int i = 0; i < nStudent; i ++)
		m_pStudent[i] = pStudent[i];
	m_nStudent = nStudent;
}

Student2* StudentList::GetpStudent() const
{
	return m_pStudent;
}

int StudentList::GetnStudent()
{
	return m_nStudent;
}

float StudentList::Average(int period)					// 求平均分数
{
	float marksum = 0.;
	for (int i = 0; i < m_nStudent; i ++)
	{
		switch (period)
		{
		case MARK:										// 总评分数
			m_pStudent[i].CalcMark();
			marksum += m_pStudent[i].GetMark();
			break;
		case EXERCISE:									// 平时作业分数
			marksum += m_pStudent[i].GetExercise();
			break;
		case REPORT:									// 实验报告分数
			marksum += m_pStudent[i].GetReport();
			break;
		case MIDTERM:									// 期中考试分数
			marksum += m_pStudent[i].GetMidterm();
			break;
		case TERMINAL:									// 期末考试分数
			marksum += m_pStudent[i].GetTerminal();
			break;
		}
	}
	return marksum / m_nStudent;
}

float StudentList::StdDev(int period)					// 求标准偏差
{
	float mark, sumark = 0., sumsqr = 0.;
	for (int i = 0; i < m_nStudent; i ++)
	{
		switch (period)
		{
		case MARK:										// 总评分数
			m_pStudent[i].CalcMark();
			mark = m_pStudent[i].GetMark();
			break;
		case EXERCISE:									// 平时作业分数
			mark = m_pStudent[i].GetExercise();
			break;
		case REPORT:									// 实验报告分数
			mark = m_pStudent[i].GetReport();
			break;
		case MIDTERM:									// 期中考试分数
			mark = m_pStudent[i].GetMidterm();
			break;
		case TERMINAL:									// 期末考试分数
			mark = m_pStudent[i].GetTerminal();
			break;
		}
		sumark += mark;
		sumsqr += mark * mark;
	}
	return sqrt((m_nStudent * sumsqr - sumark * sumark) / (m_nStudent * (m_nStudent - 1)));
}

XY* StudentList::Distribution(int period)					// 计算分数分布
{
	XY* xy = new XY[10];
	int i;

	for (i = 0; i < 10; i++)
	{
		xy[i].x = i * 10;
		xy[i].y = 0;
	}

	for (i = 0; i < m_nStudent; i ++)
	{
		switch (period)
		{
		case MARK:
			m_pStudent[i].CalcMark();
			xy[int(m_pStudent[i].GetMark() / 10.)].y ++;
			break;
		case EXERCISE:
			xy[int(m_pStudent[i].GetExercise() / 10.)].y ++;
			break;
		case REPORT:
			xy[int(m_pStudent[i].GetReport() / 10.)].y ++;
			break;
		case MIDTERM:
			xy[int(m_pStudent[i].GetMidterm() / 10.)].y ++;
			break;
		case TERMINAL:
			xy[int(m_pStudent[i].GetTerminal() / 10.)].y ++;
			break;
		}
	}
	return xy;
}

Student2 StudentList::FindMax(int period)				// 找到最高分得主
{
	Student2 student("", "", 0., 0., 0., 0.);
	for (int i = 0; i < m_nStudent; i ++)
	{
		switch (period)
		{
		case MARK:										// 总评分数
			m_pStudent[i].CalcMark();
			if (m_pStudent[i].GetMark() > student.GetMark())
				student = m_pStudent[i];
			break;
		case EXERCISE:									// 平时作业分数
			if (m_pStudent[i].GetExercise() > student.GetExercise())
				student = m_pStudent[i];
			break;
		case REPORT:									// 实验报告分数
			if (m_pStudent[i].GetReport() > student.GetReport())
				student = m_pStudent[i];
			break;
		case MIDTERM:									// 期中考试分数
			if (m_pStudent[i].GetMidterm() > student.GetMidterm())
				student = m_pStudent[i];
			break;
		case TERMINAL:									// 期末考试分数
			if (m_pStudent[i].GetTerminal() > student.GetTerminal())
				student = m_pStudent[i];
			break;
		}
	}
	return student;
}

void StudentList::BubSort(int period)					// 按分数高→低排序
{
	int i, j;
	for (i = m_nStudent; i > 1; i --)
	{
		for (j = 1; j < i; j ++)
		{
			switch (period)
			{
			case MARK:									// 总评分数
				m_pStudent[j - 1].CalcMark();
				m_pStudent[j].CalcMark();
				if (m_pStudent[j - 1].GetMark() < m_pStudent[j].GetMark())
				{
					swap(m_pStudent[j - 1], m_pStudent[j]);
				}
				break;
			case EXERCISE:								// 平时作业分数
				if (m_pStudent[j - 1].GetExercise() < m_pStudent[j].GetExercise())
				{
					swap(m_pStudent[j - 1], m_pStudent[j]);
				}
				break;
			case REPORT:								// 实验报告分数
				if (m_pStudent[j - 1].GetReport() < m_pStudent[j].GetReport())
				{
					swap(m_pStudent[j - 1], m_pStudent[j]);
				}
				break;
			case MIDTERM:								// 期中考试分数
				if (m_pStudent[j - 1].GetMidterm() < m_pStudent[j].GetMidterm())
				{
					swap(m_pStudent[j - 1], m_pStudent[j]);
				}
				break;
			case TERMINAL:								// 期末考试分数
				if (m_pStudent[j - 1].GetTerminal() < m_pStudent[j].GetTerminal())
				{
					swap(m_pStudent[j - 1], m_pStudent[j]);
				}
				break;
			}
		}
	}
}

void StudentList::swap(Student2& a, Student2& b)		// 定义交换函数
{
	Student2 t;
	t = a;
	a = b;
	b = t;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -