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

📄 student.cpp

📁 《C++编程指南(续编)》的一些程序源代码
💻 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 + -