C++课设-职工档案管理系统

一、基本要求

        为方便管理某单位职工档案信息,编写一个职工档案管理系统软件。系统记录必须包括职工的ID号、姓名以及性别、出生年月、职称、工资、所在单位、在岗情况等。

二、基本管理功能

  1. 添加:增加一名职工的档案信息到管理系统中。
  2. 查询:可以根据职工姓名或ID号查找某人的相关信息,若找到则显示其信息。
  3. 修改:在管理系统中修改一名职工的记录。
  4. 保存:将所有职工档案信息保存在一个文件中(数据库文件或普通的文本文件)。
  5. 读取:从文件中读取已保存了数据。
  6. 删除:从管理系统中删除一条记录。
  7. 恢复:能恢复被删除的记录。
  8. 统计:(A)计算平均工资及总工资,(B)统计男/女职工各占总职工的人数的百分比、统计职工平均年龄和单位在岗职工人数占总职工人数的百分比、统计副高以上职工人数占总职工人数的百分比。(C)以表格形式打印全部职工档案信息表。
  9. 其他:可以根据自己的思路设计其他功能。

三、部分代码解释

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.其他代码

其他代码详见附件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值