1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Bài tập lớn học phần lập trình net Đề tài 6 xây dựng Ứng dụng quản lý thư viện

111 0 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Xây Dựng Ứng Dụng Quản Lý Thư Viện
Tác giả Nguyễn Trọng Đạo, Nguyễn Phú Quang Hưng, Đàm Đức Minh, Hoàng Hữu Thành, Trần Công Anh Tuyến
Trường học Trường Đại Học Công Nghệ Đông Á
Chuyên ngành Lập Trình .NET
Thể loại bài tập lớn
Năm xuất bản 2024
Thành phố Bắc Ninh
Định dạng
Số trang 111
Dung lượng 1,53 MB

Cấu trúc

  • Chương 1. Giới thiệu về đề tài (5)
    • 1.1. Giới thiệu về đề tài (5)
    • 1.2 Kế hoạch làm đề tài (5)
    • 1.3 Các công nghệ sử dụng (11)
  • Chương 2. Mô hình hệ thống (13)
    • 2.1. Các chức năng của hệ thống (13)
    • 2.2 Các giao diện có trong hệ thống (17)
    • 2.3 Mô hình lớp (27)
    • 2.4. Mô hình cơ sở dữ liệu (28)
    • 2.5 Các tiện ích (33)
  • Chương 3. Phát triển hệ thống (34)
    • 3.1. Lớp GUI (34)
    • 3.2. Lớp DAL (105)
    • 3.3 Các Procedured (106)
  • Kết luận (109)

Nội dung

b Xác định Đối tượng sử dụng hệ thống Qua khảo sát chúng em đã xác định được 2 đối tượng sử dụng đó là Quản lý: Quản lý nhân viên và kiểm tra doanh thu Nhân viên : Bán hàng và quản lý c

Giới thiệu về đề tài

Giới thiệu về đề tài

Theo tổng kết của Cục Xuất bản, In và Phát hành, năm qua toàn ngành xuất bản trên 33.000 cuốn sách (năm 2018 đạt gần 32.000 cuốn) Lượng bản sách trên

Với 400 triệu bản sách được phát hành, việc trao đổi và mượn sách tại thư viện hiện nay gặp nhiều bất tiện và khó khăn trong việc thống kê đầu sách Sự phát triển của công nghệ thông tin đã tạo ra nhu cầu tìm kiếm thông tin từ sách vở ngày càng cao Hình thức trao đổi và tìm kiếm sách cũng trở nên đa dạng hơn Ứng dụng công nghệ thông tin vào quản lý sách mang lại nhiều lợi ích cho thư viện, giúp giảm thời gian quản lý và đơn giản hóa quá trình tìm kiếm Điều này cho phép độc giả dễ dàng và nhanh chóng lựa chọn những cuốn sách cần thiết.

Kế hoạch làm đề tài

1.2.1 Khởi tạo dự án a) Các hoạt động Đội ngũ ban đầu hệ thống:

Chức vụ Tên thành viên đội ngũ hệ thống Hoạt động chính

Leader Nguyễn Trọng Đạo Quản lý và hỗ trợ các thành viên đội ngũ hệ thống

Nguyễn Trọng Đạo Đàm Đức Minh Hoàng Hữu Thành

Trần Công Anh Tuyến Nguyễn Phú Quang Hưng

Test Đàm Đức Minh Hoàng Hữu Thành

Nguyên tắc quản lý trong dự án:

Để đảm bảo sự hợp tác hiệu quả trong nhóm, việc xác định rõ ràng vai trò và trách nhiệm của từng thành viên là rất quan trọng Khi các thành viên không hiểu rõ vai trò của mình hoặc mối liên hệ với người khác, điều này có thể dẫn đến sự vượt ranh giới và xung đột không cần thiết Do đó, việc làm rõ vai trò giúp mọi người làm việc cùng nhau một cách hiệu quả hơn.

Để bắt đầu và thực hiện dự án, cần xây dựng một chiến lược rõ ràng, chia sẻ tầm nhìn và kế hoạch với các thành viên trong nhóm, đồng thời phân công nhiệm vụ cụ thể cho từng người để đảm bảo tiến độ công việc được hoàn thành hiệu quả.

Xác định các ưu tiên và mốc quan trọng trước thời hạn là bước cần thiết trong giai đoạn lập kế hoạch dự án Việc này giúp bạn theo dõi tiến độ và đảm bảo rằng bạn đang đi đúng hướng để hoàn thành dự án đúng thời gian.

Minh bạch là yếu tố quan trọng trong việc xây dựng một hệ thống, nơi mọi thành viên trong nhóm có thể dễ dàng và hiệu quả truy cập tất cả thông tin liên quan đến dự án.

-Theo dõi và đo lường tiến độ: Kiểm tra KPI để có thể nắm bắt các vấn đề và sửa chữa nhanh chóng

-Đánh giá rủi do: Đánh giá rủi do có thể xảy ra giúp bạn tránh thất bại trong dự án.

Kế hoạch đối với toàn bộ dự án như thời gian bắt đầu và các giai đoạn dự kiến hoàn thiện

Giai đoạn Tên công việc Người thực hiện Thời gian bắt đầu

Phân tích và thiết kế hệ thống

1.1 Phân tích luồng và chức năng 20-06-

2.1 Thiết kế giao diện đăng nhập

2.2 Thiết kế giao diện màn hình chính

2.3 Thiết kế giao diện đổi mật khẩu

2.4 Thiết kế giao diện quản lý sách

2.5 Thiết kế giao diện quản lý tác giả

2.6 Thiết kế giao diện quản lý nhà xuất bản

