Implement the update_contact() function without changing any previously completed code. When the Update menu option is selected, read a contact ID, search the existing phonebook using linear search, and if the contact exists, read a new phone number, validate that it contains between 1 and 14 characters, and update only that contact’s phone field. If the ID does not exist, print Contact Not Found. The Add, Display, Search, and main menu implementations from all previous tasks must remain intact.
Complete contacts may first be added using menu choice 1. Menu choice 4 opens Update, followed by an integer contact ID and, when found, a new phone number. The application ends with menu choice 0.
For an existing ID, print Update ID: [id], then New Phone: [phone], then Phone Updated. For an unknown ID, print Contact Not Found. For an invalid phone length, print Invalid Phone and leave the existing phone unchanged.
The contact ID must match an existing record. Phone numbers must contain between 1 and 14 characters. Updating a contact must not change its ID or name.
1 101 Alice Johnson 1234567890 4 101 9876543210 0
Contact Book Ready.
Phonebook Capacity: 100
Contacts: 0
Menu:
Add
ID: 101
Valid ID
Name: Alice Johnson
Phone: 1234567890
Valid Phone
Contact Added
Menu:
Update
Update ID: 101
New Phone: 9876543210
Phone Updated
Menu:
Exit
Updating a contact demonstrates modifying a specific field of an existing structure without creating a new record. The operation locates the record by ID and changes only its phone number.
#include <stdio.h>
#include <string.h>
struct Contact {
int id;
char name[50];
char phone[15];
};
struct Contact phonebook[100];
int contact_count = 0;
void add_contact();
void display_contacts();
void search_contact();
void update_contact();
void delete_contact();
void add_contact() {
if (contact_count >= 100) {
printf("\nPhonebook Full");
return;
}
int id;
if (scanf("%d", &id) == 1) {
printf("\nID: %d", id);
if (id > 0) {
printf("\nValid ID");
{
int duplicate = 0;
for (int i = 0; i < contact_count; i++) {
if (phonebook[i].id == id) {
duplicate = 1;
break;
}
}
if (duplicate) {
printf("\nDuplicate ID");
return;
}
}
getchar();
if (fgets(phonebook[contact_count].name,
sizeof(phonebook[contact_count].name), stdin) != NULL) {
phonebook[contact_count].name[
strcspn(phonebook[contact_count].name, "\n")
] = '\0';
printf("\nName: %s", phonebook[contact_count].name);
{
char phone_input[100];
if (fgets(phone_input, sizeof(phone_input), stdin) != NULL) {
phone_input[
strcspn(phone_input, "\n")
] = '\0';
printf("\nPhone: %s", phone_input);
if (strlen(phone_input) >= 1 &&
strlen(phone_input) <= 14) {
strcpy(phonebook[contact_count].phone, phone_input);
printf("\nValid Phone");
phonebook[contact_count].id = id;
contact_count++;
printf("\nContact Added");
} else {
printf("\nInvalid Phone");
}
}
}
}
} else {
printf("\nInvalid ID");
}
}
}
void display_contacts() {
if (contact_count == 0) {
printf("\nPhonebook Empty");
return;
}
printf("\nID Name Phone");
for (int i = 0; i < contact_count; i++) {
printf("\n%d %s %s",
phonebook[i].id,
phonebook[i].name,
phonebook[i].phone);
}
}
void search_contact() {
int mode;
if (scanf("%d", &mode) != 1) {
return;
}
switch (mode) {
case 1:
printf("\nSearch Mode: ID");
{
int search_id;
int found = 0;
if (scanf("%d", &search_id) == 1) {
for (int i = 0; i < contact_count; i++) {
if (phonebook[i].id == search_id) {
found = 1;
printf("\nFound Contact");
printf("\nID: %d", phonebook[i].id);
printf("\nName: %s", phonebook[i].name);
printf("\nPhone: %s", phonebook[i].phone);
break;
}
}
if (!found) {
printf("\nContact Not Found");
}
}
}
break;
case 2:
printf("\nSearch Mode: Name");
{
char search_name[50];
int found = 0;
getchar();
if (fgets(search_name, sizeof(search_name), stdin) != NULL) {
search_name[
strcspn(search_name, "\n")
] = '\0';
for (int i = 0; i < contact_count; i++) {
if (strcmp(phonebook[i].name, search_name) == 0) {
found = 1;
printf("\nFound Contact");
printf("\nID: %d", phonebook[i].id);
printf("\nName: %s", phonebook[i].name);
printf("\nPhone: %s", phonebook[i].phone);
break;
}
}
if (!found) {
printf("\nContact Not Found");
}
}
}
break;
default:
printf("\nInvalid Search Mode");
break;
}
}
void update_contact() {
// Write your code here
}
void delete_contact() {
}
int main() {
int choice;
printf("Contact Book Ready.");
printf("\nPhonebook Capacity: %d", 100);
printf("\nContacts: %d", contact_count);
while (1) {
printf("\nMenu:");
if (scanf("%d", &choice) != 1) {
break;
}
switch (choice) {
case 1:
printf("\nAdd");
add_contact();
break;
case 2:
printf("\nDisplay");
display_contacts();
break;
case 3:
printf("\nSearch");
search_contact();
break;
case 4:
printf("\nUpdate");
update_contact();
break;
case 5:
printf("\nDelete");
delete_contact();
break;
case 0:
printf("\nExit");
return 0;
default:
printf("\nInvalid Choice");
break;
}
}
return 0;
}Embedded systems rely on efficient low-level programming to interact directly with hardware. In this course, you will learn how to write practical Embedded C programs used in real microcontroller-based systems. Rather than focusing only on theory, this course follows a practice-driven approach. Each lesson includes hands-on coding exercises that simulate real firmware development tasks used