Menu
CoddyTech

Menggabungkan Semuanya

Termasuk bagian Logika dan Alur dalam perjalanan C di Coddy. Pelajaran 54 dari 63.

challenge icon

Tantangan

Mudah

Lengkapi sistem pengelolaan kontakmu dengan mengintegrasikan semua fungsi yang telah kamu buat dalam pelajaran sebelumnya. Programmu harus:

  1. Menggunakan definisi struct Contact yang sama dari pelajaran sebelumnya dengan anggota:
    • Array karakter name berukuran 50
    • Array karakter phone berukuran 20
    • Array karakter email berukuran 40
    • Bilangan bulat age
  2. Menggunakan fungsi createContact yang sama dari pelajaran sebelumnya, yang:
    • Mengalokasikan memori secara dinamis untuk struct Contact
    • Menginisialisasi semua anggota dengan nilai bawaan
    • Mengembalikan pointer ke kontak
  3. Menggunakan fungsi populateContact yang sama dari pelajaran sebelumnya, yang:
    • Menerima pointer ke struct Contact sebagai parameternya
    • Meminta input dari pengguna dan mengisi semua field kontak
    • Memvalidasi data input
  4. Menulis fungsi displayContact yang:
    • Menerima pointer konstan ke struct Contact sebagai parameternya
    • Mencetak setiap field pada baris tersendiri dengan format persis seperti ini:
      Name: John
      Phone: 555-1234
      Email: john@email.com
      Age: 25
  5. Menulis fungsi bernama updateContact yang:
    • Menerima pointer ke struct Contact sebagai parameternya
    • Tidak mengembalikan apa pun (void)
    • Meminta pengguna memilih field yang akan diperbarui dengan mencetak:
      • What would you like to update?
      • 1. Name
      • 2. Phone
      • 3. Email
      • 4. Age
      • Enter choice (1-4):
    • Membaca pilihan pengguna dan memperbarui field yang sesuai:
      • Jika pilihan adalah 1: mencetak Enter new name: dan memperbarui nama
      • Jika pilihan adalah 2: mencetak Enter new phone: dan memperbarui nomor telepon
      • Jika pilihan adalah 3: mencetak Enter new email: dan memperbarui email
      • Jika pilihan adalah 4: mencetak Enter new age: dan memperbarui usia
      • Jika pilihan tidak valid, yaitu bukan 1-4: mencetak Invalid choice
    • Setelah pembaruan berhasil, mencetak Contact updated successfully
  6. Di fungsi main, menerapkan alur kerja pengelolaan kontak yang lengkap:
    • Membuat kontak menggunakan fungsi createContact
    • Memeriksa apakah pembuatan kontak berhasil
    • Memanggil fungsi populateContact untuk mengisi data kontak awal
    • Mencetak --- Initial Contact ---
    • Memanggil fungsi displayContact untuk menampilkan informasi kontak awal
    • Mencetak --- Updating Contact ---
    • Memanggil fungsi updateContact untuk mengubah satu field
    • Mencetak --- Updated Contact ---
    • Memanggil fungsi displayContact sekali lagi untuk menampilkan informasi kontak yang telah diperbarui
    • Membebaskan memori yang dialokasikan secara dinamis
    • Mencetak Contact management completed

Catatan: Fungsi displayContact dalam pelajaran ini menggunakan format sederhana: satu baris untuk setiap field tanpa detail atau satuan tambahan (misalnya, usia dicetak sebagai angka biasa, bukan "25 years old"). Pastikan outputmu sama persis dengan format yang ditampilkan di atas, karena kasus uji bergantung padanya.

Tantangan terakhir ini menggabungkan semua komponen sistem pengelolaan kontakmu: definisi struct, alokasi memori dinamis, input dan validasi data, tampilan terformat, serta modifikasi data. Kamu akan menunjukkan seluruh siklus hidup struct yang dialokasikan secara dinamis, mulai dari pembuatan hingga pembersihan, sambil berlatih mengatur fungsi dan menggunakan pointer dengan benar selama proses berlangsung.

Coba sendiri

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct Contact {
    char name[50];
    char phone[20];
    char email[40];
    int age;
};

struct Contact* createContact() {
    struct Contact* contact = (struct Contact*)malloc(sizeof(struct Contact));
    if (contact != NULL) {
        strcpy(contact->name, "");
        strcpy(contact->phone, "");
        strcpy(contact->email, "");
        contact->age = 0;
    }
    return contact;
}

void populateContact(struct Contact* contactPtr) {
    printf("Enter name: ");
    fgets(contactPtr->name, sizeof(contactPtr->name), stdin);
    contactPtr->name[strcspn(contactPtr->name, "\n")] = '\0';
    
    printf("Enter phone: ");
    fgets(contactPtr->phone, sizeof(contactPtr->phone), stdin);
    contactPtr->phone[strcspn(contactPtr->phone, "\n")] = '\0';
    
    printf("Enter email: ");
    fgets(contactPtr->email, sizeof(contactPtr->email), stdin);
    contactPtr->email[strcspn(contactPtr->email, "\n")] = '\0';
    
    printf("Enter age: ");
    scanf("%d", &contactPtr->age);
}

void displayContact(const struct Contact *contactPtr) {
    printf("=== CONTACT DETAILS ===\n");
    printf("Name: %s\n", contactPtr->name);
    printf("Phone: %s\n", contactPtr->phone);
    printf("Email: %s\n", contactPtr->email);
    printf("Age: %d years old\n", contactPtr->age);
    printf("========================\n");
    
    printf("Name length: %lu characters\n", strlen(contactPtr->name));
    
    if (contactPtr->age >= 0 && contactPtr->age <= 12) {
        printf("Generation: Child\n");
    } else if (contactPtr->age >= 13 && contactPtr->age <= 19) {
        printf("Generation: Teenager\n");
    } else if (contactPtr->age >= 20 && contactPtr->age <= 39) {
        printf("Generation: Young Adult\n");
    } else if (contactPtr->age >= 40 && contactPtr->age <= 59) {
        printf("Generation: Middle-aged Adult\n");
    } else if (contactPtr->age >= 60) {
        printf("Generation: Senior\n");
    }
    
    if (strchr(contactPtr->email, '@') != NULL) {
        printf("Email format: Valid\n");
    } else {
        printf("Email format: Invalid\n");
    }
}

int main() {
    struct Contact* contact = createContact();
    
    if (contact != NULL) {
        populateContact(contact);
        displayContact(contact);
        free(contact);
        printf("Program completed successfully\n");
    }
    
    return 0;
}

Semua pelajaran di Logika dan Alur

Latihan sendiri: Compiler C online