📄 class.cpp
字号:
#include "class.h"
#include <assert.h>
Class::Class(const char* name,int id)
:name(name),id(id)
{
total = 0; //刚建班时人数为0
}
Class::Class(const Class &cl)
:name(cl.name),id(cl.id),total(cl.total),students(cl.students)
{
}
Class::~Class()
{
}
const int Class::getTotal()const
{
return total;
assert(total==students.size());
}
const string Class::getName()const
{
return name;
}
const int Class::getId()const
{
return id;
}
void Class::setId(const int id)
{
Class::id = id;
}
void Class::setName(const char *n)
{
assert(n!=NULL);
name = n;
}
void Class::addStudent( Student &s)
{
students.push_back(s);
total++;
assert(total==students.size());
}
bool Class::deleteStudent( Student & s)
{
return deleteStudent(s.getId());
}
bool Class::deleteStudent( int id)
{
list<Student>::iterator iBegin = students.begin();
list<Student>::iterator iEnd = students.end();
while((*iBegin).getId() != id)
{
iBegin++;
}
if(iBegin==iEnd)return false;
else
{
students.erase(iBegin);
return true;
}
}
void Class::setCompareFlag( COMPARE flag)
{
list<Student>::iterator iBegin = students.begin();
list<Student>::iterator iEnd = students.end();
while (iBegin!=iEnd)
{
(*iBegin).setFlag(flag);
iBegin++;
}
}
void Class::sort()
{
students.sort();
}
float Class::getSumScoreOfClass()
{
list<Student>::iterator iBegin = students.begin();
list<Student>::iterator iEnd = students.end();
float sumScore=0.0f;
while (iBegin!=iEnd)
{
sumScore+=(*iBegin).getSumScore();
iBegin++;
}
return sumScore;
}
float Class::getSumScoreOfCourse(const Course&c)
{
float sumScoreOfCourse=0.0f;
list<Student>::iterator isBegin = students.begin();
list<Student>::iterator isEnd = students.end();
while (isBegin!=isEnd)
{
list<Course>::iterator icBegin = (*isBegin).courses.begin();
list<Course>::iterator icEnd = (*isBegin).courses.end();
while (icBegin!=icEnd)
{
if( (*icBegin)==c )
{
sumScoreOfCourse+=(*icBegin).getScore();
break;
}
icBegin++;
}
isBegin++;
}
return total>0?sumScoreOfCourse:-0.1f;
}
float Class::getPassRateOfCourse(const Course &c)
{
list<Student>::iterator isBegin = students.begin();
list<Student>::iterator isEnd = students.end();
int passNum=0;
int num=0;
while (isBegin!=isEnd)
{
list<Course>::iterator icBegin = (*isBegin).courses.begin();
list<Course>::iterator icEnd = (*isBegin).courses.end();
while (icBegin!=icEnd)
{
if( (*icBegin)==c )
{
num++;
if ((*icBegin).getScore()>=60.0)
{
passNum++;
}
break;
}
icBegin++;
}
isBegin++;
}
return total>0?(float)passNum/num:-1.0f;
}
int Class::getStudentNumberOfCourse(const Course &c)
{
list<Student>::iterator isBegin = students.begin();
list<Student>::iterator isEnd = students.end();
int passNum=0;
while (isBegin!=isEnd)
{
list<Course>::iterator icBegin = (*isBegin).courses.begin();
list<Course>::iterator icEnd = (*isBegin).courses.end();
while (icBegin!=icEnd)
{
if( (*icBegin)==c )
{
passNum++;
break;
}
icBegin++;
}
isBegin++;
}
return passNum;
}
float Class::getAvgScoreOfCourse(const Course &c)
{
float sumScore=getSumScoreOfCourse(c);
int num = getStudentNumberOfCourse(c);
if (sumScore<0||total==0)
{
return -1.0f;
}
else return sumScore/num;
}
void Class::write( ostream& os)
{
assert(total==students.size());
os<<name<<'#';
os<<id<<'#';
os<<total<<'#';
list<Student>::iterator iBegin = students.begin();
list<Student>::iterator iEnd = students.end();
while(iBegin!=iEnd)
{
(*iBegin).write(os);
iBegin++;
}
}
void Class::read( istream & is)
{
char tpName[20];
is.get(tpName,20,'#');
name = tpName;
is.ignore();
is>>id;
is.ignore();
is>>total;
is.ignore();
Student student("");
if(!Class::students.empty())Class::students.clear();
for(int i=0;i<total;i++)
{
student.read(is);
Class::students.push_back(student);
}
}
bool Class::operator ==(const Class & cl)
{
return (id==cl.id);
}
void Class::printBase()
{
cout<<setw(20)<<id<<setw(20)<<name<<setw(20)<<total;
}
void Class::printDetail()
{
list<Student>::iterator iter=students.begin();
while (iter!=students.end())
{
(*iter).printBase();
cout<<endl;
iter++;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -