⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 emp_mng.h

📁 用链表实现的职工管理软件 ( C+ + )
💻 H
字号:
#include <iostream.h>
#include <iomanip.h>


////////////////////////
//   职工信息         //
////////////////////////
struct emp_info
{
	int id;		//编号
	int age;	//年龄
	int sex;	//性别,0为女,1为男
};


////////////////////////
//   链表的一个结点   //
////////////////////////
struct emp_node
{
	emp_info data;
	emp_node *next;
};


//////////////////////////////////////////////////////////////////////////////////////////////////
//函数:show_all
//功能:输出全部职工信息
//参数:h:链表头结点指针
//////////////////////////////////////////////////////////////////////////////////////////////////
void show_all(emp_node *h)
{
	const int L=10;
	if(!h)
	{
		cout<<"目前没有职工\n\n";
		return;
	}

	cout << setw(L) << "编号" << setw(L) << "年龄" << setw(L) << "性别" << endl;
	for(;h;h=h->next)
	{
		cout << setw(L) << h->data.id << setw(L) << h->data.age ;
		if(h->data.sex==0)
			cout << setw(L) << "女";
		else
			cout << setw(L) << "男";
		cout<<endl;
	}
	cout<<endl;
}


//////////////////////////////////////////////////////////////////////////////////////////////////
//函数:sum_by_sex
//功能:统计出男女职工人数
//参数:h:链表头结点指针
//		male_num:男职工人数
//		female_num:女职工人数
//////////////////////////////////////////////////////////////////////////////////////////////////
void sum_by_sex(emp_node *h, int &male_num, int &female_num)
{
	male_num=0;
	female_num=0;

	if(!h) return;

	for(;h;h=h->next)
	{
		if(h->data.sex)
			male_num++;
		else
			female_num++;
	}
}


//////////////////////////////////////////////////////////////////////////////////////////////////
//函数:insert
//功能:在尾部插入新职工结点
//参数:h:链表头结点指针
//		eid:新职工的编号
//		eage:新职工的年龄
//		esex:新职工的性别
//返回值:链表头结点指针
//////////////////////////////////////////////////////////////////////////////////////////////////
void insert(emp_node *&h,const int eid,const int eage,const int esex)
{
	emp_node *p=h;
	emp_node *s=new(emp_node);
	s->data.id=eid;
	s->data.age=eage;
	s->data.sex=esex;
	s->next=NULL;

	if(!p)
	{
		h=s;
		return;
	}

	for(; p->next; p=p->next);
	p->next=s;
}


//////////////////////////////////////////////////////////////////////////////////////////////////
//函数:del_by_id
//功能:删除指定编号的职工
//参数:h:链表头结点指针
//		eid:被删职工的编号
//返回值:操作是否成功
//////////////////////////////////////////////////////////////////////////////////////////////////
int del_by_id(emp_node *&h,int eid)
{
	emp_node *p=h;

	if(!p) return 0;
	
	if(p->data.id==eid)
	{
		h=p->next;
		delete p;
		return 1;
	}

	for(;p->next;p=p->next)
		if(p->next->data.id==eid)
		{
			emp_node *tp=p->next;
			p->next=p->next->next;
			p=p->next;
			delete tp;						
			return 1;
		}

	return 0;
}


//////////////////////////////////////////////////////////////////////////////////////////////////
//函数:retire
//功能:删除年龄在60岁以上的男性职工或55岁以上的女性职工,把被删除结点保存在另一个链表中
//参数:h:链表头结点指针
//		retire_list:保存退休职工的链表
//////////////////////////////////////////////////////////////////////////////////////////////////
void retire(emp_node *&h, emp_node *&retire_list)
{
	emp_node *p=h,*pr=retire_list,*q=NULL;

	if(pr)
		for(;pr->next;pr=pr->next);

	while(p)
	{
		if( p->data.sex==0 && p->data.age>=55 || p->data.sex==1 && p->data.age>=60 )
		{
			if(p==h)
				h=h->next;
			else
				q->next=p->next;

			if(!pr)
				pr=retire_list=p;
			else
				pr=pr->next=p;
			p=pr->next;
			continue;
		}
		q=p;p=p->next;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -