2道初级vb题,求速解,最好有多种方法!!!

编一应用程序根据上网时间计算上网费用,计算方法如下:
25元基数 ≤10小时
每小时2元 10<且≤50小时
每小时1.5元 50<且≤100小时
每小时1元 >100小时
同时为了鼓励多上网,每月收费最多不超过300元。
要求:
1.⑴使用InputBox( )函数输入上网时间;当输入的上网时间为-1时不再继续计算(提示:用循环结构实现)。
⑵计算出的上网费用显示在MsgBox对话框中。
⑶单击“结束”按钮,结束程序。
2.编一VB应用程序。要求如下:
⑴ 随机产生20个学生的VB程序设计课程的成绩,存入一维数组中,并显示结果;
⑵ 求这20个学生的最高分、最低分和平均分,并显示结果;
⑶ 统计各分数段人数,即0~59、60~69、70~79、80~89、90~100,并显示结果;
⑷ 编写可对一组数据进行排序的自定义函数或过程。调用该自定义函数或过程将分数按由高到低的次序排列并输出。
⑸ 窗体界面自行设计。

楼上,上网费用的计算有问题呢,请检查一下吧,而且题意要求是用循环的

第一题:上网费计算的

em 窗体准备两个按钮,使用默认名称
Private Sub Form_Activate()
Command1.Caption = "计算"
Command2.Caption = "结束"
End Sub

Rem 计算上网费用,也要考虑输入不大于0的数时,不能收人上网费啊,不然都成抢钱了哦
Private Sub Command1_Click()
Dim ntime, fee As Integer
Do
ntime = Val(InputBox("输入上网时间,输入-1结束计算:", "上网时间(单位:小时)", 15))

If ntime = -1 Then Exit Do '输入-1,退出Do循环

If ntime <= 0 Then
fee = 0
Else
Select Case ntime
Case Is <= 10
fee = 25
Case 10 To 50
fee = 25 + (ntime - 10) * 2
Case 50 To 100
fee = 25 + (50 - 10) * 2 + (ntime - 50) * 1.5
Case Is > 100
fee = 25 + (50 - 10) * 2 + (100 - 50) * 1.5 + (ntime - 100) * 1
End Select
End If
If fee >= 300 Then fee = 300
msg = MsgBox(fee, vbOKOnly, "上网费用(单位:元)")
Loop
End Sub

Private Sub Command2_Click()
End '结束程序
End Sub

'*******************************************
'*******************************************

第二题:学生成绩的,不需要控件,单击窗体就可以生成
Private Sub Form_Click()
Dim i, score(1 To 20) As Integer, grade(1 To 5) As Integer, smax As Integer, smin As Integer, savg As Single

savg = 0
For i = 1 To 5
grade(i) = 0
Next i

Cls
Randomize
Print "20个学生的VB程序设计课程的成绩如下:"
For i = 1 To 20
score(i) = Int(101 * Rnd) '产生[0,100]区间的20个随机数
If i = 1 Then smax = score(i): smin = score(i)
If smax < score(i) Then smax = score(i) '求最高分
If smin > score(i) Then smin = score(i) '求最低分
savg = savg + score(i) '求平均分,最后结果要除以学生数

Select Case score(i) '统计各分数段人数
Case 0 To 59: grade(1) = grade(1) + 1
Case 60 To 69: grade(2) = grade(2) + 1
Case 70 To 79: grade(3) = grade(3) + 1
Case 80 To 89: grade(4) = grade(4) + 1
Case 90 To 100: grade(5) = grade(5) + 1
End Select

Print score(i);
If i Mod 10 = 0 Then Print
Next i

savg = savg / 20
Print
Print "最高分"; smax, "最低分"; smin, "平均分"; savg

Print
Print "0~59分数段:共有"; grade(1); "人"
Print "60~69分数段:共有"; grade(2); "人"
Print "70~79分数段:共有"; grade(3); "人"
Print "80~89分数段:共有"; grade(4); "人"
Print "90~100分数段:共有"; grade(5); "人"

Call sort(score) '调用排序过程,将分数从高到低排序

Print
Print "分数按由高到低的次序排列如下:"
For i = 1 To 20
Print score(i);
If i Mod 10 = 0 Then Print
Next

End Sub

Private Sub sort(a() As Integer)
Dim i, j, t
For i = LBound(a) To UBound(a) - 1
For j = i + 1 To UBound(a)
If a(i) < a(j) Then
t = a(i): a(i) = a(j): a(j) = t
End If
Next j
Next i

End Sub
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-06-02
Dim a(1 To 20) As Integer

Sub paixu(dd, aa, bb)
For i = aa To bb - 1
For j = aa + 1 To bb
If dd(i) <= dd(j) Then
uu = dd(i)
dd(i) = dd(j)
dd(j) = uu
End If
Next j
Next i
For i = aa To bb
Print dd(i); " ";
Next i
End Sub

Private Sub 成绩_Click()
Form1.Cls
Dim max As Integer
Dim min As Integer
Dim ave As Integer
For i = 1 To 20
a(i) = Int(Rnd() * 100)
Print a(i); " ";
Next i
Print
max = a(1)
min = a(1)
For i = 1 To 20
If max <= a(i) Then max = a(i)
If min >= a(i) Then min = a(i)
ave = ave + a(i)
Next i
ave = ave / 20
Print "最高分:", max
Print "最低分:", min
Print "平均分:", ave
Print
Print "0~59",
For i = 1 To 20
If a(i) <= 59 Then
Print a(i); " ";
End If
Next i
Print
Print "60~69",
For i = 1 To 20
If a(i) <= 69 And a(i) >= 60 Then
Print a(i),
End If
Next i
Print
Print "70~79",
For i = 1 To 20
If a(i) <= 79 And a(i) >= 70 Then
Print a(i),
End If
Next i
Print
Print "80~89",
For i = 1 To 20
If a(i) <= 89 And a(i) >= 80 Then
Print a(i),
End If
Next i
Print
Print "90~100",
For i = 1 To 20
If a(i) <= 100 And a(i) >= 90 Then
Print a(i),
End If
Next i
Print
Print "由高到低排序",
paixu a, 1, 20
End Sub

Private Sub 计算_Click()

Dim mony As Single
inp = InputBox("上网时间,输入-1结束计算", "上网时间", 2)
If inp = -1 Then
Exit Sub
Else
Select Case inp
Case inp <= 10
mony = 25
Case inp > 10 And inp <= 50
mony = 25 + (inp - 10) * 2
Case inp > 50 And inp <= 100
mony = 25 + (50 - 10) * 2 + (inp - 50) * 1.5
Case inp > 100
mony = 25 + (50 - 10) * 2 + (100 - 50) * 1.5 + (inp - 100) * 1
End Select
If mony >= 300 Then
mony = 300
End If
msg = MsgBox(mony, vbOKOnly, "上网费用")
End If
End Sub