假定磁盘上有一个学生成绩文件,存放着100个学生的情况,包括学号、姓名、性别、年龄和5门课程的成绩。试编写一个程序,建立以下4个文件:
(1)女生情况的文件。
(2)按5门课程成绩高低排列的学生情况的文件(需增加平均成绩一栏)?
(3)按年龄从小到大顺序排列的全部学生情况的文件。
(4)按5门课程及平均成绩的分数段(60分以下,60~70,71~80,81~90,90分以上)进行人数统计的文件。

    解:该题需要建立4个文件,其中第(2)和第(3)建立文件的操作是类似的,我们将只建立“按5门课程高低排列的学生情况的文件”。为了便于试验程序,我们给出—个学生 成绩登记表,如下:
学号       姓名     性别  年龄   成绩1  成绩2  成绩3  成绩4   成绩5   平均
20001    钟宇光  男     20       87       76      90       78       94
........
200010  况新云  女     18       87       96      92       98       93

上面的登记表共有10项,没有100项,但用来建立4个文件的操作是一样的。我们把这个登记表放到一个文件中,该文件名为stud.txt,(本程序的几个txt文件的位置都在D盘根目录)内容如下:

20001,"钟宇光","男",20,87,76,90,78,94
20002,"王海华","女",19,97,86,92,88,92
20003,"吴天明","男",21,82,86,79,86,87
20004,"王明华","女",20,89,65,74,88,84
20005,"程世清","男",22,57,46,50,68,59
20006,"于向群","女",23,67,76,70,42,64
20007,"李云清","男",18,97,86,98,89,92
20008,"钟洪涛","女",19,87,76,80,68,72
20009,"张小伟","男",24,86,63,70,68,74
200010,"况新云","女",18,87,96,92,98,93

按以下步骤操作。
(1)在窗体上画5个命令按钮。
(2)编写窗体的Load事件过程:
Private Sub Form_Load()
    Command1.Caption = "显示原来数据"
    Command2.Caption = "建立女生文件"
    Command3.Caption = "建立成绩文件"
    Command4.Caption = "建立分数段文件"
    Command5.Caption = "退  出"
End Sub
’该过程用来设置5个命令按钮的标题。

(3)执行“工程”菜单中的“添加模块”命令,建立一个新的标准模块,然后在该模块中输人如下代码:
Type Stud_Grade
    num As Long
    Stud_Name As String
    Sex As String
    Age As Integer
    Grade1 As Single
    Grade2 As Single
    Grade3 As Single
    Grade4 As Single
    Grade5 As Single
    Grade_Aver As Single
End Type

Option Base 1
Public Stud_TabIe() As Stud_Grade
Public n As Integer
’上述代码建立了一个名为Stud_Grade的记录类型,然后定义了该记录类型的一个全局数组,名为Stud_Table。

(4)编写第一个命令按钮的事件过程:
Private Sub Command1_Click()

    n = InputBox("请输人文件中的记录个数")
    n = CInt(n)
    ReDim Stud_Table(n) As Stud_Grade
    Open "d:\stud.txt" For Input As #2
    sp = "    "
    Cls
    Print "文件中原来的数据"
    Print
    Print " 学号", "姓名"; sp; "性别"; sp; "年龄"; sp; "成绩1"; sp; _
          "成绩2"; sp; "成绩3"; sp; "成绩4"; sp; "成绩5"
    Print
    For x = 1 To n
        Input #2, Stud_Table(x).num, _
              Stud_Table(x).Stud_Name, _
              Stud_Table(x).Sex, _
              Stud_Table(x).Age, _
              Stud_Table(x).Grade1, _
              Stud_Table(x).Grade2, _
              Stud_Table(x).Grade3, _
              Stud_Table(x).Grade4, _
              Stud_Table(x).Grade5

        Print Stud_Table(x).num, _
              Stud_Table(x).Stud_Name; sp; _
              Stud_Table(x).Sex; sp; _
              Stud_Table(x).Age; sp; _
              Stud_Table(x).Grade1; sp; _
              Stud_Table(x).Grade2; sp; "  "; _
              Stud_Table(x).Grade3; sp; "  "; _
              Stud_Table(x).Grade4; sp; _
              Stud_Table(x).Grade5
    Next x
    Close #2

End Sub
’该过程用来显示原始文件中的数据。它首先打开原始文件,然后从文件中读出记录,并在窗体上显示出来。程序运行后,单击该按钮,在显示的输人对话框中输人10,单击“确定”按钮,结果如下图所示。


