Tải bản đầy đủ (.docx) (60 trang)

báo cáo môn lập trình C quản lý thư viện

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (5.52 MB, 60 trang )

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ GIAO THÔNG VẬN TẢI
KHOA CÔNG NGHỆ THƠNG TIN
**********

BÁO CÁO BÀI TẬP LỚN
LẬP TRÌNH TRỰC QUAN C#
ĐỀ TÀI: “Xây dựng chương trình quản lý thư viện”

NHĨM SINH VIÊN: TRƯƠNG BÁ CÁT TRƯỜNG
NGUYỄN CÔNG THÀNH
TRỊNH ĐỨC TÙNG
TRỊNH TIẾN QUANG
LỚP:

71DCTT21

NHÓM:

7

GIẢNG VIÊN:

TRẦN THỊ XUÂN HƯƠNG
Hà Nội, 2022


CHƯƠNG 1: KHẢO SÁT VÀ PHÂN TÍCH THIẾT KẾ HỆ THỐNG
1. Khảo sát và phân tích bài tốn
1.1. Xác định yêu cầu bài toán:
Cùng với sự phát triển của nền kinh tế thì giáo dục cũng được mở rộng về
quy mơ và chất lượng để có thể cung cấp nhân lực có trình độ, chun mơn, …


phục vụ cho nền kinh tế ngày càng vững mạnh. Bộ phận thư viện là bộ phận
không thể thiếu trong các trường đại học cũng như trong các trường phổ thông,
trung học… để phục vụ cho việc nghiên cứu, tìm kiếm các tài liệu học một cách
tốt nhất cho các học sinh, sinh viên.
Thư viện trường quản lý khoảng hàng trăm ngàn đầu sách và tạp chí, phục
vụ cho sinh viên của trường học tập tham khảo. Sinh viên có thể mượn sách đọc
thơng qua thẻ độc giả. Để phục vụ độc giả nhanh, gọn và chính xác, thư viện cần
tin học hố cơng việc quản lý danh mục sách và quản lý độc giả của mình.
Phần mềm quản lý thư viện này nhằm giải quyết phần nào khó khăn trên.
Phần mềm hỗ trợ các chứ năng thông dụng mà nhiệm vụ của thủ thư hay làm và
hỗ trợ việc lưu trữ dữ liệu sách, …
1.2. Xác định tác nhân:
+ Bạn đọc: Những người được hệ thống phục vụ: mượn sách, trả sách…
+ Nhân viên: là người trực tiếp sử dụng các chức năng hệ thống như giám đốc
TTTTTL, Thủ thư…
+ Admin: Đảm bảo hệ thống hoạt động thông suốt, đồng thời là người điều
hành hệ thống, có quyền bổ sung, thay đổi người sử dụng hệ thống.

2. Xây dựng cơ sở dữ liệu
- Sơ đồ cơ sở dữ liệu:


- Chi tiết các bảng:
2.1. Bảng Thủ Thư
Mô Tả: Bảng Dữ Liệu Chứa Thông Tin Người Thủ Thư
Column
Name
MaThuThu
TenThuThu


Description


Type

Thủ Nvarcha

Thư
Tên

Data

r
Thủ Nvarcha

Thư

r

NamSinh

Năm Sinh

Date

GioiTinh

Giới Tính

ChucVu


Chức Vụ

DiaChi

Địa Chỉ

MatKhau

Mật Khẩu

Nvarcha
r
Nvarcha
r
Nvarcha
r
Nvarcha

Size Required

Default

Constrain

Value

t

50


Not Null N/A

50

Null
Null

50

Null

50

Null

50

Null

50

Null

PK


r

2.2. Bảng Độc Giả

Mô Tả: Bảng Dữ Liệu Chứa Thông Tin Độc Giả
Column
Name
MaDocGia
MatKhau

Description


Data
Type

Độc Nvarcha

Giả

r

Mật Khẩu

Nvarcha
r

Tên

Độc Nvarcha

Giả

r


NamSinh

Năm Sinh

Date

GioiTinh

Giới Tính

TenDocGia

NgheNghiep
DiaChi
SoDienThoai
NgayMuaThe
NgayHetHan

Nvarcha
r

Nghề

Nvarcha

Nghiệp

r
Nvarcha


Địa Chỉ
Số

r

Điện Nvarcha

Thoại

r

Ngày Mua
Thẻ
Ngày

