结构体1 员工信息输出

#include <stdio.h>
#include <stdlib.h>
#include "string.h"
// 创建员工的结构体
struct emp {
    int num;// 编号
    char name[10];// 员工姓名
    int base;// 基础工资
    int bonus;// 奖金
    int over;// 加班工资
    int total;// 总工资
};
struct employee{
    int num;
    char name[10];
    int base;
    int bonus;
    int over;
    int total;
};
void sort(struct employee *emp,int len){
    for (int i = 0; i < len-1; ++i) {
        for (int j = 0; j < len-1-i; ++j){
            if (emp[j].total > emp[j + 1].total) {
                struct employee temp;
                temp = emp[j];
                emp[j] = emp[j + 1];
                emp[j + 1] = temp;
            }
        }
    }
}
//冒泡排序员工按工资大小排
void bubbleSort(struct emp *pEmp, int len)
{
    int i,j;
    for(i=0;i<len-1;i++)
    {for(j=0;j<len-1-i;j++)
        {if(pEmp[j].total > pEmp[j+1].total)   //把员工按总工资排序
             {
                struct emp temp=pEmp[j];
                pEmp[j] = pEmp[j+1];
                pEmp[j+1] = temp;
            }
        }
    }
}
void print(struct employee *emp,int len){
    printf("num    name    base    bonus    over");
    for (int i = 0; i < len; ++i) {
        printf("%d %s %d %d %d",emp[i].num,emp[i].name,emp[i].base,emp[i].bonus,emp[i].over);
    }
}
//打印员工信息
void printfArray(struct emp *pEmp, int len)
{
    for(int i=0;i<len;i++)
    {
        printf("员工编号: %d\t员工姓名: %s\t基础工资: %d\t奖金: %d\t加班工资: %d\n",
                pEmp[i].num, pEmp[i].name, pEmp[i].base, pEmp[i].bonus, pEmp[i].over);

    }
}
void overprint(struct employee *emp,int len){
    int max=0;
    int min=0;
    for (int i = 1; i < len; ++i) {
        if (emp[max].over < emp[i].over)
            max=i;
        if (emp[min].over > emp[i].over)
            min=i;
    }
    printf("the max over employee information:\n");
    printf("%d %s %d %d %d\n",emp[max].num,emp[max].name,emp[max].base,emp[max].bonus,emp[max].over);
    printf("the min over employee information:\n");
    printf("%d %s %d %d %d\n",emp[min].num,emp[min].name,emp[min].base,emp[min].bonus,emp[min].over);
}
//  输出加班工资最少和最多的人的编号和姓名
void fun2(struct emp *pEmp, int len)
{
    int max=pEmp[0].over;
    int min=pEmp[0].over;
    struct emp maxEmp = pEmp[0], minEmp = pEmp[0];   //方便输出
    for(int i=0;i<len;i++)
    {
        if(max<pEmp[i].over)
        {
            max=pEmp[i].over;
            maxEmp=pEmp[i];
        }
        if(min>pEmp[i].over)
        {
            min=pEmp[i].over;
            minEmp=pEmp[i];
        }
    }
    printf("\n--------------------------------------------------------------------------------------------------------------------\n");
    printf("加班工资最多的 员工编号: %d\t员工姓名: %s\t基础工资: %d\t奖金: %d\t加班工资: %d\n", maxEmp.num, maxEmp.name, maxEmp.base, maxEmp.bonus, maxEmp.over);
    printf("加班工资最少的 员工编号: %d\t员工姓名: %s\t基础工资: %d\t奖金: %d\t加班工资: %d\n", minEmp.num, minEmp.name, minEmp.base, minEmp.bonus, minEmp.over);
}
void nameprint(struct employee *emp,int len){
    char name[10];
    printf("please input a name:\n");
    scanf("%s",&name);
    for (int i = 0; i < len; ++i) {
        if (strcmp(name,emp[i].name)==0)
            printf("%d %s %d %d %d",emp[i].num,emp[i].name,emp[i].base,emp[i].bonus,emp[i].over);
    }
}
//  根据输入的员工姓名输出员工信息
void fun3(struct emp *pEmp, int len)
{
    char name[10];
    printf("\n请输入员工姓名:\n");
    scanf("%s",&name);
    for(int i=0;i<len;i++)
    {
        if(strcmp(name,pEmp[i].name)==0)  //名字一样
        {
            printf("\n员工编号: %d\t员工姓名: %s\t基础工资: %d\t奖金: %d\t加班工资: %d\n", pEmp[i].num, pEmp[i].name, pEmp[i].base, pEmp[i].bonus, pEmp[i].over);
        }
    }
}
int main()
{
    FILE *fp;
    fp=fopen("Salary.txt", "r");
    if (fp==NULL)
    {
        printf("error!");
        return 0;
    }
    struct emp emps[200];//先建一个员工结构体数组类型
    int index=0;  //数组索引下标
    while(!feof(fp))// 只要文件里还有内容就循环读取,标准写法
    {
        struct emp obj;
        fscanf(fp, "%d%s%d%d%d", &obj.num, obj.name, &obj.base, &obj.bonus, &obj.over);//读取文件
        obj.total=obj.base+obj.bonus+obj.over;
        emps[index++]=obj;
    }
    bubbleSort(emps, index);// 对员工数组进行排序
    printfArray(emps, index);// 打印员工信息
    fun2(emps, index);// 2 输出加班工资最少和最多的人的编号和姓名
    fun3(emps, index);// 3 根据输入的员工姓名输出员工信息
    return 0;
}

/*2021第三题
 *Salary.txt 中有 200 条员工记录,格式如下:
 员工编号 员工姓名 基础工资 奖金 加班工资
1 李明 2000 1500 800
2 小红 1800 1000 900
3 小张 2200 1200 800
4 张杰 2500 1000 1000
实现以下功能:
(1)读取文件,并按照总工资(基础工资+奖金+加班工资)从小到大的顺序输出员工信息
(2)输出加班工资最少和最多的人的编号和姓名
(3)根据输入的员工姓名输出员工信息,考虑重复情况

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值