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

  • Thread starter oxygen
  • Ngày gửi
O

oxygen

Thành viên thân thiết
9/2/04
83
0
0
#1
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
 
T

trucxp

Thành viên sơ cấp
25/2/05
1
0
0
36
uderworld
#3
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ừ
 
G

ghosthd

Thành viên sơ cấp
15/12/04
1
0
0
28
Viet Nam
#4
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.
oxygen nói:
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 hinh nhu la co van de
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 = ""Lỗi
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
 
Sửa lần cuối:
B

Bình_OverAC

Over Abnormal / Crazy
14/5/04
845
7
18
37
Nha Trang
#5
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.
 
IChiNoVa

IChiNoVa

Phu cà phê
2/4/05
134
4
18
Sòn Gài
www.xommuaban.vn
#6
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"
 
K

KKBS

Thành viên sơ cấp
23/2/05
53
0
0
46
HCM
#7
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.
 
L

Le Minh Hoang

Thành viên sơ cấp
12/7/05
5
0
0
38
Ha Noi
#8
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 !
 
H

htqtn

Thành viên sơ cấp
21/8/05
32
0
0
39
Thais Nguyeen
#9
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...
 

Thành viên trực tuyến

  • huong238
  • bé tí hon
  • Phạm Thắm 93
  • midu9x
  • aavvnguyen
  • ND Hien
  • xuanthang12a2
  • Trangtb59

Xem nhiều