Step 19: Locate a Contact for Deletion

Medium Section 5: Update & Delete Module PRO
🔒 Login to Unlock

Problem Statement

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.

Input Format

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.

Output Format

For an existing contact, print Delete ID: [id], Selected Contact, ID: [id], Name: [name], Phone: [phone]. For an unknown ID, print Contact Not Found.

Constraints

The search must examine only active contacts from index 0 through contact_count - 1. No record is removed in this task.

Sample Input

1
101
Alice Johnson
1234567890
5
101
0

Sample Output

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

Explanation

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.

Starter Code

#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;
}

Limits

  • Time Limit: 1s
  • Memory Limit: 256MB

Embedded C Programming

Updated: March 15, 2026
Intermediate

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