VB实习报告.docx
- 文档编号:5918843
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:21
- 大小:564.31KB
VB实习报告.docx
《VB实习报告.docx》由会员分享,可在线阅读,更多相关《VB实习报告.docx(21页珍藏版)》请在冰豆网上搜索。
VB实习报告
计算机上机实习(VB)
专业班级:
化工10904
学生学号:
*********
学生姓名:
申慷尼
班级序号:
17
指导老师:
李老师、江老师
完成时间:
2010.12.31
目录
1.设计内容2
2.设计分析与说明3
3.代码4
3.1部分过程4
3.2部分函数6
3.3重要函数分析6
4.出现问题8
5.解决方法9
6.改进意见10
7.实习总结11
7.1实习意见11
7.2.实习收获11
7.3思考进步12
8.附录14
8.1原始代码14
8.2运行结果21
1.设计内容
一、用记事本新建一个文本文件,将本班的M名学生在本学期的N门考试课成绩(要求用假象份数,并要求将自己的每门课的分数定在96分以上,放在第一排;而将别人的大多数课程分数都定在96分以下)输入到这个文件中,建议案如下形式存放(注:
20≤M≤50,5≤N≤8,下文以M=4,N=3为例):
学号姓名线性代数VB概率统计
01申慷尼999898
02宋佳919183
03聂虎932994
04周薇957994
二、讲本学期的N门课程及学分(16学时为1学分)输入到另一个数据文件(文件类型同上题)中,建议如下形式存放:
编号课程名称课程学分
1线性代数4.0
2概率统计4.0
3VB4.5
三、请编写一个简单的学生成绩管理程序,要求完成以下功能:
1、根据以上两文件内容分别计算每个学生N门课的加权平均分(保留2位小数,4舍5入),按平均分排列名次,平均分相同则名次并列,如第1、2、2、4、5、5、7…名。
用VB创建一个数据文件,存放班级的成绩表,建议按一下形式存放。
学号姓名线性代数VB概率统计平均分名次
01申慷尼999898100.951
02宋佳91918392.182
03聂虎93299582.356
2、分别统计全班每门课的平均分,并计算各分数段(60分以下:
60~69;70~79;80~89;90分以上)的学生人数,用VB创建一个新的数据文件,在该文件中存放数据的格式如下:
范围线性代数VB…………
≥9012…………
80~8923…………
………………………………………
3、打印每名学生成绩条(并将结果存放到用VB创建的一个新的数据的文件中)
4、打印所有存在不及格课程学生的名单(含学号、不及格课程名称、课程的学分及成绩)。
5、打印优等生名单(学号、N门课成绩、平均分、名次)
优等生条件:
(1)、平均分≥90分
(2)、名次在本班位于前三名
(3)、平均分≥85分,并且有2门课的成绩都≥95分
选做内容:
打印每门课成绩分布图
2.设计分析与说明
本次VB课程设计实习内容简单,思路清晰,只需按照步骤,一步一步,即可完成
一、新建文本文档,按要求输入数据
二、定义类型、变量、数组、函数等
三、由于原始文件相邻两列长短不一,因此在调用split函数前需要定义一个space1函数,消除空格。
可利用将2个空格变为1个空格,然后循环的思想来完成操作。
四、加权可以通过数组完成,只用了解其对应数组及应用公式
五、保留两位小数可用到函数:
int()或者round()
六、排名可以运用到排序的模型,详情见书P98~99
七、计算各分数段实际运用到了选择结构的考点if….then…else,selectcase可解决问题。
八、打印成绩条,不及格名单,优等生都是用到了选择结构,思路同六,故此处不做过多分析。
九、利用菜单编辑器编辑界面效果,建立主菜单和子菜单,需要注意的是标题用中文,名称简写但不要有重复。
3.代码
3.1部分过程
一、模块
Typexscjb'定义新类型
xhAsString
xmAsString
cj(1To6)AsInteger
averAsSingle
mcAsInteger
EndType
Typekechen
编号AsInteger
课程名AsString
学分AsSingle
EndType
Publicstu()Asxscjb
Publicke()Askechen
PublicN%,M%,Zxf%'定义总人数,课程数,总学分类型
PublicstrAsString
PubliccountAsInteger
二、窗体过程
PrivateSubForm_Load()
Form1.Height=8200'设置窗体大小
Form1.Width=10000
Dimst1$(),str1$
OpenApp.Path+"\成绩.txt"ForInputAs#1'导入成绩
OpenApp.Path+"\课程学分.txt"ForInputAs#2'导入课程学分
N=0:
M=0:
Zxf=0
LineInput#2,str1
DoWhileNotEOF
(2)
M=M+1
ReDimPreserveke(M)
LineInput#2,str1
str1=Trim(str1)
str1=space1(str1)
st1=Split(str1,"")
Printst1(0),st1
(1)
ke(M).编号=st1(0)
ke(M).课程名=st1
(1)
ke(M).学分=st1
(2)
Zxf=Zxf+ke(M).学分
Loop
LineInput#1,str1
DoWhileNotEOF
(1)
N=N+1
ReDimPreservestu(N)
LineInput#1,str1
str1=Trim(str1)
str1=space1(str1)
st1=Split(str1,"")
Printst1(0),st1
(1)
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)
Loop
Dimi%'定义加权平均分
Fori=1ToN
stu(i).aver=0
Forj=1ToM
stu(i).aver=stu(i).aver+stu(i).cj(j)*ke(j).学分
Nextj
stu(i).aver=Round(stu(i).aver/Zxf,2)
Nexti
Fori=0ToUBound(stu)'排序
stu(i).mc=1
Forj=0ToUBound(stu)
Ifstu(i).aver stu(i).mc=stu(i).mc+1 EndIf Nextj Nexti EndSub 3.2部分函数 PublicFunctionspace1(ByValsssAsString) Dimx% x=InStr(sss,"") DoWhilex>0 sss=Replace(sss,"","") x=InStr(sss,"") Loop space1=sss EndFunction 3.3重要函数分析 一、加权平均分的处理 Dimi%'定义整形变量 Fori=1ToN'FOR语句循环 stu(i).aver=0'给定初值 Forj=1ToM'循环的嵌套 stu(i).aver=stu(i).aver+stu(i).cj(j)*ke(j).学分'公式: 成绩*对应课程学分 Nextj stu(i).aver=Round(stu(i).aver/Zxf,2)'四舍五入,利用round()函数 NextiCls Print Print"学号";Tab(16);"姓名";Tab(35);"加权平均分" Fori=1ToN Printstu(i).xh;Tab(16);stu(i).xm;Tab(36);stu(i).aver'打印输出 Nexti 二、排序的处理 Fori=0ToUBound(stu)'给定i的范围 stu(i).mc=1'赋给名次初值 Forj=0ToUBound(stu)'循环的嵌套 Ifstu(i).aver stu(i).mc=stu(i).mc+1'原名次+1 EndIf'结束IF Nextj Nexti 三、输出优等生的处理 DimflagAsBoolean,s%: s=0 Cls Print'打印优等生 Print"学号";Tab(8);"姓名";Tab(16);"线性代数";Tab(28);"概率统计";Tab(41);"VB";Tab(48);"专业概论";Tab(59);"大学物理";Tab(71);"加权平均分";Tab(84);"名次" Fori=1ToN Forj=1ToM Ifstu(i).cj(j)>=95Andstu(i).aver>=85Thens=s+1'满足同时有2门大于95分 Nextj flag=s>=2Andstu(i).aver>=90Andstu(i).mc<=3'用AND并列,同时满足三个条件 IfflagThen'输出,确定间距 Printstu(i).xh;Tab(8);stu(i).xm;Tab(18);stu(i).cj (1);Tab(30);stu(i).cj (2);Tab(40);stu(i).cj(3);Tab(50);stu(i).cj(4);Tab(61);stu(i).cj(5);Tab(72);stu(i).aver;Tab(84);stu(i).mc EndIf s=0 Nexti 4.出现问题 一、越界问题 二、数据无法导入问题 三、变量定义问题 四、数组的建立问题 五、排序问题 六、输出时对齐问题 七、其他控件的导出使用问题 5.解决方法 一、越界问题 建立数据文件时,有空格,或者使用了tab键,或者多了一排。 二、数据无法导入问题 多是由于路径定义时不对,还有文件名不匹配,所以找不到文件。 三、变量定义问题 定义的变量一定和后面过程中使用的变量名要一致,否则就总会出现未定义的变量问题。 四、数组的建立问题 数组也要注意数组名的问题,同时还要注意数组的上下界。 五、排序问题 开始排序时,一直没办法和题目的一样,总是名次那一栏是按顺序排下来,后来调整了表达方式和数组的界之后才解决的问题。 六、输出时对齐问题 这个东西如果不理解代码中的意思,要调整很半天啊才能调整齐,有时调了半天,动都不动,其实只需要理解spc(),tab()的含义既可以轻松解决问题了。 七、其他控件的导出使用问题 最开始,我想在导入文件时出现对话框那种东西,后来问老师后,是需要一个DialogCommandControl的控件,装上去,就可以达到效果了,本实习中,我没有用到,但是却在其他程序中试过可行。 6.改进意见 一、界面丰富化 由于我们是初学者,编的东西很简单,所以界面也很单调,其实我们还可以运用后面几章所学的知识,加入一些图形进去,使界面更加形象,丰富。 二、内容简单化 在编写的时候,发现很多代码写的都是很多余的,有的地方可以省,但是,自己的思路又一下子不能达到那种写之前就能发现问题的地步,所以导致写了一些其实没用到的代码,这也给我们以后写代码时提出了方向与思路。 三、步骤条理化 很明显的一点,在利用过程编写程序代码的时候,虽然最后都能够编写完成,但是,从上往下看的时候,步骤很凌乱,有时候过程名没取好的时候,要从菜单栏过来寻找的时候就比较麻烦,特别是当编写完后,再更改了菜单名,所以,如果按照菜单每一项的顺序来编写,思路,思路条理就很清晰很多,别人在看的时候也会轻松很多。 7.实习总结 7.1实习意见 一、学校电脑病毒太多了,有时候做着做着就死机了。 二、召唤老师的速度太慢了,半天都看不到。 三、机房环境有待改善。 7.2实习收获 经过这次的实习,收获其实是相当大的,正所谓,时间是检验真理的唯一标准,这句话一点都不假。 平时上课,老师都是纯理论知识的讲解,下来了之后,没有电脑的条件下,根本不可能有实践的机会,再说到那个平时的上机课,效果其实也不是很大,真正有用的是这次的强化实践,上机实习,这不仅是一次全面了解VB的机会,也是一次复习的机会,借这个机会,我又一次的了解了VB的许多方方面面,并且是更加的深入了,对里面的具体操作也更加熟悉,几种常见的控件,几个常用的函数,几个经常犯得小错误,当经过了一步步的操作之后,就会发现自己的很多问题,运行的时候,如果出现不顺畅,肯定就是里面的小地方没注意到,然后自己就得马上去寻找错误,先自己发现,自己思考,自己探究,如果自己真的解决不了,就会举手问老师该如何操作,如何解决,就是通过这样的方式,让自己对VB更加了解。 此外,通过这次的上机实践,还是一个很好的复习的机会,书上的点老师讲一遍,自己看一遍,不懂得还是不不懂,有很多点知道是这样,但不知道为什么是这样,有的问题,觉得自己的思路应该可以解决问题,但是没有通过运行,就不会发现其实还要东西没定义,有东西漏掉了,有方法选错了,等等。 这一切的一切,都让自己的VB知识更加牢固,以后如果逾到同样的问题,就可以很轻松的解决了。 最后,我只想说,因为有这么个机会,因为抓住机会练习,让我有了一个质的提高,质的飞跃,也希望自己期末的成绩能考的更好一点。 7.3思考进步 其实,这一部分是我最喜欢的一部分,只有思考,才能有进步。 这学期,这些年,我也是在这样的一个习惯中不断的成长与进步的。 我想,老师设立这样一个上机实践的目的,肯定不仅仅为了让大家去应付完成学分,填补大学“空虚”的时间,其真实的目的,我想应该是让我们从实习中有思考,有发现,有进步,有成长。 在这么一整个实习过程中最让我收获的,可能是以下几点: 一、细心 可能我们也发现了,很多时候,我们都不能顺利的运行程序,总是这里那里的一点点小错误,让我们的程序无法得运行下去。 如果我们能思维缜密,发现没一点的小细节,并且注意他们,我们可能就会节省出很多的时间避免我们去找那些很小的错误。 二、合理利用时间,多向老师学习 最开始,我什么都不会,只会前面很简单的步骤,好不容易把数据导入进去了,排版还很难看,就这里改一点那里改一点,所以浪费了很多时间,其实,只用到老师那里学一点,看老师教别的同学操作那么一下,就会达到事半功倍的地步,会节省出很多的时间,同时自己也会长进很多。 三、主动思考,主动提问 一个问题摆在我们面前的时候,不是让我们等着,或者随便改这里改那里就行了的,我们应该去探寻代码中的细微含义,可以深入到每一个标点符号,都会有自己特定的含义,这个问题按代码上可以这样解决,那能不能有其他的方法,怎样去做能使程序更加简单明了,结构更清晰,让别人理解起来更方便。 如果自己实在解决不了的问题,就要及时找老师寻求帮助,因为如果自己经过思考都没想出来,说明在这个知识点上,自己还有缺口,没有老师来弥补指导一下,可能这个坎很难靠自己的力量越过去,所以合理借用老师的力量,主动提问寻求解决方案,也是让人提高的一个切实可行的办法。 以上即是我的一点点思考,不是很深入,但是却是自己付出的努力,努力想让自己变得更专业,变得更强,只要是能让自己成长,能让自己进步,能让自己超越别人的思考,都是好的思考! 8.附录 8.1原始代码 Typexscjb xhAsString xmAsString cj(1To6)AsInteger averAsSingle mcAsInteger EndType Typekechen 编号AsInteger 课程名AsString 学分AsSingle EndType Publicstu()Asxscjb Publicke()Askechen PublicN%,M%,Zxf%'总人数,课程数,总学分 PublicstrAsString PubliccountAsInteger PublicFunctionspace1(ByValsssAsString) Dimx% x=InStr(sss,"") DoWhilex>0 sss=Replace(sss,"","") x=InStr(sss,"") Loop space1=sss EndFunction PrivateSubForm_Load() Form1.Height=8200'设置窗体大小 Form1.Width=10000 Dimst1$(),str1$ OpenApp.Path+"\成绩.txt"ForInputAs#1'导入成绩 OpenApp.Path+"\课程学分.txt"ForInputAs#2'导入课程学分 N=0: M=0: Zxf=0 LineInput#2,str1 DoWhileNotEOF (2) M=M+1 ReDimPreserveke(M) LineInput#2,str1 str1=Trim(str1) str1=space1(str1) st1=Split(str1,"") Printst1(0),st1 (1) ke(M).编号=st1(0) ke(M).课程名=st1 (1) ke(M).学分=st1 (2) Zxf=Zxf+ke(M).学分 Loop LineInput#1,str1 DoWhileNotEOF (1) N=N+1 ReDimPreservestu(N) LineInput#1,str1 str1=Trim(str1) str1=space1(str1) st1=Split(str1,"") Printst1(0),st1 (1) 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) Loop Dimi%'计算加权平均分 Fori=1ToN stu(i).aver=0 Forj=1ToM stu(i).aver=stu(i).aver+stu(i).cj(j)*ke(j).学分 Nextj stu(i).aver=Round(stu(i).aver/Zxf,2) Nexti Fori=0ToUBound(stu)'排序 stu(i).mc=1 Forj=0ToUBound(stu) Ifstu(i).aver stu(i).mc=stu(i).mc+1 EndIf Nextj Nexti EndSub PrivateSubchengji_Click()'输出成绩单 Dimi% Cls Print Print"学号姓名线性代数概率统计VB专业概论大学物理" Fori=1ToN Printstu(i).xh;Tab(7);stu(i).xm;Tab(18);stu(i).cj (1); PrintSpc(8);stu(i).cj (2);Spc(5);stu(i).cj(3);Spc(4);stu(i).cj(4); PrintSpc(7);stu(i).cj(5);Spc(5) Nexti EndSub PrivateSubkc_Click() Dimi% Cls Print'输出课程学分 Print"编号课程名学分" Fori=1ToM Printke(i).编号;Tab(7);ke(i).课程名;Tab(18);ke(i).学分 Nexti EndSub PrivateSubjqpjf_Click()'输出加权平均分 Cls Print Print"学号";Tab(16);"姓名";Tab(35);"加权平均分" Fori=1ToN Printstu(i).xh;Tab(16);stu(i).xm;Tab(36);stu(i).aver Nexti EndSub PrivateSubPrint59_Click()'打印不及格名单 Cls Print Print"学号";Tab(10);"姓名";Tab(20);"课程";Tab(30);"学分";Tab(40);"成绩" Fori=1ToN Forj=1ToM Ifstu(i).cj(j)<=59Then Printstu(i).xh;Tab(10);stu(i).xm;Tab(20);ke(j).课程名;Tab(30);ke(j).学分;Tab(40);stu(i).cj(j) EndIf Nextj Nexti EndSub PrivateSubcjpm_Click()'打印成绩排名 Dimi% Cls Print Print"学号姓名线性代数概率统计VB专业概论大学物理加权平均分名次" Fori=1ToN Printstu(i).xh;Tab(8);stu(i).xm;Tab(19);stu(i).cj (1); PrintTab(31);stu(i).cj (2);Tab(40);stu(i).cj(3);Tab(48);s
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VB 实习 报告