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