在C中使用.txt文件和电话簿程序的任务

在C中使用.txt文件和电话簿程序的任务,c,text-files,C,Text Files,下面是我用C语言编写的一个电话簿程序的代码。我在修改它时遇到了问题。我需要修改它,以便在向电话簿添加条目后,内容将写入.txt文件。删除条目后,我需要将内容写入同一个.txt文件,并打印全部内容。我应该使用fopen()函数吗?我是一个初学者 #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct Phonebook_Contacts { char

下面是我用C语言编写的一个电话簿程序的代码。我在修改它时遇到了问题。我需要修改它,以便在向电话簿添加条目后,内容将写入.txt文件。删除条目后,我需要将内容写入同一个.txt文件,并打印全部内容。我应该使用fopen()函数吗?我是一个初学者

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct Phonebook_Contacts
   {
      char FirstName[20]; 
      char LastName[20];
      char PhoneNumber[20]; 
   } phone; 


void AddEntry(phone * ); 
void DeleteEntry(phone * ); 
void PrintEntry(phone * );
void SearchForNumber(phone * ); 
void RandomName(phone * ); 
void DeleteAll(phone * ); 
void FreeContacts (phone * ); 


int counter = 0; 
char FileName[256]; 
FILE *pRead; 
FILE *pWrite; 


int main (void)
   {      
      phone *phonebook; 
      phonebook = (phone*) malloc(sizeof(phone)*100); 
      int iSelection = 0; 


         if (phonebook == NULL)
         {

         printf("Out of Memory. The program will now exit");
         return 1;
         }
         else {} 

      do
      {
         printf("\n\t\t\tPhonebook Menu");
         printf("\n\n\t(1)\tAdd Friend");
         printf("\n\t(2)\tDelete Friend");
         printf("\n\t(3)\tDisplay Phonebook Entries");
         printf("\n\t(4)\tSearch for Phone Number");
         printf("\n\t(5)\tFind a Random Friend");
         printf("\n\t(6)\tDelete All Entries");
         printf("\n\t(7)\tExit Phonebook");
         printf("\n\nWhat would you like to do? ");
         scanf("%d", &iSelection);  


         if (iSelection == 1)
         {
            AddEntry(phonebook); 
         } 



         if (iSelection == 2)
         {
            DeleteEntry(phonebook); 
         } 


         if (iSelection == 3)
         {
            PrintEntry(phonebook); 
         } 



         if (iSelection == 4)
         {
            SearchForNumber(phonebook);         
         } 


         if (iSelection == 5)
         {
            RandomName(phonebook);         
         } 


         if (iSelection == 6)
         {
            DeleteAll(phonebook); 
         } 


         if (iSelection == 7)
         {
            printf("\nYou have chosen to exit the Phonebook.\n");
            system("pause");
            FreeContacts(phonebook);
            return 0;
         } 
      } while (iSelection <= 9); 
   } 


void AddEntry (phone * phonebook)
{  
   pWrite = fopen("phonebook_contacts.dat", "a");
   if ( pWrite == NULL )
   {
      perror("The following error occurred ");
      exit(EXIT_FAILURE); 
   }
      else
      {
         counter++; 
         realloc(phonebook, sizeof(phone)); 

         printf("\nFirst Name: ");
         scanf("%s", phonebook[counter-1].FirstName);
         printf("Last Name: ");
         scanf("%s", phonebook[counter-1].LastName);
         printf("Phone Number (XXX-XXX-XXXX): "); 
         scanf("%s", phonebook[counter-1].PhoneNumber);
         printf("\n\tFriend successfully added to Phonebook\n"); 

         fprintf(pWrite, "%s\t%s\t%s\n", phonebook[counter-1].FirstName, phonebook[counter-1].LastName, phonebook[counter-1].PhoneNumber);
         fclose(pWrite); 
      } 
} 

void DeleteEntry (phone * phonebook)
{
   int x = 0;
   int i = 0;
   char deleteFirstName[20];  // 
   char deleteLastName[20];  

      printf("\nFirst name: ");
      scanf("%s", deleteFirstName);
      printf("Last name: ");
      scanf("%s", deleteLastName);

      for (x = 0; x < counter; x++)
      {
         if (strcmp(deleteFirstName, phonebook[x].FirstName) == 0) 
         {
            if (strcmp(deleteLastName, phonebook[x].LastName) == 0) 
            {
                for ( i = x; i < counter - 1; i++ )
               {
                  strcpy(phonebook[i].FirstName, phonebook[i+1].FirstName); 
                  strcpy(phonebook[i].LastName, phonebook[i+1].LastName); 
                  strcpy(phonebook[i].PhoneNumber, phonebook[i+1].PhoneNumber); 
               } 
               printf("Record deleted from the phonebook.\n\n");
               --counter; 
               return;
            } 
         } 
      }    

   printf("That contact was not found, please try again.");
}

