VB实习报告Word格式文档下载.docx
《VB实习报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《VB实习报告Word格式文档下载.docx(21页珍藏版)》请在冰豆网上搜索。
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
Publicstu()Asxscjb
Publicke()Askechen
PublicN%,M%,Zxf%'
定义总人数,课程数,总学分类型
PublicstrAsString
PubliccountAsInteger
二、窗体过程
PrivateSubForm_Load()
Form1.Height=8200'
设置窗体大小
Form1.Width=10000
Dimst1$(),str1$
OpenApp.Path+"
\成绩.txt"
ForInputAs#1'
导入成绩
\课程学分.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
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)
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(j).averThen
stu(i).mc=stu(i).mc+1
EndIf
EndSub
3.2部分函数
PublicFunctionspace1(ByValsssAsString)
Dimx%
x=InStr(sss,"
DoWhilex>
0
sss=Replace(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).学分'
公式:
成绩*对应课程学分
stu(i).aver=Round(stu(i).aver/Zxf,2)'
四舍五入,利用round()函数
NextiCls
Print
Print"
学号"
;
Tab(16);
姓名"
Tab(35);
加权平均分"
Fori=1ToN
Printstu(i).xh;
stu(i).xm;
Tab(36);
stu(i).aver'
打印输出
二、排序的处理
Fori=0ToUBound(stu)'
给定i的范围
stu(i).mc=1'
赋给名次初值
Forj=0ToUBound(stu)'
stu(j).averThen'
当名次小于下个比较名次时
stu(i).mc=stu(i).mc+1'
原名次+1
EndIf'
结束IF
三、输出优等生的处理
DimflagAsBoolean,s%:
s=0
Cls
Print'
打印优等生
Tab(8);
线性代数"
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'
输出,确定间距
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;
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
总人数,课程数,总学分
计算加权平均分
PrivateSubchengji_Click()'
输出成绩单
Dimi%
Cls
Print
学号姓名线性代数概率统计VB专业概论大学物理"
Printstu(i).xh;
Tab(7);
PrintSpc(8);
Spc(5);
Spc(4);
PrintSpc(7);
Spc(5)
PrivateSubkc_Click()
Print'
输出课程学分
Print"
编号课程名学分"
Fori=1ToM
Printke(i).编号;
ke(i).课程名;
ke(i).学分
PrivateSubjqpjf_Click()'
输出加权平均分
stu(i).aver
PrivateSubPrint59_Click()'
打印不及格名单
Tab(10);
Tab(20);
课程"
学分"
成绩"
Ifstu(i).cj(j)<
=59Then
ke(j).课程名;
ke(j).学分;
stu(i).cj(j)
PrivateSubcjpm_Click()'
打印成绩排名
Dimi%
学号姓名线性代数概率统计VB专业概论大学物理加权平均分名次"
Tab(19);
PrintTab(31);
s