删除文件中的记录(C编程)



我对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");
 }
}

我还不知道如何使用随机访问文件;这就是为什么我现在使用顺序访问

要删除一条记录,您有几个选择:

  1. 准备在每条记录中有一个deleted字段,读取记录时,跳过那些有deleted == true的记录。要实际删除一条记录,将其deleted标志设置为true并保存。

  2. 读取数据文件,除要删除的记录外,将所有记录写入临时文件。最后,将临时文件重命名为employees.txt

  3. 切换到一个真正的数据库来管理记录,因为所有典型的操作都是快速和容易的。

顺便说一下,你还没有说为什么你喜欢C作为一种编程语言。如果是因为您可以快速完成工作,那么一旦您的程序变大了一点,您就会感到失望,因为您必须在代码中显式地进行内存管理和错误处理。而且,由于C没有内置的内存保护,它很容易让你搬起石头砸你的脚(这样你的程序就会崩溃,无法工作)。因此,在完全爱上一门语言之前,不妨四处看看,看看能否找到更好的。

相关内容

  • 没有找到相关文章

最新更新