Luận văn Quản lý sinh viên thực tập

Đây là form chỉ đưa ra cho đối tượng sử dụng hệ thống thông tin chung và cơ bản về sinh viên thực tập. Form này không cho thực hiện bất kỳ một chức năng của hệ thống : thêm, sửa. xóa , lưu và tìm kiếm. - Để lấy dữ liệu vào dtgridview ta bạn pahir thêm đoạn mã sau vào phương thức frmHSSV_Load:

pdf75 trang | Chia sẻ: lylyngoc | Lượt xem: 2579 | Lượt tải: 3download
Bạn đang xem trước 20 trang tài liệu Luận văn Quản lý sinh viên thực tập, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
TenSV = '" + txtTenSV.Text + "', NgaySinh = '" + dtPickerNgaySinh.Text + "', NoiSinh = '" + txtNoiSinh.Text + "', DiaChi = '" + txtDiaChi.Text + "', DienThoai = '" + txtSDT.Text + "', GioiTinh = " + rbtNam.Checked + ", Email = '" + txtEmail.Text + "', MaNhom = '" + cboMaNhom.Text + "', MaLop = '" + cboMaLop.Text + "' Where MaSV = '" + txtMaSV.Text + "'"; OleDbCommand dbCmd = new OleDbCommand(strString, dbConn); dbCmd.ExecuteNonQuery(); newRefresh(); } else { DataSet dbSet = new DataSet(); string mstr = "Select * From SinhVien"; OleDbDataAdapter dbAdpt = new OleDbDataAdapter(mstr, dbConn); dbAdpt.Fill(dbSet); if (txtMaSV.Text != dbSet.Tables[0].Rows[0]["MaSV"].ToString()) { 39 if ((txtMaSV.Text != "") && (txtTenSV.Text != "")) { //dbConn.Open(); string strInsert = "Insert into Sinhvien values('"; strInsert += txtMaSV.Text + "','"; strInsert += txtTenSV.Text + "','"; strInsert += dtPickerNgaySinh.Value + "','"; strInsert += txtNoiSinh.Text + "','"; strInsert += txtDiaChi.Text + "','"; strInsert += txtSDT.Text + "',"; strInsert += rbtNam.Checked + ",'"; strInsert += txtEmail.Text + "','"; strInsert += cboMaLop.Text + "','"; strInsert += cboMaNhom.Text + "')"; OleDbCommand dbInsert = new OleDbCommand(strInsert, dbConn); dbInsert.ExecuteNonQuery(); dbConn.Close(); newRefresh(); } else { MessageBox.Show("Chưa nhập mã sinh viên và tên sinh viên. Hãy kiểm tra lại", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } else { MessageBox.Show("Đã Trùng mã sinh viên. Mời bạn nhập lại", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); txtMaSV.Focus(); txtMaSV.SelectAll(); } } }  Xử lý sự kiện cho nút btnXoaSV: - Khi muốn xóa thông tin về một sinh viên nào đó thì bạn chỉ cần chọn 1 row ở datagridview rùi click vào button xóa. Một hộp thoại thông báo hỏi “Bạn có muốn xóa hay không?” hiện ra. Nếu đồng ý xóa thì chọn Yes thông tin về sinh viên đó sẽ được loại bỏ khỏi danh sách sinh viên đã hiển thị trên datafridview, nếu không thì chọn No thông tin vẫn còn đảm bảo toàn vẹn. 40 - Để làm được điều đó, bạn chỉ cần thêm đoạn mã sau vào nút btnXoaSV là hệ thống sẽ làm việc được như trên: //xóa thông tin sinh viên private void btnXoaSV_Click(object sender, EventArgs e) { if (MessageBox.Show("Bạn có muốn xóa hay không?", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { dbConn.Open(); string str = "Delete from SinhVien Where MaSV = '" + dgvListSinhVien.SelectedRows[0].Cells[0].Value + "'"; OleDbCommand dbDelete = new OleDbCommand(str, dbConn); dbDelete.ExecuteNonQuery(); dbConn.Close(); newRefresh(); } }  Xử lý sự kiện cho nút btnDongLai: - Tương tự như các câu lệnh xử lý đống form lại ở trên, bạn cũng chỉ cần dùng 1 câu lệnh: private void btnDongLai_Click(object sender, EventArgs e) { this.Close(); } - Cũng có thể bạn dùng 1 câu lệnh khác để đống form ứng dụng đang chạy lại: Application.Exit();  Lấy dữ liệu vào các combobox:: - Vì để thay đổi các thông tin về sinh viên trong bảng sinh viên thì bạn cần phải để ý đến ràng buộc N – 1 giữa chúng với bảng lớp và nhóm thực tập. Đặc biệt khi thêm mới sinh viên, thì điều đó là khá quan trọng, nếu không câu lệnh truy vấn của bạn sẽ bị lỗi trong khi insert các trường đó vào datagridview. - Chính vì lý do đó mà bạn cần tiến hành viết mã ở một phương thức frmSinhVien_Load như sau: //thực hiện hiển thị dữ liệu vào lưới và dưa thông tin tên lớp và mã lớp và cboL và cboMaLop 41 private void frmSinhVien_Load(object sender, EventArgs e) { newRefresh();//Câu lệnh gọi phương thức newRefresh dbConn.Open(); string strString = "Select MaLop, TenLop From Lop"; DataSet dbSet = new DataSet(); OleDbDataAdapter dbAdptm = new OleDbDataAdapter(strString, dbConn); dbAdptm.Fill(dbSet); cboL.DataSource = dbSet.Tables[0]; cboL.DisplayMember = "TenLop"; cboMaLop.DataSource = dbSet.Tables[0]; cboMaLop.DisplayMember = "MaLop"; // Đưa thông tin vào cboMaNhom DataSet dbSetm = new DataSet(); string str = "Select MaNhom From NhomTT"; OleDbDataAdapter dbAdpt = new OleDbDataAdapter(str, dbConn); dbAdpt.Fill(dbSetm); dbConn.Close(); cboMaNhom.DataSource = dbSetm.Tables[0]; cboMaNhom.DisplayMember = "MaNhom"; } - Dữ liệu sẽ được lấy vào trong cac cboL và cboMaLop, cboMaNhom. Khi chạy chương trình, các dữ liệu này sẽ cố định và sổ xuống để người dùng tự chọn tùy theo yêu cầu mỗi người.  Lấy dữ liệu cho dgvListSinhVien: - Để xem thông tin chung về sinh viên và để hiển thị những thay đổi thông tin vê sinh viên thì bạn cần khai báo một phương thức mới là Private void newRefresh(). Đồng thời dùng lưới để bớt đi 1 khâu tim kiếm trước khi thao tác câc chức năng sửa và cập nhật thông tin. Ở đây, sửa thông tin sinh viên không cần thông qua việc tìm kiếm. /private hiển thị csdl vào datagridview private void newRefresh() { //dbConn.Open(); OleDbDataAdapter dbAdpt = new OleDbDataAdapter("SELECT * FROM SinhVien", dbConn); DataSet dbSet = new DataSet(); dbAdpt.Fill(dbSet); dbConn.Close(); dgvListSinhVien.DataSource = dbSet.Tables[0]; } 42  Xử lý sự kiện cho llbXemTatCa: - Sau khi thay đối thông tin sinh viên hay tìm kiếm sinh viên nào đó thì bạn có thể click vào xem tất cả để xem tất cả các dữ liệu có trong cơ sở dữ liệu gốc hoặc trong lưới. Chỉ với 1 câu lệnh gọi ra phương thức newRefresh private void linklbXemTatCa_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { newRefresh(); }  Xử lý sự kiện cho llbTimMaSV: - Bạn có thể tìm kiếm sinh viên theo khó chính của bảng sinh viên là mã sinh viên. Trước hi tìm kiếm bạn hãy chọn lớp của sinh viên đó rùi nhập thông tin mã sinh viên chính xác , hệ thống sẽ tìm cho bạn thông tin về sinh viên có mã sinh viên như vậy. Thông tin sẽ được hiển thj trên lưới. Nếu bạn chọn sai lớp hay nhập sai mã sinh viên thì hệ thống sẽ hiển thị hộp thoại thông báo “Không tìm thấy thông tin sinh viên nào”. Bạn có thể nhập lại mã sinh viên hoặc kết thức sử sụng hệ thống //tìm kiếm thông tin sinh viên theo mã sinh viên private void llbMaSV_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { dbConn.Open(); DataSet dbSet = new DataSet(); string strString = "SELECT Lop.TenLop, SinhVien.MaSV, SinhVien.TenSV, SinhVien.NgaySinh, SinhVien.NoiSinh, SinhVien.DiaChi, SinhVien.DienThoai, SinhVien.GioiTinh, SinhVien.Email FROM Lop INNER JOIN SinhVien ON Lop.MaLop = SinhVien.MaLop WHERE (((Lop.TenLop)='" + cboL.Text + "') AND ((SinhVien.MaSV)='" + txtTimMaSV.Text + "'))"; OleDbDataAdapter dbAdpt = new OleDbDataAdapter(strString, dbConn); dbAdpt.Fill(dbSet); dbConn.Close(); if (dbSet.Tables[0].Rows.Count > 0) { dgvListSinhVien.DataSource = dbSet.Tables[0]; } else { MessageBox.Show("Không tìm thấy thông tin sinh viên nào", "Tìm Kiếm", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } 43 }  Xử lý sự kiện cho cboL: - Để giới hạn phạm vi tìm kiếm thì bạn nên khi bạn nên khai báo một phương thức mới private void cboL_SelectedIndexChanged(object sender, EventArgs e). Việc tìm kiếm sẽ đơn giản hơn khi được giới hạn về pham vi tìm kiếm: private void cboL_SelectedIndexChanged(object sender, EventArgs e) { //dbConn.Open(); string str = "SELECT Lop.TenLop, SinhVien.MaSV, SinhVien.TenSV, SinhVien.NgaySinh, SinhVien.NoiSinh, SinhVien.DiaChi, SinhVien.DienThoai, SinhVien.GioiTinh, SinhVien.Email, SinhVien.MaLop, SinhVien.MaNhom FROM Lop INNER JOIN SinhVien ON Lop.MaLop = SinhVien.MaLop WHERE Lop.TenLop ='" + cboL.Text + "'"; OleDbDataAdapter dbAdpt = new OleDbDataAdapter(str, dbConn); DataSet dbSet = new DataSet(); dbAdpt.Fill(dbSet); dbConn.Close(); dgvListSinhVien.DataSource = dbSet.Tables[0]; }  Xử lý sự kiện cho llbimTenSV: - Trên là mã cho llbTimMaSV, còn bạn cũng có thể tìm kiếm thông tin của bất cứ sinh viên nào theo tên của sinh viên đó nếu bạn không còn nhớ mã sinh viên. Nhập tên sinh viên cần tìm vào textbox và click vào linklabel Tìm MaSV, thông tin sinh viên sẽ tự động hiển thị trên lưới để bạn dễ dàng xem. //tìm kiếm thông tin sinh viên theo tên sinh viên private void llbTenSV_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { dbConn.Open(); DataSet dbSet = new DataSet(); string strString = "SELECT Lop.TenLop, SinhVien.MaSV, SinhVien.TenSV, SinhVien.NgaySinh, SinhVien.NoiSinh, SinhVien.DiaChi, SinhVien.DienThoai, SinhVien.GioiTinh, SinhVien.Email FROM Lop INNER JOIN SinhVien ON Lop.MaLop = SinhVien.MaLop WHERE (((Lop.TenLop)='" + cboL.Text + "') AND ((SinhVien.TenSV)='" + txtTimTenSV.Text + "'))"; OleDbDataAdapter dbAdpt = new OleDbDataAdapter(strString, dbConn); dbAdpt.Fill(dbSet); dbConn.Close(); if (dbSet.Tables[0].Rows.Count > 0) { dgvListSinhVien.DataSource = dbSet.Tables[0]; 44 } else { MessageBox.Show("KHông tìm thấy thông tin sinh viên nào", "Tìm Kiếm", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } V. Form Giảng viên – frmGiangVien 1. Quá trình thiết kế và thiết lập thuộc tính của frmGiangVien Hình 4.5: Form giảng viên - Vào Add New Item -> Windows Form để tạo ra một form mới có tên là femGiangVien. Trong properties nhập tên tiêu đề cho form là: Thông tin giảng viên 45 - Từ hộp công cụ toolbox, rê các groupbox vào form và thay đổi thuộc tính Name cho chũng là: groupbox1, groupbox2, groupbox3 và text là hồ sơ giảng viên, thông tin về giảng viên, tìm kiếm. - Thêm các label vào groupbox1, thay đổi thuộc tính Name cho chúng lần lượt là: lbMaBM, lbMaGV, lbTenGV, lbNS, lbGT, lbSDT, lbEmail, lbDiaChi và text tương ứng là: Mã bộ môn, mã giảng viên, tên giảng viên, ngày sinh, giói tính, số điện thoại, email. - Thêm các textbox vào groupbox1, đổi thuộc tính Name lần lượt là : txtMaBM, txtMaGV, txtTenGV, txtSDT, txtEmail, txtDiaChi đặt bên cạnh các label tương tứng ở trên. - Thêm datatimepicker vào groupbox1 đặt bên cạnh label ngày sinh, đổi thuộc tính Name là dtPickerNgaySinh. - Thêm radio vào bên cạnh label giới tính, đổi thuộc tính Name cho nó là rdNam, rdNu và text là Nam và Nữ. - Từ toolbox, thêm label Mã GV và TenGV vào groupbox3. Đồng thời thêm txtTimMaGV, txtTimTenGV vào bên cạnh các label đó. - Thêm linklabel Tìm MaGV và Tìm TenGV vào bên cạnh các textbox - Thêm label vào form, đổi thuộc tính Name là lbBM và text là Tên bộ môn. Đồng thời thêm txtTenBM - Từ toolbox rê thanh điều khiển datagridview vào groupbox2, đổi thuộc tính name là dgvTTGV. - Thêm linklbTimTatCa vào form. - Thêm các button vào form: btnThemGV, btnSuaGV, btnXoaGV, btnLuuGV, btnThoat. 2. Xử lý các sự kiện trong frmGiangVien: - Sau khi kết nối csdl bằng câu lệnh thì ta sẽ lần lượt xử lý các sự kiện cho từng button và combobox, datagridview: //kết nối csdl 46 OleDbConnection dbConn = new OleDbConnection("Provider = Microsoft.JET.OLEDB.4.0; Data Source = " + Application.StartupPath + "\\QLSVTT.mdb");  Xử lý sự kiện cho nút btnThemGV: - Khi muốn thêm giảng viên mới và các thông tin liên quan đến giảng viên đó thì bạn chỉ cần nhấn nút thêm, các ô textbox và combobox, datatimepicker ..sẽ tự động nhập trắng lại. Bạn nhập thông tin về giảng viên đó vào đó rùi nhấn lưu. Thông tin về giảng viên vừa thêm sẽ có mặt trong datagridview. - Để làm được điều đó, bạn phải thêm đoạn mã sau vào phương thức btnThemGV: //Nhập trắng lại các ô textbox và combobox để thêm dữ liệu vào csdl private void btnThemGV_Click(object sender, EventArgs e) { txtMaGV.Text = ""; txtTenGV.Text = ""; dtPickerNgaySinh.Text = ""; txtSDT.Text = ""; txtEmail.Text = ""; txtDiaChi.Text = ""; txtMaBM.Text = ""; btnLuuGV.Text = "Lưu"; }  Xử lý sự kiện cho nút btnLuuGV: - Đây là button hỗ trợ cho việc thêm và sửa thông tin giảng viên. Sau khi thay đổi thông tin thì thông tin về giảng viên đó phải được lưu lại trong datagridview. Khi nhấn nút thêm thì btnLuuGV vẫn là Lưu, còn khi nhấn nút sửa thì btnLuuGV sẽ chuyển đổi lại thành Cập nhật - //cập nhật thông tin về giảng viên private void btnLuuGV_Click(object sender, EventArgs e) { dbConn.Open(); if (btnLuuGV.Text == "Cập Nhật") { //dbConn.Open(); string strUpdate = "Update GiangVienHDTT Set MaGV = '" + txtMaGV.Text + "', TenGV = '" + txtTenGV.Text + "', 47 GioiTinhGV= " + rdNam.Checked + ", NgaySinhGV = '" + dtPickerNgaySinh.Text + "',SDT = '" + txtSDT.Text + "',EMailGV = '" + txtEmail.Text + "',DiaChiGV = '" + txtDiaChi.Text + "' Where MaGV = '" + txtMaGV.Text + "'"; OleDbCommand dbCmd = new OleDbCommand(strUpdate, dbConn); dbCmd.ExecuteNonQuery(); btnLuuGV.Text = "Lưu"; HienThi(); txtMaGV.ReadOnly = false; } else { DataSet dbSet = new DataSet(); string mstr = "Select * From GiangVienHDTT"; OleDbDataAdapter dbAdpt = new OleDbDataAdapter(mstr, dbConn); dbAdpt.Fill(dbSet); if (txtMaGV.Text != dbSet.Tables[0].Rows[0]["MaGV"].ToString()) { if ((txtMaGV.Text != "") && (txtTenGV.Text != "")) { //dbConn.Open(); string strInsert = "Insert Into GiangVienHDTT Values('" + txtMaGV.Text + "','" + txtTenGV.Text + "'," + rdNam.Checked + ",'" + dtPickerNgaySinh.Text + "'," + txtSDT.Text + ",'" + txtEmail.Text + "','" + txtDiaChi.Text + "','" + txtMaBM.Text + "')"; OleDbCommand mdbComd = new OleDbCommand(strInsert, dbConn); mdbComd.ExecuteNonQuery(); dbConn.Close(); HienThi(); txtMaGV.ReadOnly = false; txtTenGV.ReadOnly = false; txtMaBM.ReadOnly = false; } else { MessageBox.Show("Chưa nhập mã giảng viên và tên giảng viên. Hãy kiểm tra lại", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } else { 48 MessageBox.Show("Đã trùng mã giảng viên. Mời bạn nhập lại", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); txtMaGV.Focus(); txtMaGV.SelectAll(); } } }  Xử lý sự kiện cho nút btnSuaGV: - Khi các thông tin về giảng viên đã được thay đổi, thông tin trong hệ thống đã không còn phù hớp với thực tế. Hệ thống phải cập nhật lại thông tin cho chính xác và người quản lý hệ thống sẽ làm công việc này. - Để sửa thông tin về bất kỳ giảng viên nào đó, bạn chọn 1 row trong datagridview có chứa đầy đủ các thông tin về giảng viên cần sửa rồi nhấn nút sửa, nút lưu chuyển thành cập nhật. Thông tin đó sẽ được hiển thị lên các ô textbox, combobox, datatimepicker, radio…tương ứng. Bán sẽ chỉnh sửa thông tin trong đó rồi nhấn nút cập nhật. Thông tín sẽ được chỉnh sửa lại và lưu lại trong lưới. - Dưới đây là đoạn mã của phương thức btnSuaGV: //Sửa thông tin về giảng viên private void btnSuaGV_Click(object sender, EventArgs e) { if (dgvTTGV.SelectedRows.Count > 0) { dbConn.Open(); DataSet dbSet = new DataSet(); string str = "SELECT BoMon.TenBM, GiangVienHDTT.MaGV, GiangVienHDTT.TenGV, GiangVienHDTT.GioiTinhGV, GiangVienHDTT.NgaySinhGV, GiangVienHDTT.SDT, GiangVienHDTT.EmailGV, GiangVienHDTT.DiaChiGV, GiangVienHDTT.MaBM FROM BoMon INNER JOIN GiangVienHDTT ON BoMon.MaBM = GiangVienHDTT.MaBM Where MaGV = '" + dgvTTGV.SelectedRows[0].Cells[0].Value + "'"; OleDbDataAdapter dbAdpt = new OleDbDataAdapter(str, dbConn); dbAdpt.Fill(dbSet); dbConn.Close(); txtMaBM.Text = dbSet.Tables[0].Rows[0]["MaBM"].ToString(); txtMaGV.Text = dbSet.Tables[0].Rows[0]["MaGV"].ToString(); 49 txtTenGV.Text = dbSet.Tables[0].Rows[0]["TenGV"].ToString(); dtPickerNgaySinh.Text = dbSet.Tables[0].Rows[0]["NgaySinhGV"].ToString(); if (dbSet.Tables[0].Rows[0]["GioitinhGV"].ToString().Equals("True")) { rdNam.Checked = true; } else { rdNu.Checked = true; } txtSDT.Text = dbSet.Tables[0].Rows[0]["SDT"].ToString(); txtDiaChi.Text = dbSet.Tables[0].Rows[0]["DiaChiGV"].ToString(); txtEmail.Text = dbSet.Tables[0].Rows[0]["EmailGV"].ToString(); } btnLuuGV.Text = "Cập Nhật"; txtMaBM.Visible = true; }  Xử lý sự kiện cho nút btnXoaGV: - Tương tự như sinh viên, để xóa thông tin của một giảng viên nào đó, bạn chỉ cần chọn 1 row trong dtgridview có chứa thông tin của giảng viên đó và nhấn nút xóa. Một hộp thoại thông báo sẽ hiện ra hỏi “Bạn có muốn xóa hay không?”. Nếu đồng ý xóa thì chọn Yes, row đó sẽ biến mất khỏi dtgridview. Còn không muốn tiếp tục xóa thì chọn No, dữ liệu vẫn được toàn vẹn như cũ. - Đoạn mã của btnXoaGV: //xóa thông tin về giảng viên private void btnXoaGV_Click(object sender, EventArgs e) { if (MessageBox.Show("Bạn có muốn xóa hay không?", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { dbConn.Open(); string str = "Delete from GiangVienHDTT Where MaGV = '" + dgvTTGV.SelectedRows[0].Cells[0].Value + "'"; OleDbCommand dbDelete = new OleDbCommand(str, dbConn); dbDelete.ExecuteNonQuery(); 50 dbConn.Close(); HienThi(); } }  Xử lý sự kiện cho nút btnThoat: - Xử lý nút thoát khỏi form chỉ với 1 câu lệnh: //đóng form lại private void btnThoat_Click(object sender, EventArgs e) { this.Close(); }  Xem thông tin giảng viên theo từng bộ môn: - Để xem thông tin giảng viên theo từng bộ môn bạn chỉ cần chọn bộ môn trong cbTenBoMon mà nó sổ xuống. - Thêm phương thức mới private void cbTenBM_SelectedIndexChanged(object sender, EventArgs e): //hiển thị thông tin giảng viên từ cbTenBM private void cbTenBM_SelectedIndexChanged(object sender, EventArgs e) { dbConn.Open(); string str = "SELECT GiangVienHDTT.MaGV, GiangVienHDTT.TenGV, GiangVienHDTT.GioiTinhGV, GiangVienHDTT.GioiTinhGV, GiangVienHDTT.NgaySinhGV, GiangVienHDTT.SDT, GiangVienHDTT.EmailGV, GiangVienHDTT.DiaChiGV, BoMon.MaBM FROM BoMon INNER JOIN GiangVienHDTT ON BoMon.MaBM = GiangVienHDTT.MaBM WHERE BoMon.TenBM ='" + cbTenBM.Text + "'"; OleDbDataAdapter dbAdpt = new OleDbDataAdapter(str, dbConn); DataSet dbSet = new DataSet(); dbAdpt.Fill(dbSet); dbConn.Close(); dgvTTGV.DataSource = dbSet.Tables[0]; }  Đưa dữ liệu cho dgvTTGV và cboTenBM: - Đưa dữ liệu vào dgvTTGV để hiển thị tất cả các thông tin về giảng viên. Đồng thời giúp cho việc sửa lại thông tin bằng cách chọn row ở lưới rồi đưa lên textbox, combobox và datatimepicker.. - Đoạn mã : 51 //private hiển thị thông tin lên lưới private void HienThi() { //dbConn.Open(); string str = "Select * From GiangVienHDTT"; OleDbDataAdapter dbAdapt = new OleDbDataAdapter(str, dbConn); DataSet dbSet = new DataSet(); dbAdapt.Fill(dbSet); dbConn.Close(); dgvTTGV.DataSource = dbSet.Tables[0]; } //câu lệnh hiển thị thông tin về giảng viên và lấy dữ liệu vào cbTenBM private void frmGiangVien_Load(object sender, EventArgs e) { HienThi(); dbConn.Open(); DataSet dbSet = new DataSet(); string str = "Select MaBM, TenBM From BoMon"; OleDbDataAdapter dbAdpt = new OleDbDataAdapter(str, dbConn); dbAdpt.Fill(dbSet); dbConn.Close(); cbTenBM.DataSource = dbSet.Tables[0]; cbTenBM.DisplayMember = "TenBM"; } 52 VI. Form bảng điểm – frmBangDiem 1. Quá trình thiết kế và thiết lập các thuộc tính của frmBangDiem Hình 4.6: Form bảng điểm thực tập - Vào Add New Item -> Windows Form để tạo ra form mới có tên là frmBangDiem . Trong properties nhập tiêu đề cho form là: Thông tin điểm thực tập - Cũng giống như các form trên, ta dùng các groupbox, label và các textbox, combobox, các button để thiết kế giao diện của form. Vào properties để thay đổi thuộc tính của chũng cho thích hợp. 2. Xử lý các sự kiện trong frmBangDiem - Câu lệnh kết nối csdl: // Câu lệnh kết nối cơ sở dữ liệu OLEDB 53 OleDbConnection dbConn = new OleDbConnection("Provider = Microsoft.JET.OLEDB.4.0; Data Source = " + Application.StartupPath + "\\QLSVTT.mdb");  Xử lý sự kiện cho nút btnThem //Nhập trắng lại các ô textbox và combobox có trong form private void btnThem_Click(object sender, EventArgs e) { cbLHTT.Text = ""; txtLanTT.Text = ""; txtMaSV.Text = ""; txtDiemTT.Text = ""; txtTGTT.Text = ""; txtGhiChu.Text = ""; btnLuuDiem.Text = "Lưu"; }  Xử lý sự kiện cho nút btnSuaDiem //Chỉnh sửa thông tin về điểm thực tập của sinh viên private void btnSuaDiem_Click(object sender, EventArgs e) { //Sửa khi dữ liệu trong các row của datagrigview không có position là 0 if (dgvBangDiem.SelectedRows.Count > 0) { dbConn.Open(); DataSet dbSet = new DataSet(); string str = "Select * From BangDiemTT where MaSV = '" + dgvBangDiem.SelectedRows[0].Cells[0].Value + "'"; OleDbDataAdapter dbAdpt = new OleDbDataAdapter(str, dbConn); dbAdpt.Fill(dbSet); dbConn.Close(); cbLHTT.Text = dbSet.Tables[0].Rows[0]["TenLHTT"].ToString(); txtLanTT.Text = dbSet.Tables[0].Rows[0]["LanThucTap"].ToString(); txtMaSV.Text = dbSet.Tables[0].Rows[0]["MaSV"].ToString(); txtDiemTT.Text = dbSet.Tables[0].Rows[0]["Diem"].ToString(); txtTGTT.Text = dbSet.Tables[0].Rows[0]["ThoiGianTT"].ToString(); txtGhiChu.Text = dbSet.Tables[0].Rows[0]["GhiChu"].ToString(); btnLuuDiem.Text = "Cập Nhật"; } } 54  Xử lý sự kiện cho nút btnXoaDiem //Xóa các thông tin về điểm của sinh viên thực tập private void btnXoaDiem_Click(object sender, EventArgs e) { //Đưa ra thông báo "hỏi bạn có muốn xóa hay không?" trước khi thao tác xóa. Nếu chọn yes thì dữ liệu bạn xóa sẽ mất trong datagridviw if (MessageBox.Show("Bạn có muốn xóa hay không?", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { dbConn.Open(); string str = "Delete from BangDiemTT Where MaSV = '" + dgvBangDiem.SelectedRows[0].Cells[0].Value + "'"; OleDbCommand dbDelete = new OleDbCommand(str, dbConn); dbDelete.ExecuteNonQuery(); dbConn.Close(); HienThi(); } }  Xử lý sự kiện cho nut btnLuuDiem private void btnLuuDiem_Click(object sender, EventArgs e) { //Thực hiện câu lệnh điều kiện để khi nhấn button sửa thì button lưu sẽ chuyển thành cập nhật if (btnLuuDiem.Text == "Cập Nhật") { dbConn.Open(); //Cập nhật cơ sở dữ liệu khi thay đổi csdl trong datagridview string str = "Update BangDiemTT set TenLHTT = '" + cbLHTT.Text + "',MaSV = '" + txtMaSV.Text + "', LanThucTap = '" + txtLanTT.Text + "', Diem = " + txtDiemTT.Text + ", ThoiGianTT = '" + txtTGTT.Text + "', GhiChu = '" + txtGhiChu.Text + "' Where MaSV = '" + txtMaSV.Text + "'"; OleDbCommand dbCmd = new OleDbCommand(str, dbConn); dbCmd.ExecuteNonQuery(); dbConn.Close(); HienThi(); txtMaSV.ReadOnly = false; } else 55 { DataSet dbSet = new DataSet(); string mstr = "Select * From BangDiemTT"; OleDbDataAdapter dbAdpt = new OleDbDataAdapter(mstr, dbConn); dbAdpt.Fill(dbSet); if (txtMaSV.Text != dbSet.Tables[0].Rows[0]["MaSV"].ToString()) { if (txtMaSV.Text != "") { dbConn.Open(); //Câu lệnh truy vấn đẻ insert các thông tin string strInsert = "Insert Into BangDiemTT Values('" + txtMaSV.Text + "','" + txtDiemTT.Text + "','" + cbLHTT.Text + "','" + txtLanTT.Text + "','" + txtTGTT.Text + "','" + txtGhiChu.Text + "')"; OleDbCommand dbInsert = new OleDbCommand(strInsert, dbConn); dbInsert.ExecuteNonQuery(); dbConn.Close(); HienThi(); //txtMaSV.ReadOnly = false; } else { MessageBox.Show("Chưa nhập mã sinh viên và tên sinh viên. Hãy kiểm tra lại", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } else { MessageBox.Show("Đã Trùng mã sinh viên. Mời bạn nhập lại", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); txtMaSV.Focus(); txtMaSV.SelectAll(); } } }  Xem thông tin bảng điểm thwo loại hình thực tập: private void cbLHTT_SelectedIndexChanged(object sender, EventArgs e) { dbConn.Open(); DataSet dbSet = new DataSet(); 56 string str = "SELECT SinhVien.MaSV, BangDiemTT.Diem, BangDiemTT.TenLHTT, BangDiemTT.LanThucTap, BangDiemTT.ThoiGianTT, BangDiemTT.GhiChu FROM SinhVien INNER JOIN BangDiemTT ON SinhVien.MaSV = BangDiemTT.MaSV WHERE BangDiemTT.TenLHTT ='"+ cbLHTT.Text +"'"; OleDbDataAdapter dbAdpt = new OleDbDataAdapter(str, dbConn); dbAdpt.Fill(dbSet); dbConn.Close(); dgvBangDiem.DataSource = dbSet.Tables[0]; }  Xử lý cho sự kiện lbbTimMaSV: //Tìm kiếm thông tin về điểm thực tập của sinh viên theo mã sinh viên private void llbTimMaSV_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { dbConn.Open(); DataSet dbSet = new DataSet(); string strString = "SELECT SinhVien.MaSV, BangDiemTT.Diem, BangDiemTT.TenLHTT, BangDiemTT.LanThucTap, BangDiemTT.ThoiGianTT, BangDiemTT.GhiChu FROM SinhVien INNER JOIN BangDiemTT ON SinhVien.MaSV = BangDiemTT.MaSV Where BangDiemTT.MaSV ='" + txtTimMaSV.Text + "'"; OleDbDataAdapter dbAdpt = new OleDbDataAdapter(strString, dbConn); dbAdpt.Fill(dbSet); dbConn.Close(); if (dbSet.Tables[0].Rows.Count > 0) { dgvBangDiem.DataSource = dbSet.Tables[0]; } else { MessageBox.Show("Không tìm thấy thông tin điểm của sinh viên này", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } }  Xử lý cho sự kiện btnTimTenSV: //Tmf kiếm thông tin về điểm thực tập của sinh viên theo tên sinh viên private void llbTimTenSV_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { dbConn.Open(); DataSet dbSet = new DataSet(); string strString = "SELECT SinhVien.TenSV, BangDiemTT.MaSV, BangDiemTT.Diem, BangDiemTT.TenLHTT, BangDiemTT.LanThucTap, BangDiemTT.ThoiGianTT, BangDiemTT.GhiChu 57 FROM SinhVien INNER JOIN BangDiemTT ON SinhVien.MaSV = BangDiemTT.MaSV Where SinhVien.TenSv='" + txtTimTenSV.Text + "'"; OleDbDataAdapter dbAdpt = new OleDbDataAdapter(strString, dbConn); dbAdpt.Fill(dbSet); dbConn.Close(); if (dbSet.Tables[0].Rows.Count > 0) { dgvBangDiem.DataSource = dbSet.Tables[0]; } else { MessageBox.Show("Không tìm thấy thông tin điểm của sinh viên này", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } }  Xử lý cho sự kiện btnThoat: //Thoát khỏi form bảng điểm thực tập của sinh viên private void btnThoat_Click(object sender, EventArgs e) { this.Close(); }  Lấy dữ liệu cho dgvBangDiem và cbLHTT: //Tạo một private hiển thị các thông tin về bảng điểm của sinh viên lên datagridview private void HienThi() { dbConn.Open(); string str = "SELECT BangDiemTT.MaSV, BangDiemTT.Diem, BangDiemTT.TenLHTT, BangDiemTT.LanThucTap, BangDiemTT.ThoiGianTT, BangDiemTT.GhiChu, IIF(Diem > 5,'Dat','Khong Dat') As KetQua FROM BangDiemTT"; OleDbDataAdapter dbAdpt = new OleDbDataAdapter(str, dbConn); DataSet dbSet = new DataSet(); dbAdpt.Fill(dbSet); dbConn.Close(); dgvBangDiem.DataSource = dbSet.Tables[0]; } private void frmBangDiem_Load(object sender, EventArgs e) { //hiển thị thông tin về điểm thực tập của sinh viên lên datagridview HienThi(); //Thực hiện câu truy vấn và các câu lệnh để lấy thông tin về tên loại hình thực tập từ bảng điểm thực tập đưa vào cbLHTT dbConn.Open(); DataSet dbSet = new DataSet(); string str = "Select TenLHTT From BangDiemTT"; 58 OleDbDataAdapter dbAdpt = new OleDbDataAdapter(str, dbConn); dbAdpt.Fill(dbSet); dbConn.Close(); cbLHTT.DataSource = dbSet.Tables[0]; cbLHTT.DisplayMember = "TenLHTT"; } VII. Forn nhóm thực tập – frmNhomTT 1. Quá trình thiết kế và thiết lập các thuộc tính của frmNhomTT Hình 4.7: Form nhóm thực tập - Vào Add New Item-> Windows Form để tạo ra một form mới có tên là frmNhomTT. Trong properties nhạp vào text tên tiêu đề form là: Thông tin về nhóm thực tập. 59 - Chọn các textbox và các button, linklabel, label để thiết kế giao diện cho form nhóm thực tập 2. Xử lý các sự kiện trong frmNhomTT  Xử lý sự kiện cho nút btnSuaNhom: //Thực hiện sửa thông tin private void btnSuaNhom_Click(object sender, EventArgs e) { if (dgvNhomTT.SelectedRows.Count > 0) { dbConn.Open(); DataSet dbSet = new DataSet(); DataGridViewRow dr = dgvNhomTT.SelectedRows[0]; string str = "Select * From NhomTT Where MaNhom = '" + dr.Cells[0].Value + "'"; OleDbDataAdapter dbAdpt = new OleDbDataAdapter(str, dbConn); dbAdpt.Fill(dbSet); dbConn.Close(); DataTable dt = new DataTable(); dt = dbSet.Tables[0]; txtMaNhom.Text = dt.Rows[0]["MaNhom"].ToString(); txtDeTaiTT.Text = dt.Rows[0]["DeTaiTT"].ToString(); txtLichTT.Text = dt.Rows[0]["LichTT"].ToString(); txtMaGV.Text = dt.Rows[0]["MaGV"].ToString(); btnLuuNhom.Text = "Cập Nhật"; txtMaGV.ReadOnly = true; txtMaNhom.ReadOnly = true; } else { MessageBox.Show("Chua Chon nhom sua", "Thong bao", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } }  Xử lý sự kiện cho nút btnLuuNhom: //Thực hiện cập nhật thông tin về nhóm thực tập private void btnLuuNhom_Click(object sender, EventArgs e) { if ( btnLuuNhom.Text != "Cập Nhật" ) { dbConn.Open(); DataSet dbSet = new DataSet(); { if ((txtMaNhom.Text != "") && (txtLichTT.Text != "") && (txtMaGV.Text != "") && (txtDeTaiTT.Text != "")) { 60 String strString = "Select * From NhomTT Where MaNhom = '" + txtMaNhom.Text + "'"; OleDbDataAdapter dbAdpt = new OleDbDataAdapter(strString, dbConn); dbAdpt.Fill(dbSet); dbConn.Close(); if (dbSet.Tables[0].Rows.Count > 0) { MessageBox.Show("Đã TRùng dữ liệu", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information); txtMaNhom.Focus(); txtMaNhom.SelectAll(); } else { string str = "Insert Into NhomTT Values('" + txtMaNhom.Text + "','" + txtDeTaiTT.Text + "','" + txtLichTT.Text + "','" + txtMaGV.Text + "')"; OleDbCommand dbCmd = new OleDbCommand(str, dbConn); dbCmd.ExecuteNonQuery(); dbConn.Close(); HienThi(); } } else { MessageBox.Show("Kiểm tra xem có trường nào rỗng hay không!"); } } } else { txtMaNhom.ReadOnly = false; dbConn.Open(); string strStr = "Update NhomTT Set DeTaiTT = '" + txtDeTaiTT.Text + "', LichTT = '" + txtLichTT.Text + "', MaGV = '" + txtMaGV.Text + "' Where MaNhom = '" + txtMaNhom.Text + "'"; OleDbCommand dbCmd = new OleDbCommand(strStr, dbConn); dbCmd.ExecuteNonQuery(); dbConn.Close(); HienThi(); } }  Xử lý sự kiện cho nút btnXoaNhom: //Xóa thông tin về nhóm private void btnXoaNhom_Click(object sender, EventArgs e) { int m; m = dgvNhomTT.SelectedRows[0].Index; 61 if (dgvNhomTT.SelectedRows.Count > 0) { if (MessageBox.Show("Bạn Có muốn xóa không", "Thông Báo",MessageBoxButtons.YesNo,MessageBoxIcon.Question) == DialogResult.Yes) { OleDbConnection dbConn = new OleDbConnection("Provider = Microsoft.JET.OLEDB.4.0; Data Source = " + Application.StartupPath + "\\QLSVTT.mdb"); dbConn.Open(); String strString = "Delete From NhomTT Where MaNhom = '" + dgvNhomTT.SelectedRows[0].Cells[0].Value + "'"; OleDbCommand dbCmd = new OleDbCommand(strString, dbConn); dbCmd.ExecuteNonQuery(); dbConn.Close(); HienThi(); } }  Xử lý sự kiện cho nút btnThoatNhom: //Đóng form nhóm thực tập lại private void btnThoatNhom_Click(object sender, EventArgs e) { this.Close(); }  Xử lý sự kiện cho llbTimMaNhom: //tìm thông tin về nhóm thực tập theo mã nhóm private void lbbTimMaNhom_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { dbConn.Open(); DataSet dbSet = new DataSet(); string strString = "SELECT GiangVienHDTT.MaGV, NhomTT.MaNhom, NhomTT.DeTaiTT, NhomTT.LichTT FROM GiangVienHDTT INNER JOIN NhomTT ON GiangVienHDTT.MaGV = NhomTT.MaGV WHERE MaNhom = '" + txtTimMaNhom.Text + "'"; OleDbDataAdapter dbAdpt = new OleDbDataAdapter(strString, dbConn); dbAdpt.Fill(dbSet); dbConn.Close(); if (dbSet.Tables[0].Rows.Count > 0) { dgvNhomTT.DataSource = dbSet.Tables[0]; } else { 62 MessageBox.Show("KHông tìm thấy thông tin nhóm này", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } VIII. Form lớp – frmLop 1. Quá trình thiết kế và thiết lập các thuộc tính trong frmLop Hình 4.8: Form lớp - Vào Add New Item -> Windows Form để tạo ra một form mới có tên là frmLop. Trong Properties nhập vào text tiêu đề của form là:thông tin về lớp - Thêm groupbox vào form, đổi thuộc tính name là grLop, grTuyChon, và text là Thông tin về lớp, Tùy chọn - Từ hộp công cụ rê các thnh điều khiển label vào trong grLop, đổi thuộc tính name của chúng lân lượt là: lbMaKhoa, lbMaLop, lbSiSo, lbTenLop và text tương ứng là: Mã khóa, Mã lớp, sĩ số, tên lớp. 63 - Thêm các button vào grTuyChon, đổi thuộc tính name của chũng là btnSuaLop, btnCapNhat, btnThaotLop và text tương ứng là: Sửa, Cập nhật, Thoát. - Thêm label vào form, thuộc tính name là lbTenKhoa và text là Chọn khóa học. Đồng thời thêm combobox vào ben cạnh label đó, đởi tên thuộc tính name là cbTenKhoa. - Thêm linklabel vào form, đổi thuộc tính name là LinkLbXemTatCar, và text là Xem tất cả. - Từ hộp công cụ đưa datagridview vào form, đổi thuộc tính name thành dtgridTTLop. 2. Xử lý các sự kiện trong frmLop - Câu lệnh kết nối csdl: //Câu lệnh kết nối csdl OleDbConnection dbConn = new OleDbConnection("Provider = Microsoft.JET.OLEDB.4.0; Data Source = " + Application.StartupPath + "\\QLSVTT.mdb");  Xử lý sự kiện cho btnSuaLop - Cũng giống như các form trên, nút sửa ở form lớp cũng hoạt động tương tự như vậy. - Đoạn mã của btnSuaLop: //Sửa thông tin về lớp private void btnSuaLop_Click(object sender, EventArgs e) { if (dtgridTTLop.SelectedRows.Count > 0) { dbConn.Open(); DataSet dbSet = new DataSet(); string str = "SELECT KhoaHoc.TenKhoa, Lop.MaKhoa, Lop.MaLop, Lop.TenLop, Lop.SiSo FROM KhoaHoc INNER JOIN Lop ON KhoaHoc.MaKhoa = Lop.MaKhoa Where Lop.MaLop = '" + dtgridTTLop.SelectedRows[0].Cells[0].Value + "'"; OleDbDataAdapter dbAdpt = new OleDbDataAdapter(str, dbConn); dbAdpt.Fill(dbSet); dbConn.Close(); 64 txtMaLop.Text = dbSet.Tables[0].Rows[0]["MaLop"].ToString(); txtTenLop.Text = dbSet.Tables[0].Rows[0]["TenLop"].ToString(); txtSiSo.Text = dbSet.Tables[0].Rows[0]["SiSo"].ToString(); txtMaKhoa.Text = dbSet.Tables[0].Rows[0]["MaKhoa"].ToString(); } //không cho phép sửa mã lớp, ten lớp, mã khoa txtMaLop.ReadOnly = true; txtTenLop.ReadOnly = true; txtMaKhoa.ReadOnly = true; } //Đưa dữ liệu vaò cbTenKhoa và đồng thời hiển thị dữ liệu vào lưới khi chọn khóa học private void cbTenKhoa_SelectedIndexChanged(object sender, EventArgs e) { dbConn.Open(); string str = "SELECT Lop.MaLop, Lop.TenLop, Lop.SiSo, KhoaHoc.TenKhoa FROM KhoaHoc INNER JOIN Lop ON KhoaHoc.MaKhoa = Lop.MaKhoa WHERE KhoaHoc.TenKhoa ='"+ cbTenKhoa.Text +"'"; OleDbDataAdapter dbAdpt = new OleDbDataAdapter(str, dbConn); DataSet dbSet = new DataSet(); dbAdpt.Fill(dbSet); dbConn.Close(); dtgridTTLop.DataSource = dbSet.Tables[0]; } //Cập nhật dữa liệu private void btnCapNhat_Click(object sender, EventArgs e) { dbConn.Open(); DataSet dbSet = new DataSet(); string str = "Update Lop set MaKhoa = '" + txtMaKhoa.Text + "', SiSo = '" + txtSiSo.Text + "', TenLop = '" + txtTenLop.Text + "' Where MaLop = '" + txtMaLop.Text + "'"; OleDbCommand dbComd = new OleDbCommand(str, dbConn); dbComd.ExecuteNonQuery(); dbConn.Close(); HienThi(); txtMaLop.ReadOnly = false;  Xử lý sự kiện cho linklbXemTatCa: //Xem tất cả các thông tin của lớp private void linkLbXemTatCa_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { HienThi(); } 65  Xử lý cbTenKhoa //Đưa dữ liệu vaò cbTenKhoa và đồng thời hiển thị dữ liệu vào lưới khi chọn khóa học private void cbTenKhoa_SelectedIndexChanged(object sender, EventArgs e) { dbConn.Open(); string str = "SELECT Lop.MaLop, Lop.TenLop, Lop.SiSo, KhoaHoc.TenKhoa FROM KhoaHoc INNER JOIN Lop ON KhoaHoc.MaKhoa = Lop.MaKhoa WHERE KhoaHoc.TenKhoa ='"+ cbTenKhoa.Text +"'"; OleDbDataAdapter dbAdpt = new OleDbDataAdapter(str, dbConn); DataSet dbSet = new DataSet(); dbAdpt.Fill(dbSet); dbConn.Close(); dtgridTTLop.DataSource = dbSet.Tables[0]; }  Xử lý sự kiện cho btnCapNhat private void btnCapNhat_Click(object sender, EventArgs e) { dbConn.Open(); DataSet dbSet = new DataSet(); string str = "Update Lop set MaKhoa = '" + txtMaKhoa.Text + "', SiSo = '" + txtSiSo.Text + "', TenLop = '" + txtTenLop.Text + "' Where MaLop = '" + txtMaLop.Text + "'"; OleDbCommand dbComd = new OleDbCommand(str, dbConn); dbComd.ExecuteNonQuery(); dbConn.Close(); HienThi(); txtMaLop.ReadOnly = false; }  Xử lý sự kiện cho btnThoat //Đóng form lại private void btnThoatLop_Click(object sender, EventArgs e) { this.Close(); }  Đưa lữ liệu vào cbTenKhoa //Đưa dữ liệu vaò cbTenKhoa và đồng thời hiển thị dữ liệu vào lưới khi chọn khóa học private void cbTenKhoa_SelectedIndexChanged(object sender, EventArgs e) { dbConn.Open(); string str = "SELECT Lop.MaLop, Lop.TenLop, Lop.SiSo, KhoaHoc.TenKhoa FROM KhoaHoc INNER JOIN Lop ON KhoaHoc.MaKhoa = Lop.MaKhoa WHERE KhoaHoc.TenKhoa ='"+ cbTenKhoa.Text +"'"; OleDbDataAdapter dbAdpt = new OleDbDataAdapter(str, dbConn); 66 DataSet dbSet = new DataSet(); dbAdpt.Fill(dbSet); dbConn.Close(); dtgridTTLop.DataSource = dbSet.Tables[0]; }  Đưa dữ liệu vào combobox vào dtgrid //private để hiển thị thông tin vào datagridview private void HienThi() { dbConn.Open(); string str = "SELECT Lop.MaLop, Lop.TenLop, Lop.SiSo, KhoaHoc.TenKhoa FROM KhoaHoc INNER JOIN Lop ON KhoaHoc.MaKhoa = Lop.MaKhoa"; OleDbDataAdapter dbAdpt = new OleDbDataAdapter(str, dbConn); DataSet dbSet = new DataSet(); dbAdpt.Fill(dbSet); dbConn.Close(); dtgridTTLop.DataSource = dbSet.Tables[0]; } //Hiển thị dữ liệu và đưa thông tin tên khóa vào cbTenKhoa private void frmLop_Load(object sender, EventArgs e) { HienThi(); dbConn.Open(); string str = "SELECT TenKhoa FROM KhoaHoc"; DataSet dbSet = new DataSet(); OleDbDataAdapter dbAdpt = new OleDbDataAdapter(str, dbConn); dbAdpt.Fill(dbSet); dbConn.Close(); cbTenKhoa.DataSource = dbSet.Tables[0]; cbTenKhoa.DisplayMember = "TenKhoa"; } 67 IX. Form bộ môn – frmBoMon Hình 4.9: Form bộ môn - Vào Add New Item -> Windows Form để tạo ra form mới có tên là frmHSSV. Trong properties nhập vào text tiêu đề form: Thông tin bộ môn - Từ hộp công cụ, rê thanh điều khiển datagridview vào form, đổi thuộc tính name cho nó là dtgridTTBM - Form BoMon đơn giản chỉ là form hiển thị ra các thông tin về bộ môn để các đối tượng sử dụng có thể nắm bắt một cách khái quát về bộ môn, chứ không cho phép thực hiện các chức năng gì vào datagridview. - Nhưng để đưa dữ liệu vào datagridview thì banjc ũng cần phải thêm đoạn mã cho nó: //Private hiển thị thông tin bộ môn vào datagridview private void frmBoMon_Load(object sender, EventArgs e) { //Câu lệnh kết nối cơ sở dữ liệu OleDbConnection dbConn = new OleDbConnection("Provider = Microsoft.JET.OLEDB.4.0; Data Source = " + Application.StartupPath + "\\QLSVTT.mdb"); dbConn.Open(); //Câu lệnh truy vấn 68 OleDbDataAdapter dbAdpt = new OleDbDataAdapter("SELECT * FROM bomon", dbConn); DataSet dbSet = new DataSet(); dbAdpt.Fill(dbSet); dbConn.Close(); dtgridTTBM.DataSource = dbSet.Tables[0]; } X. Form hồ sơ sinh viên – frmHSSV Hình 4.10: From hồ sơ sinh viên - Tương tự như frmBoMon thì frmHSSV cũng được như vậy. Vào Add New Item -> Windows Form để tạo ra một form mới có tên là frmHSSV. Trong properties nhập vào text tiêu để form là: hồ sơ sinh viên - Thêm datagridview vào form, đổi thuộc tính name là dtgridHSSV 69 - Đây là form chỉ đưa ra cho đối tượng sử dụng hệ thống thông tin chung và cơ bản về sinh viên thực tập. Form này không cho thực hiện bất kỳ một chức năng của hệ thống : thêm, sửa. xóa , lưu và tìm kiếm. - Để lấy dữ liệu vào dtgridview ta bạn pahir thêm đoạn mã sau vào phương thức frmHSSV_Load: //Câu lện hiển thị thông tin về sinh viên vào datagridview private void frmHSSV_Load(object sender, EventArgs e) { //Câu lệnh kêt nối cơ sở dữ liệu OleDbConnection dbConn = new OleDbConnection("Provider = Microsoft.JET.OLEDB.4.0; Data Source = " + Application.StartupPath + "\\QLSVTT.mdb"); dbConn.Open(); //Câu lệnh truy vấn để lấy thông tin sinh viên vào datagridview string strString = "SELECT SinhVien.MaSV, SinhVien.TenSV, SinhVien.NgaySinh, SinhVien.NoiSinh, SinhVien.DiaChi, SinhVien.DienThoai, IIF(GioiTinh = True,'Nam','Nữ') AS Sex, SinhVien.Email, Lop.TenLop FROM Lop INNER JOIN SinhVien ON Lop.MaLop = SinhVien.MaLop"; OleDbDataAdapter dbAdpt = new OleDbDataAdapter(strString, dbConn); DataSet dbSet = new DataSet(); dbAdpt.Fill(dbSet); dbConn.Close(); dtgridHSSV.DataSource = dbSet.Tables[0]; } 70 XI. Form hồ sơ giảng viên – frmHSGV Hình 4.11: Form hồ sơ giảng viên - Vào Add New Item -> Windows form tạo ra một form mới có tên là frmHSGV. Trong properties nhập vapf text tiêu đề của form : Hồ sơ giảng viên. - Từ toolbox, rê thanh điều khiển datagridview vào form, đổi thuộc tính Name là dgvHSGV. - Form hồ sơ giảng viên cũng chỉ đưa ra các thông tin chung và khái quát nhất về giảng viên hướng dẫn thực tập, để đới tượng sử dụng hệ thống có thể nắm bắt một cách nhanh nhất. Form này cũng ko cho phép thay đổi thông tin trên lưới. - Đoạn mà thêm của phương thức frmHSGV_Load: private void frmHSGV_Load(object sender, EventArgs e) { //Câu lệnh kết nố cơ sở dữ liệu 71 OleDbConnection dbConn = new OleDbConnection("Provider = Microsoft.JET.OLEDB.4.0; Data Source = " + Application.StartupPath + "\\QLSVTT.mdb"); dbConn.Open(); //Câu lệnh truy vấn để lấy thông tin về giảng viên hướng dẫn thực tập string str = "SELECT GiangVienHDTT.MaGV, GiangVienHDTT.TenGV, IIF(GioiTinhGV=True,'Nam','Nữ') AS Sex, GiangVienHDTT.NgaySinhGV, GiangVienHDTT.SDT, GiangVienHDTT.EmailGV, GiangVienHDTT.DiaChiGV, BoMon.TenBM FROM BoMon INNER JOIN GiangVienHDTT ON BoMon.MaBM = GiangVienHDTT.MaBM"; OleDbDataAdapter dbAdpt = new OleDbDataAdapter(str, dbConn); DataSet dbSet = new DataSet(); dbAdpt.Fill(dbSet); dbConn.Close(); dgvHSGV.DataSource = dbSet.Tables[0]; } 72 CHƯƠNG 5 TỔNG KẾT HỆ THỐNG .5. I. Tài liệu tham khảo - Sách : Từng bước học lập trình Visual C#.Net của nhà xuất bản Lao động – xã hội - Lập trình với C# - Biên dịch từ cuốn Professional C#, 2nd Edition, Xuất bản bởi Wrox Press Ltd - Các trang web .. II. Kết luận  Quá trình thực hiện chương trình: - Thời gian thực tập: từ ngày 18/03 đến ngày 18/04/2008 - Tuần 1: + Tìm hiểu về đề tài + Phân tích sơ bộ về cơ sở dữ liệu của đề tài thực tập + Làm báo cáo tuần 1 - Tuần 2: + Triển khai thiết kế cơ sở dữ liệu + Thiết kế phân tích hệ thống về mặt dữ liệu + Làm báo cáo tuần 3 - Tuần 3: + Tìm hiểu về ngôn ngữ C# + Tìm tài liệu về C# + Tham khảo các code project quản lý khác + Thiết kế các form của hệ thống đã dự định - Tuần 4: + Tiến hành viết code cho chương trình + Sửa lỗi gặp phải khi chạy hệ thống 73 + Viết báo cáo thực tập tốt nghiệp về đề tài quản lý sinh viên thực tập.  Những ưu điểm của chương trình - Chương trình có thể thực hiện được các chức năng: thêm, xóa, sửa, lưu và tìm kiếm ở tất cả các form. - Người dùng có thể sử dụng hệ thống để thao tác bất kỳ chức năng nào trong hệ thống.  Nhược điểm: - Hệ thống chỉ sử dụng để quản lý sinh viên thực tập trong phạm vi khoa CNTT - Hệ thống vẫn chưa thực hiện được chức năng in danh sách và báo cáo, làm các report trong môi trường VS2005. Do thời gian thực tập và khả năng còn hạn hẹp, hệ thống quản lý sinh viên thực tập ở trên còn đơn giản và thiếu sót. Em rất mong nhận được sự đóng góp ý kiến của thầy cô và các bạn để chương trình của em được hoàn thiện hơn. 74 MỤC LỤC Lời mở đầu ..................................................................................................... 1 Chương 1: GIỚI THIỆU VỀ MÔI TRƯỜNG LÀM VIỆC MICROSOFT VISUAL STUDIO 2005 ................................................................................. 3 1. Tổng quan về C# ..................................................................................... 3 2. Tạo các ứng dụng .Net bằng C# .............................................................. 4 3. Cơ bản về C# .......................................................................................... 6 Chương 2: TỔNG QUAN VỀ HỆ THỐNG ................................................... 7 I. Tổng quan về đề tài ................................................................................. 7 1. Tóm tắt về bài toán .............................................................................. 7 2. Hệ thống dự định ................................................................................. 8 II. Mô tả các yêu cầu của hệ thống .............................................................. 9 1. Tổng quan về hệ thống......................................................................... 9 2. Các đối tác ......................................................................................... 11 3. Nhận định về cơ cấu quản lý của hệ thống ......................................... 11 4. Đặc tả cơ cấu quản lý của hệ thống .................................................... 12 Chương 3: PHÂN TÍCH HỆ THỐNG .......................................................... 17 I. Phân tích hệ thống về mặt xử lý ............................................................. 17 1. Biểu đồ phân cấp chức năng .............................................................. 17 2. Biểu đồ mức bối cảnh ........................................................................ 19 II. Phân tích thiết kế hệ thống về mặt dữ liệu ............................................ 21 1. Các thực thể có trong hệ thống .......................................................... 21 2. Thuộc tính cụ thể của các thực thể và chuẩn hóa chúng ..................... 21 3. Thiết kế mô hình thực thể liên kết ...................................................... 22 4. Thiết kế chi tiết cơ sở dữ liệu ............................................................. 22 Chương 4: THIẾT KẾ CHƯƠNG TRÌNH CHÍNH ...................................... 25 I. Form giao diện chính của hệ thống- frmMain ........................................ 25 1. Quá trình thiết kế và thiết lập các thuộc tính của frmMain: ................ 25 2. Xử lý các sự kiện trong Form giao diện chính: .................................. 26 75 II. Form đăng nhập của hệ thống - frmLogin ............................................. 28 1. Quá trình thiết kế và thiết lập thuộc tính của frmLogin ...................... 28 2. Xử lý các sự kiện trong frmLogin ...................................................... 29 III. Form đổi mật khẩu – frmDoiMatKhau ................................................ 31 1. Quá trình thiết kế và thiết lập thuộc tính của frmDoiMatKhau ........... 31 2. Xử lý các sự kiện trong frmDoiMatKhau ........................................... 32 IV. Form sinh viên – frmSinhVien ............................................................ 34 1. Quá trình thiết kế và thiết lập thuộc tính của frmSinhVien: ............... 34 2. Xử lý các sự kiện trong frmSinhVien:................................................ 36 V. Form Giảng viên – frmGiangVien ........................................................ 44 1. Quá trình thiết kế và thiết lập thuộc tính của frmGiangVien .............. 44 2. Xử lý các sự kiện trong frmGiangVien: ............................................. 45 VI. Form bảng điểm – frmBangDiem........................................................ 52 1. Quá trình thiết kế và thiết lập các thuộc tính của frmBangDiem ........ 52 2. Xử lý các sự kiện trong frmBangDiem .............................................. 52 VII. Forn nhóm thực tập – frmNhomTT.................................................... 58 1. Quá trình thiết kế và thiết lập các thuộc tính của frmNhomTT ........... 58 2. Xử lý các sự kiện trong frmNhomTT ................................................. 59 VIII. Form lớp – frmLop ........................................................................... 62 1. Quá trình thiết kế và thiết lập các thuộc tính trong frmLop ................ 62 2. Xử lý các sự kiện trong frmLop ......................................................... 63 IX. Form bộ môn – frmBoMon ................................................................. 67 X. Form hồ sơ sinh viên – frmHSSV ........................................................ 68 XI. Form hồ sơ giảng viên – frmHSGV .................................................... 70 Chương 5: TỔNG KẾT HỆ THỐNG ........................................................... 72 I. Tài liệu tham khảo ................................................................................. 72 II. Kết luận ................................................................................................ 72

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

  • pdf6_443.pdf