用c语言完成(1)建立一个结构体,记录公司人员的信息:姓名(name),工号(num), 年龄(age),入职时间(time),工资(salary)。生成3个结构体变量,记录3名员工的信息,并输出。(2)将3名员工的信息以二进制的方式写入后缀名为dat的文件中,然后从dat文件读取并显示。(3)将3名员工的信息以文本的方式写入txt文件中,然后从txt文件中读取并显示。
时间: 2023-12-03 22:47:21 浏览: 76
下面是用C语言完成上述任务的代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Employee {
char name[20];
int num;
int age;
char time[20];
float salary;
};
int main() {
struct Employee emp[3];
int i;
// 输入员工信息
for (i = 0; i < 3; i++) {
printf("请输入第%d名员工的信息:\n", i+1);
printf("姓名:");
scanf("%s", emp[i].name);
printf("工号:");
scanf("%d", &emp[i].num);
printf("年龄:");
scanf("%d", &emp[i].age);
printf("入职时间:");
scanf("%s", emp[i].time);
printf("工资:");
scanf("%f", &emp[i].salary);
}
// 输出员工信息
printf("\n输出员工信息:\n");
for (i = 0; i < 3; i++) {
printf("姓名:%s\n", emp[i].name);
printf("工号:%d\n", emp[i].num);
printf("年龄:%d\n", emp[i].age);
printf("入职时间:%s\n", emp[i].time);
printf("工资:%f\n", emp[i].salary);
}
// 将员工信息以二进制写入dat文件中
FILE *fp_dat;
fp_dat = fopen("employee.dat", "wb");
if (fp_dat == NULL) {
printf("打开文件失败!\n");
exit(1);
}
fwrite(emp, sizeof(struct Employee), 3, fp_dat);
fclose(fp_dat);
// 从dat文件中读取员工信息并显示
struct Employee emp_dat[3];
fp_dat = fopen("employee.dat", "rb");
if (fp_dat == NULL) {
printf("打开文件失败!\n");
exit(1);
}
fread(emp_dat, sizeof(struct Employee), 3, fp_dat);
fclose(fp_dat);
printf("\n从dat文件读取员工信息:\n");
for (i = 0; i < 3; i++) {
printf("姓名:%s\n", emp_dat[i].name);
printf("工号:%d\n", emp_dat[i].num);
printf("年龄:%d\n", emp_dat[i].age);
printf("入职时间:%s\n", emp_dat[i].time);
printf("工资:%f\n", emp_dat[i].salary);
}
// 将员工信息以文本写入txt文件中
FILE *fp_txt;
fp_txt = fopen("employee.txt", "w");
if (fp_txt == NULL) {
printf("打开文件失败!\n");
exit(1);
}
for (i = 0; i < 3; i++) {
fprintf(fp_txt, "姓名:%s\n", emp[i].name);
fprintf(fp_txt, "工号:%d\n", emp[i].num);
fprintf(fp_txt, "年龄:%d\n", emp[i].age);
fprintf(fp_txt, "入职时间:%s\n", emp[i].time);
fprintf(fp_txt, "工资:%f\n", emp[i].salary);
fprintf(fp_txt, "\n");
}
fclose(fp_txt);
// 从txt文件中读取员工信息并显示
struct Employee emp_txt[3];
char str[100];
fp_txt = fopen("employee.txt", "r");
if (fp_txt == NULL) {
printf("打开文件失败!\n");
exit(1);
}
i = 0;
while (fgets(str, 100, fp_txt) != NULL) {
if (strstr(str, "姓名:") != NULL) {
sscanf(str, "姓名:%s", emp_txt[i].name);
}
if (strstr(str, "工号:") != NULL) {
sscanf(str, "工号:%d", &emp_txt[i].num);
}
if (strstr(str, "年龄:") != NULL) {
sscanf(str, "年龄:%d", &emp_txt[i].age);
}
if (strstr(str, "入职时间:") != NULL) {
sscanf(str, "入职时间:%s", emp_txt[i].time);
}
if (strstr(str, "工资:") != NULL) {
sscanf(str, "工资:%f", &emp_txt[i].salary);
i++;
}
}
fclose(fp_txt);
printf("\n从txt文件读取员工信息:\n");
for (i = 0; i < 3; i++) {
printf("姓名:%s\n", emp_txt[i].name);
printf("工号:%d\n", emp_txt[i].num);
printf("年龄:%d\n", emp_txt[i].age);
printf("入职时间:%s\n", emp_txt[i].time);
printf("工资:%f\n", emp_txt[i].salary);
}
return 0;
}
```
该程序首先定义了一个结构体 `Employee`,包含了记录员工信息的各个字段。然后使用该结构体定义了一个数组 `emp`,存储了3名员工的信息。程序使用 `for` 循环分别输入每一名员工的信息,并输出所有员工的信息。
接下来,程序将员工信息以二进制的方式写入了一个名为 `employee.dat` 的文件中,并从该文件中读取员工信息并显示。写入操作使用了 `fwrite` 函数,读取操作使用了 `fread` 函数。
最后,程序将员工信息以文本的方式写入了一个名为 `employee.txt` 的文件中,并从该文件中读取员工信息并显示。写入操作使用了 `fprintf` 函数,读取操作使用了 `fgets` 函数和 `sscanf` 函数。注意到 `fgets` 函数读取的每一行字符串包括了换行符,因此需要使用 `strstr` 函数判断字符串中是否包含了关键字,如果包含则使用 `sscanf` 函数从字符串中提取信息。