Đánh giá chủ đề:
  • 0 Votes - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Nhờ các cao bạn giúp về cách tính điểm trung bình cho học sinh trung học cơ sở
#1
Mình làm phần mềm tính điểm trung bình môn học cho học sinh trung học cơ sở như sau:
Kiểm tra miệng và 15 phút thì hệ số 1, kiểm tra 1 tiết hệ số 2, kiểm tra học kì hệ số 3.
mình cần làm một hàm tính tổng các cột không rỗng của ktra: miệng + 15 phút + 2 x (số cột ktra 1 tiết) + 3
sau đó tính tổng điểm: (tổng miệng + 15 phút) + tổng 1 tiết x 2 + kiểm tra học kì x 3
sau đó tính điểm trung bình: tổng điểm:tổng cột không rỗng
nhưng làm mãi vẫn không ra nhờ các anh em trên diễn đàn giúp. Đây là cơ sở dữ liệu
http://www.mediafire.com/download/rrqp6w...U+LIEU.mdb
Chữ ký của phamthainguyen86 Xin chào, mình là phamthainguyen86, Tham gia http://thuthuataccess.com/forum từ ngày 08-05 -11.
Reply
Những người đã cảm ơn
#2
(04-10-13, 03:11 PM)phamthainguyen86 Đã viết: Mình làm phần mềm tính điểm trung bình môn học cho học sinh trung học cơ sở như sau:
Kiểm tra miệng và 15 phút thì hệ số 1, kiểm tra 1 tiết hệ số 2, kiểm tra học kì hệ số 3.
mình cần làm một hàm tính tổng các cột không rỗng của ktra: miệng + 15 phút + 2 x (số cột ktra 1 tiết) + 3
sau đó tính tổng điểm: (tổng miệng + 15 phút) + tổng 1 tiết x 2 + kiểm tra học kì x 3
sau đó tính điểm trung bình: tổng điểm:tổng cột không rỗng
nhưng làm mãi vẫn không ra nhờ các anh em trên diễn đàn giúp. Đây là cơ sở dữ liệu
http://www.mediafire.com/download/rrqp6w...U+LIEU.mdb

Các bạn ơi giúp mình với, vấn đề là làm sao tạo query có cột đếm, sẽ đếm các cột không trống từ m1 đến t5 nhưng mình xài hàm count trong query nó cứ báo sai hoài hà
Chữ ký của phamthainguyen86 Xin chào, mình là phamthainguyen86, Tham gia http://thuthuataccess.com/forum từ ngày 08-05 -11.
Reply
Những người đã cảm ơn
#3
(05-10-13, 09:18 PM)phamthainguyen86 Đã viết: Các bạn ơi giúp mình với, vấn đề là làm sao tạo query có cột đếm, sẽ đếm các cột không trống từ m1 đến t5 nhưng mình xài hàm count trong query nó cứ báo sai hoài hà
[1. Câu hỏi 1]
Bạn có thể sử dụng cấu trúc sau với việc dùng hàm nz để kiểm soát các cột có số liệu rỗng
Mã PHP:
SELECT a.MSHSnz(a.M1,0)+nz(a.M2,0)+nz(a.[15P1],0)+nz(a.[15P2],0)+nz(a.[15P3],0)+nz(a.[15P4],0)+nz(a.T1,0)+nz(a.T2,0)+nz(a.T3,0)+nz(a.T4,0)+nz(a.T5,0) AS Tongdiem11-Int((nz(a.M1,1000)+nz(a.M2,1000)+nz(a.[15P1],1000)+nz(a.[15P2],1000)+nz(a.[15P3],1000)+nz(a.[15P4],1000)+nz(a.T1,1000)+nz(a.T2,1000)+nz(a.T3,1000)+nz(a.T4,1000)+nz(a.T5,1000))/1000) AS Socot
FROM 
[T-DIEM] AS a
Cách này sẽ không chính xác nếu số liệu =0. Nếu muốn giải quyết tình huống số liệu = 0 thì bạn dùng cấu trúc
iif(a.M1>0,a.M1,0)+....
Bạn thử tìm hiểu tại sao ở trên tôi lại có số phép toàn rất lạ 11-Int(nz(...,1000)) sau đó lại có phép chia lấy phần nguyên INT(..../1000)

Nếu không muốn dùng cách đó, bạn có thể sử dung VBA, nhưng với cách bạn đặt câu hỏi cho thấy bạn chưa thể dùng VBA được vì thế cách tôi giới thiệu ở trên là một phương án khả dĩ.
Tuy nhiên để giúp bạn, tôi xin giới thiệu một hàm đơn giản để phục vụ tính toán như dưới đây

Bạn viết thêm một hàm CalculateMark, hàm đơn giản như trong đoạn mã này:
Mã PHP:
Function CalculateMark(theText As String) As Single
    Dim Arr 
As VariantAs LongSumVal As SinglexCounter As Long
    
' Tach chuoi dau vao thanh mang
    Arr = Split(theText, ",")
    
    ' 
Duyet qua mang
    
For 0 To UBound(Arr)
        
' Kiem tra xem du lieu co gia tri khong, neu co thi tinh tong va dem
        If Val(Arr(i)) > 0 Then
            SumVal = SumVal + Val(Arr(i))
            xCounter = xCounter + 1
        End If
    Next
    If xCounter > 0 Then
        ' 
Chi thuc hien phep chia khi co so lieu
        CalculateMark 
