当前位置:首页 > 开发教程 > C语言 >

C语言实现简单员工工资管理系统

时间:2022-03-22 15:48 来源:未知 作者:知遇我 收藏

这篇文章主要为大家详细介绍了C语言实现简单员工工资管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了C语言实现简单员工工资管理系统的具体代码,供大家参考,具体内容如下

(一)公司现状分析

1、公司主要有经理、技术员、销售员、销售经理4类岗位人员,他们都有基本信息:职工号、姓名、性别、部门、岗位、工龄、当月工资等。一个部门最多只能有一个销售经理,一个部门可以有多个销售员,一个部门可以有若干个经理和若干技术员。

2、员工数据包括基本资料数据和工资数据两部分,员工基本资料数据包括职工号、姓名、性别、部门、岗位、工龄;员工工资数据包括工作时间、小时工资、销售额、底薪、当月工资。

3、员工当月工资的计算办法。

A.经理:底薪(8000)+工龄×35;

B.技术员:工作时间×小时工资(100元每小时)+工龄×35;

C.销售员:销售额×4%提成+工龄×35;

D.销售经理:底薪(8000)+所辖部门销售额总额×0.5%+工龄×35。

现在需要开发一个公司员工工资管理系统对员工工资进行有效管理。

(二)系统的功能要求

数据维护管理:要求对员工的基本资料数据和工资数据分开管理。基本资料数据的维护管理功能包括添加(批量、单个)、修改、删除、查询等;工资数据的维护管理功能包括输入(批量、单个)、修改、删除、查询等。

A. 基本资料数据的维护管理

(1).添加:(批量、单个)添加员工基本资料数据。基本资料数据包括职工号、姓名、性别、部门、岗位、工龄。

(2).修改:根据职工号来修改任意员工的除职工号外的其他基本资料数据。

(3).删除:根据职工号删除一个员工。

(4).查询:根据职工号查询一个员工的基本资料数据。

B. 工资数据的维护管理

(1).输入:(批量、单个)输入员工工资数据。工资数据根据员工类型的不同而有区别,输入的相关数据也应不同。注意:当月工资是计算项,不能输入。

(2).修改:根据职工号来修改任意员工的相关工资数据(注意:不同类别员工相关数据不同)。

(3).删除:根据职工号删除一个员工(不能删除,只需将相关数据项设置成-1)。

(4).查询:根据职工号查询一个员工的工资数据。

(5).计算:批量计算所有技术员、销售员和销售经理的当月工资额。注意,① 销售经理所辖部门销售额总额为本部门所有销售员当月销售额之和。② 只有各项数据都为有效数据时(-1为无效数据),才能计算。

查询数据

1、分页显示全部员工的信息。分页功能:每页显示10条员工的信息,有上一页、下一页、首页和最后一页的功能。
2、按部门显示本部门全部员工信息。注意:无需分页显示。
3、分类显示4种岗位的员工信息。注意:无需分页显示。
4、根据工号或者姓名查询员工信息。

排序:

1、所有员工信息按当月工资从高到低排序并显示。注意:无需分页显示。
2、某个岗位的员工信息按当月工资从高到低排序并显示。注意:无需分页显示。

统计:

1、统计并显示某个部门的平均工资、最低工资、最高工资。
2、统计并显示某个部门超出平均工资的人数与员工信息。注意:无需分页显示。
3、统计并显示所有员工中的最低工资和最高工资员工的信息。
4、统计并显示所有员工超出平均工资的人数与员工信息。注意:无需分页显示。

(三)系统的实现技术要求