Hết

Hạn

Size Required

Default Constrain
Value

50

Not Null N/A

50


Null

50

Null

t
PK

Null
50

Null

50

Null

50

Null

50

Null

Date

Null


Date

Null

2.3. Bảng Sách
Mô Tả: Bảng Dữ Liệu Chứa Thông Tin Về Sách
Column

Description

Data

Siz

Required Default Constrain


Name

Type

e

MaSach

Mã Sách

Nvarchar 50


Not Null

TenSach

Tên Sách

Nvarchar 50

Null

TacGia

Tác Giả

Nvarchar 50

Null

Nvarchar 50

Null

Bigint

Null

Nvarchar 50

Null


NXB
Gia
ChuyenMuc

Nhà

Xuất

Bản
Giá
Chuyên
Mục

ViTri

Vị Trí

Nvarchar 50

Null

SoLuong

Số Lượng

Int

Null

Value


t

N/A

PK

2.4. Bảng Phiếu Mượn
Mơ Tả: Bảng Dữ Liệu Chứa Thông Tin Chi Tiết Về Phiếu
Column Name
MaPhieuMuon
MaDocGia
MaSach
NgayMuon

Description


Data
Type

Phiếu Nvarcha

Mượn

r



Độc Nvarcha


Giả

r

Mã Sách
Ngày
Mượn

NgayTra
Ngày Trả
2.5. Bảng Phiếu Trả

Nvarcha
r

Size Required

Default

Constrain

Value

t

50

Not Null N/A


PK

50

Null

N/A

FK

50

Null

Default

Constrain

Value

t

Date

Null

Date

Null


Mô Tả: Bảng Dữ Liệu Chứa Thông Tin Chi Tiết Về Phiếu
Column Name

Description

MaPhieuTra



Data
Type

Phiếu Nvarcha

Size Required
50

Not Null N/A

PK


MaPhieuMuon
MaThuThu
TienPhat

Trả

r




Phiếu Nvarcha

Mượn


r
Thủ Nvarcha

Thư
Tiền Phạt

r
Nvarcha
r

NgayPhaiTra
Ngày Trả
2.6. Bảng Hoá Đơn

Date

Column

Data

Name

Description


Type
Nvarcha

50

Null

N/A

FK

50

Null

N/A

FK

50

Null

Default

Constrain

Value


t

Null

Size Required

MaHoaDon

Mã Hoá Đơn

MaSach

MaSach

TenSach

Tên Sách

SoLuong

Số Lượng

Gia

Giá

Bigint

Null


ThanhTien

Thành Tiền

Bigint

Null

NgayBan

Ngày Bán

date

Null

r
Nvarcha
r
Nvarcha
r
Nvarcha
r

50

Not Null N/A

PK


50

Null

FK

50

Null

50

Null

N/A


CHƯƠNG 2: CƠ SỞ NGHIÊN CỨU LÝ THUYẾT
1. Ngôn ngữ truy vấn SQL
1.1. Insert:
Mục đích: Thêm dữ liệu vào bảng
Cú pháp:
INSERT INTO Table_Ten (cot1, cot2, cot3, …, cotN)]
VALUES (giatri1, giatri2, giatri3, …, giatriN);
Ví Dụ:
INSERT INTO TheLoai (matheloai, tentheloai)
VALUES (p_matheloai, p_tentheloai)
1.2. Update:
Mục đích: Cập nhật dữ liệu vào bảng
Cú Pháp:

UPDATE ten_bang
SET cot1 = giatri1, cot2 = giatri2, …, cotN = giatriN
WHERE [dieu_kien];
Ví dụ: UPDATE GiaoVien SET Luong = 3500 WHERE MAGV = 001
1.3. Delete:
Mục đích: Xóa dữ liệu trong bảng
Cú pháp:
DELETE FROM ten_bang [WHERE dieu_kien];
Ví dụ: DELETE GiaoVien WHERE MaGV = 002
1.4. Select:
Mục đích: Tên cột trong danh sách chọn
Cú pháp: SELECT giatri1, giatri2, …, giatriN FROM table name;
Ví dụ: SELECT * FROM KhachHang;
1.5. Store proceduce:
Store Procedure là một tập hợp một hay nhiều câu lệnh T-SQL thành một
nhóm đơn vị xử lý logic. Trong SQL Server ta có thể truyền tham số vào store


