Quản lý dữ liệu học sinh và thư viện bằng cấu trúc trong C

Nhiệm vụ 1: Quản lý điểm số học sinh


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

#define MAX_STUDENTS 3

typedef struct {
    int student_id;
    char student_name[20];
    char subject_name[20];
    double performance_score;
    double midterm_score;
    double final_score;
    double total_score;
    char grade[10];
} StudentRecord;

void gather_data(StudentRecord students[], int size);
void display_data(StudentRecord students[], int size);
void compute_grades(StudentRecord students[], int size);
int filter_failing(StudentRecord students[], StudentRecord failing_students[], int size);
void arrange_by_total(StudentRecord students[], int size);

int main() {
    StudentRecord students[MAX_STUDENTS], failing_students[MAX_STUDENTS];
    int count;

    printf("Nhập thông tin điểm số học sinh:\n");
    gather_data(students, MAX_STUDENTS);

    printf("\nĐang xử lý...\n");
    compute_grades(students, MAX_STUDENTS);

    count = filter_failing(students, failing_students, MAX_STUDENTS);
    arrange_by_total(students, MAX_STUDENTS);

    printf("\nXếp hạng học sinh theo tổng điểm:\n");
    display_data(students, MAX_STUDENTS);

    printf("\nThông tin học sinh không đạt yêu cầu:\n");
    display_data(failing_students, count);

    return 0;
}

void gather_data(StudentRecord students[], int size) {
    for (int i = 0; i < size; i++) {
        scanf("%d %s %s %lf %lf %lf", &students[i].student_id, students[i].student_name, students[i].subject_name,
              &students[i].performance_score, &students[i].midterm_score, &students[i].final_score);
    }
}

void display_data(StudentRecord students[], int size) {
    printf("---------Phân cách--------\n");
    printf("Mã SV   Họ tên     Môn học   Thường kỳ   Kỳ giữa   Kỳ cuối   Tổng   Xếp loại\n");
    for (int i = 0; i < size; i++) {
        printf("%d   %-6s   %-4s   %-4.0f   %-4.0f   %-4.0f   %-4.1f   %s\n",
               students[i].student_id, students[i].student_name, students[i].subject_name,
               students[i].performance_score, students[i].midterm_score, students[i].final_score,
               students[i].total_score, students[i].grade);
    }
}

void compute_grades(StudentRecord students[], int size) {
    for (int i = 0; i < size; i++) {
        students[i].total_score = students[i].performance_score * 0.2 +
                                  students[i].midterm_score * 0.2 +
                                  students[i].final_score * 0.6;

        if (students[i].total_score >= 90)
            strcpy(students[i].grade, "Xuất sắc");
        else if (students[i].total_score >= 80)
            strcpy(students[i].grade, "Giỏi");
        else if (students[i].total_score >= 70)
            strcpy(students[i].grade, "Khá");
        else if (students[i].total_score >= 60)
            strcpy(students[i].grade, "Trung bình");
        else
            strcpy(students[i].grade, "Yếu");
    }
}

int filter_failing(StudentRecord students[], StudentRecord failing_students[], int size) {
    int count = 0;
    for (int i = 0; i < size; i++) {
        if (students[i].total_score < 60) {
            failing_students[count++] = students[i];
        }
    }
    return count;
}

void arrange_by_total(StudentRecord students[], int size) {
    StudentRecord temp;
    for (int i = 0; i < size - 1; i++) {
        for (int j = 0; j < size - i - 1; j++) {
            if (students[j].total_score < students[j + 1].total_score) {
                temp = students[j];
                students[j] = students[j + 1];
                students[j + 1] = temp;
            }
        }
    }
}

Nhiệm vụ 2: Quản lý danh sách sách


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

#define MAX_BOOKS 10
#define MAX_LENGTH 80

typedef struct {
    char book_title[MAX_LENGTH];
    char author_name[MAX_LENGTH];
} LibraryBook;

int main() {
    LibraryBook books[MAX_BOOKS] = {{"Cuộc Chơi Sinh Tử", "Người Đội Trưởng"},
                                    {"Thế Giới Mới Diệu Kỳ", "Aldous Huxley"},
                                    {"Gió Qua Đồn Điền", "Margaret Mitchell"},
                                    {"Chàng Nhỏ Hoàng Tử", "Antoine de Saint-Exupéry"},
                                    {"Ngủ Ngày Nào Cũng Được", "Wozz"},
                                    {"Trăm Năm Cô Đơn", "Gabriel García Márquez"},
                                    {"Rong Ruổi", "Wu Zhe"},
                                    {"Thế Giới Khốn Cùng", "Victor Hugo"},
                                    {"Dịch Bệnh", "Albert Camus"},
                                    {"Toán Cao Cấp", "Wang Shunfeng"}};
    
    LibraryBook *book_ptr;
    char search_author[MAX_LENGTH];
    int found = 0;

    // In ra tất cả thông tin sách
    printf("-------------------Tất cả thông tin sách-------------------\n");
    for (book_ptr = books; book_ptr < books + MAX_BOOKS; ++book_ptr) {
        printf("%-30s%-30s\n", book_ptr->book_title, book_ptr->author_name);
    }

    // Tìm kiếm sách theo tác giả
    printf("\n-------------------Tìm kiếm sách theo tác giả-------------------\n");
    printf("Nhập tên tác giả: ");
    gets(search_author);
    for (book_ptr = books; book_ptr < books + MAX_BOOKS; ++book_ptr) {
        if (strcmp(book_ptr->author_name, search_author) == 0) {
            found = 1;
            printf("%-30s%-30s\n", book_ptr->book_title, book_ptr->author_name);
        }
    }
    if (!found) {
        printf("Không tìm thấy sách của tác giả này!\n");
    }

    return 0;
}

Nhiệm vụ 3: Quản lý danh sách phim


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

#define MAX_INFO_LENGTH 80

typedef struct FilmData {
    char movie_title[MAX_INFO_LENGTH];
    char director_name[MAX_INFO_LENGTH];
    char production_region[MAX_INFO_LENGTH];
    int release_year;
    struct FilmData *next_node;
} MovieRecord;

MovieRecord *add_movie(MovieRecord *head, int quantity);
void print_movies(MovieRecord *head);

int main() {
    int number_of_movies;
    MovieRecord *movie_list = NULL;

    printf("Nhập số lượng phim: ");
    scanf("%d", &number_of_movies);

    movie_list = add_movie(movie_list, number_of_movies);

    printf("\nThông tin tất cả các phim:\n");
    print_movies(movie_list);

    return 0;
}

MovieRecord *add_movie(MovieRecord *head, int quantity) {
    MovieRecord *new_node;
    for (int i = 1; i <= quantity; ++i) {
        new_node = (MovieRecord *)malloc(sizeof(MovieRecord));
        printf("Nhập thông tin phim thứ %d: ", i);
        scanf("%s %s %s %d", new_node->movie_title, new_node->director_name,
             new_node->production_region, &new_node->release_year);

        new_node->next_node = head;
        head = new_node;
    }
    return head;
}

void print_movies(MovieRecord *head) {
    MovieRecord *current = head;
    while (current != NULL) {
        printf("%-20s %-20s %-20s %d\n", current->movie_title, current->director_name,
               current->production_region, current->release_year);
        current = current->next_node;
    }
}
C,struct,array,sorting

Thẻ: C struct array sorting

Đăng vào ngày 21 tháng 6 lúc 05:23