- Gọi phương thức Fill đưa dữ liệu vào DataSet cụ thể Data Table tên: XoaTam: chứa các kết quả thi bị xóa, để sau này xóa thật.. - Xóa dữ liệu trong XoaTam (ban đầu phải rổng.[r]
(1)ĐỒ ÁN MÔN HỌC LỚP CĐ QUÂN KHU 9
Cho CDSL cài đặt ngông ngữ SQL Server 2000 có mơ sau:
Hãy dùng ngôn ngữ VisualBasic 2003 hay 2005 thự công việc sau:
7- Thiết kế view, thủ thụ, hàm form in điểm tổng kết năm học Biết
rằng điểm trung bình năm học =Điểm học kỳ i * tồng số đơn vị học trình học kỳ
i/Tổng số đơn vị học trình năm học Năm học tạo combo box
Sinh viên: Nguyễn Thanh Nhân
GV hướng dẫn: Phan Linh Quang
LỜI NĨI ĐẦU
Ngày nay, khoa học, cơng nghệ tiến tiến ngày phát triển cao hoàn
thiện, thay mặt đời sống người công nghệ lĩnh vực của
ngành Tin Học.
Trong thời gian tiến hành thực đồ án, chân thành cảm ơn thầy cô trong
khoa thầy Phan Linh Quang tạo điều kiện tốt cho em hồn thành đồ án
mơn học này.
Vì thời gian ngắn kiến thức có hạn nên khơng thể nghiên cứu sâu Do đó
khơng thể tránh khỏi sai sót Rất mong đóng góp ý kiến thầy các
bạn
Vĩnh Long, ngày tháng năm 2010
Sinh viên thực hiện
(2)NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN
(3)Thiết kế form in điểm tổng kết năm học có dạng sau:
Trong đó: Chọn năm học
Các nút điều khiển hình trên.
Mục đích form: In kết điểm trung bình năm học
Save: Lưu thay đổi lưới; Delete: Xóa sinh viên hành; Close:
Đóng from; Nút Cập nhật KQ thi : Để cập nhật lại đểm thi cho sinh viên
PHẦN I : GIẢI THUẬT
Giải thuật:
Tạo giao diện đồ họa:
- Mở from tên: FrmKetQua
- Tạo ComboBox liệt kê Năm Học, tên: CboNamHoc, thuộc tính khác
mặc nhiên
- Một DataGirdView(Lưới) hiển thị liệu, tên: DataGridViewKQ thuộc tính
khác
- Tạo Button có thuộc tính (text) chức sau: Save: Lưu
những thay đổi lưới; Delete: Xóa sinh viên hành; Close: Đóng from; Nút Cập
nhật KQ thi : Để cập nhật lại đểm thi cho sinh viên Lần lượt tên (name) là:
btnSave, btnDelete, , btnClose, btnCNhatKQthi, thuộc tính khác mặc nhiên.
- Tạo số nhãn (Label) có thuộc tính Text hình trên, thuộc tính khác
mặc nhiên.
PHẦN II : DIỄN GIẢI VỀ CÁC THỦ TỤC
Thủ tục load from
- Kết nối mở kết nối.
- Load liệu KQ ĐTB
- Load ComboBox NamHọc.
- Gán liệu kết ĐTB vào DataGirdView
- Gán thuộc tính khơng thêm mới, khơng xóa lưới.
Thủ tục load liệu kết ĐTB
(4)- Gọi phương thức SqlDataAdapter khởi tạo thực thi câu lệnh.
- Gọi phương thức Fill đưa liệu vào DataSet cụ thể Data Table tên: Tam
- Gọi phương thức Clear DataTable để xóa liệu DataTable Tam
(Phịng trước có liệu).
- Gọi lại phương thức Fill đưa liệu vào DataSet cụ thể Data Table tên: Tam.
- Gọi phương thức Fill đưa liệu vào DataSet cụ thể Data Table tên: XoaTam:
chứa kết thi bị xóa, để sau xóa thật
- Xóa liệu XoaTam (ban đầu phải rổng
Thủ tục load combobox Năm học:
- Chuẩn bị câu lệnh SQL chứa danh sách tất môn học cần thị.
- Gọi phương thức SqlDataAdapter khởi tạo thực thi câu lệnh.
- Gọi phương thức Fill đưa liệu vào DataSet cụ thể Data Table tên: NamHoc
- Gọi phương thức Clear DataTable để xóa liệu DataTable NamHoc
(Phịng trước có liệu).
- Gọi lại phương thức Fill đưa liệu vào DataSet cụ thể Data Table tên:
NamHoc.
- Xóa CboNamHoc.
- Nếu số dòng DataTable NamHoc dương
- Kích hoạt CboNamHoc
- Mỗi dịng DataTable NamHoc chèn dịng vào Item CboNamHoc.
- Dòng CboNamHoc dòng DataTable NămHoc.
- Kích hoạt hay phân liệt Button.
Xử lý kiện
Nút Close:
- Để đóng From.
Nút Delete:
- Nếu lưới khơng rổng
+ Xác định vị trí cần xóa (Con trỏ hành
Me
.DataGridViewKQ.CurrentCell.RowIndex)+ Lấy dòng dr từ lưới
+ cấp Phát dòng dr1 theo mẫu xoaTam để lưu liệu cần xóa
+ Copy từ dr vào dr1 (khơng t hể gán cấp phát động)
+ Xóa dịng dr khỏi lưới Tam
+ Chèn dòng dr1 vào XoaTam
+ Xác định lại chức nút nhấn
- Ngược lại
+ Xác định lại chức nút nhấn
Nút Save:
Xoá mẫu tin table tam
Nếu số dòng XoaTam khơng rổng
Mỗi dịng table XoaTam
Tạo câu lệnh xóa
(5)Dùng
DataRowState.Added
xác định mẫu tin thêm đưa vào
DataTable mới
Nếu số dịng Table khơng rổng
Mỗi dòng table mới
Tạo câu lệnh insert
Chèn dòng vào CSDL
Update mẫu tin sửa
Dùng
DataRowState.Modified
xác định mẫu tin sửa đưa vào
DataTable sửa
Nếu số dòng Table sửa khơng rổng
Mỗi dịng table sửa
Tạo câu lệnh update
Update mẫu tin vào CSDL
Xác định lại chức nút nhấn
Khi giá trị CboNamHoc thay đổi
(
CboNamHoc_SelectedValueChanged)Nếu tables NamHoc không rổng
- Biến NamHoc nhận giá trị mới
(ds.Tables("NamHoc").Rows(Me.CboNamHoc.Items.IndexOf(Me.CboNamHoc.Text)) ("namhoc")
Ngược lại biến Năm học nhận giá trị rổng
- Load lại liệu
From KQ Điểm TB:
Mã thủ tục sau
Imports System.Data.SqlClientPublic Class frmKetQua
Dim strCONN = "server=Localhost;database=Sinhvien;uid=sa;pwd="
Dim CONN As New SqlConnection(strCONN) Dim da As SqlDataAdapter
Dim ds As New DataSet Dim strnamhoc As String
Private Sub frmKetQua_Load(ByVal sender As Object, ByVal e As
System.EventArgs) Handles Me.Load Try
CONN = New SqlConnection(strCONN) CONN.Open()
Catch ex As Exception MsgBox("lổi kết nối") End Try
namhoc() loaddl()
Me.DataGridViewKQ.DataSource = ds.Tables("TAM") ds.Tables("TAM").DefaultView.AllowNew = False
ds.Tables("TAM").DefaultView.AllowDelete = False
End Sub
Sub loaddl()
Dim str As String
str = "SELECT NamHoc,HocKy,TenL,MaSV,TongD / TongDVHT AS DiemTBNamHoc,Null GhiChu"
str += " FROM (SELECT KQThi.NamHoc,KQThi.HocKy,TenL,KQThi.MaSV,"
str += "sum(DiemThi*SoDVHT) as TongD, "
str += "SUM(MonHoc.SoDVHT) AS TongDVHT"
str += " FROM KQThi,MonHoc,Lop,SinhVien"
str += " where SinhVien.MaL=Lop.MaL "
str += " and SinhVien.MaSV=KQThi.MaSV "
str += " and MonHoc.MaM=KQThi.MaM"
If strnamhoc <> "" Then
(6)End If
str += " GROUP BY KQThi.NamHoc,KQThi.HocKy,Lop.TenL,KQThi.MaSV) AS TAM "
'MsgBox(str)
da = New SqlDataAdapter(str, CONN) da.Fill(ds, "TAM")
ds.Tables("TAM").Clear() da.Fill(ds, "TAM")
da.Fill(ds, "XoaTAM")
ds.Tables("XoaTAM").Clear() End Sub
Sub namhoc()
Dim str As String
str = "select Namhoc,Hocky from NamHoc"
da = New SqlDataAdapter(str, CONN) da.Fill(ds, "NamHoc")
ds.Tables("NamHoc").Clear() da.Fill(ds, "NamHoc")
If ds.Tables("NamHoc").Rows.Count > Then
Me.CboNamHoc.Items.Clear() Dim i As Integer
For i = To ds.Tables("NamHoc").Rows.Count -
Me.CboNamHoc.Items.Add(ds.Tables("NamHoc").Rows(i)("Namhoc")) Next
Me.CboNamHoc.Text = ds.Tables("NamHoc").Rows(0)("Namhoc") Else
Me.CboNamHoc.Enabled = False
End If
End Sub
Private Sub btnClose_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles BtnClose.Click Me.Close()
End Sub
Private Sub CboNamHoc_SelectedValueChanged(ByVal sender As Object, ByVal e As
System.EventArgs) Handles CboNamHoc.SelectedValueChanged If ds.Tables("NamHoc").Rows.Count > Then
strnamhoc =
ds.Tables("NamHoc").Rows(Me.CboNamHoc.Items.IndexOf(Me.CboNamHoc.Text))("namhoc") Else
strnamhoc = ""
End If
loaddl()
If ds.Tables("TAM").Rows.Count = Then
Me.BtnDelete.Enabled = False
Me.btnSave.Enabled = False
Me.BtnClose.Enabled = True
End If
End Sub
Private Sub BtnDelete_Click(ByVal sender As Object, ByVal e As
System.EventArgs) Handles BtnDelete.Click
Dim vt As Integer = Me.DataGridViewKQ.CurrentCell.RowIndex Dim dr, dr1 As DataRow
If ds.Tables("TAM").Rows.Count > Then
dr = ds.Tables("TAM").Rows(vt) dr1 = ds.Tables("xoaTAM").NewRow dr1("HocKy") = dr("HocKy")
dr1("MaSV") = dr("MaSV") dr1("HoTen") = dr("HoTen") dr1("TenL") = dr("TenL")
dr1("TongsoDVHT") = dr("TongsoDVHT") dr1("DTB") = dr("DTB")
dr1("Ghichu") = dr("Ghichu")
ds.Tables("TAM").Rows.RemoveAt(vt) ds.Tables("xoaTAM").Rows.Add(dr1) Me.BtnDelete.Enabled = True
Me.btnSave.Enabled = True
Me.BtnClose.Enabled = False
(7)Me.BtnDelete.Enabled = False
Me.btnSave.Enabled = False
Me.BtnClose.Enabled = True
End If
End Sub
Private Sub BtnSave_Click(ByVal sender As Object, ByVal e As
System.EventArgs) Handles btnSave.Click Dim i As Integer
Dim dr As DataRow Dim str As String
If ds.Tables("xoaTAM").Rows.Count > Then
For i = To ds.Tables("xoaTAM").Rows.Count - dr = ds.Tables("xoaTAM").Rows(i)
str = "Delete TAM where MaSV='" & dr("MaSV") & "' "
'MsgBox(str)
Dim cmd As New SqlCommand(str, CONN) cmd.ExecuteNonQuery()
Next
End If
ds.Tables("xoaTAM").Clear() Dim dt As DataTable
dt = ds.Tables("KQthi").GetChanges(DataRowState.Added) If Not dt Is Nothing Then
For i = To dt.Rows.Count - dr = dt.Rows(i)
str = "Insert into
TAM(NamHoc,HocKy,MaL,MaSV,Ho,ten,TongsoDVHT,DTB,GhiChu) Values("
str += "'" & strnamhoc & "'"
str += ",'" & dr("HocKy") & "'"
str += ",N'" & dr("TenL") & "'"
str += ",'" & dr("MaSV") & "'"
str += ",N'" & dr("HoTen") & "',"
If Not IsDBNull(dr("TongsoDVHT")) Then
str += "NULL,"
Else
str += "'" & dr("TongSoDVHT") & "',"
End If
If Not IsDBNull(dr("DTB")) Then
str += "NULL,"
Else
str += "'" & dr("DTB") & "',"
End If
If Not IsDBNull(dr("GhiChu")) Then
str += "NULL,"
Else
str += "N'" & dr("GhiChu") & "')"
End If
'MsgBox(str)
Dim cmdcomm As New SqlCommand(str, CONN) cmdcomm.ExecuteNonQuery()
Next
End If
loaddl()
Me.BtnDelete.Enabled = True
Me.btnSave.Enabled = True
Me.BtnClose.Enabled = True
End Sub
Private Sub BtnCNhatKQThi_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles BtnCNhatKQThi.Click frmKQThi.Show()
End Sub End Class
(8)Trong đó: Chọn năm học
Các nút điều khiển hình trên.
DataGirdViewKQThi
Nút Add: Thêm mới
Nút Cancel: Bỏ qua hành động thực hiện
Nút Save: lưu điểm tổng kết.
Nt Delete: Xóa điểm KQThi
Nút Close: Đóng from.
PHẦN II : GIẢI THUẬT
- Tạo dự án tên: SinhVien.
- Mở from tên: Frm KQThi
- Tạo ComboBox liệt kê Năm học, tên: CboNamHoc1 thuộc tính khác
mặc nhiên
- Một DataGirdView(Lưới) hiển thị liệu tên: DataGirdViewKQThi thuộc
tính khác
- Tạo Button có thuộc tính (text) chức sau:
* Delete: Xóa mẫu tin hành
* Save: Lưu thay đổi lưới
* Close: Đóng from.
* Cancel: Bỏ qua hành động thực hiện
* Add: Thêm mới
- Các Button có tên là: btnDelete, btnCancel, btnClose, btnSave, btnAdd,
Cancel thuộc tính khác mặc nhiên.
- Tạo số nhãn (Label) có thuộc tính Text hình trên, thuộc tính khác
mặc nhiên.
Thủ tục load from, Thủ tục load liệu kết ĐTB, Thủ tục load combobox
(9)Chỉ thêm nút Add Cancel
Nút Add:
- Thêm dòng (DataRow)
- Xác định số thuộc tính dịng có thể
- Chèn dịng vào lưới(DataTable)
- Kích hoạt nút: Add, Delete, Save
- Phân liệt nút: Close, Cancel
Nút Cancel:
- Load liệu
- Kích hoạt nút: Add, Save,Cancel
- Phân liệt nút: Delete, Close
From KQThi:
Mã thủ tục sau
Imports System.Data.SqlClientPublic Class frmKQThi
Dim strCONN = "server=Localhost;database=Sinhvien;uid=sa;pwd="
Dim CONN As New SqlConnection(strCONN) Dim da As SqlDataAdapter
Dim ds As New DataSet
Dim strnamhoc As String = ""
Private Sub frmKetQua_Load(ByVal sender As Object, ByVal e As
System.EventArgs) Handles Me.Load
If CONN.State = ConnectionState.Closed Then
CONN.Open() End If
namhoc() loaddl()
Me.DataGridViewKQThi.DataSource = ds.Tables("KQThi") ds.Tables("KQThi").DefaultView.AllowNew = False
ds.Tables("KQThi").DefaultView.AllowDelete = False
End Sub
Sub loaddl()
Dim str As String
str = "select NamHoc,HocKy,MaL,MaSV,MaM,LanThi,Diemthi,GhiChu"
str += " from KQThi where"
If strnamhoc <> "" Then
str += " Namhoc='" & strnamhoc & "'"
End If
'MsgBox(str)
da = New SqlDataAdapter(str, CONN) da.Fill(ds, "KQThi")
ds.Tables("KQThi").Clear() da.Fill(ds, "KQThi")
da.Fill(ds, "XoaKQThi")
ds.Tables("XoaKQThi").Clear() End Sub
Sub namhoc()
Dim str As String
str = "select Namhoc,Hocky from NamHoc"
da = New SqlDataAdapter(str, CONN) da.Fill(ds, "NamHoc")
ds.Tables("NamHoc").Clear() da.Fill(ds, "NamHoc")
If ds.Tables("NamHoc").Rows.Count > Then
Me.CboNamHoc.Items.Clear() Dim i As Integer
For i = To ds.Tables("NamHoc").Rows.Count -
Me.CboNamHoc.Items.Add(ds.Tables("NamHoc").Rows(i)("Namhoc")) Next
(10)Me.CboNamHoc.Enabled = False
End If
End Sub
Private Sub btnClose_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles BtnClose.Click Me.Close()
End Sub
Private Sub CboNamHoc_SelectedValueChanged(ByVal sender As Object, ByVal e As
System.EventArgs) Handles CboNamHoc.SelectedValueChanged If ds.Tables("NamHoc").Rows.Count > Then
strnamhoc =
ds.Tables("NamHoc").Rows(Me.CboNamHoc.Items.IndexOf(Me.CboNamHoc.Text))("namhoc") Else
strnamhoc = ""
End If
loaddl() End Sub
Private Sub BtnAdd_Click(ByVal sender As Object, ByVal e As System.EventArgs)
Handles BtnAdd.Click Dim dr As DataRow
dr = ds.Tables("KQThi").NewRow ds.Tables("KQThi").Rows.Add(dr) Me.BtnAdd.Enabled = True
Me.btnCancel.Enabled = True
Me.BtnDelete.Enabled = False
Me.btnSave.Enabled = True
Me.BtnClose.Enabled = False
End Sub
Private Sub BtnCancel_Click(ByVal sender As Object, ByVal e As
System.EventArgs) Handles btnCancel.Click loaddl()
Me.BtnAdd.Enabled = True
Me.btnCancel.Enabled = False
Me.BtnDelete.Enabled = True
Me.btnSave.Enabled = False
Me.BtnClose.Enabled = True End Sub
Private Sub BtnDelete_Click(ByVal sender As Object, ByVal e As
System.EventArgs) Handles BtnDelete.Click
Dim vt As Integer = Me.DataGridViewKQThi.CurrentCell.RowIndex Dim dr, dr1 As DataRow
If ds.Tables("KQThi").Rows.Count > Then
dr = ds.Tables("KQThi").Rows(vt) dr1 = ds.Tables("xoaKQThi").NewRow dr1("HocKy") = dr("HocKy")
dr1("MaSV") = dr("MaSV") dr1("MaL") = dr("MaL") dr1("MaM") = dr("MaM")
dr1("LanThi") = dr("LanThi") dr1("DiemThi") = dr("DiemThi") dr1("Ghichu") = dr("Ghichu")
ds.Tables("KQThi").Rows.RemoveAt(vt) ds.Tables("xoaKQThi").Rows.Add(dr1) Me.BtnAdd.Enabled = True
Me.btnCancel.Enabled = True
Me.BtnDelete.Enabled = True
Me.btnSave.Enabled = True
Me.BtnClose.Enabled = False
Else
Me.BtnAdd.Enabled = True
Me.btnCancel.Enabled = False
Me.BtnDelete.Enabled = False
Me.btnSave.Enabled = False
Me.BtnClose.Enabled = True
End If
End Sub
Private Sub BtnSave_Click(ByVal sender As Object, ByVal e As
(11)Dim i As Integer
Dim dr As DataRow Dim str As String
If ds.Tables("xoaKQThi").Rows.Count > Then
For i = To ds.Tables("xoaKQthi").Rows.Count - dr = ds.Tables("xoaKQthi").Rows(i)
str = "Delete KQthi where DiemThi='" & dr("DiemThi") & "' "
'MsgBox(str)
Dim cmd As New SqlCommand(str, CONN) cmd.ExecuteNonQuery()
Next
End If
ds.Tables("xoaKQthi").Clear() Dim dt As DataTable
dt = ds.Tables("KQthi").GetChanges(DataRowState.Added) If Not dt Is Nothing Then
For i = To dt.Rows.Count - dr = dt.Rows(i)
str = "Insert into
KQThi(NamHoc,HocKy,MaL,MaSV,MaM,LanThi,DiemThi,GhiChu) Values("
str += "'" & strnamhoc & "'"
str += ",'" & dr("HocKy") & "'"
str += ",'" & dr("MaL") & "'"
str += ",'" & dr("MaSV") & "'"
str += ",'" & dr("MaM") & "'"
str += ",'" & dr("LanThi") & "'"
str += ",'" & dr("DiemThi") & "',"
If Not IsDBNull(dr("GhiChu")) Then
str += "NULL,"
Else
str += "N'" & dr("GhiChu") & "')"
End If
'MsgBox(str)
Dim cmdcomm As New SqlCommand(str, CONN) cmdcomm.ExecuteNonQuery()
Next
End If
Dim sql As String
dt = ds.Tables("KQthi").GetChanges(DataRowState.Modified) If Not dt Is Nothing Then
For i = To dt.Rows.Count - dr = dt.Rows(i)
sql = "update KQThi set"
sql += " HocKy='" & dr("HocKy") & "',"
sql += " LanThi='" & dr("LanThi") & "'"
sql += ",DiemThi='" & dr("DiemThi") & "',"
If Not IsDBNull(dr("GhiChu")) Then
sql += "GhiChu=NULL"
Else
sql += "GhiChu=N'" & dr("GhiChu") & "'"
End If
sql += " where MaL='" & dr("MaL") & "'"
sql += " and MaSV='" & dr("MaSV") & "'"
sql += " and MaM='" & dr("MaM") & "'"
sql += " and Namhoc='" & strnamhoc & "'"
'MsgBox(sql)
Dim cmdcom As New SqlCommand(sql, CONN) cmdcom.ExecuteNonQuery()
Next
End If
loaddl()
Me.BtnAdd.Enabled = True
Me.btnCancel.Enabled = False
Me.BtnDelete.Enabled = True
Me.btnSave.Enabled = False
Me.BtnClose.Enabled = True
(12)Private Sub DataGridKQThi_DoubleClick(ByVal sender As Object, ByVal e As
System.EventArgs) Handles DataGridViewKQThi.DoubleClick Me.btnSave.Enabled = True
Me.BtnClose.Enabled = False
End Sub End Class