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

Để 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>