一、基本要求
为方便管理某单位职工档案信息,编写一个职工档案管理系统软件。系统记录必须包括职工的ID号、姓名以及性别、出生年月、职称、工资、所在单位、在岗情况等。
二、基本管理功能
- 添加:增加一名职工的档案信息到管理系统中。
- 查询:可以根据职工姓名或ID号查找某人的相关信息,若找到则显示其信息。
- 修改:在管理系统中修改一名职工的记录。
- 保存:将所有职工档案信息保存在一个文件中(数据库文件或普通的文本文件)。
- 读取:从文件中读取已保存了数据。
- 删除:从管理系统中删除一条记录。
- 恢复:能恢复被删除的记录。
- 统计:(A)计算平均工资及总工资,(B)统计男/女职工各占总职工的人数的百分比、统计职工平均年龄和单位在岗职工人数占总职工人数的百分比、统计副高以上职工人数占总职工人数的百分比。(C)以表格形式打印全部职工档案信息表。
- 其他:可以根据自己的思路设计其他功能。
三、部分代码解释
1.class类
Person类,定义职工的基本信息。
class Person{
protected:
char name[10];
char sex[5];
int age;
char birthday[20];
int idnumber;
public:
Person(){}
~Person(){}
};
Worker类,继承自Person类,添加了新的特性。
class Worker:public Person{
public:
friend ostream & operator << (ostream &scout, Worker &w);
friend istream & operator >> (istream &scin, Worker &w);
friend class Worker_List;
Worker(){}
~Worker(){}
private:
char profession[10];
int wage;
char workplace[20];
char condition[10];
};
Worker_List类,包含了需要用到的功能函数。
class Worker_List{
private:
Worker worker[100]; //把职工定义成数组形式
Worker Have_Delete[100]; //存储被删除的数据
public:
friend ostream & operator << (ostream &scout, Worker &w);
friend istream & operator >> (istream &scin, Worker &w);
Worker_List(){}
~Worker_List(){}
void add(); //录入职工信息
void find(); //查询职工信息
void change(); //修改职工信息
void save_file(); //以文件形式保存职工信息
void read_file(); //以文件形式读取职工信息
void delete_inf(); //删除职工信息
void release(); //恢复删除的职工信息
void statistic(); //统计职工信息
};
2.输入输出流重载
输出流重载,集中同时输出职工的全部信息。
ostream & operator << (ostream &scout, Worker &w)
{
scout<<"职工号:"<<w.idnumber<<endl;
scout<<"职工姓名:"<<w.name<<endl;
scout<<"职工性别:"<<w.sex<<endl;
scout<<"职工出生日期:"<<w.birthday<<endl;
scout<<"职工年龄:"<<w.age<<endl;
scout<<"职工职称:"<<w.profession<<endl;
scout<<"职工工资:"<<w.wage<<endl;
scout<<"职工所在单位:"<<w.workplace<<endl;
scout<<"职工在岗情况:"<<w.condition<<endl;
return scout;
}
输入流重载, 集中同时输入职工的全部信息。
istream & operator >> (istream &scin, Worker &w)
{
cout<<"请输入职工姓名:"; scin>>w.name;
cout<<"请输入职工性别:"; scin>>w.sex;
cout<<"请输入职工出生年月:"; scin>>w.birthday;
cout<<"请输入职工年龄:"; scin>>w.age;
cout<<"请输入职工职称:"; scin>>w.profession;
cout<<"请输入职工工资:"; scin>>w.wage;
cout<<"请输入职工所在单位:"; scin>>w.workplace;
cout<<"请输入职工在岗情况:"; scin>>w.condition;
return scin;
}
3.功能函数
添加职工信息。
void Worker_List::add()
{
int id,i;
cout<<"请输入职工信息:"<<endl<<"请输入职工号:";
cin>>id;
for(i=0;i<num;i++)
while(id==worker[i].idnumber) //判断是否有重复的职工号
{
cout<<"此职工号已存在,请重新输入:"<<endl<<"请输入职工号:";
cin>>id;
}
worker[num].idnumber = id;
cin >> worker[num];
++num;
n=num;
}
查询职工信息,分为职工号查询和职工姓名查询两种方式。
void Worker_List::find()
{
int c;
if(num <= 0)
{
cout<<"没有录入职工信息,系统将返回主菜单,请先录入!"<<endl;
return;
}
else {
cout<<"-----------------"<<endl;
cout<<"请选择查询方式:"<<endl;
cout<<"1.按职工号查询"<<endl;
cout<<"2.按职工姓名查询"<<endl;
cout<<"-----------------"<<endl;
cin>>c;
while(c<1||c>2)
{
cout<<"输入有误,请重新输入:"<<endl;
cin>>c;
}
if(c==1)
{
int id;
cout<<"请输入要查询的职工的工号:"<<endl;
cin>>id;
int j1,k1,f1=1;
while(f1)
{
for(j1=0;j1<n;j1++)
{
if(id==worker[j1].idnumber)
{
f1=0;
k1=j1;
cout<<"查询的职工信息如下:"<<endl;
cout << worker[k1] << endl;
return;
}
}
if(f1)
{
f1=0;
cout<<"该公司不存在此职工的信息!!"<<endl;
return;
}
}
}
if(c==2)
{
char na[10];
cout<<"请输入要查询的职工的姓名:"<<endl;
cin>>na;
int j2,k2,f2=1;
while(f2)
{
for(j2=0;j2<n;j2++)
{
if(strcmp(worker[j2].name,na)==0)
{
f2=0;
k2=j2;
cout<<"查询的职工信息如下:"<<endl;
cout << worker[k2] << endl;
return;
}
}
if(f2)
{
f2=0;
cout<<"该公司不存在此职工的信息!!"<<endl;
return;
}
}
}
}
}
修改职工信息。
void Worker_List::change()
{
if(num <= 0)
{
cout<<"没有录入职工信息,系统将返回主菜单,请先录入!"<<endl;
return;
}
else{
cout<<"请输入需要修改信息职工的职工号:"<<endl;
int id;
cin>>id;
int j,k,f=1;
while(f)
{
for(j=0;j<n;j++)
if(id==worker[j].idnumber)
{f=0; k=j; break;}
if(f)
{
cout<<"此职工信息不存在,请重新输入:"<<endl;
j=0;
cin>>id;
}
}
cout<<"***********************"<<endl;
cout<<"1.修改职工号"<<endl;
cout<<"2.修改职工姓名"<<endl;
cout<<"3.修改职工性别"<<endl;
cout<<"4.修改职工出生日期"<<endl;
cout<<"5.修改职工职称"<<endl;
cout<<"6.修改职工工资"<<endl;
cout<<"7.修改职工所在单位"<<endl;
cout<<"8.修改职工在岗情况"<<endl;
cout<<"9.修改职工年龄"<<endl;
cout<<"**********************"<<endl;
cout<<"请选择功能前的编号1~9"<<endl;
int b;
cin>>b;
while(b<1||b>9)
{ cout<<"输入有误,请重新输入:"<<endl; cin>>b;}
switch(b)
{
case 1:{cin>>worker[k].idnumber;break;}
case 2:{cin>>worker[k].name;break;}
case 3:{cin>>worker[k].sex;break;}
case 4:{cin>>worker[k].birthday;break;}
case 5:{cin>>worker[k].profession;break;}
case 6:{cin>>worker[k].wage;break;}
case 7:{cin>>worker[k].workplace;break; }
case 8:{cin>>worker[k].condition;break;}
case 9:{cin>>worker[k].age;break;}
}
cout << "修改信息保存成功" << endl;
}
}
4.保存与读取文件操作
保存文件函数。
void Worker_List::save_file()
{
if(num <= 0)
{
cout<<"没有录入职工信息,系统将返回主菜单,请先录入!"<<endl;
return;
}
else{
ofstream fout;
fout.open("职工信息.txt",ios::out);
cout<<"数据保存成功!"<<endl;
for(int i=0;i<n;i++)
{
fout<<worker[i].idnumber<< endl;
fout<<worker[i].name<< endl;
fout<<worker[i].sex<< endl;
fout<<worker[i].birthday<< endl;
fout<<worker[i].age<< endl;
fout<<worker[i].profession<< endl;
fout<<worker[i].wage<< endl;
fout<<worker[i].workplace<< endl;
fout<<worker[i].condition<< endl;
}
fout.close();
}
}
读取文件函数。
void Worker_List::read_file()
{
if(num <= 0)
{
cout<<"没有录入职工信息,系统将返回主菜单,请先录入!"<<endl;
return;
}
else{
Worker *p = new Worker [num]; //动态开辟内存空间
ifstream iout;
iout.open("职工信息.txt",ios::in);
if(!iout.is_open())
{
cout << "文件打开失败" << endl;
return;
}
cout<<"数据读取成功!"<<endl;
for(int i=0;i<num;i++)
{
iout>>p[i].idnumber;
iout>>p[i].name;
iout>>p[i].sex;
iout>>p[i].birthday;
iout>>p[i].age;
iout>>p[i].profession;
iout>>p[i].wage;
iout>>p[i].workplace;
iout>>p[i].condition;
}
iout.close();
for(int i=0;i<num;i++)
cout << p[i] << endl;
delete [] p;
}
}
5.主函数
main主函数当中包含登录函数和菜单选择函数。
登录函数。
void Log_in()
{
char pass[80],count[100];
int oi = 0;
cout << "用户名:" ;
cin >> count;
while (1)
{
cout << "请输入密码" ;
cin >> pass;
oi++;
if (strcmp(pass, "0") != 0)
cout << "密码错误,请再试一次" << endl;
else break;
if (oi == 3)exit(0);
}
if (oi >= 3)
cout << "请稍后再尝试" << endl;
else cout << "欢迎进入职工档案管理系统" << endl;
}
菜单选择函数。
void Menu()
{
int i;
Worker_List p;
do {
cout << endl;
cout << "******************************************************************" << endl;
cout << "** 1---添加职工信息 **" << endl;
cout << "** 2---查询职工信息 **" << endl;
cout << "** 3---修改职工信息 **" << endl;
cout << "** 4---保存职工信息 **" << endl;
cout << "** 5---读取职工信息 **" << endl;
cout << "** 6---删除职工信息 **" << endl;
cout << "** 7---恢复职工信息 **" << endl;
cout << "** 8---统计职工信息 **" << endl;
cout << "** 9---退出职工系统 **" << endl;
cout << "******************************************************************" << endl;
cout << endl;
cin >> i;
switch (i)
{
case 1:p.add();break;
case 2:p.find(); break;
case 3:p.change();break;
case 4:p.save_file();break;
case 5:p.read_file();break;
case 6:p.delete_inf(); break;
case 7:p.release(); break;
case 8:p.statistic(); break;
case 9:
{
char tt;
cout << "你是否退出系统(Y/N)" << endl;cin >> tt;
if(tt=='Y')
{cout << "感谢使用本订餐系统,期待下次再会!" << endl;return ;}
else {continue;}
system("cls");
}
break;
default:cout << "错误选择!请重选" << endl;
break;
}
} while (1);
}
主函数。
int main()
{
Log_in();
Menu();
system("pause");
return 0;
}
6.其他代码
其他代码详见附件。