Menu
Coddy logo textTech

Итоги: Изменение структур через указатели

Часть раздела Logic & Flow путешествия по C на Coddy — урок 49 из 63.

challenge icon

Задание

Легко

Создайте программу на языке C, которая демонстрирует полноценную систему управления сотрудниками с использованием динамического выделения памяти, указателей на структуры и функций. Ваша программа должна:

  1. Определить struct с именем Employee со следующими полями:
    • Целое число id для хранения идентификатора сотрудника
    • Символьный массив name размером 50 для хранения имени сотрудника
    • Символьный массив department размером 30 для хранения названия отдела
    • Число с плавающей точкой salary для хранения зарплаты сотрудника
    • Целое число yearsOfService для хранения стажа работы (в годах)
  2. Написать функцию с именем fillEmployeeData, которая:
    • Принимает указатель на структуру Employee в качестве параметра
    • Считывает информацию о сотруднике из входных данных в следующем порядке: ID, имя, отдел, зарплата, стаж работы
    • Присваивает значения полям структуры, используя оператор "стрелка"
    • Рассчитывает бонус на основе стажа работы: если стаж >= 5 лет, бонус составляет 10% от зарплаты, в противном случае — 5% от зарплаты
    • Добавляет бонус к зарплате: empPtr->salary += bonus;
  3. Написать функцию с именем displayEmployee, которая:
    • Принимает указатель на структуру Employee в качестве параметра
    • Выводит информацию о сотруднике в точно таком же формате:
      • Employee Details:
      • ID: [id]
      • Name: [name]
      • Department: [department]
      • Salary: [salary]
      • Years of Service: [yearsOfService]
  4. Написать функцию с именем promoteEmployee, которая:
    • Принимает указатель на структуру Employee в качестве параметра
    • Увеличивает зарплату на 15%, используя оператор "стрелка"
    • Увеличивает стаж работы на 1
    • Выводит Employee promoted successfully!
  5. В функции main:
    • Объявить указатель на структуру Employee с именем empPtr
    • Использовать malloc() для динамического выделения памяти для одной структуры Employee
    • Проверить, было ли выделение памяти успешным:
      • Если empPtr равен NULL, вывести Memory allocation failed и завершить программу
      • Если выделение прошло успешно, вывести Memory allocated successfully
    • Вызвать fillEmployeeData для заполнения данных о сотруднике
    • Вывести Initial employee data:
    • Вызвать displayEmployee для отображения начальной информации о сотруднике
    • Вызвать promoteEmployee для повышения сотрудника
    • Вывести After promotion:
    • Снова вызвать displayEmployee для отображения обновленной информации
    • Освободить динамически выделенную память с помощью free(empPtr)
    • Вывести Memory freed successfully

Эта задача объединяет все ключевые концепции главы: определение структур, динамическое выделение памяти с помощью malloc(), проверку на ошибки выделения, передачу указателей на структуры в функции, использование оператора "стрелка" для доступа и изменения полей структуры, а также правильную очистку памяти с помощью free(). Функции демонстрируют, как указатели позволяют напрямую изменять исходные данные структуры.

Попробуйте сами

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

// TODO: Определите структуру Employee здесь

// TODO: Реализуйте функцию fillEmployeeData здесь

// TODO: Реализуйте функцию displayEmployee здесь

// TODO: Реализуйте функцию promoteEmployee здесь

int main() {
    // TODO: Объявите empPtr и выделите память
    
    // TODO: Проверьте, была ли память выделена успешно
    
    // TODO: Заполните данные сотрудника, отобразите начальные данные, повысьте и отобразите после повышения
    
    // TODO: Освободите память и выведите сообщение об успехе
    
    return 0;
}

Все уроки раздела Logic & Flow