vb上机实习报告.docx
《vb上机实习报告.docx》由会员分享,可在线阅读,更多相关《vb上机实习报告.docx(27页珍藏版)》请在冰豆网上搜索。
![vb上机实习报告.docx](https://file1.bdocx.com/fileroot1/2023-1/5/e7d9731a-df1a-486c-a70a-0c77ca6bff03/e7d9731a-df1a-486c-a70a-0c77ca6bff031.gif)
vb上机实习报告
专业班级:
化工11001
学生学号:
201003069
班内序号:
6
指导老师:
张老师吴老师
完成日期:
2011/12/23
目录
一:
设计题目
二:
设计思路
三:
设计目标
四:
设计思路
五:
数据处理
六:
程序代码
七:
小结
一:
设计题目
学生成绩管理
二:
设计思路
利用CommonDialog从文本中读取文件,再通过split函数分割数据并赋值给相应项目,再通过vb提供的各种变量、函数、过程及自定义变量、函数过程等等来完成所需的操作。
三:
设计目标
从文本中读取数据,赋值数据,运算数据来实现对学生加权平均分、平均分、每门课的平均分、每门课的分数段、不及格学生名单、优秀学生名单、成绩查询、每门课的成绩分布图的输出,并写入文件。
四:
设计思路
框架图
从文本读取数据
赋值并运算
加权平均分
平均分
每门课的平均分
每门课的分数段
不及格学生名单
成绩查询
分数条
成绩分布图
优秀学生名单
五:
数据处理
原始成绩
课程学分
学生成绩
课程学分
加权平均分
每门课的平均分
每门课的分数段
不及格学生名单及成绩
优秀学生
成绩查询
化工导论成绩分布图
Vb成绩分布图
线代成绩分布图
概率成绩分布图
物理成绩分布图
六:
程序代码
模块:
Typestudent
numberAsString*3
nameAsString*3
score(1To5)AsInteger
averAsSingle
averageAsSingle
rankAsInteger
count1AsInteger
count2AsInteger
EndType
Typeclass
numAsString
namAsString*4
scorAsSingle
EndType
Publicstu()Asstudent,stu1Asstudent,cla()Asclass
PublicFunctiondeletespace(strAsString)AsString
Dimi%
i=InStr(str,"")
DoWhilei<>o
str=Replace(str,"","")
i=InStr(str,"")
Loop
窗体级
OptionBase1
DimnAsInteger,str1AsString,strAsString,a()AsString,i%,j%,m%,k%,s%(5,5)
读学生成绩
PrivateSubstudentscore_Click()
Cls
CommonDialog1.Filter="文本文件|*.txt"
CommonDialog1.ShowOpen
OpenCommonDialog1.FileNameForInputAs#1
LineInput#1,str1
Printstr1
DoWhileNotEOF
(1)
LineInput#1,str
str=deletespace(Trim(str))
a=Split(str,"")
n=n+1
ReDimPreservestu(n)
stu(n).number=a(0)
stu(n).name=a
(1)
Fori=1To5
stu(n).score(i)=a(i+1)
Nexti
Loop
Fori=1Ton
Printstu(i).number;Tab(6);stu(i).name;Tab(15);
Forj=1To5
Printstu(i).score(j);Spc(5);
Nextj
Print
Nexti
Close#1
EndSub
读课程学分
PrivateSubkechengxuefen_Click()
jisuan.Enabled=True
gekechengjiguanli.Enabled=True
chengjichaxun.Enabled=True
chengjifenbutu.Enabled=True
Cls
Dimk%
CommonDialog1.Filter="文本文件|*.txt"
CommonDialog1.ShowOpen
OpenCommonDialog1.FileNameForInputAs#2
LineInput#2,str1
Printstr1
DoWhileNotEOF
(2)
LineInput#2,str
str=deletespace(Trim(str))
a=Split(str,"")
m=m+1
ReDimPreservecla(m)
cla(m).num=a(0)
cla(m).nam=a
(1)
cla(m).scor=a
(2)
Loop
Fori=1Tom
Printcla(i).num;Tab(12);cla(i).nam;Tab(30);cla(i).scor
Print
Nexti
Close#2
EndSub
加权平均分
PrivateSubaver_Click()
Cls
Print
Print"姓名";Spc(4);"学号";Spc(4);"化工导论";Spc(5);"vb";Spc(8);"线代";Spc(7);"概率";Spc(7);"物理";Spc(6);"加权平均分";Spc(5)
count2=0
count1=0
Forj=1To20
Fori=1To5
count1=cla(i).scor+count1
count2=stu(j).score(i)*cla(i).scor+count2
Nexti
stu(j).aver=count2/count1'加权平均分
Nextj
Fori=1To20
Printstu(i).name;Tab(10);stu(i).number;Tab(18);
Forj=1To5
Printstu(i).score(j);Spc(7);
Nextj
PrintFormat(stu(i).aver,"00.00")
Nexti
EndSub
按加权平均分排名
PrivateSubanpingjunfenpaiming_Click()
Dimk%
Cls
Print"姓名";Spc(4);"学号";Tab(16);"化工导论";Tab(31);"vb";Tab(42);"线代";Tab(54);"概率";Tab(66);"物理";Tab(77);"加权平均分";Tab(89);"名次"
Fori=1To20
stu(i).rank=1
Forj=1To20
Ifstu(i).averstu(i).rank=stu(i).rank+1'排名
EndIf
Nextj
Nexti
Fori=1To20
Printstu(i).name;Tab(10);stu(i).number;Tab(18);
Forj=1To5
Printstu(i).score(j);Spc(8);
Nextj
PrintFormat(stu(i).aver,"00.00");Spc(7);stu(i).rank'输出
Nexti
EndSub
每门课的平均分
PrivateSubmeimenkedepingjunfen_Click()'每门课的平均分
Cls
Form1.FontSize=18
Print"每门课的平均分如下:
"
Print"化工导论";Spc(6);"vb";Spc(10);"线代";Spc(7);"概率";Spc(8);"物理"
Fori=1To5
Sum=0
Forj=1To20
Sum=Sum+stu(j).score(i)'求每门课的总分
Nextj
stu(i).average=Sum/20'求每门课的平均分
Nexti
Forj=1To5
PrintSpc
(2);stu(j).average;Spc(3);'输出
Nextj
EndSub
每门课的分数段
PrivateSubfenshuduan_Click()
Cls
Dimg%
Fori=1To5
Forj=1To20
g=stu(j).score(i)
SelectCaseg
Case0To59
s(1,i)=s(1,i)+1
Case60To69
s(2,i)=s(2,i)+1
Case70To79
s(3,i)=s(3,i)+1
Case80To89
s(4,i)=s(4,i)+1
Case90To99
s(5,i)=s(5,i)+1
EndSelect
Nextj
Nexti
Dimb$(5)
b
(1)="0---59"
b
(2)="60--69"
b(3)="70--79"
b(4)="80--89"
b(5)="90--99"
Form1.FontSize=18
Print"范围化工导论vb线代概率物理"
Fori=1To5
Printb(i);Tab(13);
Forj=1To5
Prints(i,j);Spc(5);
Nextj
Print
Nexti
EndSub
不及格学生名单
PrivateSubbujigexuesheng_Click()'不及格学生
Cls
Form1.FontSize=13
Dimi%,j%
Form1.ForeColor=vbRed
Form1.FontSize=20
Print"不及格学生及其成绩如下;";Chr(13)+Chr(10)
Form1.ForeColor=vbBlack
Form1.FontSize=12
Print"学号";Spc(5);"姓名"
Fori=1ToUBound(stu())
Forj=1To5
Ifstu(i).score(j)<60Then
Printstu(i).number;Spc(4);stu(i).name;
Print
Print"不及格课程:
";cla(j).nam;Tab(25);"(该课程学分为:
";cla(j).scor;")";_
Tab(45);"该科分数:
";stu(i).score(j);
Print
EndIf
Nextj
Nexti
Form1.FontSize=12
EndSub
优秀学生名单
PrivateSubyouxiuxueshneg_Click()'优秀学生
Cls
DimflagAsBoolean
Print"优秀学生名单如下:
"
Print
Print"姓名";Tab(10);"学号";Tab(18);"化工导论";Tab(31);"vb";Tab(40);_
"线代";Tab(50);"概率";Tab(60);"物理";Tab(70);"平均分";Tab(79);_
"名次"
Fori=1To20
flag=False
Forj=1To5
Ifstu(i).score(j)>=90Then
n=n+1
EndIf
Nextj
Ifstu(i).aver>=95Orstu(i).rank<=3Then
flag=True
ElseIfstu(i).aver>=85Andn>=2Then
flag=True
EndIf
Ifflag=TrueThen
Printstu(i).name;Tab(10);stu(i).number;_
Tab(20);stu(i).score
(1);Tab(30);stu(i).score
(2);Tab(40);_
stu(i).score(3);Tab(50);stu(i).score(4);Tab(60);stu(i).score(5);_
Tab(70);Format(stu(i).aver,"00.00");Tab(80);stu(i).rank;
Print
EndIf
Nexti
EndSub
成绩查询
PrivateSubchaxun_Click()'成绩查询
Cls
Print"姓名学号化工导论vb线代概率物理平均分排名"
i=InputBox("请输入1~20以内的学号")
Ifi>=21Then
n=MsgBox("您输入的学号有误,请重新输入",vbAbortRetryIgnore=5)
EndIf
Ifi>0Andi<=20Then
Printstu(i).name;Tab(12);stu(i).number;Tab(20);
Forj=1To5
Printstu(i).score(j);Spc(6);
Nextj
PrintFormat(stu(i).aver,"00.00");Tab(82);stu(i).rank
ElseIfi>20Then
ExitSub
ElseIfi<1Then
ExitSub
EndIf
EndSub
化工导论成绩分布图
PrivateSubhuagongdaolun_Click()'化工导论成绩分布图
Cls
Form1.FontSize=8
Scale(-20,100)-(100,-20)'建立坐标系
Line(0,0)-(99,0)'画线
Line(0,0)-(0,99)
DrawWidth=8
PSet(0,0)
CurrentX=-2
CurrentY=-1
Print0
CurrentX=98.6
CurrentY=1
Print">"'打x轴箭头
CurrentX=-0.45
CurrentY=99.45
Print"∧"'打y轴箭头
DrawWidth=2
Forn=9To90Step9
Line(0,n)-(1,n)
CurrentX=-2
CurrentY=n+1
Printn/9
Nextn
Dimk$(81)
k(9)="0--59"
k(27)="60-69"
k(45)="70-79"
k(63)="80-89"
k(81)="90-99"
Forn=9To81Step18
CurrentX=n+2
CurrentY=-2
Printk(n);
Nextn
Line(9,36)-(18,0),vbGreen,BF'画矩形图
Line(27,18)-(36,0),vbGreen,BF
Line(45,27)-(54,0),vbGreen,BF
Line(63,36)-(72,0),vbGreen,BF
Line(81,63)-(90,0),vbGreen,BF
CurrentX=27
CurrentY=90
Form1.FontSize=25
Form1.ForeColor=vbRed
Print"化工导论成绩分布图"
Form1.FontSize=8
Form1.ForeColor=vbBlack
CurrentX=95
CurrentY=-2
Print"分数段"
EndSub
Vb成绩分布图
PrivateSubVB_Click()'vb成绩分布图
Cls
Form1.FontSize=8
Scale(-20,100)-(100,-20)
Line(0,0)-(99,0)'画X轴
CurrentX=98.7
CurrentY=0.95
Print">"
Line(0,0)-(0,99)'画Y轴
CurrentX=-0.5
CurrentY=99.25
Print"∧"
Form1.ForeColor=vbBlack'打原点
DrawWidth=8
PSet(0,0)
CurrentX=-1
CurrentY=-1
Print0
DrawWidth=2'打Y轴刻度
Fori=9To90Step9
Line(0,i)-(0.5,i)
CurrentX=-2
CurrentY=i+1
Printi/9
Nexti
Dimk$(81)
k(9)="0--59"
k(27)="60-69"
k(45)="70-79"
k(63)="80-89"
k(81)="90-99"
Fori=9To81Step18
CurrentX=i+2
CurrentY=-2
Printk(i);
Nexti
Line(9,27)-(18,0),vbBlue,BF
Line(27,27)-(36,0),vbBlue,BF
Line(45,9)-(54,0),vbBlue,BF
Line(63,36)-(72,0),vbBlue,BF
Line(81,81)-(90,0),vbBlue,BF
CurrentX=40
CurrentY=90
FontSize=25
ForeColor=vbRed
Print"vb成绩分布图"
ForeColor=vbBlack
FontSize=8
CurrentX=95
CurrentY=-2
Print"分数段"
EndSub
概率成绩分布图
Cls
Form1.FontSize=8
Scale(-20,100)-(100,-20)'建立坐标系
Line(0,0)-(99,0)'画线
Line(0,0)-(0,99)
DrawWidth=8
PSet(0,0)
CurrentX=-2
CurrentY=-1
Print0
CurrentX=98.6
CurrentY=1
Print">"'打x轴箭头
CurrentX=-0.5
CurrentY=99.45
Print"∧"'打y轴箭头
DrawWidth=2
Fori=9To90Step9
Line(0,i)-(0.8,i)
CurrentX=-2
CurrentY=i+1
Printi/9
Nexti
Dimk$(81)
k(9)="0--59"
k(27)="60-69"
k(45)="70-79"
k(63)="80-89"
k(81)="90-99"
Fori=9To81Step18
CurrentX=i+2
CurrentY=-2
Printk(i);
Nexti
Line(9,9)-(18,0),vbGreen,BF
Line(27,27)-(36,0),vbGreen,BF
Line(45,18)-(54,0),vbGreen,BF
Line(63,63)-(72,0),vbGreen,BF
Line(81,63)-(90,0),vbGreen,BF
CurrentX=40
CurrentY=90
Form1.FontSize=25
Form1.ForeColor=vbRed
Print"概率成绩分布图"
Form1.FontSize=8
Form1.ForeColor=vbBlack
CurrentX=95
CurrentY=-2
Print"分数段"
EndSub
线代成绩分布图
PrivateSubxiandai_Click()'线代成绩分布图
Cls
FontSize=8
ForeColor=vbBlack
Scale(-20,100)-(100,-20)'建系
Line(0,0)-(99,0)
CurrentX=98.75
CurrentY=0.95
Print">"'画X轴
Line(0,0)-(0,99)
CurrentX=-0.525
CurrentY=99.25
Print"∧"'画Y轴
CurrentX=-1
CurrentY=-0.5
Print0
DrawWidth=6
PSet(0,0)
DrawWidth=2'打原点
Fori=9To90Step9'打Y轴刻度
Line(0,i)-(1,i)
CurrentX=-2
CurrentY=i+1
Printi/9
Nexti
Dimk$(81)
k(9)="0--59"
k(27)="60-69"
k(45)="70-79"
k(63)="80-89"
k(81)="90-99"
Fori=9To81Step18
CurrentX=i+2