Bài tập thực hành Nhập môn công nghệ phần mềm

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

pdf55 trang | Chia sẻ: phuongt97 | Lượt xem: 452 | Lượt tải: 0download
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 codeEnter 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:

  • pdfbai_tap_thuc_hanh_nhap_mon_cong_nghe_phan_mem.pdf
Tài liệu liên quan