#include<iostream.h>
#include<string.h>
#include<fstream.h>
#include<stdlib.h>
#define maxsize 100
fstream iofile; //文件指针
class Time //时间类
{
public:
int year;
int month;
int day;
};
class Telem //个人信息
{
public:
char name[20];
char sex[10];
Time birthtime; //组合Time类
char num[20];
char wage[20];
Time worktime;
int year;
char department[20];
friend istream& operator>>(istream& input,Telem& T);
friend ostream& operator<<(ostream& output,Telem& T);
friend int operator-(Time & t1,Time & t2);
};
class People:virtual public Telem //雇员类
{
public:
People();
virtual void AddF()=0; //添加
virtual void Addall()=0;
virtual void Add()=0;
virtual void Display(); //输出数组的内容
virtual void Displaypart(char p[]);
virtual void Findname(char n[]);
virtual void Findyear(int );
virtual void Del(char n[])=0;
virtual void Del(int );
protected:
Telem data[maxsize];
Time now;
int length;
};
class Teacher:virtual public People //派生虚基类
{
public:
virtual void AddF();
virtual void Addall();
virtual void Add();
virtual void Display();
virtual void Del(int i);
virtual void Del(char n[]);
};
class worker:virtual public People //派生虚基类
{
public:
virtual void AddF();
virtual void Addall();
virtual void Add();
virtual void Display();
virtual void Del(int i);
virtual void Del(char n[]);
};
People::People() //系统自动生成的构造函数
{
length=0;
now.year=2010;
now.month=7;
now.day=6;
}
void People::Display() //引用
{
int i;
for(i=0;i<length;i++)
cout<<data[i];
}
void People::Displaypart(char p[])//引用数组
{
int i,c;
for(i=0;i<length;i++)
if(strcmp(data[i].wage,p)==0)
{
cout<<"输出选择姓名1 性别2 编号3 工资4 出生日期5 工作时间6 年龄7 系别8 退出选择9"<<endl;
while(cin>>c)
{
switch(c)
{ case 1: cout<<"姓名:"<<data[i].name<<endl;break;
case 2: cout<<"性别:"<<data[i].sex<<endl;break;
case 3: cout<<"编号:"<<data[i].num<<endl;break;
case 4: cout<<"工资:"<<data[i].wage<<endl;break;
case 5: cout<<"出生日期:"<<data[i].birthtime.year<<" "<<data[i].birthtime.month<<" "<<data[i].birthtime.day<<" "<<endl;break;
case 6: cout<<"工作时间:"<<data[i].worktime.year<<" "<<data[i].worktime.month<<" "<<data[i].worktime.day<<" "<<endl;break;
case 7: cout<<"年龄:"<<data[i].year<<endl;break;
case 8: cout<<"系别:"<<data[i].department<<endl;break;
case 9: goto loop;
default:cout<<"操作错误......"<<endl;
}
}
loop:;
}
}
void People::Findname(char n[]) //引用
{
int i;
for(i=0;i<length;i++)
if(strcmp(data[i].name,n)==0) //对象引用
cout<<data[i];
}
void People::Findyear(int y)
{
int i;
for(i=0;i<length;i++)
if(data[i].year==y)
cout<<data[i];
}
void People::Del(int i)
{
int j;
if(i<1||i>length)
cout<<"不存在第"<<i<<"个元素";
for(j=i;j<length;j++)
data[j-1]=data[j];
length--;
}
void worker::AddF()
{
int flag=0;
iofile.open("worker_information.txt",ios::in|ios::binary); //文件的打开与关闭
while(iofile.seekg(ios::cur))
{
iofile.seekg(length*sizeof(data[length]),ios::beg);
iofile.read((char*)&data[length],sizeof(data[length])); //文件的随机访问
length++;
if(length==maxsize)
{
flag=1;
goto loop;
}
}
People::Del(length);
cout<<"添加人员信息成功......"<<endl;
loop:
if(1==flag)
cout<<"人员信息储存空间已满......"<<endl;
iofile.close();
}
void worker::Addall()
{
char ans;
int flag=0;
iofile.open("worker_information.txt",ios::out|ios::binary);
do
{
cin>>data[length];
data[length].year=now-data[length].birthtime;
iofile.write((char*)&data[length],sizeof(data[length]));
cout<<"添加人员信息成功......"<<endl;
length++;
if(length==maxsize)
{
flag=1;
goto loop;
}
cout<<"contine(Y|N)?";
cin>>ans;
}while('y'==ans||'Y'==ans);
loop:
if(1==flag)
cout<<"人员信息储存空间已满......"<<endl;
iofile.close();
}
void worker::Add()
{
int flag=0;
iofile.open("worker_information.txt",ios::app|ios::out|ios::binary);
if(length==maxsize)
{
flag=1;
goto loop;
}
cin>>data[length];
data[length].year=now-data[length].birthtime;
iofile.write((char*)&data[length],sizeof(data[length]));
cout<<"添加人员信息成功......"<<endl;
length++;
loop:
if(1==flag)
cout<<"人员信息储存空间已满......"<<endl;
iofile.close();
}
void worker::Display()
{
cout<<" ★ ☆ ★ ☆ ★ ☆ ★ ☆ ★ ☆工人信息 ★ ☆ ★ ☆ ★ ☆ ★ ☆ ★ ☆"<<endl;
if(0==length)
cout<<"无......"<<endl;
int i;
for(i=0;i<length;i++)
cout<<data[i];
}
void worker::Del(char n[])
{
int i,j,k;
for(i=0;i<length;i++)
if(strcmp(data[i].name,n)==0)
{
k=i+1;break;
}
if(k<1)
cout<<"不存在姓名"<<n<<"的人员信息";
for(j=k;j<length;j++)
data[j-1]=data[j];
length--;
cout<<"删除人员信息成功......"<<endl;
}
void worker::Del(int i)
{
int j;
if(i<1||i>length)
cout<<"不存在第"<<i<<"个元素";
for(j=i;j<length;j++)
data[j-1]=data[j];
length--;
cout<<"删除成功......"<<endl;
}
void Teacher::AddF()
{
int flag=0;
iofile.open("Teacher_information.txt",ios::in|ios::binary);
while(iofile.seekg(sizeof(data[length]),ios::cur))
{
if(iofile.seekg(length*sizeof(data[length]),ios::beg))
iofile.read((char*)&data[length],sizeof(data[length]));
else
break;
length++;
if(length==maxsize)
{
flag=1;
goto loop;
}
}
People::Del(length);
cout<<"添加人员信息成功......"<<endl;
loop:
if(1==flag)
cout<<"人员信息储存空间已满......"<<endl;
iofile.close();
}
void Teacher::Addall()
{
char ans;
int flag=0;
iofile.open("Teacher_information.txt",ios::in|ios::out|ios::binary);
do
{
cin>>data[length];
data[length].year=now-data[length].birthtime;
iofile.write((char*)&data[length],sizeof(data[length]));
cout<<"添加人员信息成功......"<<endl;
length++;
if(length==maxsize)
{
flag=1;
goto loop;
}
cout<<"contine(Y|N)?";
cin>>ans;
}while('y'==ans||'Y'==ans);
loop:
if(1==flag)
cout<<"人员信息储存空间已满......"<<endl;
iofile.close();
}
void Teacher::Add()
{
int flag=0;
iofile.open("Teacher_information.txt",ios::app|ios::out|ios::binary);
if(length==maxsize)
{
flag=1;
goto loop;
}
cin>>data[length];
data[length].year=now-data[length].birthtime;
iofile.write((char*)&data[length],sizeof(data[length]));
cout<<"添加人员信息成功......"<<endl;
length++;
loop:
if(1==flag)
cout<<"人员信息储存空间已满......"<<endl;
iofile.close();
}
void Teacher::Display()
{
cout<<" ★ ☆ ★ ☆ ★ ☆ ★ ☆ ★ ☆教师信息 ★ ☆ ★ ☆ ★ ☆ ★ ☆ ★ ☆"<<endl;