📄 studentlist.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 + -