Menu
Coddy logo textTech

Zusammenfassung: Struct ändern - Ptr

Teil des Abschnitts Logic & Flow der C-Journey von Coddy — Lektion 49 von 63.

challenge icon

Aufgabe

Einfach

Erstellen Sie ein C-Programm, das ein vollständiges Mitarbeiterverwaltungssystem unter Verwendung von dynamischer Speicherallokation, Struct-Pointern und Funktionen demonstriert. Ihr Programm sollte:

  1. Definieren Sie ein struct namens Employee mit den folgenden Elementen:
    • Ein Integer id zum Speichern der Mitarbeiter-ID
    • Ein Zeichen-Array name der Größe 50 zum Speichern des Mitarbeiternamens
    • Ein Zeichen-Array department der Größe 30 zum Speichern des Abteilungsnamens
    • Ein Float salary zum Speichern des Mitarbeitergehalts
    • Ein Integer yearsOfService zum Speichern der Dienstjahre
  2. Schreiben Sie eine Funktion namens fillEmployeeData, die:
    • Einen Pointer auf ein Employee-Struct als Parameter entgegennimmt
    • Mitarbeiterinformationen in dieser Reihenfolge von der Eingabe liest: ID, name, department, salary, years of service
    • Die Werte den Struct-Elementen unter Verwendung des Pfeiloperators zuweist
    • Einen Bonus basierend auf den Dienstjahren berechnet: Wenn years >= 5, beträgt der Bonus 10% des Gehalts, andernfalls 5% des Gehalts
    • Den Bonus zum Gehalt addiert: empPtr->salary += bonus;
  3. Schreiben Sie eine Funktion namens displayEmployee, die:
    • Einen Pointer auf ein Employee-Struct als Parameter entgegennimmt
    • Die Mitarbeiterinformationen in genau diesem Format ausgibt:
      • Employee Details:
      • ID: [id]
      • Name: [name]
      • Department: [department]
      • Salary: [salary]
      • Years of Service: [yearsOfService]
  4. Schreiben Sie eine Funktion namens promoteEmployee, die:
    • Einen Pointer auf ein Employee-Struct als Parameter entgegennimmt
    • Das Gehalt unter Verwendung des Pfeiloperators um 15% erhöht
    • Die Dienstjahre um 1 erhöht
    • Employee promoted successfully! ausgibt
  5. In der main-Funktion:
    • Deklarieren Sie einen Pointer auf ein Employee-Struct namens empPtr
    • Verwenden Sie malloc(), um dynamisch Speicher für ein Employee-Struct zu allokieren
    • Prüfen Sie, ob die Speicherallokation erfolgreich war:
      • Wenn empPtr gleich NULL ist, geben Sie Memory allocation failed aus und beenden Sie das Programm
      • Wenn erfolgreich, geben Sie Memory allocated successfully aus
    • Rufen Sie fillEmployeeData auf, um die Mitarbeiterdaten zu füllen
    • Geben Sie Initial employee data: aus
    • Rufen Sie displayEmployee auf, um die ursprünglichen Mitarbeiterinformationen anzuzeigen
    • Rufen Sie promoteEmployee auf, um den Mitarbeiter zu befördern
    • Geben Sie After promotion: aus
    • Rufen Sie displayEmployee erneut auf, um die aktualisierten Informationen anzuzeigen
    • Geben Sie den dynamisch allokierten Speicher mit free(empPtr) frei
    • Geben Sie Memory freed successfully aus

Diese Herausforderung kombiniert alle Schlüsselkonzepte aus dem Kapitel: Definieren von Structs, dynamische Speicherallokation mit malloc(), Überprüfung auf Allokationsfehler, Übergabe von Struct-Pointern an Funktionen, Verwendung des Pfeiloperators zum Zugriff auf und zur Änderung von Struct-Elementen sowie ordnungsgemäße Speicherbereinigung mit free(). Die Funktionen demonstrieren, wie Pointer die direkte Änderung der ursprünglichen Struct-Daten ermöglichen.

Probier es selbst

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

// TODO: Definieren Sie hier die Employee-Struktur

// TODO: Implementieren Sie hier die Funktion fillEmployeeData

// TODO: Implementieren Sie hier die Funktion displayEmployee

// TODO: Implementieren Sie hier die Funktion promoteEmployee

int main() {
    // TODO: Deklarieren Sie empPtr und weisen Sie Speicher zu
    
    // TODO: Überprüfen Sie, ob die Speicherzuweisung erfolgreich war
    
    // TODO: Mitarbeiterdaten ausfüllen, Anfangsdaten anzeigen, befördern und nach der Beförderung anzeigen
    
    // TODO: Speicher freigeben und Erfolgsmeldung ausgeben
    
    return 0;
}

Alle Lektionen in Logic & Flow