(5)编写第二个命令按钮的代码:
Private Sub Command2_Click()
    n = InputBox("请输人文件中的记录个数")
    n = CInt(n)
    ReDim Stud_Table(n) As Stud_Grade
    Open "d:\stud.txt" For Input As #1
    sp = "    "
    Cls
    Print "女生情况的数据:"
    For x = 1 To n
        Input #1, Stud_Table(x).num, _
              Stud_Table(x).Stud_Name, _
              Stud_Table(x).Sex, _
              Stud_Table(x).Age, _
              Stud_Table(x).Grade1, _
              Stud_Table(x).Grade2, _
              Stud_Table(x).Grade3, _
              Stud_Table(x).Grade4, _
              Stud_Table(x).Grade5
    Next x
    Close #1

    Open "d:\female.txt" For Output As #1
    Print
    Print " 学号", "姓名"; sp; "性别"; sp; "年龄"; sp; "成绩1"; sp; _
          "成绩2"; sp; "成绩3"; sp; "成绩4"; sp; "成绩5"
    Print
    For x = 1 To n
        If Stud_Table(x).Sex = "女" Then
            Print Stud_Table(x).num, _
                  Stud_Table(x).Stud_Name; sp; _
                  Stud_Table(x).Sex; sp; _
                  Stud_Table(x).Age; sp; _
                  Stud_Table(x).Grade1; sp; _
                  Stud_Table(x).Grade2; sp; "  "; _
                  Stud_Table(x).Grade3; sp; "  "; _
                  Stud_Table(x).Grade4; sp; _
                  Stud_Table(x).Grade5

            Write #1, Stud_Table(x).num, _
                  Stud_Table(x).Stud_Name, _
                  Stud_Table(x).Sex, _
                  Stud_Table(x).Age, _
                  Stud_Table(x).Grade1, _
                  Stud_Table(x).Grade2, _
                  Stud_Table(x).Grade3, _
                  Stud_Table(x).Grade4, _
                  Stud_Table(x).Grade5

        End If
    Next x

    Print
    Print "以上数据已经写入文件female.txt"
    Print
    Close #1
End Sub

    该过程首先打开原始文件,把它读到内存,然后査找文件中性别为“女”的记录,把这些记录在窗体上显示出来,同时写入文件female.txt。
    程序运行后,单击该命令按钮,将显示一个输人对话框,在对话框中输人10,再单击“确定”按钮,即可在窗体上显示女生情况的记录,在显示的同时,把每个记录写人文件。

执行上述操作后,建立女生情况文件female.txt,内容如下:
20002,"王海华","女",19,97,86,92,88,92
20004,"王明华","女",20,89,65,74,88,84
20006,"于向群","女",23,67,76,70,42,64
20008,"钟洪涛","女",19,87,76,80,68,72
200010,"况新云","女",18,87,96,92,98,93

