Menu
Coddy logo textTech

Podsumowanie: modyfikowanie struktury — wskaźnik

Część sekcji Logika i sterowanie przepływem ścieżki C w Coddy. Lekcja 49 z 63.

challenge icon

Wyzwanie

Łatwy

Utwórz program w C, który demonstruje kompletny system zarządzania pracownikami, wykorzystujący dynamiczną alokację pamięci, wskaźniki do struktur i funkcje. Twój program powinien:

  1. Zdefiniować struct o nazwie Employee z następującymi składowymi:
    • Liczbę całkowitą id do przechowywania identyfikatora pracownika
    • Tablicę znaków name o rozmiarze 50 do przechowywania imienia i nazwiska pracownika
    • Tablicę znaków department o rozmiarze 30 do przechowywania nazwy działu
    • Liczbę zmiennoprzecinkową salary do przechowywania wynagrodzenia pracownika
    • Liczbę całkowitą yearsOfService do przechowywania stażu pracy
  2. Napisać funkcję o nazwie fillEmployeeData, która:
    • Przyjmuje jako parametr wskaźnik do struktury Employee
    • Odczytuje z wejścia informacje o pracowniku w następującej kolejności: identyfikator, imię i nazwisko, dział, wynagrodzenie, staż pracy
    • Przypisuje wartości do składowych struktury za pomocą operatora strzałki
    • Oblicza premię na podstawie stażu pracy: jeśli liczba lat >= 5, premia wynosi 10% wynagrodzenia, w przeciwnym razie 5% wynagrodzenia
    • Dodaje premię do wynagrodzenia: empPtr->salary += bonus;
  3. Napisać funkcję o nazwie displayEmployee, która:
    • Przyjmuje jako parametr wskaźnik do struktury Employee
    • Wyświetla informacje o pracowniku w dokładnie następującym formacie:
      • Employee Details:
      • ID: [id]
      • Name: [name]
      • Department: [department]
      • Salary: [salary]
      • Years of Service: [yearsOfService]
  4. Napisać funkcję o nazwie promoteEmployee, która:
    • Przyjmuje jako parametr wskaźnik do struktury Employee
    • Zwiększa wynagrodzenie o 15% za pomocą operatora strzałki
    • Zwiększa staż pracy o 1
    • Wyświetla Employee promoted successfully!
  5. W funkcji main:
    • Zadeklarować wskaźnik do struktury Employee o nazwie empPtr
    • Użyć malloc(), aby dynamicznie zaalokować pamięć dla jednej struktury Employee
    • Sprawdzić, czy alokacja pamięci się powiodła:
      • Jeśli empPtr ma wartość NULL, wyświetlić Memory allocation failed i zakończyć program
      • Jeśli się powiodła, wyświetlić Memory allocated successfully
    • Wywołać fillEmployeeData, aby wypełnić dane pracownika
    • Wyświetlić Initial employee data:
    • Wywołać displayEmployee, aby pokazać początkowe informacje o pracowniku
    • Wywołać promoteEmployee, aby awansować pracownika
    • Wyświetlić After promotion:
    • Ponownie wywołać displayEmployee, aby pokazać zaktualizowane informacje
    • Zwolnić dynamicznie zaalokowaną pamięć za pomocą free(empPtr)
    • Wyświetlić Memory freed successfully

To wyzwanie łączy wszystkie kluczowe zagadnienia z tego rozdziału: definiowanie struktur, dynamiczną alokację pamięci za pomocą malloc(), sprawdzanie, czy alokacja się nie powiodła, przekazywanie wskaźników do struktur do funkcji, używanie operatora strzałki do uzyskiwania dostępu do składowych struktury i ich modyfikowania oraz prawidłowe zwalnianie pamięci za pomocą free(). Funkcje pokazują, jak wskaźniki umożliwiają bezpośrednią modyfikację danych w oryginalnej strukturze.

Spróbuj swoich sił

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

// TODO: Zdefiniuj tutaj strukturę Employee

// TODO: Zaimplementuj tutaj funkcję fillEmployeeData

// TODO: Zaimplementuj tutaj funkcję displayEmployee

// TODO: Zaimplementuj tutaj funkcję promoteEmployee

int main() {
    // TODO: Zadeklaruj empPtr i przydziel pamięć
    
    // TODO: Sprawdź, czy przydzielenie pamięci się powiodło
    
    // TODO: Wypełnij dane pracownika, wyświetl dane początkowe, awansuj pracownika i wyświetl dane po awansie
    
    // TODO: Zwolnij pamięć i wypisz komunikat o powodzeniu
    
    return 0;
}

Wszystkie lekcje w sekcji Logika i sterowanie przepływem

Poćwicz samodzielnie: Kompilator C online