Begin implementing delete_contact() without changing any existing functionality. Read a contact ID, search for it using linear search, and if the record exists, print the record that has been selected for deletion using ID, Name, and Phone. Do not remove or shift the record yet. If the ID does not exist, print Contact Not Found. The function’s deletion preparation behavior will be completed in Task 20.
Complete Add Contact operations may occur first. Menu choice 5 opens Delete, followed by an integer contact ID. The application ends with menu choice 0.
For an existing contact, print Delete ID: [id], Selected Contact, ID: [id], Name: [name], Phone: [phone]. For an unknown ID, print Contact Not Found.
The search must examine only active contacts from index 0 through contact_count - 1. No record is removed in this task.
1 101 Alice Johnson 1234567890 5 101 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:
Delete
Delete ID: 101
Selected Contact
ID: 101
Name: Alice Johnson
Phone: 1234567890
Menu:
Exit
Deletion first requires locating the correct record. This task separates record lookup from the actual array modification so students can understand why the index of the matching element is needed before shifting records.
#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() {
int update_id;
int found = 0;
if (scanf("%d", &update_id) != 1) {
return;
}
for (int i = 0; i < contact_count; i++) {
if (phonebook[i].id == update_id) {
found = 1;
printf("\nUpdate ID: %d", update_id);
getchar();
{
char new_phone[100];
if (fgets(new_phone, sizeof(new_phone), stdin) != NULL) {
new_phone[
strcspn(new_phone, "\n")
] = '\0';
printf("\nNew Phone: %s", new_phone);
if (strlen(new_phone) >= 1 &&
strlen(new_phone) <= 14) {
strcpy(phonebook[i].phone, new_phone);
printf("\nPhone Updated");
} else {
printf("\nInvalid Phone");
}
}
}
break;
}
}
if (!found) {
printf("\nContact Not Found");
}
}
void delete_contact() {
// Write your code here
}
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