(6)编写第三个命令按钮的事件过程:
Private Sub Command3_Click()
    n = InputBox("请输入文件中的记录个数")
    n = CInt(n)
    ReDim Stud_Table(n) As Stud_Grade
    Open "d:\stud.txt" For Input As #1
    sp = "    "
    Cls
    Print "按5门课程成绩髙低排列的数据:"
    For x = 1 To n
        Input #1, Stud_Table(x).num, _
              Stud_Table(x).Stud_Name, _
              Stud_Table(x).Sex, _
              Stud_Table(x).Age, _
              Stud_Table(x).Grade1, _
              Stud_Table(x).Grade2, _
              Stud_Table(x).Grade3, _
              Stud_Table(x).Grade4, _
              Stud_Table(x).Grade5
    Next x
    Close #1

    '求平均分数
    For x = 1 To n
        Stud_Table(x).Grade_Aver = _
                   Format((Stud_Table(x).Grade1 + _
                   Stud_Table(x).Grade2 + _
                   Stud_Table(x).Grade3 + _
                   Stud_Table(x).Grade4 + _
                   Stud_Table(x).Grade5) / 5, "00.00")
    Next x

    '按平均分排序
    For k = n To 2 Step -1
        For l = 1 To k - 1
            If Stud_Table(l).Grade_Aver > Stud_Table(l + 1).Grade_Aver Then

                t = Stud_Table(l + 1).Grade_Aver
                Stud_Table(l + 1).Grade_Aver = Stud_Table(l).Grade_Aver
                Stud_Table(l).Grade_Aver = t

                t = Stud_Table(l + 1).num
                Stud_Table(l + 1).num = Stud_Table(l).num
                Stud_Table(l).num = t

                t = Stud_Table(l + 1).Stud_Name
                Stud_Table(l + 1).Stud_Name = Stud_Table(l).Stud_Name
                Stud_Table(l).Stud_Name = t

                t = Stud_Table(l + 1).Sex
                Stud_Table(l + 1).Sex = Stud_Table(l).Sex
                Stud_Table(l).Sex = t

                t = Stud_Table(l + 1).Age
                Stud_Table(l + 1).Age = Stud_Table(l).Age
                Stud_Table(l).Age = t

                t = Stud_Table(l + 1).Grade1
                Stud_Table(l + 1).Grade1 = Stud_Table(l).Grade1
                Stud_Table(l).Grade1 = t

                t = Stud_Table(l + 1).Grade2
                Stud_Table(l + 1).Grade2 = Stud_Table(l).Grade2
                Stud_Table(l).Grade2 = t

                t = Stud_Table(l + 1).Grade3
                Stud_Table(l + 1).Grade3 = Stud_Table(l).Grade3
                Stud_Table(l).Grade3 = t

                t = Stud_Table(l + 1).Grade4
                Stud_Table(l + 1).Grade4 = Stud_Table(l).Grade4
                Stud_Table(l).Grade4 = t

                t = Stud_Table(l + 1).Grade5
                Stud_Table(l + 1).Grade5 = Stud_Table(l).Grade5
                Stud_Table(l).Grade5 = t

            End If
        Next l
    Next k

    Open "d:\grade.txt" For Output As #1
    '输出按平均分排序的记录并写入到文件
    Print
    Print " 学号", "姓名"; sp; "性别"; sp; "年龄"; sp; "成绩1"; sp; _
          "成绩2"; sp; "成绩3"; sp; "成绩4"; sp; "成绩5"; sp; "平均"

    Print

    For x = 1 To n

        Print Stud_Table(x).num, _
              Stud_Table(x).Stud_Name; sp; _
              Stud_Table(x).Sex; sp; _
              Stud_Table(x).Age; sp; _
              Stud_Table(x).Grade1; sp; _
              Stud_Table(x).Grade2; sp; "  "; _
              Stud_Table(x).Grade3; sp; "  "; _
              Stud_Table(x).Grade4; sp; _
              Stud_Table(x).Grade5; sp; _
              Stud_Table(x).Grade_Aver

        Write #1, Stud_Table(x).num, _
              Stud_Table(x).Stud_Name, _
              Stud_Table(x).Sex, _
              Stud_Table(x).Age, _
              Stud_Table(x).Grade1, _
              Stud_Table(x).Grade2, _
              Stud_Table(x).Grade3, _
              Stud_Table(x).Grade4, _
              Stud_Table(x).Grade5, _
              Stud_Table(x).Grade_Aver

    Next x

    Print
    Print "以上数据已写人文件grade, txt"
    Print
    Close #1
End Sub

    该过程首先打开原始文件,把数据读到内存,接着求出5门课程的平均分数,再按平均分对记录进行排序,然后把排过序的数据在窗体上显示出来,并把这些数据写入磁盘文件。程序运行后,单击该命令按钮,在输入对话框中输人10,单击“确定”按钮,即可输出排序后的数据,在窗体上会有结果显示。

    上述过程建立的文件名为grade.txt,内容如下:

20005,"程世清","男",22,57,46,50,68,59,56
20006,"于向群","女",23,67,76,70,42,64,63.8
20009,"张小伟","男",24,86,63,70,68,74,72.2
20008,"钟洪涛","女",19,87,76,80,68,72,76.6
20004,"王明华","女",20,89,65,74,88,84,80
20003,"吴天明","男",21,82,86,79,86,87,84
20001,"钟宇光","男",20,87,76,90,78,94,85
20002,"王海华","女",19,97,86,92,88,92,91
20007,"李云清","男",18,97,86,98,89,92,92.4
200010,"况新云","女",18,87,96,92,98,93,93.2