void PrintEntry (phone * phonebook)
{
   int x = 0;

   printf("\nPhonebook Entries:\n\n ");
   pRead = fopen("phonebook_contacts.dat", "r");
   if ( pRead == NULL)
   {
      perror("The following error occurred: ");
      exit(EXIT_FAILURE);
   }
   else
   {
      for( x = 0; x < counter; x++) 
      {
         printf("\n(%d)\n", x+1); 
         printf("Name: %s %s\n", phonebook[x].FirstName, phonebook[x].LastName); 
         printf("Number: %s\n", phonebook[x].PhoneNumber); 
      } 
   } 
   fclose(pRead);
} 


void SortByFirstName (phone * phonebook)
{
   int i = 0;
   int x = 0;
   int swap;
   int TempCounter = counter;
   phone Temp; 

   do
   {
      swap = 0;
      for(i = 1; i < TempCounter; i++)
      {

         if(strcmp(phonebook[i-1].FirstName, phonebook[i].FirstName) > 0)
         {
            Temp = phonebook[i]; 
            phonebook[i] = phonebook[i-1]; 
            phonebook[i-1] = Temp; 

            strcpy(Temp.FirstName, phonebook[i].FirstName);
            strcpy(Temp.LastName, phonebook[i].LastName);
            strcpy(Temp.PhoneNumber, phonebook[i].PhoneNumber);

            swap = 1;
         }
      } 
      TempCounter--;
   } while (swap); 

   printf("\nYour friends in Alphabetical Order by First Name:\n\n");
   for( x = 0; x < counter; x++ )
   {
      printf("\n(%d)\n", x+1); 
      printf("Name: %s %s\n", phonebook[x].FirstName, phonebook[x].LastName); 
      printf("Number: %s\n", phonebook[x].PhoneNumber); 
   }   
} 


void SortByLastName (phone * phonebook)
   {
   int i = 0;
   int x = 0;
   int swap;
   int TempCounter = counter;
   phone Temp; 

   do
   {
      swap = 0;
      for(i = 1; i < TempCounter; i++)
      {

         if(strcmp(phonebook[i-1].LastName, phonebook[i].LastName) > 0)
         {
            Temp = phonebook[i]; 
            phonebook[i] = phonebook[i-1]; 
            phonebook[i-1] = Temp;

            strcpy(Temp.FirstName, phonebook[i].FirstName);
            strcpy(Temp.LastName, phonebook[i].LastName);
            strcpy(Temp.PhoneNumber, phonebook[i].PhoneNumber);

            swap = 1;
         } 
      } 
      TempCounter--;
   } while (swap); 

   printf("\nYour friends in Alphabetical Order by First Name:\n\n");
   for( x = 0; x < counter; x++ )
   {
      printf("\n(%d)\n", x+1); 
      printf("Name: %s %s\n", phonebook[x].FirstName, phonebook[x].LastName); 
      printf("Number: %s\n", phonebook[x].PhoneNumber); 
   }                 
} 


void SearchForNumber (phone * phonebook)
{
   int x = 0;
   char TempFirstName[20]; 
   char TempLastName[20]; 

   printf("\nPlease type the name of the friend you wish to find a number for.");
   printf("\n\nFirst Name: ");
   scanf("%s", TempFirstName);
   printf("Last Name: ");
   scanf("%s", TempLastName);
   for (x = 0; x < counter; x++)
   {
      if (strcmp(TempFirstName, phonebook[x].FirstName) == 0) 
      {
         if (strcmp(TempLastName, phonebook[x].LastName) == 0) 
         {

            printf("\n%s %s's phone number is %s\n", phonebook[x].FirstName, phonebook[x].LastName, phonebook[x].PhoneNumber);
         } 
      } 
   }     
} 


void RandomName (phone * phonebook)
{
   int iRandom = 0;
   srand(time(NULL));
   iRandom = rand() % counter;  
   int x = iRandom; 

   printf("\nYour random friend is: %s %s\n", phonebook[x].FirstName, phonebook[x].LastName);
   printf("Their phone number is: %s\n", phonebook[x].PhoneNumber);
}    


void DeleteAll (phone * phonebook)
{
   int x = 0;
   char nullStr[20] = {'\0'}; 

   for ( x = 0; x < counter; x++ )
   {
      strcpy(phonebook[x].FirstName, nullStr); 
      strcpy(phonebook[x].LastName, nullStr); 
      strcpy(phonebook[x].PhoneNumber, nullStr); 
      --counter; 
   }   

   printf("All Contacts have been deleted.\n");     
} 
void FreeContacts (phone * phonebook)
{
     --counter;
     for ( ; counter > 0; --counter)
     {
        free(phonebook[counter].FirstName); 
        free(phonebook[counter].LastName); 
        free(phonebook[counter].PhoneNumber); 
        free(phonebook); 
        counter = 0; 
        return; 
     }
} 
#包括
#包括
#包括
typedef结构电话簿\u联系人
{
charfirstname[20];
char LastName[20];
字符电话号码[20];
}电话;
无效补遗(电话*);
无效删除条目(电话*);
无效打印条目(电话*);
无效搜索号码(电话*);
姓名(电话*);
全部无效(电话*);
免费通讯录(电话*);
int计数器=0;
字符文件名[256];
文件*pRead;
文件*pWrite;
内部主(空)
{      
电话簿;
电话簿=(电话号码*)malloc(电话号码)*100);
int iSelection=0;
如果(电话簿==NULL)
{
printf(“内存不足。程序现在将退出”);
返回1;
}
else{}
做
{
printf(“\n\t\t\t电话簿菜单”);
printf(“\n\n\t(1)\t朋友”);
printf(“\n\t(2)\t删除朋友”);
printf(“\n\t(3)\t显示电话簿条目”);
printf(“\n\t(4)\t查询电话号码”);
printf(“\n\t(5)\t找到一个随机的朋友”);
printf(“\n\t(6)\t删除所有条目”);
printf(“\n\t(7)\tExit电话簿”);
printf(“\n\n您想做什么?”);
scanf(“%d”,选择(&I);
如果(iSelection==1)
{
附录(电话簿);
} 
如果(iSelection==2)
{
删除条目(电话簿);
} 
如果(iSelection==3)
{
打印输入(电话簿);
} 
如果(iSelection==4)
{
搜索号码(电话簿);
} 
如果(iSelection==5)
{
姓名(电话簿);
} 
如果(i选择==6)
{
删除所有(电话簿);
} 
如果(i选择==7)
{
printf(“\n您已选择退出电话簿。\n”);
系统(“暂停”);
免费通讯录(电话簿);
返回0;
} 
}while(i选择0)
{
Temp=电话簿[i];
电话簿[i]=电话簿[i-1];
电话簿[i-1]=临时;
strcpy(Temp.FirstName,电话簿[i].FirstName);
strcpy(Temp.LastName,电话簿[i].LastName);
strcpy(Temp.PhoneNumber,phonebook[i].PhoneNumber);
互换=1;
}
} 
临时计数器--;
}while(swap);
printf(“\n按姓名字母顺序排列的朋友:\n\n”);
对于(x=0;x0)
{
Temp=电话簿[i];
电话簿[i]=电话簿[i-1];
电话簿[i-1]=临时;
strcpy(Temp.FirstName,电话簿[i].FirstName);
strcpy(Temp.LastName,电话簿[i].LastName);
strcpy(Temp.PhoneNumber,phonebook[i].PhoneNumber);
互换=1;
} 
} 
临时计数器--;
}while(swap);
printf(“\n按姓名字母顺序排列的朋友:\n\n”);
对于(x=0;x0;--计数器)
{
免费(电话簿[计数器].FirstName);
免费(电话簿[计数器].LastName);
免费(电话簿[计数器]。电话号码);
免费(电话簿);
计数器=0;
返回;
}
} 

本程序中已经包含了您所需的几乎所有代码。我建议您从查找教程或阅读书籍中的文件I/O章节开始。为您提供的另一个资源是C函数的手册页。如果您使用的是*NIX系统,则可以键入
man fopen
 while( more to read){
    read fname line
    strcpy(phonebook[i].first_name, fname)
    read lname line
    strcpy(phonebook[i].last_name, fname)
    read num line
    strcpy(phonebook[i].number, num)
    increment i
 }