1、员工用结构体表示,全体员工用一个链表来表示。某一岗位的员工,可以只使用员工结构体的部分成员,比如:经理只使用基本信息成员,而不使用销售额成员、工作时间成员。
2、必须用文件来存储员工信息:开始运行程序时从文件中读取员工信息到链表,退出程序时将员工信息保存到文件中。
3、主菜单有一个菜单项能够将员工信息保存到文件。
4、数据约束:
1)、职工号:整型、不能重复、从1开始依次递增、由软件自动计算产生,不能修改。
2)、岗位:枚举类型,分别表示经理、技术员、销售员、销售经理。
3)、员工的其他信息不能为空。
4)、其他:至少有两层菜单。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct employee{
?? ?int num;?? ??? ??? ?/* 工号 ?*/
?? ?char name[20];?? ??? ?/* 姓名 ?*/
?? ?int sex;?? ??? ??? ?/* 性别 1 man 2 madam*/
?? ?int department;?? ??? ?/* 部门 ?*/
?? ?int post;?? ??? ??? ?/* 1为经理、2为技术员、3为销售员、4为销售经理 ?*/
?? ?int lengthservice;?? ?/* 工龄 ?*/
?? ?int hour; ? ? ? ? ? /* 工作时间 */
?? ?int hoursalary;?? ??? ?/* 时薪*/
?? ?int sales;?? ??? ??? ?/* 销售额*/
?? ?int basicsalary;?? ?/* 底薪*/
?? ?int salary;?? ??? ??? ?/* 工资总数*/
?? ?struct employee *next;
}employee;
struct Employee{
?? ?int num;
?? ?char name[20];?? ??? ?/* 姓名 ?*/
?? ?int sex;?? ??? ??? ?/* 性别 1 man 2 madam*/
?? ?int department;?? ??? ?/* 部门 ?*/
?? ?int post;?? ??? ??? ?/* 1为经理、2为技术员、3为销售员、4为销售经理 ?*/
?? ?int lengthservice;?? ?/* 工龄 ?*/
?? ?int hour; ? ? ? ? ? /* 工作时间 */
?? ?int hoursalary;?? ??? ?/* 时薪*/
?? ?int sales;?? ??? ??? ?/* 销售额*/
?? ?int basicsalary;?? ?/* 底薪*/
?? ?int salary;?? ??? ??? ?/* 工资总数*/
};
void main()
{
?? ?int num=0,flag,a,NUM;
?? ?char name[20];
?? ?employee *list,*rare;//头节点list无数据 尾指针rare有数据
?? ?int increase(employee *rare,int *num);
?? ?void DecendOrder(employee *list);
?? ?void Statistics(employee *list);
?? ?void queryAll(employee *list);
?? ?void querybasic(employee *list,int num);
?? ?void Delete(employee *list,int num);
?? ?void DeleteSalary(employee *list,int num);
?? ?void querysalary(employee *list,int num);
?? ?void change(employee *list,int num);
?? ?void changesalary(employee *list,int num);
?? ?void Statistics2(employee *list);
?? ?void querynum(employee *list,int num);
?? ?employee *import(employee *list,int *num);
?? ?void salary(employee *list);
?? ?void Statistics3(employee *list);
?? ?void Statistics4(employee *list);
?? ?void save(employee *list);
?? ?void queryname(employee *list,char name[20]);
?? ?void querydepart(employee *list,int num);
?? ?void querypost(employee *list);
?? ?void DecendOrder2(employee *list);
?? ?list=(employee *)malloc(sizeof(employee));
?? ?list->next=NULL;
?? ?rare=import(list,&num);
?? ?if(num==0)
?? ??? ?increase(list,&num);
?? ?salary(list);
?? ?while(1)
?? ?{
?? ??? ?begin:printf("菜单:添加数据:1 ?修改数据:2 ? 删除数据:3 ? 查询数据:4 ? 保存数据:5 ? 统计数据:6 ? 数据排序:7 ? 退出:0\n");
?? ??? ?scanf("%d",&flag);
?? ??? ?if(flag==0){
?? ??? ??? ?save(list);
?? ??? ??? ?exit(0);}
?? ??? ?switch(flag){
?? ??? ??? ?case 1:increase(rare,&num);salary(list);save(list);break;
?? ??? ??? ?case 2:printf("修改基本信息:1 修改工资信息:2 返回:0\n");scanf("%d",&a);
?? ??? ??? ??? ?switch(a){
?? ??? ??? ??? ?case 0:goto begin;break;
?? ??? ??? ??? ?case 1:printf("请输入要修改的工号\n");scanf("%d",&NUM);change(list,NUM);break;?? ?
?? ??? ??? ??? ?case 2:printf("请输入要修改的工号\n");scanf("%d",&NUM);changesalary(list,NUM);break;?? ?
?? ??? ??? ??? ?}break;
?? ??? ??? ?case 3:printf("删除基本信息:1 删除工资信息:2 返回:0\n");scanf("%d",&a);
?? ??? ??? ??? ?switch(a){
?? ??? ??? ??? ?case 0:goto begin;break;
?? ??? ??? ??? ?case 1:printf("请输入要删除的工号\n");scanf("%d",&NUM);Delete(list,NUM);break;?? ?
?? ??? ??? ??? ?case 2:printf("请输入要删除的工号\n");scanf("%d",&NUM);DeleteSalary(list,NUM);break;?? ?
?? ??? ??? ??? ?}break;
?? ??? ??? ?case 4:printf("查询基本信息:1 查询工资信息:2 ?查询全部信息:3 ?查询部门信息:4 ?查询各个岗位信息:5 ?工号查询信息:6 ?姓名查询信息:7 返回:0\n");scanf("%d",&a);
?? ??? ??? ??? ?switch(a){
?? ??? ??? ??? ?case 0:goto begin;break;
?? ??? ??? ??? ?case 1:printf("请输入要查询的工号\n");scanf("%d",&NUM);querybasic(list,NUM);break;?? ?
?? ??? ??? ??? ?case 2:printf("请输入要查询的工号\n");scanf("%d",&NUM);querysalary(list,NUM);break;
?? ??? ??? ??? ?case 3:queryAll(list);break;?? ?
?? ??? ??? ??? ?case 4:printf("请输入要查询的部门号\n");scanf("%d",&NUM);querydepart(list,NUM);break;
?? ??? ??? ??? ?case 5:querypost(list);break;
?? ??? ??? ??? ?case 6:printf("请输入要查询的工号\n");scanf("%d",&NUM);querynum(list,NUM);break;
?? ??? ??? ??? ?case 7:printf("请输入想查询的姓名\n");scanf("%s",name);queryname(list,name);break;
?? ??? ??? ??? ?}break;
?? ??? ??? ?case 5:save(list);break;
?? ??? ??? ?case 6:printf("统计部门平均工资,最低,最高工资:1 ? ? ? ? ? ?统计部门超过平均工资的人数与员工信息:2\n统计所有员工最低工资和最高工资员工的信息:3 ?统计所有员工超出平均工资的人数与员工信息:4\n 返回:0\n");scanf("%d",&a);
?? ??? ??? ??? ?switch(a){
?? ??? ??? ??? ?case 0:goto begin;break;
?? ??? ??? ??? ?case 1:Statistics(list);break;
?? ??? ??? ??? ?case 2:Statistics2(list);break;
?? ??? ??? ??? ?case 3:Statistics3(list);break;
?? ??? ??? ??? ?case 4:Statistics4(list);break;
?? ??? ??? ??? ?}break;
?? ??? ??? ?case 7:DecendOrder2(list);break;
?? ??? ??? ?default:printf("输入错误");goto begin;}}
?
}
int increase(employee *rare,int *num)//添加数据
{
?? ?employee *p,*q;
?? ?char name[20];
?? ?int sex,department,post,lengthservice,hour,hoursalary,sales,basicsalary;
?? ?q=rare;
?? ?printf("请输入姓名,性别(1为男,2为女),部门,职位(1为经理、2为技术员、3为销售员、4为销售经理),工龄,工作时间,时薪,销售额,底薪:(工时为-1时停止输入)\n");
?? ?scanf("%s%d%d%d%d%d%d%d%d",name,&sex,&department,&post,&lengthservice,&hour,&hoursalary,&sales,&basicsalary);
?? ?while(hour!=-1)
?? ?{
?? ??? ?num++;
?? ??? ?p=(employee *)malloc(sizeof(employee));
?? ??? ?strcpy(p->name,name);
?? ??? ?p->num=*num;
?? ??? ?p->sex=sex;
?? ??? ?p->department=department;
?? ??? ?p->post=post;
?? ??? ?p->lengthservice=lengthservice;
?? ??? ?p->hour=hour;
?? ??? ?p->hoursalary=hoursalary;
?? ??? ?p->sales=sales;
?? ??? ?p->basicsalary=basicsalary;
?? ??? ?if(*num==1)
?? ??? ??? ?rare->next=p;
?? ??? ?else
?? ??? ??? ?q->next=p;
?? ??? ?q=p;
?? ??? ?p->next=NULL;
?? ??? ?scanf("%s%d%d%d%d%d%d%d%d",name,&sex,&department,&post,&lengthservice,&hour,&hoursalary,&sales,&basicsalary);
?? ?}
?? ?return *num;
}
void salary(employee *list)//计算工资
{
?? ?employee *p=list->next,*q=list->next;
?? ?int sales=0;
?? ?while(p!=NULL)
?? ?{
?? ??? ?if(p->hour==-1)p=p->next;
?? ??? ?if(p->post==3)
?? ??? ??? ?p->salary=p->sales*4/100+35*p->lengthservice;
?? ??? ?else if(p->post==2)
?? ??? ??? ?p->salary=100*p->hour+35*p->lengthservice;
?? ??? ?else if(p->post==1)
?? ??? ??? ?p->salary=8000+p->lengthservice*35;
?? ??? ?else if(p->post==4){
?? ??? ??? ?while(q!=NULL)
?? ??? ??? ?{
?? ??? ??? ??? ?if(q->post==3&&q->department==p->department)
?? ??? ??? ??? ??? ?sales+=q->sales;
?? ??? ??? ??? ?q=q->next;
?? ??? ??? ?}
?? ??? ??? ?p->salary=sales*5/1000+8000+p->lengthservice*35;
?? ??? ??? ?q=list->next;}
?? ??? ?p=p->next;
?? ?}
}
void querybasic(employee *list,int num)//查询基本信息
{
?? ?employee *p;
?? ?p=list->next;
?? ?while(p->num!=num&&p!=NULL)
?? ??? ?p=p->next;
?? ?if(p->num==num){
?? ??? ?printf("工号 名字 性别 部门 职位 工龄\n");
?? ??? ?printf("%-5d%-5s%-5d%-5d%-5d%-5d\n",p->num,p->name,p->sex,p->department,p->post,p->lengthservice);}
?? ?if(p==NULL)
?? ??? ?printf("该工号不存在\n");
}
void querysalary(employee *list,int num)//查询工资信息
{
?? ?employee *p;
?? ?p=list->next;
?? ?while(p->num!=num&&p!=NULL)
?? ??? ?p=p->next;
?? ?if(p->num==num){
?? ??? ?printf("工号 ?工时 ?时薪 ?销售额 ?底薪 ?工资\n");
?? ??? ?printf("%-6d%-6d%-6d%-8d%-6d%-6d\n",p->num,p->hour,p->hoursalary,p->sales,p->basicsalary,p->salary);}
?? ?if(p==NULL)
?? ??? ?printf("该工号不存在\n");
}
void Delete(employee *list,int num)//删除基本信息
{
?? ?employee *p,*q;
?? ?p=list->next;
?? ?q=p->next;
?? ?while(p->next->num!=num)
?? ?{
?? ??? ?p=p->next;
?? ??? ?q=p->next;
?? ?}
?? ?if(q->num==num)
?? ??? ?p->next=q->next;
?? ?else printf("职工号在范围外");
?? ?q=q->next;
?? ?while(q!=NULL)
?? ?{
?? ??? ?q->num--;
?? ??? ?q=q->next;
?? ?}
?
}
void DeleteSalary(employee *list,int num)//删除工资信息
{
?? ?employee *p;
?? ?p=list->next;
?? ?while(p->num!=num)
?? ??? ?p=p->next;
?? ?if(p->num==num){
?? ??? ?p->hour=-1;
?? ??? ?p->hoursalary=-1;
?? ??? ?p->sales=-1;
?? ??? ?p->basicsalary=-1;}
?? ?else printf("该工号超出范围");
}
employee *import(employee *list,int *num)//读取文件
{
?
?? ?
?? ?FILE *fp;
?? ?struct Employee stu;
?? ?employee *q,*p;
?? ?if((fp=fopen("employee.dat","rb"))==NULL){
?? ??? ?printf("文件不存在,输入数据以建立一个文件存储信息\n");
?? ??? ?return 0;}
?? ?q=(employee *)malloc(sizeof(employee));
?? ??? ?while(!feof(fp))
?? ??? ?{
?? ??? ??? ?if((fread(&stu,sizeof(struct Employee),1,fp))!=1)break;
?? ??? ??? ?*num=*num+1;
?? ??? ??? ?p=(employee *)malloc(sizeof(employee));
?? ??? ??? ?strcpy(p->name,stu.name);
?? ??? ??? ?p->num=*num;
?? ??? ??? ?p->sex=stu.sex;
?? ??? ??? ?p->department=stu.department;
?? ??? ??? ?p->post=stu.post;
?? ??? ??? ?p->lengthservice=stu.lengthservice;
?? ??? ??? ?p->hour=stu.hour;
?? ??? ??? ?p->hoursalary=stu.hoursalary;
?? ??? ??? ?p->sales=stu.sales;
?? ??? ??? ?p->basicsalary=stu.basicsalary;
?? ??? ??? ?p->salary=stu.salary;
?? ??? ??? ?if(*num==1)
?? ??? ??? ??? ?list->next=p;
?? ??? ??? ?else
?? ??? ??? ??? ?q->next=p;
?? ??? ??? ?q=p;
?? ??? ??? ?p->next=NULL;
?? ??? ?}
?? ?fclose(fp);
?? ?return q;
}
void save(employee *list)//存储到文件
{
?? ?struct Employee stu;
?? ?FILE *fp;
?? ?employee *p;
?? ?p=list->next;
?? ?if((fp=fopen("employee.dat","wb"))==NULL){
?? ??? ?printf("error");
?? ??? ?exit(0);}
?? ?while(p!=NULL)
?? ?{
?? ??? ?stu.num=p->num;
?? ??? ?
?? ??? ?strcpy(stu.name,p->name);
?? ??? ?stu.sex=p->sex;
?? ??? ?stu.department=p->department;
?? ??? ?stu.post=p->post;
?? ??? ?stu.lengthservice=p->lengthservice;
?? ??? ?stu.hour=p->hour;
?? ??? ?stu.hoursalary=p->hoursalary;
?? ??? ?stu.sales=p->sales;
?? ??? ?stu.basicsalary=p->basicsalary;
?? ??? ?stu.salary=p->salary;
?? ??? ?if((fwrite(&stu,sizeof(struct Employee),1,fp))!=1)printf("error");
?? ??? ?p=p->next;
?? ?}
?? ?fclose(fp);
}
void change(employee *list,int num)//改变基本数据
{
?? ?char name[20];
?? ?int sex,department,post,lengthservice;
?? ?employee *p=list->next;
?? ?while(p->num!=num&&p->next!=NULL)
?? ??? ?p=p->next;
?? ?if(p->num==num){
?? ??? ?printf("请输入修改后的姓名 性别 部门 岗位 工龄\n");
?? ??? ?scanf("%s%d%d%d%d",name,&sex,&department,&post,&lengthservice);
?? ??? ?strcpy(p->name,name);
?? ??? ?p->sex=sex;
?? ??? ?p->department=department;
?? ??? ?p->post=post;
?? ??? ?p->lengthservice=lengthservice;}
?? ?else printf("职工号超出范围");
}
void changesalary(employee *list,int num)//改变工资数据
{
?? ?int hour,hoursalary,sales,basicsalary;
?? ?employee *p=list->next;
?? ?while(p->num!=num)
?? ??? ?p=p->next;
?? ?if(p->num==num){
?? ??? ?printf("请输入修改后的工作时间 小时工资 销售额 底薪 \n");
?? ??? ?scanf("%d%d%d%d",&hour,&hoursalary,&sales,&basicsalary);
?? ??? ?p->hour=hour;
?? ??? ?p->hoursalary=hoursalary;
?? ??? ?p->sales=sales;
?? ??? ?p->basicsalary=basicsalary;}
?? ?else printf("职工号超出范围");
}
void queryAll(employee *list)//分页查询所有信息
{
?? ?employee *p,*page[100];
?? ?int n,i,top=0,flag=0,max;
?? ?p=list->next;
?? ?while(p!=NULL)
?? ?{
?? ??? ?page[++top]=p;
?? ??? ?i=1;
?? ??? ?while(i<=10)
?? ??? ?{
?? ??? ??? ?i++;
?? ??? ??? ?p=p->next;
?? ??? ??? ?if(p==NULL)break;
?? ??? ?}
?? ?}
?? ?max=top;
?? ?top=0;
?? ?p=page[++top];
?? ?printf("工号 姓名 性别 部门 岗位 工龄 工时 时薪 销售额 底薪 工资\n");
?? ?while(1)
?? ?{
?? ??? ?i=1;
?? ??? ?while(i<=10)
?? ??? ?{
?? ??? ??? ?i++;
?? ??? ??? ?printf("%-5d%-5s%-5d%-5d%-5d%-5d%-5d%-5d%-7d%-5d%-5d\n",p->num,p->name,p->sex,p->department,p->post,p->lengthservice,p->hour,p->hoursalary,p->sales,p->basicsalary,p->salary);
?? ??? ??? ?p=p->next;
?? ??? ??? ?if(p==NULL)break;
?? ??? ?}
?? ??? ?begin:printf("当前页码%d ? 首页->1 ?上一页->2 ?下一页->3 ?尾页->4 ?退出->0\n",top);
?? ??? ?scanf("%d",&n);
?
?? ??? ?if(n==0)break;
?? ??? ?else if(n==1)top=1,p=page[1];
?? ??? ?else if(n==2){
?? ??? ??? ?if(top==1){
?? ??? ??? ??? ?printf("当前已经是第一页\n");
?? ??? ??? ??? ?goto begin;}
?? ??? ??? ?else p=page[--top];}
?? ??? ?else if(n==3){
?? ??? ??? ?if(top==max){
?? ??? ??? ??? ?printf("当前已经是最后一页\n");
?? ??? ??? ??? ?goto begin;}
?? ??? ??? ?else p=page[++top];}
?? ??? ?else if(n==4)top=max,p=page[max];
?? ??? ?else goto begin;
?? ?}
}
void querydepart(employee *list,int num)//输出该部门全部员工信息
{
?? ?employee *p=list->next;
?? ?printf("%d部门的全部员工信息为:\n",num);
?? ?printf("工号 姓名 性别 部门 岗位 工龄 工时 时薪 销售额 底薪 工资\n");
?? ?while(p!=NULL)
?? ?{
?? ??? ?if(p->department==num)
?? ??? ??? ?printf("%-5d%-5s%-5d%-5d%-5d%-5d%-5d%-5d%-7d%-5d%-5d\n",p->num,p->name,p->sex,p->department,p->post,p->lengthservice,p->hour,p->hoursalary,p->sales,p->basicsalary,p->salary);
?? ??? ?p=p->next;
?? ?}
}
void querypost(employee *list)//分类显示四个岗位的员工信息
{
?? ?employee *p;
?? ?int i=0;
?? ?while(i<4)
?? ?{
?? ??? ?switch(i){
?? ??? ?case 0:printf("经理岗位的信息为(若为空则无):\n");break;
?? ??? ?case 1:printf("技术员岗位的信息为(若为空则无):\n");break;
?? ??? ?case 2:printf("销售员岗位的信息为(若为空则无):\n");break;
?? ??? ?case 3:printf("销售经理岗位的信息为(若为空则无):\n");break;
?? ??? ?}
?? ??? ?p=list->next;
?? ??? ?i++;
?? ??? ?while(p!=NULL)
?? ??? ?{
?? ??? ??? ?if(p->post==i)
?? ??? ??? ??? ?printf("%d %s %d %d %d %d %d %d %d %d %d\n",p->num,p->name,p->sex,p->department,p->post,p->lengthservice,p->hour,p->hoursalary,p->sales,p->basicsalary,p->salary);
?? ??? ??? ?p=p->next;
?? ??? ?}
?? ?}
}
void querynum(employee *list,int num)//工号查询个人全部信息
{
?? ?employee *p;
?? ?p=list->next;
?? ?while(p!=NULL)
?? ?{
?? ??? ?if(p->num==num)
?? ??? ??? ?break;
?? ??? ?p=p->next;
?? ?}
?? ?if(p->num==num){
?? ??? ?printf("工号 姓名 性别 部门 岗位 工龄 工时 时薪 销售额 底薪 工资\n");
?? ??? ?printf("%-5d%-5s%-5d%-5d%-5d%-5d%-5d%-5d%-7d%-5d%-5d\n",p->num,p->name,p->sex,p->department,p->post,p->lengthservice,p->hour,p->hoursalary,p->sales,p->basicsalary,p->salary);}
?? ?else printf("工号超出范围");
}
void queryname(employee *list,char name[20])//用姓名查询数据
{
?? ?employee *p;
?? ?p=list->next;
?? ?while(p!=NULL)
?? ?{
?? ??? ?if(strcmp(p->name,name)==0)
?? ??? ??? ?break;
?? ??? ?p=p->next;
?? ?}
?? ?if(strcmp(p->name,name)==0){
?? ??? ?printf("工号 姓名 性别 部门 岗位 工龄 工时 时薪 销售额 底薪 工资\n");
?? ??? ?printf("%-5d%-5s%-5d%-5d%-5d%-5d%-5d%-5d%-7d%-5d%-5d\n",p->num,p->name,p->sex,p->department,p->post,p->lengthservice,p->hour,p->hoursalary,p->sales,p->basicsalary,p->salary);}
?? ?else printf("该姓名不存在");
}
void Statistics(employee *list)
{
?? ?employee *p=list->next,*q=list->next,*max=list->next,*k; ? //p,q作为循环指针,max指针指向最大的
?? ?employee *headis=NULL; ? ? ? ? ? ? ? ? ? ? ?//用来保存部门的信息
? ? employee *Max,*Min; ? ? ? ? ? ? ? ? ? ? ? //最大和最小值的成员
? ? int i=0; ? ? ? ? ? ? ? ? ? ? ? ? ? ?//计算部门的人数;
? ? int sum=0,avar=0; ? ? ? ? ? ? ? ? ?//总值,平均值
? ? int department; ? ? ? ? ? ? //用来接收想要统计的部门
? ? printf("请输入你想要统计的部门:\n");
? ? scanf("%d",&department);
?
? ? //提取所要统计的部门的成员
? ? while(p)
? ? ?{?
? ? ? ? ?if(p->num==-1)
? ? ? ? ?{
? ? ? ? ? ? ?p=p->next;
? ? ? ? ? ? ?continue;
? ? ? ? ? ? ?
? ? ? ? ?}
? ? ? ? ?if(department==p->department)
? ? ? ? ?{
? ? ? ? ? ? q=(employee *)malloc(sizeof(employee));
? ? ? ? ? ? *q=*p;
? ? ? ? ? ? q->next=NULL;
? ? ? ? ? ? if(!headis)
? ? ? ? ? ? ? headis=q;
? ? ? ? ? ? ??
? ? ? ? ? ? else?
? ? ? ? ? ? k->next=q;
?
? ? ? ? ? ?k=q;
? ??
? ? ? ? ?}
? ? ? ? ?p=p->next;
? ? ? }
?
? ? //计算最大、最小和平均值
? ? ? ? p=headis;
? ? ? ? q=headis;
? ? ? ? Max=headis;
? ? ? ? Min=headis;
? ? ? ? while(p)
? ? ? ? {
? ? ? ? ? ? if(p->num==-1)
? ? ? ? ?{
? ? ? ? ? ? ? p=p->next;
? ? ? ? ? ? ?continue;
? ? ? ? ? ??
? ? ? ? ?}
? ? ? ? ? ? if(p->salary>Max->salary)
? ? ? ? ? ? ? ? Max=p;
? ? ? ? ? ? else if(p->salary<Min->salary)
? ? ? ? ? ? ? ? Min=p;
? ? ? ? ? ? sum+=p->salary ;
? ? ? ? ? p=p->next;
? ? ? ? ? i++;
? ? ? ? ?}
?
? ? ? ? avar=sum/i;
? ? ? ? printf("部门:%d\n",department);
? ? ? ? printf("平均工资:%d\n",avar);
? ? ? ? printf("最低工资:%d\n",Min->salary);
? ? ? ? printf("最高工资:%d\n",Max->salary);
}
void Statistics2(employee *list)
{
?
? ? employee *p=list->next,*q=list->next,*max=list->next,*k; ? //p,q作为循环指针,max指针指向最大的
? ? employee *headis=NULL; ? ? ? ? ? ? ? ? ? ? ?//用来保存部门的信息
? ? int j=0,i=0; ? ? ? ? ? ? ? ? ? ? ? ? ? ?//用j来计算人数,i计算工资大于平均工资的人数
? ? int sum=0,avar=0; ? ? ? ? ? ? ? ? ? ? ?//平均值
? ? int department; ? ? ? ? ? ? //用来接收想要统计的部门
? ? printf("请输入你想要统计的部门:\n");
? ? scanf("%d",&department);
?
? ? //提取所要统计的部门的成员
? ? while(p!=NULL)
? ? ?{?
?? ??? ? if(p->num==-1)
? ? ? ? ?{
? ? ? ? ? ? ? p=p->next;
? ? ? ? ? ? ?continue;
? ? ? ? ? ??
? ? ? ? ?}
? ? ? ? ?if(department==p->department)
? ? ? ? ?{
? ? ? ? ? ? ?j++;
? ? ? ? ? ? q=(employee*)malloc(sizeof(employee));
? ? ? ? ? ? *q=*p;
? ? ? ? ? ? q->next=NULL;
? ? ? ? ? ? if(!headis)
? ? ? ? ? ? ? headis=q;
? ? ? ? ? ? else?
? ? ? ? ? ? k->next=q;
? ? ? ? ? ?k=q;
? ? ? ? ?}
? ? ? ? ?p=p->next;
? ? ? }
?
? ? //计算最大、最小和平均值
? ? ? ? p=headis;
? ? ? ? q=headis;
? ? ? ??
? ? ? ? while(p!=NULL)
? ? ? ? {
? ? ? ? ? ? if(p->num==-1)
? ? ? ? ?{
? ? ? ? ? ? ? p=p->next;
? ? ? ? ? ? ?continue;
? ? ? ? ? ? ?
? ? ? ? ?}
? ? ? ? ? ? sum+=p->salary ;
? ? ? ? ? ? p=p->next;
? ? ? ? }
? ? ? ? avar=sum/j;
?
? ? ? ? p=q;
? ? ? ? headis=0;
? ? //提取超过平均工资的部门的成员
? ? while(p!=NULL)
? ? ?{?
? ? ? ? ?if(p->num==-1)
? ? ? ? ?{
? ? ? ? ? ? ? p=p->next;
? ? ? ? ? ? ?continue;
? ? ? ? ? ??
? ? ? ? ?}
? ? ? ? ?if((p->salary)>avar)
? ? ? ? ?{?
? ? ? ? ? ? ?i++;
? ? ? ? ? ? q=(employee *)malloc(sizeof(employee));
? ? ? ? ? ? *q=*p;
? ? ? ? ? ? q->next=NULL;
? ? ? ? ? ? if(!headis)
? ? ? ? ? ? ? headis=q;
? ? ? ? ? ? ??
? ? ? ? ? ? else?
? ? ? ? ? ? k->next=q;
?
? ? ? ? ? ?k=q;
? ??
? ? ? ? ?}
? ? ? ? ?p=p->next;
? ? ? }
?
? ? ? ? p=headis;
? ? ? ? printf("部门:%d\n",department);
? ? ? ? printf("超出平均工资的人数为:%d\n",i);
?? ??? ?if(i!=0){
? ? ? ? printf("这些成员的信息如下:\n");
? ? ? ? printf("工号 ?工时 ?时薪 ?销售额 ?底薪 ?工资\n");
? ? ? ?while(p!=NULL)
? ? ? {
? ? ? ? ? if(p->num==-1)
? ? ? ? ?{
? ? ? ? ? ? ? p=p->next;
? ? ? ? ? ? ?continue;
? ? ? ? ?}
? ? ? ? ? printf("%-6d%-6d%-6d%-8d%-6d%-6d\n",p->num,p->hour,p->hoursalary,p->sales,p->basicsalary,p->salary);
?
?
? ? ? ? ? ?p=p->next ;
?? ? ? }}
}
void Statistics3(employee *list)
{
? ? employee *Max,*Min; ? ? ? ? ? ? ? ? ? ? ? //指向最大和最小值的成员
? ? employee*p=list->next; ? ? ? ? ? ? ? ? ? ? ? //p作为循环指针
? ? Max=list->next;
? ? Min=list->next;
? ? while(p)
? ? {
? ? if(p->num==-1)
? ? ? ? ?{
? ? ? ? ? ? ? p=p->next;
? ? ? ? ? ? ?continue;
? ? ? ? ? ??
? ? ? ? ?}
? ? if(p->salary >Max->salary )
? ? ? ? Max=p;
? ? if(p->salary <Min->salary)
? ? ? ? Min=p;
?
? ? p=p->next;
? ??
? ? }
?
? ? p=Min;
? ? printf("在所有员工中:");
? ? printf("最低工资的员工信息:\n");
? ? printf("工号 ?工时 ?时薪 ?销售额 ?底薪 ?工资\n");
?? ?printf("%-6d%-6d%-6d%-8d%-6d%-6d\n",p->num,p->hour,p->hoursalary,p->sales,p->basicsalary,p->salary);
? ? p=Max;
? ? printf("最高工资的员工信息:\n");
? ? printf("工号 ?工时 ?时薪 ?销售额 ?底薪 ?工资\n");
? ? printf("%-6d%-6d%-6d%-8d%-6d%-6d\n",p->num,p->hour,p->hoursalary,p->sales,p->basicsalary,p->salary);
?
}
void Statistics4(employee *list)
{
? ? employee *p=list->next,*q=list->next,*k; ? ? ? ? ? ? //p,q作为循环指针
? ? employee *headis=0; ? ? ? ? ? ? ? ? ? ? ?//用来保存工资超过平均工资的成员
? ? int i=0; ? ? ? ? ? ? ? ? ? ? ? ? ?//用i来计算人数
? ? double sum=0,avar=0; ? ? ? ? ? ? ?//总值,平均值
?
? ? //求平均值
? ? while(p)
? ? {
? ? ? ? if(p->num==-1)
? ? ? ? ?{
? ? ? ? ? ? ?p=p->next;
? ? ? ? ? ? ?continue;
? ? ? ? ?}
? ? ? i++;
? ? ? sum+=p->salary ;
? ? ? p=p->next;
? ? }
? ? avar=sum/i;
?
? ??
//提取出超过平均工资的成员,并且计算人数
? ? i=0;
? ? p=list;
? ? while(p)
? ? {
? ? ? ? if(p->num==-1)
? ? ? ? ?{
? ? ? ? ? ? ?p=p->next;
? ? ? ? ? ? ?continue;
? ? ? ? ? ? ?
? ? ? ? ?}
? ? if(p->salary >avar)
? ? ? {
? ? ? ? ?i++;
? ? ? ? ? q=(employee *)malloc(sizeof(employee));
? ? ? ? ? ? *q=*p;
? ? ? ? ? ? q->next=NULL;
? ? ? ? ? ? if(!headis)
? ? ? ? ? ? ? headis=q;
? ? ? ? ? ? ??
? ? ? ? ? ? else?
? ? ? ? ? ? k->next=q;
?
? ? ? ? ? ?k=q;
? ??
? ? ? ?}
? ??
? ? p=p->next;
? ? }
? ? p=headis;
?? ?printf("超出平均工资的人数:%d\n",i);
? ? printf("工号 ?工时 ?时薪 ?销售额 ?底薪 ?工资\n");
? ? while(p)
? ? {
? ? ? ? if(p->num==-1)
? ? ? ? ?{
? ? ? ? ? ? ?p=p->next;
? ? ? ? ? ? ?continue;
? ? ? ? ?}
? ? printf("%-6d%-6d%-6d%-8d%-6d%-6d\n",p->num,p->hour,p->hoursalary,p->sales,p->basicsalary,p->salary);
? ? p=p->next;
? ? }
}
void DecendOrder(employee *list)
{
?? ?employee *p,*q,*a,*b,*s;
?? ?int j=0;
?? ?p=list->next;
?? ?q=p->next;
?? ?a=list;
?? ?b=a->next;
?? ?while(q!=NULL)
?? ?{
?? ??? ?a=list;
?? ??? ?b=a->next;
?? ??? ?j=0;
?? ??? ?while(a!=p)
?? ??? ?{
?? ??? ??? ?if(q->salary>b->salary)
?? ??? ??? ?{
?? ??? ??? ??? ?p->next=q->next;
?? ??? ??? ??? ?q->next=b;
?? ??? ??? ??? ?a->next=q;
?? ??? ??? ??? ?j=1;
?? ??? ??? ??? ?break;
?? ??? ??? ?}
?? ??? ??? ?a=b;
?? ??? ??? ?b=b->next;
?? ??? ?}
?? ??? ?if(j==1)
?? ??? ??? ?q=p->next;
?? ??? ?else{
?? ??? ??? ?p=q;
?? ??? ??? ?q=q->next;}
?? ?}
?? ?s=list->next;
?? ?while(s!=NULL){
?? ??? ?printf("工号 姓名 性别 部门 岗位 工龄 工时 时薪 销售额 底薪 工资\n");
?? ??? ?printf("%-5d%-5s%-5d%-5d%-5d%-5d%-5d%-5d%-7d%-5d%-5d\n",s->num,s->name,s->sex,s->department,s->post,s->lengthservice,s->hour,s->hoursalary,s->sales,s->basicsalary,s->salary);
?? ??? ?s=s->next;
?? ?}
}
void DecendOrder2(employee *list)
{
?? ?employee *p,*q,*a,*b,*s,*z,*x=NULL,*v,*head;
?? ?int j=0,post;
?? ?printf("请输入岗位\n");
?? ?scanf("%d",&post);
?? ?p=list->next;
?? ?head=(employee *)malloc(sizeof(employee));
?? ?while(p!=NULL)
?? ?{
?? ??? ?if(p->post==post){
?? ??? ??? ?z=(employee *)malloc(sizeof(employee));
?? ??? ??? ?*z=*p;
?? ??? ??? ?z->next=NULL;
?? ??? ??? ?if(x==NULL)
?? ??? ??? ??? ?x=z;
?? ??? ??? ?else
?? ??? ??? ??? ?v->next=z;
?? ??? ??? ?v=z;}
?? ??? ?p=p->next;
?? ?}
?? ?head->next=x;
?? ?p=x;
?? ?q=p->next;
?? ?while(q!=NULL)
?? ?{
?? ??? ?a=head;
?? ??? ?b=a->next;
?? ??? ?j=0;
?? ??? ?while(a!=p)
?? ??? ?{
?? ??? ??? ?if(q->salary>b->salary)
?? ??? ??? ?{
?? ??? ??? ??? ?p->next=q->next;
?? ??? ??? ??? ?q->next=b;
?? ??? ??? ??? ?a->next=q;
?? ??? ??? ??? ?j=1;
?? ??? ??? ??? ?break;
?? ??? ??? ?}
?? ??? ??? ?a=b;
?? ??? ??? ?b=b->next;
?? ??? ?}
?? ??? ?if(j==1)
?? ??? ??? ?q=p->next;
?? ??? ?else{
?? ??? ??? ?p=q;
?? ??? ??? ?q=q->next;}
?? ?}
?? ?s=head->next;
?? ?while(s!=NULL){
?? ??? ?printf("工号 姓名 性别 部门 岗位 工龄 工时 时薪 销售额 底薪 工资\n");
?? ??? ?printf("%-5d%-5s%-5d%-5d%-5d%-5d%-5d%-5d%-7d%-5d%-5d\n",s->num,s->name,s->sex,s->department,s->post,s->lengthservice,s->hour,s->hoursalary,s->sales,s->basicsalary,s->salary);
?? ??? ?s=s->next;
?? ?}
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持源码搜藏网。


下一篇:没有了

C语言阅读排行

最新文章