visual basic程序设计教程第四版答案(刘炳文)
假定磁盘上有一个学生成绩文件,存放着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; "平均"
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
本站文章搜索: