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

📄 list.cpp

📁 我们的C++课程设计
💻 CPP
字号:
#include "list.h"

List::List()
{
	head = NULL;
}

float List::pay(nodetype* p)
{

	p->money.accumpay=p->money.basepay+p->money.worktime*p->money.dayrate;
	return p->money.accumpay;
}

bool List::check(char *a, char *b)		//对比两个字符串是否相等
{
	int i;
	int j=strlen(b);
	for(i=0; i<j; i++)
	{
		if(*a==*b)
		{
			a++;
			b++;
		}
		else
			return 0;
	}
	return 1;
}


nodetype* List::creatlist (int n)       //创建链表
{
	nodetype *h=NULL, *s, *t;
	int i=1;

	for(int j=0; j<n; j++)
	{
		if(i==1)            //创建第一个节点
		{
			h=(nodetype*)malloc(sizeof(nodetype));
			h->next=NULL;
			t=h;
		}
		else                 //创建其余节点
		{
			s=(nodetype*)malloc(sizeof(nodetype));
			s->next=NULL;
			t->next=s;
			t=s;            //t 始终指向生成的单链表的最后一个节点
		}

		i++;
	}

	head=h;
	return h;
}

void List::tjxl()//统计各学历的人数
{
	nodetype* p=head;
	int i=0,j=0,m=0,n=0;
	while( p!=NULL)   	
	{	
		if(p->pe.XL==1)
			i++;                 //中学学历的人数
		else 
			if(p->pe.XL==2)
				j++;            //学士学历的人数
			else
				if(p->pe.XL==3)
					m++;        //硕士学历的人数
				else
					n++;        //博士学历的人数
		p=p->next;
	}
	cout<<"中学学历的人数为:"<<i
		<<"学士学历的人数为:"<<j
		<<"硕士学历的人数为:"<<m
		<<"博士学历的人数为:"<<n;
}

void List::tjbm()//统计各部门人数 
{
	nodetype* p=head;
	int i=0,j=0,m=0,n=0,q=0;
	while( p!=NULL)   	
	{	
		if(p->pe.BM==1)
			i++;                 //董事会的人数
		else 
			if(p->pe.BM==2)
				j++;            //市场部的人数
			else
				if(p->pe.BM==3)
					m++;        //公关部的人数
				else
					if(p->pe.BM==4)
					n++;        //客服中心的人数
					else 
						q++;    //信息中心的人数
		p=p->next;
	}
	cout<<"董事会的人数为:"<<i
		<<"市场部的人数为:"<<j
		<<"公关部的人数为:"<<m
		<<"客服中心的人数为:"<<n
		<<"信息中心的人数为:"<<q;
}

void List::tjzw()  //统计各职位的人数
{
	nodetype* p=head;
	int i=0,j=0,m=0,n=0;
	while( p!=NULL)   	
	{	
		if(p->pe.BM==1)
			i++;                 //董事长的人数
		else 
			if(p->pe.BM==2)
				j++;            //总经理的人数
			else
				if(p->pe.BM==3)
					m++;        //销售经理的人数
				else
					n++;        //销售员的人数
		p=p->next;
	}
	cout<<"董事长的人数为:"<<i
		<<"总经理的人数为:"<<j
		<<"销售经理的人数为:"<<m
		<<"销售员的人数为:"<<n;
}


void List::dispnode(nodetype* p)		//显示一个员工的所有信息
{
	if(p!=NULL)
	{
		dispperson(p);
		disptelephone(p);
		disppay(p);
	}
}

void List::dispname()		//显示所有员工姓名
{
	nodetype* p=head;
	cout<<"现有的员工:  "<<endl;
	if(p==NULL)
		cout<<"没有任何员工数据"<<endl;
	while(p!=NULL)
	{
		cout<<"姓名:	"<<p->pe.name;

		p=p->next;
	}
}

int List::listlen()       //返回链表长度
{
	int i=0;
	nodetype* p=head;
	while(p!=NULL)
	{
		p=p->next;
		i++;
	}
	return i;
}

nodetype* List::findnode (int i)      //通过查找序号返回节点的指针
{
	nodetype* p=head;
	int j=1;
	if( i>listlen()||i<=0 )          // i 上溢或下溢
		return NULL;
	else
	{
		while( p!=NULL &&  j<i )    //查找第 i 个节点并由 p 指向该节点
		{
			j++;
			p=p->next;
		}
		return p;
	}
}

nodetype* List::find(char c[])      //通过查找姓名返回节点的指针
{
	nodetype* p=head;
	int j=1;
	strcat(c, "\n");				//从外部读入的字符串末尾都带了一个换行符
	while( p!=NULL &&  !(check(c, p->pe.name)))    //查找第 i 个节点并由 p 指向该节点	
	{	
		j++;	
		p=p->next;
	}
	return p;
}

int List::find2(char c[])      //通过查找姓名返回节点的序号
{
	nodetype* p=head;
	int j=1;
	strcat(c, "\n");				//从外部读入的字符串末尾都带了一个换行符
	while( p!=NULL &&  !(check(c, p->pe.name)))    //查找第 i 个节点并由 p 指向该节点	
	{	
		j++;
		p=p->next;
	}
	return j;
}

nodetype* List::insnode(int i)
{
	nodetype *h=head, *p, *s;
	s=(nodetype*)malloc(sizeof(nodetype));    //创建节点 s
	s->next=NULL;
	if(i==0)           //i=0 时 s 作为该单链表的第一个节点
	{
		s->next = h;
		h=s;           //重新定义头节点
	}
	else
	{
		p=findnode(i);       //查找第 i 个节点,并由 p 指向该节点
		if(p!=NULL)
		{
			s->next=p->next;
			p->next=s;
		}
		else cout<<"输入的 i 值不正确"<<endl;
	}
	head=h;

	return s;
}

void List::delnode(int i)			//删除第 i 个节点
{
	nodetype *h=head, *p=head, *s;
	int j=1;
	if(i==1)       //删除第一个节点
	{
		h=h->next;
		free(p);
	}
	else
	{
		p=findnode(i-1);     //查找第 i-1 个节点,并由 p 指向这个节点
		if(p!=NULL && p->next!=NULL)
		{
			s=p->next;      // s 指向要删除的节点
			p->next=s->next;
			free(s);
		}
		else
			cout<<"输入的 i 值不正确"<<endl;
	}
	head=h;
}

void List::editperson(nodetype* p)
{
	char c[100];
	int a;
	cout<<"请输入姓名: "<<endl;
	cin>>c;
	strcat(c, "\n");
	strcpy(p->pe.name, c);

	cout<<"请输入性别(F为女性,M为男性):"<<endl;
	cin>>c;
	strcat(c, "\n");
	strcpy(p->pe.sex, c);
	
	cout<<"请输入生日(格式举例:1985-5-19): "<<endl;
	cin>>c;
	strcat(c, "\n");
	strcpy(p->birthday, c);

	cout<<"请输入民族:"<<endl;
	cin>>c;
	strcat(c, "\n");
	strcpy(p->pe.MZ, c);
	
	cout<<"请输入国籍:"<<endl;
	cin>>c;
	strcat(c, "\n");
	strcpy(p->pe.GJ, c);

	cout<<"请输入学历编号:(1|中学、2|学士、3|硕士、4|博士)"<<endl;
	cin>>a;
	while(a!=1&&a!=2&&a!=3&&a!=4) 
				{ 
					cout<<"输入有误,请重新输入:"<<endl; 
					cout<<" 1|中学、2|学士、3|硕士、4|博士"; 
					cin>>a; 
				} 
	p->pe.XL=a;

	cout<<"请输入职位编号:(1|董事长、2|总经理、3|销售经理、4|销售员)"<<endl;
	cin>>a;
	while(a!=1&&a!=2&&a!=3&&a!=4) 
				{ 
					cout<<"输入有误,请重新输入:"<<endl; 
					cout<<"1|董事长、2|总经理、3|销售经理、4|销售员"; 
					cin>>a; 
				} 
	p->pe.ZW=a;

	cout<<"请输入所属部门编号:1|董事会、2|市场部、3|公关部、4|客服中心、5|信息中心)"<<endl;
	cin>>a;
	while(a!=1&&a!=2&&a!=3&&a!=4&&a!=5) 
				{ 
					cout<<"输入有误,请重新输入:"<<endl; 
					cout<<"1|董事会、2|市场部、3|公关部、4|客服中心、5|信息中心"; 
					cin>>a; 
				} 
	p->pe.BM=a;

	cout<<"请输入级别:(1---10)"<<endl;
	cin>>a;
	if(a<1||a>10)
	{
		cout<<"输入有误,请输入级别:(1---10)"<<endl;
		cin>>a;
	}
	p->pe.gread=a;

	cout<<"请输入家庭住址(例如:洛阳市涧西区长江东路66号)"<<endl;
	cin>>c;
	strcat(c, "\n");
	strcpy(p->address, c);

	cout<<"编辑个人信息完成!"<<endl;

	dispperson(p);
}

void List::editpay(nodetype* p)
{
	float a;

	cout<<"请输入基本工资(100---10000): "<<endl;
	cin>>a;
	p->money.basepay=a;


	cout<<"请输入工作时间(0--31): "<<endl;
	cin>>a;
	p->money.worktime=a;

	cout<<"请输入每天奖金(0--1000):"<<endl;
	cin>>a;
	p->money.dayrate=a;

	cout<<"编辑工资信息完成!"<<endl;

	disppay(p);
}

void List::edittelephone(nodetype* p)
{
	long c;
	cout<<"请输入手机号码(后八位): "<<endl;
	cin>>c;
	p->te.SJ=c;

	cout<<"请输入家庭电话号码(不带区号,如64884677): "<<endl;
	cin>>c;
	p->te.JD=c;

	cout<<"编辑联系方式完成!"<<endl;

	disptelephone(p);
}

void List::dispperson(nodetype* p)
{
	cout<<"姓名:		"<<p->pe.name<<endl;
	cout<<"性别:		"<<p->pe.sex<<endl;
	cout<<"民族:		"<<p->pe.MZ<<endl;
	cout<<"国籍:		"<<p->pe.GJ<<endl;
	cout<<"学历:		"<<p->pe.XL<<endl;
	cout<<"职位         "<<p->pe.ZW<<endl;
	cout<<"所属部门     "<<p->pe.BM<<endl;
	cout<<"级别         "<<p->pe.gread<<endl;
	cout<<"出生日期:	"<<p->birthday<<endl;
	cout<<"家庭住址:	"<<p->address<<endl;
}

void List::disppay(nodetype* p)
{


	cout<<"基本工资:		"<<p->money.basepay<<endl;
	cout<<"每天奖金:	"<<p->money.dayrate<<endl;
	cout<<"工作时间:	"<<p->money.worktime<<endl;

}

void List::disptelephone(nodetype* p)
{
	cout<<"手机号码是:	"<<p->te.SJ<<endl;
	cout<<"家庭电话是:	"<<p->te.JD<<endl;
}

void List::help()
{
	cout<<endl<<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;
}

List::~List()
{
	nodetype *pa=head, *pb;
	if(pa!=NULL)
	{
		pb=pa->next;
		if(pb==NULL)
			free(pa);
		else
		{
			while(pb!=NULL)
			{
				free(pa);
				pa=pb;
				pb=pb->next;
			}
			free(pa);
		}
	}
}

⌨️ 快捷键说明

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