Các chức năng trên giao diện: • Thêm: Cho phép người dùng thêm các thông tin vào CSDL • Cập nhật: sửa tất cả các mục trên form, trừ mã sách.. Các chức năng trên giao diện: • Thêm: Cho
Trang 1TÊN ĐỀ TÀI:
XÂY DỰNG ỨNG DỤNG QUẢN LÝ THƯ VIỆN
BÀI TẬP LỚN MÔN: LẬP TRÌNH NET 1 + BTL
Trang 2MỤC LỤC
PHẦN 1: THIẾT KẾ CƠ SỞ DỮ LIỆU 3
1 Cấu trúc bảng SACH 3
2 Cấu trúc bảng NXB 3
3 Cấu trúc bảng TACGIA 3
4 Cấu trúc bảng LOAI 4
5 Cấu trúc bảng PHIEUMUON 4
6 Cấu trúc bảng THEDOCGIA 4
7 Cấu trúc bảng KHOA 5
8 Cấu trúc bảng CHITIET_PM 5
9 Lược đồ quan hệ 5
PHẦN 2: SƠ ĐỒ PHÂN RÃ CHỨC NĂNG 7
PHẦN 3: GIAO DIỆN CỦA CÁC CHỨC NĂNG 8
1 Giao diện chương trình chính 8
2 Giao diện đăng nhập 8
3 Giao diện Đổi mật khẩu 9
4 Giao diện Sách 9
5 Giao diện Nhà xuất bản 10
6 Giao diện Thẻ độc giả 10
7 Giao diện Tác giả 11
8 Giao diện Quản trị viên 12
9 Giao diện Danh mục Sách 12
10 Giao diện Phiếu mượn 13
11 Giao diện Chi tiết phiếu mượn 13
12 Giao diện Thống kê độc giả 14
13 Giao diện Thống kê phiếu mượn 15
14 Giao diện Thống kê tổng quan 15
*Phân quyền tài khoản: 15
PHẦN 4: MÃ NGUỒN (SOURCE CODE) 18
1 Trang chủ 18
2 Đăng nhập 20
3 Đổi mật khẩu 22
4 Hiển thị danh mục sách 23
5 Sách 25
6 Thẻ độc giả 30
7 Nhà xuất bản 33
8 Tác giả 36
9 Quản trị viên 40
Trang 311 Chi tiết phiếu mượn 46
12 Thống kê độc giả 49
13 Thống kê phiếu mượn 50
14 Thống kê tổng quan 51
15 Class Thư viện 54
16 Class Database 54
Trang 4PHẦN 1: THIẾT KẾ CƠ SỞ DỮ LIỆU
1 Cấu trúc bảng SACH
Thể hiện Sách, tài liệu Các cuốn sách, tài liệu phân biệt với nhau bởi mã sách.
STT Tên thuộc tính Kiểu dữ liệu Khóa
chính Khóa ngoại Diễn giải
sách tham chiếu đển bảng NXB
chiếu đển bảng TACGIA
2 Cấu trúc bảng NXB
Thể hiện Nhà xuất bản Các nhà xuất bản phân biệt với nhau bởi mã nhà xuất bản.
STT Tên thuộc tính Kiểu dữ liệu Khóa
chính Khóa ngoại Diễn giải
3 Cấu trúc bảng TACGIA
Thể hiện Tác giả Các tác giả phân biệt với nhau bởi mã tác gải
STT Tên thuộc tính Kiểu dữ liệu Khóa
chính Khóa ngoại Diễn giải
Trang 5trị null
4 Cấu trúc bảng LOAI
Thể hiện Thể loại Các thể loại phân biệt với nhau bởi mã thể loại.
STT Tên thuộc tính Kiểu dữ liệu Khóa
chính Khóa ngoại Diễn giải
5 Cấu trúc bảng PHIEUMUON
Thể hiện Phiếu mượn Các phiếu mượn phân biệt với nhau bởi mã phiếu mượn.
STT Tên thuộc tính Kiểu dữ liệu Khóa
chính Khóa ngoại Diễn giải
chiếu đển bảng THEDOCGIA
mượn tham chiếu đển bảng QTV
Là một trong 3 giá trị: Chưa trả, Đã trả và Quá hạn trả
6 Cấu trúc bảng THEDOCGIA
Thể hiện Thẻ độc giả Các thẻ độc giả phân biệt với nhau bởi mã thẻ.
STT Tên thuộc tính Kiểu dữ liệu Khóa
chính Khóa ngoại Diễn giải
Trang 6STT Tên thuộc tính Kiểu dữ liệu Khóa
chính Khóa ngoại Diễn giải
8 Cấu trúc bảng CHITIET_PM
Thể hiện Chi tiết các cuốn sách của Phiếu mượn Các chi tiết phân biệt với nhau bởi mã chi tiết
STT Tên thuộc tính Kiểu dữ liệu Khóa
chính Khóa ngoại Diễn giải
chiếu đển bảng PHIEUMUON
bảng SACH
9 Lược đồ quan hệ
Trang 7PHẦN 2: SƠ ĐỒ PHÂN RÃ CHỨC NĂNG
Quản lý thư viện
Xem danh mục sách
Quản lý dữ liệu
Quản lý phiếu mượn
Quản lý chi tiét phiếu mượn
Thống kê
Thống kê độc giả
Thống kê phiếu mượn
Thống kê tổng quan
Thông tin
Thông tin liên lạc
Giới thiệu
Trang 8PHẦN 3: GIAO DIỆN CỦA CÁC CHỨC NĂNG
1 Giao diện chương trình chính
Nếu chưa đăng nhập, người dùng chỉ có quyền xem Danh mục sách và Thông tin phần mềm, không được cấp quyền sử dụng các chức năng khác.
2 Giao diện đăng nhập
Chức năng này cho phép người dùng đăng nhập vào hệ thống với tên và mật khẩu
+ Hệ thống hiển thị form đăng nhập yêu cầu người dùng nhập “Tên đăng nhập” và “Mật khẩu” + Hệ thống sẽ kiểm tra tên và mật khẩu được nhập và cho phép người dùng đăng nhập vào hệ thống.
3 Giao diện Đổi mật khẩu
Trang 9Giao diện này cho phép người dùng tiến hành đổi mật khẩu
Phải nhập đúng mật khẩu cũ; mật khẩu mới và mật khẩu nhập lại phải trùng nhau thì mới cập nhật thành công.
4 Giao diện Sách
Giao diện này cho phép người dùng có thể cập nhật thêm, sửa, xóa sách, tài liệu
Chúng ta có thể xem chi tiết về mã sách, tên sách, số trang, số lượng, mã nhà xuất bản, mã tác giả, mã thể loại, năm xuất bản của Sách
Các chức năng trên giao diện:
• Thêm: Cho phép người dùng thêm các thông tin vào CSDL
• Cập nhật: sửa tất cả các mục trên form, trừ mã sách
• Xóa: xóa một cuốn sách trong danh sách
Trang 10• Xem chi tiết: Khi bấm vào dòng nào trong listview, thông tin của sách đó sẽ hiển thị lên các textbox.
• Tìm: Tìm các thông tin của cuốn sách dựa vào mã sách.
Nếu chưa có NXB hoặc tác giả nào trong CSDL phù hợp cới cuốn sách đó, QTV có quyền tạo Tạo mới NXB hoặc Tác giả.
5 Giao diện Nhà xuất bản
Giao diện này cho phép người dùng có thể cập nhật thêm, sửa, xóa Nhà xuất bản
Chúng ta có thể xem chi tiết về mã nhà xuất bản, tên nhà xuất bản, địa chỉ, email của NXB Các chức năng trên giao diện:
• Thêm: Cho phép người dùng thêm các thông tin vào CSDL
• Tìm kiếm: Tìm các thông tin của NXB dựa vào mã NXB.
• Cập nhật: sửa tất cả các mục trên form, trừ mã NXB
• Xóa: xóa NXB trong danh sách
• Xem chi tiết: Khi bấm vào dòng nào trong listview, thông tin của NXB đó sẽ hiển thị lên các textbox.
6 Giao diện Thẻ độc giả
Chúng ta có thể xem chi tiết về mã thẻ độc giả, họ tên độc giả, năm sinh, mã khoa, số điện thoại, ngày lập của Thẻ độc giả.
Các chức năng trên giao diện:
• Thêm: Cho phép người dùng thêm các thông tin vào CSDL
Trang 11• Cập nhật: sửa tất cả các mục trên form, trừ mã thẻ độc giả
• Xóa: xóa thẻ độc giả trong danh sách
• Xem chi tiết: Khi bấm vào dòng nào trong listview, thông tin của Thẻ độc giả đó sẽ hiển thị lên các textbox.
7 Giao diện Tác giả
Chúng ta có thể xem chi tiết về mã tác giả, Họ tên tác giả, năm sinh, năm mất, số điện thoại của Tác giả
Các chức năng trên giao diện:
• Thêm: Cho phép người dùng thêm các thông tin vào CSDL
• Tìm: Tìm các thông tin của tác giả dựa vào mã thẻ độc giả.
• Cập nhật: sửa tất cả các mục trên form, trừ mã tác giả
• Xóa: xóa thẻ tác giả trong danh sách
• Xem chi tiết: Khi bấm vào dòng nào trong listview, thông tin của Tác giả đó sẽ hiển thị lên các textbox.
• Các nút di chuyển.
8 Giao diện Quản trị viên
Trang 12Chúng ta có thể xem chi tiết về mã Quản trị viên, Họ tên, Năm sinh, SĐT, Địa chỉ, Vai trò của QTV.
Các chức năng trên giao diện:
• Thêm: Cho phép người dùng thêm các thông tin vào CSDL
• Cập nhật: sửa tất cả các mục trên form, trừ mã thẻ QTV và mật khẩu
• Xóa: xóa Quản trị viên đó trong danh sách
• Xem chi tiết: Khi bấm vào dòng nào trong listview, thông tin của QTV đó sẽ hiển thị lên các textbox.
9 Giao diện Danh mục Sách
Chúng ta có thể xem và tìm kiêm chi tiết về mã sách, tên sách, số trang, số lượng, mã nhà xuất bản, mã tác giả, mã thể loại, năm xuất bản của Sách
Các chức năng trên giao diện:
• Tìm: Tìm các thông tin của sách dựa tên sách, mã NXB, mã tác giảm, thể loại.
• Reset: Xoá thông tin ở các ô textbox
• Hiển thị số lượng kết quả tìm kiếm
• Tìm mã NXB, tác giả: Nếu không xác định chính xác mã NXB, mã tác giả thì có thể
mở form Tìm NXB, Tìm tác giả bằng cách bấm nút bên cạnh ô textbox.
Trang 1310 Giao diện Phiếu mượn
Chúng ta có thể xem chi tiết về mã phiếu mượn, mã thẻ độc giả mượn sách, mã quản trị viên thực hiện, ngày mượn, hạn trả dự kiến, tình trạng của phiếu mượn
Các chức năng trên giao diện:
• Thêm: Cho phép người dùng thêm các thông tin vào CSDL
• Cập nhật: sửa tất cả các mục trên form, trừ mã thẻ phiếu mượn và ngày mượn
• Thay đổi tình trạng phiếu mượn: Chọn nút bấm “Qúa hạn” hoặc “Trả sách”, tình trạng sách sẽ được thay đổi.
• Tìm: Tìm các thông tin của sách dựa mã phiếu mượn
• Xem chi tiết: Khi bấm vào dòng nào trong listview, thông tin của Phiếu mượn đó sẽ hiển thị lên các textbox.
• Tìm mã Thẻ độc giả, QTV: Nếu không xác định chính xác mã thẻ độc giả, mã QTV thì có thể mở form Tìm Thẻ độc giả, Tìm QTV bằng cách bấm nút bên cạnh ô textbox.
11 Giao diện Chi tiết phiếu mượn
Chúng ta có thể xem chi tiết về mã chi tiết, mã sách, số lượng sách có trong Phiếu mượn.
Các chức năng trên giao diện:
• Chọn phiếu: Mở ra form Chọn phiếu, trả về mã phiếu mượn
Trang 14• Chọn sách: Mở ra form Chọn sách, trả về mã sách.
• Thêm: Cho phép người dùng thêm các thông tin vào CSDL
• Sửa: sửa tất cả mã sách, số lượng sách
• Xóa: Xóa bỏ cuốn sách có trong phiếu mượn
• Hiển thị số lượng kết quả sách có trong phiếu mượn
• Xem chi tiết: Khi bấm vào dòng nào trong listview, thông tin của mã sách, số lượng
sẽ hiển thị lên các textbox
12 Giao diện Thống kê độc giả
Chúng ta có thể xem và tìm kiêm chi tiết về mã thẻ độc giả, họ tên độc giả, năm sinh, mã khoa,
số điện thoại, ngày lập thẻ của Thẻ độc giả.
Các chức năng trên giao diện:
• Tìm: Tìm các thông tin của sách dựa mã thẻ độc giả, tên, năm sinh, mã
• Reset: Xoá thông tin ở các ô textbox
• Hiển thị số lượng kết quả tìm kiếm
13 Giao diện Thống kê phiếu mượn
Chúng ta có thể xem và tìm kiêm chi tiết Phiếu mượn
Các chức năng trên giao diện:
• Tìm: Tìm các thông tin của sách dựa mã phiếu mượn, mã thẻ, tình trạng.
• Reset: Xoá thông tin ở các ô textbox
• Hiển thị số lượng kết quả tìm kiếm
Trang 1514 Giao diện Thống kê tổng quan
Hiển thị các thống kê về dữ liệu có trong thư viện.
Xem: Mở form Hiển thị các phiếu mượn quá hạn.
*Phân quyền tài khoản:
• Người dùng bình thường, không có tài khoản chỉ có thể xem Danh mục sách.
• Quản trị viên có quyền truy cập các chức năng khác, ngoại trừ chức năng liên quan đến Quản trị viên
Trang 16• Tổ trưởng thư viện: Được quyền truy cập vào tất cả các chức năng.
Trang 17PHẦN 4: MÃ NGUỒN (SOURCE CODE)
Trang 19private void menuNXB_Click(object sender, EventArgs e)
Trang 20string connectionString = @"Data Source=DESKTOP-A20PBA5\
SQLEXPRESS;Initial Catalog=Quanlythuvien-BTL;Integrated Security=True";
formMain f = new formMain();
formMain f2 = new formMain();
Trang 21private void boxPassword_KeyDown(object sender, KeyEventArgs e) {
Trang 22string Sql = "UPDATE QTV SET matkhau = '"+ boxXacnhanMatkhau.Text + "' WHERE matkhau = '"+ boxMatkhauCu.Text +"' and maqtv = '"+ boxMaqtv.Text +"'";
Trang 23// TODO: This line of code loads data into the
'_Quanlythuvien_BTLDataSet6.LOAI' table You can move, or remove it, as needed
this.lOAITableAdapter.Fill(this._Quanlythuvien_BTLDataSet6.LOAI);
DataView dv = new DataView(dt);
//Nạp dữ liệu vào DataView
//bă;t đấcu lọc dữ liệu
string tensach, manxb, matg, matheloai;
int namxb;
if (boxTensach.Text == "") tensach = "*"; else tensach =
boxTensach.Text.ToString();
if (boxMaNXB.Text == "") manxb = ""; else manxb = boxMaNXB.Text.ToString();
if (boxMatacgia.Text == "") matg = "*"; else matg =
Trang 25string Sql = "SELECT tenloai FROM LOAI where maloai ='" + maloai + "'";
cmdSelect = new SqlCommand(Sql, cn);
Trang 26" '" + comboBoxTheloai.SelectedValue + "', '" + boxNamXb.Text + "')";
cmdInsert = new SqlCommand(sql, cn);
cmdInsert.ExecuteNonQuery();
Trang 27MessageBox.Show("Đã lưu thành công");
LoadListView(); //Nạp lại dữ liệu mới vào listView1
string Sql = "UPDATE SACH SET tensach = '" + boxTensach.Text + "', sotrang = '" +
boxSotrang.Text + "', soluong = '" + boxSoluong.Text + "'," +
" manxb = '" + boxNXB.Text + "', matg = '" + boxTacgia.Text + "', matheloai = '" +
comboBoxTheloai.SelectedValue + "', namxb = '" + boxNamXb.Text + "'" +
" WHERE masach = '" + boxMasach.Text + "'";
cmdSelect = new SqlCommand(Sql, cn);
string Sql = "delete from SACH where masach ='" + boxMasach.Text + "'";
cmdXoa = new SqlCommand(Sql, cn);
Trang 28string masach = dr["masach"].ToString();
string tensach = dr["tensach"].ToString();
string sotrang = dr["sotrang"].ToString();
string soluong = dr["soluong"].ToString();
string manxb = dr["manxb"].ToString();
string matg = dr["matg"].ToString();
string namxb = dr["namxb"].ToString();
string maloai = dr["matheloai"].ToString();
Trang 29string connectionString = @"Data Source=DESKTOP-A20PBA5\
SQLEXPRESS;Initial Catalog=Quanlythuvien-BTL;Integrated Security=True";
cn = new SqlConnection(connectionString);
cn.Open();
Trang 32DialogResult dl = MessageBox.Show("Nhập thống tin mã theG chính xác", "Thốngbáo", MessageBoxButtons.YesNo);
Trang 33string connectionString = @"Data Source=DESKTOP-A20PBA5\
SQLEXPRESS;Initial Catalog=Quanlythuvien-BTL;Integrated Security=True";
Trang 34private void btnThem_Click(object sender, EventArgs e)
string manxb = boxMaNXB.Text;
string tennxb = boxTenNXB.Text;
string diachi = boxDiachi.Text;
string email = boxEmail.Text;
string sql = "select * from NXB where manxb='" + boxMaNXB.Text + "'";
cmdSelect = new SqlCommand(sql, cn);
Trang 35MessageBox.Show("Khống tốcn tại mã NXB " + boxMaNXB.Text);
string Sql = "UPDATE NXB SET manxb = '"+ boxMaNXB.Text+ "', tennxb = '"
+ boxTenNXB.Text + "', diachi = '" + boxDiachi.Text + "', email = '" + boxEmail.Text +
"' WHERE manxb = '" + boxMaNXB.Text + "'";
cmdXoa = new SqlCommand(Sql, cn);
Trang 36string connectionString = @"Data Source=DESKTOP-A20PBA5\
SQLEXPRESS;Initial Catalog=Quanlythuvien-BTL;Integrated Security=True";
Trang 37string tentg = boxTentg.Text;
string namsinh = boxNamsinh.Text;
string nammat = boxNammat.Text;
Trang 39private void Moketnoi()
string connectionString = @"Data Source=DESKTOP-A20PBA5\
SQLEXPRESS;Initial Catalog=Quanlythuvien-BTL;Integrated Security=True";
Trang 42if (boxTinhtrang.Text == "DA TRA")
// TODO: This line of code loads data into the
'_Quanlythuvien_BTLDataSet4.PHIEUMUON' table You can move, or remove it, as needed
try
{
string connectionString = @"Data Source=DESKTOP-A20PBA5\
SQLEXPRESS;Initial Catalog=Quanlythuvien-BTL;Integrated Security=True";
LoadListView(); //hien thi listview
boxTinhtrang.Text = "CHUA TRA";
Trang 44boxTinhtrang.Text = "QUA HAN TRA";
string mapm = dr["mapm"].ToString();
string mathedg = dr["mathe"].ToString();
string maqtv = dr["maqtv"].ToString();
string hantra = dr["hantra"].ToString();
string tinhtrang = dr["tinhtrang"].ToString();
Trang 45{
if (boxMapm.Text != "") {
Moketnoi(); cmd = new SqlCommand("select * from CHITIET_PM where mapm = '" + boxMapm.Text + "' ", cn); SqlDataReader r = cmd.ExecuteReader(); listView1.Items.Clear(); // Xóa tấ;t caG dữ liệu trong listView1 if (r.HasRows) {
while (r.Read()) {
string[] st = new string[4]; st[0] = r["machitiet"].ToString(); st[1] = r["masach"].ToString();
st[2] = r["soluong"].ToString(); ListViewItem lv = new ListViewItem(st); listView1.Items.Add(lv); boxSoluong.Text = "1"; boxTongsosach.Text = listView1.Items.Count.ToString(); }
r.Close(); }
cmd.Dispose();
}
}
private void formChitietPhieumuon_Load(object sender, EventArgs e) {
try {
string connectionString = @"Data Source=DESKTOP-A20PBA5\ SQLEXPRESS;Initial Catalog=Quanlythuvien-BTL;Integrated Security=True"; cn = new SqlConnection(connectionString); cn.Open(); }
catch //(Exception loi) {
MessageBox.Show("Khống thếG kế;t nố;i được"); }
LoadListView(); //hien thi listview }
private void btnChonpm_Click(object sender, EventArgs e) {
formChonPhieumuon f = new formChonPhieumuon(); f.ShowDialog(); if (classThuvien.mapm != "") {
boxMapm.Text = classThuvien.mapm.ToString(); LoadListView(); }
}
private void button2_Click(object sender, EventArgs e) {
formChonsach f = new formChonsach(); f.ShowDialog(); if (classThuvien.masach != "") {
boxMasach.Text = classThuvien.masach.ToString(); }
LoadListView(); }
private void btnThem_Click(object sender, EventArgs e)