2.7 Thiết kế giao diện quản lý thể loại

2.8 Thiết kế giao diện quản lý gửi OTP

2.9Thiết kế giao diện quên mật khẩu

2.10 Thiết kế giao diện quản lý phiếu trả

2.11 Thiết kế giao diện quản lý phiếu mượn

2.12 Thiết kế giao diện quản lý người dùng

3.5 Quản lý thông tin sách

3.8 Quản lý nhà xuất bản

9 b) Xác định Đối tượng sử dụng hệ thống

Qua khảo sát chúng em đã xác định được 2 đối tượng sử dụng đó là

Quản lý: Quản lý nhân viên và kiểm tra doanh thu Nhân viên : Bán hàng và quản lý các đơn hàng c) Phương pháp phát triển phần mềm

Lý do mà một dự án có thể được triển khai theo phương pháp Waterfall có thể bao gồm:

1 Yêu cầu rõ ràng từ đầu: Khi yêu cầu của dự án được xác định và thay đổi ít, Waterfall có thể phù hợp Nếu yêu cầu không thay đổi nhiều trong quá trình phát triển, việc theo dõi và hoàn thành từng giai đoạn một theo Waterfall sẽ dễ dàng hơn

2 Dự án có kích thước nhỏ và ít phức tạp: Nếu dự án có phạm vi rõ ràng, ít phức tạp và không yêu cầu sự linh hoạt cao trong quá trình phát triển, Waterfall có thể hiệu quả

3 Yêu cầu không thay đổi đột ngột: Nếu không có sự thay đổi đột ngột trong yêu cầu hoặc môi trường của dự án, Waterfall có thể dễ dàng quản lý hơn so với các phương pháp phát triển linh hoạt hơn như Agile

4 Phù hợp với nguồn lực và thời gian: Waterfall thường cho phép việc ước lượng thời gian và nguồn lực một cách rõ ràng từ đầu Nếu việc ước lượng này quan trọng trong dự án và có sẵn nguồn lực đủ để thực hiện từng giai đoạn một, Waterfall có thể được lựa chọn d) Đánh giá tính khả thi của dự án

Phần mềm tìm kiếm sách giúp tiết kiệm thời gian và công sức cho nhân viên, cho phép họ dễ dàng tìm thấy tên sách và vị trí của chúng mà không cần phải tra cứu qua sổ sách thủ công như trước đây.

Phần mềm quản lý sách giúp kiểm soát số lượng hiệu quả hơn và linh hoạt hơn so với sổ sách thủ công Nó cung cấp thông báo khi một loại sách sắp hết, giúp người dùng kịp thời bổ sung để tránh tình trạng thiếu sách khi khách hàng có nhu cầu.

-Dễ quản lý hơn sổ sách thủ công: Tất cả dữ liệu được lưu trong CSDL dễ dàng truy xuất bằng phần mềm qua các chức năng quản lý

-Tiện lợi: Thay vì phải đến của hàng mua sách thì người mua có thể đặt mua sách tại nhà

Phù hợp với tình hình dịch bệnh hiện nay

Các công nghệ sử dụng

Ngôn ngữ C# là một ngôn ngữ lập trình hiện đại và mạnh mẽ, được thiết kế để đơn giản hóa quá trình phát triển phần mềm Phát triển bởi Microsoft, C# là một phần của nền tảng NET và được sử dụng phổ biến trong việc phát triển ứng dụng máy tính để bàn, web, di động và nhiều loại ứng dụng khác.

Dưới đây là một số khía cạnh chính của C# và cách sử dụng C# trên Visual Studio: Đặc điểm chính của C#

1 Cú pháp dễ hiểu: C# có cú pháp tương tự như C, C++, và Java, giúp lập trình viên dễ dàng học và sử dụng

2 Quản lý bộ nhớ: C# sử dụng một cơ chế gọi là "garbage collection" để tự động quản lý bộ nhớ, giảm nguy cơ lỗi bộ nhớ

3 Hỗ trợ lập trình hướng đối tượng (OOP): C# hỗ trợ các khái niệm OOP như kế thừa, đa hình, và đóng gói, giúp tổ chức mã nguồn một cách logic và dễ quản lý

4 Tích hợp mạnh mẽ với NET Framework: C# có thể tận dụng toàn bộ thư viện và công cụ của NET, từ đó mở rộng khả năng phát triển phần mềm

1.3.2 Sử dụng ngôn ngữ c# trên Visual studio

Visual Studio là một IDE mạnh mẽ, phổ biến cho việc phát triển ứng dụng C# Để bắt đầu với C# trong Visual Studio, bạn cần thực hiện một số bước cơ bản.

• Tải và cài đặt Visual Studio từ trang web chính thức của Microsoft

• Chọn các thành phần cần thiết cho phát triển C# và NET khi cài đặt, chẳng hạn như NET desktop development, ASP.NET and web development, v.v

• Mở Visual Studio và chọn Create a new project

• Chọn loại dự án mà bạn muốn tạo, chẳng hạn như Console App, WPF App,

• Đặt tên cho dự án và chọn vị trí lưu trữ, sau đó nhấn Create

• Sau khi tạo dự án, Visual Studio sẽ tạo sẵn một số tệp và thư mục cần thiết

• Mở tệp Program.cs (hoặc tương tự tùy thuộc vào loại dự án) để viết mã nguồn C#

4 Biên dịch và chạy ứng dụng

• Nhấn Ctrl + F5 để biên dịch và chạy ứng dụng

• Kết quả sẽ hiển thị trong cửa sổ Console

