Tập bài giảng Thực hành kỹ thuật lập trình (Phần 2)

a) Combobox Tình trạng phòng nhận 2 giá trị: Có, Không; Combobox loại phòng nhận 3 giá trị: Phòng đơn, Phòng đôi, Phòng ba; Combobox giới tính nhận 2 giá trị: Nam, Nữ. Khi Load Form : Thông tin của những khách thuê phòng chưa thanh toán đươc̣hiểnthi ̣lên lưới Chi tiếtkhách hàng . Khi kích choṇmột dòng trên lưới Chi tiết khách hàng thìhiểnthi ̣thông tin khách hàng đó lên cácTextbox vàCombobox tương ứng trong thông tin khách thuê phòng. b) Nút Xem theo tiǹh traṇg: Khi ngườidùng choṇtrong Combo Tình traṇg phòng rồinhấnvàonútXem theo tiǹh traṇg , thông tin vềcácphòng se ̃đươc̣hiểnthi ̣lên lưới Chi tiếtphòng. c) Nút Xem theo loại phòng : Khi ngườidùng choṇtrong Combo Loại phòng rồi nhấnvàonútXem theo loại phòng , thông tin vềcácphòng se ̃đươc̣hiểnthi ̣lên lưới Chi tiếtphòng. d) Nút Nhập: Đưa toàn bộ các Mã Phòng có Tình trạng là “Không” vào Combobox Mã Phòng. Nút nhập phải bổ sung được các thông tin về khách hàng vào bảng “KH” trong cơ sở dữ liệu nếu khách hàng đó chưa có trong bảng “KH”; thông tin về thuê phòng vào bảng “ThueP” và hiển thị lên lưới . Yêu cầu: ngày đến lấy theo ngày hiện tại; ngày đi và tiền sử dụng dịch vụ để trống; đồng thời cập nhật Tình trạng của phòng đó trong bảng “Phong” thành “Có”. e) Nút Sƣ̉a: Phải sửa được các thông tin về họ tên, giới tính của bản ghi được chọn trên lưới chi tiết khách hàng vào bảng „KH‟ và hiện thông tin vừa sửa lên lưới. f) Nút Xóa: Phải xóa được thông tin thuê phòng trong bảng “ThueP” của các dòng được chọn trên lưới; cập nhật Tình trạng của các phòng đó trong bảng “Phong” thành “Không”; đồng thời cập nhật thông tin sau khi xóa lên lưới. g) Nút Thoát: Phải hiển thị được hộp thoại xác nhận có muốn thoát không và xử lý được việc đóng hoặc hủy việc đóng Form.

