数据统计.docx
《数据统计.docx》由会员分享,可在线阅读,更多相关《数据统计.docx(13页珍藏版)》请在冰豆网上搜索。
数据统计
沈阳航空航天大学
课程设计
学号2009040302076
班级94030203
姓名曹帅
指导教师王晓岩
2011年3月15日
沈阳航空航天大学
课程设计任务书
学院:
航空宇航工程专业:
飞行器制造工程班级:
94030203
学号:
2009040302076题目:
数据统计
一、课程设计时间
2011年3月7~11日(第1周),共计1周,20学时。
二、课程设计内容
一个文本文件(file11_数据统计.txt)存储了若干位同学的数学成绩,文件中每行的内容按照顺序为:
学号,班级,数学成绩,姓名。
请完成以下问题:
①将文件中的内容全部显示到窗体,并统计总人数。
②统计数学成绩的平均分。
③统计各个班级的平均分。
三、课程设计要求
程序质量:
✧贯彻事件驱动的程序设计思想。
✧用户界面友好,功能明确,操作方便;可以加以其它功能或修饰。
✧用户界面中的菜单至少应包括“打印全部,并统计人数”、“计算总平均分”、“计算各个班的平均分”、“退出”4项。
✧代码应适当缩进,并给出必要的注释,以增强程序的可读性。
课程设计说明书:
✧课程结束后,上交课程设计说明书和源程序。
课程设计说明书的内容参见提供的模板。
四、指导教师和学生签字
指导教师:
________学生签名:
________
五、成绩
六、教师评语
目录
需求分析3
设计分析4
技术要点6
主要界面截图10
总结13
完整的源程序15
参考文献18
需求分析
一个文本文件(file11_数据统计.txt)存储了若干位同学的数学成绩,文件中每行的内容按照顺序为:
学号,班级,数学成绩,姓名。
要求:
(1)将文件中的内容全部显示到窗体,并统计总人数。
(2)统计数学成绩的平均分。
(3)统计各个班级的平均分。
设计分析
(1)概述:
基本原理:
建立程序设计与文本文件的连接,通过程对文本文件进行读操作。
然后通过循环语句对文件内容进行操作。
(2)总体设计:
图1总体设计
(3)详细设计:
技术要点
1读取文件
Open文件名For模式As【#】文件号
程序段如下:
OptionExplicit
OptionBase1
PrivateTypestudentype‘自定义数组类型
numAsString‘学号
claAsString‘班级
scorAsInteger‘数学成绩
namAsString‘姓名
countAsInteger‘学生人数
EndType
Dimxue()Asstudentype‘定义数组类型
PrivateSubForm_Load()
DimiAsInteger
i=1
Open"file11_数据统计.txt"ForInputAs#1‘对文件进行读操作
DoWhileNotEOF
(1)
ReDimPreservexue(k)
Input#1,xue(k).num,xue(k).cla,xue(k).scor,xue(k).nam
k=k+1
Loop
Close#1
Fori=1ToUBound(stu)‘对学生人数进行赋值
stu(i).count=1
xue(i).count=1
Nexti
EndSub
2文件内容显示在窗体上并且统计总人数
【对象.】print表达式
程序段如下:
PrivateSubprint_Click()
DimcountAsInteger
count=0
Print"班级"&Space(6)&"姓名"&Space
(2)&"学号"&Space(8)&"成绩"
Fori=1ToUBound(xue)
count=xue(i).count+count
Printxue(i).cla&Space
(2)&xue(i).nam&Space
(2)&xue(i).num&Space
(2)&xue(i).scor
Nexti
Print"总人数:
";count
EndSub
3计算总平均分
程序段如下:
PrivateSubaver1_Click()‘计算总平均分
DimsumAsInteger
DimcountAsInteger
Fori=1ToUBound(stu)
sum=stu(i).scor+sum
count=stu(i).count+count
Nexti
Picture1.Print"总平均分";Format(sum/count,"0.000")
EndSub
4计算各班平均分
For循环控制变量=初值To终值【Step步长】
循环体
Next循环控制变量
程序段如下:
PrivateSubaver2_Click()
DimiAsInteger
DimkAsInteger
DimjAsInteger
i=1
j=1
k=1
Fori=1ToUBound(stu)‘查询班级,计算各班级班级平均分
Forj=i+1ToUBound(stu)
Ifstu(i).cla=stu(j).claThen
stu(i).scor=stu(i).scor+stu(j).scor
stu(i).count=stu(i).count+1
Fork=jToUBound(stu)-1
stu(k)=stu(k+1)
Nextk
t=Val(UBound(stu))-1
ReDimPreservestu(t)
EndIf
Ifj=UBound(stu)ThenExitFor
Nextj
Nexti
t=UBound(stu)
Fori=1ToUBound(stu)–1‘判断学生,并对已出现的班级进行覆盖
Ifstu(i).cla=stu(t).claThen
stu(i).scor=stu(i).scor+stu(t).scor
stu(i).count=stu(i).count+1
ReDimPreservestu(t-1)‘重新定义数组
ExitFor
EndIf
Nexti
Fori=1ToUBound(stu)‘在图片框打印文件内容
Picture1.Print"班级:
";stu(i).cla&Space
(2);
Picture1.Print"平均分:
";Format(stu(i).scor/stu(i).count,"0.000");Space
(2);
Picture1.Print"班级总人数:
";stu(i).count
Nexti
EndSub
主要界面截图
图3显示文件内容及统计总人数
图4计算总平均分
图5各班平均分
总结
这次课设我的题目是数据统计,通过这次课设让我了解了VB与文本文件的联系,可以利用Open语句读文本文件进行读写操作,还可以能够对文本文件进行修改。
同时,支持自定义数组类型,为文件的读取及对其内容的操作提供了很大的方便。
循环语句的恰当运用可以使问题简单化、解决的高效化。
在课设过程中,我遇到了重重困难,例如:
在计算各班的数学成绩是,必须先统计各班号时出现了问题,通过老师的指点和自己查阅资料,多次试验和命令的调试,我克服了困难,顺利的完成了任务。
同时我也了解了VB的出现是一场技术革命,它活中各个方面都能发挥巨大的作用,VB及其它语言的开发与利用使生活中很多看似复杂的问题变得简单,从而使解决问题的效率大大提高。
所以,学好VB是社会发在生展的需要。
把编程语言和自己的专业同时进行是整个社会的所趋。
完整的源程序
OptionExplicit
OptionBase1
PrivateTypestudentype
numAsString
claAsString
scorAsInteger
namAsString
countAsInteger
EndType
Dimstu()Asstudentype
Dimxue()Asstudentype
PrivateSubaver1_Click()
DimsumAsInteger
DimcountAsInteger
Fori=1ToUBound(stu)
sum=stu(i).scor+sum
count=stu(i).count+count
Nexti
Picture1.Print"总平均分";Format(sum/count,"0.000")
EndSub
PrivateSubaver2_Click()
DimtAsInteger
DimiAsInteger
DimkAsInteger
DimjAsInteger
i=1
j=1
k=1
Fori=1ToUBound(stu)
Forj=i+1ToUBound(stu)
Ifstu(i).cla=stu(j).claThen
stu(i).scor=stu(i).scor+stu(j).scor
stu(i).count=stu(i).count+1
Fork=jToUBound(stu)-1
stu(k)=stu(k+1)
Nextk
t=Val(UBound(stu))-1
ReDimPreservestu(t)
j=i+1
EndIf
Ifj=UBound(stu)ThenExitFor
Nextj
Nexti
t=UBound(stu)
Fori=1ToUBound(stu)-1
Ifstu(i).cla=stu(t).claThen
stu(i).scor=stu(i).scor+stu(t).scor
stu(i).count=stu(i).count+1
ReDimPreservestu(t-1)
ExitFor
EndIf
Nexti
Fori=1ToUBound(stu)
Picture1.Print"班级:
";stu(i).cla&Space
(2);
Picture1.Print"平均分:
";Format(stu(i).scor/stu(i).count,"0.000");Space
(2);
Picture1.Print"班级总人数:
";stu(i).count
Nexti
EndSub
PrivateSubexit_Click()
End
EndSub
PrivateSubForm_Load()
DimiAsInteger,kAsInteger
i=1
k=1
Open"file11_数据统计.txt"ForInputAs#1
DoWhileNotEOF
(1)
ReDimPreservexue(k)
Input#1,xue(k).num,xue(k).cla,xue(k).scor,xue(k).nam
k=k+1
Loop
Close#1
Open"file11_数据统计.txt"ForInputAs#1
DoWhileNotEOF
(1)
ReDimPreservestu(i)
Input#1,stu(i).num,stu(i).cla,stu(i).scor,stu(i).nam
i=i+1
Loop
Close#1
Fori=1ToUBound(stu)
stu(i).count=1
xue(i).count=1
Nexti
EndSub
PrivateSubprint_Click()
DimcountAsInteger
count=0
Print"班级"&Space(6)&"姓名"&Space
(2)&"学号"&Space(8)&"成绩"
Fori=1ToUBound(xue)
count=xue(i).count+count
Printxue(i).cla&Space
(2)&xue(i).nam&Space
(2)&xue(i).num&Space
(2)&xue(i).scor
Nexti
Print"总人数:
";count
EndSub
参考文献
[1]龚沛曾等.《VisualBasic程序设计教程》.北京:
高等教育出版社,2007