nỘi dung thỰc hÀnh -...

60
Bài tp thc hành Công nghphn mm Đại hc Nguyn Tt Thành Giảng viên ThS. Dương Thành Phết - http://www.thayphet.net Trang 1/60 NỘI DUNG THỰC HÀNH Ngôn ngữ: C#.NET Môi trường lập trình: Visual studio .NET 2005/2008/2010 Hệ quản trị CSDL: SQL Server 2005/2008 Lịch trình thực hành (30 tiết): Trong 6 tiết đầu giáo viên hướng dẫn sinh viên làm bài tập phần căn bản. Trong 18 tiết tiếp theo giáo viên hướng dẫn sinh viên làm từng bước xây dựng phần mềm quản lý thư viện (các phần tương tự sinh viên tự thực hiện). Phần bài tập về nhà, sinh viên tự thực hành ở nhà 6 tiết cuối cùng sinh viên nộp đề tài và giáo viên vấn đáp trực tiếp. Đánh giá: Nộp đồ án môn học (source code của phần mềm) + vấn đáp trực tiếp trên máy dựa trên các đề tài mà giáo viên lý thuyết đề nghị hoặc sinh viên tự đề xuất. Mi nhóm đăng ký 1 đề tài, slượng sinh viên trong mt nhóm: 2SV Yêu cầu: 1. Thiết kế dữ liệu: Tạo bảng, khóa, quan hệ. 2. Thiết kế giao diện - Màn hình chính + thực đơn - Màn hình đăng nhập, thay đổi qui định - Màn hình nhập (Danh mục, 1- Nhiều và Nhiều - nhiều) - Màn hình tra cứu 3. Kế t nối CSDL 4. Debug Chương trình. 5. Cài đặt các hàm xử lý a. Thêm, Xóa, Cập nhật và Lấy dữ liệu. b. Tính toán theo nghiệp vụ bài toán. 6. Tạo report (Crystal report) 7. Tạo help 8. Đóng gói chương trình. DANH SÁCH ĐỀ TÀI GỢI Ý *** 1. Phần mềm quản lý học sinh cấp 3. 2. Phần mềm quản lý nhà sách (bán sách). 3. Phần mềm quản lý khách sạn. 4. Phần mềm quản lý nhà hàng-bar.

Upload: doanphuc

Post on 06-Feb-2018

223 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: NỘI DUNG THỰC HÀNH - Thayphet.netthayphet.net/application/upload/products/BaitapthuchanhCNPM.pdf · Trong 6 tiết đầu giáo viên hướng dẫn sinh viên làm bài tập

Bài tập thực hành Công nghệ phần mềm – Đại học Nguyễn Tất Thành

Giảng viên ThS. Dương Thành Phết - http://www.thayphet.net Trang 1/60

NỘI DUNG THỰC HÀNH

Ngôn ngữ: C#.NET

Môi trường lập trình: Visual studio .NET 2005/2008/2010

Hệ quản trị CSDL: SQL Server 2005/2008

Lịch trình thực hành (30 tiết):

Trong 6 tiết đầu giáo viên hướng dẫn sinh viên làm bài tập phần căn bản.

Trong 18 tiết tiếp theo giáo viên hướng dẫn sinh viên làm từng bước xây dựng phần mềm

quản lý thư viện (các phần tương tự sinh viên tự thực hiện).

Phần bài tập về nhà, sinh viên tự thực hành ở nhà

6 tiết cuối cùng sinh viên nộp đề tài và giáo viên vấn đáp trực tiếp.

Đánh giá:

Nộp đồ án môn học (source code của phần mềm) + vấn đáp trực tiếp trên máy dựa trên các đề

tài mà giáo viên lý thuyết đề nghị hoặc sinh viên tự đề xuất.

Mỗi nhóm đăng ký 1 đề tài, số lượng sinh viên trong một nhóm: 2SV

Yêu cầu:

1. Thiết kế dữ liệu: Tạo bảng, khóa, quan hệ.

2. Thiết kế giao diện

- Màn hình chính + thực đơn

- Màn hình đăng nhập, thay đổi qui định

- Màn hình nhập (Danh mục, 1- Nhiều và Nhiều - nhiều)

- Màn hình tra cứu

3. Kế t nối CSDL

4. Debug Chương trình.

5. Cài đặt các hàm xử lý

a. Thêm, Xóa, Cập nhật và Lấy dữ liệu.

b. Tính toán theo nghiệp vụ bài toán.

6. Tạo report (Crystal report)

7. Tạo help

8. Đóng gói chương trình.

DANH SÁCH ĐỀ TÀI GỢI Ý

***

1. Phần mềm quản lý học sinh cấp 3.

2. Phần mềm quản lý nhà sách (bán sách).

3. Phần mềm quản lý khách sạn.

4. Phần mềm quản lý nhà hàng-bar.

Page 2: NỘI DUNG THỰC HÀNH - Thayphet.netthayphet.net/application/upload/products/BaitapthuchanhCNPM.pdf · Trong 6 tiết đầu giáo viên hướng dẫn sinh viên làm bài tập

Bài tập thực hành Công nghệ phần mềm – Đại học Nguyễn Tất Thành

Giảng viên ThS. Dương Thành Phết - http://www.thayphet.net Trang 2/60

5. Phần mềm quản lý phòng mạch tư.

6. Phần mềm quản lý sổ tiết kiệm.

7. Phần mềm quản lý giải vô địch bóng đá.

8. Phần mềm quản lý bán vé chuyến bay.

9. Phần mềm quản lý các đại lý.

10. Phần mềm quản lý Gaga ô tô.

11. Phần mềm quản lý Tiệc cưới.

12. Phần mềm quản lý thu tiền điện.

13. Phần mềm quản lý chuyến du lịch

14. Phần mềm quản lý tuy n sinh đại học.

15. Phần mềm quản lý trư ng mẫu giáo

16. Phần mềm quản lý nhân sự

17. Phần mềm quản lý bán hàng

18. Phần mềm quản gia

19. Phần mềm quản lý cổ đông

20. Phần mềm cây gia phả.

21. Phần mềm thi tr c nghiệm

22. Phần mềm quản lý trung tâm tin học ngoại ngữ

23. Phần mềm quản lý đào tạo trư ng TC chuyên nghiệp.

Ghi chú: Tất cả các phần mềm trên hiện đã có trên thị trư ng, một số cho download về dùng

thử. Sinh viên nên sử dụng google tìm kiếm download về tham khảo.

Page 3: NỘI DUNG THỰC HÀNH - Thayphet.netthayphet.net/application/upload/products/BaitapthuchanhCNPM.pdf · Trong 6 tiết đầu giáo viên hướng dẫn sinh viên làm bài tập

Bài tập thực hành Công nghệ phần mềm – Đại học Nguyễn Tất Thành

Giảng viên ThS. Dương Thành Phết - http://www.thayphet.net Trang 3/60

Phần 1. BÀI TẬP CƠ BẢN Bài tập 1. Viết chương trình theo yêu cầu sau:

Thực hiện các yêu cầu sau:

- Khi nhấn nút “Tính”, chương trình sẽ giải và biện luận phương trình bậc 2, và hiện thị kết quả

trong Textbox kết quả X1 hoặc X2.

- Khi nhấn nút “Bỏ qua” các Textbox sẽ được xóa tr ng, con trỏ sẽ chuy n về Textbox A.

- Khi nhấn nút “Thoát” chương trình sẽ kết thúc (có hỏi trước khi thoát).

- 2 Textbox X1, X2 dùng đ hiện thị kết quả ngư i dùng không được thao tác dữ liệu

- Có ki m tra giá trị nhập cho A, B, C là số nguyên.

Bài tập 2. Xây dựng chương trình thao tác với Listbox như sau :

Yêu cầu:

- Chỉ cho nhập số vào textbox Nhập số

- Khi nhập dữ liệu vào Textbox Nhập số và nhấn Enter(hoặc click vào Cập Nhật) thì số

mới nhập này được thêm vào Listbox đồng th i dữ liệu trong Textbox bị xóa và focus

được chuy n về Textbox

- Khi nhấn vào các phím chức năng, yêu cầu sẽ được thực hiện trên listbox

Page 4: NỘI DUNG THỰC HÀNH - Thayphet.netthayphet.net/application/upload/products/BaitapthuchanhCNPM.pdf · Trong 6 tiết đầu giáo viên hướng dẫn sinh viên làm bài tập

Bài tập thực hành Công nghệ phần mềm – Đại học Nguyễn Tất Thành

Giảng viên ThS. Dương Thành Phết - http://www.thayphet.net Trang 4/60

Bài tập 3. Xây dựng chương trình nhập danh sách sinh viên theo yêu cầu:

Yêu cầu:

- Khi nhập dữ liệu vào Textbox Họ và tên và nhấn Enter(hoặc click vào Cập Nhật) thì dữ

liệu mới nhập này được thêm vào Listbox đồng th i dữ liệu trong Textbox bị xóa và focus

được chuy n về Textbox

- Nút > dùng đ di chuy n các mục(còn gọi là item) được chọn từ listbox trái qua listbox

phải và ngược lại cho <

- Nút >> dùng đ di chuy n tất cả các mục(k cả không được chọn) từ listbox trái qua

listbox phải và ngược lại cho <<

- Nút Xóa dùng đ xóa nhưng item được chọn trên textbox trái

Bài tập 4. Xây dựng chương trình thao tác với mảng

Yêu cầu:

- Chỉ cho nhập số nguyên vào textbox Nhập số nguyên

- Khi nhập dữ liệu vào Textbox Nhập số nguyên và nhấn Enter(hoặc click vào Nhập) thì

số mới nhập này được thêm vào Textbox nhập mảng đồng th i dữ liệu trong Textbox

Nhập số nguyên bị xóa và focus được chuy n về Textbox nhập số nguyên.

- 2 Textbox đ hi n thị mảng và kết quả, không được nhập giá trị trực tiếp

Page 5: NỘI DUNG THỰC HÀNH - Thayphet.netthayphet.net/application/upload/products/BaitapthuchanhCNPM.pdf · Trong 6 tiết đầu giáo viên hướng dẫn sinh viên làm bài tập

Bài tập thực hành Công nghệ phần mềm – Đại học Nguyễn Tất Thành

Giảng viên ThS. Dương Thành Phết - http://www.thayphet.net Trang 5/60

Bài tập 5. Xây dựng chương trình xử lý chuỗi sau:

Yêu cầu:

- Khi vừa mở form chỉ có nút Thoát là sử dụng được, Textbox Nhập dữ liệu nhận focus

- Khi Textbox Nhập dữ liệu vừa được nhập thì các nút sáng lên, đồng th i nếu xóa hết dữ

liệu trong textbox nhập thì các nút cũng m đi ngoại trừ nút Thoát=> viết trong sự kiện

change của Textbox Nhập dữ liệu.

- Khi các nút chức năng được nhấn thì kết quả sẽ hi n thị bên textbox Kết quả

Hướng dẫn:

Tìm kiếm : Instr(vị trí b t đầu tìm, chuỗi chứa, chuỗi cần tìm, phân biệt hoa thư ng hay không)

Thay thế : Replace(chuỗi chứa, chuỗi tìm, chuỗi thay thế, vị trí b t đầu, số lần tìm và thay thế,

phân biệt hoa thư ng) : Trả về chuổi mới đã được thay thế

Page 6: NỘI DUNG THỰC HÀNH - Thayphet.netthayphet.net/application/upload/products/BaitapthuchanhCNPM.pdf · Trong 6 tiết đầu giáo viên hướng dẫn sinh viên làm bài tập

Bài tập thực hành Công nghệ phần mềm – Đại học Nguyễn Tất Thành

Giảng viên ThS. Dương Thành Phết - http://www.thayphet.net Trang 6/60

Bài tập 6. Thao tác với listview

STT Tên Control Loại Tên hàm xử lý

1 lsvNhanVien ListView lsvNhanVien_SelectedIndexChanged

2 txtHoTen TextBox

3 dtpNgaySinh DateTimePicker

4 txtDiaChi TextBox

5 txtDienThoai TextBox

6 cboBangCap ComboBox cboBangCap.SelectedValue.ToString()

7 btnThem Button btnThem_Click

8 btnXoa Button btnXoa_Click

9 btnCapNhat Button btnCapNhat_Click

10 btnSua Button btnSua_Click

11 btnHuy Button btnHuy_Click

12 btnThoat Form btnThoat_Click

13 frmNhanVien Form frmNhanVien_Load

Yêu cầu :

Nhập thông tin vào phần “Thông tin chi tiết”, khi nhấn các nút lệnh sẽ thực hiện như sau:

1. Nút Thêm: Thêm các thông tin vào listview

Chú ý : ki m tra thông tin họ tên nhân viên không được rỗng, nếu rỗng thì không cho thêm

