资源描述
教职员信息管理系统源码
#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=;
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;
if(0==length)
cout<<"无......"<<endl;
int i;
for(i=0;i<length;i++)
cout<<data[i];
}
void Teacher::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 Teacher::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;
}
istream& operator>>(istream& input,Telem& T)
{
int y,m,d;
cout<<"请输入姓名(以*结尾):"<<endl;
input.getline(T.name,20,'*');
cout<<"请输入性别(以*结尾 男或女):"<<endl;
input.getline(T.sex,10,'*');
cout<<"编号(以*结尾):"<<endl;
input.getline(T.num,20,'*');
cout<<"工资(以*结尾):"<<endl;
input.getline(T.wage,20,'*');
cout<<"请输入出生日期:"<<endl;
input>>y>>m>>d;
T.birthtime.year=(y>=1900&&y<=2100)?y:1900;
T.birthtime.month=(m>=1&&m<=12)?m:1;
T.birthtime.day=(d>=1&&d<=31)?d:1;
cout<<"请输入系别(以*结尾):"<<endl;
input.getline(T.department,20,'*');
cout<<"参与工作时间:"<<endl;
input>>y>>m>>d;
T.worktime.year=(y>=1900&&y<=2100)?y:1900;
T.worktime.month=(m>=1&&m<=12)?m:1;
T.worktime.day=(d>=1&&d<=31)?d:1;
return input;
}
ostream& operator<<(ostream& output,Telem& T)
{
cout<<"姓名:";
output<<T.name<<endl;
cout<<"性别:";
output<<T.sex<<endl;
cout<<"编号:";
output<<T.num<<endl;
cout<<"工资:";
output<<T.wage<<endl;
cout<<"出生日期:";
output<<T.birthtime.year<<" "<<T.birthtime.month<<" "<<T.birthtime.day<<endl;
cout<<"系别:";
output<<T. department<<endl;
cout<<"参与工作时间:";
output<<T.worktime.year<<" "<<T.worktime.month<<" "<<T.worktime.day<<endl;
cout<<"年纪:";
output<<T.year<<endl;
return output;
}
int operator-(Time & t1,Time & t2)
{
return t1.year-t2.year;
}
void Showmenu()
{
cout<<endl;
cout<<" 欢 迎 进 入 教 职 工 信 息 管 理 系 统"<<endl<<endl;
cout<<" 年7月7日公布"<<" 版权全部: swa"<<endl<<endl<<endl;
cout<<" ★ ☆ ★ ☆ ★ ☆ ★ ☆ ★人员信息管理系统★ ☆ ★ ☆ ★ ☆ ★ ☆ ★"<<endl<<endl;
cout<<" ★ 1-从键盘录入全部人员统计 ☆ "<<endl<<endl;
cout<<" ☆ 2-增加一位人员统计 ★"<<endl<<endl;
cout<<" ★ 3-显示全部人员统计 ☆"<<endl<<endl;
cout<<" ☆ 4-按系别输出人员信息(可选)★ "<<endl<<endl;
cout<<" ★ 5-按姓名或年纪检索全部信息☆ "<<endl<<endl;
cout<<" ☆ 6-显示菜单目录 ★ "<<endl<<endl;
cout<<" ★ 7-结束程序运行 ☆ "<<endl<<endl;
cout<<" ★ ☆ ★ ☆ ★ ☆ ★ ☆ ★ ☆ ★ ☆ ★ ☆ ★ ☆ ★ ☆ ★ ☆ ★ ☆ ★ ☆"<<endl;
}
int main()
{
Teacher tea;
worker stu;
People *pt=&tea;
People *ps=&stu;
int c=0,k=0,l=0,i=0;
char nam[20],part[20];
Showmenu();
for(;;)
{
cout<<"请依据菜单实施对应操作: ";
cin>>c;
switch(c)
{
case 1:
{
cout<<" ★ ☆ ★ ☆ ★ ☆ ★录入全部人员统计 ★ ☆ ★ ☆ ★ ☆ ★"<<endl;
cout<<" ★ ☆ ★ ☆ ★从键盘输入老师信息 ☆ ★ ☆ ★ ☆"<<endl;
pt->Addall();
cout<<" ★ ☆ ★ ☆ ★ ☆ ★ ☆ ★ ☆从键盘输入工人信息 ★ ☆ ★ ☆ ★ ☆ ★ ☆ ★ ☆"<<endl;
ps->Addall();
break;
}
case 2:
{
cout<<" ★ ☆ ★ ☆ ★ ☆ ★ ☆从键盘增加一位人员统计 ★ ☆ ★ ☆ ★ ☆ ★ ☆"<<endl;
cout<<" ★ ☆ ★ ☆ ★ ☆ ★ ☆老师操作请按1 工人操作请按2 ★ ☆ ★ ☆ ★ ☆ ★ ☆"<<endl;
cin>>k;
if(1==k)
pt->Add();
else if(2==k)
ps->Add();
else
cout<<"操作错误..."<<endl;
break;
}
case 3:
{
cout<<" ★ ☆ ★ ☆ ★ ☆ ★ ☆ ★ ☆显示全部人员统计 ★ ☆ ★ ☆ ★ ☆ ★ ☆ ★ ☆"<<endl;
pt->Display();
ps->Display();
break;
}
case 4:
{
cout<<" ★ ☆ ★ ☆ ★ ☆ ★ ☆ ★ ☆按部门输出人员信息(可选) ★ ☆ ★ ☆ ★ ☆ ★ ☆ ★ ☆"<<endl;
cout<<" ★ ☆ ★ ☆ ★ ☆老师操作请按1 工人操作请按2 ★ ☆ ★ ☆ ★ ☆"<<endl;
cin>>k;
if(1==k)
{
cout<<"请输入要输出人员系别(以*结尾):"<<endl;cin.getline(part,20,'#');
pt->Displaypart(part);
}
else if(2==k)
{
cout<<"请输入要输出人员系别(以*结尾):"<<endl;cin.getline(part,20,'#');
ps->Displaypart(part);
}
else
cout<<"操作错误......"<<endl;
break;
}
case 5:
{
cout<<" ★ ☆ ★ ☆ ★ ☆ ★按姓名或年纪检索全部信息 ★ ☆ ★ ☆ ★ ☆ ★"<<endl;
cout<<" ★ ☆ ★ ☆ ★ ☆ ★按姓名查找1 按年纪查找2 ★ ☆ ★ ☆ ★ ☆ ★"<<endl;
cin>>k;
if(1==k)
{
cout<<"按姓名查找1 按年纪查找2"<<endl; cin>>l;
if (1==l)
{
cout<<"请输入要查找人员姓名(以*结尾):"<<endl;cin.getline(nam,20,'#');
pt->Findname(nam);
}
else if(2==l)
{
cout<<"请输入要查找人年纪:"<<endl;cin>>i;
pt->Findyear(i);
}
else
cout<<"操作错误......"<<endl;
}
else if(2==k)
{
cout<<"按姓名查找1 按年纪查找2"<<endl; cin>>l;
if (1==l)
{
cout<<"请输入要查找人员姓名(以*结尾):"<<endl;cin.getline(nam,20,'#');
ps->Findname(nam);
}
else if(2==l)
{
cout<<"请输入要查找人年纪:"<<endl;cin>>i;
ps->Findyear(i);
}
else
cout<<"操作错误......"<<endl;
}
else
cout<<"操作错误......"<<endl;
break;
}
case 6:
{
cout<<" ★ ☆ ★ ☆ ★ ☆ ★ ☆ ★ ☆显示菜单目录 ★ ☆ ★ ☆ ★ ☆ ★ ☆ ★ ☆"<<endl;
Showmenu();
break;
}
case 7:
{
展开阅读全文