员工管理
来源:互联网 发布:淘宝有电棍卖吗 编辑:程序博客网 时间:2024/04/27 14:03
问题描述:
每个员工的信息基本包括:编号,姓名,性别,单位,年龄,电话,工资。系统能够完成对员工信息的创建,插入,更新,排序,删除,平均工资计算,查找等。
源代码:(自己编的,不好请谅解!)
#include"stdio.h"
#include"stdlib.h"
typedef struct WorkNode
{
char name[15];//员工名字
char gender[7];//性别
char department[20];//单位
char telephone[12];//电话
long age;//年龄
long wage;//工资
long num;//职工号
struct WorkNode *next;
}Works;
void InitWorks(Works *wk)//初始化
{
wk=(Works *)malloc(sizeof(Works));
wk=NULL;
}
Works *CreatWorkList(Works *wk)
//按输入顺序创建职工表
{
int n,i;
Works *p=wk,*q=NULL,*head=NULL;
head=p;
printf("职工表为空,将创建职工表-----:/n");
printf("请输入职工统计数:/n");
scanf("%d",&n);
if(n==0)
{
printf("----输入错误!/n");
return (head);
}
printf("请依次输入职工信息:/n");
printf("职工号、姓名、性别、单位、年龄、电话、工资:/n");
for(i=0;i<n;i++)
{
q=(Works *)malloc(sizeof(Works));
scanf("%ld%s%s%s%ld%s%ld",&(q->num),q->name,q->gender,
q->department,&(q->age),q->telephone,&(q->wage));
if(p==NULL)
head=q;
else
p->next=q;
p=q;
}
p->next=NULL;
printf("/n----创建完毕!/n/n");
return (head);
}
Works *InsertWork(Works *wk)
//插入职工信息,按职工号顺序从小到大插入
{
Works *q=NULL,*p=wk,*s=wk;
printf("职工号、姓名、性别、单位、年龄、电话、工资:/n");
q=(Works *)malloc(sizeof(Works));
scanf("%ld%s%s%s%ld%s%ld",&(q->num),q->name,q->gender,
q->department,&(q->age),q->telephone,&(q->wage));
if(p==NULL)
{
printf("职工表为空,无法完成插入操作!/n");
return wk;
}
else
{
while(s->num!=q->num&&s->next!=NULL)
s=s->next;
if(s->num==q->num)
{
printf("----职工号已存在,输入错误!!/n");
return wk;
}
else
{
s=NULL;
while(p!=NULL)
{
if(p->num>q->num&&s==NULL)
{
q->next=p;
wk=q;
break;
}
else if(p->num>q->num&&s!=NULL)
{
q->next=p;
s->next=q;
break;
}
else if(p->num<q->num)
{
s=p;
p=p->next;
}
}
if(p==NULL)
{
q->next=p;
s->next=q;
}
return wk;
}
}
}
int Output(Works wk)
{
Works *p=&wk;
printf("职工号、姓名、性别、单位、年龄、电话、工资:/n");
if(p==NULL)
{
printf("----职工表为空,请创建!/n");
return 0;
}
while(p!=NULL)
{
printf("%ld %s %s %s %ld %s %ld /n",p->num,p->name,p->gender,
p->department,p->age,p->telephone,p->wage);
p=p->next;
}
return 1;
}
Works *PaixuWork(Works *wk)
//按职工号给职工排序
{
int flag;
Works *p=wk,*r=wk,*s=NULL,*head=wk;
flag=0;//如果有序列变化为1,否则为0
do
{
flag=0;r=wk;p=wk;
while(r->next!=NULL)
{
r=r->next;
if(r->num<p->num&&s==NULL)
{
p->next=r->next;
r->next=p;
head=r;
flag=1;
s=r;
r=p;
p=s;
}
else if(r->num<p->num&&s!=NULL)
{
p->next=r->next;
r->next=p;
s->next=r;
flag=1;
s=r;
r=p;
p=s;
}
s=p;
p=p->next;
}
}while(flag==1);
printf("----排序完成!/n");
return(head);
}
void IndexWork(Works wk)
{
long hao;
int i,n;
Works *p=NULL;
printf("请问需要查找几人?/n");
scanf("%d",&n);
printf("请依次输入被查找职工的职工号:/n");
for(i=0;i<n;i++)
{
scanf("%ld",&hao);
p=&wk;
while(p!=NULL)
{
if(hao==p->num)
{
printf("职工号为%ld的人的信息为: %s %s %s %ld %s %ld /n",p->num,p->name,
p->gender,p->department,p->age,p->telephone,p->wage);
break;
}
else
p=p->next;
}
if(p==NULL)
printf("没有找到职工号为%ld的职工的信息!/n",hao);
printf("/n");
}
}
Works *DeleteWork(Works *wk,int n)
{
int i;
long hao;
Works *p=NULL,*q=NULL,*r=NULL;
if(n<1)
{
printf("----输入为零,信息错误!/n");
return(wk);
}
printf("请依次输入职工号:/n");
for(i=0;i<n;i++)
{
scanf("%ld",&hao);
p=wk;r=wk;
if(hao==p->num)//第一个节点
{
wk=p->next;
q=p;
printf("已删除编号为%ld的职工信息!/n",q->num);
free(q);
}
else
{
p=p->next;
while(p!=NULL&&hao!=p->num)
{
r=r->next;
p=p->next;
}
if(p==NULL)
printf("/n----没有找到该员工的信息!/n");
else
{
r->next=p->next;
q=p;
printf("已删除编号为%ld的职工!/n",hao);
free(q);
}
}
}
return(wk);
}
void ChangeWork(Works *wk)
{
int i,n,hao;
Works *p=wk;
printf("请输入需要改变信息的人数:/n");
scanf("%d",&n);
for(i=0;i<n;i++)
{
p=wk;
printf("请输入要改变信息的职工的编号:/n");
scanf("%ld",&hao);
while(p!=NULL)
{
if(hao==p->num)
{
printf("职工号为%ld的人的原始信息为: %s %s %s %ld %s %ld /n",p->num,p->name,
p->gender,p->department,p->age,p->telephone,p->wage);
break;
}
else
p=p->next;
}
printf("请依次输入更改信息:/n");
printf("职工号、姓名、性别、单位、年龄、电话、工资:/n");
scanf("%ld%s%s%s%ld%s%ld",&(p->num),p->name,p->gender,
p->department,&(p->age),p->telephone,&(p->wage));
printf("/n更改后职工号、姓名、性别、单位、年龄、电话、工资信息为:/n");
printf("%ld %s %s %s %ld %s %ld /n",p->num,p->name,
p->gender,p->department,p->age,p->telephone,p->wage);
}
}
void WageWork(Works wk)
{
double total=0,count=0;
double aver;
Works *p=&wk;
while(p!=NULL)
{
printf("%ld的工资是--%ld/n",p->num,p->wage);
total=total+p->wage;
++count;
p=p->next;
}
aver=total/count;
printf("所有员工的平均工资为%lf",aver);
}
void main()
{
int i,j,k,n;
Works *w=NULL;
InitWorks(w);
do
{
printf("/t/t--------职工管理表--------/n/n");
printf("/t---------------*****************-----------------/n/n");
printf("/t/t/t创建职工管理表-----1/t/t/n/n");
printf("/t/t/t插入新员工信息-----2/t/t/n/n");
printf("/t/t/t按员工号查找员工信息-----3/t/t/n/n");
printf("/t/t/t按员工号删除员工信息-----4/t/t/n/n");
printf("/t/t/t按员工号排序员工信息----5/t/t/n/n");
printf("/t/t/t输出所有员工信息----6/t/t/n/n");
printf("/t/t/t输出所有员工工资和平均工资----7/t/t/n/n");
printf("/t/t/t更改职工信息----8/t/t/n/n");
printf("/t/t/t退出-----9/t/t/n/n");
printf("/t---------------****************-----------------/n/n");
printf("请输入要执行的操作序号:/n");
scanf("%d",&i);
switch(i)
{
case 1:
w=CreatWorkList(w);
break;
case 2:
printf("请输入要插入的员工数:/n");
scanf("%d",&k);
printf("自动按职工号大小插入:/n");
for(j=0;j<k;j++)
w=InsertWork(w);
printf("/n插入完毕!/n");
break;
case 3:
IndexWork(*w);
break;
case 4:
printf("/n请输入要删除的职工信息的个数:/n");
scanf("%ld",&n);
w=DeleteWork(w,n);
break;
case 5:
w=PaixuWork(w);
Output(*w);
break;
case 6:
Output(*w);
break;
case 7:
WageWork(*w);
break;
case 8:
ChangeWork(w);
break;
default:
exit(0);
}
}while(i!=9);
}
- 员工管理
- 员工管理
- 员工管理
- 员工管理
- 如何管理关键员工
- 如何管理员工?
- 员工考勤管理系统
- 如何管理员工
- java--员工管理报表
- 如何管理it员工
- 员工管理系统
- 如何管理SOHO员工
- c#员工管理
- 浅谈IT员工管理
- 课程设计----员工管理系统
- jQuery--员工管理
- 员工管理系统(数组)
- 员工管理系统
- .h和.cpp文件的区别
- 约定的调用
- 关闭远程桌面
- 改变fileupload样式 意外的收获
- 指针、结构体、联合体的安全规范
- 员工管理
- substring和substr_电话号码中间四位用****表示
- RTP video packet 的 marker bit
- C#实现Windows后台服务实例浅析
- uboot 详细注释讲解
- acws框架体会:视图的作用 view 取代fid部分作用
- 微软北京.NET俱乐部免费活动(2010年7月18日) – Visual Studio 2010 敏捷开发与云计算Azure
- jdbc数据库连接池
- C++ 3D游戏开发 逼真的鱼池效果-ogre