Ai là cao thủ VB thì vô đây...

Thảo luận trong 'Tin học văn phòng' bắt đầu bởi oxygen, 19 Tháng tư 2004.

2,837 lượt xem

  1. oxygen

    oxygen Thành viên thân thiết

    Bài viết:
    83
    Đã được thích:
    0
    Em có 1 bt nhỏ như sau:

    Lập bảng tính tiền điện thoại với giá cước như sau:
    -------------------------------------------------------------------------------------
    I Số phút I Giá (đ/phút) I
    -------------------------------------------------------------------------------------
    I 0 - 300 I 120 I
    I 300 - 1000 I 80 I
    I >1000 I 40 I
    -------------------------------------------------------------------------------------
    Thuê bao = 27 000

    Tạo from gồm các mục sau:
    -------------------------------------------------------------------------------------
    I Object I Name I
    -------------------------------------------------------------------------------------
    I Textbox I txtTongsophut I
    I Textbox I txtTongsotien I
    I Command button I cmdTinh I
    -------------------------------------------------------------------------------------
    vd: nếu trong tháng ta sd 200 phút thì phải nộp 27000 + 300*120 + 300*80 = 87000 đ

    Code như sau:

    Private Sub cmdTinh_Click()
    Dim Sophut As Double
    Sophut = Val(txtTongsophut.Text)
    If Sophut > 1000 Then
    txtTongsotien.Text = 27000 + 300 * 120 + 700 * 80 + (Sophut - 1000) * 40
    Else
    If Sophut > 300 And Sophut <= 1000 Then
    txtTongsotien.Text = 27000 + 300 * 120 + (Sophut - 300) * 80
    Else
    If Sophut > 0 And Sophut <= 300 Then
    txtTongsotien.Text = 27000 + Sophut * 120
    Else
    MsgBox "Nhap so khong hop le.", vbCritical, "Thong bao"
    txtTongsophut = ""
    txtTongsophut.SetFocus
    End If
    End If
    End If
    End Sub

    Nhưng khi nhập số phút vào thì bị lỗi. Tại sao vậy?


    mẹc xy
     
    #1
  2. ForestC

    ForestC Thành viên sơ cấp

    Bài viết:
    377
    Đã được thích:
    1
    Nơi ở:
    E'rywhere
  3. trucxp

    trucxp Thành viên sơ cấp

    Bài viết:
    1
    Đã được thích:
    0
    Nơi ở:
    uderworld
    mình mới đọc sơ wa, nhưng thấy sao sao ấy
    cái chỗ setfocus của bạn ấy, chương trình này đơn giản, bạn chạy xem nó báo lỗi gì, sẽ sửa được ngay, còn không để mình về nhà chạy thử, hi, đang đi làm, ko có VB ở đây, mà cũng lười fân tích từ từ
     
    #3
  4. ghosthd

    ghosthd Thành viên sơ cấp

    Bài viết:
    1
    Đã được thích:
    0
    Nơi ở:
    Viet Nam
    Mình lâu rồi không làm trên vb nên không nhớ rõ lắm, nhưng có thể sai ở chương trình có vấn đề đó là định kiểu, mình không nhớ rõ lắm nhưng hình như vb vẫn phải định kiểu trước khi gán.
     
    Last edited: 2 Tháng tư 2005
    #4
  5. Bình_OverAC

    Bình_OverAC Over Abnormal / Crazy

    Bài viết:
    845
    Đã được thích:
    7
    Nơi ở:
    Nha Trang
    Theo tui thấy nếu bạn dùng chức năng debug có thể lần ra được lỗi của nó ngay ý mà.
    Tui đã đổi cái cái dòng
    txtTongsotien.Text = 27000 + 300 * 120 + 700 * 80 + (Sophut - 1000) * 40
    thành
    txtTongsotien.Text = 119000 + (Sophut - 1000) * 40

    và dòng
    txtTongsotien.Text = 27000 + 300 * 120 + (Sophut - 300) * 80
    thành
    txtTongsotien.Text = 63000 + (Sophut - 300) * 80

    thì chạy được.
     
    #5
  6. IChiNoVa

    IChiNoVa Phu cà phê

    Bài viết:
    134
    Đã được thích:
    4
    Nơi ở:
    Sòn Gài
    Theo mình vấn đề ở đây là bạn dùng sai kiểu dữ liệu.

    Câu lệnh sau:
    txtTongsotien.Text = 27000 + 300 * 120 + 700 * 80 + (Sophut - 1000) * 40

    Bạn khai báo số phút là kiểu Double
    Trong khi đó bạn lại dùng "txtTongsotien.text"

    Mình khuyên bạn nên dùng như sau: "txtTongsotien.value"
    bạn không nên dùng: "txtTongsotien.text"
     
    #6
  7. KKBS

    KKBS Thành viên sơ cấp

    Bài viết:
    53
    Đã được thích:
    0
    Nơi ở:
    HCM
    Vấn đề ở chỗ là bạn đã bắt VB tính toán các hằng số và VB đưa kiểu số nguyên vào để chứa kết quả nên bị lỗi overflow. Bạn chịu khó tính toán các hằng số trước rồi đưa vào dòng lệnh là mọi thứ sẽ ổn. Thử tham khảo đoạn code bên dưới. Nếu bạn mới học VB và không phải là sinh viên khoa Toán hoặc công nghệ thông tin thì thôi, nếu không thì bạn cần xem lại thuật toán và các câu lệnh đơn giản như IF... THEN ... ELSE... (trong toán học, phủ định của >1000 là <=1000, không cần kiểm tra lại nữa !)

    Private Sub cmdTinh_Click()
    Dim mSoPhut As Double
    Dim mSoTien As Double
    If Not IsNumeric(txtSoPhut) Then
    MsgBox "Vui long nhap lai so phut."
    txtSoPhut.SetFocus
    Exit Sub
    End If
    mSoPhut = Abs(CDbl(txtSoPhut.Text))
    If mSoPhut > 1000 Then
    mSoTien = 119000 + (mSoPhut - 1000) * 40
    Else
    If mSoPhut > 300 Then
    mSoTien = 63000 + (mSoPhut - 300) * 80
    Else
    mSoTien = 27000 + 120 * mSoPhut
    End If
    End If
    txtSoTien.Text = CStr(mSoTien)
    End Sub

    Thân,
    KKBS.
     
    #7
  8. Le Minh Hoang

    Le Minh Hoang Thành viên sơ cấp

    Bài viết:
    5
    Đã được thích:
    0
    Nơi ở:
    Ha Noi
    Vb!

    De giai quyet van de cua ban that don gian:
    Loi do cua ban la do sai kieu du lieu vi vay ban nen dung ham str(number) de chuyen gia tri tinh toan ve dang chuoi !
    vd:txtTong.text=str(1000+45*4+..)
    The la OKies thoi !
    Chuc thanh cong nha !
     
    #8
  9. htqtn

    htqtn Thành viên sơ cấp

    Bài viết:
    32
    Đã được thích:
    0
    Nơi ở:
    Thais Nguyeen
    Code cua bạn thiếu cái đồng hồ rồi thêm nó vào là ok mà, để khi bạn nhấn vào button I cmdTinh là đồng hồ chạy và nhân theo giá của bạn,

    chào chúc bạn thành công...
     
    #9

Chia sẻ trang này