• Sử dụng các tính năng gỡ lỗi của Visual Studio như breakpoints, watch, và step through để tìm và sửa lỗi trong mã nguồn

• Nhấn F5 để bắt đầu gỡ lỗi

• Sử dụng NuGet Package Manager để thêm các thư viện và công cụ của bên thứ ba vào dự án

• Chọn Tools -> NuGet Package Manager -> Manage NuGet Packages for

• Tạo và chạy các bài kiểm thử đơn vị (unit tests) bằng cách sử dụng các framework như MSTest, NUnit, hoặc xUnit

• Visual Studio tích hợp sẵn công cụ Test Explorer để quản lý và chạy các bài kiểm thử

Mô hình hệ thống

Các chức năng của hệ thống

-Sơ đồ để phân ra chức năng quản lý thư viện:

Dùng để đăng nhập vào hệ thống để sử dụng các tính năng của phần mềm

Chức năng đăng nhập yêu cầu tính bảo mật cao; khi bạn điền đầy đủ và chính xác thông tin, hệ thống sẽ cho phép bạn truy cập Ngược lại, nếu thông tin không đúng, hệ thống sẽ thông báo lỗi và yêu cầu bạn nhập lại.

Quản lý được sử dụng toàn bộ chức năng bảo gồm tìm kiếm, thêm, cập nhật thông tin của nhân viên

Quản lý được sử dụng toàn bộ chức năng bảo gồm tìm kiếm, thêm, cập nhật thông tin của nhân viên

Quản lý, nhân viên sử dụng các chức năng và theo dõi thông tin dữ liệu của chức năng Quản lý

5 Quản lý tác giả, thể loại, nhà xuất bản

Quản lý, nhân viên sử dụng các chức năng và theo dõi thông tin dữ liệu của chức năng Quản lý

Quản lý, nhân viên theo dõi thông tin dữ liệu của chức năng

Các giao diện có trong hệ thống

STT Tên đối tượng Kiểu Ý nghĩa

1 Frmlogin Form là form chính

2 Lblogin Label Hiển thị dòng chữ login

Hiển thị dòng chữ tài khoản

Hiển thị dòng chữ mật khẩu

5 Btlogin Button Nút ấn để đăng nhập

6 Btloginotp Label Đăng nhập bằng otp

7 Tb1 Texbox Để nhập tài khoản

8 Tb2 Texbox Để nhập mật khẩu

-Giao diện đổi mật khẩu

STT Tên đối tượng Kiểu Ý nghĩa Ghi chú

1 Frmdoimk Form là form chính

Hiển thị dòng chữ đổi mật khẩu

3 Tbmkc Textbox Nhập mật khẩu cũ

4 Tbmkm Textbox Nhập mật khẩu mới

5 Btldoimk Button Nút ấn để đổi mật khẩu

6 Tbnhaplaimk Textbox Nhập lại mật khẩu

- Giao diện quên mật khẩu:

STT Tên đối tượng Kiểu Ý nghĩa

1 Frmquenmk Form là form chính

Hiển thị dòng chữ quên mật khẩu

5 Btotp Button Nút ấn để đổi mật khẩu

6 Btxacnhan Button Nhấn nút để xác nhận

6 Btquayai Button Nhấn nút để quay lại

-Giao diện quản lý sách:

STT Tên đối tượng Kiểu Ý nghĩa Ghi chú

1 Frmnguoidung Form là form chính

Hiển thị dòng chữ người dùng

Chứa các nội dung thông tin người dùng

Chứa thông tin nhiều người dùng

5 Btthem Button ấn để thêm thông tin

6 Btsua Button ấn để sửa thông tin

7 Btthoat Button ấn để xóa thông tin

8 Btxoa Button ấn để thoát

-Giao diện quản lý sách:

STT Tên đối tượng Kiểu Ý nghĩa Ghi chú

1 Frmsach Form là form chính

Hiển thị dòng chữ quản lý sách

Chứa các nội dung thông tin sách

Chứa thông tin nhiều thông tin sách

5 Btthem Button ấn để thêm thông tin

6 Btsua Button ấn để sửa thông tin

7 Btthoat Button ấn để xóa thông tin

8 Btxoa Button ấn để thoát

-Giao diện hóa đơn mượn

STT Tên đối tượng Kiểu Ý nghĩa Ghi chú

1 Frmmuon Form là form chính

Hiển thị dòng chữ quản lý sách

Chứa các nội dung thông tin sách

Chứa thông tin nhiều thông tin sách

5 Btthem Button ấn để thêm thông tin

6 Btsua Button ấn để sửa thông tin

7 Btthoat Button ấn để xóa thông tin

8 Btxoa Button ấn để thoát

-Giao diện hóa đơn trả

STT Tên đối tượng Kiểu Ý nghĩa

1 Frmtra Form là form chính

Hiển thị dòng chữ quản lý sách

Chứa các nội dung thông tin sách

Chứa thông tin nhiều thông tin sách

5 Btthem Button ấn để thêm thông tin

6 Btsua Button ấn để sửa thông tin

7 Btthoat Button ấn để xóa thông tin

8 Btxoa Button ấn để thoát

STT Tên đối tượng Kiểu Ý nghĩa Ghi chú

1 Frmtacgia Form là form chính

2 Lbltacgia Label Hiển thị dòng chữ tác giả

Chứa các nội dung thông tin tác giả

Chứa thông tin nhiều thông tin tác giả

5 Btthem Button ấn để thêm thông tin

6 Btsua Button ấn để sửa thông tin

7 Btthoat Button ấn để xóa thông tin

