用c语言实现 3. 删除员工信息:删除员工信息时,运用两个步骤,首先进行拟删除,进行判断该员工信息是否在文件中同时也能使删除产生的失误率减少。而后确认后删除。
时间: 2024-04-30 19:22:03 浏览: 9
好的,以下是用C语言实现删除员工信息的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义员工结构体
typedef struct {
char name[20];
int age;
float salary;
} Employee;
// 定义函数:获取员工信息
Employee getEmployee() {
Employee emp;
printf("请输入员工姓名:");
scanf("%s", emp.name);
printf("请输入员工年龄:");
scanf("%d", &emp.age);
printf("请输入员工薪水:");
scanf("%f", &emp.salary);
return emp;
}
// 定义函数:显示员工信息
void displayEmployee(Employee emp) {
printf("姓名:%s\n", emp.name);
printf("年龄:%d\n", emp.age);
printf("薪水:%.2f\n", emp.salary);
}
// 定义函数:保存员工信息到文件
void saveEmployeeToFile(Employee emp, FILE *file) {
fwrite(&emp, sizeof(Employee), 1, file);
}
// 定义函数:从文件中读取员工信息
Employee readEmployeeFromFile(FILE *file) {
Employee emp;
fread(&emp, sizeof(Employee), 1, file);
return emp;
}
// 定义函数:删除员工信息
void deleteEmployeeFromFile(char *name) {
FILE *file = fopen("employees.dat", "r");
if (file == NULL) {
printf("打开文件失败!\n");
return;
}
// 打开临时文件
FILE *tempFile = fopen("temp.dat", "w");
if (tempFile == NULL) {
printf("打开文件失败!\n");
fclose(file);
return;
}
Employee emp;
int found = 0;
// 逐一读取员工信息
while (fread(&emp, sizeof(Employee), 1, file) == 1) {
// 如果找到要删除的员工信息,则标记为已找到,不保存到临时文件中
if (strcmp(emp.name, name) == 0) {
found = 1;
} else {
// 否则保存到临时文件中
fwrite(&emp, sizeof(Employee), 1, tempFile);
}
}
// 关闭文件
fclose(file);
fclose(tempFile);
// 如果找到了要删除的员工信息,则删除原文件,将临时文件重命名为原文件名
if (found) {
remove("employees.dat");
rename("temp.dat", "employees.dat");
printf("删除成功!\n");
} else {
remove("temp.dat");
printf("未找到要删除的员工信息!\n");
}
}
int main() {
// 获取员工信息
Employee emp = getEmployee();
// 保存员工信息到文件
FILE *file = fopen("employees.dat", "a");
if (file == NULL) {
printf("打开文件失败!\n");
return 1;
}
saveEmployeeToFile(emp, file);
fclose(file);
// 显示员工信息
printf("保存员工信息成功!\n");
displayEmployee(emp);
// 删除员工信息
char name[20];
printf("请输入要删除的员工姓名:");
scanf("%s", name);
deleteEmployeeFromFile(name);
return 0;
}
```
代码中,我们定义了一个`Employee`结构体,用于存储员工的姓名、年龄和薪水信息。`getEmployee()`函数用于获取员工信息,`displayEmployee()`函数用于显示员工信息,`saveEmployeeToFile()`函数用于保存员工信息到文件,`readEmployeeFromFile()`函数用于从文件中读取员工信息。
在`deleteEmployeeFromFile()`函数中,我们首先打开原文件和一个临时文件,然后逐一读取原文件中的员工信息,如果找到要删除的员工信息,则标记为已找到,不保存到临时文件中,否则保存到临时文件中。最后,如果找到了要删除的员工信息,则删除原文件,将临时文件重命名为原文件名,否则删除临时文件,并提示未找到要删除的员工信息。
在`main()`函数中,我们先保存一个员工信息到文件,然后提示用户输入要删除的员工姓名,调用`deleteEmployeeFromFile()`函数进行删除操作。