Em dang co bai tap quan li diem thpt nhung cai cho tinh diem tb kho wa. Co pac nao bit ko. Giup E voi
Em dang co bai tap quan li diem thpt nhung cai cho tinh diem tb kho wa. Co pac nao bit ko. Giup E voi
Nếu CSDL là Access thì bạn làm 1 cái Query rồi thêm trường ĐTB, dựa vào công thức tính điểm trung bình mà tính thôi.
VD:Thế là xong.Code:DTB:([dm1]+[dm2]+...+[dmn])/n
Trong VB bạn SELECT như sau:
rồi truy xuất như bình thường.Code:SELECT * FROM query_name
Thank pac kylobytes nhe.
[=========> Bổ sung bài viết <=========]
Pac co the jup em them dc ko?. E co csdl nhu sau.
diem(mahs,mamon,hocki,diemhs1,diemhs2,diemthi)
trong do diemhs1&diemhs2 E de kieu text. khi nhap diem e se nhap vai diem vao cac diem hs1 va hs2. sau do em dinh dung vb de tach va tinh diem. Nhung lai mac o cho la khi minh tinh rui thi ko bit lam the nao de du no vao csdl
Được sửa bởi Chip7 lúc 09:39 ngày 19-04-2009 Reason: Bổ sung bài viết
Điều này có thể làm được mà bạn, bạn sử dụng câu query sau, khi mà nhập điểm thì bạn cũng đã có mahs và mamon rồi phải không
Với các diemhs1,diemhs2 bạn đã tính và mahs, mamon đã có.Code:"update diem set diemhs1="& diemhs1 &",diemhs2=" & diemhs2 &" where mahs=" & mahs &" and mamon="& mamon
Thân
Devil 2 Angel
Empty
Xời. Sao lại để diemhs1,2 kiểu text. Integer chứ. Có mã môn rồi, nhập làm chi nhiều lần. Mỗi môn có 1 điểm hs1 và 1 điểm hs2 thôi chứ. Tính điểm thì dùng Query như mình nói. ở http://ddth.com/showthread.php?t=267006
Diem hs1 cung co nhieu diem chu pac. vi du nhu diem hs1 se có điểm miệng, điểm 15'... và điểm hs2 cũng vậy mà.
Nhưng cái này em đã xử lí dc rùi. Như pac nói thì tính diểm như vậy sẽ chỉ làm đựoc khi mỗi môn chỉ có một điểm hs1 và hs2. Khi nào rảnh
E post len các pác xem thử nhé.
OK thôi. Có gì tham khảo cái luôn.
Option Explicit
'Chon cach tinh diem cac mon hoc
Global Ch As Integer
Function hs(so) As Integer
Dim s As String
Dim X As String
Dim i, n, d, L, s1
If IsNull(so) Then
hs = 0
Else
s = so
n = Len(s)
d = 0
L = 0
For i = 1 To n
L = L + 1
X = Mid(s, L, 1)
If Asc(X) = 32 Then d = d + 1
Next
d = d + 1
hs = d
End If
End Function
Function Cong(xv) As Integer
Dim s As String
Dim X As String
Dim i, n, d, L, d1, tg1
Dim tg
tg1 = xv
If IsNull(tg1) Then
Cong = 0
Else
s = xv
n = Len(s)
End If
d = 0
L = 0
'Vong lap tinh diem
For i = 1 To n
L = L + 1
X = Mid(s, L, 1)
If X <> "" Then
tg = Asc(X)
'Kiem tra x=1 ?
If (tg = 49) And (L <> n) Then
L = L + 1
X = Mid(s, L, 1)
If X <> "" Then
tg = Asc(X)
'Kiem tra x=0 ?
If (tg = 48) Then
d1 = d1 + 10
L = L + 1
Else
'Kiem tra x = Dau cach
If (tg = 32) Then
d1 = d1 + 1
L = L - 1
End If
End If
End If
Else
If Asc(X) = 49 Then d = d + 1
If Asc(X) = 50 Then d = d + 2
If Asc(X) = 51 Then d = d + 3
If Asc(X) = 52 Then d = d + 4
If Asc(X) = 53 Then d = d + 5
If Asc(X) = 54 Then d = d + 6
If Asc(X) = 55 Then d = d + 7
If Asc(X) = 56 Then d = d + 8
If Asc(X) = 57 Then d = d + 9
End If
End If
Next
Cong = d + d1
End Function
Function DTB(dhs1, dhs2)
Dim HSC As Integer
Dim Hs1 As Integer
Dim Hs2 As Integer
Dim Hsth As Integer
Dim Ths1 As Integer
Dim Ths2 As Integer
Dim Tth As Integer
Dim td As Integer
Dim t1 As Double
'Tim he so chung
Hs1 = hs(dhs1)
Hs2 = 2 * hs(dhs2)
'Hsth = 3 * hs(Dth)
HSC = Hs1 + Hs2 '+ Hsth
'cong diem
Ths1 = Cong(dhs1)
Ths2 = 2 * Cong(dhs2)
'Tth = 3 * Cong(Dth)
td = Ths1 + Ths2 '+ Tth
'Tinh TB kiem tra
If (HSC = 0) And (td = 0) Then
td = -1
HSC = 1
t1 = td / HSC
If t1 = -1 Then
DTB = "X"
Exit Function
End If
End If
t1 = td / HSC
DTB = Round(t1, 1)
End Function
À. Hóa ra pác dùng String để nhập dạng: 9 8 5. Sau đó tách chuỗi. Nếu gặp dấu " " thì lấy số ở đằng sau...
Nhưng việc nhập điểm của pác như thế nào. Bác có thể PrintScreen cái form cho em xem ko.
Mà như vậy pác dùng Split với Join để tách và nhập chuỗi có phải dễ hơn ko. Chứ viết hẳn 1 hàm thế này, oải nhỉ.
Bác viết 1 function thế này sẽ nhàn hơn.
Còn cộng điểm TB thì có thể như sau:PHP Code:
Fucntion Diem(Str)
Dim i as Integer
Dim aSplit() as String
aSplit = Split(Str," ")
For i=0 to UBound(aSplit)
Diem = Diem + aSplit(i)
Next
End Function
Ngắn hơn của pác nhỉPHP Code:
DiemTB = Diem(hs1)+Diem(hs2)*2
Em đổi nick Kylobytes sang nick này rùi nha.
[=========> Bổ sung bài viết <=========]
Với bài của bác em có ý kiến như sau:
Việc tách ra và tính điểm thì theo cách viết function của em ở trên cho ngắn gọn.
Việc đưa vào CSDL pác có thể làm như sau:
1.Đầu tiên là phải kiểm tra xem DL đã có 3 điểm hs1 chưa (vd tối đa là 3 điểm hệ số 1 nhé) bằng lệnh:
Em có vài ý kiến trên. Mong các pác cho thêm ý kiếnPHP Code:
DiemThem = Text1.Text //Điểm thêm vào nhé
If (UBound(aSplit) = 3 Then //Kiểm tra xem là trong CSDL đã có đủ 3 điểm nhập vào chưa
MsgBox "Da du 3 diem he so 1. Khong the them diem he so 1 nua."
ElseIf (UBound(aSplit) = 0 Then //Nếu chưa nhập điểm nào vào CSDL
SQL = "INSERT table_diem(hs1) VALUES('" & DiemThem & "') WHERE mahs = " & mahs & " AND mamon = " & mamon
Rcs.Execute SQL
Else
SQL = "UPDATE table_diem SET hs1 = CONCAT('" & DiemThem & " ',DiemCu) WHERE mahs = " & mahs & " AND mamon = " & mamon
//DiemCu là chuỗi điểm cũ lấy từ CSDL
//mahs và mamon được khai báo trước nhé
Rcs.Execute SQL
End If
Được sửa bởi 1024KB lúc 20:25 ngày 26-04-2009 Reason: Bổ sung bài viết
sử dụng list control trong visual basic vb6
Bookmarks