Menu
Coddy logo textTech

Hepsini Bir Araya Getirme

Coddy'nin C Journey'sinin Logic & Flow bölümünün bir parçası — ders 54 / 63.

challenge icon

Görev

Kolay

Önceki derslerde oluşturduğunuz tüm fonksiyonları entegre ederek kişi yönetim sisteminizi tamamlayın. Programınız şunları yapmalıdır:

  1. Önceki derslerdeki şu üyelere sahip aynı Contact struct tanımını kullanın:
    • 50 boyutunda bir karakter dizisi name
    • 20 boyutunda bir karakter dizisi phone
    • 40 boyutunda bir karakter dizisi email
    • Bir tam sayı age
  2. Önceki derslerdeki şu işleri yapan aynı createContact fonksiyonunu kullanın:
    • Bir Contact struct'ı için dinamik olarak bellek ayırır
    • Tüm üyeleri varsayılan değerlere başlatır
    • Kişiye bir işaretçi (pointer) döndürür
  3. Önceki derslerdeki şu işleri yapan aynı populateContact fonksiyonunu kullanın:
    • Parametre olarak bir Contact struct işaretçisi alır
    • Kullanıcıdan girdi ister ve tüm kişi alanlarını doldurur
    • Girdi verilerini doğrular
  4. Şu işleri yapan bir displayContact fonksiyonu yazın:
    • Parametre olarak bir Contact struct'ına sabit (constant) bir işaretçi alır
    • Her alanı tam olarak şu formatta kendi satırına yazdırır:
      Name: John
      Phone: 555-1234
      Email: john@email.com
      Age: 25
  5. Şu işleri yapan updateContact adında bir fonksiyon yazın:
    • Parametre olarak bir Contact struct işaretçisi alır
    • Hiçbir şey döndürmez (void)
    • Şunları yazdırarak kullanıcıdan hangi alanı güncelleyeceğini seçmesini ister:
      • What would you like to update?
      • 1. Name
      • 2. Phone
      • 3. Email
      • 4. Age
      • Enter choice (1-4):
    • Kullanıcının seçimini okur ve ilgili alanı günceller:
      • Seçim 1 ise: Enter new name: yazdırır ve ismi günceller
      • Seçim 2 ise: Enter new phone: yazdırır ve telefonu günceller
      • Seçim 3 ise: Enter new email: yazdırır ve e-postayı günceller
      • Seçim 4 ise: Enter new age: yazdırır ve yaşı günceller
      • Seçim geçersizse (1-4 arası değilse): Invalid choice yazdırır
    • Başarılı bir güncellemeden sonra Contact updated successfully yazdırır
  6. Main fonksiyonunda, eksiksiz bir kişi yönetimi iş akışı uygulayın:
    • createContact fonksiyonunu kullanarak bir kişi oluşturun
    • Kişi oluşturmanın başarılı olup olmadığını kontrol edin
    • Başlangıç kişi verilerini doldurmak için populateContact fonksiyonunu çağırın
    • --- Initial Contact --- yazdırın
    • Başlangıç kişi bilgilerini göstermek için displayContact fonksiyonunu çağırın
    • --- Updating Contact --- yazdırın
    • Bir alanı değiştirmek için updateContact fonksiyonunu çağırın
    • --- Updated Contact --- yazdırın
    • Güncellenmiş kişi bilgilerini göstermek için displayContact fonksiyonunu tekrar çağırın
    • Dinamik olarak ayrılan belleği serbest bırakın
    • Contact management completed yazdırın

Not: Bu dersteki displayContact fonksiyonu basit bir format kullanır — ek ayrıntı veya birim olmadan her alan için bir satır (örneğin, yaş "25 years old" olarak değil, düz bir sayı olarak yazdırılır). Test vakaları buna bağlı olduğundan, çıktınızın yukarıda gösterilen formatla tam olarak eşleştiğinden emin olun.

Bu final görevi, kişi yönetim sisteminizin tüm bileşenlerini bir araya getirir: struct tanımı, dinamik bellek ayırma, veri girişi ve doğrulama, formatlı görüntüleme ve veri değiştirme. Tüm süreç boyunca fonksiyon organizasyonu ve işaretçilerin doğru kullanımını uygularken, dinamik olarak ayrılmış bir struct'ın oluşturulmasından temizlenmesine kadar tüm yaşam döngüsünü göstereceksiniz.

Kendin dene

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

Logic & Flow bölümündeki tüm dersler