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

📄 p56.cpp

📁 《C++编程指南(续编)》的一些程序源代码
💻 CPP
字号:
#include <fstream.h>
#include <string.h>

char * makeCopy(char * pszS)
{
	char * pszT=new char[strlen(pszS)+1];
	strcpy(pszT,pszS);
	return pszT;
}

class Student
{
public:
	Student(char * pLN,char *pFN,
		int nGrd,unsigned long ulId);
	virtual ~Student();

	void display(ostream& out)const;

	void save(ostream& out);
	
	static Student * restore(istream& in);

protected:
	char * pLName;
	char * pFName;
	int nGrade;
	unsigned long ulID;
};

Student::Student(char * pLN,char *pFN,
				 int nGrd,unsigned long ulId)
{
	pLName=makeCopy(pLN);
	pFName=makeCopy(pFN);

	nGrade=nGrd;
	ulID=ulId;
}
Student::~Student()
{
	delete pLName;
	delete pFName;
}
void Student::display(ostream& out)const
{
	out<<pLName<<","<<pFName
		<<"-"<<ulID
		<<"(Grade"<<nGrade<<")";
}
void Student::save(ostream& out)
{
	out<<pLName<<" "
		<<pFName<<" "
		<<nGrade<<" "
		<<ulID<<"\n";
}
Student * Student::restore(istream& in)
{
	char szLastName[80]={'\0'};
	in.getline(szLastName,sizeof szLastName,' ');
	char szFirstName[80]={'\0'};
	in.getline(szFirstName,sizeof szFirstName,' ');

	int nGrade;
	unsigned long ulID;
	in>>nGrade>>ulID;

	if(strlen(szLastName)==0)
	{
		return (Student *)0;
	}
	if(strlen(szFirstName)==0)
	{
		return (Student *)0;
	}
	if(nGrade<-2||nGrade>12)
	{
		return (Student *)0;
	}
	char buffer[80];
	in.getline(buffer,sizeof buffer);

	return new Student(szLastName,szFirstName,nGrade,ulID);
}
ostream& operator<<(ostream& out,const Student& s)
{
	s.display(out);
	return out;
}
void saveTheStudents(char * pszTempFileName)
{
	ofstream out(pszTempFileName);
	Student sJenny("Davis","Jenny",12,555555555L);
	sJenny.save(out);

	Student sLynn("Prater","Lynn",12,444444444L);
	sLynn.save(out);

	Student sCorder("Corder","Mary",10,333333333L);
	sCorder.save(out);
}
void restoreAndDisplay(char * pszTempFileName)
{
	ifstream in(pszTempFileName);
	int i=0;
	Student * pszStudent;
	for(;;)
	{
		pszStudent=Student::restore(in);
		if(pszStudent==0||in.eof())
		{
			break;
		}
		cout<<"#"<<++i
			<<"-"<<(*pszStudent)
			<<"\n";
		delete pszStudent;
	}
}

int main(int ,char **)
{
	saveTheStudents("D:\\sfile.txt");
	restoreAndDisplay("D:\\sfile.txt");

	return 0;
}

⌨️ 快捷键说明

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