STT Tên đối tượng Kiểu Ý nghĩa Ghi chú

1 Frmaddmin Form là form chính

Hiển thị dòng chữ quản lý thư viện

3 Btttcn Button ấn để xem thông tin cá nhân

4 Btqlpq Button ấn để xem quản lý phân quyền

5 Bttttcn Button ấn để xem thông tin cá nhân

6 Btdoimk Button ấn để đổi mk

7 Bttdx Button ấn để xóa thông tin

8 Btqls Button ấn để quản lý sách

9 Btqltg ấn để quản lý tác giả

10 Btqlpm Button ấn để quản lý phiếu mượn

11 Btqlpt Button ấn để quản lý phiếu trả

12 Bttqlnxb Button ấn để quản lý nhà xuất bản

STT Tên đối tượng Kiểu Ý nghĩa Ghi chú

1 Frmtheloai Form là form chính

2 Lbltheloai Label Hiển thị dòng chữ thể loại

Chứa các nội dung thông tin thể loại

Chứa thông tin nhiều thông tin thể loại

5 Btthem Button ấn để thêm thông tin

6 Btsua Button ấn để sửa thông tin

7 Btthoat Button ấn để xóa thông tin

Mô hình lớp

Mô hình cơ sở dữ liệu

Thuộc tính Kiểu dữ liệu Ràng buộc

MATL VARCHAR(10) PK X Mã Thể Loại

TENTL NVARCHAR(50) X Tên Thể Loại

Thuộc tính Kiểu dữ liệu Ràng buộc

MATACGIA VARCHAR(10) PK X Mã Tác Giả

TENTACGIA NVARCHAR(50) X Tên Tác Giả

Thuộc tính Kiểu dữ liệu Ràng buộc

MAND VARCHAR(10) PK X Mã Người Dùng

HOTEN NVARCHAR(50) X Họ và Tên Nhân Viên

DIACHI NVARCHAR(MAX) X Địa Chỉ

SDT VARCHAR(10) X Số Điện Thoại

CCCD VARCHAR(12) X Căn Cước Công Dân

Thuộc tính Kiểu dữ liệu Ràng buộc Not null Mô tả

MASACH VARCHAR(10) PK X Mã Sách

NGAYXB DATE Ngày Xuất Bản

TRANGTHAI NVARCHAR(MAX) Trạng Thái

Thuộc tính Kiểu dữ liệu Ràng buộc Not null Mô tả

ID int identity(1,1) PK X Mã Sách Chi Tiết

MASACH VARCHAR(10) FK X Mã Sách

MATACGIA VARCHAR(10) FK X Mã Tác Giả

MATHELOAI VARCHAR(10) FK X Mã Thể Loại

MANHAXUATBAN VARCHAR(10) FK X Mã Nhà Xuất Bản

Thuộc tính Kiểu dữ liệu Ràng buộc Not null Mô tả

MAMUON VARCHAR(10) PK X Mã Phiếu Mượn

MAND VARCHAR(10) X Mã Người Dùng

TRANGTHAI NVARCHAR(MAX) Trạng Thái

Thuộc tính Kiểu dữ liệu Ràng buộc

MAMUONCT int identity(1,1) PK X Mã Phiếu Mượn Chi Tiết

MAMUON VARCHAR(10) X Mã Phiếu Mượn

MASACH VARCHAR(10) FK X Tên Mã Sách

Thuộc tính Kiểu dữ liệu Ràng buộc Not null Mô tả

MATRA VARCHAR(10) PK X Mã Phiếu Trả

MAND VARCHAR(10) FK X Mã Người Dùng

Thuộc tính Kiểu dữ liệu Ràng buộc

MATRACT int identity(1,1) PK X Mã Phiếu Mượn Chi Tiết

MATRA VARCHAR(10) X Mã Phiếu Trả

MASACH VARCHAR(10) FK X Tên Mã Sách

MAMUON VARCHAR(10) FK X Mã Mượn

Các tiện ích

Phát triển hệ thống

Lớp GUI

-Các Giao diện của lớp GUI:

The code for the password change interface utilizes the DAL.Repository and includes essential namespaces such as System, System.Collections.Generic, System.ComponentModel, System.Data, System.Drawing, System.Linq, System.Text, System.Threading.Tasks, and System.Windows.Forms within the PRL.Forms namespace.

