Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 7

#include <stdio.

h>

#include <string.h>

#include <conio.h>

// Dinh nghia kieu du lieu Date

typedef struct {

int day;

int month;

int year;

} Date;

// Dinh nghia kieu du lieu Emloyee

typedef struct {

int id;

char name[50];

Date dob;

float salary;

} Employee;

Employee employees[100]; // Tao mang chua thong tin cua cac nhan vien

// Viet ham nhap thong tin cua nhieu nhan vien

void inputEmployee(Employee *a, int index);

// Viet ham hien thi thong tin cua nhieu nhan vien

void showEmployee(Employee *a, int index);

// Viet ham nhap thong tin Ngay/ Thang/ Nam sinh

void inputDob(Date *date);


void heapify(Employee arr[], int n, int i);

void heapSort(Employee arr[], int n);

void findEmployeesWithSameBirthday(Employee arr[], int n);

void findTop5HighestPaidEmployees(Employee arr[], int n);

int main() {

int n;

printf("Nhap so luong nhan vien cua cong ty: ");

scanf("%d", &n);

for (int i = 0; i < n; i++) {

inputEmployee(&employees[i], i + 1); // Goi ham nhap cho nhan vien thu i

if (i > 0 && employees[i].id <= employees[i - 1].id) // Kiem tra ma nhan vien co hop le khong

printf("Ma nhan vien khong hop le. Vui long nhap lai.\n");

i--; // Neu dieu kien khong duoc

printf("*********************************************Thong Tin Nhan


Vien*********************************************\n");

for (int i = 0; i < n; i++) {

showEmployee(&employees[i], i + 1);

heapSort(employees, n);
printf("*********************************************Danh Sach Nhan Vien Sap Xep Theo
Luong Giam Dan*********************************************\n");

for (int i = 0; i < n; i++) {

showEmployee(&employees[i], i + 1); // Gọi hàm hien thi danh sach nhan vien sau khi da duoc sap
xep theo luong giam dan

findEmployeesWithSameBirthday(employees, n);

findTop5HighestPaidEmployees(employees, n);

return 0;

// Yeu cau 1:

void inputEmployee(Employee *a, int index) {

printf("Nhap thong tin cho nhan vien %d\n", index); // In yeu cau nhap thong tin nhan vien co thu tu
index

printf("Nhap ma nhan vien: ");

scanf("%d", &a->id); // Nhap ma nhan vien va luu vao dia chi bien (a -> id)

if (index > 1) {

while (a->id <= employees[index - 2].id) // Kiem tra ma nhan vien co lon hon ma nhan vien truoc do

printf("Ma nhan vien khong hop le. Vui long nhap lai: ");

scanf("%d", &a->id); // Neu khong hop le, yeu cau nhap lai

printf("Nhap ten nhan vien: ");


getchar(); // Loai bo ky tu Enter con ton dong trong bo dem

fgets(a->name, sizeof(a->name), stdin);

size_t len = strlen(a->name); // Tinh do dai cua ten nhan vien va ket qua duoc luu trong bien ‘len’

if (len > 0 && a->name[len - 1] == '\n') {

a->name[len - 1] = '\0'; // Thay the ky tu Enter bang ‘\0’

// Nhap ngay sinh

printf("Nhap ngay sinh: ");

scanf("%d", &a->dob.day);

// Nhap thang sinh va bat dau kiem tra

do {

printf("Nhap thang sinh: ");

scanf("%d", &a->dob.month);

if (a->dob.month < 1 || a->dob.month > 12) {

printf("Thang sinh khong hop le. Vui long nhap lai.\n");

} while (a->dob.month < 1 || a->dob.month > 12);

printf("Nhap nam sinh: ");

scanf("%d", &a->dob.year);

printf("Nhap tien luong cua nhan vien: ");

scanf("%f", &a->salary);

// Yeu cau 2:
void showEmployee(Employee *a, int index) {

printf("Thong tin nhan vien %d: \n", index);

printf("Id: %d \n", a->id);

printf("Ho va ten nhan vien: %s\n", a->name);

printf("Ngay sinh: %02d/%02d/%d\n", a->dob.day, a->dob.month, a->dob.year);

printf("Tien luong: %.2f\n", a->salary);

// Yeu cau 3: Sap xep danh sach nhan vien co luong giam dan bang giai thuat Heap Sort

void heapify(Employee arr[], int n, int i) {

int smallest = i;

int left = 2 * i + 1;

int right = 2 * i + 2;

// So sanh tien luong

if (left < n && (arr[left].salary < arr[smallest].salary ||

(arr[left].salary == arr[smallest].salary && arr[left].id > arr[smallest].id)))

smallest = left;

if (right < n && (arr[right].salary < arr[smallest].salary ||

(arr[right].salary == arr[smallest].salary && arr[right].id > arr[smallest].id)))

smallest = right;

if (smallest != i) {

Employee temp = arr[i];

arr[i] = arr[smallest];

arr[smallest] = temp;

heapify(arr, n, smallest);

}
}

void heapSort(Employee arr[], int n) {

for (int i = n / 2 - 1; i >= 0; i--)

heapify(arr, n, i);

for (int i = n - 1; i >= 0; i--) {

Employee temp = arr[0];

arr[0] = arr[i];

arr[i] = temp;

heapify(arr, i, 0);

// Yeu cau 4: In ra man hinh nhung nhan vien co cung ngay sinh nhat

void findEmployeesWithSameBirthday(Employee arr[], int n) {

printf("*********************************************Danh Sach Nhan Vien Cung Ngay, Thang


Sinh*********************************************\n");

for (int i = 0; i < n - 1; i++) {

for (int j = i + 1; j < n; j++) {

if (arr[i].dob.day == arr[j].dob.day && arr[i].dob.month == arr[j].dob.month) {

showEmployee(&arr[i], i + 1);

showEmployee(&arr[j], j + 1);

}
// Yeu cau 5: Hien thi ra man hinh top 5 nhan vien co luong cao nha

void findTop5HighestPaidEmployees(Employee arr[], int n) {

printf("*********************************************Top 5 Nhan Vien Co Muc Luong Cao


Nhat*********************************************\n");

if (n <= 5) {

for (int i = 0; i < n; i++) {

showEmployee(&arr[i], i + 1);

} else {

for (int i = 0; i < 5; i++) {

showEmployee(&arr[i], i + 1);

You might also like