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
- Struct: Gom nhóm dữ liệu liên quan (tên, tác giả, trang, giá)
- Mảng struct:
thuVien[100]lưu nhiều sách - Switch-case: Xử lý menu rõ ràng, dễ mở rộng
- fgets() + strcspn(): Đọc chuỗi có khoảng trắng, xóa ký tự newline
- while(getchar()!='\n'): Xử lý buffer sau scanf
- 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)