VB课程设计-学生成绩处理系统

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

长江大学
Yangtze university
VB课程设计实习报告
专业班级﹕储运11001
学生学号﹕201007078
学生姓名﹕彭壮
班级序号﹕16
指导老师﹕冯翠丽
完成时间﹕2011-12—22
一.设计题目
学生成绩管理系统
二.设计思路
从文本中读取文件数据,利用VB的顺序结构,选择结构,循环结构编写程序代码,最终将各代码写入界面设计中的各菜单下.
三.程序实现的目标
本程序将实现从文本中读取数据,赋值数据,运算数据,实现对学生的加权平均值,名次,全班每门课的分数段,不及格同学名单,优等生名单
等运算,并写入文件。

四.程序设计框图
五。

运行结果
原始成绩
课程学分
原始成绩和原始课程学分文件读取
原始课程文件
加权平均分
成绩排名
每门课程的班级平均分
加权平均分分布
每门课程及分布
成绩条
优等生名单
不及格学生名单
成绩查询系统按姓名查找
示例﹕
按学号查找
示例﹕
按名次查找
示例﹕
六.源程序
模块代码:
Type xscjb
xh As String
xm As String
cj(1 To5)AsInteger
aver As Single
mcAs Integer
EndType
Type kechen
编号AsInteger
课程名As String
学分As Single
End Type
Public stu() As xscjb
Public ke() Askechen
PublicN%, M%,Zxf%
Public str As String
窗体代码:
①Form1:
Public Function space1(ByVal sssAs String)
Dimx%
x =InStr(sss, "")
DoWhilex> 0
sss=Replace(sss,”", ”")
x = InStr(sss," ”)
Loop
space1 = sss
EndFunction
Private Sub ajqfspm_Click()
Dim t!, k As Single
Form1.Cls
Form1.FontSize= 12
Form1。

PrintTab(25);"学号姓名平均分名次"
stu(0).mc = 0
stu(0).aver= 0
t = 1
For i =1To N
t= 1
If stu(i).aver= stu(i-1)。

aver Then
stu(i)。

mc =stu(i — 1)。

mc
Else:
For j= 1 To N
Ifstu(i)。

aver 〈stu(j)。

averThen
t =t+ 1
End If
Next j
End If
stu(i).mc =t
Form1。

PrintTab(25);stu(i).xh;Tab(34);st u(i)。

xm; Tab(44);stu(i).aver;Tab(54);stu(i).mc Next i
End Sub
Private Subamccz_Click()
Dim l!,x!
Form1.Cls
l =Val(InputBox("请输入名次"))
For i =1To N
Ifstu(i).mc =lThen
x =x + 1:Form1。

Print ”学号姓名英语VB化学物理数学加权平均分名次”:
PrintTab(2);stu(i)。

xh; Tab(9);stu(i).xm; Tab(18); stu(i).cj(1); Tab(27);stu(i).cj(2); Tab(34); stu(i)。

cj(3);Tab(43);stu(i)。

cj(4);Tab(52);stu(i)。

cj(5);Tab(60);stu(i)。

aver; Tab(75);stu(i)。

mc:Form1。

Print
End If
Next i
If x=0Then MsgBox(”无效请重新输入!")
EndSub
Private Sub axhcz_Click()
Form1.Cls
Dim v!, x!
v =Val(InputBox("请输入学号”))
Fori =1 To N
If stu(i).xh= vThen
x = x+ 1: Form1.Print ”学号姓名英语VB 化学物理数学加权平均分名次":
PrintTab(2);stu(i).xh;Tab(9); stu(i)。

xm; Tab(18);stu(i)。

cj(1);Tab(27); stu(i).cj(2);Tab(34);stu(i).cj(3); Tab(43); stu(i).cj(4);Tab(52); stu(i)。

cj(5);Tab(60); stu(i).aver; Tab(75);stu(i)。

mc: Form1.Print
End If
Next i
Ifx = 0 ThenMsgBox(”学号无效请重新输入!")
End Sub
PrivateSubaxmcz_Click()
Form1.Cls
Form1.FontSize= 9
Dimk$,x!
k = InputBox(”请输入姓名")
For i = 1 To N
Ifstu(i)。

xm = kThen
x= i:Form1.Print"学号姓名英语VB化学物理数学加权平均分名次":
Print Tab(2); stu(i)。

xh; Tab(9); stu(i).xm;Tab(18);stu(i).cj(1);Tab(27); stu(i).cj(2); Tab(34);stu (i)。

cj(3);Tab(43);stu(i)。

cj(4);Tab(52);stu(i).cj(5);Tab(60);stu(i).aver;Tab(75);stu(i)。

mc: Form1。

Print
End If
Next i
Ifx=0ThenMsgBox("查无此人请重新输入!")
End Sub
Private Sub bjgxsmd_Click()
Form1.Cls
Form1。

FontSize= 16
Form1.Print Tab(12);"挂科学生的名单!"
Form1。

FontSize =12
Form1.Print
Form1。

Print
Open"不及格学生名单.txt”For OutputAs #1
Form1。

PrintTab(30);"学号”;Tab(38);”姓名"; Ta b(46);"课程名”;Tab(54); ”学分"; Tab(62); ”成绩"
Write#1, "学号",”姓名", ”课程名”,”学分", "成绩" Form1。

Print
For i = 1ToM
For j = 1 To N
If stu(j).cj(i)〈60Then
PrintTab(30);stu(j).xh;Tab(38); stu(j).xm;Tab (46);ke(i)。

课程名;Tab(54);ke(i)。

学分; Tab(62);stu(j).cj(i)
Write#1,stu(j)。

xh,stu(j).xm, ke(i)。

课程名, ke(i)。

学分,stu(j)。

cj(i)
EndIf
Nextj
Nexti
Close #1
End Sub
Private Sub Form_Load()
Dim st$(),Str1$
Open App。

Path+"\学生成绩.txt”For InputAs #1
Open App.Path + "\课程学分。

txt"For Input As#2
N= 0: M = 0:Zxf=0
Line Input #1,Str1
Do While Not EOF(1)
N= N + 1
ReDim Preserve stu(N)
Line Input#1,Str1Str1 = Trim(Str1)
Str1 =space1(Str1)
st1 = Split(Str1," ")
stu(N)。

xh = st1(0)
stu(N)。

xm= st1(1)
stu(N)。

cj(1) = st1(2)
stu(N).cj(2)= st1(3)
stu(N).cj(3)=st1(4) stu(N)。

cj(4) =st1(5)
stu(N).cj(5) =st1(6)
stu(N).aver=0
stu(N).mc = 0
Loop
Line Input#2,Str1 Do While NotEOF(2)
M= M+1
ReDim Preserveke(M)
Line Input#2,Str1
Str1 = Trim(Str1)
Str1= space1(Str1)
st1 = Split(Str1,"") ke(M).编号=st1(0)
ke(M).课程名=st1(1)
ke(M).学分= st1(2)
Zxf=Zxf + ke(M).学分
Loop
Close#1
Close#2
End Sub
PrivateSubjqpjffb_Click()Form1.Cls
Form1。

FontSize = 12
Print
Form1.Print
For i= 1 To 6
Form1。

Print
Next i
Dim s(5 To10),g
For i = 1To N
g =stu(i)。

aver \ 10
SelectCase g
Case 0To 5
s(5)=s(5)+ 1
Case 6
s(6)=s(6) + 1
Case7
s(7)= s(7)+ 1
Case 8
s(8)=s(8) + 1
Case9
s(9) = s(9)+ 1
EndSelect
Next i
PrintTab(30);" 范围人数"
If s(5)<> 0Then Print Tab(19);"<60分";s (5)
Print
For i= 6 To 8
If s(i)<〉0Then Print Tab(29);i *10; "—";(i * 10+ 9);Tab(44);s(i)
Print
Nexti
If s(9) <〉0Or s(10) <>0Then Print Tab(30); "90-100";Tab(44);s(9)+ s(10)
End Sub
Private Sub mmkcdbjpjf_Click()
Form1.Cls
Dim a,b,c, d,e
a =0:
b = 0:
c = 0:
d =0:
e = 0
Fori =1To N
a =a +stu(i).cj(1)
b= b +stu(i)。

cj(2)
c=c+ stu(i).cj(3)
d= d +stu(i).cj(4)
e= e +stu(i).cj(5)
Next i
a=Format(a / N,"0.00”)
b = Format(b/ N,"0。

00”)
c = Format(c /N, "0。

00")
d=Format(d / N,"0.00")
e=Format(e/ N, "0.00")
Form1.FontSize= 12
Form1.Print Tab(10); ”课程平均分"Form1。

Print
Form1.FontSize =12
Form1.Print Tab(10); ”英语”;Tab(26); a
Form1.Print
Form1.Print Tab(10); "VB”; Tab(26); b
Form1.Print
Form1.Print Tab(10);"化学";Tab(26); c
Form1。

Print
Form1.PrintTab(10); ”物理";Tab(26); d Form1。

Print
Form1.Print Tab(10); "数学";Tab(26); e
End Sub
PrivateSub mmkcjfb_Click()
Form2.Show
Form1.Cls
Form1。

FontSize =12
Print
Form1.Print
For i =1 To 6
Form1.Print
Next i
Dim s(5 To10),g
For i= 1 ToN
g= stu(i)。

aver \ 10
Select Case g
Case 0 To 5
s(5) = s(5)+ 1
Case 6
s(6) = s(6)+ 1
Case7
s(7)= s(7) + 1
Case 8
s(8)=s(8)+ 1
Case9
s(9)= s(9)+ 1
End Select
Next i
Print Tab(30);”范围人数"
Ifs(5)<>0 Then Print Tab(19);”<60分”; s(5)
Print
For i= 6To8
If s(i)〈> 0 Then PrintTab(29); i *10; "—";(i * 10 +9);Tab(44);s(i)
Print
Next i
If s(9) 〈〉0Or s(10)〈〉0Then Print Tab(30);"90-100";Tab(44);s(9)+ s(10)
End Sub
Private Sub mwxsdcjt_Click()
Form1.Cls
Form1.FontSize=12
Open ”学生成绩条。

Txt"For OutputAs #1
Form1.Print ”学号姓名英语VB 化学物理数学加权平均分名次"
Write#1,"学号", ”姓名","英语”,”VB","化学",”物理", "数学",”加权平均分”,"名次"
Fori = 1 To N
stu(i).aver=0
For j= 1 To M
stu(i).aver = stu(i).aver +stu(i)。

cj(j)* ke(j)。

学分
Next j
stu(i).aver =Round(stu(i)。

aver /Zxf,2)
Next i
For i=1 ToN
PrintTab(2);stu(i)。

xh; Tab(9); stu(i).xm;Tab(18);stu(i).cj(1);Tab(27);stu(i).cj(2); Tab(34);
stu(i)。

cj(3); Tab(43);stu(i).cj(4);Tab(52);stu (i).cj(5); Tab(60);stu(i).aver;Tab(75);stu(i).m c
Write#1,stu(i).xh, stu(i).xm, stu(i)。

cj(1),stu(i)。

cj(2),stu(i).cj(3), stu(i).cj(4),stu(i)。

cj(5), st u(i)。

aver,stu(i).mc
Next i
Close #1
End Sub
PrivateSub mwxsdjqfs_Click()
Form1.Cls
Form1.FontSize= 12
Form1.Print "学号姓名英语VB化学物理数学加权平均分"
For i = 1 To N
stu(i).aver =0
For j =1 ToM
stu(i).aver =stu(i).aver +stu(i).cj(j)*ke(j).学分Next j
stu(i)。

aver =Round(stu(i).aver / Zxf,2)
Nexti
Fori=1 To N
Print Tab(2);stu(i).xh; Tab(9);stu(i)。

xm; Tab(18);stu(i)。

cj(1); Tab(27);stu(i).cj(2); Tab(34);stu(i).c j(3); Tab(43);stu(i).cj(4);Tab(52); stu(i)。

cj(5);Tab(60); stu(i).aver
Next i
End Sub
Private Sub ydsmd_Click()
Form1.Cls
Form1.Print
Form1.Print
Open ”优等生名单。

txt”For OutputAs #1
Form1.Print"学号姓名英语VB化学物理数学加权平均分名次"
Write#1, "学号",”姓名",”英语”, ”VB", "化学”,"物理”, "数学”, ”加权平均分”,”名次”
Form1.Print
Dim e!
Fori = 1To N
For j =1ToM
If stu(i).cj(j) >= 95Then
e =e + 1
End If
Next j
If stu(i).aver 〉= 90 Or stu(i)。

mc <= 3Or (stu(i)。

aver >=85 Ande = 2) Then
Form1.Print Tab(2);stu(i).xh;Tab(9);stu(i)。

xm;Tab(18);stu(i).cj(1); Tab(27);stu(i).cj(2); Ta b(34);stu(i).cj(3);Tab(43); stu(i).cj(4);Tab(52);stu(i).cj(5); Tab(60); stu(i).aver; Tab(75);stu(i)。

mc
Write #1,stu(i)。

xh,stu(i)。

xm, stu(i)。

cj(1),stu(i)。

cj(2),stu(i).cj(3), stu(i).cj(4), stu(i).c j(5), stu(i).aver, stu(i).mc
End If
Nexti
Close#1
End Sub
PrivateSub yscjwj_Click()
Dimk!
Form1.Cls
Form1.FontSize = 12
Form1。

Print
Form1。

Print "学号姓名英语VB 化学物理数学"
Fori=1To N
Form1。

Print Tab(2);stu(i).xh; Tab(9);stu(i)。

xm; Tab(18);stu(i).cj(1);Tab(27); stu(i).cj(2); Tab(34);stu(i).cj(3);Tab(43); stu(i)。

cj(4);Tab(52); stu(i).cj(5)
Next i
End Sub
PrivateSubyskcwj_Click()
Dim i!
Form1.Cls
Form1。

Print
Form1.Print
Form1.FontSize = 12
Form1.PrintTab(8); ”编号课程名称课程学分"
Form1.Print
Fori = 1 To M
Form1。

Print Tab(9);ke(i)。

编号;Tab(21); ke(i)。

课程名;Tab(41);ke(i)。

学分
Form1.Print
Next i
End Sub
②Form2:
Dims(5To10),i!,k!,j!
Private SubCommand1_Click()
Form2.Cls
Form2。

Print
Form2.FontSize =12
Form2。

Print Tab(30);”范围”;Tab(41);"课程”; Ta b(52);”人数”
Form2.FontSize= 12
Form2。

Print
Fork= 5To10
s(k) = 0
Next k
i=1
Forj= 1 ToN
g=stu(j).cj(i) \10
Select Caseg
Case 0To 5
s(5)=s(5)+ 1
Case6
s(6)= s(6) + 1
Case 7
s(7) =s(7) + 1
Case 8
s(8)= s(8)+ 1
Case9
s(9)=s(9)+ 1
Case10
s(10)=s(10)+1
End Select
Next j
Form2.Print Tab(30);"60分以下";Tab(41); ke (i).课程名; Tab(51);s(5)
OpenApp.Path+ "\英语。

Txt"For Output As#1 Write #1, "60分以下",s(5)
For k= 6 To 8
Form2。

Print Tab(29); k*10; "-”;(k*10+ 9);Tab(41); ke(i)。

课程名;Tab(51);s(k) Write #1,k *10 &"-” &(k* 10+9),s(k)Next k
Form2.Print Tab(30);”90-100";Tab(41);ke(i)。

课程名;Tab(51);s(9)+ s(10)
Form2.Print
Write #1,"90 —100", s(9)+ s(10)
Close#1
For k = 5 To 10
s(k)= 0
Nextk
EndSub
Private SubCommand2_Click()
Form2.Cls
Form2.Print
Form2.FontSize =12
Form2.Print Tab(30); "范围”;Tab(41); ”课程";Tab (52);"人数”
Form2。

FontSize =12
Form2。

Print
i = 2
Forj = 1 To N
g = stu(j)。

cj(i)\10
Select Case g
Case0 To5
s(5)=s(5)+ 1
Case 6
s(6)=s(6) + 1
Case 7
s(7)=s(7) + 1
Case 8
s(8)=s(8) + 1
Case 9
s(9)= s(9)+ 1
Case10
s(10) =s(10)+1
EndSelect
Nextj
Form2.Print Tab(30); ”60分以下";Tab(41);ke(i).课程名; Tab(51);s(5)
Open App.Path +”\VB.Txt"For Output As#1
Write #1,"60分以下”,s(5)
For k= 6To8
Form2.Print Tab(29); k * 10;”-";(k *10+9);Tab(41);ke(i).课程名;Tab(51);s(k)Write #1,k*10 &”-" &(k * 10 + 9),s(k)
Next k
Form2.Print Tab(30);”90-100”;Tab(41); ke(i).课程名;Tab(51);s(9)+s(10)
Form2。

Print
Write #1,"90 - 100",s(9)+s(10)
Close#1
For k= 5 To10
s(k) =0
Next k
End Sub
PrivateSubCommand3_Click()
Form2.Cls
Form2.Print
Form2.FontSize = 12
Form2.Print Tab(30); ”范围”;Tab(41);”课程”;Ta b(52); "人数”
Form2.FontSize = 12
Form2.Print
i = 3
For j =1ToN
g= stu(j).cj(i) \ 10
Select Caseg
Case0To 5
s(5) = s(5) +1
Case 6
s(6)=s(6)+ 1
Case 7
s(7)= s(7)+ 1
Case 8
s(8) = s(8) + 1
Case9
s(9) = s(9) + 1
Case 10
s(10)=s(10)+ 1
EndSelect
Next j
Form2。

Print Tab(30);"60分以下”;Tab(41); k e(i).课程名;Tab(51);s(5)
Open App.Path + ”\化学。

Txt" For Output As #1
Write#1,”60分以下", s(5)
Fork=6To 8
Form2。

PrintTab(29);k*10;"-";(k * 10 + 9);Tab(41); ke(i).课程名; Tab(51);s(k)Write#1,k* 10 & ”-” & (k *10+9),s(k) Nextk
Form2.PrintTab(30);”90—100”; Tab(41);ke(i).课程名;Tab(51);s(9) +s(10)
Form2.Print
Write#1,"90 - 100", s(9) + s(10)
Close #1
For k = 5 To10
s(k)=0
Nextk
EndSub
Private Sub Command4_Click()
Form2。

Cls
Form2.Print
Form2.FontSize=12
Form2.Print Tab(30);”范围";Tab(41);"课程”;Tab(52);”人数"
Form2.FontSize=12
Form2。

Print
i =4
For j = 1To N
g = stu(j).cj(i)\ 10
SelectCaseg
Case 0To 5
s(5)=s(5) + 1
Case 6
s(6) = s(6)+ 1
Case 7
s(7)=s(7)+ 1
Case8
s(8) = s(8)+ 1
Case9
s(9)= s(9)+ 1
Case 10
s(10) = s(10)+ 1
End Select
Next j
Form2.PrintTab(30);”60分以下"; Tab(41); ke(i).课程名;Tab(51);s(5)
Open App。

Path + ”\物理。

Txt"For Output As#1 Write #1, "60分以下",s(5)
For k = 6 To 8
Form2。

PrintTab(29);k*10; "—"; (k*10+9);Tab(41);ke(i).课程名; Tab(51);s(k) Write#1,k*10 &”-” & (k * 10 +9), s(k)Nextk
Form2.Print Tab(30);"90—100”;Tab(41);ke(i).课程名; Tab(51); s(9)+s(10)
Form2。

Print
Write#1,"90-100",s(9) +s(10)
Close #1
For k = 5 To10
s(k)=0
Next k
End Sub
PrivateSubCommand5_Click()
Form2.Cls
Form2.Print
Form2.FontSize=12
Form2.PrintTab(30);"范围"; Tab(41);"课程";T ab(52);"人数"
Form2.FontSize =12
Form2.Print
i= 5
For j= 1 To N
g = stu(j)。

cj(i) \10
Select Case g
Case 0To 5
s(5) =s(5)+ 1
Case6
s(6)=s(6) +1
Case 7
s(7) =s(7)+ 1
Case 8
s(8)=s(8)+1
Case9
s(9)= s(9)+ 1
Case 10
s(10) =s(10)+ 1
End Select
Next j
Form2.PrintTab(30); "60分以下”; Tab(41);ke(i).课程名;Tab(51);s(5)
Open App.Path +"\数学.Txt" ForOutput As#1
Write #1,"60分以下”,s(5)
For k= 6 To 8
Form2。

Print Tab(29); k*10;”-”;(k * 10 +9); Tab(41); ke(i)。

课程名;Tab(51); s(k)Write#1,k *10&”-" & (k*10+ 9), s(k)Nextk
Form2.PrintTab(30);"90-100";Tab(41);ke(i)。

课程名; Tab(51);s(9) + s(10)
Form2。

Print
Write#1,”90 -100”,s(9)+s(10)
Close#1
For k=5 To 10
s(k)= 0
Next k
EndSub
七。

程序运行中待改进的缺点
1。

没有修改的功能
2.运行顺序有局限性,必须先运行计算平均分步骤,才能正
常完成后面的排序及查询等
3。

部分数据统计出的结果表达方式不够直观
4.查询成绩时取消按钮未发挥作用,最好改为关闭窗口。

八.小结和体会
想来,当时那会儿听说要搞VB课程设计的时候,我可是相当的激动啊,心想,学的东西终于可以用一用了,并且这次的VB课程设计才一周的时间,就像老师说的,真是时间紧任务重啊。

主要是用VB相关的只是来实现学生成绩和信息的管理这,对于我们这种初次接触这种东西的人来说,还真是有难度,如果不是查找相关的资料和请教同学的话,我想我还真一时半会,不知道从哪里下手,好在功夫不负有心人,经过几天的摸索和操作,这个学生成绩处理系统的雏形终于是出现了,虽说功能不太完善,但还是能满足基本的要求,这让我很是欣慰。

一周的时间并不算长,一晃就到了,课程设计也要画上句号了。

在这段时间里,不能说我的VB编程能力有了多么大的提高,多么大的飞跃,但我敢说我对VB相关的知识有了更深的了解和体会,总结起来主要有以下几点:
1.想要用VB做出好的东西来,一定要勤动手,不能光看,
因为好多错误凭看是看不出来的只有通过自己不断的操作和修改,才能对VB的语法结构和流程有自己独到的理解;
2.在编程和调试的过程中,总会出现一些意想不到的问题。

我发现并不是每个问题都能从资料中得到解决办法,有些问题是无法预料的,这个时候就得靠自己去分析了, 你必须得非常细心,一步一步的进行调试和修改,而且不能急,往往有的错误就是在你急躁的时候从你眼皮底下溜过去的,这样有的重新检查,到头来,既费时又费力,实在不行,还可以和同学一起进行讨论;
3.在写代码的时候,一定要养成良好的语法习惯,对窗体和控
件的name属性和caption属性,要尽量习惯用相应的英文单词的缩写,因为这样便于自己查找和修改,还有的就是在写代码的时候,不要图简单,一些语法结构总是不写全,老是用最简单的形式,如果你对VB语法结构很熟悉的话,这没问题,但对于我们这样的初学者来说,一定不要这样,因为时间长了的话,对一些复杂的程序理解起来会很吃力,而且对其它的运行过程的理解不能达到透彻;
4.在数据的处理的操作的部分,一定检验一下数据的连接成
功与否,还有就是在控件与数据连接的时候,不要忘了每个控件的属性,确保其与数据的成功连接;
在这次VB程序设计实习中,通过上机实训,我加深了对程序在VB6.0中调试并运行方法的了解,巩固了所学知识。

在其过程中,我遇到了很多问题和困难,发现在之前的学习中所学的东西不能完全掌握。

这次实习是我在学习上的一次考验,让我深深体会到了实训操作的重要性。

同时感谢老师给予的耐心讲解细心的帮助虽然此次实习已结束,时间不长,但意义很大.对我今后的学习和工作将产生很大的影响。

相关文档
最新文档