Menu
CoddyTech

Ôn tập: sửa đổi cấu trúc bằng con trỏ

Thuộc phần Logic và luồng điều khiển trong hành trình C của Coddy. Bài học 49 trên 63.

challenge icon

Thử thách

Dễ

Tạo một chương trình C minh họa hệ thống quản lý nhân viên hoàn chỉnh bằng cách sử dụng cấp phát bộ nhớ động, con trỏ đến struct và hàm. Chương trình cần:

  1. Định nghĩa một struct có tên Employee với các thành viên sau:
    • Một số nguyên id để lưu mã nhân viên
    • Một mảng ký tự name có kích thước 50 để lưu tên nhân viên
    • Một mảng ký tự department có kích thước 30 để lưu tên phòng ban
    • Một số thực salary để lưu mức lương của nhân viên
    • Một số nguyên yearsOfService để lưu số năm công tác
  2. Viết một hàm có tên fillEmployeeData để:
    • Nhận một con trỏ đến struct Employee làm tham số
    • Đọc thông tin nhân viên từ đầu vào theo thứ tự sau: mã nhân viên, tên, phòng ban, mức lương, số năm công tác
    • Gán các giá trị cho thành viên của struct bằng toán tử mũi tên
    • Tính tiền thưởng dựa trên số năm công tác: nếu số năm >= 5, tiền thưởng bằng 10% mức lương, nếu không thì bằng 5% mức lương
    • Cộng tiền thưởng vào mức lương: empPtr->salary += bonus;
  3. Viết một hàm có tên displayEmployee để:
    • Nhận một con trỏ đến struct Employee làm tham số
    • In thông tin nhân viên theo đúng định dạng sau:
      • Employee Details:
      • ID: [id]
      • Name: [name]
      • Department: [department]
      • Salary: [salary]
      • Years of Service: [yearsOfService]
  4. Viết một hàm có tên promoteEmployee để:
    • Nhận một con trỏ đến struct Employee làm tham số
    • Tăng mức lương thêm 15% bằng toán tử mũi tên
    • Tăng số năm công tác thêm 1
    • In Employee promoted successfully!
  5. Trong hàm main:
    • Khai báo một con trỏ đến struct Employee có tên empPtr
    • Dùng malloc() để cấp phát động bộ nhớ cho một struct Employee
    • Kiểm tra xem cấp phát bộ nhớ có thành công hay không:
      • Nếu empPtr là NULL, in Memory allocation failed rồi thoát chương trình
      • Nếu thành công, in Memory allocated successfully
    • Gọi fillEmployeeData để điền dữ liệu nhân viên
    • In Initial employee data:
    • Gọi displayEmployee để hiển thị thông tin ban đầu của nhân viên
    • Gọi promoteEmployee để thăng chức cho nhân viên
    • In After promotion:
    • Gọi lại displayEmployee để hiển thị thông tin đã cập nhật
    • Giải phóng bộ nhớ đã cấp phát động bằng free(empPtr)
    • In Memory freed successfully

Thử thách này kết hợp tất cả các khái niệm chính trong chương: định nghĩa struct, cấp phát bộ nhớ động bằng malloc(), kiểm tra lỗi cấp phát, truyền con trỏ struct vào hàm, dùng toán tử mũi tên để truy cập và sửa đổi các thành viên của struct, cũng như giải phóng bộ nhớ đúng cách bằng free(). Các hàm minh họa cách con trỏ cho phép sửa đổi trực tiếp dữ liệu của struct gốc.

Tự làm thử

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

// TODO: Định nghĩa struct Employee tại đây

// TODO: Triển khai hàm (function) fillEmployeeData tại đây

// TODO: Triển khai hàm displayEmployee tại đây

// TODO: Triển khai hàm promoteEmployee tại đây

int main() {
    // TODO: Khai báo empPtr và cấp phát bộ nhớ
    
    // TODO: Kiểm tra việc cấp phát bộ nhớ có thành công không
    
    // TODO: Điền dữ liệu nhân viên, hiển thị dữ liệu ban đầu, thăng chức rồi hiển thị dữ liệu sau khi thăng chức
    
    // TODO: Giải phóng bộ nhớ và in ra thông báo thành công
    
    return 0;
}

Tất cả bài học trong Logic và luồng điều khiển

Tự luyện tập: Trình biên dịch C online