Trang chủ » Quản lý thư viện bằng Console (Phần 1)
Bài tập tổng hợp

Quản lý thư viện bằng Console (Phần 1)

thu-vien
Một thư viện đồ sộ thì cần phải có phần mềm quản lý nhỉ?

Xin chào mọi người!

Như đã hứa ở Bài 5 trong hướng dẫn lập trình OOP, mình sẽ viết 1 ứng dụng thực tế về quản lý thư viện sử dụng những kiến thức mình đã học được. Có nhiều bạn sẽ thắc mắc là mình chưa học C# hay Java thì sao tạo ứng dụng quản lý thư viện được, tất nhiên là mình sẽ viết trên Console, vì mình chưa hướng dẫn về GUI – Graphical User Interface.

Lý do mình chọn quản lý thư viện làm bài tập hướng dẫn vì nó đơn giản, gắn liền với thực tế cũng như dễ áp dụng với những phần mềm quản lý khác. Giả sử sau này có tạo phần mềm quản lý nhà hàng khách sạn, hay quản lý bất cứ thứ gì thì cũng có thể lấy tư duy từ bài quản lý thư viện làm mẫu (1 phần vì mình hay xem phim thấy mấy cảnh lãng mạn toàn trong thư viện không hà :v).

Không lan man dài dòng nữa, mình sẽ bắt đầu thực hiện ngay và luôn cho nóng nhé! 😀

1. Thiết kế cơ sở dữ liệu

Trước khi bắt tay vào làm, bạn phải đặt cho mình 1 câu hỏi:

Liệu trong ứng dụng sẽ có những đối tượng nào?

Bạn nên nhớ rằng, lập trình hướng đối tượng khác hẳn với lập trình hướng thủ tục. Trước đây khi muốn giải quyết 1 vấn đề, bạn thường đặt câu hỏi: “Liệu rằng trong ứng dụng sẽ bao gồm những công đoạn nào?“, thì bây giờ bạn nên bỏ cái tư duy cũ đó đi 😀

Và tất nhiên, quản lý 1 cái gì đó thì phải có cơ sở dữ liệu (CSDL) để lưu trữ lại data. Trong bài này mình sẽ hướng dẫn bằng file CSV (Comma-Seperated Values), file CSV chứa những mẩu tin (record) trong đó phân cách với nhau bằng những dấu phẩy, những data sẽ được bao trong ngoặc kép. Ví dụ:

// Mặc định cấu trúc file CSV sẽ như thế này
"Nguyen Van A","301224587","14/7/1995","Long An","Nam"
"Nguyen Thi B","299545874","20/5/1996","Kien Giang","Nu"
"Tran Cong C","300548744","18/4/1994","TPHCM","Nam"
// Tuy nhiên để cho đơn giản, mình sẽ không sử dụng những dấu ngoặc kép
Nguyen Van A,301224587,14/7/1995,Long An,Nam
Nguyen Thi B,299545874,20/5/1996,Kien Giang,Nu
Tran Cong C,300548744,18/4/1994,TPHCM,Nam

Tất nhiên đây chỉ là lưu trữ 1 cách thủ công, thô sơ nhất, và mình cũng chưa bao giờ lưu trữ theo kiểu này mà thường sử dụng SQL để lấy data.

Quay lại vấn đề, trong thư viện sẽ có sách (có thể bạn thừa biết :v), người mượn sách (customers) và nhân viên (moderators). Vậy thì ta sẽ tạo 3 class là Books, Customers, Moderators. Tuy nhiên hiện nay customer cũng có thể đặt sách online, vậy nên ta sẽ tạo 1 class lớn là Account, sau đó sẽ cho Customers, Moderators kế thừa class lớn này, trông có vẻ chuyên nghiệp hơn 😀

Cùng nắm tay nhau cho tình thương mến thương nhé :D
Cùng nắm tay nhau cho tình thương mến thương nhé 😀

Ta sẽ thiết kế class như sau:

diagram
Class diagram CSDL cần tạo

Tất nhiên bạn có thể tuỳ biến lại, hoặc có thể dựa trên mẫu để thiết kế ra CSDL cho riêng bản thân. Class diagram trên chỉ mang tính minh hoạ, và mình sẽ sử dụng nó cho những bài sau.

Ta sẽ xây dựng màn hình đăng nhập, nếu nó đăng nhập thành công thì ta mới có thể mượn sách (có thể thiết kế hệ thống quên mật khẩu, tuy nhiên mình chỉ hướng dẫn ở mức căn bản nên những tính năng này các bạn có thể tự làm khi hiểu được cơ chế 😀 ). Nếu quyền đăng nhập là Customers thì ta có thể mượn sách, trả sách, còn nếu là Moderators thì có thể đăng kí, xoá account và tính tiền.

Ngoài ra mình có xây dựng 1 struct Rent, đây là struct đảm nhiệm việc lưu trữ những cuốn sách được mượn, bao gồm tên sách, tổng số, ngày mượn và ngày trả dự kiến. Nếu ngày trả thực tế lớn hơn ngày trả dự kiến thì mỗi ngày sẽ mất 5000/1 quyển.

Vậy là phần thiết kế CSDL đã xong, phần sau ta sẽ tiếp tục code những phần mà ta đã xây dựng ở trên!

Cảm ơn các bạn đã theo dõi, hẹn gặp lại ở những phần tiếp theo!

Tags

About the author

Võ Hoài Sơn

Tính tình bất định
Chọc vào là bịnh
Rất yêu lập trình
Luôn code hết mình
Mình hiện đang là sinh viên của trường ĐH Khoa học tự nhiên TPHCM. Bản thân rất thích code, kiêm luôn cả mần thơ nên thường hơi hâm hâm dở dở. Ngoài ra chém gió, chém chuối, chém trái cây các kiểu cũng là sở trường của mình. Rất mong được làm quen với các bạn :D

Add Comment