}
void Output(ofstream& ofs)
{
ofs
double Incoming()
{
return Salary+Allowance+Hours*20;
}
};
class College
{
private:
Person *PL;
void Clear();
int College::Find(int ID,Person **p1,Person **p2);
public:
College(); //构造
~College(); //析构
void Add(); //增加职工
void Delete(); //删除职工
void Modify(); //修改职工
void Print(); //输出职工信息
void Save(); //职工信息存盘
void Load(); //职工信息装入
};
College::College() //构造函数(创建1个头结点的链表)
{
Person *p=new Teacher;
PL=p;
cout< Load();
}
College::~College() //析构函数(仅保留1个头结点)
{
Person *p=PL;
while(p) //逐个删除结点,包括头结点
{
PL=p->next;
delete p;
p=PL;
}
PL=0;
}
void College::Add() //增加职工
{
cout< //查找尾结点
Person *p=PL;
while(p->next)p=p->next;
int ch;
cout<>ch;
//创建新结点,录入数据,连接到链表
Teacher *pt;
Assistant *pa;
Manager *pm;
Teacher_Assistant *pta;
Manager_Teacher *pmt;
switch(ch)
{
case 0: pt=new Teacher; pt->Input();
p->next=pt;
break;
case 1: pa=new Assistant; pa->Input();
p->next=pa;
break;
case 2: pm=new Manager; pm->Input();
p->next=pm;
break;
case 3: pta=new Teacher_Assistant; pta->Input();
p->next=pta;
break;
case 4: pmt=new Manager_Teacher; pmt->Input();
p->next=pmt;
break;
default: return;
}
}
void College::Clear() //清除所有的职工结点(仅保留头结点)
{
Person *p=PL->next;
while(p)
{
PL->next=p->next;
delete p;
p=PL->next;
}
}
//查找职工结点(返回1-找到,0-未找到.结点指针由p1返回,p2为前看指针)
int College::Find(int ID,Person **p1,Person **p2)
{
*p1=PL->next;
*p2=PL;
while(*p1)
{
if((*p1)->No==ID)
break; //找到
else
{
*p2=*p1; //继续查找
*p1=(*p1)->next;
}
}
return *p1?1:0;
}
void College:elete() //删除职工
{
cout< int No;
Person *p1,*p2;
cout<>No;
if(!Find(No,&p1,&p2))
{
cout< }
else
{
p2->next=p1->next; //连接
delete p1;
cout< }
}
void College::Modify() //修改职工
{
cout< int No;
Person *p1,*p2;
cout<>No;
if(!Find(No,&p1,&p2))
{
cout< }
else
{
p1->Output(); //输出原来的职工信息(做提示)
p1->Input(); //输入新的职工信息(更新)
cout< }
}
void College:rint() //输出职工信息
{
cout< cout< Person *p=PL->next;
if(!p)
{
cout< return;
}
while(p) //遍历链表,输出职工信息
{
p->Output();
p=p->next;
}
}
void College::Save() //职工信息存盘
{
ofstream f("erson.dat",ios:ut); //打开文件
//遍历输出至文件
Person *p=PL->next;
while(p)
{
p->Output(f);
p=p->next;
}
f.close(); //关闭文件
cout
void Collegead() //职工信息装入
{
char buf[81]; //临时空间
int Duty; //人员类型
Person *p2; //新建结点的指针
long t; //读写位置
//清除现有结点(保留头结点)
Clear();
//打开文件
ifstream f("erson.dat",ios::in);
//建立结点,读数据
Person *p=PL; //尾结点指针
while(1)
{
//读取人员类型
t=f.tellg();
f>>buf>>buf>>Duty;
if(f)
{
//根据人员类型创建新结点
switch(Duty)
{
case 0: p2=new Teacher; break;
case 1: p2=new Assistant; break;
case 2: p2=new Manager; break;
case 3: p2=new Teacher_Assistant; break;
case 4: p2=new Manager_Teacher; break;
default: f.close(); return;
}
p->next=p2;
p=p->next;
f.seekg(t);
p->Input(f);
}
else
break;
}
//关闭文件
f.close();
}
void main()
{
char ch;
College c; //定义大学对象
//显示主菜单,接受选择,并分支调用大学类的相应功能的成员函数
do
{
cout< cout< cout< cout< cout< cout< cout< cout< cin>>ch;
switch(ch)
{
case ''1'': c.Add(); break;
case ''2'': c.Delete();break;
case ''3'': c.Modify();break;
case ''4'': c.Print(); break;
case ''5'': c.Save(); break;
case ''6'': c.Load(); break;
}
}while(ch!=''7'');
}