Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình C

Hệ thống quản lý thư viện trong C dùng switch-case

Mô tả bài toán

Xây dựng chương trình quản lý thư viện đơn giản: thêm sách, hiển thị danh sách, đếm số lượng sách, thoát chương trình. Sử dụng struct để lưu thông tin sách và switch-case cho menu.

Cấu trúc dữ liệu

struct Sach {
    char tenSach[50];
    char tacGia[50];
    int soTrang;
    float gia;
};

Chương trình hoàn chỉnh

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

struct Sach {
    char tenSach[50];
    char tacGia[50];
    int soTrang;
    float gia;
};

int main() {
    struct Sach thuVien[100];  // Tối đa 100 cuốn
    int luaChon;
    int soLuong = 0;           // Số sách hiện có
    int i;
    
    while (1) {  // Vòng lặp vô tận cho menu
        printf("\n=== QUAN LY THU VIEN ===\n");
        printf("1. Them sach\n");
        printf("2. Hien thi danh sach sach\n");
        printf("3. Dem so luong sach\n");
        printf("4. Thoat\n");
        printf("Chon chuc nang (1-4): ");
        scanf("%d", &luaChon);
        
        // Xử lý buffer newline sau scanf
        while (getchar() != '\n');
        
        switch (luaChon) {
            case 1:  // Thêm sách
                if (soLuong >= 100) {
                    printf("Thu vien da day!\n");
                    break;
                }
                
                printf("\n--- THEM SACH MOI ---\n");
                printf("Ten sach: ");
                fgets(thuVien[soLuong].tenSach, 50, stdin);
                thuVien[soLuong].tenSach[strcspn(thuVien[soLuong].tenSach, "\n")] = 0;
                
                printf("Tac gia: ");
                fgets(thuVien[soLuong].tacGia, 50, stdin);
                thuVien[soLuong].tacGia[strcspn(thuVien[soLuong].tacGia, "\n")] = 0;
                
                printf("So trang: ");
                scanf("%d", &thuVien[soLuong].soTrang);
                
                printf("Gia tien: ");
                scanf("%f", &thuVien[soLuong].gia);
                
                soLuong++;
                printf("Da them sach thanh cong!\n");
                break;
                
            case 2:  // Hiển thị
                if (soLuong == 0) {
                    printf("Thu vien chua co sach nao!\n");
                    break;
                }
                
                printf("\n--- DANH SACH SACH ---\n");
                for (i = 0; i < soLuong; i++) {
                    printf("\nSach %d:\n", i + 1);
                    printf("  Ten:     %s\n", thuVien[i].tenSach);
                    printf("  Tac gia: %s\n", thuVien[i].tacGia);
                    printf("  So trang: %d\n", thuVien[i].soTrang);
                    printf("  Gia:     %.2f\n", thuVien[i].gia);
                }
                break;
                
            case 3:  // Đếm sách
                printf("So luong sach trong thu vien: %d\n", soLuong);
                break;
                
            case 4:  // Thoát
                printf("Tam biet!\n");
                exit(0);
                
            default:
                printf("Lua chon khong hop le! Vui long chon 1-4.\n");
        }
    }
    
    return 0;
}

Kết quả chạy chương trình

=== QUAN LY THU VIEN ===
1. Them sach
2. Hien thi danh sach sach
3. Dem so luong sach
4. Thoat
Chon chuc nang (1-4): 1

--- THEM SACH MOI ---
Ten sach: Lap Trinh C
Tac gia: Nguyen Van A
So trang: 300
Gia tien: 150000
Da them sach thanh cong!

=== QUAN LY THU VIEN ===
1. Them sach
2. Hien thi danh sach sach
3. Dem so luong sach
4. Thoat
Chon chuc nang (1-4): 2

--- DANH SACH SACH ---
Sach 1:
  Ten:     Lap Trinh C
  Tac gia: Nguyen Van A
  So trang: 300
  Gia:     150000.00

=== QUAN LY THU VIEN ===
Chon chuc nang (1-4): 3
So luong sach trong thu vien: 1

Các kỹ thuật quan trọng

  1. Struct: Gom nhóm dữ liệu liên quan (tên, tác giả, trang, giá)
  2. Mảng struct: thuVien[100] lưu nhiều sách
  3. Switch-case: Xử lý menu rõ ràng, dễ mở rộng
  4. fgets() + strcspn(): Đọc chuỗi có khoảng trắng, xóa ký tự newline
  5. while(getchar()!='\n'): Xử lý buffer sau scanf
  6. Biến soLuong: Theo dõi số sách thực tế (khác kích thước mảng)

Mở rộng gợi ý

  • Tìm kiếm sách theo tên/tác giả
  • Sửa/xóa thông tin sách
  • Sắp xếp sách (theo tên, giá, trang)
  • Lưu/đọc file (fwrite/fread)
  • Phân loại sách (thể loại, năm xuất bản)