数据统计.docx
《数据统计.docx》由会员分享,可在线阅读,更多相关《数据统计.docx(12页珍藏版)》请在冰豆网上搜索。
数据统计
沈阳航空工业学院
课程设计
学号__________
班级__________
姓名__________
指导教师__________
年月日
沈阳航空工业学院
课程设计任务书
学院:
机电专业:
机械班级:
94060108
学号:
2009040601292题目:
数据统计
一、课程设计时间
2011年3月14~18日(第2周),共计1周,20学时。
二、课程设计内容
一个文本文件(file11_数据统计.txt)存储了若干位同学的数学成绩,文件中每行的内容按照顺序为:
学号,班级,数学成绩,姓名。
请完成一下问题:
①将文件中的内容全部显示在窗体上,并统计总人数。
②统计数学成绩的平均分。
③统计各个班级的平均分。
三、课程设计要求
程序质量:
✧贯彻事件驱动的程序设计思想。
✧用户界面友好,功能明确,操作方便;可以加以其它功能或修饰。
✧用户界面中的菜单至少应包括“打印全部,并统计人数”、“计算总平均分”、“计算各个班的平均分”、“退出”4项。
✧代码应适当缩进,并给出必要的注释,以增强程序的可读性。
课程设计说明书:
✧课程结束后,上交课程设计说明书和源程序。
课程设计说明书的内容参见提供的模板。
四、指导教师和学生签字
指导教师:
________学生签名:
________
五、成绩
六、教师评语
目录
需求分析4
设计分析4
关键技术6
总结8
完整的源程序8
参考文献11
需求分析
一个文本文件(file11_数据统计.txt)存储了若干位同学的数学成绩,文件中每行的内容按照顺序为:
学号,班级,数学成绩,姓名。
要求:
①能够将文件中的内容全部显示在窗体上,并统计总人数。
②能够统计数学成绩的平均分。
③能够统计各个班级的平均分。
设计分析
(1)基本原理:
用Open语句打开文本文件,用EOF函数读取文件中的内容导入的自定义类型数组中,将文件中的内容全部显示在窗体上并进行数据统计。
(2)总体设计:
(3)详细设计:
关键技术
1文本文件的读取与导入的代码如下
PrivateSubCommand1_Click()
DimCountAsInteger
Open"H:
\教师课件\刘成\课设\VB\数据\file11_数据统计.txt"ForInputAs#1‘打开文件;用于读取数据,文件号为1
DoWhileNotEOF
(1)‘判断一号文件是否结束,若不结束则继
LineInput#1,LineData‘从1号文件中读出一行
PrintLineData
Loop
Close#1‘关闭文件
Print"总人数为:
";Count
EndSub
2自定义类型动态数组
自定义类型的定义程序如下:
TypestudType‘studType为自定义类型名
anoAsString*12
aclassAsString*7
ascoreAsInteger
anameAsString
EndType
Typestudtype1
bclassAsString*7
bscoreAsInteger
EndType
自定义类型动态数组程序如下:
Open"H:
\教师课件\刘成\课设\VB\数据\file11_数据统计.txt"ForInputAs#1
DimNoAsString,ClassAsString,ScoreAsInteger,NameAsString
DimCountAsInteger,SumAsInteger,AverageAsSingle
Dimstud()AsstudType‘声明动态数组
DoWhileNotEOF
(1)'统计班级数,定义动态数组
Input#1,No,Class,Score,Name
Count=Count+1
Loop
n=Count
ReDimstud(n-1)
Close#1
Open"H:
\教师课件\刘成\课设\VB\数据\file11_数据统计.txt"ForInputAs#1
DoWhileNotEOF
(1)'将每名学生的班级和分数导入数组
Input#1,No,Class,Score,Name
Withstud(i)
.aclass=Class
.ascore=Score
EndWith
i=i+1
Loop
Close#1
3算法
计算各个班级的平均分时如何从全部班级中把不同的班级挑选出来。
例如如何从(2、5、5、8)四个数中把不同的数挑选出来,可以用后一个与前一个比较,若相同则舍去,若不同则挑选出来。
稍微变一下数的排列顺序,挑选算法也要加以变化。
例如变为(5、2、5、8),只用后一个与前一个相比较就挑选不出来了,可以先把(5、2、5、8)用冒泡法排序为(2、5、5、8)后再进行挑选。
挑选班级也可以如此,把班级看作一个七位数,就可以用以上方法进行挑选。
程序段如下:
n=UBound(stud)
Fori=0Ton'比较班级号的大小,使数组按班级号由小到大排列
imin=i
Forj=i+1Ton-1
Ifstud(imin).aclass>stud(j).aclassThenimin=j
Nextj
m=stud(i).aclass:
stud(i).aclass=stud(imin).aclass:
stud(imin).aclass=m
Nexti
Dimstud1(999)Asstudtype1
Withstud1(0)
.bclass=stud(0).aclass
EndWith
s=0
Fori=1Ton'依次比较班级号,确定班级的个数
Ifstud1(s).bclass<>stud(i).aclassThen
s=s+1
stud1(s).bclass=stud(i).aclass
EndIf
Nexti
总结
这次课设我的题目是数据统计,通过这次课设让我对顺序文件的打开读取等语句和函数以及自定类型动态数组的应用更加熟练,我对算法有了更深的认识与理解。
在课设过程中,我遇到了重重困难,例如:
如何把不同的班级从全部班级中挑选出来的算法。
通过老师的指点和与同学的讨论,我克服了困难,顺利的完成了任务。
同时我也了解了VB的出现是一场技术革命,它在生活中各个方面都能发挥巨大的作用,所以,学好VB是社会发展的需要。
完整的源程序
Form1
PrivateSubCommand1_Click()
DimCountAsInteger
Open"H:
\教师课件\刘成\课设\VB\数据\file11_数据统计.txt"ForInputAs#1
DoWhileNotEOF
(1)
LineInput#1,LineData
PrintLineData
Count=Count+1
Loop
Close#1
Print"总人数为:
";Count
EndSub
PrivateSubCommand2_Click()
Open"H:
\教师课件\刘成\课设\VB\数据\file11_数据统计.txt"ForInputAs#1
DimNoAsString,ClassAsString,ScoreAsInteger,NameAsString
DimCountAsInteger,SumAsInteger,AverageAsSingle
DoWhileNotEOF
(1)
Input#1,No,Class,Score,Name
Count=Count+1
Sum=Sum+Score
Loop
Average=Sum/Count
Print"总平均分为:
";Average
Close#1
EndSub
PrivateSubCommand3_Click()
Open"H:
\教师课件\刘成\课设\VB\数据\file11_数据统计.txt"ForInputAs#1
DimNoAsString,ClassAsString,ScoreAsInteger,NameAsString
DimCountAsInteger,SumAsInteger,AverageAsSingle
Dimstud()AsstudType
DoWhileNotEOF
(1)Input#1,No,Class,Score,Name
Count=Count+1
Loop
n=Count
ReDimstud(n-1)
Close#1
Open"H:
\教师课件\刘成\课设\VB\数据\file11_数据统计.txt"ForInputAs#1
DoWhileNotEOF
(1)
Input#1,No,Class,Score,Name
Withstud(i)
.aclass=Class
.ascore=Score
EndWith
i=i+1
Loop
Close#1
n=UBound(stud)
Fori=0Ton
imin=i
Forj=i+1Ton-1
Ifstud(imin).aclass>stud(j).aclassThenimin=j
Nextj
m=stud(i).aclass:
stud(i).aclass=stud(imin).aclass:
stud(imin).aclass=m
Nexti
Dimstud1(999)Asstudtype1
Withstud1(0)
.bclass=stud(0).aclass
EndWith
s=0
Fori=1Ton
Ifstud1(s).bclass<>stud(i).aclassThen
s=s+1
stud1(s).bclass=stud(i).aclass
EndIf
Nexti
Count=0
Score=0
Fori=0Tos
Forj=0Ton
Ifstud(j).aclass=stud1(i).bclassThen
Count=Count+1
Score=Score+stud(j).ascore
EndIf
Nextj
Average=Score/Count
Printstud1(i).bclass;"班的平均分为:
";Average
Count=0
Score=0
Nexti
EndSub
PrivateSubCommand4_Click()
End
EndSub
PrivateSubCommand5_Click()
Cls
EndSub
Module1
TypestudType
anoAsString*12
aclassAsString*7
ascoreAsInteger
anameAsString
EndType
Typestudtype1
bclassAsString*7
bscoreAsInteger
EndType
参考文献
[1]龚沛曾杨志强陆慰民.《VisualBasic程序设计教程》.北京:
高等教育出版社,2007年3月第3版