• Thứ Ba, 16/01/2007 13:52 (GMT+7)

    Tạo bộ đếm số người online bằng ASP.NET

    Câu hỏi :
    Xin hướng dẫn lập trình asp.net để tạo bộ đếm số người online và dịch từ số đó sang chữ. 
     

    Trả lời :

    Cụm từ "số người on-line" của bạn không rõ ràng, thường thì người ta chỉ muốn đếm xem có bao nhiêu người đã truy xuất website cụ thể. Để xây dựng trang ASP hiển thị dòng chữ miêu tả số người đã truy xuất website (hay trang web) của mình, bạn cần giải quyết 2 vấn đề cơ bản:
     - Viết hàm chuyển đổi từ số nguyên sang dòng chữ phát âm số nguyên đó.
     - Tăng counter đếm (thường phải được để trên file hay database để lưu giữ lâu dài ngay cả khi trang web không được truy xuất hay máy server bị shutdown), rồi dùng hàm chuyển đổi counter hiện hành sang chuỗi phát âm tương ứng và hiển thị ở vị trí thích hợp trên trang web.
     Đoạn lệnh sau đây là của trang ASP demo do chúng tôi viết, mỗi khi có người dùng nào đó truy xuất sẽ lưu thông tin về người dùng đó lên table tên là ClientsTab, rồi đếm tổng số người dùng đã truy xuất từ trước đến nay và hiển thị chuỗi phát âm lên trang web kết quả:
     <html>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
     <head>
     <%
     '------------------------------------
     ' Hàm đổi 1 số có tối đa 3 ký số thành chuỗi tương ứng.
     '-------------------------------------
     Private Function sotram2chu(socandoi) 'As String
     ' Khai báo dữ liệu
     Dim chuso(11) 'As String
     Dim shangchuc, shangtram, shangdonvi
     Dim str 'As String
     chuso(1) = "một"
     chuso(2) = "hai"
     chuso(3) = "ba"
     chuso(4) = "bốn"
     chuso(5) = "năm"
     chuso(6) = "sáu"
     chuso(7) = "bảy"
     chuso(8) = "tám"
     chuso(9) = "chín"
     str = ""
     ' Kiểm tra số cần đổi có hợp lệ không
     If socandoi >= 1000 Then
     sotram2chu = "???"
     Exit Function
     End If
     'Xác định 3 ký số miêu tả hàng trăm, hàng chục & đơn vị
     shangtram = socandoi \ 100
     socandoi = socandoi Mod 100
     shangchuc = socandoi \ 10
     shangdonvi = socandoi Mod 10
     If shangtram >= 1 Then
     str = chuso(shangtram) & " trăm"
     End If
     If shangchuc >= 2 Then
     str = str & " " & chuso(shangchuc) & " mươi"
     ElseIf shangchuc = 1 Then
     str = str & " mười"
     End If
     If shangdonvi = 0 Then
     sotram2chu = str
     Exit Function
     End If
     If shangchuc = 0 Then
     If shangtram <> 0 Then
     str = str & " lẻ " & chuso(shangdonvi)
     Else
     str = str & " " & chuso(shangdonvi)
     End If
     sotram2chu = str
     Exit Function
     End If
     If shangchuc = 1 Then
     If shangdonvi <> 5 Then
     str = str & " " & chuso(shangdonvi)
     Else
     str = str & " lăm"
     End If
     sotram2chu = str
     Exit Function
     End If
     If shangdonvi = 1 Then
     str = str + " mốt"
     ElseIf shangdonvi = 5 Then
     str = str + " lăm"
     Else
     str = str + " " + chuso(shangdonvi)
     End If
     sotram2chu = str
     End Function
     
     '------------------------------------
     ' Hàm đổi 1 số nguyên bất kỳ thành chuỗi phát âm tương ứng
     '------------------------------------
     Private Function so2chu(socandoi)
     Dim idx 'As Integer
     Dim ba_kyso 'As Integer
     Dim str, str_tram 'As String
     Dim tu_ngan_cach 'As String
     Dim chu_cach(5) 'As String
     chu_cach(1) = "tỷ"
     chu_cach(2) = "ngàn"
     chu_cach(3) = "triệu"
     idx = 0 ' vi tri dau cham phan cach tung 3 ky so
     str = ""
     str_tram = ""
     While socandoi <> 0
     ba_kyso = socandoi Mod 1000
     socandoi = socandoi \ 1000
     str_tram = sotram2chu(ba_kyso) 'nen bo cac khoang trong dan dau
     If idx = 0 Then ' vi tri don vi
     str = str_tram
     ElseIf Len(str_tram) <> 0 Then 'vi tri ngan, trieu, ty
     tu_ngan_cach = chu_cach((idx Mod 3) + 1)
     str = str_tram + " " + tu_ngan_cach + " " + str
     ElseIf (idx Mod 3) = 0 Then
     str = "tỷ " + str
     End If
     idx = idx + 1
     Wend
     so2chu = str
     End Function
     
     //hàm lưu thông tin về người dùng truy xuất và đếm số lượt người
     Function UserCount()
     'khai báo các biến cần dùng
     dim MyConnection
     dim MyCommand
     dim MyRecordset
     'tạo 1 connection đến database dung DSN
     set MyConnection = Server.CreateObject("ADODB.Connection")
     MyConnection.Open "DSN=MyDatabase"
     
     'tạo đối tượng Command
     set MyCommand = Server.CreateObject("ADODB.Command")
     MyCommand.ActiveConnection = MyConnection
     'lưu thông tin người dùng đang truy xuất vào database
     MyCommand.CommandText = "INSERT INTO ClientsTab VALUES ('" & Request.ServerVariables("Remote_Addr") & "','" & Request.ServerVariables("Path_Info") & "','" & Request.ServerVariables("HTTP_User_Agent") & "')"
     MyCommand.Execute()
     'đọc tất cả record trong table ClientsTab
     MyCommand.CommandText = "SELECT * FROM ClientsTab"
     set MyRecordset = MyCommand.Execute()
     clientnum = 0
     'đếm số record trong table ClientsTab
     Do While Not MyRecordset.EOF
     clientnum = clientnum + 1
     MyRecordset.MoveNext
     Loop
     'đổi số lượt người ra chuỗi phát âm
     usercount=so2chu(clientnum)
     'đóng các đối tượng đã dùng lại
     MyRecordset.Close
     MyConnection.Close
     End Function
     %>
     </head>
     
     <body>
     Bạn là người truy cập thứ <b><%=UserCount()%></b> tới trang web này.
     ...
     </body>
     </html>
     

    Chuyên mục: Lập trình