Yahoo奇摩知識+ 將於 2021 年 5 月 4 日 (美國東部時間) 終止服務。自 2021 年 4 月 20 日 (美國東部時間) 起,Yahoo奇摩知識+ 網站將會轉為唯讀模式。其他 Yahoo奇摩產品與服務或您的 Yahoo奇摩帳號都不會受影響。如需關於 Yahoo奇摩知識+ 停止服務以及下載您個人資料的資訊,請參閱說明網頁。

ABCD
Lv 4
ABCD 發問時間: 電腦與網際網路程式設計 · 1 0 年前

急急急 求 VB 2008 修改 程式碼

請幫我把以下的程式加上這些功能

在我輸入人數後,按「Enter」,在輸入完人名跟成績後。按「Enter」後,顯示座號(按照剛才輸入的人名&成績的順序為號)、人名、成績、排名,在按「Enter」後,可以找出不及格號碼,然後按「Enter」可以查詢某位同學ㄉ成績與排名,然後按「Enter」就可以跳出。

Dim name() As String

Dim score() As Integer

Dim j, s As Integer

Console.Write("請輸入人數 ", s)

s = Console.ReadLine

ReDim name(s - 1)

ReDim score(s - 1)

For j = 0 To UBound(name)

Console.Write("請輸入第.{0}.個人的姓名 ", j + 1)

name(j) = Console.ReadLine()

Console.Write("請輸入第.{0}.個人的成績 ", j + 1)

score(j) = Console.ReadLine()

Next

Array.Sort(score, name)

Dim sum, i As Integer

Dim avg As Single

For i = 0 To UBound(score)

sum += score(i)

Next

avg = sum / s

For i = UBound(name) To 0 Step -1

Console.WriteLine("{0}" & vbTab & "{1}", name(i), score(i))

Next

Console.WriteLine("====================================")

Console.WriteLine("mean" & vbTab & "{0}", avg)

Console.Read()

已更新項目:

請問(查詢某位同學ㄉ成績與排名)的部分,可以改成(能多次查詢成績與排名),然後沒輸入號碼時按[Enter]才會跳出,而不是查完1次按任一鍵就跳出,謝謝

1 個解答

評分
  • litfal
    Lv 5
    1 0 年前
    最佳解答

      Dim name() As String

      Dim score() As Integer

      Dim rank() As Integer '排名, 增加的

      Dim num() As Integer '學號, 增加的

      Dim IsPass() As Boolean '增加的

      Dim str As String '增加的

      Dim j, s As Integer

      Console.Write("請輸入人數 ", s)

      s = Console.ReadLine

      ReDim name(s - 1)

      ReDim score(s - 1)

      ReDim rank(s - 1) '增加的

      ReDim num(s - 1) '增加的

      ReDim IsPass(s - 1) '增加的

      For j = 0 To UBound(name)

       Console.Write("請輸入第.{0}.個人的姓名 ", j + 1)

       name(j) = Console.ReadLine()

       Console.Write("請輸入第.{0}.個人的成績 ", j + 1)

       score(j) = Console.ReadLine()

       num(j) = j + 1 '增加的 學號以0為起點

       rank(j) = 1 '增加的

      Next

      'Array.Sort(score, name) '排序去掉, 不排序, 方便以後來以學號搜尋學生

      Dim sum, i As Integer

      Dim avg As Single

      For i = 0 To UBound(score)

       sum += score(i)

       If score(i) >= 60 Then

        IsPass(i) = True

       End If

       For j = i To UBound(score) '增加的 紀錄名次用 若你用排序的結果當做名次 同分齊名的情況會不存在{

        If score(i) > score(j) Then

         rank(j) += 1

        ElseIf score(i) < score(j) Then

         rank(i) += 1

        End If

       Next '}增加的

      Next

      avg = sum / s

      Console.WriteLine("學號" & vbTab & "姓名" & vbTab & "成績" & vbTab & "名次")

      For i = 0 To s - 1 '改變的, 不依成績排列 不需要逆向排列了

       Console.WriteLine("{0}" & vbTab & "{1}" & vbTab & "{2}" & vbTab & "{3}", num(i), name(i), score(i), rank(i))

      Next

      Console.WriteLine("====================================")

      Console.WriteLine("mean" & vbTab & "{0}", avg)

      Console.ReadKey() '改變的

      '以下為增加的

      Console.WriteLine("不及格的人")

      Console.WriteLine("學號" & vbTab & "姓名" & vbTab & "成績")

      For i = 0 To s - 1

       If Not IsPass(i) Then

        Console.WriteLine("{0}" & vbTab & "{1}" & vbTab & "{2}", num(i), name(i), score(i))

       End If

      Next

      Console.WriteLine("====================================")

      Console.Write("請輸入欲查詢的學號 (1-{0}) ", s)

    2008-11-04 02:31:58 補充:

      str = Console.ReadLine

      If IsNumeric(str) Then

       j = str

       If j > s Or j < 1 Then

        Console.WriteLine("無此學號存在")

       Else

        Console.WriteLine("學號" & vbTab & "姓名" & vbTab & "成績" & vbTab & "名次")

    2008-11-04 02:32:01 補充:

        Console.WriteLine("{0}" & vbTab & "{1}" & vbTab & "{2}" & vbTab & "{3}", num(j - 1), name(j - 1), score(j - 1), rank(j - 1))

       End If

      End If

      Console.WriteLine("按下任一鍵結束")

      Console.ReadKey()

    2008-11-04 02:38:27 補充:

    其實以結構或類別代表學生會更好

    這樣排序與搜尋會更方便

    配合List、Dictionary甚至SortedList,可以在搜尋或排序上有更好的表現

    不過避免把問題複雜化以及改寫太多地方,有興趣再自行研究吧

    2008-11-04 13:31:12 補充:

    Do '<-加上

      Console.WriteLine("====================================")

      Console.Write("請輸入欲查詢的學號 (1-{0}) ", s)

      str = Console.ReadLine

    if str="" then Exit Do '<-加上

    :

    :

       End If

      End If

    Loop '<-加上

    參考資料: 小腦袋, 加三行解決, 輕鬆愉快
還有問題?馬上發問,尋求解答。