Надеюсь, я делаю это правильно, я новичок в C, и мне сложно понять, как изменить запись. Я делаю приложение телефонной книги, которое будет писать и записывать в текст. файл. Я закончил кодирование, но не могу изменить контакт. Пожалуйста, направь меня или покажи мне дорогу. Спасибо. Обновление ** Есть еще какая-то проблема, например, по какой-то причине в addentry он не может обнаружить второй оператор if else после того, как я обновил новый код **
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct Phonebook_Contacts
{
char FirstName[20];
char LastName[20];
char PhoneNumber[20];
char ID[20];
char Department[20]
} phone;
void AddEntry(phone * );
void DeleteEntry(phone * );
void PrintEntry(phone * );
void SearchID(phone * );
void EditAnEntry(phone * );
void ID(phone * );
void Department(phone * );
void DeleteAll(phone * );
void FreeContacts (phone * );
int count= 0;
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("tt**********WELCOME TO TELEPHONE DIRECTORY CONTACT*************");
printf("nnt(1)tAdd New");
printf("nt(2)tDelete Per Person ");
printf("nt(3)tDisplay Phonebook Entries");
printf("nt(4)tSearch for ID");
printf("nt(5)tModify a contact");
printf("nt(6)tDelete All Entries");
printf("nt(7)tExit Phonebook");
printf("nnWhat 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)
{
SearchID(phonebook);
}
if (iSelection == 5)
{
EditAnEntry(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)
{
int x;
int count= 0;
char SearchName[30];
FILE *f,*ptr;
f= fopen("Phonebook_Contacts.txt", "r");
if ( f == NULL )
{perror("The following error occurred ");
exit(EXIT_FAILURE);}
else{
fscanf(f, "%i", &count);
for(x = 0; x < count; x++){
counter++;
fscanf(f, "%s %s %s %s", phonebook[x].FirstName, phonebook[x].LastName, phonebook[x].PhoneNumber,phonebook[x].ID, phonebook[x].Department);}
fclose(f);
ptr = fopen("NewFile.txt", "w");
{if ( ptr == NULL );{
printf("nFile Not Found");}
else
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("ID: ");
scanf("%s",phonebook[counter-1].ID);
printf("Department");
scanf("%s", phonebook[counter-1].Department);
printf("ntUser successfully added to Phonebookn");
fprintf(pWrite, "%st%st%st%st%sn", phonebook[counter-1].FirstName, phonebook[counter-1].LastName, phonebook[counter-1].PhoneNumber,phonebook[counter-1].ID, phonebook[counter-1].Department);
fclose(pWrite);
}
}
fclose(ptr);
remove("Phonebook_Contacts.txt");
rename("NewFile.txt","Phonebook_Contacts.txt");
}
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);
strcpy(phonebook[i].ID, phonebook[i+1].ID);
strcpy(phonebook[i].Department, phonebook[i+1].Department);
}
printf("Record deleted from the phonebook.nn");
--counter;
return;
}
}
}
printf("That contact was not found, please try again.");
}
void PrintEntry (phone * phonebook)
{
int x = 0;
printf("nPhonebook Entries:nn ");
pRead = fopen("Phonebook_Contacts.txt", "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 %sn", phonebook[x].FirstName, phonebook[x].LastName);
printf("Number: %sn", phonebook[x].PhoneNumber);
printf("ID: %sn", phonebook[x].ID);
printf("Department: %sn", phonebook[x].Department);
}
}
}
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);
strcpy(Temp.ID, phonebook[i].ID);
strcpy(Temp.Department, phonebook[i].Department);
swap = 1;
}
}
TempCounter--;
} while (swap);
printf("nYour friends in Alphabetical Order by First Name:nn");
for( x = 0; x < counter; x++ )
{
printf("n(%d)n", x+1);
printf("Name: %s %sn", phonebook[x].FirstName, phonebook[x].LastName);
printf("Number: %sn", phonebook[x].PhoneNumber);
printf("ID: %sn", phonebook[x].ID);
printf("Department: %sn", phonebook[x].Department);
}
}
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);
strcpy(Temp.ID, phonebook[i].ID);
strcpy(Temp.Department, phonebook[i].Department);
swap = 1;
}
}
TempCounter--;
} while (swap);
printf("nYour friends in Alphabetical Order by First Name:nn");
for( x = 0; x < counter; x++ )
{
printf("n(%d)n", x+1);
printf("Name: %s %sn", phonebook[x].FirstName, phonebook[x].LastName);
printf("Number: %sn", phonebook[x].PhoneNumber);
printf("ID: %sn", phonebook[x].ID);
printf("Department: %sn", phonebook[x].Department);
}
}
void SearchID (phone * phonebook)
{
int x = 0;
char TempFirstName[20];
char TempLastName[20];
char TempPhoneNumber[20];
printf("nPlease type the ID of the User you wish to find a number for.");
printf("nnFirst Name: ");
scanf("%s", TempFirstName);
printf("Last Name: ");
scanf("%s", TempLastName);
printf("PhoneNumber: ");
scanf("%s", TempPhoneNumber);
for (x = 0; x < counter; x++);
{
if (strcmp(TempFirstName, phonebook[x].FirstName) == 0)
{
if (strcmp(TempLastName, phonebook[x].LastName) == 0)
{
if (strcmp(TempPhoneNumber, phonebook[x].PhoneNumber) == 0)
printf("n%s %s %s's ID is %sn", phonebook[x].FirstName, phonebook[x].LastName, phonebook[x].PhoneNumber, phonebook[x].ID, phonebook[x].Department);
}
}
}
}
void EditAnEntry (phone * phonebook)
{
int c;
int x = 0;
FILE *f;
char name[50];
f = fopen("Phonebook_Contacts.txt", "r");
if ( f == NULL )
{
perror("The following error occurred ");
exit(EXIT_FAILURE);
}
else
{
counter++;
fscanf(f, "%st%st%sn", phonebook[counter-1].FirstName, phonebook[counter-1].LastName, phonebook[counter-1].PhoneNumber, phonebook[x].ID, phonebook[x].Department);}
printf("nEnter CONTACT'S NAME TO MODIFY:n");
scanf("%s", name);
for ( x = 0; x < counter; x++ )
{
if (strcmp(name, phonebook[counter-1].FirstName) == 0){
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("ID: ");
scanf("%s",phonebook[counter-1].ID);
printf("Department");
scanf("%s", phonebook[counter-1].Department);
printf("ntUser successfully added to Phonebookn");
fprintf(pWrite, "%st%st%sn", phonebook[counter-1].FirstName, phonebook[counter-1].LastName, phonebook[counter-1].PhoneNumber, phonebook[counter-1].ID, phonebook[counter-1].Department);
fclose(pWrite);
printf("n Data is successfully modified");
}
else
{
printf(" n data is not found");}
{
fclose(f);
f=fopen("NewFile.txt","w");
if ( f == NULL )
printf("nFile Not Foundn");
else{
fprintf(f, "%i", counter);
for(x = 0; x < counter; x++){
fprintf(f, "n%st%st%st%s", phonebook[x].FirstName, phonebook[x].LastName, phonebook[x].PhoneNumber, phonebook[x].ID, phonebook[x].Department);}
}
remove("Phonebook_Contacts.txt");
rename("NewFile.txt","Phonebook_Contacts.txt");
main();
}
void DeleteAll(phone * phonebook);
{
int x = 0;
char nullStr[20] = {' '};
for ( x = 0; x < counter; x++ )
{
strcpy(phonebook[x].FirstName, nullStr);
strcpy(phonebook[x].LastName, nullStr);
strcpy(phonebook[x].PhoneNumber, nullStr);
strcpy(phonebook[x].ID, nullStr);
strcpy(phonebook[x].Department, nullStr);
--counter;
return 0;
}
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].ID);
free(phonebook[counter].Department);
free(phonebook);
counter = 0;
return 0;
}
}
}
}
```