Menu
Coddy logo textTech

Hepsini Bir Araya Getirme

Coddy'nin C Journey'sinin Mantık & Akış bölümünün bir parçası. Ders 54 / 63.

challenge icon

Görev

Kolay

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

  1. Önceki derslerdeki aynı Contact struct tanımını şu üyelerle kullanın:
    • Boyutu 50 olan bir karakter dizisi name
    • Boyutu 20 olan bir karakter dizisi phone
    • Boyutu 40 olan bir karakter dizisi email
    • Bir tamsayı age
  2. Önceki derslerdeki aynı createContact işlevini kullanın; bu işlev:
    • Bir Contact struct'ı için dinamik olarak bellek ayırır
    • Tüm üyeleri varsayılan değerlere başlatır
    • Kişiye yönelik bir işaretçi döndürür
  3. Önceki derslerdeki aynı populateContact işlevini kullanın; bu işlev:
    • Parametre olarak bir Contact struct'ına yönelik bir işaretçi alır
    • Kullanıcıdan girdi ister ve tüm kişi alanlarını doldurur
    • Girdi verilerini doğrular
  4. Bir displayContact işlevi yazın; bu işlev:
    • Parametre olarak bir Contact struct'ına yönelik sabit bir işaretçi alır
    • Her alanı, aşağıdaki tam biçimde kendi satırına yazdırır:
      Name: John
      Phone: 555-1234
      Email: john@email.com
      Age: 25
  5. updateContact adlı bir işlev yazın; bu işlev:
    • Parametre olarak bir Contact struct'ına yönelik bir işaretçi alır
    • Hiçbir şey döndürmez (void)
    • Aşağıdakileri yazdırarak kullanıcıdan hangi alanı güncellemek istediğ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 adı 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ında değilse): Invalid choice yazdırır
    • Başarılı bir güncellemeden sonra Contact updated successfully yazdırır
  6. main işlevinde eksiksiz bir kişi yönetimi iş akışı uygulayın:
    • createContact işlevini kullanarak bir kişi oluşturun
    • Kişi oluşturma işleminin başarılı olup olmadığını kontrol edin
    • İlk kişi verilerini doldurmak için populateContact işlevini çağırın
    • --- Initial Contact --- yazdırın
    • İlk kişi bilgilerini göstermek için displayContact işlevini çağırın
    • --- Updating Contact --- yazdırın
    • Bir alanı değiştirmek için updateContact işlevini çağırın
    • --- Updated Contact --- yazdırın
    • Güncellenmiş kişi bilgilerini yeniden göstermek için displayContact işlevini çağırın
    • Dinamik olarak ayrılmış belleği serbest bırakın
    • Contact management completed yazdırın

Not: Bu dersteki displayContact işlevi basit bir biçim kullanır: ek ayrıntılar veya birimler olmadan her alan için bir satır (örneğin yaş, "25 years old" yerine düz bir sayı olarak yazdırılır). Test durumları buna bağlı olduğundan çıktınızın yukarıda gösterilen biçimle tam olarak eşleştiğinden emin olun.

Bu son görev, 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, biçimlendirilmiş görüntüleme ve veri değiştirme. Dinamik olarak ayrılmış bir struct'ın oluşturulmasından temizlenmesine kadar olan tüm yaşam döngüsünü gösterirken, işlevleri düzenleme ve işlem boyunca işaretçileri doğru kullanma pratiği yapacaksınız.

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

Mantık & Akış bölümündeki tüm dersler

Kendi başına pratik yap: Online C derleyicisi