{ public partial class DoiMK : Form

NguoidungRepos _repos = new NguoidungRepos(); string username, pass; public DoiMK(string tk, string mk)

//aa private void btnChnage_Click(object sender, EventArgs e)

DialogResult result = MessageBox.Show("Bạn có muốn đổi mật khẩu không?",

"Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (result == DialogResult.Yes)

{ if (newpass.Text == nhaplaiPaxx.Text)

{ var a = _repos.ChangePass(username, oldPass.Text, newpass.Text); if (a)

MessageBox.Show("Đổi mật khẩu thành công", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information); var b = _repos.GetAll().FirstOrDefault(x => x.Mand == username && x.Chucdanh == false); if (b != null)

GiaodienAdmin gd = new GiaodienAdmin(username, pass); gd.Show(); this.Hide();

GiaodienNV gd = new GiaodienNV(username, pass); gd.Show(); this.Hide();

MessageBox.Show("Mật khẩu cũ không chính xác!", "Lỗi",

MessageBox.Show("Mật khẩu mới và nhập lại mật khẩu mới không trùng khớp!", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);

} private void button2_Click(object sender, EventArgs e)

NguoidungRepos _ng = new NguoidungRepos(); var a = _ng.GetAll().FirstOrDefault(x => (x.Mand == username || x.Email

== username) && x.Matkhau == pass && x.Chucdanh == false); if (a! == null)

GiaodienAdmin ad = new GiaodienAdmin(username, pass); ad.Show(); this.Hide();

GiaodienNV ad = new GiaodienNV(username, pass); ad.Show(); this.Hide();

} private void oldPass_TextChanged(object sender, EventArgs e)

The code for the Admin interface utilizes the DAL.Models and DAL.Repository namespaces It incorporates essential system libraries, including System, System.Collections.Generic, System.ComponentModel, System.Data, System.Drawing, System.Drawing.Drawing2D, System.Linq, System.Text, System.Threading.Tasks, and System.Windows.Forms This structure is part of the PRL.Forms namespace, which facilitates the development of user-friendly administrative functionalities in the application.

{ public partial class GiaodienAdmin : Form

38 string username; string pass; public GiaodienAdmin(string tk, string mk)

} private void button6_Click(object sender, EventArgs e)

Nguoidung ng = new Nguoidung(username, pass); ng.Show(); this.Hide();

} private void button3_Click(object sender, EventArgs e)

DoiMK mk = new DoiMK(username, pass); mk.Show(); this.Hide();

} private void button2_Click(object sender, EventArgs e)

Login login = new Login(); login.Show(); this.Hide();

} private void button4_Click(object sender, EventArgs e)

DialogResult result = MessageBox.Show("Bạn có chắc muốn thoát chương trình không?", "Xác nhận", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (result == DialogResult.Yes)

} private void button8_Click(object sender, EventArgs e)

Theloai tl = new Theloai(username, pass); tl.Show(); this.Hide();

} private void button10_Click(object sender, EventArgs e)

Nhaxuatban nxb = new Nhaxuatban(username, pass); nxb.Show(); this.Hide();

} private void button7_Click(object sender, EventArgs e)

Tacgia nxb = new Tacgia(username, pass); nxb.Show(); this.Hide();

} private void button9_Click(object sender, EventArgs e)

Phieumuon nxb = new Phieumuon(username, pass); nxb.Show(); this.Hide();

} private void button11_Click(object sender, EventArgs e)

Phieutra nxb = new Phieutra(username, pass); nxb.Show(); this.Hide();

} private void button5_Click(object sender, EventArgs e)

Sach nxb = new Sach(username, pass); nxb.Show(); this.Hide();

} private void button1_Click(object sender, EventArgs e)

ThongTinCaNha thongTinCaNha = new ThongTinCaNha(username, pass); thongTinCaNha.Show(); this.Hide();

} private void button12_Click(object sender, EventArgs e)

ThongKe thongKe = new ThongKe(username, pass); thongKe.Show(); this.Hide();

} private void button13_Click(object sender, EventArgs e)

PhieuPhatVP thongKe = new PhieuPhatVP(username, pass); thongKe.Show(); this.Hide();

} private void label2_Click(object sender, EventArgs e)

- Code của Giao diện đăng nhập using DAL.Repository; using System; using System.Collections.Generic; using System.ComponentModel;

40 using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace PRL.Forms

{ public partial class Login : Form

NguoidungRepos _repos = new NguoidungRepos(); public Login()

} private void Login_Load(object sender, EventArgs e)

} private void checkBox1_CheckedChanged(object sender, EventArgs e) { if (checkBox1.Checked == true)

} private void label4_Click(object sender, EventArgs e)

Quenmk quenmk = new Quenmk(); quenmk.Show(); this.Hide();

} private void button1_Click(object sender, EventArgs e)