tuy nhiên nó khơng trả về giá trị cụ thể như function nhưng cho biết việc thực thi
thành công hay thất bại.
Ta chỉ tạo store 1 lần nhưng có thể gọi nó với số lần bất kỳ. Store
procedure có khả năng thực thi nhanh hơn là việc xử lý một đoạn lện T-SQL lớn,
lặp.
+ Cú Pháp:
Create procedure
As
Begin
<SQL Statement>
END;
VD: Tạo procedure thêm thủ thư vào bảng thủ thư bao gồm các thông tin:

MaThuThu, TenThuThu, NamSinh, GioiTinh, ChucVu, DiaChi
ALTER PROCEDURE [dbo].[ThuThu_Ins]
-- Add the parameters for the stored procedure here
@MaThuThu nvarchar(50),
@TenThuThu nvarchar(50),
@NamSinh date,
@GioiTinh nvarchar(50),
@ChucVu nvarchar(50),
@DiaChi nvarchar(50)
AS
BEGIN
insert

into

ThuThu

values(@MaThuThu,

@TenThuThu,

@NamSinh, @GioiTinh, @ChucVu, @DiaChi)
END
2. Ngôn ngữ lập trình C#
- Form
- Các Control (điều khiển cơ bản): Lable, Textbox, Combobox, Listbox,
Listview, Button, Radio button, Checkbox, DatagridView,…
- ADO.net, SqlConnection, SQLCommand, SQLDataAdapter, DataSet,
DataTable



CHƯƠNG 3: XÂY DỰNG PHẦN MỀM
1. Sơ đồ chức năng của phần mềm
2. Một số chức năng chính.
2.1. Quản Lý, Nhân Viên
a. Chức năng 1: Đăng Nhập
- Mô tả: Đăng nhập vào chương trình quản lý
- Giao diện:

- Code:
class KiemTraDocGia{
public int CheckLogin(string username, string password){
AccessData acc = new AccessData();
SqlDataReader reader = acc.ExecuteReader("SELECT MaDocGia,
MatKhau FROM DocGia");
while (reader.Read()){
if (reader[0].ToString() == username && reader[1].ToString() ==
password) {
return 1;
}
}
return 0;
}}
class KiemTraThuThu{


public int CheckLogin(string username, string password){
AccessData acc = new AccessData();
SqlDataReader reader = acc.ExecuteReader("SELECT MaThuThu,
MatKhau FROM ThuThu");

while (reader.Read()){
if (reader[0].ToString() == username && reader[1].ToString() ==
password) {
return 1;
}}
return 0;
}}
private void btQuanLy_Click(object sender, EventArgs e){
KiemTraThuThu dn = new KiemTraThuThu();
if (dn.CheckLogin(txtTaiKhoan.Text, txtMatKhau.Text) == 1){
Manager_QuanLy hd = new Manager_QuanLy();
MessageBox.Show("Đăng Nhập Thành Công","Thông Báo");
this.Hide();
hd.ShowDialog();
}
else{
lblThongBao.ForeColor = System.Drawing.Color.Red;
lblThongBao.Text = "Sai mã thủ thư hoặc mật khẩu. Vui lòng nhập lại
";
txtTaiKhoan.Clear();
txtMatKhau.Clear();
}}
private void btNguoiDung_Click(object sender, EventArgs e){
KiemTraDocGia dn = new KiemTraDocGia();
Manager_NguoiDung GDKH = new Manager_NguoiDung();
if (dn.CheckLogin(txtTaiKhoan.Text, txtMatKhau.Text) == 1){
MessageBox.Show("Đăng Nhập Thành Công","Thông Báo");
this.Hide();
GDKH.ShowDialog();
}

else
{
lblThongBao.ForeColor = System.Drawing.Color.Red;
lblThongBao.Text = "Sai mã độc giả hoặc mật khẩu. Vui lòng nhập lại
!!!";
txtTaiKhoan.Clear();
txtMatKhau.Clear();
}}
private void cbHienThiMatKhau_CheckedChanged(object sender,
EventArgs e)


{
if (cbHienThiMatKhau.Checked)
{
txtMatKhau.PasswordChar = (char)0;
}
else
{
txtMatKhau.PasswordChar = '*';
}
}
b. Chức năng 2: Giao diện chính của đối tượng Quản Lý
- Mơ tả: Giao diện chính của đối tượng Quản Lý giúp truy cập vào
các chức năng.
- Giao diện:

- Code:
private void lapHoaDonToolStripMenuItem_Click(object sender,
EventArgs e)

{
HoaDon hoaDon = new HoaDon();
hoaDon.Show();
}
private void thànhViênToolStripMenuItem_Click(object sender, EventArgs
e)
{


ThanhVien thanhVien = new ThanhVien();
thanhVien.Show();
}
private void phiếuMượnToolStripMenuItem_Click(object sender,
EventArgs e)
{
PhieuMuon phieuMuon = new PhieuMuon();
phieuMuon.Show();
}
private void sáchToolStripMenuItem_Click(object sender, EventArgs e)
{
QuanLySach quanLySach = new QuanLySach();
quanLySach.Show();
}
private void thốtToolStripMenuItem_Click(object sender, EventArgs e)
{
if (MessageBox.Show("Bạn có muốn thốt khơng?", "Cảnh Báo",
MessageBoxButtons.YesNo) == DialogResult.Yes)
Close();
}
private void phiếuTrảToolStripMenuItem_Click(object sender, EventArgs

e)
{
PhieuTra phieutra = new PhieuTra();
phieutra.Show();
}
private void độcGiảToolStripMenuItem_Click(object sender, EventArgs e)
{
DocGia docgia = new DocGia();
docgia.Show();
}
private void thốngKêToolStripMenuItem_Click(object sender, EventArgs
e)
{
ThongKeSach thongKe = new ThongKeSach();
thongKe.Show();
}
c. Chức năng 3: Quản Lý Độc Giả
- Mô tả: Người quản lí có thể đăng kí tài khoản cho độc giả và quản
lý thông tin của độc giả
- Giao Diện:


- Code:
private void Load_grvDocGia()
{
if (con.State != ConnectionState.Open)
con.Open();
SqlCommand cmd = new SqlCommand("select * from DocGia", con);
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;

cmd.Dispose();
con.Close();
DataTable tb = new DataTable();
da.Fill(tb);
grvDocGia.DataSource = tb;
grvDocGia.Refresh();
}
private void ThemTheDocGia_Load(object sender, EventArgs e)
{
Load_grvDocGia();
}


private void Check_maDocGiatrung(string p_MaDocGia, ref int p_kq)
{
if (con.State != ConnectionState.Open)
con.Open();
SqlCommand cmd = new SqlCommand("Check_trungmaDocGIa", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@MaDocGia", SqlDbType.NVarChar, 50).Value =
p_MaDocGia;
SqlParameter kq = new SqlParameter("@kq", SqlDbType.Int);
cmd.Parameters.Add(kq).Direction = ParameterDirection.Output;
cmd.ExecuteNonQuery();
p_kq = (int)kq.Value;
cmd.Dispose();
con.Close();
}
private void button1_Click(object sender, EventArgs e)
{

string p_MaDocGia = txtMaDocGia.Text.Trim();
string p_MatKhau = txtMatKhau.Text.Trim();
string p_TenDocGia = txtTenDocGia.Text.Trim();
DateTime p_NamSinh = dtNgaySinh.Value;
string p_gioitinh = "";
if (this.rdMale.Checked == true){
p_gioitinh = "Nam";
}
else if (this.rdFemale.Checked == true){
p_gioitinh = "Nữ";
}
else{
p_gioitinh = "Khác";


}
string p_DiaChi = txtDiaChi.Text.Trim();
string p_SoDienThoai = txtSoDienThoai.Text.Trim();
DateTime p_NgayMuaThe = dtMuaThe.Value;
DateTime p_NgayHetHan = dtHetHan.Value;
if (p_MaDocGia == ""){
txtMaDocGia.Focus();
txtMaDocGia.BackColor = Color.Pink;
MessageBox.Show("Mã Độc Giả không được rỗng");
}
else{
int p_kq = 0;
Check_maDocGiatrung(p_MaDocGia, ref p_kq);
if (p_kq == 1){
txtMaDocGia.Focus();

txtMaDocGia.BackColor = Color.Red;
MessageBox.Show("Mã đã tồn tại. Nhập mã khác!");
}
else{
if (con.State != ConnectionState.Open)
con.Open();
SqlCommand cmd = new SqlCommand("DocGia_Ins2", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@MaDocGia",SqlDbType.NVarChar,
50).Value = p_MaDocGia;
cmd.Parameters.Add("@MatKhau",SqlDbType.NVarChar,
50).Value = p_MatKhau;
cmd.Parameters.Add("@TenDocGia",SqlDbType.NVarChar,
50).Value = p_TenDocGia;
cmd.Parameters.Add("@NamSinh",SqlDbType.Date).Value=
p_NamSinh;


cmd.Parameters.Add("@GioiTinh",SqlDbType.NVarChar,
50).Value = p_gioitinh;
cmd.Parameters.Add("@DiaChi", SqlDbType.NVarChar, 50).Value
= p_DiaChi;
cmd.Parameters.Add("@SoDienThoai", SqlDbType.NVarChar,
50).Value = p_SoDienThoai;
cmd.Parameters.Add("@NgayMuaThe", SqlDbType.Date).Value =
p_NgayMuaThe;
cmd.Parameters.Add("@NgayHetHan", SqlDbType.Date).Value =
p_NgayHetHan;
cmd.ExecuteNonQuery();
cmd.Dispose();

con.Close();
Load_grvDocGia();
MessageBox.Show("Thêm mới thành công");
ClearTextBox();
}}
}
private void btThoat_Click(object sender, EventArgs e)
{
if (MessageBox.Show("Bạn có muốn thốt khơng?", "Cảnh Báo",
MessageBoxButtons.YesNo) == DialogResult.Yes)
Close();
}
private void Them_Click(object sender, EventArgs e)
{
string p_MaDocGia = txtMaDocGia.Text.Trim();
string p_MatKhau = txtMatKhau.Text.Trim();
string p_TenDocGia = txtTenDocGia.Text.Trim();
DateTime p_NamSinh = dtNgaySinh.Value;
string p_gioitinh = "";


if (this.rdMale.Checked == true){
p_gioitinh = "Nam";
}
else if (this.rdFemale.Checked == true){
p_gioitinh = "Nữ";
}
else{
p_gioitinh = "Khác";
}

string p_NgheNghiep = txtNgheNghiep.Text.Trim();
string p_DiaChi = txtDiaChi.Text.Trim();
string p_SoDienThoai = txtSoDienThoai.Text.Trim();
DateTime p_NgayMuaThe = dtMuaThe.Value;
DateTime p_NgayHetHan = dtHetHan.Value;
if (p_MaDocGia == ""){
txtMaDocGia.Focus();
txtMaDocGia.BackColor = Color.Pink;
MessageBox.Show("Mã Độc Giả không được rỗng","Thông báo");
}
else{
int p_kq = 0;
Check_maDocGiatrung(p_MaDocGia, ref p_kq);
if (p_kq == 1){
txtMaDocGia.Focus();
txtMaDocGia.BackColor = Color.Red;
MessageBox.Show("Mã đã tồn tại. Nhập mã khác!","Thông báo");
}
else{
if (con.State != ConnectionState.Open)
con.Open();
SqlCommand cmd = new SqlCommand("DocGia_Ins2", con);


cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@MaDocGia",SqlDbType.NVarChar,
50).Value =

p_MaDocGia;
cmd.Parameters.Add("@MatKhau",SqlDbType.NVarChar,


50).Value =

p_MatKhau;
cmd.Parameters.Add("@TenDocGia",SqlDbType.NVarChar,

50).Value =

p_TenDocGia;
cmd.Parameters.Add("@NamSinh",SqlDbType.Date).Value=

p_NamSinh;
cmd.Parameters.Add("@GioiTinh",SqlDbType.NVarChar,
50).Value =

p_gioitinh;
cmd.Parameters.Add("@NgheNghiep",SqlDbType.NVarChar,

50).Value = p_NgheNghiep;
cmd.Parameters.Add("@DiaChi", SqlDbType.NVarChar, 50).Value
=

p_DiaChi;
cmd.Parameters.Add("@SoDienThoai",SqlDbType.NVarChar,

50).Value = p_SoDienThoai;
cmd.Parameters.Add("@NgayMuaThe", SqlDbType.Date).Value =
p_NgayMuaThe;
cmd.Parameters.Add("@NgayHetHan", SqlDbType.Date).Value =
p_NgayHetHan;

cmd.ExecuteNonQuery();
cmd.Dispose();
con.Close();
Load_grvDocGia();
MessageBox.Show("Thêm mới thành công", "Thông báo ");
ClearTextBox();
}}}
private void Sua_Click(object sender, EventArgs e)
{
string p_MaDocGia = txtMaDocGia.Text.Trim();


string p_MatKhau = txtMatKhau.Text.Trim();
string p_TenDocGia = txtTenDocGia.Text.Trim();
DateTime p_NamSinh = dtNgaySinh.Value;
string p_gioitinh = "";
if (this.rdMale.Checked == true){
p_gioitinh = "Nam";
}
else if (this.rdFemale.Checked == true){
p_gioitinh = "Nữ";
}
else{
p_gioitinh = "Khác";
}
string p_NgheNghiep = txtNgheNghiep.Text.Trim();
string p_DiaChi = txtDiaChi.Text.Trim();
string p_SoDienThoai = txtSoDienThoai.Text.Trim();
DateTime p_NgayMuaThe = dtMuaThe.Value;
DateTime p_NgayHetHan = dtHetHan.Value;

if (con.State != ConnectionState.Open)
con.Open();
SqlCommand cmd = new SqlCommand("DocGia_Update", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@MaDocGia", SqlDbType.NVarChar, 50).Value =
p_MaDocGia;
cmd.Parameters.Add("@MatKhau", SqlDbType.NVarChar, 50).Value =
p_MatKhau;
cmd.Parameters.Add("@TenDocGia", SqlDbType.NVarChar, 50).Value
=

p_TenDocGia;
cmd.Parameters.Add("@NamSinh",SqlDbType.Date).Value =

p_NamSinh;


cmd.Parameters.Add("@GioiTinh", SqlDbType.NVarChar, 50).Value =
p_gioitinh;
cmd.Parameters.Add("@NgheNghiep",SqlDbType.NVarChar, 50).Value
= p_NgheNghiep;
cmd.Parameters.Add("@DiaChi", SqlDbType.NVarChar, 50).Value =
p_DiaChi;
cmd.Parameters.Add("@SoDienThoai",SqlDbType.NVarChar, 50).Value
= p_SoDienThoai;
cmd.Parameters.Add("@NgayMuaThe",SqlDbType.Date).Value =
p_NgayMuaThe;
cmd.Parameters.Add("@NgayHetHan",SqlDbType.Date).Value =
p_NgayHetHan;
cmd.ExecuteNonQuery();

cmd.Dispose();
con.Close();
Load_grvDocGia();
MessageBox.Show("Sửa thành công");
txtMaDocGia.Enabled = true;
}
private

void

grvDocGia_CellClick(object

sender,

DataGridViewCellEventArgs e){
int i = e.RowIndex;
txtMaDocGia.Text = grvDocGia.Rows[i].Cells[0].Value.ToString();
txtMatKhau.Text = grvDocGia.Rows[i].Cells[1].Value.ToString();
txtTenDocGia.Text = grvDocGia.Rows[i].Cells[2].Value.ToString();
dtNgaySinh.Text = grvDocGia.Rows[i].Cells[3].Value.ToString();
rdMale.Text = "Nam";
rdFemale.Text = "Nữ";
rdKhac.Text = "Khác";
if (grvDocGia.SelectedCells[0].Value.ToString() == "Nữ"){
rdFemale.Checked = true;


}
else if (grvDocGia.SelectedCells[0].Value.ToString() == "Nam"){
rdMale.Checked = true;

}
else{
rdKhac.Checked = true;
}
txtNgheNghiep.Text = grvDocGia.Rows[i].Cells[4].Value.ToString();
txtDiaChi.Text = grvDocGia.Rows[i].Cells[6].Value.ToString();
txtSoDienThoai.Text = grvDocGia.Rows[i].Cells[7].Value.ToString();
dtMuaThe.Text = grvDocGia.Rows[i].Cells[8].Value.ToString();
dtHetHan.Text = grvDocGia.Rows[i].Cells[9].Value.ToString();
txtMaDocGia.Enabled = false;
}
private void Xoa_Click(object sender, EventArgs e){
string p_MaDocGia = txtMaDocGia.Text.Trim();
if (con.State != ConnectionState.Open)
con.Open();
SqlCommand cmd = new SqlCommand("DocGia_Del", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@MaDocGia", SqlDbType.NVarChar, 50).Value =
p_MaDocGia;
cmd.ExecuteNonQuery();
cmd.Dispose();
con.Close();
Load_grvDocGia();
MessageBox.Show("Xóa thành cơng");
txtMaDocGia.Enabled = true;
}
private void btTimKiem_Click(object sender, EventArgs e){
string p_MaDocGia = txttimkiem_madocgia.Text.Trim();



if (con.State != ConnectionState.Open)
con.Open();
SqlCommand cmd = new SqlCommand("DocGia_Find", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@MaDocGia", SqlDbType.NVarChar, 50).Value =
p_MaDocGia;
cmd.ExecuteNonQuery();
cmd.Dispose();
con.Close();
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;
DataTable tb = new DataTable();
da.Fill(tb);
grvDocGia.DataSource = tb;
grvDocGia.Refresh();
}
d. Chức năng 4: Quản Lý Sách
- Mô tả: Quản lý thông tin sách (Số lượng, vị trí, Giá, …)
- Giao diện:


- Code:
private void Load_grvSach(){
if (con.State != ConnectionState.Open)
con.Open();
SqlCommand cmd = new SqlCommand("select * from Sach", con);
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;
cmd.Dispose();
con.Close();

DataTable tb = new DataTable();
da.Fill(tb);
grvSach.DataSource = tb;
grvSach.Refresh();
}
private void QuanLySach_Load(object sender, EventArgs e){
Load_grvSach();
}
private bool KtraDinhDanglaSo(string text){
int kq;
return int.TryParse(text, out kq);
}
private void Check_maSachtrung(string p_MaSach, ref int p_kq){
if (con.State != ConnectionState.Open)
con.Open();
SqlCommand cmd = new SqlCommand("Check_trungmaSach", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@MaSach", SqlDbType.NVarChar, 50).Value =
p_MaSach;
SqlParameter kq = new SqlParameter("@kq", SqlDbType.Int);
cmd.Parameters.Add(kq).Direction = ParameterDirection.Output;


cmd.ExecuteNonQuery();
p_kq = (int)kq.Value;
cmd.Dispose();
con.Close();
}
private void btThemSach_Click(object sender, EventArgs e){
string p_MaSach = txtMaSach.Text.Trim();

string p_TenSach = txtTenSach.Text.Trim();
string p_TacGia = txtTacGia.Text.Trim();
string p_NXB = txtNXB.Text.Trim();
string p_ChuyenMuc = txtChuyenMuc.Text.Trim();
string p_ViTri = txtViTri.Text.Trim();
int p_SoLuong = int.Parse(txtSoLuong.Text.Trim());
if (KtraDinhDanglaSo(txtGia.Text.Trim()) == false){
txtGia.Focus();
txtGia.BackColor = Color.Green;
MessageBox.Show("Hãy nhập số!");
}
else{
long p_Gia = long.Parse(txtGia.Text.Trim());
if (p_MaSach == ""){
txtMaSach.Focus();
txtMaSach.BackColor = Color.Pink;
MessageBox.Show("Mã Thủ Thư không được rỗng");
}
else{
int p_kq = 0;
Check_maSachtrung(p_MaSach, ref p_kq);
if (p_kq == 1){
txtMaSach.Focus();
txtMaSach.BackColor = Color.Red;


MessageBox.Show("Mã đã tồn tại. Nhập mã khác!");
}
else{
if (con.State != ConnectionState.Open)

con.Open();
SqlCommand cmd = new SqlCommand("Sach_Ins", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@MaSach",SqlDbType.NVarChar,
50).Value = p_MaSach;
cmd.Parameters.Add("@TenSach",SqlDbType.NVarChar,
50).Value = p_TenSach;
cmd.Parameters.Add("@TacGia",SqlDbType.NVarChar,
50).Value = p_TacGia;
cmd.Parameters.Add("@NXB",SqlDbType.NVarChar, 50).Value
= p_NXB;
cmd.Parameters.Add("@Gia", SqlDbType.BigInt).Value =
p_Gia;
cmd.Parameters.Add("@ChuyenMuc",SqlDbType.NVarChar,
50).Value = p_ChuyenMuc;
cmd.Parameters.Add("@ViTri",SqlDbType.NVarChar, 50).Value
= p_ViTri;
cmd.Parameters.Add("@SoLuong",SqlDbType.Int).Value =
p_SoLuong;
cmd.ExecuteNonQuery();
cmd.Dispose();
con.Close();
Load_grvSach();
MessageBox.Show("Thêm mới thành công","Thông Báo");
LamMoi();
}}}}
private void btSuaThongTin_Click(object sender, EventArgs e){



×