pdf180 trang | Chia sẻ: Tiểu Khải Minh | Ngày: 28/02/2024 | Lượt xem: 6 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Tập bài giảng Thực hành kỹ thuật lập trình (Phần 2), để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
thực hiện việc tìm kiếm thông tin độc giả theo mã độc giả, tên độc giả. Tập bài giảng Thực hành kỹ thuật lập trình 253 Hình 3. 25 Yêu cầu: - Form xuất hiện chính giữa màn hình - Nhãn Tìm kiếm độc giả: Font Microsoft Sans Serif,, Bold, 18 Căn giữa màn hình form tìm kiếm theo chiều ngang Mầu chữ: Xanh - Các nhãn Chọn khóa tìm kiếm, Mã độc giả Font: Microsoft Sans Serif, size 9 Mầu chữ: Đen - Nút lệnh Xem kết quả Font: Microsoft Sans Serif, Bold, 9 Mầu chữ: Đen Khi nhấn vào nút lệnh xem kết quả, chƣơng trình sẽ căn cứ vào giá trị lựa chọn ở comboBox trong phần Chọn khóa tìm kiếm là Mã độc giả hay tên độc giả nếu tìm kiếm theo mã độc giả thì tiếp theo sẽ chọn mã độc giả trong comboBox mã độc giả, còn nếu tìm kiếm theo tên độc giả thì điều kiện tìm kiếm nhập trong textbox tên độc giả. Phụ thuộc vào điều kiện tìm kiếm là theo mã độc giả hay tên độc giả chƣơng trình sẽ đƣa ra kết quả tìm kiếm các độc giả gồm các thông tin: Mã độc giả, tên độc giả, cơ quan, địa chỉ, số điện thoại của các độc giả và hiển thị ở trên ListView phía dƣới. Tìm theo mã độc giả: Yêu cầu tìm chính xác theo mã độc giả thì mã độc giả đƣợc nhập hoặc chọn trong ComboBox mã độc giả. Tìm kiếm theo tên độc giả yêu cầu tìm gần giống, tên độc giả cần tìm đƣợc nhập từ bàn phím vào ô textbox tên độc giả. Nút thoát thực hiện đóng Form hiện thời. Tập bài giảng Thực hành kỹ thuật lập trình 254 b) Form frTimkiem_Sach thực hiện việc tìm kiếm thông tin sách theo mã sách, tên sách. Hình 3. 26 Yêu cầu: - Form xuất hiện chính giữa màn hình - Nhãn Tìm kiếm sách: Font Microsoft Sans Serif,, Bold, 18 Căn giữa màn hình form tìm kiếm theo chiều ngang Mầu chữ: Xanh - Các nhãn Chọn khóa tìm kiếm, Mã sách, tên sách Font: Microsoft Sans Serif, size 9 Mầu chữ: Đen - Nút lệnh Xem kết quả Font: Microsoft Sans Serif, Bold, 9 Mầu chữ: Đen Khi nhấn vào nút lệnh xem kết quả, chƣơng trình sẽ căn cứ vào giá trị lựa chọn ở comboBox trong phần Chọn khóa tìm kiếm là Mã sách hay tên sách nếu tìm kiếm theo mã sách thì tiếp theo sẽ chọn mã sách trong comboBox mã sách, còn nếu tìm kiếm theo tên sách thì điều kiện tìm kiếm nhập trong textbox tên sách. Phụ thuộc vào điều kiện tìm kiếm là theo mã sách hay tên sách chƣơng trình sẽ đƣa ra kết quả tìm kiếm các sách gồm các thông tin: Mã sách, tên sách, tên tác giả, nhà xuất bản, năm xuất bản và số lƣợng của các sách và hiển thị ở trên ListView phía dƣới. Tìm theo mã sách hay tên tên sách: Yêu cầu tìm chính xác theo mã sách thì mã sách đƣợc nhập hoặc chọn trong ComboBox mã sách hoặc tên sách đƣợc nhập từ bàn phím vào ô textbox tên sách Nút thoát thực hiện đóng Form hiện thời. Công việc 4: Thiết kế form quản lý chung cho ứng dụng vừa xây dựng Tập bài giảng Thực hành kỹ thuật lập trình 255 Yêu cầu: Loại form: MDIForm Tiêu đề: Quản lý thƣ Thƣ viện Chế độ hiển thị: Lớn nhất Thanh trạng thái: Có Hỗ trợ xem trƣớc khi nhấn phím: Có Công việc 5: Thiết kế menu trên form có sử dụng phím nóng để truy cập vào mục chọn trên menu theo mẫu sau: Hình 3. 27 Yêu cầu: - Cấu trúc của menu nhƣ sau: Thông tin sách Thông tin độc giả Tìm kiếm Tìm kiếm thông tin độc giả Tìm kiếm thông tin sách Thoát Công việc 6: Gắn các chức năng tƣơng ứng vào các mục chọn cho menu vừa tạo trên form Yêu cầu: - Khi nhấn vào mục chọn Thông tin sách sẽ thi hành form frSach là form con của form quản lý - Khi nhấn vào mục chọn Thông tin độc giả sẽ thi hành form frDocgia là form con của form quản lý - Khi nhấn vào mục chọn Thoát sẽ đóng form quản lý và kết thúc ứng dụng Tập bài giảng Thực hành kỹ thuật lập trình 256 - Khi nhấn vào mục chọn Tìm kiếm/Tìm kiếm thông tin độc giả sẽ hiển thị form frTimkiem_DG là form con của form quản lý - Khi nhấn vào mục chọn Tìm kiếm/Tìm kiếm thông tin sách sẽ hiển thị form frtimkiemSach là form con của form quản lý Hƣớng dẫn thực hiện: Công việc 1: Thiết kế form frDocgia theo mẫu 1. Phân tích yêu cầu: Theo yêu cầu trên thì phải có một form chứa: - Các đối tƣợng có nội dung “THÔNG TIN ĐỘC GIẢ”, “Mã độc giả”, “Tên độc giả”, “Cơ quan”, “Địa chỉ”, “ Số điện thoại” là các Label. - Các đối tƣợng ô nhập mã độc giả, tên độc giả, cơ quan, địa chỉ, số điện thoại là các Textbox. - Các nút “Thêm” “Xóa”, “Sửa”, “Tìm kiếm”, “Thoát” là các Button - Đối tƣợng thông tin chi tiết độc giả, danh sách độc giả là các GroupBox. 2. Hƣớng dẫn thực hiện Nhƣ vậy, để thực hiện công việc thiết kế form có tên FrDocgia theo yêu cầu, ngƣời lập trình thực các bƣớc nhƣ sau: Bƣớc 1. Mở C# Bƣớc 2. Tạo form mới Trên thanh menu, chọn Project/Add New Item. Xuất hiện cửa sổ Add New Item. Chọn loại Windows Form, sau đó nhập tên frDocgia vào ô Name rồi nhấn nút Add. Bƣớc 3. Thiết kế form theo mẫu và gắn các điều khiển vào Form a) Để tạo điều khiển label Thông tin độc giả theo yêu cầu thực hiện: Kéo điều khiển Label từ của sồ Toolbox vào form. Nháy phải chuột vào Label chọn Properties và thiết lập các thuộc tính cho Label này: Text: THÔNG TIN ĐỘC GIẢ Font: Microsoft Sans Serif Font size: 18 Font STYLE: BOLD Trên menu chọn Format/Center in form/Horizontally để căn giữa. Thực hiện các thao tác tƣơng tự với các label khác nhƣ: Mã độc giả, tên độc giả, cơ quan, địa chỉ, số điện thoại để thiết lập các thuộc tính về font name và font size. b) Để tạo điểu khiển txt_madocgia tƣơng ứng với nhãn Mã độc giả theo yêu cầu thực hiện: Kéo điều khiển Textbox từ cửa sổ Toolbox vào form. Nháy phải chuột vào textbox chon Properties và thiết lập các thuộc tính cho textbox này: Tập bài giảng Thực hành kỹ thuật lập trình 257 Name: txt_maDG Font name: Microsoft Sans Serif Font size: 9 Thực hiện các thao tác tƣơng tự với các textbox khác nhƣ: txt_tenDG,txt_coquan, txt_diachi, txt_sodienthoai. c) Để tạo điểu khiển button thêm theo yêu cầu thực hiện: Kéo điều khiển Button từ cửa sổ Toolbox vào form. Nháy phải chuột vào Button chọn Properties và thiết lập các thuộc tính cho Button này: Name: bt_them Font name: Microsoft Sans Serif Font size: 9 Làm tƣơng tự với các button còn lại. d) Kéo điều khiển Listview từ cửa sổ Toolbox vào form và thêm 6 cột dữ liệu là: Mã ĐG, Tên độc giả, cơ quan, địa chỉ và SĐT (số điện thoại) Bƣớc 4. Kết quả thiết kế Form thông tin độc giả Hình 3. 28 Bƣớc 5. Viết mã lệnh cho các nút điều khiển Ở đây các nút sẽ phải thực hiện việc kết nối cơ sở dữ liệu và thực thi các câu lệnh sql thƣờng xuyên. Vì vậy để đơn giản không phải viết đi viết lại đoạn code cho việc truy vấn cơ sở dữ liệu và thực thi câu lệnh sql chúng ta sẽ xây dựng một lớp có tên là ketnoi gồm các phƣơng thức + phƣơng thức taoketnoi() để thực hiện tạo 1 kết nối cơ sở dữ liệu và kết quả trả về là một đối tƣợng thuộc lớp SqlConnection + Phƣơng thức truyvan(string sql) để thực hiện câu lệnh select +Phƣơng thức thucthi(string sql) để thực thi câu lệnh: insert, delete, update - Viết mã lệnh để kết nối cơ sở dữ liệu: Xây dựng lớp ketnoi nằm trong file ketnoi.cs Tập bài giảng Thực hành kỹ thuật lập trình 258 Thực hiện chuột phải vào Project chọn add\class -> xuất hiện hộp thoại Add new Item, trong hộp Name gõ tên file là ketnoi.cs. Ngay sau đó sẽ tạo đƣợc cấu trúc lớp ketnoi nhƣ sau: - Viết mã lệnh cho phƣơng thức trong lớp kết nối: Chú ý: Trƣớc hết phải khai báo các thƣ viện sau: using System.Data.SqlClient; using System.Data; Sau đó viết code cho lần lƣợt các phƣơng thức: Mã lệnh của phƣơng thức tạo kết nối (taoketnoi()). public static SqlConnection taoketnoi() { SqlConnection con = new SqlConnection(@"Data Source=admin- vaio;Initial Catalog=qlThuvien;Integrated Security=True"); try { con.Open(); } catch { MessageBox.Show("Lỗi kết nối", "Thông báo"); } return con; } -Mã lệnh cho phƣơng thức thucthi public static void thucthi(string sql) { SqlConnection con = ketnoi.taoketnoi(); SqlCommand cmd = new SqlCommand(); cmd.CommandText = sql; cmd.Connection = con; cmd.ExecuteNonQuery(); Tập bài giảng Thực hành kỹ thuật lập trình 259 con.Close(); } -Mã lệnh cho phƣơng thức truyvan public static DataTable truyvan(string sql) { SqlConnection con = ketnoi.taoketnoi(); SqlCommand cmd = new SqlCommand(); cmd.CommandText = sql; cmd.Connection = con; SqlDataAdapter da = new SqlDataAdapter(); da.SelectCommand = cmd; DataTable dt = new DataTable(); da.Fill(dt); return dt; } - Viết mã lệnh việc load dữ liệu lên Listview private void load_listviewdocgia() { string sql = "select *from tbldocgia"; DataTable dt = new DataTable(); dt = ketnoi.truyvan(sql); foreach (DataRow dr in dt.Rows) { ListViewItem item = new ListViewItem(); item.Text = dr[0].ToString(); item.SubItems.Add(dr[1].ToString()); item.SubItems.Add(dr[2].ToString()); item.SubItems.Add(dr[3].ToString()); item.SubItems.Add(dr[4].ToString()); lst_docgia.Items.Add(item); } } - Viết mã lệnh để load form frDocgia private void vohieuhoa(bool bt) { groupBox1_ttdocgia.Enabled = bt; } Tập bài giảng Thực hành kỹ thuật lập trình 260 private void frDocGia_Load(object sender, EventArgs e) { vohieuhoa(true); load_listviewdocgia(); bnt_sua.Enabled = false; bnt_xoa.Enabled = false; } - Viết mã lệnh cho nút thêm: Khi thêm có kiểm tra trùng mã, kiểm tra dữ liệu nhập vào + Viết mã lệnh cho hàm kiểm tra dữ liệu nhập vào bool kiemtra_du_lieu() { if (kiemtra(txt_maDG.Text) || kiemtra(txt_tenDG.Text) || kiemtra( txt_coquan.Text) || kiemtra(txt_diachi.Text) || kiemtra(txt_sodienthoai.Text)) return false; // Kiem tra dien thoai hop le string dt = txt_sodienthoai.Text; if (dt.Length 10) return false; for (int i = 0; i < dt.Length; i++) if ((dt[i] '9')) return false; if (dt[0] != '0') return false; return true; } - Viết mã lệnh cho hàm kiểm tra chuỗi rỗng bool kiemtra(string s) { if (s.Trim().Length==0) return true; else return false; } - Viết mã lệnh cho hàm reset các textbox void reset() { txt_diachi.ResetText(); txt_sodienthoai.ResetText(); txt_tenDG.ResetText(); txt_maDG.ResetText(); txt_coquan.Text = ""; Tập bài giảng Thực hành kỹ thuật lập trình 261 } // kiểm tra trùng mã khi thêm vào bảng tbldocgia private Boolean kttrung(string ma) { string sql="select madocgia from tbldocgia"; DataTable dt=new DataTable(); dt = ketnoi.truyvan(sql); foreach( DataRow dr in dt.Rows) { if (string.Compare(ma.Trim(), dr[0].ToString().Trim()) == 0) return true; } return false; } // Mã lệnh cho nút thêm private void bnt_them_Click(object sender, EventArgs e) { if (string.Compare(bnt_them.Text, "Thêm") == 0) { vohieuhoa(true); txt_maDG.Focus(); bnt_them.Text = "Lƣu"; } else if (kiemtra_du_lieu() == true) { string madocgia, tendocgia, coquan, diachi, sodienthoai; madocgia = txt_maDG.Text; tendocgia = txt_tenDG.Text; coquan = txt_coquan.Text; diachi = txt_diachi.Text; sodienthoai = txt_sodienthoai.Text; if (kttrung(madocgia) == true) { MessageBox.Show("Trùng mã độc giả", "Thông báo"); txt_maDG.Focus(); Tập bài giảng Thực hành kỹ thuật lập trình 262 } else { string sql = "insert into tbldocgia values ('" + madocgia + "',N'" + tendocgia + "',N'" + coquan + "',N'" + diachi + "','" + sodienthoai + "')"; ketnoi.thucthi(sql); lst_docgia.Items.Clear(); load_listviewdocgia(); bnt_them.Text = "Thêm"; } } else { MessageBox.Show("Dữ liệu nhập vào không hợp lệ", "Thông báo lỗi"); bnt_them.Text = "Lƣu"; } } - Viết mã lệnh cho nút xóa private void bnt_xoa_Click(object sender, EventArgs e) { foreach (ListViewItem item in lst_docgia.SelectedItems) { if (item.Selected == true) { string sql="delete from tbldocgia where madocgia='"+ item.Text.ToString()+"'"; ketnoi.thucthi(sql); lst_docgia.Items.Clear(); load_listviewdocgia(); } } } - Viết mã lệnh cho nút sửa private void bnt_sua_Click(object sender, EventArgs e) { if (string.Compare(bnt_sua.Text, "Sửa") == 0) { vohieuhoa(true); txt_maDG.Enabled = false; txt_tenDG.Focus(); Tập bài giảng Thực hành kỹ thuật lập trình 263 bnt_sua.Text = "Cập nhật"; } else if (kiemtra_du_lieu()) { string madocgia, tendocgia, coquan, diachi, sodienthoai; madocgia = txt_maDG.Text; tendocgia = txt_tenDG.Text; coquan = txt_coquan.Text; diachi = txt_diachi.Text; sodienthoai = txt_sodienthoai.Text; string sql = "update tbldocgia set madocgia='" + madocgia + "',tendocgia=N'" + tendocgia + "',coquan=N'" + coquan + "',diachi=N'" + diachi + "',tel='" + sodienthoai + "' where madocgia='" + madocgia + "'"; ketnoi.thucthi(sql); lst_docgia.Items.Clear(); load_listviewdocgia(); bnt_sua.Text = "Sửa"; vohieuhoa(false); reset(); } else { MessageBox.Show("Dữ liệu sửa không hợp lệ"); bnt_sua.Text = "Cập nhật"; } } - Viết mã lệnh cho nút thoát private void btn_thoat_Click(object sender, EventArgs e) { this.Close(); } - Viết mã lệnh cho hàm đƣa dữ liệu vào ListView private void load_listviewdocgia() { string sql = "select *from tbldocgia"; DataTable dt = new DataTable(); dt = ketnoi.truyvan(sql); foreach (DataRow dr in dt.Rows) { ListViewItem item = new ListViewItem(); item.Text = dr[0].ToString(); item.SubItems.Add(dr[1].ToString()); item.SubItems.Add(dr[2].ToString()); Tập bài giảng Thực hành kỹ thuật lập trình 264 item.SubItems.Add(dr[3].ToString()); item.SubItems.Add(dr[4].ToString()); lst_docgia.Items.Add(item); } } - Viết mã lệnh cho sự kiện kích chọn phần tử trên ListView private void lst_docgia_SelectedIndexChanged(object sender, EventArgs e) { foreach (ListViewItem item in lst_docgia.SelectedItems) { if (item.Selected == true) { txt_maDG.Text=item.Text; txt_tenDG.Text=item.SubItems[1].Text; txt_coquan.Text=item.SubItems[2].Text; txt_diachi.Text=item.SubItems[3].Text; txt_sodienthoai.Text=item.SubItems[4].Text; } } bnt_xoa.Enabled = true; bnt_sua.Enabled = true; } - Viết mã lệnh cho sự kiện kích chuột vào nút tìm kiếm private void bnt_timkiem_Click(object sender, EventArgs e) { frtimkiemDG fr = new frtimkiemDG(); fr.ShowDialog(); } Bƣớc 6. Kết quả chạy Form thông tin độc giả FrDocgia Tập bài giảng Thực hành kỹ thuật lập trình 265 Hình 3. 29 Công việc 2: Thiết kế form Thông tin Sách theo yêu cầu 1. Phân tích yêu cầu: Theo yêu cầu trên thì phải có một form chứa: - Các đối tƣợng có nội dung “THÔNG TIN SÁCH”, “Mã sách”, “Tên sách”, “tên tác giả”, “nhà xuất bản”, “ Năm xuất bản”, “Số lƣợng” là các Label. - Các đối tƣợng ô nhập mã sách, tên sách, tên tác giả, tên nhà xuất bản, năm xuất bản, số lƣợng là các Textbox. - Các nút “Thêm” “Xóa”, “Sửa”, “Tìm kiếm”, “Thoát” là các Button 2. Hƣớng dẫn thực hiện Nhƣ vậy, để thực hiện công việc thiết kế form có tên FrSach theo yêu cầu, ngƣời lập trình thực các bƣớc nhƣ sau: Bƣớc 1. Mở C# Bƣớc 2. Tạo form mới Trên thanh menu, chọn Project/Add New Item. Xuất hiện cửa sổ Add New Item. Chọn loại Windows Form, sau đó nhập tên frDocgia vào ô Name rồi nhấn nút Add. Bƣớc 3. Thiết kế form theo mẫu và gắn các điều khiển vào Form a) Để tạo điều khiển label Thông tin độc giả theo yêu cầu thực hiện: Kéo điều khiển Label từ của sồ Toolbox vào form. Nháy phải chuột vào Label chọn Properties và thiết lập các thuộc tính cho Label này: Tập bài giảng Thực hành kỹ thuật lập trình 266 Text: THÔNG TIN SÁCH Font: Microsoft Sans Serif Font size: 18 Font STYLE: BOLD Trên menu chọn Format/Center in form/Horizontally để căn giữa. Thực hiện các thao tác tƣơng tự với các label khác nhƣ: Mã sách, tên sách, tên tác giả, nhà xuất bản, năm xuất bản, số lƣợng để thiết lập các thuộc tính về font name và font size. b) Để tạo điểu khiển txt_masach tƣơng ứng với nhãn Mã sách theo yêu cầu thực hiện: Kéo điều khiển Textbox từ cửa sổ Toolbox vào form. Nháy phải chuột vào textbox chon Properties và thiết lập các thuộc tính cho textbox này: Name: txt_masach Font name: Microsoft Sans Serif Font size: 9 Thực hiện các thao tác tƣơng tự với các textbox khác nhƣ: txt_tensach,txt_tenTG, txt_nhaXB, txt_namXB, txt_soluong. c) Để tạo điểu khiển button thêm theo yêu cầu thực hiện: Kéo điều khiển Button từ cửa sổ Toolbox vào form. Nháy phải chuột vào Button chọn Properties và thiết lập các thuộc tính cho Button này: Name: bt_them Font name: Microsoft Sans Serif Font size: 9 Làm tƣơng tự với các button còn lại Button Xóa với các thuộc tính Name: bt_xoa Font name: Microsoft Sans Serif Font size: 9 Button sửa với các thuộc tính Name: bt_sua Font name: Microsoft Sans Serif Font size: 9 Button Tìm kiếm với các thuộc tính Name: bt_timkiem Font name: Microsoft Sans Serif Font size: 9 Button thoát với các thuộc tính Tập bài giảng Thực hành kỹ thuật lập trình 267 Name: bt_thoát Font name: Microsoft Sans Serif Font size: 9 d) Kéo điều khiển Listview từ cửa sổ Toolbox vào form và thêm 6 cột dữ liệu là: Mã sách, Tên sách, tên tác giả, nhà XB, năm XB, số lƣợng Bƣớc 4. Kết quả thiết kế Form thông tin Sách Hình 3. 30 Bƣớc 5. Viết mã lệnh cho các điều khiển - Viết mã lệnh để load dữ liệu lên listview_sach private void load_listview_sach() { string sql = "select *from tblsach"; DataTable dt = new DataTable(); dt = ketnoi.truyvan(sql); foreach (DataRow dr in dt.Rows) { ListViewItem item = new ListViewItem(); item.Text = dr[0].ToString(); item.SubItems.Add(dr[1].ToString()); item.SubItems.Add(dr[2].ToString()); item.SubItems.Add(dr[3].ToString()); item.SubItems.Add(dr[4].ToString()); Tập bài giảng Thực hành kỹ thuật lập trình 268 item.SubItems.Add(dr[5].ToString()); listView1.Items.Add(item); } } Viết mã lệnh cho hàm vô hiệu hóa các textbox private void vohieuhoa(bool bt) { txt_masach.Enabled = bt; txt_nhaxb.Enabled = bt; txt_soluong.Enabled = bt; txt_tentacgia.Enabled = bt; txt_tensach.Enabled = bt; txt_namxb.Enabled = bt; } Viết mã lệnh để load form thông tin sách (frsach) void frsach_Load(object sender, EventArgs e) { load_listview_sach(); vohieuhoa(false); bnt_xoa.Enabled = false; bnt_sua.Enabled = false; } Viết lệnh cho sự kiện kích chuột vào nút sửa private void bnt_sua_Click(object sender, EventArgs e) { if (string.Compare(bnt_sua.Text, "Sửa") == 0) { vohieuhoa(true); txt_masach.Enabled = false; txt_tensach.Focus(); bnt_sua.Text = "Cập nhật"; } else if (kiemtra_du_lieu()) { string masach, tensach, tentg, nhaxb; int namxb, soluong; masach = txt_masach.Text; tensach = txt_tensach.Text; tentg = txt_tentacgia.Text; Tập bài giảng Thực hành kỹ thuật lập trình 269 nhaxb = txt_nhaxb.Text; namxb = int.Parse(txt_namxb.Text.ToString()); soluong = int.Parse(txt_soluong.Text.ToString()); string sql = "update tblsach set masach='" + masach + "',tensach=N'" + tensach + "',tentacgia=N'" + tentg + "',nhaxb=N'" + nhaxb + "',namxb=" + namxb + ",soluong=" + soluong + "where masach='" + masach + "'"; ketnoi.thucthi(sql); listView1.Items.Clear(); load_listview_sach(); bnt_sua.Text = "Sửa"; } else { MessageBox.Show("Dữ liệu sửa không hợp lệ"); bnt_sua.Text = "Cập nhật"; } } - Viết mã lệnh cho hàm reset private void reset() { txt_masach.ResetText(); txt_namxb.ResetText(); txt_nhaxb.ResetText(); txt_soluong.ResetText(); txt_tensach.ResetText(); txt_tentacgia.ResetText(); } - Viết mã lệnh để kiểm tra xâu là rỗng bool kiemtra(string s) { if (s.Trim().Length == 0) return true; else return false; } - Viết mã lệnh để kiểm tra dữ liệu nhập trong các textbox là rỗng hay không Tập bài giảng Thực hành kỹ thuật lập trình 270 bool kiemtra_du_lieu() { if (kiemtra(txt_masach.Text) || kiemtra(txt_tensach.Text) || kiemtra(txt_tentacgia.Text) || kiemtra(txt_nhaxb.Text) || kiemtra(txt_namxb.Text)||kiemtra(txt_soluong.Text)) return false; // Kiem tra số lƣợng, năm xuất bản string sl = txt_soluong.Text; for (int i = 0; i < sl.Length; i++) if ((sl[i] '9')) return false; if (sl[0] == '0') return false; string namxb = txt_namxb.Text; try { int.Parse(namxb.ToString()); } catch {//MessageBox.Show("Nam xuất bản nhập ko đúng","Thông báo lỗi") return false; } return true; } Viết mã lệnh kiểm tra trùng mã sách khi thêm private Boolean kttrung(string ma) { string sql = "select masach from tblsach"; DataTable dt = new DataTable(); dt = ketnoi.truyvan(sql); foreach (DataRow dr in dt.Rows) { if (string.Compare(ma.Trim(), dr[0].ToString().Trim()) == 0) return true; } return false; } Viết mã lệnh cho sự kiện click chuột vào nút thêm private void bnt_them_Click(object sender, EventArgs e) { if (string.Compare(bnt_them.Text, "Thêm") == 0) { vohieuhoa(true); txt_masach.Focus(); bnt_them.Text = "Lƣu"; Tập bài giảng Thực hành kỹ thuật lập trình 271 reset(); } else if (kiemtra_du_lieu() == true) { string masach, tensach, tentg, nhaxb; int namxb, soluong; masach = txt_masach.Text; tensach = txt_tensach.Text; tentg = txt_tentacgia.Text; nhaxb = txt_nhaxb.Text; namxb = int.Parse(txt_namxb.Text.ToString()); soluong = int.Parse(txt_soluong.Text.ToString()); if (kttrung(masach) == true) { MessageBox.Show("Trùng mã sách", "Thông báo"); txt_masach.Focus(); } else { string sql = "insert into tblsach values ('" + masach + "',N'" + tensach + "',N'" + tentg + "',N'" + nhaxb + "'," + namxb + "," + soluong + ")"; ketnoi.thucthi(sql); listView1.Items.Clear(); load_listview_sach(); bnt_them.Text = "Thêm"; } } else { MessageBox.Show("Dữ liệu nhập vào không hợp lệ", "Thông báo lỗi"); bnt_them.Text = "Lƣu"; } } Tập bài giảng Thực hành kỹ thuật lập trình 272 - Viết mã lệnh cho sự kiện click chuột vào listview private void listView1_Click(object sender, EventArgs e) { bnt_xoa.Enabled = true; bnt_sua.Enabled = true; vohieuhoa(false); } Viết mã lệnh cho sự kiện click chuột vào nút xóa private void bnt_xoa_Click(object sender, EventArgs e) { //ListViewItem item = listView1.SelectedItems[0]; foreach (ListViewItem item in listView1.SelectedItems) { string masach = item.Text; string sql = "delete from tblsach where masach='" + masach + "'"; ketnoi.thucthi(sql); } listView1.Items.Clear(); load_listview_sach(); } Viết mã lệnh cho sự kiện chọn phần tử trên listview_sach private void listView1_sach_SelectedIndexChanged(object sender, EventArgs e) { bnt_sua.Enabled = true; bnt_xoa.Enabled = true; foreach(ListViewItem item in listView1.SelectedItems) if(item.Selected==true) { txt_masach.Text = item.Text; txt_tensach.Text = item.SubItems[1].Text; txt_tentacgia.Text = item.SubItems[2].Text; txt_nhaxb.Text = item.SubItems[3].Text; txt_namxb.Text = item.SubItems[4].Text; txt_soluong.Text = item.SubItems[5].Text; //txt_masach.Enabled = true; vohieuhoa(true); } } Viết mã lệnh cho sự kiện click chuột vào nút thoát Tập bài giảng Thực hành kỹ thuật lập trình 273 private void btn_thoat_Click(object sender, EventArgs e) { this.Close(); } Bƣớc 6. Kết quả chạy Form FrSach Hình 3. 31 Công việc 3: Thiết kế Form tìm kiếm thông tin a) Form Tìm kiếm độc giả (Frtimkiem_DG) 1. Phân tích yêu cầu: Theo mẫu trên thì phải có một form chứa: - Các đối tƣợng có nội dung “Tìm kiếm độc giả”, “Chọn khóa tìm kiếm”, “Mã độc giả”, “Tên độc giả” là các Label. - Đối tƣợng để chọn khóa tìm kiếm là comboBox: có 2 lựa chọn là Theo Mã độc giả, theo tên độc giả. - Nếu chọn khóa tìm kiếm là Mã độc giả thì Sau đó sẽ hiện lên label “Mã độc giả” và sẽ nhập hoặc chọn mã độc giả cần tìm kiếm trong comboBox_MaDG - Nếu chọn khóa tìm kiếm là tên độc giả thì sau đó sẽ hiện label “Tên độc giả” và tên độc giả cần tìm kiếm sẽ đƣợc nhập trong textbox tên độc giả(txt_tenDG) - Các nút “Xem kết quả” “Thoát” là các Button. - Đối tƣợng hiển thị kết quả tìm kiếm là ListView. 2. Hƣớng dẫn thao tác: Tập bài giảng Thực hành kỹ thuật lập trình 274 Để thực hiện việc thiết kế form có tên FrmTimkiem_DG truy xuất dữ liệu trong bảng tblDocgia ngƣời lập trình đã thực hiện các bƣớc sau: Bƣớc 1. Mở C# Bƣớc 2. Tạo form mới với tên FrTimkiem_DG bằng cách thực hiện các thao tác: Trên thanh menu, chọn Project/Add New Item. Xuất hiện cửa sổ Add New Item. Chọn loại Windows Forms, sau đó nhập tên FrTimkiem_DG vào ô Name rồi nhấn nút Add. Bƣớc 3. Thiết kế các điều khiển: tƣơng tự giống các công việc ở trên Bƣớc 4. Kết quả thiết kế Form frTimkiem_DG Hình 3. 32 Bƣớc 5. Viết mã lệnh cho các nút chức năng -Viết mã lệnh để load form frTimkiem_DG private void frtimkiem_Load(object sender, EventArgs e) { cmb_madocgia.Focus(); label_tendocgia.Visible = false; label_madocgia.Visible = false; cmb_madocgia.Visible = false; txt_tendocgia.Visible = false; } -Viết mã lệnh để load dữ liệu lên listview private void load_listview(string sql) { DataTable dt = new DataTable(); dt = ketnoi.truyvan(sql); // r = dt.Rows.Count; Tập bài giảng Thực hành kỹ thuật lập trình 275 foreach (DataRow dr in dt.Rows) { ListViewItem item = new ListViewItem(); item.Text = dr[0].ToString(); for (int i = 1; i < dt.Columns.Count; i++) { item.SubItems.Add(dr[i].ToString()); } listView1.Items.Add(item); } } - Viết mã lệnh để load dữ liệu lên ComboBox Mã độc giả private void load_combo_madocgia() { DataTable dt = new DataTable(); dt=ketnoi.truyvan("select * from tblDocGia"); foreach (DataRow dr in dt.Rows) { cmb_madocgia.Items.Add(dr[0]); } } - Viết mã lệnh cho sự kiện lựa chọn khóa tìm kiếm private void cmb_khoatk_SelectedValueChanged(object sender, EventArgs e) { if (cmb_khoatk.SelectedItem == cmb_khoatk.Items[0]) { label_tendocgia.Visible = false; txt_tendocgia.Visible = false; label_madocgia.Visible = true; cmb_madocgia.Visible = true; cmb_madocgia.Focus(); load_combo_madocgia(); } else { Tập bài giảng Thực hành kỹ thuật lập trình 276 cmb_madocgia.Visible = false; label_madocgia.Visible = false; label_tendocgia.Visible = true; txt_tendocgia.Visible = true; txt_tendocgia.Focus(); } } - Viết mã lệnh cho sự kiện lựa chọn mã độc giả trong comboBox mã độc giả private void cmb_madocgia_SelectedValueChanged(object sender, EventArgs e) {//int r; string sql = "select * from tblDocGia where MaDocgia='" + cmb_madocgia.Text + "'"; listView1.Items.Clear(); load_listview(sql); } - Viết mã lệnh cho sự kiện click của nút btn_xemkq private void bnt_xemkq_Click(object sender, EventArgs e) { if (cmb_khoatk.SelectedItem ==cmb_khoatk.Items[0]) { string sql = "select * from tblDocGia where MaDocgia='" + cmb_madocgia.Text + "'"; listView1.Items.Clear(); load_listview(sql); } else { string sql = "select * from tblDocGia where TenDocgia like N'%" + txt_tendocgia.Text.ToString() + "%'"; listView1.Items.Clear(); //int r; load_listview(sql); } } Viết mã lệnh cho sự kiện click của nút btn_thoat Tập bài giảng Thực hành kỹ thuật lập trình 277 private void btn_thoat_Click(object sender, EventArgs e) { this.Close(); } Bƣớc 6. Kết quả chạy Form Frtimkiem_DG +) Kết quả tìm kiếm theo mã độc giả Hình 3. 33 +) Kết quả tìm kiếm theo mã độc giả Hình 3. 34 b) Form Tìm kiếm sách (Fr_timkiemSach) 1. Phân tích yêu cầu: Theo mẫu trên thì phải có một form chứa: Tập bài giảng Thực hành kỹ thuật lập trình 278 - Các đối tƣợng có nội dung “Tìm kiếm Sách”, “Chọn khóa tìm kiếm”, “Mã sách”, “Tên sách” là các Label. - Đối tƣợng để chọn khóa tìm kiếm là comboBox: có 2 lựa chọn là Theo Mã sách, theo tên sách. - Nếu chọn khóa tìm kiếm là Mã độc giả thì Sau đó sẽ hiện lên label “Mã sách” và sẽ nhập hoặc chọn mã độc giả cần tìm kiếm trong comboBox_Masach - Nếu chọn khóa tìm kiếm là tên sách thì sau đó sẽ hiện label “Tên sách” và tên sách cần tìm kiếm sẽ đƣợc nhập trong textbox tên sách(txt_tensach) - Các nút “Xem kết quả” “Thoát” là các Button. - Đối tƣợng hiển thị kết quả tìm kiếm là ListView. 2. Hƣớng dẫn thao tác: Để thực hiện việc thiết kế form có tên Fr_timkiemSach truy xuất dữ liệu trong bảng tblSach ngƣời lập trình đã thực hiện các bƣớc sau: Bƣớc 1. Mở C# Bƣớc 2. Tạo form mới với tên Fr_TimkiemSach bằng cách thực hiện các thao tác: Trên thanh menu, chọn Project/Add New Item. Xuất hiện cửa sổ Add New Item. Chọn loại Windows Forms, sau đó nhập tên Fr_TimkiemSach vào ô Name rồi nhấn nút Add. Bƣớc 3. Thiết kế các điều khiển: tƣơng tự giống các công việc ở trên Bƣớc 4. Kết quả thiết kế Form fr_TimkiemSach Hình 3. 35 Bƣớc 5. Viết mã lệnh cho các nút chức năng -Viết mã lệnh để load form frTimkiem_DG private void Form4_Load(object sender, EventArgs e) { Tập bài giảng Thực hành kỹ thuật lập trình 279 cmb_masach.Focus(); label_tensach.Visible = false; label_masach.Visible = false; cmb_masach.Visible = false; } -Viết mã lệnh để load dữ liệu lên listview private void load_listview(string sql) { DataTable dt = new DataTable(); dt = ketnoi.truyvan(sql); // r = dt.Rows.Count; foreach (DataRow dr in dt.Rows) { ListViewItem item = new ListViewItem(); item.Text = dr[0].ToString(); for (int i = 1; i < dt.Columns.Count;i++) { item.SubItems.Add(dr[i].ToString()); } listView1.Items.Add(item); } } - Viết mã lệnh để load dữ liệu lên ComboBox mã sách private void load_combo_masach() { DataTable dt = new DataTable(); dt = ketnoi.truyvan("select * from tblSach"); foreach (DataRow dr in dt.Rows) { cmb_masach.Items.Add(dr[0]); } } - Viết mã lệnh cho sự kiện lựa chọn khóa tìm kiếm private void cmb_khoatk_SelectedIndexChanged(object sender, EventArgs e) { Tập bài giảng Thực hành kỹ thuật lập trình 280 if (cmb_khoatk.SelectedItem == cmb_khoatk.Items[0]) { label2_tensach.Visible = false; txt_tensach.Visible = false; label_masach.Visible = true; cmb_masach.Visible = true; cmb_masach.Focus(); load_combo_masach(); } else { cmb_masach.Visible = false; label_masach.Visible = false; label2_tensach.Visible = true; txt_tensach.Visible = true; txt_tensach.Focus(); } } - Viết mã lệnh cho sự kiện click của nút btn_xemkq private void bnt_xemkq_Click(object sender, EventArgs e) {// tìm theo mã sách if (cmb_khoatk.SelectedItem == cmb_khoatk.Items[0]) { string sql = "select * from tblSach where MaSach='" + cmb_masach.Text + "'"; listView1_sach.Items.Clear(); load_listview(sql); } else // tìm theo tên sách { string sql = "select * from tblSach where TenSach like N'%" + txt_tensach.Text.ToString() + "%'"; listView1_sach.Items.Clear(); load_listview(sql); } } - Viết mã lệnh cho sự kiện click của nút btn_thoat private void btn_thoat_Click(object sender, EventArgs e) { this.Close(); } Bƣớc 6. Kết quả chạy Form Fr_timkiemSach Tập bài giảng Thực hành kỹ thuật lập trình 281 a) Kết quả form Fr_timkiemSach theo mã sách Hình 3. 36 b) Kết quả của form Fr_timkiemSach tìm kiếm theo tên sách Hình 3. 37 Công việc 4: Thiết kế form quản lý chung cho ứng dụng vừa xây dựng 1. Phân tích yêu cầu: Theo mẫu trên thì phải có một form có menu 2. Hƣớng dẫn thao tác: Để thực hiện việc thiết kế form quản lý theo yêu cầu: Nháy phải chuột vào dự án đang xây dựng ở cửa sổ Solution Explore, chọn Add/Windows Form. Xuất hiện cửa sổ Add New Item Tập bài giảng Thực hành kỹ thuật lập trình 282 Hình 3. 38 Nhập tên Fr_Main.cs vào ô Name. Nháy phải chuột vào form chọn Properties và thiết lập các thông số của form theo đúng yêu cầu: Text: Quản lý bán hàng WindowState: Maximized KeyPreview: True IsMdiContainer: true Kết quả thiết kế: Hình 3. 39 Công việc 5: Thiết kế menu trên form Fr_Main 1. Phân tích yêu cầu Theo yêu cầu thì trên Form Fr_Main có một menu strip 2. Hƣớng dẫn thao tác Để thực hiện việc tạo menu theo đúng yêu cầu: Chọn các mục có sẵn trên menu của form Fr_Main nhấn Delete để xóa các mục chọn này. Nháy phải chuột vào menu chọn Edit Items xuất hiện cửa sổ Items Collection Editor Tập bài giảng Thực hành kỹ thuật lập trình 283 Hình 3. 40 Lựa chọn kiểu MenuItem từ danh sách Select item and add to list below nhấn Add để thêm mới một mục chọn vào danh sách mục chọn ở khung Members bên dƣới. Chọn menu vừa tạo và thay đổi các thuộc tính của menu ở khung bên phải: Text: Thông tin sách DropDownItems: (Collection) Thực hiện tƣơng tự với các menu Thông tin độc giả, Tìm kiếm, Thoát. Thực hiện tạo các menu con cho menu tìm kiếm thông tin nhƣ sau: Nhấn vào biểu tƣợng bên cạnh thuộc tính (Collection) của menu để tạo các menu con của nó. Cửa sổ Items Collection Editor xuất hiện. Nhấn Add để tạo mới một menu con. Lựa chọn menu con vừa tạo và thiết lập các thuộc tính cho meu ở khung bên phải: Text: Tìm kiếm Sách DropDownItems: (Collection) Tƣơng tự với menu tìm kiếm sách, tìm kiếm độc giả Nhấn OK để hoàn thành việc tạo menu cho form Fr_Main. 3. Kết quả thiết kế form Menu (Fr_Main) Tập bài giảng Thực hành kỹ thuật lập trình 284 Hình 3. 41 Công việc 6: Gắn các chức năng tƣơng ứng vào các mục chọn cho menu vừa tạo trên form. 1. Phân tích yêu cầu Theo yêu cầu của đề bài, ngƣời lập trình phải gắn các Form ở các công việc trên vào các menu tƣơng ứng với nó. 2. Hƣớng dẫn thao tác Để thực hiện việc tạo menu theo đúng yêu cầu: Đƣa chuột đến mục chọn cần gán thao tác, nhấp đúp chuột vào mục chọn để chuyển về cửa sổ cho phép viết mã lệnh tƣơng ứng với mục chọn đó. Đoạn mã lệnh gán chức năng mở form FrDocgia khi nhấp vào mục chọn Thông tin độc giả trên thanh menu nhƣ sau: private void thôngTinChiTiếtĐộcGiảToolStripMenuItem_Click(object sender, EventArgs e) { frDocGia fr = new frDocGia(); fr.ShowDialog(); } Thực hiện tƣơng tự với các mục chọn khác trên thanh menu và thực hiện thực thi chƣơng trình. 3.3. Bài tập thực hành Bài tập số 1. Để quản lý việc phân công giảng dạy trong một học kỳ cho giáo viên của khoa CNTT, khoa yêu cầu thiết kế một cơ sở dữ liệu quan hệ có tên QLYGD.MDF trong đó có các bảng và có lƣợc đồ nhƣ sau: tblGiaoVien(MaGV, HoTen, BoMon, DMGD) Tập bài giảng Thực hành kỹ thuật lập trình 285 tblMonHoc(Mamon, Tenmon, SoTinChi) tblPhanCong(MaGV, MaMon, LHP, SSO) Trong đó: MaGV: Mã giáo viên; Hoten: Họ tên giáo viên; BoMon: Tên bộ môn; DMGD: Định mức giảng dạy; Mamon: Mã môn học; Tenmon: Tên môn học; SoTinChi: Số tín chỉ; MaGV: Mã giáo viên; LHP: Tên lớp học phần; SSO: Sĩ số lớp học phần. Công việc 1: Tạo cơ sở dữ liệu trên SQL Server. Công việc 2: 1. Thiết kế form dạng bản ghi thực hiện việc cập nhật dữ liệu cho trong bảng tblGiaoVien 2. Thiết kế form dạng lƣới thực hiện việc cập nhật dữ liệu trong bảng tblMonHoc 3. Thiết kế form dạng một nhiều thực hiện việc cập nhật dữ liệu trong tệp tblPhanCong 4. Thiết kế các Form tìm kiếm thông tin Giáo viên, thông tin môn học và thông tin về phân công giảng dạy. 5. Thiết kế Form chung và gọi các Form đã tạo ở các công việc trên Bài tập số 2. Để xây dựng một chƣơng trình quản lý tài sản của các đơn vị trong một cơ quan. Thủ trƣởng cơ quan yêu cầu đơn vị thiết kế tổ chức một cơ sở dữ liệu có các bảng và lƣợc đồ quan hệ nhƣ sau: tblDonVi(MaDV, TenDV, ViTri, SoNhanVien) tblTaiSan(MaTS, TenTS, DVT, HSD) tblQuanLy(MaDV, MaTS, SoLuong, NgayCap, TinhTrang) Trong đó: MaDV: Mã đơn vị; TenDV: Tên đơn vị ViTri: Vị trí; SoNhanVien: Số nhân viên; MaTS: Mã tài sản; Tập bài giảng Thực hành kỹ thuật lập trình 286 TenTS: Tên tài sản; DVT: Đơn vị tính; HSD: Hạn sử dụng; SoLuong: Số lƣợng; NgayCap: Ngày cấp; TinhTrang: Tình trạng. Công việc 1: Tạo cơ sở dữ liệu trên. Công việc 2. Là một ngƣời lập trình, hãy thiết kế các form để thực hiện cập nhật dữ liệu cho các bảng trên: 1. Thiết kế form dạng bản ghi thực hiện việc cập nhật dữ liệu tài sản. 2. Thiết kế form dạng lƣới thực hiện việc cập nhật dữ liệu đơn vị sử dụng 3. Thiết kế form dạng một nhiều thực hiện việc cập nhật dữ liệu cho bảng tblQuanLy. 4. Thiết kế các Form tìm kiếm thông tin đơn vị, thông tin tài sản và thông tin quản lý. 5. Thiết kế Form chung và gọi các Form đã tạo ở các công việc trên Bài tập số 3. Cho cơ sở dƣ̃ liêụ Quản lý điểm gồm các bảng : tblSinhVien(MaSV, Hoten, Ngaysinh, Noisinh, Gioitinh, Diachi, Makhoa, LopNC) tblKhoa(Makhoa, Tenkhoa) tblLopHP(MaLopHP, TenLopHP, MaSV, MaMon) tblMonHoc(Mamon, Tenmon, Sohocphan, Giaovien) tblDiem(MaLopHP, MaSV, Diem, HocKy) Trong đó: MaSV: Mã sinh viên; Hoten: Họ tên sinh viên; Ngaysinh: Ngày sinh; Noisinh: Nơi sinh; Gioitinh: Giới tính; Diachi: Địa chỉ; Makhoa: Mã khoa; LopNC: Tên lớp niên chế; Tenkhoa: Tên khoa; MaLopHP: Mã lớp học phần. TenLopHP: Tên lớp học phần. Mamon: Mã môn học; Tenmon: Tên môn học; Tập bài giảng Thực hành kỹ thuật lập trình 287 Sohocphan: Số học phần; Giaovien: Họ tên giáo viên giảng dạy; Diem: Điểm của môn học tƣơng ứng với từng sinh viên; HocKy: Học kỳ có giá trị là số nguyên bắt đầu từ 1. Công việc 1: Tạo cơ sở dữ liệu trên. Công việc 2. Thiết kế các form để thực hiện cập nhật dữ liệu cho các bảng trên: 1. Thiết kế form dạng bản ghi thực hiện việc cập nhật dữ liệu cho bảng tblSinhVien. 2. Thiết kế form dạng lƣới thực hiện việc cập nhật dữ liệu cho bảng tblKhoa. 3. Thiết kế form dạng lƣới thực hiện việc cập nhật dữ liệu cho bảng tblMonHoc. 4. Thiết kế form dạng một nhiều thực hiện việc cập nhật dữ liệu cho bảng tblDiem. 5. Thiết kế các Form tìm kiếm thông tin sinh viên, thông tin khoa, thông tin về môn học và điểm của sinh viên. 6. Thiết kế Form chung và gọi các Form đã tạo ở các công việc trên 3.4. Bài tập về nhà Bài 1 Cho cơ sở dƣ̃ liêụ Quản lý khách saṇ của một khách sạn gồm 3 bảng: Phong(MaPH, LoaiP, HangP, DonGia, TinhTrang): Lƣu thông tin về các phòng của khách sạn. KH(SoCMT, Hoten, Gioitinh): Lƣu thông tin về khách hàng thuê phòng. ThueP(SoCMT, MaPH, NgayDen, NgayDi, TienSDDV): Lƣu thông tin về quá trình thuê phòng của khách hàng Trong đó: MaPH: mã phòng; LoaiP: Loại phòng (Phòng đơn, Phòng đôi, Phòng ba); HangP: Hạng phòng (Thƣờng, VIP, Sang); DonGia: Đơn giá; TinhTrang: Tình trạng phòng(Có, Không); SoCMT: Số chứng minh thƣ nhân dân của khách hàng; Hoten: Họ và tên khách hàng; Gioitinh: Giới tính (Nam, Nữ); NgayDen: Ngày đến; NgayDi: Ngày đi; Tiền SDDV: Tiền sử dụng dịch vụ của khách hàng; Công việc 1: Tập bài giảng Thực hành kỹ thuật lập trình 288 Sƣ̉ duṇg SQL Server thƣc̣ hiêṇ các công việc sau: a) Tạo cấu trúc các bảng trên . b) Nhâp̣ vào mỗi bảng ít nhất 3 bản ghi. c) Tạo mối quan hệ giữa các bảng dữ liệu. Yêu cầu: - Chọn kiểu dữ liệu cho các trƣờng phù hợp giúp dễ dàng xử lý dữ liệu - Mỗi bảng phải chỉ ra đƣợc khóa chính - Dữ liệu nhập vào phải phù hợp với thực tế. Công việc 2: Tạo Form quản lý phòng dùng để nhập dữ liệu cho bảng “Phong” theo mẫu sau : Hình 3. 42 Yêu cầu : a) Combobox loại phòng nhận 3 giá trị: phòng đơn, phòng đôi, phòng ba. Combobox hạng phòng nhận 3 giá trị: Thƣờng, Sang, Vip. Khi Load Form: Thông tin trong bảng “Phong” đƣơc̣ hiển thi ̣ lên lƣới . Khi kích choṇ một dòng trên lƣới thì các thông tin của dòng đó đƣợc hiển thị lên các Textbox và các Combobox tƣơng ứng . b) Nút Thêm: Phải bổ sung đƣợc bản ghi vào bảng “Phong” đồng thời cập nhật thông tin vừa nhập lên lƣới; không cho phép nhập trùng mã phòng, tình trạng phòng mặc định là “Không”. Tập bài giảng Thực hành kỹ thuật lập trình 289 c) Nút Sƣ̉a: Phải sửa đƣợc thông tin của bản ghi đƣợc chọn vào bảng “Phong” đồng thời cập nhật thông tin vừa sửa lên lƣới; không cho phép sửa mã phòng. d) Nút Xóa: Phải xóa đƣợc tất cả các dòng đƣợc chọn đồng thời cập nhật thông tin vừa xóa lên lƣới. e) Nút Thoát: Phải hiển thị đƣợc hộp thoại xác nhận có muốn thoát không và xử lý đƣợc việc đóng hoặc hủy việc đóng Form. Công việc 3: Tạo Form quản lý khách thuê phòng dùng để nhập thông tin thuê phòng theo mâũ sau: Hình 3. 43 Yêu cầu : a) Combobox Tình trạng phòng nhận 2 giá trị: Có, Không; Combobox loại phòng nhận 3 giá trị : Phòng đơn , Phòng đôi , Phòng ba ; Combobox giới tính nhận 2 giá trị : Nam, Nữ. Khi Load Form : Thông tin của những khách thuê phòng chƣa thanh toán đƣơc̣ hiển thi ̣ lên lƣới Chi tiết khách hàng . Khi kích choṇ một dòng trên lƣới Chi tiết Tập bài giảng Thực hành kỹ thuật lập trình 290 khách hàng thì hiển thi ̣ thông tin khách hàng đó lên các Textbox và Combobox tƣơng ứng trong thông tin khách thuê phòng. b) Nút Xem theo tiǹh traṇg : Khi ngƣời dùng choṇ trong Combo Tình traṇg phòng rồi nhấn vào nút Xem theo tiǹh traṇg , thông tin về các phòng se ̃đƣơc̣ hiển thi ̣ lên lƣới Chi tiết phòng. c) Nút Xem theo loại phòng : Khi ngƣời dùng choṇ trong Combo Loại phòng rồi nhấn vào nút Xem theo loại phòng , thông tin về các phòng se ̃đƣơc̣ hiển thi ̣ lên lƣới Chi tiết phòng. d) Nút Nhập: Đƣa toàn bộ các Mã Phòng có Tình trạng là “Không” vào Combobox Mã Phòng. Nút nhập phải bổ sung đƣợc các thông tin về khách hàng vào bảng “KH” trong cơ sở dữ liệu nếu khách hàng đó chƣa có trong bảng “KH”; thông tin về thuê phòng vào bảng “ThueP” và hiển thị lên lƣới . Yêu cầu : ngày đến lấy theo ngày hiện tại; ngày đi và tiền sử dụng dịch vụ để trống; đồng thời cập nhật Tình trạng của phòng đó trong bảng “Phong” thành “Có”. e) Nút Sƣ̉a: Phải sửa đƣợc các thông tin về họ tên, giới tính của bản ghi đƣợc chọn trên lƣới chi tiết khách hàng vào bảng „KH‟ và hiện thông tin vừa sửa lên lƣới. f) Nút Xóa: Phải xóa đƣợc thông tin thuê phòng trong bảng “ThueP” của các dòng đƣợc chọn trên lƣới; cập nhật Tình trạng của các phòng đó trong bảng “Phong” thành “Không”; đồng thời cập nhật thông tin sau khi xóa lên lƣới. g) Nút Thoát: Phải hiển thị đƣợc hộp thoại xác nhận có muốn thoát không và xử lý đƣợc việc đóng hoặc hủy việc đóng Form. Bài 2 Cho cơ sở dƣ̃ liêụ Quản lý điểm gồm các bảng : tblSinhVien(MaSV,Hoten,Ngaysinh,Noisinh,Gioitinh,Diachi,Makhoa) tblKhoa(Makhoa, Tenkhoa) tblMonHoc(Mamon, Tenmon, Makhoa, Sohocphan, Giaovien) tblDiem(Mamon, MaSV, Diem) Công việc 1 Hãy sử dụng hệ quản trị CSDL SQL Server thực hiện các yêu cầu sau: a) Tạo các bảng trên. b) Tạo các ràng buộc giữa các bảng . c) Nhâp̣ vào mỗi bảng từ 5 đến 10 dòng dữ liệu. Công việc 2: Thiết kế Form frmMain theo mẫu sau: Tập bài giảng Thực hành kỹ thuật lập trình 291 Hình 3. 44 Viết lệnh sao cho khi ngƣời sử dụng chọn thực đơn Quản lý  Quản lý điểm, Quản lý môn học thì hệ thống mở Form frmDiem, frmMonHoc tƣơng ứng. Công việc 3: Sƣ̉ duṇg cơ sở dƣ̃ liêụ ở câu 1, tạo form theo mẫu và thực hiện các yêu cầu sau : Hình 3. 45 Yêu cầu : a) Khi chƣơng trình thực thi frmMonHoc se ̃hiển thị toàn bộ danh sách môn học đƣợc nạp từ cơ sở dƣ̃ liêụ vào Listview đồng thời nút Xóa , Sửa và các TextBox, combobox sẽ mờ đi (vô hiệu hóa). b) Khi click vào nút “Thêm” thì nó trở thành nút “Lƣu”, các TextBox và combobox sẽ sáng (cho phép hoạt động) để nhập thông tin môn học (có kiểm tra trùng mã môn học), toàn bộ mã khoa trong bảng tblkhoa đƣợc load Tập bài giảng Thực hành kỹ thuật lập trình 292 lên combobox mã khoa. Khi Click vào nút “Lƣu” thì dữ liệu vừa nhập sẽ đƣợc lƣu lại trong cơ sở dữ liệu đồng thời cập nhật lại ListView. c) Nút “Xóa” sẽ sáng khi ngƣời sử dụng click vào ListView và khi ngƣời sử dụng nhấn nút xóa thì sẽ xóa môn học khỏi CSDL và cập nhật lại ListView. d) Nút “Sửa” sẽ sáng lên khi ngƣời dùng click vào ListView và nút sửa cho phép sửa thông tin của phần tử đƣơc̣ chọn và lƣu laị trong cơ sở dƣ̃ liêụ. Công việc 4: Sƣ̉ duṇg cơ sở dƣ̃ liêụ ở câu 1, tạo form theo mẫu và thực hiện các yêu cầu sau : Hình 3. 46 Yêu cầu : 1. Khi chƣơng trình thực thi frmDiem sẽ hiển thị toàn bộ danh sách điểm của sinh viên đƣợc nạp từ cơ sở dƣ̃ liêụ vào Listview , khi ngƣời dùng kích vào listview thì thông tin của phần tử đang chọn hiện lên trên textbox và combobox tƣơng ứng. 2. Xây dựng chức năng “Thêm” để thêm thông tin điểm vào trong cơ sở dƣ̃ liêụ và cập nhật lại trong ListView . Lƣu ý: Nếu dữ liệu nhập không đúng chƣơng trình sẽ báo lỗi và không thực hiện chƣ́c năng “Thêm” . 3. Xây dựng chức năng “XÓA” xóa tất cả các phần tử đƣợc chọn trên listview và cập nhật lại listview sau khi xóa. 4. Xây dƣṇg chƣ́c năng “SỬA” cho phép sửa thông tin của phần tử đƣơc̣ chọn và lƣu laị trong cơ sở dƣ̃ liêụ, cập nhật lại trên listview. 5. Xây dƣṇg chƣ́c năng “TÌM KIẾM” sinh viên theo khóa tìm kiếm là : MaSV, TênSV. Tập bài giảng Thực hành kỹ thuật lập trình 293 Bài 3 Để quản lý kinh doanh tại một cửa hàng, ta tạo ra một cơ sở dữ liệu có tên là QLKD có 7 bảng: Bảng nhà cung cấp: NCC Tên trƣờng Diễn giải Mancc Mã nhà cung cấp Tenncc Tên nhà cung cấp DiachiNCC Địa chỉ nhà cung cấp Bảng hóa đơn mua: HDMUA Tên trƣờng Diễn giải SoHD Số hóa đơn Ngaymua Ngày mua Mancc Mã nhà cung cấp Bảng Chi tiết hóa đơn mua hàng: CHITIETMUA Tên trƣờng Diễn giải SoHD Số hóa đơn Mahang Mã hàng Soluongmua Số lƣợng mua Dongiamua Đơn giá mua Bảng Hàng: HANG Tên trƣờng Diễn giải Mahang Mã hàng Tenhang Tên hàng DVT Đơn vị tính Bảng Hóa đơn bán: HDBAN Tên trƣờng Diễn giải SoHDB Số hóa đơn bán Ngayban Ngày bán Makh Mã khách Bảng Chi tiết hóa đơn bán hàng: CHITIETBAN Tên trƣờng Diễn giải SoHDB Số hóa đơn bán Tập bài giảng Thực hành kỹ thuật lập trình 294 Mahang Mã hàng Soluongban Số lƣợng bán Dongiaban Đơn giá bán Bảng Khách: KHACH Tên trƣờng Diễn giải Makh Mã khách Tenkh Tên khách Diachikh Địa chỉ khách Công việc 1. Tạo cơ sở dữ liệu QLKD và 7 bảng trên (kiểu dữ liệu của các trƣờng tự chọn cho phù hợp), Tạo Diagram (sơ đồ) kết nối giữa các bảng trong cơ sở dữ liệu , Nhâp̣ vào mỗi bảng ít nhất 3 bản ghi. Công việc 2 Tạo các form thực hiện việc mua hàng trong cơ sở dữ liệu QLKD; trên form có lƣới hiển thị dữ liệu và các nút thêm, sửa, lƣu, xóa, thoát. Công việc 3: a) Tạo Form thống kê hàng mua đƣa ra các thông tin: Tên hàng, đơn vị tính, nhà cung cấp, ngày mua, số lƣợng mua, đơn giá mua, thành tiền (số lƣợng mua*đơn giá mua). b) Tạo Form thống kê hàng bán đƣa ra các thông tin: Tên hàng, đơn vị tính, khác hàng, ngày bán, số lƣợng bán, đơn giá bán, thành tiền (số lƣợng bán*đơn giá bán). c) Tạo Form tìm kiếm thông tin hàng bán theo số hóa đơn bán hàng. Công việc 4: Tạo giao diện chính của chƣơng trình gồm menu (hoặc link menu) gọi thực hiện các phần yêu cầu trong các Công việc 2 và Công việc 3 ở trên Bài 4 Để quản lý dự án của một Viện Công nghệ thông tin, ta tạo ra một cơ sở dữ liệu có tên là QLDA có 5 bảng: Bảng Dự án: DUAN Tên trƣờng Diễn giải Mada Mã dự án Tenda Tên dự án Congviecda Công việc thực hiện dự án Songayda Số ngày làm dự án Bảng nhân viên: NHANVIEN Tập bài giảng Thực hành kỹ thuật lập trình 295 Tên trƣờng Diễn giải Manv Mã nhân viên Hoten Tên nhân viên SoCMTND Số chứng minh nhân dân Ngaysinh Ngày sinh Gioitinh Giới tính Diachi Địa chỉ Bảng Chuyên môn: CHUYENMON Tên trƣờng Diễn giải Manv Mã nhân viên Chuyenmon Chuyên môn Bảng Trình độ: TRINHDO Tên trƣờng Diễn giải Manv Mã nhân viên Trinhdo Trình độ Bảng Nhân viên – dự án: NHANVIEN_DUAN Tên trƣờng Diễn giải Manv Mã nhân viên Mada Mã dự án Ngaybd Ngày bắt đầu Ngaykt Ngày kết thúc CÔng việc 1 a) Tạo cơ sở dữ liệu QLDA và 5 bảng trên (kiểu dữ liệu của các trƣờng tự chọn cho phù hợp). b) Tạo Diagram (sơ đồ) kết nối giữa các bảng trong cơ sở dữ liệu c) Nhâp̣ vào mỗi bảng ít nhất 3 bản ghi. Công việc 2: Tạo các form thực hiện việc quản lý dự án trong cơ sở dữ liệu QLDA; trên form có lƣới hiển thị dữ liệu và các nút thêm, sửa, lƣu, xóa, thoát. Công việc 3: Tập bài giảng Thực hành kỹ thuật lập trình 296 a) Tạo Form thống kê các dự án đang thực hiện của Viện gồm các thông tin: Tên dự án, công việc thực hiện, ngày bắt đầu, tên nhân viên thực hiện, ngày sinh, địa chỉ. b) Tạo Form thống kê số lƣợng nhân viên của Viện gồm các thông tin: Tên nhân viên, ngày sinh, địa chỉ, trình độ, chuyên môn. c) Tạo Form tìm kiếm nhân viên. d) Tạo Form tìm kiếm dự án theo tên dự án và theo thời gian. Công việc 4 Tạo giao diện chính của chƣơng trình gồm menu (hoặc link menu) gọi thực hiện các phần yêu cầu trong các Công việc 2 và Công việc 3 ở trên Tập bài giảng Thực hành kỹ thuật lập trình 297 TÀI LIỆU THAM KHẢO [1]. Phạm Hữu Khang. C#2005 Lập trình cơ bản. NXB Lao động xã hội.2006 [2]. Phạm Hữu Khang. C#2005 Lập trình Windows Forms. NXB Lao động xã hội. 2006 [3]. Phạm Hữu Khang. C#2005 Lập trình hƣớng đối tƣợng. NXB Lao động xã hội. 2006 [4]. Phạm Hữu Khang. C#2005 Lập trình cơ sở dữ liệu. NXB Lao động xã hội. 2006 [5] Erik Brown, Manning. Windows Forms Programming with C# [6] Jesse Liberty, O‟Reilly. Programming C# [7] MSDN Library – April 2002.

Các file đính kèm theo tài liệu này:

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