2. Nút Xóa: Xóa 1 dòng trên listview (chú ý nếu ngư i dùng chưa chọn 1 dòng trên

listview thì yêu cầu ngư i dùng phải chọn rồi mới xóa)

Page 7: NỘI DUNG THỰC HÀNH - Thayphet.netthayphet.net/application/upload/products/BaitapthuchanhCNPM.pdf · Trong 6 tiết đầu giáo viên hướng dẫn sinh viên làm bài tập

Bài tập thực hành Công nghệ phần mềm – Đại học Nguyễn Tất Thành

Giảng viên ThS. Dương Thành Phết - http://www.thayphet.net Trang 7/60

3. Nút Sửa: Sửa 1 dòng trên listview (cập nhật dữ liệu trên các Thông tin chi tiết vào

listview)

4. Thoát: Thoát khỏi chương trình (có hỏi trước khi thoát)

5. Khi chọn 1 dòng trên listview thì nội dung của dòng được chọn sẽ được th hiện trên

các ô “Thông tin chi tiết”

Chú ý : Ki m tra thông tin họ tên nhân viên không được rỗng, nếu rỗng thì không cho thêm, sửa.

Hướng dẫn :

- Tạo mới Listview

- Bấm vào đ hiện ra menu tùy chỉnh của listview, chọn Edit Columns

- Thêm các tiêu đề cột cho listview

1. Thiết lập các tham số cho listview

a. FullRowSelect = true;//cho phép chọn 1 dòng

b. View = View.Details;//cho phép hi n thị thông tin chi tiết, bao gồm các tiêu đề

c. Columns[“Tên Cột”].AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent); //cho

phép tự động resize cột khi nội dung dài

2. Thêm vào 1 dòng cho listview : sử dụng ListViewItem

ListViewItem lvi = lsvNhanVien.Items.Add(txtHoten.Text);

lvi.SubItems.Add(dtpNgaySinh.Value.ToShortDateString());

lvi.SubItems.Add(txtDienThoai.Text);

lvi.SubItems.Add(txtDiaChi.Text);

3. Chọn 1 dòng trên listview : sử dụng sự kiện lsvNhanVien_SelectedIndexChanged

Chú ý : dùng 1 biến index đ lưu lại dòng đang chọn

Page 8: NỘI DUNG THỰC HÀNH - Thayphet.netthayphet.net/application/upload/products/BaitapthuchanhCNPM.pdf · Trong 6 tiết đầu giáo viên hướng dẫn sinh viên làm bài tập

Bài tập thực hành Công nghệ phần mềm – Đại học Nguyễn Tất Thành

Giảng viên ThS. Dương Thành Phết - http://www.thayphet.net Trang 8/60

if (lsvNhanVien.SelectedItems.Count > 0)

//ki m tra listview đã có dòng được chọn hay chưa?

{

txtHoten.Text = lsvNhanVien.SelectedItems[0].SubItems[0].Text;

dtpNgaySinh.Text = lsvNhanVien.SelectedItems[0].SubItems[1].Text;

txtDienThoai.Text = lsvNhanVien.SelectedItems[0].SubItems[2].Text;

txtDiaChi.Text = lsvNhanVien.SelectedItems[0].SubItems[3].Text;

}

4. Nhấn nút xóa : Dùng phương thức remove hoặc removeAt của listview

if (lsvNhanVien.SelectedItems.Count > 0)

//ki m tra listview đã có dòng được chọn hay chưa?

{

lsvNhanVien.Items.Remove(lsvNhanVien.SelectedItems[0]);

}

5. Nhấn nút sửa: Cập nhật lại thông tin cho listview

if (lsvNhanVien.SelectedItems.Count > 0)

{

lsvNhanVien.SelectedItems[0].SubItems[0].Text = txtHoten.Text;

lsvNhanVien.SelectedItems[0].SubItems[1].Text =

dtpNgaySinh.Value.ToShortDateString();

lsvNhanVien.SelectedItems[0].SubItems[2].Text = txtDienThoai.Text;

lsvNhanVien.SelectedItems[0].SubItems[3].Text = txtDiaChi.Text;

}

Page 9: NỘI DUNG THỰC HÀNH - Thayphet.netthayphet.net/application/upload/products/BaitapthuchanhCNPM.pdf · Trong 6 tiết đầu giáo viên hướng dẫn sinh viên làm bài tập

Bài tập thực hành Công nghệ phần mềm – Đại học Nguyễn Tất Thành

Giảng viên ThS. Dương Thành Phết - http://www.thayphet.net Trang 9/60

Phần 2. LẬP TRÌNH CƠ SỞ DỮ LIỆU

Bài tập 1. Làm việc với hệ quản trị CSDL Microsoft SQL Server 2005 /2008

Lưu ý:

Đ có th đăng nhập vào SQL Server bằng 2 cách Windows Authentication và SQL Server

Authentication khi cài đặt phải chọn chế độ Mixed Mode.

1. Tạo Database QLThuvien có sơ đồ như sau :

Page 10: NỘI DUNG THỰC HÀNH - Thayphet.netthayphet.net/application/upload/products/BaitapthuchanhCNPM.pdf · Trong 6 tiết đầu giáo viên hướng dẫn sinh viên làm bài tập

Bài tập thực hành Công nghệ phần mềm – Đại học Nguyễn Tất Thành

Giảng viên ThS. Dương Thành Phết - http://www.thayphet.net Trang 10/60

Lệnh SQL để tạo Database CREATE DATABASE QLTHUVIEN

USE QLTHUVIEN

GO

--Tạo bảng Tham số

CREATE TABLE [THAMSO](

[TenThamSo] [nvarchar](40) NOT NULL,

[GiaTri] [int] NULL,

CONSTRAINT [PK_THAMSO] PRIMARY KEY (TenThamSo)

)

GO

--Tạo bảng Bằng cấp

CREATE TABLE [BANGCAP](

[MaBangCap] int Identity(1,1),

[TenBangCap] [nvarchar](40) NULL,

CONSTRAINT [PK_BANGCAP] PRIMARY KEY (MaBangCap)

)

GO

--Tạo bảng Nhân viên

CREATE TABLE [NHANVIEN](

[MaNhanVien] int Identity(1,1),

[HoTenNhanVien] [nvarchar](50) NULL,

[NgaySinh] [datetime] NULL,

[DiaChi] [nvarchar](50) NULL,

[DienThoai] [nvarchar](15) NULL,

[MaBangCap] [int] NULL,

CONSTRAINT [PK_NHANVIEN] PRIMARY KEY (MaNhanVien)

)

GO

--Tạo bảng Độc giả

CREATE TABLE [DOCGIA](

[MaDocGia] int Identity(1,1),

[HoTenDocGia] [nvarchar](40) NULL,

[NgaySinh] [datetime] NULL,

[DiaChi] [nvarchar](50) NULL,

[Email] [nvarchar](30) NULL,

[NgayLapThe] [datetime] NULL,

[NgayHetHan] [datetime] NULL,

[TienNo] [float] NULL,

CONSTRAINT [PK_DOCGIA_1] PRIMARY KEY (MaDocGia)

)

GO

--Tạo bảng Phiếu thu tiền

CREATE TABLE [PHIEUTHUTIEN](

[MaPhieuThuTien] int Identity(1,1),

[SoTienNo] [float] NULL,

[SoTienThu] [float] NULL,

[MaDocGia] [int] NULL,

[MaNhanVien] [int] NULL,

CONSTRAINT [PK_PHIEUTHUTIEN] PRIMARY KEY (MaPhieuThuTien)

)

GO

--Tạo bảng Sách

CREATE TABLE [SACH](

[MaSach] int Identity(1,1),

[TenSach] [nvarchar](40) NULL,

[TacGia] [nvarchar](30) NULL,

[NamXuatBan] [int] NULL,

[NhaXuatBan] [nvarchar](40) NULL,

[TriGia] [float] NULL,

[NgayNhap] [datetime] NULL,

CONSTRAINT [PK_SACH] PRIMARY KEY (MaSach)

Page 11: NỘI DUNG THỰC HÀNH - Thayphet.netthayphet.net/application/upload/products/BaitapthuchanhCNPM.pdf · Trong 6 tiết đầu giáo viên hướng dẫn sinh viên làm bài tập

Bài tập thực hành Công nghệ phần mềm – Đại học Nguyễn Tất Thành

Giảng viên ThS. Dương Thành Phết - http://www.thayphet.net Trang 11/60

)

GO

--Tạo bảng Phiếu mượn sách

CREATE TABLE [PHIEUMUONSACH](

[MaPhieuMuon] int Identity(1,1),

[NgayMuon] [datetime] NOT NULL,

[MaDocGia] [int] NULL,

CONSTRAINT [PK_PHIEUMUONSACH] PRIMARY KEY (MaPhieuMuon)

)

--Tạo bảng Chi tiết phiếu mượn

CREATE TABLE [CHITIETPHIEUMUON](

[MaSach] [int] NOT NULL,

[MaPhieuMuon] [int] NOT NULL,

CONSTRAINT [PK_CHITIETPHIEUMUON] PRIMARY KEY (MaSach,MaPhieuMuon)

)

GO

--Tạo khoá ngoại

GO

ALTER TABLE [NHANVIEN] WITH NOCHECK ADD CONSTRAINT [FK_NHANVIEN_BANGCAP] FOREIGN

KEY([MaBangCap])

REFERENCES [BANGCAP] ([MaBangCap])

ON UPDATE CASCADE

ON DELETE CASCADE

GO

ALTER TABLE [NHANVIEN] CHECK CONSTRAINT [FK_NHANVIEN_BANGCAP]

GO

ALTER TABLE [PHIEUTHUTIEN] WITH CHECK ADD CONSTRAINT [FK_PHIEUTHUTIEN_DOCGIA]

FOREIGN KEY([MaDocGia])

REFERENCES [DOCGIA] ([MaDocGia])

GO

ALTER TABLE [PHIEUTHUTIEN] CHECK CONSTRAINT [FK_PHIEUTHUTIEN_DOCGIA]

GO

ALTER TABLE [PHIEUTHUTIEN] WITH CHECK ADD CONSTRAINT [FK_PHIEUTHUTIEN_NHANVIEN]

FOREIGN KEY([MaNhanVien])

REFERENCES [NHANVIEN] ([MaNhanVien])

ON UPDATE CASCADE

ON DELETE CASCADE

GO

ALTER TABLE [PHIEUTHUTIEN] CHECK CONSTRAINT [FK_PHIEUTHUTIEN_NHANVIEN]

GO

ALTER TABLE [PHIEUMUONSACH] WITH CHECK ADD CONSTRAINT [FK_PHIEUMUONSACH_DOCGIA]

FOREIGN KEY([MaDocGia])

REFERENCES [DOCGIA] ([MaDocGia])

ON UPDATE CASCADE

ON DELETE CASCADE

GO

ALTER TABLE [PHIEUMUONSACH] CHECK CONSTRAINT [FK_PHIEUMUONSACH_DOCGIA]

GO

ALTER TABLE [CHITIETPHIEUMUON] WITH CHECK ADD CONSTRAINT

[FK_CHITIETPHIEUMUON_PHIEUMUONSACH] FOREIGN KEY([MaPhieuMuon])

REFERENCES [PHIEUMUONSACH] ([MaPhieuMuon])

GO

ALTER TABLE [CHITIETPHIEUMUON] CHECK CONSTRAINT

[FK_CHITIETPHIEUMUON_PHIEUMUONSACH]

GO

ALTER TABLE [CHITIETPHIEUMUON] WITH CHECK ADD CONSTRAINT

[FK_CHITIETPHIEUMUON_SACH] FOREIGN KEY([MaSach])

REFERENCES [SACH] ([MaSach])

ON UPDATE CASCADE

ON DELETE CASCADE

GO

ALTER TABLE [CHITIETPHIEUMUON] CHECK CONSTRAINT [FK_CHITIETPHIEUMUON_SACH]

Page 12: NỘI DUNG THỰC HÀNH - Thayphet.netthayphet.net/application/upload/products/BaitapthuchanhCNPM.pdf · Trong 6 tiết đầu giáo viên hướng dẫn sinh viên làm bài tập

Bài tập thực hành Công nghệ phần mềm – Đại học Nguyễn Tất Thành

Giảng viên ThS. Dương Thành Phết - http://www.thayphet.net Trang 12/60

2. Nhập dữ liệu cho các bảng: Thực hiện câu lệnh Insert

USE ThuVien

GO ---Nhap lieu

insert into BANGCAP values(N'TIẾN SĨ')

insert into BANGCAP values(N'THẠC SĨ')

insert into BANGCAP values(N'ĐẠI HỌC')

insert into BANGCAP values(N'CAO ĐẲNG')

insert into BANGCAP values(N'TRUNG CẤP')

