C语言设计一个小型公司人员管理程序,程序能够实现对人员信息的输入、输出、插入、删除、修改、查找和排序,使用文件作为信息的外部存储形式
时间: 2023-07-10 07:12:57 浏览: 36
好的,我会尽力回答你的问题。
首先,你可以使用结构体来存储人员的信息,定义如下:
```c
struct employee {
int id; // 员工编号
char name[20]; // 员工姓名
char sex[10]; // 员工性别
int age; // 员工年龄
char phone[20]; // 员工电话
char address[50];// 员工住址
};
```
然后,你可以使用文件来存储人员信息,包括读取和写入文件。以下是一些示例代码:
```c
// 读取文件中的员工信息
void read_employee(struct employee *emp) {
FILE *fp;
fp = fopen("employee.txt", "r");
if (fp != NULL) {
while (fscanf(fp, "%d %s %s %d %s %s", &emp->id, emp->name, emp->sex, &emp->age, emp->phone, emp->address) != EOF) {
printf("%d %s %s %d %s %s\n", emp->id, emp->name, emp->sex, emp->age, emp->phone, emp->address);
}
fclose(fp);
}
}
// 写入员工信息到文件
void write_employee(struct employee emp) {
FILE *fp;
fp = fopen("employee.txt", "a");
if (fp != NULL) {
fprintf(fp, "%d %s %s %d %s %s\n", emp.id, emp.name, emp.sex, emp.age, emp.phone, emp.address);
fclose(fp);
}
}
```
接下来,你可以实现对员工信息的增删改查和排序操作。以下是一些示例代码:
```c
// 插入员工信息
void insert_employee(struct employee emp) {
write_employee(emp);
}
// 删除员工信息
void delete_employee(int id) {
FILE *fp1, *fp2;
struct employee emp;
fp1 = fopen("employee.txt", "r");
fp2 = fopen("temp.txt", "w");
if (fp1 != NULL && fp2 != NULL) {
while (fscanf(fp1, "%d %s %s %d %s %s", &emp.id, emp.name, emp.sex, &emp.age, emp.phone, emp.address) != EOF) {
if (emp.id != id) {
fprintf(fp2, "%d %s %s %d %s %s\n", emp.id, emp.name, emp.sex, emp.age, emp.phone, emp.address);
}
}
fclose(fp1);
fclose(fp2);
remove("employee.txt");
rename("temp.txt", "employee.txt");
}
}
// 修改员工信息
void modify_employee(int id, struct employee emp) {
FILE *fp1, *fp2;
struct employee e;
fp1 = fopen("employee.txt", "r");
fp2 = fopen("temp.txt", "w");
if (fp1 != NULL && fp2 != NULL) {
while (fscanf(fp1, "%d %s %s %d %s %s", &e.id, e.name, e.sex, &e.age, e.phone, e.address) != EOF) {
if (e.id == id) {
fprintf(fp2, "%d %s %s %d %s %s\n", emp.id, emp.name, emp.sex, emp.age, emp.phone, emp.address);
} else {
fprintf(fp2, "%d %s %s %d %s %s\n", e.id, e.name, e.sex, e.age, e.phone, e.address);
}
}
fclose(fp1);
fclose(fp2);
remove("employee.txt");
rename("temp.txt", "employee.txt");
}
}
// 查找员工信息
void search_employee(int id) {
FILE *fp;
struct employee emp;
fp = fopen("employee.txt", "r");
if (fp != NULL) {
while (fscanf(fp, "%d %s %s %d %s %s", &emp.id, emp.name, emp.sex, &emp.age, emp.phone, emp.address) != EOF) {
if (emp.id == id) {
printf("%d %s %s %d %s %s\n", emp.id, emp.name, emp.sex, emp.age, emp.phone, emp.address);
break;
}
}
fclose(fp);
}
}
// 排序员工信息
void sort_employee() {
FILE *fp1, *fp2;
struct employee emp[100], temp;
int i, j, n = 0;
fp1 = fopen("employee.txt", "r");
fp2 = fopen("temp.txt", "w");
if (fp1 != NULL && fp2 != NULL) {
while (fscanf(fp1, "%d %s %s %d %s %s", &emp[n].id, emp[n].name, emp[n].sex, &emp[n].age, emp[n].phone, emp[n].address) != EOF) {
n++;
}
for (i = 0; i < n - 1; i++) {
for (j = i + 1; j < n; j++) {
if (emp[i].id > emp[j].id) {
temp = emp[i];
emp[i] = emp[j];
emp[j] = temp;
}
}
}
for (i = 0; i < n; i++) {
fprintf(fp2, "%d %s %s %d %s %s\n", emp[i].id, emp[i].name, emp[i].sex, emp[i].age, emp[i].phone, emp[i].address);
}
fclose(fp1);
fclose(fp2);
remove("employee.txt");
rename("temp.txt", "employee.txt");
}
}
```
最后,你可以使用主函数来调用上述函数实现程序的功能,以下是一些示例代码:
```c
int main() {
struct employee emp;
int id;
printf("请输入员工信息:\n");
printf("编号 姓名 性别 年龄 电话 住址\n");
scanf("%d %s %s %d %s %s", &emp.id, emp.name, emp.sex, &emp.age, emp.phone, emp.address);
insert_employee(emp);
printf("请输入要删除的员工编号:\n");
scanf("%d", &id);
delete_employee(id);
printf("请输入要修改的员工编号以及新的员工信息:\n");
printf("编号 姓名 性别 年龄 电话 住址\n");
scanf("%d %s %s %d %s %s", &id, emp.name, emp.sex, &emp.age, emp.phone, emp.address);
modify_employee(id, emp);
printf("请输入要查找的员工编号:\n");
scanf("%d", &id);
search_employee(id);
printf("排序前的员工信息:\n");
read_employee(&emp);
sort_employee();
printf("排序后的员工信息:\n");
read_employee(&emp);
return 0;
}
```
希望这些代码可以帮助你实现一个小型公司人员管理程序。如果你还有其他问题,请继续提出。