{ string username = textBox1.Text; string password = textBox3.Text; if (username != "" && password != "")

{ if (_repos.Login(username, password, true))

GiaodienAdmin gd = new GiaodienAdmin(username, password); gd.Show(); this.Hide();

MessageBox.Show("Đăng nhập thành công!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);

} else if (_repos.Login(username, password, false))

GiaodienNV gd = new GiaodienNV(username, password); gd.Show();

MessageBox.Show("Đăng nhập thành công!", "Thông báo",

MessageBox.Show("Đăng nhập thất bại!", "Thông báo",

MessageBox.Show("Vui lòng nhập tài khoản!", "Thông báo",

MessageBox.Show("Vui lòng nhập mật khẩu!", "Thông báo",

MessageBox.Show("Vui lòng nhập thông tin!", "Thông báo",

} private void label4_MouseEnter(object sender, EventArgs e)

{ label4.ForeColor = Color.Red; label4.Font = new Font(label4.Font, FontStyle.Italic | FontStyle.Bold | FontStyle.Underline);

} private void label4_MouseLeave(object sender, EventArgs e)

{ label4.ForeColor = SystemColors.ControlText; label4.Font = new Font(label4.Font, FontStyle.Regular);

} private void btnOTP_Click(object sender, EventArgs e)

LoginOTP otp = new LoginOTP(); otp.Show(); this.Hide();

} private void label1_Click(object sender, EventArgs e)

} private void textBox1_TextChanged(object sender, EventArgs e)

The article discusses the implementation of a user interface code using various namespaces in a C# application, specifically focusing on the DAL (Data Access Layer) for models and repositories Key components include importing essential libraries such as System, System.Collections.Generic, and System.Windows.Forms, which facilitate data handling and UI development The use of static visual styles enhances the appearance of list views and rebar elements within the application Overall, this code snippet serves as a foundational structure for building a robust user interface in a Windows Forms application.

{ public partial class Nguoidung : Form

NguoidungRepos _repos = new NguoidungRepos(); string username, password; public Nguoidung(string tk, string mk)

LoadData(_repos.GetAll()); dateTimePicker1.Format = DateTimePickerFormat.Custom; dateTimePicker1.CustomFormat = "dd/MM/yyyy";

} private void button5_Click(object sender, EventArgs e)

} public void LoadData(dynamic data)

To configure a DataGridView in a Windows Forms application, first clear any existing rows using `dataGridView1.Rows.Clear()` Set the column count to 11 and adjust the column size to fill the available space with `dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill` Define the column names by assigning values to `dataGridView1.Columns`, including "STT", "ID", "Họ và tên" (Full Name), "Giới tính" (Gender), "Địa chỉ" (Address), "Ngày sinh" (Date of Birth), "Số điện thoại" (Phone Number), and "Email" This setup creates a structured and user-friendly interface for displaying data.

44 dataGridView1.Columns[8].Name = "CCCD"; dataGridView1.Columns[9].Name = "Mật khẩu"; dataGridView1.Columns[10].Name = "Chức danh"; foreach (var x in data)

{ dataGridView1.Rows.Add(stt++, x.Mand, x.Hoten, x.Gioitinh ? "Nam" : "Nữ", x.Diachi, x.Ngaysinh, x.Sdt, x.Email, x.Cccd, x.Matkhau, x.Chucdanh ? "Admin" :

} private void button1_Click(object sender, EventArgs e)

{ bool gt; if (radioButton1.Checked)

} bool chucdanh; if (comboBox1.Text == "Admin")

} bool isValid = true; if (!Regex.IsMatch(textBox6.Text, @"^0\d{9}$"))

MessageBox.Show("Số điện thoại không hợp lệ! Số điện thoại phải bắt đầu bằng 0 và có 10 chữ số.", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error); isValid = false;

} else if (!textBox7.Text.EndsWith("@gmail.com"))

MessageBox.Show("Email không hợp lệ! Email phải có định dạng

@gmail.com.", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error); isValid = false;

} else if (textBox8.Text.Length != 11 || !textBox8.Text.All(char.IsDigit))

MessageBox.Show("CCCD không hợp lệ! CCCD phải có 11 chữ số.", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error); isValid = false;

} else if (dateTimePicker1.Value.Year >= 2006 || dateTimePicker1.Value.Year x.Sdt == textBox6.Text); var checkCCCD = _repos.GetAll().FirstOrDefault(x => x.Cccd = textBox8.Text);

MessageBox.Show("Thêm tài khoản thành công!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);

MessageBox.Show("Mã ID đã tồn tại! Vui lòng nhập lại mã Id", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);

MessageBox.Show("Đã có số điện thoại này! Vui lòng nhập số điện thoại khác!", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);

MessageBox.Show("Bạn nhập sai mã định danh! Vui lòng nhập lại mã định danh!", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);

{ textBox1.Text = textBox2.Text = textBox5.Text = textBox6.Text textBox7.Text = textBox8.Text = textBox9.Text = textBox11.Text = ""; radioButton1.Checked = radioButton2.Checked = false; comboBox1.SelectedIndex = -1; dateTimePicker1.Value = DateTime.Today;

} private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)

{ int index = e.RowIndex; var selected = dataGridView1.Rows[index]; textBox1.Text = selected.Cells[1].Value.ToString(); textBox2.Text = selected.Cells[2].Value.ToString(); if (selected.Cells[3].Value.ToString() == "Nam")

{ radioButton1.Checked = true; radioButton2.Checked = false;

The code snippet retrieves and displays data from a selected cell in a grid It assigns the value from the fourth cell to `textBox5`, sets `dateTimePicker1` to the date from the fifth cell, and populates `textBox6` to `textBox9` with values from the subsequent cells Additionally, it checks if the value in the eleventh cell is "Admin."

} private void button2_Click(object sender, EventArgs e)

{ bool gt; if (radioButton1.Checked)

} bool chucdanh; if (comboBox1.Text == "Admin")

} bool isValid = true; if (!Regex.IsMatch(textBox6.Text, @"^0\d{9}$"))

MessageBox.Show("Số điện thoại không hợp lệ! Số điện thoại phải bắt đầu bằng 0 và có 10 chữ số.", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error); isValid = false;

} else if (!textBox7.Text.EndsWith("@gmail.com"))

MessageBox.Show("Email không hợp lệ! Email phải có định dạng

@gmail.com.", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error); isValid = false;

} else if (textBox8.Text.Length != 11 || !textBox8.Text.All(char.IsDigit))

MessageBox.Show("CCCD không hợp lệ! CCCD phải có 11 chữ số.", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error); isValid = false;

} else if (dateTimePicker1.Value.Year >= 2006 || dateTimePicker1.Value.Year (x.Mand == username || x.Email = username) && x.Matkhau == password && x.Chucdanh == false); if (a! == null)

GiaodienAdmin ad = new GiaodienAdmin(username, password); ad.Show(); this.Hide();

GiaodienNV ad = new GiaodienNV(username, password); ad.Show(); this.Hide();

} private void Nguoidung_Load(object sender, EventArgs e)

The code for the personal information interface utilizes the DAL.Repository and incorporates essential namespaces such as System, System.Collections.Generic, System.ComponentModel, System.Data, System.Drawing, System.Linq, System.Text, System.Threading.Tasks, and System.Windows.Forms This implementation is part of the PRL.Forms namespace.