SumVal xCounter
    End 
If
End Function 
Sau đó bạn gọi hàm đó trong truy vấn với dạng thức sau:
Mã PHP:
SELECT a.MSHSCalculateMark(a.M1 "," a.M2 "," a.[15P1] & "," a.[15P2] & "," a.[15P3] & "," a.[15P4] & "," a.T1 "," a.T2 "," a.T3 "," a.T4 "," a.T5) AS Diemtrungbinh
FROM 
[T-DIEM] AS a
Chữ ký của paulsteigel ====================
Quốc gia hưng vong
Thất phu hữu trách
====================
Reply
Những người đã cảm ơn
#4
(05-10-13, 11:21 PM)paulsteigel Đã viết:
(05-10-13, 09:18 PM)phamthainguyen86 Đã viết: Các bạn ơi giúp mình với, vấn đề là làm sao tạo query có cột đếm, sẽ đếm các cột không trống từ m1 đến t5 nhưng mình xài hàm count trong query nó cứ báo sai hoài hà
[1. Câu hỏi 1]
Bạn có thể sử dụng cấu trúc sau với việc dùng hàm nz để kiểm soát các cột có số liệu rỗng
Mã PHP:
SELECT a.MSHSnz(a.M1,0)+nz(a.M2,0)+nz(a.[15P1],0)+nz(a.[15P2],0)+nz(a.[15P3],0)+nz(a.[15P4],0)+nz(a.T1,0)+nz(a.T2,0)+nz(a.T3,0)+nz(a.T4,0)+nz(a.T5,0) AS Tongdiem11-Int((nz(a.M1,1000)+nz(a.M2,1000)+nz(a.[15P1],1000)+nz(a.[15P2],1000)+nz(a.[15P3],1000)+nz(a.[15P4],1000)+nz(a.T1,1000)+nz(a.T2,1000)+nz(a.T3,1000)+nz(a.T4,1000)+nz(a.T5,1000))/1000) AS Socot
FROM 
[T-DIEM] AS a
Cách này sẽ không chính xác nếu số liệu =0. Nếu muốn giải quyết tình huống số liệu = 0 thì bạn dùng cấu trúc
iif(a.M1>0,a.M1,0)+....
Bạn thử tìm hiểu tại sao ở trên tôi lại có số phép toàn rất lạ 11-Int(nz(...,1000)) sau đó lại có phép chia lấy phần nguyên INT(..../1000)

Nếu không muốn dùng cách đó, bạn có thể sử dung VBA, nhưng với cách bạn đặt câu hỏi cho thấy bạn chưa thể dùng VBA được vì thế cách tôi giới thiệu ở trên là một phương án khả dĩ.
Tuy nhiên để giúp bạn, tôi xin giới thiệu một hàm đơn giản để phục vụ tính toán như dưới đây

Bạn viết thêm một hàm CalculateMark, hàm đơn giản như trong đoạn mã này:
Mã PHP:
Function CalculateMark(theText As String) As Single
    Dim Arr 
As VariantAs LongSumVal As SinglexCounter As Long
    
' Tach chuoi dau vao thanh mang
    Arr = Split(theText, ",")
    
    ' 
Duyet qua mang
    
For 0 To UBound(Arr)
        
' Kiem tra xem du lieu co gia tri khong, neu co thi tinh tong va dem
        If Val(Arr(i)) > 0 Then
            SumVal = SumVal + Val(Arr(i))
            xCounter = xCounter + 1
        End If
    Next
    If xCounter > 0 Then
        ' 
Chi thuc hien phep chia khi co so lieu
        CalculateMark 
SumVal xCounter
    End 
If
End Function 
Sau đó bạn gọi hàm đó trong truy vấn với dạng thức sau:
Mã PHP:
SELECT a.MSHSCalculateMark(a.M1 "," a.M2 "," a.[15P1] & "," a.[15P2] & "," a.[15P3] & "," a.[15P4] & "," a.T1 "," a.T2 "," a.T3 "," a.T4 "," a.T5) AS Diemtrungbinh
FROM 
[T-DIEM] AS a
Thanks bạn rất nhiều!
Bạn có thể chỉ mình học lệnh SQL và lập trình VBA ở giáo trình nào không vậy, mình tìm ở google không thấy.
Chữ ký của phamthainguyen86 Xin chào, mình là phamthainguyen86, Tham gia http://thuthuataccess.com/forum từ ngày 08-05 -11.
Reply
Những người đã cảm ơn


Có thể liên quan đến chủ đề
Chủ đề: Tác giả Trả lời: Xem: Bài mới nhất
  hướng dẫn cách tạo mã học viên honglv157 10 783 18-08-15, 01:12 PM
Bài mới nhất: honglv157
  Hỏi về cách lấy dữ liệu cũ thanh25k62 5 965 31-07-15, 09:26 PM
Bài mới nhất: maidinhdan
  [Hỏi] Đặt thuộc tính Back color và Fore Color cho form hanyoungmine 3 519 31-07-15, 08:12 AM
Bài mới nhất: thanh25k62
  GIúp mình lỗi combobox rainkv 4 361 20-07-15, 11:36 PM
Bài mới nhất: tranthanhan1962
  Hỏi cách xử lý form để khi nhập liệu đến cuối không nhảy qua record mới? diepthanh 6 412 15-07-15, 06:23 PM
Bài mới nhất: tranthanhan1962

Chuyển nhanh:


User(s) browsing this thread: 1 Guest(s)