NỘI DUNG THỰC HÀNH
Ngôn ngữ: C#.NET
Môi trường lập trình: Visual studio .NET
Hệ quản trị CSDL: SQL Server.
Đánh giá:
Hình thức: Nộp đồ án (báo cáo + source code của phần mềm) + thi 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 các em tự đề xuất.
Tiêu chí: Phần mềm của các bạn phải thoả các tính chất sau:
1. Tính đúng đắn
2. Tính tiện dụng
3. Tính hiệu quả
4. Tính tiến hóa
5. Tính bảo mật
55 trang |
Chia sẻ: phuongt97 | Lượt xem: 452 | Lượt tải: 0
Bạn đang xem trước 20 trang nội dung tài liệu Bài tập thực hành Nhập môn công nghệ phần mềm, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
DI.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);
}
}
Bài tập thực hành Nhập Môn Công Nghệ Phần Mềm
36
Lớp 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
Bài tập thực hành Nhập Môn Công Nghệ Phần Mềm
37
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;
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()
{
Bài tập thực hành Nhập Môn Công Nghệ Phần Mềm
38
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)
{
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)
{
Bài tập thực hành Nhập Môn Công Nghệ Phần Mềm
39
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");
}
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();
}
}
Bài tập thực hành Nhập Môn Công Nghệ Phần Mềm
40
Giao diện FORM ChiTietPhieuMuon (frmChiTietPhieuMuon) như sau :
STT Tên Control Loại Tên hàm xử lý
1 lsvSachNguon ListView
cboSachChon combobox
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
Ta tiếp tục viết code cho form frmChitietphieumuon.cs như sau:
namespace QLThuVien
{
public partial class frmCTPhieuMuon : Form
{
public string mapm;
public string tendg;
public string madg;
Bài tập thực hành Nhập Môn Công Nghệ Phần Mềm
41
DataTable dt_s;
DataTable dt_schon;
ChiTietPhieuMuon ctpm;
Sach sach;
public frmCTPhieuMuon(string MAPM, string MADG, string TENDG)
{
InitializeComponent();
ctpm = new ChiTietPhieuMuon();
dt_s = new DataTable();
dt_schon = new DataTable();
sach = new Sach();
mapm = MAPM;
madg = MADG;
tendg = TENDG;
}
public void HienThiDanhSach_SachNguon()
{
dt_s.Rows.Clear();
dt_s = sach.LayDSSach();
cboSachNguon.DataSource = dt_s;
cboSachNguon.DisplayMember = "Tensach";
cboSachNguon.ValueMember = "Masach";
}
public void HienThiDanhSach_SachChon()
{
dt_schon.Rows.Clear();
//lấy tất cả sách độc giả đã mượn
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());
}
}
private void btnChon_Click(object sender, EventArgs e)
{
if (lsvSachChon.Items.Count >= 3)
{
MessageBox.Show("Mỗi Độc giả chỉ được mượn tối đa 3 quyển");
return;
}
if (isChoosen(cboSachNguon.SelectedText, lsvSachChon))
{
ListViewItem lviSachChon =
lsvSachChon.Items.Add(cboSachNguon.SelectedValue.ToString());
lviSachChon.SubItems.Add(cboSachNguon.Text);
//thêm mới sách vào chi tiết phiếu mượn
ctpm.ThemCTPM(cboSachNguon.SelectedValue.ToString(), mapm);
}
else
{
Bài tập thực hành Nhập Môn Công Nghệ Phần Mềm
42
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();
}
//kiem tra mot item co tồn tại trong listview ?? dùng để xem độc giả có
mượn trùng sách hay không?
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;
}
//cancel việc mượn sách (trả lại sách)
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;
lblTenDG.Text = tendg;
HienThiDanhSach_SachChon();
HienThiDanhSach_SachNguon();
}
}
}
Chạy và kiểm tra chương trình.
Bài tập thực hành Nhập Môn Công Nghệ Phần Mềm
43
Bài 4. 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
Bài tập thực hành Nhập Môn Công Nghệ Phần Mềm
44
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();
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
tienno0");
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 thực hành Nhập Môn Công Nghệ Phần Mềm
45
Bài 5. Tạo báo cáo thống kê với Crystal Report
1. Tạo báo cáo thông ê tình hình ọc giả nợ tiền phạt.
Chúng ta sẽ tạo các loại báo cáo và thống kê cho phần mềm. 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
Chi tiết các bước :
BƯỚC 1 : TẠO DATASET CHỨA DỮ LIỆU
Mở project ThuVien
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:
o Tạo Dataset bao gồm các bảng cần thống kê : clic chuột phải -> Add New Item
o Bấm vào Server Explorer
Bài tập thực hành Nhập Môn Công Nghệ Phần Mềm
46
o Connect Database
o Chọn Database để kết nối (nhập đúng Server và Tên Database)
o Chọn bảng Độc giả , kéo thả vào trong DataSet
Bài tập thực hành Nhập Môn Công Nghệ Phần Mềm
47
BƯỚC 2 : TẠO CRYSTAL REPORT CHO ĐỘC GIẢ
Thêm vào CrystalReports rptTinhHinhDocGiaNoTienPhat.rpt như sau:
o 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
Bài tập thực hành Nhập Môn Công Nghệ Phần Mềm
48
Chúng ta sẽ tạo 1 Blank Report. Click Ok Kết quả như sau:
Thêm vào dòng tiêu đề của report
o Right click lên Section1 chọn Insert\Text object từ popup menu
o 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
Bài tập thực hành Nhập Môn Công Nghệ Phần Mềm
49
Kết quả:
Kéo thả các field cần thiết vào report như hình sau:
Bài tập thực hành Nhập Môn Công Nghệ Phần Mềm
50
Định dạng cho Field tiền nợ và tổng tiền nợ:
Bài tập thực hành Nhập Môn Công Nghệ Phần Mềm
51
Tạo Formula Field Tổng tiền nợ:
o Right click lên Formula Fields chọn New
o Nhập vào tên Formula Field: TongTienNo
o Nhập vào công thức tính cho TongTienNo
Tạo Parameter Fields Người lập thống kê:
o Right click lên Parameter Fields chọn New
o 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ài tập thực hành Nhập Môn Công Nghệ Phần Mềm
52
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.
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
}
}
}
Bài tập thực hành Nhập Môn Công Nghệ Phần Mềm
53
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 kê khác :
Báo cáo nhân viên theo Bằng cấp
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
Bài tập thực hành Nhập Môn Công Nghệ Phần Mềm
54
Tham hảo MSDN 2005
Sau khi mở MSDN 2005
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
Bài tập thực hành Nhập Môn Công Nghệ Phần Mềm
55
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.
Các file đính kèm theo tài liệu này:
- bai_tap_thuc_hanh_nhap_mon_cong_nghe_phan_mem.pdf