Menu
Coddy logo textTech

Riepilogo: modifica di una struct - puntatore

Fa parte della sezione Logica e flusso del percorso C di Coddy. Lezione 49 di 63.

challenge icon

Sfida

Facile

Crea un programma in C che dimostri un sistema completo di gestione dei dipendenti usando l'allocazione dinamica della memoria, puntatori a struct e funzioni. Il tuo programma deve:

  1. Definire una struct denominata Employee con i seguenti membri:
    • Un intero id per memorizzare l'ID del dipendente
    • Un array di caratteri name di dimensione 50 per memorizzare il nome del dipendente
    • Un array di caratteri department di dimensione 30 per memorizzare il nome del reparto
    • Un float salary per memorizzare lo stipendio del dipendente
    • Un intero yearsOfService per memorizzare gli anni di servizio
  2. Scrivere una funzione denominata fillEmployeeData che:
    • Accetta come parametro un puntatore a una struct Employee
    • Legge le informazioni del dipendente dall'input nel seguente ordine: ID, nome, reparto, stipendio, anni di servizio
    • Assegna i valori ai membri della struct usando l'operatore freccia
    • Calcola un bonus in base agli anni di servizio: se gli anni >= 5, il bonus è pari al 10% dello stipendio, altrimenti al 5% dello stipendio
    • Aggiunge il bonus allo stipendio: empPtr->salary += bonus;
  3. Scrivere una funzione denominata displayEmployee che:
    • Accetta come parametro un puntatore a una struct Employee
    • Stampa le informazioni del dipendente in questo formato esatto:
      • Employee Details:
      • ID: [id]
      • Name: [name]
      • Department: [department]
      • Salary: [salary]
      • Years of Service: [yearsOfService]
  4. Scrivere una funzione denominata promoteEmployee che:
    • Accetta come parametro un puntatore a una struct Employee
    • Aumenta lo stipendio del 15% usando l'operatore freccia
    • Incrementa gli anni di servizio di 1
    • Stampa Employee promoted successfully!
  5. Nella funzione main:
    • Dichiara un puntatore a una struct Employee denominato empPtr
    • Usa malloc() per allocare dinamicamente la memoria per una struct Employee
    • Verifica se l'allocazione della memoria è riuscita:
      • Se empPtr è NULL, stampa Memory allocation failed e termina il programma
      • Se è riuscita, stampa Memory allocated successfully
    • Chiama fillEmployeeData per inserire i dati del dipendente
    • Stampa Initial employee data:
    • Chiama displayEmployee per mostrare le informazioni iniziali del dipendente
    • Chiama promoteEmployee per promuovere il dipendente
    • Stampa After promotion:
    • Chiama di nuovo displayEmployee per mostrare le informazioni aggiornate
    • Libera la memoria allocata dinamicamente usando free(empPtr)
    • Stampa Memory freed successfully

Questa sfida combina tutti i concetti chiave del capitolo: definire struct, allocare dinamicamente la memoria con malloc(), verificare gli errori di allocazione, passare puntatori a struct alle funzioni, usare l'operatore freccia per accedere ai membri della struct e modificarli, e liberare correttamente la memoria con free(). Le funzioni dimostrano come i puntatori consentano di modificare direttamente i dati della struct originale.

Provalo tu

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

// TODO: Definisci qui la struct Employee

// TODO: Implementa qui la funzione fillEmployeeData

// TODO: Implementa qui la funzione displayEmployee

// TODO: Implementa qui la funzione promoteEmployee

int main() {
    // TODO: Dichiara empPtr e alloca la memoria
    
    // TODO: Verifica che l'allocazione della memoria sia riuscita
    
    // TODO: Inserisci i dati del dipendente, visualizza i dati iniziali, promuovi il dipendente e visualizza i dati dopo la promozione
    
    // TODO: Libera la memoria e stampa un messaggio di conferma
    
    return 0;
}

Tutte le lezioni di Logica e flusso

Esercitati da solo: Compilatore C online