用C语言编制某单位的职工档案管理程序(职工不超过200人),每个职工档案的基本数据项包括职工号、姓名、性别、年龄、部门、住址、基本工资、文化程度等,其他项目可根据需要自行设定。 要求在程序中用不同的函数完成以下各功能要求: (1)从键盘输入这些数据,并按职工号从小到人的顺序保存到文件zgzldat中(格式自 定,但要包含以上各项信息)。 (2)可根据职工姓名查找并输出该职工的档案。 (3)可按部门打印出某个部门的职工工资表(包含职工号、姓名、基本工资等项),并查 找出全厂中基本工资最高的职工和基本工资最低的职工。 (4)打印全厂职工的年龄分布情况(包括<35岁、36~45岁、46~55岁、>55岁各年龄段的人数)。
时间: 2023-07-10 12:11:55 浏览: 82
好的,这是一个比较复杂的问题,但我会尽力回答。以下是程序的实现步骤:
1. 定义职工档案的结构体,并在主函数中定义一个职工档案数组,用于存储职工信息。
```c
struct Staff {
int id; // 职工号
char name[20]; // 姓名
char sex; // 性别
int age; // 年龄
char department[20]; // 部门
char address[50]; // 住址
double salary; // 基本工资
char education[20]; // 文化程度
} staff[200];
```
2. 编写函数实现从键盘输入职工信息,并按职工号从小到大的顺序保存到文件中。
```c
void saveToFile() {
FILE *fp;
fp = fopen("zgzldat", "w");
if (fp == NULL) {
printf("文件打开失败!");
return;
}
int i, j;
struct Staff temp;
for (i = 0; i < 200; i++) {
if (staff[i].id == 0) {
break;
}
for (j = i + 1; j < 200; j++) {
if (staff[j].id == 0) {
break;
}
if (staff[i].id > staff[j].id) {
temp = staff[i];
staff[i] = staff[j];
staff[j] = temp;
}
}
fprintf(fp, "%d %s %c %d %s %s %.2lf %s\n", staff[i].id, staff[i].name, staff[i].sex, staff[i].age, staff[i].department, staff[i].address, staff[i].salary, staff[i].education);
}
fclose(fp);
}
```
3. 编写函数实现根据职工姓名查找并输出该职工的档案。
```c
void searchByName() {
char name[20];
printf("请输入职工姓名:");
scanf("%s", name);
int i;
for (i = 0; i < 200; i++) {
if (strcmp(staff[i].name, name) == 0) {
printf("职工号:%d\n", staff[i].id);
printf("姓名:%s\n", staff[i].name);
printf("性别:%c\n", staff[i].sex);
printf("年龄:%d\n", staff[i].age);
printf("部门:%s\n", staff[i].department);
printf("住址:%s\n", staff[i].address);
printf("基本工资:%.2lf\n", staff[i].salary);
printf("文化程度:%s\n", staff[i].education);
return;
}
}
printf("查无此人!\n");
}
```
4. 编写函数实现按部门打印出某个部门的职工工资表,并查找出全厂中基本工资最高的职工和基本工资最低的职工。
```c
void printSalaryByDepartment() {
char department[20];
printf("请输入部门名称:");
scanf("%s", department);
int i, count = 0;
double maxSalary = 0, minSalary = 0;
int maxIndex, minIndex;
for (i = 0; i < 200; i++) {
if (strcmp(staff[i].department, department) == 0) {
printf("职工号:%d\t", staff[i].id);
printf("姓名:%s\t", staff[i].name);
printf("基本工资:%.2lf\n", staff[i].salary);
count++;
if (staff[i].salary > maxSalary) {
maxSalary = staff[i].salary;
maxIndex = i;
}
if (staff[i].salary < minSalary || minSalary == 0) {
minSalary = staff[i].salary;
minIndex = i;
}
}
}
printf("全厂基本工资最高的职工为:%s,工资为%.2lf\n", staff[maxIndex].name, staff[maxIndex].salary);
printf("全厂基本工资最低的职工为:%s,工资为%.2lf\n", staff[minIndex].name, staff[minIndex].salary);
printf("%s部门共有%d名职工\n", department, count);
}
```
5. 编写函数实现打印全厂职工的年龄分布情况(包括<35岁、36~45岁、46~55岁、>55岁各年龄段的人数)。
```c
void printAgeDistribution() {
int i, count1 = 0, count2 = 0, count3 = 0, count4 = 0;
for (i = 0; i < 200; i++) {
if (staff[i].id == 0) {
break;
}
if (staff[i].age < 35) {
count1++;
} else if (staff[i].age >= 35 && staff[i].age < 46) {
count2++;
} else if (staff[i].age >= 46 && staff[i].age < 56) {
count3++;
} else {
count4++;
}
}
printf("<35岁的职工有%d人\n", count1);
printf("36~45岁的职工有%d人\n", count2);
printf("46~55岁的职工有%d人\n", count3);
printf(">55岁的职工有%d人\n", count4);
}
```
以上就是这个程序的实现步骤了,你可以根据需要自行调整代码。