(7)编写第四个命令按钮的事件过程:
    n = InputBox("请输人文件中的记录个数")
    n = CInt(n)
    ReDim Stud_Table(n) As Stud_Grade
    Static score(10, 6) As Single
    Dim assort(5, 6) As Single

    Open "d:\stud.txt" For Input As #1
    sp = "    "
    Cls

    For x = 1 To n
        Input #1, Stud_Table(x).num, _
              Stud_Table(x).Stud_Name, _
              Stud_Table(x).Sex, _
              Stud_Table(x).Age, _
              Stud_Table(x).Grade1, _
              Stud_Table(x).Grade2, _
              Stud_Table(x).Grade3, _
              Stud_Table(x).Grade4, _
              Stud_Table(x).Grade5

    Next x
    Close #1

    '求平均分数
    For x = 1 To n
        Stud_Table(x).Grade_Aver = _
                   Format((Stud_Table(x).Grade1 + _
                   Stud_Table(x).Grade2 + _
                   Stud_Table(x).Grade3 + _
                   Stud_Table(x).Grade4 + _
                   Stud_Table(x).Grade5) / 5, "00.00")
    Next x

    '建立分数数组

    For i = 1 To n
        score(i, 1) = Stud_Table(i).Grade1
        score(i, 2) = Stud_Table(i).Grade2
        score(i, 3) = Stud_Table(i).Grade3
        score(i, 4) = Stud_Table(i).Grade4
        score(i, 5) = Stud_Table(i).Grade5
        score(i, 6) = Stud_Table(i).Grade_Aver
    Next i

    '输出分数数组
    Print "输出分数:"
    Print
    For i = 1 To n
        For j = 1 To 6
            Print score(i, j);
        Next j
        Print
    Next i

    '对分数按分数段分类
    For i = 1 To n
        For j = 1 To 6
            If score(i, j) < 60 Then
                assort(1, j) = assort(1, j) + 1
                ElseIf score(i, j) >= 60 And score(i, j) <= 70 Then
                assort(2, j) = assort(2, j) + 1
                ElseIf score(i, j) > 70 And score(i, j) <= 80 Then
                assort(3, j) = assort(3, j) + 1
                ElseIf score(i, j) > 80 And score(i, j) < 90 Then
                assort(4, j) = assort(4, j) + 1
            Else
                assort(5, j) = assort(5, j) + 1
            End If
        Next j
    Next i

    '输出分类的分数并写人文件
    Open "d:\assort.txt" For Output As #1
    Print
    Print "*", "成绩1 "; "成绩2 "; "成绩3 "; "成绩4 "; "成绩5 "; "平均"
    Write #1, "*", "成绩1 "; "成绩2 "; "成绩3 "; "成绩4 "; "成绩5 "; "平均"
    Print
   
    For i = 1 To 5
        If i = 1 Then
            msg = "60分以下"
            ElseIf i = 2 Then
            msg = "60 ~ 70"
            ElseIf i = 3 Then
            msg = "71 ~ 80"
            ElseIf i = 4 Then
            msg = "81 ~ 90"
        Else
            msg = "90分以上"
        End If
        Print msg,
        Write #1, msg,

        For j = 1 To 6
            Print assort(i, j); "   ";
            Write #1, assort(i, j); "   ";
        Next j

        Print #1, "  "
        Print
    Next i
    Close #1
    Print
    Print "以上数据已写人文件 assort.txt"
End Sub

    该过程首先打开原始文件,把数据读到内存,接着求出每个学生课程成绩的平均分, 然后把5门课程的分数及平均分放到一个二维数组中,再对这个二维数组进行处理,从中 求出每门课程及平均分的不同分数段的人数,并把它放入另一个二维数组中。最后输出各分数段的人数,同时把这些数据写人磁盘文件。
    程序运行后,单击第四个命令按钮,在输人对话框中输人10,单击“确定”按钮后,结果如下图所示。

    以上过程建立的文件名为assort.txt,内容如下:

"*","成绩1 ","成绩2 ","成绩3 ","成绩4 ","成绩5 ","平均"
"60分以下",1,"   ",1,"   ",1,"   ",1,"   ",1,"   ",1,"   ", 
"60 ~ 70",1,"   ",2,"   ",2,"   ",3,"   ",1,"   ",1,"   ", 
"71 ~ 80",0,"   ",3,"   ",3,"   ",1,"   ",2,"   ",3,"   ", 
"81 ~ 90",6,"   ",3,"   ",0,"   ",4,"   ",2,"   ",2,"   ", 
"90分以上",2,"   ",1,"   ",4,"   ",1,"   ",4,"   ",3,"   ", 

(8)编写第五个命令按钮的事件过程:
Private Sub Command5_Click()
    End
End Sub

来源:visual basic程序设计教程第四版答案(刘炳文)

本文链接:http://www.wb98.com/vb1/post/vb_14.11.html

本站文章搜索:

<< 上一篇下一篇 >>

    相关文章

    搜索

    Tags列表

    扫我手机登录

    赞助商链接