#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
const int N = 5; // 我在salary.txt文件中就编辑了5行数据
struct personel
{
int no;
char name[20];
int wage1, wage2, wage3;
int sumwage;
} s[220];
int main()
{
FILE *fp;
if ((fp = fopen("salary.txt", "r")) == NULL)
{
printf("error");
exit(0);
}
for (int i = 0; i < N; i++) // 从文件中读取
{
fscanf(fp, "%d %s %d %d %d", &s[i].no, s[i].name, &s[i].wage1, &s[i].wage2, &s[i].wage3);
s[i].sumwage = s[i].wage1 + s[i].wage2 + s[i].wage3;
}
for (int i = 0; i < N - 1; i++) // 按照总工资从小到大排序
{
for (int j = i + 1; j < N; j++)
{
if (s[i].sumwage > s[j].sumwage)
{
struct personel temp;
temp = s[i];
s[i] = s[j];
s[j] = temp;
}
}
}
for (int i = 0; i < N; i++) // 输出排好序的员工信息
{
printf("%d %s %d %d %d\n", s[i].no, s[i].name, s[i].wage1, s[i].wage2, s[i].wage3);
}
int maxn = s[0].wage3, minn = s[0].wage3;
int indexmax = 0, indexmin = 0;
for (int i = 0; i < N; i++) // 寻找加班工资最少和最多的员工
{
if (maxn < s[i].wage3)
{
maxn = s[i].wage3;
indexmax = i;
}
if (minn > s[i].wage3)
{
minn = s[i].wage3;
indexmin = i;
}
}
printf("加班工资最少的编号:%d , 姓名:%s\n", s[indexmin].no, s[indexmin].name);
printf("加班工资最多的编号:%d , 姓名:%s\n", s[indexmax].no, s[indexmax].name);
char name[20];
printf("请输入员工姓名:\n"); // 输入员工姓名,获取员工信息
scanf("%s", name);
for (int i = 0; i < N; i++)
{
if (strcmp(name, s[i].name) == 0) // 运用这个函数,name最好是英文字符串,中文字符串可能会有bug。
{
printf("员工编号:%d 姓名:%s 基础工资:%d 奖金:%d 加班工资:%d\n", s[i].no, s[i].name, s[i].wage1, s[i].wage2, s[i].wage3);
}
}
return 0;
}
salary.txt文件中的数据
1 小明 5000 1500 800
2 小红 6800 1000 900
3 小张 4200 1200 700
4 张杰 5500 1000 1000
5 小李 2000 2000 2000