我对c相当陌生。目前,我正在学习文件管理。为了进一步理解文件,我想创建一个员工数据库系统,用户可以在其中创建、删除、更新或检索员工记录。首先,我创建了一个结构体,其中包含员工的变量,如ID、名、姓和工资,然后创建了一个函数来创建记录,但是存在问题。我知道如何从文件中搜索(使用ID号),但我不知道如何删除特定的记录。
(我很抱歉,因为我不小心删除了DeleteFunction所以我不能在我的代码中显示特定的函数)
- 据我所知,我的代码运行得很好,但是你会发现任何错误
#include <stdio.h>
#include <string.h>
typedef struct employee{
int id;
char name[40];
float pay;
}EMP;
void CreateEmployee(struct employee [] );
void DisplayRecord();
int main() {
EMP e[20];
CreateEmployee(e);
//return 0;
DisplayRecord();
return 0;
}
void CreateEmployee(struct employee x[]){
char choice ='y';
int i=0;
//EMP employee[20];
FILE *fp;
fp = fopen("employee.txt","a");
if (fp==NULL){
printf("File not created");
}
while((choice == 'Y') || (choice =='y')){
printf("Enter the employee's id:");
scanf("%i",&x[i].id);
fprintf(fp,"%it",x[i].id);
printf("nEnter the employee's name:");
scanf("%s",x[i].name);
fprintf(fp,"%st",x[i].name);
printf("nEnter the employee's pay:");
scanf("%f",&x[i].pay);
fprintf(fp,"%.2ftn",x[i].pay);
printf("nEnter another employee?n");
printf("Y - Yes N - No:n");
scanf("n%c",&choice);
i++;
}
fclose(fp);
}
void DisplayRecord(){
EMP temp;
FILE *fp = fopen("employee.txt", "r");
if(fp != NULL)
{
while( !feof(fp) )
{
fscanf(fp, "%i %s %f", &temp.id, temp.name, &temp.pay);
printf("%i %s %fn",temp.id, temp.name, temp.pay);
}
fclose(fp);
}
else
{
printf("An error occurred opening the filen");
}
}
我还不知道如何使用随机访问文件;这就是为什么我现在使用顺序访问
要删除一条记录,您有几个选择:
-
准备在每条记录中有一个
deleted
字段,读取记录时,跳过那些有deleted == true
的记录。要实际删除一条记录,将其deleted
标志设置为true
并保存。 -
读取数据文件,除要删除的记录外,将所有记录写入临时文件。最后,将临时文件重命名为
employees.txt
。 -
切换到一个真正的数据库来管理记录,因为所有典型的操作都是快速和容易的。