{ public partial class ThongTinCaNha : Form

NguoidungRepos _repos = new NguoidungRepos(); public ThongTinCaNha(string username, string pass)

InitializeComponent(); this.username = username; this.pass = pass;

LoadData(); dateTimePicker1.Format = DateTimePickerFormat.Custom; dateTimePicker1.CustomFormat = "dd/MM/yyyy";

{ var a = _repos.GetAll().FirstOrDefault(x => (x.Email == username || x.Mand == username)); if (a != null)

{ txtid.Text = a.Mand; txtname.Text = a.Hoten; if (a.Gioitinh == true)

{ radioButton1.Checked = true; radioButton2.Checked = false;

{ radioButton1.Checked = false; radioButton2.Checked = true;

} txtDC.Text = a.Diachi; dateTimePicker1.Value = a.Ngaysinh; txtsdt.Text = a.Sdt; txtemail.Text = a.Email; txtcccd.Text = a.Cccd;

} private void button1_Click(object sender, EventArgs e)

DialogResult result = MessageBox.Show("Bạn có muốn sửa thông tin cá nhân hay không?", "Xác nhận", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (result == DialogResult.Yes)

{ bool gt; if (radioButton1.Checked)

} var a = _repos.Update(txtid.Text, new DAL.Models.Nguoidung

MessageBox.Show("Cập nhật thông tin thành công!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);

MessageBox.Show("Cập nhật thông tin thất bại", "Lỗi",

} private void button2_Click(object sender, EventArgs e)

NguoidungRepos _ng = new NguoidungRepos(); var a = _ng.GetAll().FirstOrDefault(x => (x.Mand == username || x.Email

== username) && x.Matkhau == pass && x.Chucdanh == false); if (a! == null)

GiaodienAdmin ad = new GiaodienAdmin(username, pass); ad.Show(); this.Hide();

GiaodienNV ad = new GiaodienNV(username, pass); ad.Show(); this.Hide();

57 private void ThongTinCaNha_Load(object sender, EventArgs e) {

The article discusses the implementation of a borrowing slip code using various namespaces, including DAL.Models and DAL.Repository, along with iTextSharp for PDF generation It emphasizes the use of essential libraries such as System, System.IO, and System.Text.RegularExpressions within a Windows Forms application, specifically under the PRL.Forms namespace.

{ public partial class Phieumuon : Form

{ string username, pass; int maID = 0; public Phieumuon(string username, string mk)

LoadCombobox(); dateTimePicker1.Format = DateTimePickerFormat.Custom; dateTimePicker1.CustomFormat = "dd/MM/yyyy"; dateTimePicker1.Value = DateTime.Today; dateTimePicker2.Format = DateTimePickerFormat.Custom; dateTimePicker2.CustomFormat = "dd/MM/yyyy"; dateTimePicker2.Value = DateTime.Today;

} private void LoadSach(dynamic data)

ViewSach.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; ViewSach.ColumnCount = 4;

ViewSach.Columns[2].Name = "Tên sách";

ViewSach.Columns[3].Name = "Số lượng"; int stt = 1; foreach (var x in data)

ViewSach.Rows.Add(stt++, x.Masach, x.Tensach, x.Soluong);

} private void ViewSach_CellClick(object sender, DataGridViewCellEventArgs e) { int index = e.RowIndex; var selected = ViewSach.Rows[index]; txtMaSach.Text = selected.Cells[1].Value.ToString();

} private void LoadViewHD(dynamic data)

ViewHD.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; ViewHD.Columns[0].Name = "STT";

ViewHD.Columns[2].Name = "Mã nhân viên";

ViewHD.Columns[3].Name = "Tên nhân viên";

ViewHD.Columns[4].Name = "Trạng thái"; int stt = 1;

ViewHD.Columns.Add(new DataGridViewButtonColumn

ViewHD.Rows.Add(stt++, x.Mamuon, x.Manv, x.Tennv, x.Trangthai); }

In the ViewHD_CellClick event handler, when a cell in the DataGridView is clicked, the index of the clicked row is retrieved The selected row's data is then used to populate various controls: the ID is displayed in the txtId textbox, the corresponding value from the third cell is set in comboBox1, and the status from the fourth cell is shown in the txtTrangthai textbox.

} private void ViewHD_CellContentClick(object sender,

PhieuMuonRepos _repos = new PhieuMuonRepos(); if (e.ColumnIndex == ViewHD.Columns[""].Index && e.RowIndex >= 0) { string maID = ViewHD.Rows[e.RowIndex].Cells[1].Value.ToString();

61 var result = MessageBox.Show("Bạn có chắc muốn xóa thông tin này?",

"Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (result == DialogResult.Yes)

{ var deleted = _repos.DeleteHoaDon(maID); if (deleted)

MessageBox.Show("Xóa thông tin thành công!", "Thông báo",

MessageBox.Show("Xóa thông tin thất bại!", "Lỗi",

} private void LoadHDCT(string id)

ViewCT.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; ViewCT.ColumnCount = 9;

ViewCT.Columns[1].Name = "ID"; ViewCT.Columns[1].Visible = false;

ViewCT.Columns[2].Name = "Mã mượn"; ViewCT.Columns[2].Visible = false; ViewCT.Columns[3].Name = "Mã sách"; ViewCT.Columns[3].Visible = false; ViewCT.Columns[4].Name = "Tên sách";

ViewCT.Columns[5].Name = "Số lượng";

ViewCT.Columns[6].Name = "Tiền cọc";

ViewCT.Columns[7].Name = "Ngày mượn";

ViewCT.Columns[8].Name = "Ngày trả";

ViewCT.Columns.Add(new DataGridViewButtonColumn

PhieuMuonCTRepos _repos = new PhieuMuonCTRepos(); foreach (var x in _repos.GetByPhieumuonCT(id))

ViewCT.Rows.Add(stt++, x.Mamuonct, x.Mamuon, x.Masach, x.Tensach, x.Soluong, x.Tiencoc, x.Ngaymuon, x.Ngaytra);

} private void ViewCT_CellClick(object sender, DataGridViewCellEventArgs e) { int index = e.RowIndex; var selected = ViewCT.Rows[index];

The code snippet retrieves data from selected cells in a grid, assigning values to various text fields and date pickers Specifically, it sets the text for `txtMaSach`, `txtSL`, and `txtTien` from the respective cells, while also updating two date pickers with values from the selected row Additionally, it parses an integer from a cell to assign to `maID`.

} private void ViewCT_CellContentClick(object sender, DataGridViewCellEventArgs e)

PhieuMuonCTRepos _repos = new PhieuMuonCTRepos(); if (ViewCT.Columns[e.ColumnIndex].HeaderText == " Xóa" && e.RowIndex >0)

{ int maID = int.Parse(ViewCT.Rows[e.RowIndex].Cells[1].Value.ToString()); var result = MessageBox.Show("Bạn có chắc muốn xóa thông tin này?",

"Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (result == DialogResult.Yes)

{ var deleted = _repos.DeleteCT(maID); if (deleted)

MessageBox.Show("Xóa thông tin thành công!", "Thông báo",

MessageBox.Show("Mã phiếu không tồn tại hoặc chưa được chọn!",

"Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);

Random random = new Random(); string maPhieu; do

} while (_repos.GetAllPhieumuon().Any(p => p.Mamuon == maPhieu)); return maPhieu;

} private void btnAdd_Click(object sender, EventArgs e)

DialogResult result = MessageBox.Show("Bạn có muốn tạo phiếu mới hay không?", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (result == DialogResult.Yes)

PhieuMuonRepos _repos = new PhieuMuonRepos(); var a = _repos.AddHoaDon(new DAL.Models.Phieumuon

MessageBox.Show("Tạo thông tin thành công!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);

MessageBox.Show("Vui lòng nhập chọn nhân viên!", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);

} private void btnEdit_Click(object sender, EventArgs e)

DialogResult result = MessageBox.Show("Bạn có muốn tạo phiếu mới hay không?", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (result == DialogResult.Yes)

PhieuMuonRepos _repos = new PhieuMuonRepos(); var a = _repos.UpdateHoaDon(txtId.Text, new DAL.Models.Phieumuon {

MessageBox.Show("Sửa thông tin thành công!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);

MessageBox.Show("Mã phiếu không tồn tại hoặc bị bỏ trống!", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);

MessageBox.Show("Vui lòng nhập chọn nhân viên!", "Lỗi",

{ txtId.Text = txtMaSach.Text = txtSL.Text = txtTien.Text = txtTrangthai.Text textBox1.Text = ""; comboBox1.SelectedIndex = -1; dateTimePicker1.Value = dateTimePicker2.Value = DateTime.Today;

} private void btnClear_Click(object sender, EventArgs e)

NguoidungRepos _ng = new NguoidungRepos(); comboBox1.DataSource = _ng.GetAll();

68 comboBox1.DisplayMember = "Hoten"; comboBox1.ValueMember = "Mand"; comboBox1.SelectedIndex = -1;

} private void button1_Click(object sender, EventArgs e)

NguoidungRepos _ng = new NguoidungRepos(); var a = _ng.GetAll().FirstOrDefault(x => x.Mand == username && x.Chucdanh

GiaodienAdmin ad = new GiaodienAdmin(username, pass); ad.Show(); this.Hide();

GiaodienNV ad = new GiaodienNV(username, pass); ad.Show(); this.Hide();

} private void button2_Click(object sender, EventArgs e)

DialogResult result = MessageBox.Show("Bạn có muốn thanh toán không?",

"Xác nhận", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (result == DialogResult.Yes)

PhieuMuonRepos _repos = new PhieuMuonRepos(); var a = _repos.GetByIDPhieumuon(txtId.Text); if (a != null)

Hoadoncho hoadoncho = new Hoadoncho(username, pass, x.Mamuon.ToString()); hoadoncho.Show(); this.Hide();

MessageBox.Show("Vui lòng nhập mã phiếu!", "Lỗi",

MessageBox.Show("Không tìm thấy phiếu!", "Lỗi",

} private void txtSL_TextChanged(object sender, EventArgs e)

TimeSpan difference = endDate.Subtract(startDate); int numberOfDays = 0;

SachRepos sach = new SachRepos(); var gia = sach.GetAll().FirstOrDefault(x => x.Masach == txtMaSach.Text); if (gia != null)

{ numberOfDays = difference.Days; decimal giasach = 0; foreach (var x in sach.GetBy(txtMaSach.Text))

71 if (int.TryParse(txtSL.Text, out int intValue) && intValue > 0)

{ txtTien.Text = (intValue * giasach + 1000 * numberOfDays).ToString(); } else

{ numberOfDays = 1; decimal giasach = 0; foreach (var x in sach.GetBy(txtMaSach.Text))

} if (int.TryParse(txtSL.Text, out int intValue) && intValue > 0)

{ txtTien.Text = (intValue * giasach + 1000 * numberOfDays).ToString(); } else

} private void button4_Click(object sender, EventArgs e)

DialogResult result = MessageBox.Show("Bạn có muốn thêm thông tin cho phiếu hay không?", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (result == DialogResult.Yes)

{ if (int.Parse(txtSL.Text) > 0)

{ if (dateTimePicker1.Value 0 && dateTimePicker1.Value

Ngày đăng: 05/12/2024, 09:45

w