📄 student.cpp
字号:
#include <iostream>
#include <string>
#include "student.h"
#include "XError.h"
using namespace std;
Student::Student(const char * pLN,const char * pFN,
int nGrd,unsigned long ulId)
:sLName(pLN),sFName(pFN)
{
nGrade=nGrd;
ulID=ulId;
}
Student::Student(const std::string& sLN,const std::string& sFN,
int nGrd,unsigned long ulId)
:sLName(sLN),sFName(sFN)
{
nGrade=nGrd;
ulID=ulId;
}
void Student::isLegal()const
{
if(sLName.length()==0||sFName.length()==0)
{
throw XInvalidStudent(this,"Illegal name");
}
if(nGrade<-2||nGrade>12)
{
throw XInvalidStudent(this,"Invalid grade");
}
if(ulID<100000000L)
{
throw XInvalidStudent(this,"Invalid SSID");
}
}
void Student::display(ostream& out)const
{
out<<sLName<<" , "<<sFName
<<" - "<<ulID
<<" (Grade "<<nGrade<<")";
if(out.fail())
{
throw XFileError("Student::display",
"out file",
"display failure",
XFileError::FILE_WRITE_ERROR);
}
}
void Student::save(ostream& out)const
{
isLegal();
out<<"<"<<sLName<<">"
<<"<"<<sFName<<">"
<<nGrade<<" "
<<ulID<<"\n";
if(out.fail())
{
throw XFileError("Student::save",
"out file",
"display failure",
XFileError::FILE_WRITE_ERROR);
}
}
Student * Student::restore(istream& in)
{
Student * pStudent=0;
try
{
if(in.get()!='<')
{
if(in.eof())
{
return (Student *)0;
}
throw XError("Student::restore",
"Illegal initial char");
}
string sLastName;
getline(in,sLastName,'>');
if(in.get()!='<')
{
throw XError("Student::restore",
"Illegal format");
}
string sFirstName;
getline(in,sFirstName,'>');
int nGrade;
unsigned long ulID;
in>>nGrade>>ulID;
in.get();
pStudent=new Student(sLastName,sFirstName,
nGrade,ulID);
pStudent->isLegal();
}
catch (XError& xerror)
{
cout<<"Error during restore : "<<endl;
xerror.display(cout);
delete pStudent;
throw XError("Student::restore",
"error reported from restore");
}
return pStudent;
}
ostream& operator<<(ostream& out,const Student& s)
{
s.display(out);
return out;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -