📄 list.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 + -