长江大学VB上机实习报告范本.docx
《长江大学VB上机实习报告范本.docx》由会员分享,可在线阅读,更多相关《长江大学VB上机实习报告范本.docx(21页珍藏版)》请在冰豆网上搜索。
长江大学VB上机实习报告范本
计算机上机实习报告
学院:
石油工程学院
班级:
储运11204
姓名:
魏亚荣
学号:
XXXXXXX
班内序号:
XX
指导教师:
XXX
1.系统名称-----------------------------------------------------------3
二.实习目的-----------------------------------------------------------3
三.系统功能概要-----------------------------------------------------3
四.系统设计分析-----------------------------------------------------3
五.窗体设计与程序代码-------------------------------------------5
六.心得体会----------------------------------------------------------16
一、系统名称----班级学生成绩管理系统
二、实习目的:
综合应用所学理论知识,联系实际开发一个具备简易功能的班级学生成绩管理系统。
熟悉程序编写与调试,熟悉数据文件的创建、打开、读写、关闭等相关操作,同时让我们熟悉VB6.0的开发环境,掌握基本的编程方法,熟悉用VB语言完成一个应用程序的设计过程,掌握有关编辑和调试程序的方法和技巧。
三、系统功能概要
1、用记事本新建一个文本文件,将本班的M名学生的有关信息及本学期的N门考试课的成绩(要求用假想分数,并要求将自己的每门课的放在第一列)输入到这个文件中,建议按如下形式存放(注:
20≤M≤50、5≤N≤8,下文以M=10,N=5为例):
序号姓名幸运日出生日期英语VB数学体育专业课
7作者自己81992.12.19991009898100
10张某61993.08.067776808985
5李某11994.11.168988999795
3王某61993.06.045676435477
2刘某31994.01.058287857989
1孙某21994.01.154556666568
4赵某51992.01.058296568555
6陈某31993.12.258686668687
9周某51666.12.235696655656
8钱某61994.03.035665565656
2、将本学期的N门课程及其学分(16学时为1个学分)输入到另一个数据文件(文件类型同上题)中,建议如下列形式存放:
编号课程名称课程学分
1英语5.0
2vb程序设计4
3数学4.5
4体育3.0
5专业课10.0
1)找出“出生日”与幸运日相同的人,并打印出其信息(每行输出一个人信息)
2)统计出分别拥有幸运数字1,2,3,4,5,6,7,8,9,0的人数
3)能查出任何一个你感兴趣的人的信息
4)可新添加一个人的信息
5)和删除一个人的信息
6)可以对某个人的幸运数字进行修改,只改变其幸运数字,其他信息不变
7)根据以上两文件内容分别计算每个学生N门课的加权平均分(保留2位小数,4舍5入),按平均分排列名次,平均分相同则名次并列,如第1、2、2、4、5、5、7…名。
用VB创建一个数据文件,存放班级的成绩表,建议按以下形式存放。
学号姓名英语vb程序设计数学平均成绩名次
1张某76898980.52
2李某91966778.23
3王某75585688.81
4赵某58677768.54
8)分别统计全班每门课的平均分,并计算各分数段(60分以下;60~69;70~79;80~89;90分以上)的学生人数。
用VB创建一个新的数据文件,在该文件中存放数据的格式如下:
范围.英语VB.
>=9035.
80-891012.
..............................
9)打印每名学生成绩条(并将结果存放到用VB创建的一个新的数据文件中)。
10)打印所有存在不及格课程学生的名单(含学号、不及格课程名称、课程的学分及成绩)。
11)打印优等生名单(学号、N门课成绩、平均分名次)
优等生条件:
a)平均分90分
b)名次在本班位于前三名
c)平均分85分,并且有二门课的成绩都95分
选做内容:
打印每门课成绩分布图
说明:
所有输出结果应写入用VB创建的文件中,格式要整齐,并有适当的文字说明。
实习报告要求:
应包括分析设计与说明、部分过程(函数)的源程序清单、程序调试过程中遇到的问题及解决方法,有待改善或改进的意见,对本次实习的意见与建议、收获等。
其中原始数据及程序运行的结果应作为附录附于实习报告之后。
四、系统设计分析:
1、该成绩管理系统中要同时表示学生的学号、姓名、成绩等一些信息,及课程、课程学分等一些信息,由于每项信息的意义不同,数据类型也不同,但还要同时作为一个整体来描叙和处理,因此需要通过用户自定义来解决。
所以在编程之前新建一个标准模块用来定义自定义类型。
2、为了便于后面执行求加权平均分、排名等命令,在Form1发生Load事件时应将学生信息和课程信息读取并放到两个数组中,由于这两个数组在该管理系统的全程序都要用到,因此应定义为全局类型。
如是在标准模块中定义两个数组。
3、由于原始数据文件中相邻的两列之间空格的长短不一,因此在调用Split函数之前应窗体通用模块中自定义一个space1函数将原始数据文件中相邻的两列之间空格数变为相同。
4、在编写程序时,由于该系统的程序代码较多,因此在编写时要合理。
5、在打印成绩条、不及格名单、优等生等信息时,应边用write语句分别将数据存入一个新的文件中。
6、实习必须按着老师的严格要求完成所有的实习任务,并整理成文件打印。
五.窗体设计与程序代码
1.此次窗体设计使用了11个命令按钮分别对应不同的系统功能要求,具体界面如下
2.程序代码
⑴统计“出生日”与幸运日相同的人
Dimstu()Asstudent,n%,kc()Askecheng,x%
PrivateSubCommand1_Click()
Cls
Fori=1ToUBound(stu())
IfRight(stu(i).birthday,2)=stu(i).luckydayThen
Printstu(i).num;stu(i).name;stu(i).luckyday;stu(i).birthday;
Forj=1To5
Printstu(i).score(j);
Nextj
Print
EndIf
Nexti
EndSub
⑵统计不及格学生的名单
PrivateSubCommand10_Click()
Cls
Print"序号";Spc(3);"姓名";Spc(3);"成绩";Spc(3);"学分";Spc(3);"课程";
Fori=1ToUBound(stu())
Forj=1To5
Ifstu(i).score(j)<60Then
PrintTab(0);stu(i).num;Spc(3);stu(i).name;Spc
(2);stu(i).score(j);Spc(3);kc(j).xf;Spc(3);kc(j).km;
EndIf
Nextj
Nexti
EndSub
⑶打印优等生名单
PrivateSubCommand11_Click()
Cls
Print"学号""英语";Space(3);"VB";Space(3);"数学";Space(3);"体育";Space(3);"专业课";Space(3);"排名"
Dimzxf%,i%,j%,k%
Fori=1ToUBound(kc())
zxf=zxf+kc(i).xf
Nexti
Forj=1ToUBound(stu())
Fork=1To5
stu(j).average=stu(j).average+stu(j).score(k)*kc(k).xf/zxf
stu(j).average=Format(stu(j).average,"0.00")
Nextk
Nextj
Form=1ToUBound(stu())
stu(m).rank=1
Forn=1ToUBound(stu())
Ifstu(m).averagestu(m).rank=stu(m).rank+1
EndIf
Nextn
Nextm
Fori=1ToUBound(stu())
k=0
Forj=1To5
Ifstu(i).score(j)>=95Then
k=k+1
EndIf
Nextj
Ifstu(i).average>=90Orstu(i).rank<=3Or(stu(i).average>=85Andk>=2)Then
Printstu(i).num;Space(3);stu(i).name;
Form=1To5
Printstu(i).score(m);Spc(4);
Nextm
Printstu(i).rank
EndIf
Nexti
EndSub
⑷统计各幸运数字的人数
PrivateSubCommand2_Click()
Cls
Fori=0To9
Dimluckypeople%
Forj=1ToUBound(stu())
IfVal(stu(j).luckyday)=iThen
luckypeople=luckypeople+1
EndIf
Nextj
Print"幸运数字为"&i;"的人数为:
"&luckypeople
luckypeople=0
Nexti
EndSub
⑸查询信息
PrivateSubCommand3_Click()
Cls
DimrmAsString,i%,j%
rm=InputBox("请输入你想要查询的同学的姓名")
Fori=1ToUBound(stu())
IfTrim(stu(i).name)=rmThen
Printstu(i).num;stu(i).name;stu(i).luckyday;stu(i).birthday;
Forj=1To5
Printstu(i).score(j);
Nextj
EndIf
Nexti
EndSub
⑹添加信息
PrivateSubCommand4_Click()
Cls
DimxinxueshengAsString
xinxuesheng=InputBox("请依次按照序号,姓名,幸运日,出生日期,英语,vb,数学,体育,专业课的顺序输入新同学的信息,中间用空格隔开")
Open"e:
\vb作业1.txt"ForAppendAs#1
Print#1,xinxuesheng
Print
Close#1
DoWhileInStr(Trim(xinxuesheng),"")<>0
xinxuesheng=Replace(Trim(xinxuesheng),"","")
Loop
a=Split(xinxuesheng,"")
n=n+1
ReDimPreservestu(n)
stu(n).num=a(0)
stu(n).name=a
(1)
stu(n).luckyday=a
(2)
stu(n).birthday=a(3)
Fori=1To5
stu(n).score(i)=a(3+i)
Nexti
Fori=1ToUBound(stu())
Printstu(i).num;stu(i).name;stu(i).luckyday;stu(i).birthday;
Forj=1To5
Printstu(i).score(j);
Nextj
Print
Nexti
EndSub
⑺删除信息
PrivateSubCommand5_Click()
Cls
DimrmAsString
rm=InputBox("请输入你要删除的同学的姓名")
Fori=1Ton
IfTrim(stu(i).name)=rmThen
ExitFor
EndIf
Nexti
Forj=iTon-1
stu(j)=stu(j+1)
Nextj
ReDimPreservestu(n-1)
Fori=1ToUBound(stu())
Printstu(i).num;stu(i).name;stu(i).luckyday;stu(i).birthday;
Forj=1To5
Printstu(i).score(j);
Nextj
Print
Nexti
EndSub
⑻修改幸运数字
PrivateSubCommand6_Click()
Cls
DimrmAsString,shuziAsString,i%,j%
rm=InputBox("请输入你要修改的同学的姓名")
shuzi=InputBox("请输入你要修改后的幸运数字")
Fori=1ToUBound(stu())
IfTrim(stu(i).name)=rmThen
stu(i).luckyday=shuzi
Printstu(i).num;stu(i).name;stu(i).luckyday;stu(i).birthday;
Forj=1To5
Printstu(i).score(j);
Nextj
EndIf
Nexti
EndSub
⑼计算每个学生的平均分
PrivateSubCommand7_Click()
Cls
Dimzxf%,i%,j%,k%
Fori=1ToUBound(kc())
zxf=zxf+kc(i).xf
Nexti
Forj=1ToUBound(stu())
Fork=1To5
stu(j).average=stu(j).average+stu(j).score(k)*kc(k).xf/zxf
stu(j).average=Format(stu(j).average,"0.00")
Nextk
Nextj
Form=1ToUBound(stu())
stu(m).rank=1
Forn=1ToUBound(stu())
Ifstu(m).averagestu(m).rank=stu(m).rank+1
EndIf
Nextn
Nextm
Open"e:
\成绩单.txt"ForAppendAs#3
Print#3,"序号";Space(3);"姓名";Space(3);"幸运日";Space(3);"出生日期";Space(4);"数学";Space(4);"英语";Space(4);"vb";Space(4);"物理";Space(3);"专业课";Space(3);"平均分";Space(3);"排名"
Fori=1ToUBound(stu())
Print#3,
Print#3,stu(i).num;Space(3);stu(i).name;Space(3);stu(i).luckyday;Space(3);stu(i).birthday;Space(3);
Forj=1To5
Print#3,stu(i).score(j);Space(3);
Nextj
Print#3,stu(i).average;Space(3);stu(i).rank;
Nexti
Close#3
EndSub
⑽统计成绩分布
PrivateSubCommand8_Click()
Cls
Dimi%,j%,bsix%,ss%,se%,en%,anine%,a(1To25)AsInteger,b(1To5)AsInteger,c(1To5)AsInteger,d(1To5)AsInteger,e(1To5)AsInteger,o(1To5)AsInteger,p(1To5)AsInteger,q(1To5)AsInteger,r(1To5)AsInteger,s(1To5)AsInteger
Fori=1To5
kc(i).zf=0
Forj=1ToUBound(stu())
kc(i).zf=kc(i).zf+stu(j).score(i)
Nextj
kc(i).average=kc(i).zf/UBound(stu())
kc(i).average=Format(kc(i).average,"0.00")
Printkc(i).average
Nexti
Open"e:
\成绩分布.txt"ForAppendAs#4
Print#4,"范围";Space(8);"数学";Space(3);"英语";Space(3);"vb";Space(3);"物理";Space(3);"专业课"
Fori=1To5
Forj=1ToUBound(stu())
Ifstu(j).score(i)>=90Then
o(i)=o(i)+1
ElseIfstu(j).score(i)>=80Then
p(i)=p(i)+1
ElseIfstu(j).score(i)>=70Then
q(i)=q(i)+1
ElseIfstu(j).score(i)>=60Then
r(i)=r(i)+1
Else
s(i)=s(i)+1
EndIf
Nextj
Nexti
Print#4,">=90";Spc(8);
Fori=1To5
Print#4,o(i);Spc(4);
Nexti
Print#4,
Print#4,">=80";Spc(8);
Fori=1To5
Print#4,p(i);Spc(4);
Nexti
Print#4,
Print#4,">=70";Spc(8);
Fori=1To5
Print#4,q(i);Spc(4);
Nexti
Print#4,
Print#4,">=60";Spc(8);
Fori=1To5
Print#4,r(i);Spc(4);
Nexti
Print#4,
Print#4,"其他";Spc(8);
Fori=1To5
Print#4,s(i);Spc(4);
Nexti
Print#4,
Close#4
EndSub
⑾打印学生成绩条
PrivateSubCommand9_Click()
Dimstu(1To20)AsString
Open"e:
\成绩单.txt"ForInputAs#5
Fori=1To20
LineInput#5,stu(i):
Printstu(i)
Nexti
Close#5
EndSub
⑿文本信息的输入
PrivateSubForm_Load()
Dimstr1AsString,a()AsString,i%,str2AsString,b()AsString
Open"e:
\学生信息.txt"ForInputAs#1
LineInput#1,str1
Printstr1
DoWhileNotEOF
(1)
LineInput#1,str1
DoWhileInStr(Trim(str1),"")<>0
str1=Replace(Trim(str1),"","")
Loop
a=Split(str1,"")
n=n+1
ReDimPreservestu(n)
stu(n).num=a(0)
stu(n).name=a
(1)
stu(n).luckyday=a
(2)
stu(n).birthday=a(3)
Fori=1To5
stu(n).score(i)=a(3+i)
Nexti
Cls
Loop
Close#1
Open"e:
\学分.txt"ForInputAs#2
LineInput#2,str2
Printstr2
DoWhileNotEOF
(2)
LineInput#2,str2
DoWhileInStr(Trim(str2),"")<>0
str2=Replace(Trim(str2),"","")
Loop
b=Split(str2,"")
x=x+1
ReDimPreservekc(x)
kc(x).bh=Val(b(0))
kc(x).km=b
(1)
kc(x).xf=b
(2)
Loop
Close#2
Cls
EndSub
六.心得体会
1.通过这次上机实习,我受益匪浅,不仅更加熟悉VB的操作和运行环