insert into NHANVIEN values(N'PHẠM MINH VŨ','01/24/1980',N'163/30 Thành Thái

F.14 Q.10 TPHCM','0905646162',1)

insert into NHANVIEN values(N'NGUYỄN MINH THÀNH','04/05/1983',N'41/4 CALMETTE

Q1 TPHCM','0908373612',2)

insert into NHANVIEN values(N'NGUYỄN HÀ MY','04/13/1985',N'178 NAM KỲ KHỞI

NGHĨA Q4 TPHCM','0908783274',3)

insert into DOCGIA values(N'NGUYỄN HOÀNG MINH','02/23/1990',N'41/4 CALMETTE

Q1 TPHCM',N'[email protected]','12/30/2000','12/30/2012',0)

insert into DOCGIA values(N'TRẦN VĂN CHÂU','08/29/1992',N'TRẦN HƯNG ĐẠO Q1

TPHCM',N'[email protected]','11/22/2001','11/22/2013',0)

insert into DOCGIA values(N'NGUYỄN HOÀNG NAM','02/21/1980',N'4 TRẦN ĐÌNH HƯNG

Q1 TPHCM',N'[email protected]','12/22/2001','12/30/2012',150000)

insert into DOCGIA values(N'TRẦN THANH PHÚC','08/19/1993',N'TRƯƠNG ĐỊNH Qtb

TPHCM',N'[email protected]','08/09/2001','11/22/2013',50000)

insert into SACH values(N'NHAP MON CNPM',N'PHẠM ĐÀO MINH VŨ',2007,N'NXB THỐNG

KÊ',70000,'12/18/2008')

insert into SACH values(N'KỸ THUẬT LẬP TRÌNH',N'TRẦN MINH THÁI',2005,N'NXB

GIÁO DỤC',50000,'02/12/2006')

insert into SACH values(N'CÔNG NGHỆ WEB',N'PHẠM ĐÀO MINH VŨ',2009,N'NXB

TRẺ',90000,'12/01/2009')

Chú ý: Chúng ta nên sử dụng lệnh đ tạo Database và nhập liệu vì đây là phương pháp hiệu quả và

thuận lợi nhất.

Page 13: NỘI DUNG THỰC HÀNH - Thayphet.netthayphet.net/application/upload/products/BaitapthuchanhCNPM.pdf · Trong 6 tiết đầu giáo viên hướng dẫn sinh viên làm bài tập

Bài tập thực hành Công nghệ phần mềm – Đại học Nguyễn Tất Thành

Giảng viên ThS. Dương Thành Phết - http://www.thayphet.net Trang 13/60

3. Các thao tác Quản trị CSDL.

a. Import CSDL từ CSDL trong file Access:

Tạo database mới (rỗng).

Right click lên database ThuVien chọn Task\Import Data…

- Chọn Data Source, File name và click Next.

- Chọn Destination, Server name (nếu bạn dùng máy local có th đánh vào dấu „.‟) Connect bằng

Windows hay SQL Server Authentication là tuỳ bạn và click Next.

Page 14: NỘI DUNG THỰC HÀNH - Thayphet.netthayphet.net/application/upload/products/BaitapthuchanhCNPM.pdf · Trong 6 tiết đầu giáo viên hướng dẫn sinh viên làm bài tập

Bài tập thực hành Công nghệ phần mềm – Đại học Nguyễn Tất Thành

Giảng viên ThS. Dương Thành Phết - http://www.thayphet.net Trang 14/60

- Chọn Copy data from…click Next.

- Chọn Select All…và click Next.

- Click Next, Finish.

- Kết quả như sau:

Page 15: NỘI DUNG THỰC HÀNH - Thayphet.netthayphet.net/application/upload/products/BaitapthuchanhCNPM.pdf · Trong 6 tiết đầu giáo viên hướng dẫn sinh viên làm bài tập

Bài tập thực hành Công nghệ phần mềm – Đại học Nguyễn Tất Thành

Giảng viên ThS. Dương Thành Phết - http://www.thayphet.net Trang 15/60

b. Backup & Restore Database:

Việc mang 1 Database từ máy này sang máy khác rất thư ng xuyên xảy ra (ví dụ: chép bài từ

trư ng về nhà và chép bài từ nhà lên trư ng,…). Có 2 cách đ làm việc này:

Cách 1: Attach database:

- Chép 2 file :

C:\Program files\Microsoft SQL Server\MSSQL.1\Data\QLThuVien.mdf

C:\Program files\Microsoft SQL Server\MSSQL.1\Data\QLThuVien_log.ldf

- Attach 2 file trên vào SQL Server khác (máy khác).

Cách 2: Backup & Restore

- Backup:

Right click lên database QLThuVien cần backup, chọn Task\Backup…

SQL Server sẽ mặc định backup database thư viện vào file ThuVien.bak theo đư ng

dẫn mặc định sau:

C:\Program files\Microsoft SQL Server\MSSQL.1\Backup\QLThuVien.bak

Nhấn Ok đ backup, sau đó chép file ThuVien.bak sang máy mới (SQL Server

khác) đ Restore.

Trong trư ng hợp muốn back up với 1 đư ng dẫn khác thì remove đư ng dẫn trên

và Add lại đư ng dẫn mới muốn back up đến.

Page 16: NỘI DUNG THỰC HÀNH - Thayphet.netthayphet.net/application/upload/products/BaitapthuchanhCNPM.pdf · Trong 6 tiết đầu giáo viên hướng dẫn sinh viên làm bài tập

Bài tập thực hành Công nghệ phần mềm – Đại học Nguyễn Tất Thành

Giảng viên ThS. Dương Thành Phết - http://www.thayphet.net Trang 16/60

- Restore:

Đầu tiên tạo database QLThuVien trong SQL Management Studio

Right click lên database vừa tạo, chọn Task\Restore\Database

Chọn From device chỉ đến file QLThuVien.bak

Page 17: NỘI DUNG THỰC HÀNH - Thayphet.netthayphet.net/application/upload/products/BaitapthuchanhCNPM.pdf · Trong 6 tiết đầu giáo viên hướng dẫn sinh viên làm bài tập

Bài tập thực hành Công nghệ phần mềm – Đại học Nguyễn Tất Thành

Giảng viên ThS. Dương Thành Phết - http://www.thayphet.net Trang 17/60

Page 18: NỘI DUNG THỰC HÀNH - Thayphet.netthayphet.net/application/upload/products/BaitapthuchanhCNPM.pdf · Trong 6 tiết đầu giáo viên hướng dẫn sinh viên làm bài tập

Bài tập thực hành Công nghệ phần mềm – Đại học Nguyễn Tất Thành

Giảng viên ThS. Dương Thành Phết - http://www.thayphet.net Trang 18/60

Page 19: NỘI DUNG THỰC HÀNH - Thayphet.netthayphet.net/application/upload/products/BaitapthuchanhCNPM.pdf · Trong 6 tiết đầu giáo viên hướng dẫn sinh viên làm bài tập

Bài tập thực hành Công nghệ phần mềm – Đại học Nguyễn Tất Thành

Giảng viên ThS. Dương Thành Phết - http://www.thayphet.net Trang 19/60

Bài tập 2. Giao tiếp cơ sở dữ liệu với mô hình 1 lớp

Đ load thông tin của nhân viên từ table NHANVIEN cũng như là thêm, sửa, xóa,.. thì ta cần

thực hiện như sau :

public partial class frmNhanVien : Form

{

SqlConnection sqlConn; //khai báo biến connection

SqlDataAdapter da; //khai báo biến dataAdapter

DataSet ds = new DataSet(); //khai báo 1 dataset

public string srvName = "PC\\SQLEX"; //chỉ định tên server

public string dbName = "QLTHUVIEN"; //chỉ định tên CSDL

void KetnoiCSDL() //thực hiện kết nối bằng chuỗi kết nối

{

string connStr = "Data source=" + srvName + ";database=" + dbName + ";

Integrated Security = True";

sqlConn = new SqlConnection(connStr);

}

DataTable layDanhSachNhanVien() /lấy danh sách nhân viên

{

string sql = "Select * from NhanVien";

da = new SqlDataAdapter(sql, sqlConn);

da.Fill(ds);

return ds.Tables[0];

}

void LoadListview()

{

lsvNhanVien.FullRowSelect = true; //cho phép chọn 1 dòng

lsvNhanVien.View = View.Details; //cho phép hi n thị thông tin chi tiết, bao gồm các tiêu đề

DataTable dt = layDanhSachNhanVien();

for (int i = 0; i < dt.Rows.Count; i++)

{

Page 20: NỘI DUNG THỰC HÀNH - Thayphet.netthayphet.net/application/upload/products/BaitapthuchanhCNPM.pdf · Trong 6 tiết đầu giáo viên hướng dẫn sinh viên làm bài tập

Bài tập thực hành Công nghệ phần mềm – Đại học Nguyễn Tất Thành

Giảng viên ThS. Dương Thành Phết - http://www.thayphet.net Trang 20/60

ListViewItem lvi = lsvNhanVien.Items.Add(dt.Rows[i]["Hotennhanvien"].ToString());

//dòng thứ i, tên cột là nhân viên

lvi.SubItems.Add(dt.Rows[i][2].ToString()); //dùng chỉ số cột : dòng thứ i,cột thứ 1

lvi.SubItems.Add(dt.Rows[i][4].ToString());

lvi.SubItems.Add(dt.Rows[i][3].ToString());

}

}

private void btnThem_Click(object sender, EventArgs e)

{

string sql = string.Format("insert into NhanVien

values({0},{1},{2},{3},{4},{5})", txtHoten.Text, dtpNgaySinh.Value.ToShortDateString,

txtDiaChi.Text, txtDienThoai.Text, 1);

SqlCommand cmd = new SqlCommand(sql, sqlConn);

cmd.ExecuteNonQuery();

}

….

Qua đây, chúng ta thấy rằng khi dùng mô hình 1 lớp kết nối CSDL thì không có sự

phân loại trong khi cài đặt. Code xử lý lưu trữ sql, code xử lý nghiệp vụ và code xử lý th hiện

nằm chung với nhau, làm chương trình rất khó quản lý.

Đ kh c phục các nhược đi m trên, chúng ta chuy n sang mô hình 3 lớp

Bài tập 3. Giao tiếp cơ sở dữ liệu với mô hình 3 lớp

Ta xây dựng 3 lớp như sau cho NHANVIEN:

1. Lớp thao tác CSDL : Database.cs

2. Lớp xử lý nghiệp vụ : NhanVien.cs

3. Lớp xử lý giao diện : frmNhanvien.cs

Bước 1: Xây dựng lớp thao tác CSDL Database.cs

Chức năng: Lớp Database đảm nhiệm việc giao tiếp với cơ sở dữ liệu cho toàn ứng dụng. Tất

cả việc tương tác với CSDL dữ liệu diễn ra ở bất cứ nơi nào trong ứng dụng đều được thực

hiện thông qua lớp này.

Mục đích: Sở dĩ chúng ta phải xây dựng lớp này là nhằm mang lại tính dễ bảo trì cũng như

tính tiến hóa cho hệ thống. Nếu sau này cần thay đổi môi trư ng ứng dụng (sang Oracle,

Access, Db2 ...) thì chúng ta chỉ việc chỉnh sửa lớp Database này mà không cần quan tâm đến

phần còn lại của ứng dụng.

Lớp Database gồm có các thành phần sau:

Thu c tính Ý ngh a

sqlconn Thuộc lớp SqlConnection

Phư ng thức Ý ngh a

Database Hàm khởi tạo (Constructor)

Execute Thực thi một câu lệnh truy vấn và trả về kết quả là

một DataTable. Dùng cho các câu lệnh Select ...

ExecuteNonQuery Thực thi một câu lệnh không quan tâm đến kết quả trả

về. Dùng cho các câu lệnh Insert, Delete, Update ...

Page 21: NỘI DUNG THỰC HÀNH - Thayphet.netthayphet.net/application/upload/products/BaitapthuchanhCNPM.pdf · Trong 6 tiết đầu giáo viên hướng dẫn sinh viên làm bài tập

Bài tập thực hành Công nghệ phần mềm – Đại học Nguyễn Tất Thành

Giảng viên ThS. Dương Thành Phết - http://www.thayphet.net Trang 21/60

- Right-Click project ThuVien, chọn Add Class…

- Nhập vào tên lớp là Database.cs và click Add.

- Viết code cho Database.cs như sau:

using System;

using System.Collections.Generic;

using System.Text;

using System.Data.SqlClient; //SqlConnection,...

using System.Data; //DataSet, DataTable,...

namespace ThuVien

{

class Database

{

//Thuộc tính

SqlConnection sqlconn;

DataSet ds;

SqlDataAdapter da;

//Contructor khởi tạo

public Database(string svrName, string dbName, bool intergratedMode, string usrName, string pwd)

{

Page 22: NỘI DUNG THỰC HÀNH - Thayphet.netthayphet.net/application/upload/products/BaitapthuchanhCNPM.pdf · Trong 6 tiết đầu giáo viên hướng dẫn sinh viên làm bài tập

Bài tập thực hành Công nghệ phần mềm – Đại học Nguyễn Tất Thành

Giảng viên ThS. Dương Thành Phết - http://www.thayphet.net Trang 22/60

string connStr;

if (intergratedMode == true)

{

//Đăng nhập SQL Server sử dụng Windows Authentication Mode.

connStr = "server=" + svrName + "; database=" + dbName + "; Integrated Security = True";

}

else

{

//Đăng nhập SQL Server sử dụng SQL Server Authentication Mode.

connStr = "server=" + svrName + "; uid=" + usrName + ";

pwd=" + pwd + " ;database=" + dbName;

/*Câu lệnh dùng đ thiết lập kết nối đến SQL Server là “ server=tên_svr;

database = tên_db;Integrated Security = True” hay “ server=tên_svr;

database = tên_db; uid = tên_đăng_nhập;pwd = mật_khẩu;database = tên_db*/

}

sqlconn = new SqlConnection(connStr);

}

public DataTable Execute(string strQuery)

{

//Câu lệnh này tạo mới một đối tượng SqlDataAdapter và

//cung cấp cho nó câu truy vấn cùng với kết nối hiện hành

da = new SqlDataAdapter(strQuery, sqlconn);

//DataSet đại diện cho một danh sách các DataTable

//(mỗi DataTable là 1 bảng dữ liệu)

ds = new DataSet();

//Dùng SqlDataAdapter đã tạo ra ở trên thực thi câu lệnh truy vấn đã cung cấp,

//và đưa kết quả trả về và ds

da.Fill(ds);

//Chúng ta chỉ lấy bảng đầu tiên

return ds.Tables[0];

}

public void ExecuteNonQuery(string strquery)

{

//SqlCommand là đối tượng đảm nhận việc thực hiện các câu lệnh truy vấn

SqlCommand sqlcom = new SqlCommand(strquery, sqlconn);

sqlconn.Open(); //Mở kết nối

sqlcom.ExecuteNonQuery(); //Thực hiện câu lệnh truy vấn đã cung cấp ở trên

sqlconn.Close(); //Đóng kết nối

}

public void Update(string strQuery, DataTable table)

{

//Cập nhật 1 Datatable xuống CSDL

da = new SqlDataAdapter(strQuery, sqlconn);

SqlCommandBuilder sqlcb = new SqlCommandBuilder(da);

da.Update(table);

}

}

}

Bước 2 : Xây dựng lớp xử lý nghiệp vụ cho Nhân viên: Nhanvien.cs

using System;

using System.Collections.Generic;

using System.Text;

using System.Data.SqlClient;

using System.Data;

Page 23: NỘI DUNG THỰC HÀNH - Thayphet.netthayphet.net/application/upload/products/BaitapthuchanhCNPM.pdf · Trong 6 tiết đầu giáo viên hướng dẫn sinh viên làm bài tập

Bài tập thực hành Công nghệ phần mềm – Đại học Nguyễn Tất Thành

Giảng viên ThS. Dương Thành Phết - http://www.thayphet.net Trang 23/60

namespace QLThuVien

{

class NhanVien

{

Database db;

public NhanVien()

{

db = new Database(frmMDI.srvName, frmMDI.dbName,

frmMDI.IntergratedMode, frmMDI.userName, frmMDI.passWord);

}

//Lấy danh sách tất cả nhân viên

public DataTable LayDSNhanVien()

{//Trả về thông tin nhân viên và tên bằng cấp của nhân viên đó

return db.Execute("Select Manhanvien,Hotennhanvien,ngaysinh, diachi,dienthoai,tenbangcap

from NhanVien n,bangcap b where n.MaBangCap=b.MaBangCap");

}

//Lấy danh sách bằng cấp->nạp vào combobox

public DataTable LayDSBangCap()

{

return db.Execute("select * from BangCap");

}

//Thêm 1 nhân viên mới

public void ThemNhanVien(string ten, string ngaysinh, string diachi, string dienthoai, string index_bc)

{

string sql = string.Format("Insert Into NhanVien Values(N'{0}','{1}',N'{2}','{3}',{4})",

ten,ngaysinh,diachi,dienthoai,index_bc);

db.ExecuteNonQuery(sql);

}

//Xóa 1 nhân viên

public void XoaNhanVien(string index_nv)

{

string sql = "Delete from NhanVien where MaNhanVien = " + index_nv;

db.ExecuteNonQuery(sql);

}

//Cập nhật nhân viên

public void CapNhatNhanVien(string index_nv, string hoten,

string ngaysinh, string diachi, string dienthoai, string index_bc)

{

//Chuẩn bị câu lẹnh truy vấn

string str = string.Format("Update NHANVIEN set HoTenNhanVien = N'{0}',

NgaySinh ='{1}',diachi = N'{2}', dienthoai = '{3}', MaBangCap = {4}

where MaNhanVien = {5}",hoten,ngaysinh,diachi,dienthoai,index_bc, index_nv);

db.ExecuteNonQuery(str);

}

}

}

Page 24: NỘI DUNG THỰC HÀNH - Thayphet.netthayphet.net/application/upload/products/BaitapthuchanhCNPM.pdf · Trong 6 tiết đầu giáo viên hướng dẫn sinh viên làm bài tập

Bài tập thực hành Công nghệ phần mềm – Đại học Nguyễn Tất Thành

Giảng viên ThS. Dương Thành Phết - http://www.thayphet.net Trang 24/60

Bước 3: Xây dựng lớp xử lý giao diện cho frmNhanVien.cs

Thiết kế giao diện như sau, đặt tên là frmNhanVien

Xử lý Code cho frmNhanVien:

namespace QLThuVien

{

public partial class frmNhanVien : Form

{

NhanVien nv; //lớp xử lý nghiệp vụ nhân viên

DataTable dt;

bool themmoi = true; //=true là thêm mới, =false là cập nhật

public frmNhanVien()

{

InitializeComponent();

nv = new NhanVien();

dt = new DataTable();

}

private void frmNhanVien_Load(object sender, EventArgs e)

{

HienThiDanhSachNV();

LoadDSBangCap();

setButton(true);

}

//thiết lập các nút trên form

public void setButton(bool value)

{

btnThem.Enabled = value;

btnXoa.Enabled = value;

btnSua.Enabled = value;

btnLuu.Enabled = !value;

Page 25: NỘI DUNG THỰC HÀNH - Thayphet.netthayphet.net/application/upload/products/BaitapthuchanhCNPM.pdf · Trong 6 tiết đầu giáo viên hướng dẫn sinh viên làm bài tập

Bài tập thực hành Công nghệ phần mềm – Đại học Nguyễn Tất Thành

Giảng viên ThS. Dương Thành Phết - http://www.thayphet.net Trang 25/60

btnHuy.Enabled = !value;

btnThoat.Enabled = value;

}

//Xóa dữ liệu trên form

void clearForm()

{

txtHoten.Text = "";

txtDiaChi.Text = "";

dtpNgaySinh.Value = DateTime.Now;

txtDienThoai.Text = "";

cboBangCap.SelectedIndex = 0;

}

//Nạp danh sách bằng cấp vào combobox cboBangCap

public void LoadDSBangCap()

{

DataTable dt_bc = nv.LayDSBangCap();

//Việc lấy dữ liệu được ủy nhiệm cho biến thuộc lớp xử lý (

//lớp NhanVien) chứ không trực tiếp thực hiện ở đây

//Nạp dữ liệu lên combobox

cboBangCap.DataSource = dt_bc;

cboBangCap.DisplayMember = "TenBangCap";

cboBangCap.ValueMember = "MaBangCap";

if (cboBangCap.Items.Count > 0)

cboBangCap.SelectedIndex = 0;

}

//Hi n thị danh sách nhân viên lên Listview

public void HienThiDanhSachNV()

{

dt = nv.LayDSNhanVien();

lsvNhanVien.Items.Clear();

lsvNhanVien.View = View.Details;

for (int i = 0; i < dt.Rows.Count; i++)

{

ListViewItem lvi;

lvi = lsvNhanVien.Items.Add(dt.Rows[i]["MaNhanVien"].ToString());

lvi.SubItems.Add(dt.Rows[i]["Hotennhanvien"].ToString());

lvi.SubItems.Add(dt.Rows[i][2].ToString());

lvi.SubItems.Add(dt.Rows[i][3].ToString());

lvi.SubItems.Add(dt.Rows[i][4].ToString());

lvi.SubItems.Add(dt.Rows[i][5].ToString());

}

}

//khi nhấn vào nút thêm

private void btnThem_Click(object sender, EventArgs e)

{

themmoi = true;

setButton(false);

txtHoten.Focus();

}

//Sự kiện khi chọn 1 dòng trên Listview thì nội dung của dòng đó

//sẽ được nạp lên FORM

private void lsvNhanVien_SelectedIndexChanged(object sender, EventArgs e)

{

if (lsvNhanVien.SelectedIndices.Count > 0)

{

txtHoten.Text = lsvNhanVien.SelectedItems[0].SubItems[1].Text;

dtpNgaySinh.Value =

Page 26: NỘI DUNG THỰC HÀNH - Thayphet.netthayphet.net/application/upload/products/BaitapthuchanhCNPM.pdf · Trong 6 tiết đầu giáo viên hướng dẫn sinh viên làm bài tập

Bài tập thực hành Công nghệ phần mềm – Đại học Nguyễn Tất Thành

Giảng viên ThS. Dương Thành Phết - http://www.thayphet.net Trang 26/60

DateTime.Parse(lsvNhanVien.SelectedItems[0].SubItems[2].Text);

txtDiaChi.Text = lsvNhanVien.SelectedItems[0].SubItems[3].Text;

txtDienThoai.Text = lsvNhanVien.SelectedItems[0].SubItems[4].Text;

cboBangCap.SelectedIndex =

cboBangCap.FindString(lsvNhanVien.SelectedItems[0].SubItems[5].Text);

}

}

//Xóa 1 dòng trên listview

private void btnXoa_Click(object sender, EventArgs e)

{

if (lsvNhanVien.SelectedIndices.Count > 0)

{

DialogResult dr = MessageBox.Show("Bạn có ch c xóa không?",

"Xóa bằng cấp", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

if (dr == DialogResult.Yes)

{

nv.XoaNhanVien(lsvNhanVien.SelectedItems[0].SubItems[0].Text);

lsvNhanVien.Items.RemoveAt(lsvNhanVien.SelectedIndices[0]);

clearForm();

}

}

else

MessageBox.Show("Bạn phải chọn mẩu tin cần xóa");

}

//Sửa 1 dòng

private void btnSua_Click(object sender, EventArgs e)

{

if (lsvNhanVien.SelectedIndices.Count > 0)

{

themmoi = false;

setButton(false);

}

else

MessageBox.Show("Bạn phải chọn mẫu tin cập nhật", "Sửa mẫu tin");

}

//Khi thực hiện lưu thông tin xuống CSDL

private void btnLuu_Click(object sender, EventArgs e)

{

string ngay = String.Format("{0:MM/dd/yyyy}", dtpNgaySinh.Value);

//Định dạng ngày tương ứng với trong CSDL SQLserver

if (themmoi)

{

nv.ThemNhanVien(txtHoten.Text, ngay, txtDiaChi.Text,

txtDienThoai.Text, cboBangCap.SelectedValue.ToString());

MessageBox.Show("Thêm mới thành công");

}

else

{

nv.CapNhatNhanVien(lsvNhanVien.SelectedItems[0].SubItems[0].Text,

txtHoten.Text, ngay, txtDiaChi.Text, txtDienThoai.Text,

cboBangCap.SelectedValue.ToString());

MessageBox.Show("Cập nhật thành công");

}

HienThiDanhSachNV();

clearForm();

}

//Cancel các thao tác

Page 27: NỘI DUNG THỰC HÀNH - Thayphet.netthayphet.net/application/upload/products/BaitapthuchanhCNPM.pdf · Trong 6 tiết đầu giáo viên hướng dẫn sinh viên làm bài tập

Bài tập thực hành Công nghệ phần mềm – Đại học Nguyễn Tất Thành

Giảng viên ThS. Dương Thành Phết - http://www.thayphet.net Trang 27/60

private void btnHuy_Click(object sender, EventArgs e)

{

setButton(true);

}

private void btnThoat_Click(object sender, EventArgs e)

{

Close();

}

}

Chạy và ki m tra chương trình.

Qua đây, ta nhận thấy rằng việc xử lý đã được phân loại rõ ràng các nhiệm vụ xử lý giúp ta dễ dàng

quản lý chương trình hơn.

Làm tư ng tự cho các màn hình danh mục hác :

TÊN DANH MỤC TÊN LỚP CHỨC NĂNG GHI CHÚ

Bằng cấp BangCap.cs Xử lý nghiệp vụ

frmBangCap.cs Xử lý giao diện

Lập thẻ đ c giả Docgia.cs Xử lý nghiệp vụ

frmDocGia.cs Xử lý giao diện

Tiếp nhận sách Sach.cs Xử lý nghiệp vụ

frmSach.cs Xử lý giao diện

M t cách hác để nhập bảng danh mục

Như đã nói ở trên, muốn viết cho 1 form đ xử lý thêm, xóa, sửa cho 1 bảng, chúng ta phải tạo 2

file : file cơ sở và file form. Tuy nhiên, có 1 cách dùng khác là sử dụng 1 control có chức năng liên kết

dữ liệu 1 cách tự động với 1 bảng trong Database, đó là DataGrid

- Dùng DataGrid đ nhập trực tiếp (nhập theo dạng bảng)

- Sử dụng DataAdapter đ update dữ liệu từ bảng xuống CSDL

- Ví dụ thao tác trên bảng Độc Giả :

- Viết code cho form: frmDocGia.cs

Page 28: NỘI DUNG THỰC HÀNH - Thayphet.netthayphet.net/application/upload/products/BaitapthuchanhCNPM.pdf · Trong 6 tiết đầu giáo viên hướng dẫn sinh viên làm bài tập

Bài tập thực hành Công nghệ phần mềm – Đại học Nguyễn Tất Thành

Giảng viên ThS. Dương Thành Phết - http://www.thayphet.net Trang 28/60

namespace QLThuVien

{

public partial class frmDocGia : Form

{

DocGia dg = new DocGia();

Database db = new Database(frmMDI.srvName, frmMDI.dbName, frmMDI.IntergratedMode, "", "");

DataTable dt = new DataTable();

public frmDocGia()

{

InitializeComponent();

}

private void frmDocGia_Load(object sender, EventArgs e)

{

dt = dg.LayDSDocGia();

dgvDocGia.DataSource = dt; //gán dữ liệu cho datagrid

//Thiết lập độ rộng các cột

dgvDocGia.Columns[0].Visible=false;

dgvDocGia.Columns[1].Width = 180;

dgvDocGia.Columns[3].Width = 200;

dgvDocGia.Columns[4].Width = 200;

}

private void btnLuu_Click(object sender, EventArgs e)

{

try

{

db.Update("Select * from DocGia", dt);

MessageBox.Show("Cập nhật thành công");

}

catch (DataException de)

{

MessageBox.Show("Có lỗi khi cập nhật \n" + de.ToString(), "lỗi",

MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Error);

}

}

private void btnThoat_Click(object sender, EventArgs e)

{

Close();

}

}

Các danh mục còn lại làm tư ng tự …

Page 29: NỘI DUNG THỰC HÀNH - Thayphet.netthayphet.net/application/upload/products/BaitapthuchanhCNPM.pdf · Trong 6 tiết đầu giáo viên hướng dẫn sinh viên làm bài tập

Bài tập thực hành Công nghệ phần mềm – Đại học Nguyễn Tất Thành

Giảng viên ThS. Dương Thành Phết - http://www.thayphet.net Trang 29/60

Bài tập 4. Xây dựng màn hình chính

1. Tạo màn hình chính:

Có th thực hiện theo 2 cách sau:

- Từ menu, chọn project Add Windows Form…

- Right-Click project thư viện (trong Solution Explorer), chọn Add Windows Form.

Chọn Templates: MDIParent và đặt tên form là frmMDI.cs

2. Thiết ế giao diện cho màn hình chính:

Kéo thả control Panel vào frmMDI.

Page 30: NỘI DUNG THỰC HÀNH - Thayphet.netthayphet.net/application/upload/products/BaitapthuchanhCNPM.pdf · Trong 6 tiết đầu giáo viên hướng dẫn sinh viên làm bài tập

Bài tập thực hành Công nghệ phần mềm – Đại học Nguyễn Tất Thành

Giảng viên ThS. Dương Thành Phết - http://www.thayphet.net Trang 30/60

Kéo thả control Panel vào frmMDI và đặt tên là panelMenu

Chọn Left cho thuộc tính Dock của panelMenu.

Kết quả

Kéo thả control GroupBox vào frmMDI và đặt tên (Name) là groupBoxDanhMuc và text là Danh

mục.

Page 31: NỘI DUNG THỰC HÀNH - Thayphet.netthayphet.net/application/upload/products/BaitapthuchanhCNPM.pdf · Trong 6 tiết đầu giáo viên hướng dẫn sinh viên làm bài tập

Bài tập thực hành Công nghệ phần mềm – Đại học Nguyễn Tất Thành

Giảng viên ThS. Dương Thành Phết - http://www.thayphet.net Trang 31/60

Kéo thả control Button vào groupBoxDanhMuc và đặt tên (Name) là btnBangCap và text là Bằng

cấp.

Tùy chỉnh cho Menu:

Chỉ cần double click lên các menu đ thay đổi thông tin, hoặc gở bỏ menustrip cũ , kéo thả vào 1

menuStrip mới là được.

Về thanh công cụ nằm phía dưới thì tự chọn

Làm tương tự cho các groupbox và các button còn lại như sau:

Page 32: NỘI DUNG THỰC HÀNH - Thayphet.netthayphet.net/application/upload/products/BaitapthuchanhCNPM.pdf · Trong 6 tiết đầu giáo viên hướng dẫn sinh viên làm bài tập

Bài tập thực hành Công nghệ phần mềm – Đại học Nguyễn Tất Thành

Giảng viên ThS. Dương Thành Phết - http://www.thayphet.net Trang 32/60

Như vậy ta đã có được phần thiết cho màn hình chính. Bước tiếp theo, ta sẽ viết hàm xử lý sự kiện

cho các nút chức năng. Đ viết hàm xử lý cho sự kiện click của Button, ta chỉ cần double click lên

button, hay chọn sự kiện trong danh sách sự kiện:

Thêm đoạn code sau vào phần hai báo thu c tính c a frmMDI:

public partial class frmMDI : Form

{

public static string svrName = "PC\\SQLEXPRESS "; //Khai báo tên sqlserver

public static string dbName = "QLThuVien"; // khai báo tên database

public static bool intergratedMode = true; // chế độ bảo mật

public static string userName = ""; //khai báo khi intergratedMode=false

public static string passWord = "";

...

Từ frmMDI (form chính), muốn gọi đến các form con, ta dùng phương thức Show(). Ví dụ khi ta

muốn gọi đến Form frmNhanVien đ hi n thị:

private void btnTiepNhanNV_Click(object sender, EventArgs e)

{

frmNhanVien frm = new frmNhanVien();

frm.MdiParent = this;

frm.Show();

}

Bài tập 5. Xây dựng các màn hình quản lý

Trong phần mềm QLTHUVIEN, nghiệp vụ cho mượn sách là 1 dạng nghiệp vụ quản lý, chúng

ta sẽ thực hiện thao tác tạo Phiếu mượn và chi tiết phiếu mượn:

Mục đích: Thao tác viết code cho bảng n-n (được phân tách thành 2 bảng 1-n)

Thực hiện: Đ thực hiện, cần thực hiện viết code các file như sau :

- Lớp xử lý nghiệp vụ bao gồm:

Phieumuon.cs: Dùng đ xử lý cho lớp phiếu mượn

Chitietphieumuon.cs: Dùng đ xứ lý cho lớp chi tiết phiếu mượn

Sach.cs: Dùng đ xử lý cho lớp Sach

Docgia.cs: Dùng đ xử lý cho lớp Docgia

- Lớp xử lý giao diện form

frmChoMuonSach.cs (phieumuon)

frmChiTietPhieuMuon.cs

Lớp xử lý nghiệp vụ :

Phieumuon.cs

class PhieuMuon

{

Database db;

DataTable dt_pm;

Page 33: NỘI DUNG THỰC HÀNH - Thayphet.netthayphet.net/application/upload/products/BaitapthuchanhCNPM.pdf · Trong 6 tiết đầu giáo viên hướng dẫn sinh viên làm bài tập

Bài tập thực hành Công nghệ phần mềm – Đại học Nguyễn Tất Thành

Giảng viên ThS. Dương Thành Phết - http://www.thayphet.net Trang 33/60

public PhieuMuon()

{

db = new Database(frmMDI.srvName, frmMDI.dbName,

frmMDI.IntergratedMode,frmMDI.userName,frmMDI.passWord);

}

public DataTable LayDSPhieuMuon()

{

dt_pm = db.Execute("Select MaPhieuMuon, PMS.MaDocGia, DG.HoTenDocGia, NgayMuon

from PHIEUMUONSACH PMS, DOCGIA DG where PMS.MaDocGia=

DG.MaDocGia Order By MaPhieuMuon");

return dt_pm;

}

public void ThemPM(string madocgia,string ngaymuon)

{

string sql = string.Format("INSERT INTO PHIEUMUONSACH

VALUES('{0}',{1})",ngaymuon,madocgia);

db.ExecuteNonQuery(sql);

}

public void XoaPM(string index)

{

String sql = "Delete from PHIEUMUONSACH where MaPhieuMuon = " + index;

db.ExecuteNonQuery(sql);

}

public void CapNhatPM(string index, string ngaymuon, string madocgia)

{

string sql = string.Format("Update PHIEUMUONSACH set ngaymuon='{0}',madocgia={1}

where MaPhieuMuon = {2}",ngaymuon,madocgia,index);

db.ExecuteNonQuery(sql);

}

}

Sach.cs

class Sach

{

Database db;

public Sach()

{

db = new Database(frmMDI.srvName, frmMDI.dbName,

frmMDI.IntergratedMode,frmMDI.userName,frmMDI.passWord);

}

public DataTable LayDSSach()

{

return db.Execute("Select * from SACH");

}

public DataTable LayDSSachTheoDG(string madg)

{

return db.Execute("Select * from SACH s, PHIEUMUONSACH pm, CHITIETPHIEUMUON

ct where s.masach=ct.masach and ct.maphieumuon=pm.maphieumuon and madocgia="+madg);

}

}

Page 34: NỘI DUNG THỰC HÀNH - Thayphet.netthayphet.net/application/upload/products/BaitapthuchanhCNPM.pdf · Trong 6 tiết đầu giáo viên hướng dẫn sinh viên làm bài tập

Bài tập thực hành Công nghệ phần mềm – Đại học Nguyễn Tất Thành

Giảng viên ThS. Dương Thành Phết - http://www.thayphet.net Trang 34/60

Chitietphieumuon.cs

class ChiTietPhieuMuon

{

Database db;

public ChiTietPhieuMuon()

{

db = new Database(frmMDI.srvName, frmMDI.dbName,

frmMDI.IntergratedMode,frmMDI.userName,frmMDI.passWord);

}

public DataTable LayDSChiTietPhieuMuon()

{

return db.Execute("Select * from ChiTietPhieuMuon Order By MaPhieuMuon");

}

public DataTable LayDSChiTietPhieuMuon(int MaPM)

{

return db.Execute(string.Format("Select * from ChiTietPhieuMuon where

maphieumuon = {1} Order By MaPhieuMuon",MaPM));

}

public void ThemCTPM(string MaSach, string MaPM)

{

string sql = string.Format("INSERT INTO CHITIETPHIEUMUON

VALUES({0},{1})",MaSach,MaPM);

db.ExecuteNonQuery(sql);

}

public void XoaCTPM(string MaSach, string MaPM)

{

String sql = string.Format("Delete from CHITIETPHIEUMUON where Masach={0}

and MaPhieuMuon = {1}",MaSach,MaPM);

db.ExecuteNonQuery(sql);

}

}

Docgia.cs

class DocGia

{

Database db;

public DocGia()

{

db = new Database(frmMDI.srvName, frmMDI.dbName,

rmMDI.IntergratedMode,frmMDI.userName,frmMDI.passWord);

}

public DataTable LayDSDocGia()

{

return db.Execute("Select * from DOCGIA");

}

//Tạo 1 phương thức đ lấy danh sách độc giả theo câu lệnh SQL từ bên ngoài

public DataTable LayDSDocGia(string sql)

{

return db.Execute(sql);

}

}

Page 35: NỘI DUNG THỰC HÀNH - Thayphet.netthayphet.net/application/upload/products/BaitapthuchanhCNPM.pdf · Trong 6 tiết đầu giáo viên hướng dẫn sinh viên làm bài tập

Bài tập thực hành Công nghệ phần mềm – Đại học Nguyễn Tất Thành

Giảng viên ThS. Dương Thành Phết - http://www.thayphet.net Trang 35/60

Lớp xử lý giao diện form:

- Giao diện form cho mượn sách (frmChoMuonSach) :

STT Tên Control Loại Tiêu đề

1. gbPhieuMuon Groupbox Phiếu mượn

2. lsvPhieuMuon ListView

3. gbDanhsachdocgia Groupbox Danh sách độc giả

4. cboDocGia Combobox

5. lblNgayMuon Label “ Ngày mượn

6. dtNgayMuon DateTimePicker

7. btnCTPhieuMuon Button Chi tiết phiếu mượn

8. btnThem Button Thêm

9. btnXoa Button Xoá

10. btnCapNhat Button Cập nhật

11. btnSua Button Sửa

- Viết code cho frmChoMuonSach.cs (phiếu mượn) như sau: nghiệp vụ truyền tham số giữa

các form thông qua phương thức khởi tạo

public partial class frmChoMuonSach : Form

{

PhieuMuon pm;

DocGia dg;

DataTable dt;

//khai báo biến đ truyền qua form frmchitietphieumuon

string mapm;

string madg;

Page 36: NỘI DUNG THỰC HÀNH - Thayphet.netthayphet.net/application/upload/products/BaitapthuchanhCNPM.pdf · Trong 6 tiết đầu giáo viên hướng dẫn sinh viên làm bài tập

Bài tập thực hành Công nghệ phần mềm – Đại học Nguyễn Tất Thành

Giảng viên ThS. Dương Thành Phết - http://www.thayphet.net Trang 36/60

string tendg;

bool isAdded = true;

public frmChoMuonSach()

{

InitializeComponent();

pm = new PhieuMuon();

dt = new DataTable();

dg = new DocGia();

}

private void frmChoMuonSach_Load(object sender, EventArgs e)

{

HienThiDanhSach();

LayDSDocGia();

}

//thiết lập các nút trên form

public void setButton(bool value)

{

btnThem.Enabled = value;

btnXoa.Enabled = value;

btnSua.Enabled = value;

btnLuu.Enabled = !value;

btnHuy.Enabled = !value;

btnCTPM.Enabled = value;

btnThoat.Enabled = value;

}

public void HienThiDanhSach()

{

dt.Rows.Clear();

dt = pm.LayDSPhieuMuon();

lsvPhieuMuon.Items.Clear();

lsvPhieuMuon.View = View.Details;

for (int i = 0; i < dt.Rows.Count; i++)

{

ListViewItem lvi;

lvi = lsvPhieuMuon.Items.Add(dt.Rows[i][0].ToString());

lvi.SubItems.Add(dt.Rows[i]["HoTenDocGia"].ToString());

lvi.SubItems.Add(String.Format("{0:MM/dd/yyyy}",dt.Rows[i]["NgayMuon"].ToString()));

}

}

public void LayDSDocGia()

{

DataTable dt_dg = dg.LayDSDocGia();

cboHoTen.DataSource = dt_dg;

cboHoTen.DisplayMember = "HoTenDocGia";

cboHoTen.ValueMember = "MaDocGia";

if (cboHoTen.Items.Count > 0)

cboHoTen.SelectedIndex = 0;

}

private void btnThem_Click(object sender, EventArgs e)

{

isAdded = true;

setButton(false);

}

private void lsvPhieuMuon_SelectedIndexChanged(object sender, EventArgs e)

{

if (lsvPhieuMuon.SelectedIndices.Count > 0)

Page 37: NỘI DUNG THỰC HÀNH - Thayphet.netthayphet.net/application/upload/products/BaitapthuchanhCNPM.pdf · Trong 6 tiết đầu giáo viên hướng dẫn sinh viên làm bài tập

Bài tập thực hành Công nghệ phần mềm – Đại học Nguyễn Tất Thành

Giảng viên ThS. Dương Thành Phết - http://www.thayphet.net Trang 37/60

{

cboHoTen.SelectedIndex = cboHoTen.FindString(lsvPhieuMuon.SelectedItems[0].SubItems[1].Text);

dtpNgayMuon.Value = DateTime.Parse(lsvPhieuMuon.SelectedItems[0].SubItems[2].Text);

}

}

private void btnCTPM_Click(object sender, EventArgs e)

{

if (lsvPhieuMuon.SelectedIndices.Count > 0)

{

//Lấy thông tin về Mã độc giả (madg), Mã phiếu mượn

//(mapm) và tên độc giả (tendg)

madg = cboHoTen.SelectedValue.ToString();

mapm = lsvPhieuMuon.SelectedItems[0].Text;

tendg = lsvPhieuMuon.SelectedItems[0].SubItems[1].Text;

//và truyền qua form ChitietPhieuMuon

frmCTPhieuMuon frm = new frmCTPhieuMuon(mapm,madg,tendg);

frm.Show();

}

else

MessageBox.Show("Bạn phải chọn một phiếu mượn đ nhập chi tiết");

}

private void btnXoa_Click(object sender, EventArgs e)

{

if (lsvPhieuMuon.SelectedIndices.Count > 0)

{

DialogResult dr = MessageBox.Show("Bạn có ch c xóa không?",

"Xóa bằng cấp", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

if (dr == DialogResult.Yes)

{

pm.XoaPM(lsvPhieuMuon.SelectedItems[0].SubItems[0].Text);

lsvPhieuMuon.Items.RemoveAt(lsvPhieuMuon.SelectedIndices[0]);

}

}

else

MessageBox.Show("Bạn phải chọn mẩu tin cần xóa");

}

private void btnSua_Click(object sender, EventArgs e)

{

if (lsvPhieuMuon.SelectedIndices.Count > 0)

{

isAdded = false;

setButton(false);

}

else

MessageBox.Show("Bạn phải chọn mẫu tin cập nhật", "Sửa mẫu tin");

}

Page 38: NỘI DUNG THỰC HÀNH - Thayphet.netthayphet.net/application/upload/products/BaitapthuchanhCNPM.pdf · Trong 6 tiết đầu giáo viên hướng dẫn sinh viên làm bài tập

Bài tập thực hành Công nghệ phần mềm – Đại học Nguyễn Tất Thành

Giảng viên ThS. Dương Thành Phết - http://www.thayphet.net Trang 38/60

private void btnLuu_Click(object sender, EventArgs e)

{

if (cboHoTen.SelectedIndex < 0)

{

MessageBox.Show("Bạn hãy nhập thông tin họ tên", "Thiếu thông tin");

cboHoTen.Focus();

}

else

{

string ngaymuon = String.Format("{0:MM/dd/yyyy}", dtpNgayMuon.Value);

string madg = cboHoTen.SelectedValue.ToString();

try

{

if (isAdded) //là thêm mới

pm.ThemPM(cboHoTen.SelectedValue.ToString(), ngaymuon);

else // là cập nhật

{

string mapm = lsvPhieuMuon.SelectedItems[0].SubItems[0].Text;

pm.CapNhatPM(mapm, ngaymuon, madg);

}

HienThiDanhSach();

setButton(true);

MessageBox.Show("Thành công");

}

catch(DataException de)

{

MessageBox.Show("Có lỗi khi lưu : " + de.ToString());

}

}

}

private void btnHuy_Click(object sender, EventArgs e)

{

setButton(true);

}

private void btnThoat_Click(object sender, EventArgs e)

{

Close();

}

private void btnThemDG_Click(object sender, EventArgs e)

{

frmDocGia frm = new frmDocGia();

frm.Show();

}

}

Page 39: NỘI DUNG THỰC HÀNH - Thayphet.netthayphet.net/application/upload/products/BaitapthuchanhCNPM.pdf · Trong 6 tiết đầu giáo viên hướng dẫn sinh viên làm bài tập

Bài tập thực hành Công nghệ phần mềm – Đại học Nguyễn Tất Thành

Giảng viên ThS. Dương Thành Phết - http://www.thayphet.net Trang 39/60

Giao diện Form ChiTietPhieuMuon (frmChiTietPhieuMuon) như sau :

STT Tên Control Loại Tên hàm xử lý

1 lsvSachNguon ListView

lsvSachChon ListView

2 lblMaPM label Hi n thị Mã Phiếu mượn

3 lblTenDG label Hi n thị tên Độc Giả

4 btnChon Button btnChon_Click

5 btnTra Button btnTra_Click

6 btnHuyCT Button btnHuyCT_Click

8 frmCTPhieuMuon Form frmCTPhieuMuon_Load

- Viết code cho form frmChitietphieumuon.cs như sau:

namespace QLThuVien

{

public partial class frmCTPhieuMuon : Form

{

public string mapm;

public string madg;

public string tendg;

DataTable dt_s; // sách có trong thư viện

DataTable dt_schon; // sách cho độc giả mượn

ChiTietPhieuMuon ctpm;

Sach sach;

public frmCTPhieuMuon(string MAPM, string MADG, string TENDG)

{

Page 40: NỘI DUNG THỰC HÀNH - Thayphet.netthayphet.net/application/upload/products/BaitapthuchanhCNPM.pdf · Trong 6 tiết đầu giáo viên hướng dẫn sinh viên làm bài tập

Bài tập thực hành Công nghệ phần mềm – Đại học Nguyễn Tất Thành

Giảng viên ThS. Dương Thành Phết - http://www.thayphet.net Trang 40/60

InitializeComponent();

ctpm = new ChiTietPhieuMuon();

dt_s = new DataTable();

dt_schon = new DataTable();

sach = new Sach();

//nhận tham số từ bên Form PHIEUMUON truyền qua

mapm = MAPM;

madg = MADG;

tendg = TENDG;

}

public void HienThiDanhSach_SachNguon()

{

dt_s.Rows.Clear();

dt_s = sach.LayDSSach();

lsvSachNguon.Items.Clear();

lsvSachNguon.View = View.Details;

for (int i = 0; i < dt_s.Rows.Count; i++)

{

ListViewItem lvi;

lvi = lsvSachNguon.Items.Add(dt_s.Rows[i][0].ToString());

lvi.SubItems.Add(dt_s.Rows[i]["TenSach"].ToString());

lvi.SubItems.Add(dt_s.Rows[i]["TacGia"].ToString());

lvi.SubItems.Add(dt_s.Rows[i]["NamXuatBan"].ToString());

lvi.SubItems.Add(dt_s.Rows[i]["NhaXuatBan"].ToString());

lvi.SubItems.Add(dt_s.Rows[i]["TriGia"].ToString());

lvi.SubItems.Add(String.Format("{0:MM/dd/yyyy}", dt_s.Rows[i]["NgayNhap"].ToString()));

}

}

public void HienThiDanhSach_SachChon()

{

dt_schon.Rows.Clear();

dt_schon = sach.LayDSSachTheoDG(madg);

lsvSachChon.Items.Clear();

lsvSachChon.View = View.Details;

for (int i = 0; i < dt_schon.Rows.Count; i++)

{

ListViewItem lvi;

lvi = lsvSachChon.Items.Add(dt_schon.Rows[i][0].ToString());

lvi.SubItems.Add(dt_schon.Rows[i]["TenSach"].ToString());

lvi.SubItems.Add(dt_schon.Rows[i]["TacGia"].ToString());

lvi.SubItems.Add(dt_schon.Rows[i]["NamXuatBan"].ToString());

lvi.SubItems.Add(dt_schon.Rows[i]["NhaXuatBan"].ToString());

lvi.SubItems.Add(dt_schon.Rows[i]["TriGia"].ToString());

lvi.SubItems.Add(String.Format("{0:MM/dd/yyyy}", dt_s.Rows[i]["NgayNhap"].ToString()));

}

}

//kiem tra sách đã được cho mượn hay chưa?

bool isChoosen(string item, ListView lv)

{

for (int i = 0; i < lv.Items.Count; i++)

if (item.Equals(lv.Items[i].Text))

return false;

return true;

}

Page 41: NỘI DUNG THỰC HÀNH - Thayphet.netthayphet.net/application/upload/products/BaitapthuchanhCNPM.pdf · Trong 6 tiết đầu giáo viên hướng dẫn sinh viên làm bài tập

Bài tập thực hành Công nghệ phần mềm – Đại học Nguyễn Tất Thành

Giảng viên ThS. Dương Thành Phết - http://www.thayphet.net Trang 41/60

private void btnChon_Click(object sender, EventArgs e)

{

if (lsvSachNguon.SelectedIndices.Count > 0)

{

for (int i = 0; i < lsvSachNguon.SelectedIndices.Count; i++)

{

if (lsvSachChon.Items.Count >= 3)

{

MessageBox.Show("Mỗi Độc giả chỉ được mượn tối đa 3 quy n");

return;

}

if (isChoosen(lsvSachNguon.SelectedItems[i].Text, lsvSachChon))

{ //ki m tra xem sách đã được cho mượn rồi hay không?

ListViewItem lviSachNguon = svSachNguon.Items[lsvSachNguon.SelectedIndices[i]];

ListViewItem lviSachChon =lsvSachChon.Items.Add(lviSachNguon.SubItems[0].Text);

lviSachChon.SubItems.Add(lviSachNguon.SubItems[1].Text);

lviSachChon.SubItems.Add(lviSachNguon.SubItems[2].Text);

lviSachChon.SubItems.Add(lviSachNguon.SubItems[3].Text);

lviSachChon.SubItems.Add(lviSachNguon.SubItems[4].Text);

lviSachChon.SubItems.Add(lviSachNguon.SubItems[5].Text);

lviSachChon.SubItems.Add(lviSachNguon.SubItems[6].Text);

//thêm mới sách vào chi tiết phiếu mượn

ctpm.ThemCTPM(lsvSachNguon.SelectedItems[i].Text, mapm);

}

else

{

MessageBox.Show("Sách này đã được chọn rồi, vui lòng chọn sách khác", "Lỗi chọn sách",

MessageBoxButtons.OK, MessageBoxIcon.Error);

return;

}

}

}

}

private void btnHuyCT_Click(object sender, EventArgs e)

{

Close();

} // Trả lại sách đã chọn

private void btnTra_Click(object sender, EventArgs e)

{

if (lsvSachChon.SelectedIndices.Count > 0)

{

for (int i = 0; i < lsvSachChon.SelectedIndices.Count; i++)

{

ctpm.XoaCTPM(lsvSachChon.SelectedItems[i].SubItems[0].Text,mapm);

lsvSachChon.Items.RemoveAt(lsvSachChon.SelectedIndices[i]);

}

}

}

private void frmCTPhieuMuon_Load(object sender, EventArgs e)

{

lblMaPM.Text = mapm; //hi n thị mã phi u mượn

lblTenDG.Text = tendg; // hi n thị tên độc giả mượn sách

HienThiDanhSach_SachNguon(); HienThiDanhSach_SachChon();

}

}

}

Page 42: NỘI DUNG THỰC HÀNH - Thayphet.netthayphet.net/application/upload/products/BaitapthuchanhCNPM.pdf · Trong 6 tiết đầu giáo viên hướng dẫn sinh viên làm bài tập

Bài tập thực hành Công nghệ phần mềm – Đại học Nguyễn Tất Thành

Giảng viên ThS. Dương Thành Phết - http://www.thayphet.net Trang 42/60

Chạy và ki m tra chương trình.

Bài tập 6. Màn hình Thống kê tình hình mượn sách theo thể loại

Màn hình này giúp ngư i quản lý theo dõi thông tin mượn sách trong một tháng cụ th . Ngư i

quản lý sẽ nhập tháng/năm vào và nhấn nút xem, tính hình mượn sách thuộc tất cả các th loại sẽ

được hi n thị trong listview.

Xây dựng màn hình theo hình sau, đặt tên là frmThongKeDocGia:

STT Tên Control Loại Tiêu đề

1. rdbTatCa RadioButton Báo cáo tất cả độc giả

2. rdbConNo RadioButton Thống kê các độc giả còn nợ

3. lvMuonSach Listview ListView thống kê tình hình mượn sách theo th loại

4. lblTong Label Tổng số lượt mượn

5. btnXem Button Xem

6. btnIn Button In báo cáo

Viết Code cho form frmDocGiaNoTien.cs nhu sau :

namespace QLThuVien

{

public partial class frmThongKeDocGia : Form

{

DocGia dg;

float tong = 0;

DataTable dt = new DataTable();

Page 43: NỘI DUNG THỰC HÀNH - Thayphet.netthayphet.net/application/upload/products/BaitapthuchanhCNPM.pdf · Trong 6 tiết đầu giáo viên hướng dẫn sinh viên làm bài tập

Bài tập thực hành Công nghệ phần mềm – Đại học Nguyễn Tất Thành

Giảng viên ThS. Dương Thành Phết - http://www.thayphet.net Trang 43/60

public frmThongKeDocGia()

{

InitializeComponent();

dg = new DocGia();

}

private void btnIn_Click(object sender, EventArgs e)

{

//gọi đến form chứa báo cáo cần hi n thị (sẽ tạo trong phần sau)

frmDocGiaNoTien frm = new frmDocGiaNoTien(dt);

frm.Show();

}

private void btnXem_Click(object sender, EventArgs e)

{

lsvDocGia.View = View.Details;

lsvDocGia.FullRowSelect = true;

lsvDocGia.Items.Clear();

tong = 0; //tổng số tiền độc giả nợ

dt.Clear();

if (rdoTatca.Checked)

dt = dg.LayDSDocGia("select hotendocgia,tienno from DocGia");

else

dt = dg.LayDSDocGia("select hotendocgia, tienno from DocGia where tienno<>0");

for (int i = 0; i < dt.Rows.Count; i++)

{

float tien = float.Parse(dt.Rows[i]["tienno"].ToString());

string tienno = String.Format("{0:0,000}", tien);

tong += tien;

ListViewItem lvi = lsvDocGia.Items.Add(i.ToString());

lvi.SubItems.Add(dt.Rows[i]["hotendocgia"].ToString());

lvi.SubItems.Add(tienno);

}

lblTong.Text = String.Format("{0:0,000}", tong);

}

}

}

Bài tập 6. Tạo báo cáo thống kê với Crystal Report: Tạo báo cáo thông ê tình hình đọc giả nợ

tiền phạt.

Thực hiện theo các bước sau:

Bước 1 : Tạo Dataset chứa bảng cần field dữ liệu dùng làm report , đặt tên là dsThuVien.xsd

Bước 2 : Tạo và trang trí cho báo cáo mà chúng ta cần in , đặt tên crpDocGiaNoTien.rpt

Bước 3 : Tạo 1 form rỗng đ chứa report vừa tạo ra, đặt tên frmDocGiaNoTien.cs

Bước 4 : Liên kết các file lại với nhau và liên kết với form Thống kê frmThongKeDocGia ở

trên

Hướng dẫn các bước :

Bước 1 : Tạo dataset chứa dữ liệu

Mở project ThuVien

Page 44: NỘI DUNG THỰC HÀNH - Thayphet.netthayphet.net/application/upload/products/BaitapthuchanhCNPM.pdf · Trong 6 tiết đầu giáo viên hướng dẫn sinh viên làm bài tập

Bài tập thực hành Công nghệ phần mềm – Đại học Nguyễn Tất Thành

Giảng viên ThS. Dương Thành Phết - http://www.thayphet.net Trang 44/60

Tạo DataSet chứa các bảng cần lập báo cáo. Ở đây ta sẽ tạo 1 dataset chứa bảng DocGia , thực

hiện như sau:

- Tạo Dataset bao gồm các bảng cần thống kê : clic chu t phải -> Add New Item

- Bấm vào Server Explorer

- Connect Database

- Chọn Database đ kết nối (nhập đúng Server và Tên Database)

Page 45: NỘI DUNG THỰC HÀNH - Thayphet.netthayphet.net/application/upload/products/BaitapthuchanhCNPM.pdf · Trong 6 tiết đầu giáo viên hướng dẫn sinh viên làm bài tập

Bài tập thực hành Công nghệ phần mềm – Đại học Nguyễn Tất Thành

Giảng viên ThS. Dương Thành Phết - http://www.thayphet.net Trang 45/60

- Chọn bảng Độc giả , kéo thả vào trong DataSet

Bước 2 : tạo crystal report cho đ c giả

Thêm vào CrystalReports rptTinhHinhDocGiaNoTienPhat.rpt như sau:

- Từ menu Project, chọn Add New Item, đặt tên cho report

Sau khi tạo xong dialog sau sẽ xuất hiện

Chúng ta sẽ tạo 1 Blank Report. Click Ok Kết quả như sau:

Page 46: NỘI DUNG THỰC HÀNH - Thayphet.netthayphet.net/application/upload/products/BaitapthuchanhCNPM.pdf · Trong 6 tiết đầu giáo viên hướng dẫn sinh viên làm bài tập

Bài tập thực hành Công nghệ phần mềm – Đại học Nguyễn Tất Thành

Giảng viên ThS. Dương Thành Phết - http://www.thayphet.net Trang 46/60

Thêm vào dòng tiêu đề của report

- Right click lên Section1 chọn Insert\Text object từ popup menu

- Nhập vào nội dung và định dạng như sau.

Kết nối cơ sở dữ liệu

Chọn Database Fields/ Database Expert…

Page 47: NỘI DUNG THỰC HÀNH - Thayphet.netthayphet.net/application/upload/products/BaitapthuchanhCNPM.pdf · Trong 6 tiết đầu giáo viên hướng dẫn sinh viên làm bài tập

Bài tập thực hành Công nghệ phần mềm – Đại học Nguyễn Tất Thành

Giảng viên ThS. Dương Thành Phết - http://www.thayphet.net Trang 47/60

Kết quả:

Kéo thả các field cần thiết vào report như hình sau:

Page 48: NỘI DUNG THỰC HÀNH - Thayphet.netthayphet.net/application/upload/products/BaitapthuchanhCNPM.pdf · Trong 6 tiết đầu giáo viên hướng dẫn sinh viên làm bài tập

Bài tập thực hành Công nghệ phần mềm – Đại học Nguyễn Tất Thành

Giảng viên ThS. Dương Thành Phết - http://www.thayphet.net Trang 48/60

Định dạng cho Field tiền nợ và tổng tiền nợ:

Tạo Formula Field Tổng tiền nợ:

- Right click lên Formula Fields chọn New…

- Nhập vào tên Formula Field: TongTienNo

- Nhập vào công thức tính cho TongTienNo

Page 49: NỘI DUNG THỰC HÀNH - Thayphet.netthayphet.net/application/upload/products/BaitapthuchanhCNPM.pdf · Trong 6 tiết đầu giáo viên hướng dẫn sinh viên làm bài tập

Bài tập thực hành Công nghệ phần mềm – Đại học Nguyễn Tất Thành

Giảng viên ThS. Dương Thành Phết - http://www.thayphet.net Trang 49/60

Tạo Parameter Fields Ngư i lập thống kê:

- Right click lên Parameter Fields chọn New…

- Nhập vào tên Parameter Field: NguoiLapThongKe

Kéo thả Formula và Parameter + thêm 2 Text Object (TỔNG SỐ TIỀN NỢ:, Ngư i lập thống kê:) vào report như hình sau:

Bước 3 : Tạo form frmdocgianotien để hiển thị report

Tạo mới 1 form rỗng

Kéo thả control CrystalReportViewer , đặt tên là CrystalReportViewer1 vào frmReport.

Page 50: NỘI DUNG THỰC HÀNH - Thayphet.netthayphet.net/application/upload/products/BaitapthuchanhCNPM.pdf · Trong 6 tiết đầu giáo viên hướng dẫn sinh viên làm bài tập

Bài tập thực hành Công nghệ phần mềm – Đại học Nguyễn Tất Thành

Giảng viên ThS. Dương Thành Phết - http://www.thayphet.net Trang 50/60

Viết code cho form frmDocGiaNoTien :

namespace QLThuVien

{

public partial class frmDocGiaNoTien : Form

{

public DataTable dt_DG = new DataTable();

public frmDocGiaNoTien(DataTable dt)

{

InitializeComponent();

dt_DG = dt;

}

private void frmShowReportDG_Load(object sender, EventArgs e)

{

crpDocGiaNoTien crp = new crpDocGiaNoTien();

crp.SetDataSource(dt_DG); //chỉ định datasource cho report

crystalReportViewer1.ReportSource = crp; //hi n thị report lên form

}

}

}

Chạy chương trình và ki m tra kết quả .

Tư ng tự, làm report cho các báo cáo thống ê hác:

Thống kê sách mượn theo số lượng

Thống kê sách mượn theo th loại

Chú ý : Report lấy dữ liệu từ 2 bảng CSDL trở lên thì bắt bu c phải tạo VIEW trong

Database (select các thông tin cần thiết từ các table) và sau đó làm REPORT tư ng tự như làm

với Table

Page 51: NỘI DUNG THỰC HÀNH - Thayphet.netthayphet.net/application/upload/products/BaitapthuchanhCNPM.pdf · Trong 6 tiết đầu giáo viên hướng dẫn sinh viên làm bài tập

Bài tập thực hành Công nghệ phần mềm – Đại học Nguyễn Tất Thành

Giảng viên ThS. Dương Thành Phết - http://www.thayphet.net Trang 51/60

Tham hảo hướng dẫn tạo report trong MSDN

Sau khi mở MSDN

o Chọn Filtered by: Visual C#

o Look for: Crystal Report Enter

Các bạn có th m tham khảo bằng cách click chọn các mục liên quan về Crystal Report hoặc

tham khảo Sample code. Chọn mục sample codeEnter

Chạy file C:\Program Files\Microsoft Visual Studio 8\Crystal Reports\Samples\en\ Code\

TutorialSampleCodeProjects.msi sẽ phát sinh ra các rất nhiều Sample cho ta tham khảo.

Đ phần mềm đạt được tiêu chuẩn, trong quá trình viết code phải chú ý đến việc b t lỗi ngư i dùng

(validate dữ liệu), tránh đ phần mềm bị interupt.

Page 52: NỘI DUNG THỰC HÀNH - Thayphet.netthayphet.net/application/upload/products/BaitapthuchanhCNPM.pdf · Trong 6 tiết đầu giáo viên hướng dẫn sinh viên làm bài tập

Bài tập thực hành Công nghệ phần mềm – Đại học Nguyễn Tất Thành

Giảng viên ThS. Dương Thành Phết - http://www.thayphet.net Trang 52/60

Phần 3. BÀI TẬP VỀ NHÀ

Yêu cầu bài toán:

Ngư i ta cần viết chương trình quản lí tại công ty (cửa hàng) buôn bán các mặt hàng là linh

kiện máy tính ( có th : thực phẩm, văn phòng phẩm. . . ). Các chủ th cần quản lí là:

Khách hàng.

Nhân viên.

Mặt hàng.

Hóa đơn. Các thông tin cần quản lí cho các chủ th cần là:

Khách Hàng

Tên khách hàng : B t buộc nhập

Phái: với khách vãng lai là không buộc .

Địa chỉ : với khách vãng lai là không buộc

Điện thọai : với khách vãng lai là không buộc

Đ phân biệt các khách hàng ngư i ta cho mỗi khách hàng một mã số. Cách đánh mã số theo

qui ước công ty .

Mỗi khách hàng chỉ cho phép xuất hiện 1 lần trong CSDL bất chấp số giao dịch .

Nhân Viên

Tên nhân viên: B t buộc nhập

Ngày sinh: B t buộc nhập

Phái: B t buộc nhập

Địa chỉ

Điện thọai

Số hóa đơn đã thực hiện

Đ phân biệt các nhân viên ngư i ta cho mỗi nhân viên một mã số. Cách đánh mã số theo qui

ước công ty .

Mỗi nhân viên khi login vào hệ thống sẽ có cặp (username, password) phân biệt .

Mặt Hàng

Tên mặt hàng: B t buộc nhập

Đơn giá

Đơn vị tính

Số lượng tồn: số luợng có thật sự trong kho, cần th hiện 2 phép tóan rõ ràng:

Phép cộng: Khi nhập thêm mới

Phép trừ: Khi bán

Đ phân biệt các mặt hàng ngư i ta cho mỗi mặt hàng một mã số. Cách đánh mã số theo qui

ước công ty.

Hóa Đ n: Có dạng sau

Số hóa đơn : ...................................................B t buộc nhập

Tên khách hàng : ............................................B t buộc nhập

Ngày lập hóa đơn : ........................................Ngày hệ thống

Tổng tiền : ......................................................Tính tự động nh các cột khác

Tên nhân viên lập : .........................................B t buộc nhập

STT Mã số mặt

hàng

Tên mặt

hàng

Đơn vị

tính Số lượng Đơn giá Thành tiền

1 HDD Đĩa cứng

2 Mouse Chuột

. . .

Page 53: NỘI DUNG THỰC HÀNH - Thayphet.netthayphet.net/application/upload/products/BaitapthuchanhCNPM.pdf · Trong 6 tiết đầu giáo viên hướng dẫn sinh viên làm bài tập

Bài tập thực hành Công nghệ phần mềm – Đại học Nguyễn Tất Thành

Giảng viên ThS. Dương Thành Phết - http://www.thayphet.net Trang 53/60

Số hóa đơn là mã số hóa đơn. Cách đánh mã số theo qui ước công ty.

Các yêu cầu hác hi viết hệ quản lí này cần có:

Thêm, tìm kiếm, sửa, xóa trên các chủ th : Khách hàng, Nhân viên, Mặt hàng, Hóa đơn

Có file giúp đỡ hướng dẫn sử dụng.

Các báo cáo: Doanh thu bán hàng, theo nhân viên, theo khách hàng.

In hóa đơn

Phần hệ thống:

Ki m tra Usrname, password khi kết nối CSDL

Ki m tra Username, password khi ngư i dùng đăng nhập hệ thống, gồm có 2

quyền hạn khi đăng nhập hệ thống(ngư i quản trị và nhân viên bán hàng)

Backup CSDL và khôi phục CSDL

Cần ki m tra dữ liệu khi nhập .

Các thông báo lỗi hay thành công phải rõ ràng .

Một số các báo cáo (report) mẫu sau:

Báo cáo số giao dịch cho mỗi nhân viên:

Công ty TNHH XXXXX

DANH SÁCH NHÂN VIÊN THEO SỐ GIAO DỊCH ĐÃ THỰC HIỆN

Mã số

NV

Tên

NV Ngày Sinh Phái

Địa

chỉ SĐT

Số giao dịch đã thực

hiện

. . .

. . .

....

Ngày 15 Tháng 8 Năm 2011

Ngư i báo cáo

Nguyễn Văn A

Báo cáo doanh số cho mỗi mặt hàng

Công ty TNHH XXXXX

BÁO CÁO DOANH SỐ CHO MỖI MẶT HÀNG

Từ ngày :15/7/2011 Đến ngày :15/8/2011

STT Tên mặt hàng Số lượng Đơn giá Thành tiền

1 HDD 160GB 50 . . . . . .

2 HDD 250GB 70

3 Monitor 15” 20

. . .

Ngày 15 Tháng 8 Năm 2011

Ngư i báo cáo

Nguyễn Văn B

Page 54: NỘI DUNG THỰC HÀNH - Thayphet.netthayphet.net/application/upload/products/BaitapthuchanhCNPM.pdf · Trong 6 tiết đầu giáo viên hướng dẫn sinh viên làm bài tập

Bài tập thực hành Công nghệ phần mềm – Đại học Nguyễn Tất Thành

Giảng viên ThS. Dương Thành Phết - http://www.thayphet.net Trang 54/60

Báo cáo doanh số cho mỗi nhân viên:

Công ty TNHH XXXXX

BÁO CÁO DOANH SỐ CHO MỖI NHÂN VIÊN

Từ ngày :15/7/2011 Đến ngày :15/8/2011

STT Mã số nhân viên Tên nhân viên Tổng tiến

1 NV001 Nguyễn Vân C 120.000.000

2 NV067 Ng Thị Bích Loan 170.000.000

3 NV013 . . . . . .

Ngày 15 Tháng 8 Năm 2011

Ngư i báo cáo

Nguyễn Văn A

Hướng dẫn thực hiện

1. Phân tích và thiết kế csdl cho bài toán trên

Vẽ sơ đồ dữ liệu mức vật lý.

Chi tiết các ki u dữ liệu cho từng thuộc tính của mỗi bảng.

2. Cài đặt csdl đã phân tích, trên hệ quản trị CSDL SQL SERVER

Tạo CSDL tên: QL_BanHang.

Tạo các table, các ràng buộc(khóa chính, khóa ngoại, miền giá trị, liên bộ, liên thuộc

tính,...)

(không b t buộc) Cài đặt các View, function, procedure, trigger,... Đ thực hiện các thao

tác thêm, xóa sửa dữ liệu.

3. Thiết kế các màn hình cho chương trình.

Màn hình chính, chứa menu các chức năng của chương trình.

Màn hình lưu thông tin kết nối đến hệ quản trị CSDL

Màn hình đăng nhập hệ thống

Màn hình lưu trữ và phục hồi dữ liệu cho hệ thống.

Các màn hình cập nhật: Nhân viên, khách hàng, mặt hàng, hóa đơn bán hàng, ngư i

dùng(admin or nhân viên)

4. Thiết kế các báo cáo theo yêu cầu

Báo cáo số giao dịch cho mỗi nhân viên(theo mẫu trên).

Báo cáo doanh số cho mỗi mặt hàng(theo mẫu trên).

Page 55: NỘI DUNG THỰC HÀNH - Thayphet.netthayphet.net/application/upload/products/BaitapthuchanhCNPM.pdf · Trong 6 tiết đầu giáo viên hướng dẫn sinh viên làm bài tập

Bài tập thực hành Công nghệ phần mềm – Đại học Nguyễn Tất Thành

Giảng viên ThS. Dương Thành Phết - http://www.thayphet.net Trang 55/60

Báo cáo doanh số cho mỗi nhân viên(theo mẫu trên).

Báo cáo doanh thu bán hàng trong ngày.

Báo cáo doanh thu bán hàng trong tháng.

Báo cáo danh sách khách hàng.

5. Tạo file giúp đỡ (help) hướng dẫn sử dụng .

6. Đóng gói phần mềm(tạo file settup)

----------Hết------------

Page 56: NỘI DUNG THỰC HÀNH - Thayphet.netthayphet.net/application/upload/products/BaitapthuchanhCNPM.pdf · Trong 6 tiết đầu giáo viên hướng dẫn sinh viên làm bài tập

Bài tập thực hành Công nghệ phần mềm – Đại học Nguyễn Tất Thành

Giảng viên ThS. Dương Thành Phết - http://www.thayphet.net Trang 56/60

PHỤ LỤC

HƯỚNG DẪN TẠO FILE HELP CHO CHƯƠNG TRÌNH

I. TẠO FILE *.CHM

1. Dùng PowerCHM 2012 để tạo file *.chm

Tải phần mềm: Sử dụng google đ tìm kiếm, download và cài đặt phần mềm PowerCHM 2012

2. How to Use PowerCHM - Step by Step Help for You to Create Your CHM File

Step 1: Active your PowerCHM

Click on "Register" button located on the right of every PowerCHM's Ribbon Category.

You will now see the Register screen. If you have not registered PowerCHM please click here.

Page 57: NỘI DUNG THỰC HÀNH - Thayphet.netthayphet.net/application/upload/products/BaitapthuchanhCNPM.pdf · Trong 6 tiết đầu giáo viên hướng dẫn sinh viên làm bài tập

Bài tập thực hành Công nghệ phần mềm – Đại học Nguyễn Tất Thành

Giảng viên ThS. Dương Thành Phết - http://www.thayphet.net Trang 57/60

Copy and Paste your Serial Number into the registration textbox fields.

Ensure that all information is to the far left of the textbox fields and no blank spaces to the left

before clicking the "Active" button.

Step 2: Adding Files

Click "Home" category tab on the top to show the main functions. The easiest way to add files is

to import a prepared folder.

Click "Import Directory" button(Orange highlighted button in the below image) to show the

Folder Select dialog(shown in Figure 1), then select a folder and click Select button. All the

supported files will be added to the Content Tree(see Figure 2).

Figure 1: A folder which includes prepared directory content and supported files is being

imported

Page 58: NỘI DUNG THỰC HÀNH - Thayphet.netthayphet.net/application/upload/products/BaitapthuchanhCNPM.pdf · Trong 6 tiết đầu giáo viên hướng dẫn sinh viên làm bài tập

Bài tập thực hành Công nghệ phần mềm – Đại học Nguyễn Tất Thành

Giảng viên ThS. Dương Thành Phết - http://www.thayphet.net Trang 58/60

Figure 2: Some supported files what you need has been imported

Step 3: Compile to CHM

After all files are added, you can execute CHM Compile command to create your chm file.

Click "CHM Compile" button(Orange highlighted button in the below image) to create your

chm file.

You will see a dialog to confirm some necessary settings about your CHM. Click the Compile

button to get your final CHM file.

Page 59: NỘI DUNG THỰC HÀNH - Thayphet.netthayphet.net/application/upload/products/BaitapthuchanhCNPM.pdf · Trong 6 tiết đầu giáo viên hướng dẫn sinh viên làm bài tập

Bài tập thực hành Công nghệ phần mềm – Đại học Nguyễn Tất Thành

Giảng viên ThS. Dương Thành Phết - http://www.thayphet.net Trang 59/60

Finally, you can see a compiling process dialog as below,

and then the result CHM file will be opened.

Page 60: NỘI DUNG THỰC HÀNH - Thayphet.netthayphet.net/application/upload/products/BaitapthuchanhCNPM.pdf · Trong 6 tiết đầu giáo viên hướng dẫn sinh viên làm bài tập

Bài tập thực hành Công nghệ phần mềm – Đại học Nguyễn Tất Thành

Giảng viên ThS. Dương Thành Phết - http://www.thayphet.net Trang 60/60

II. HIỂN THỊ FILE HELP *.CHM

//Code hi n thị file help *.chm

private void mnu_GD_HienThiHuongDan_Click(object sender, EventArgs e)

{ //File "HD_Thuc_Hanh_Mon_CNPM.chm" lưu trong ../bin/debug/

Help.ShowHelp(this, "HD_Thuc_Hanh_Mon_CNPM.chm");

}