1、数据统计沈 阳 航 空 工 业 学 院 课程设计学 号 _班 级 _ 姓 名 _指导教师 _年 月 日沈阳航空工业学院课程设计任务书学院:机电 专业:机械 班级:94060108学号:2009040601292 题目:数据统计一、课程设计时间2011年3月1418日(第2周),共计1周,20学时。二、课程设计内容一个文本文件(file11_数据统计.txt)存储了若干位同学的数学成绩,文件中每行的内容按照顺序为:学号,班级,数学成绩,姓名。请完成一下问题:将文件中的内容全部显示在窗体上,并统计总人数。统计数学成绩的平均分。统计各个班级的平均分。三、课程设计要求程序质量: 贯彻事件驱动的程序设计
2、思想。 用户界面友好,功能明确,操作方便;可以加以其它功能或修饰。 用户界面中的菜单至少应包括“打印全部,并统计人数”、“计算总平均分”、“计算各个班的平均分”、“退出”4项。 代码应适当缩进,并给出必要的注释,以增强程序的可读性。课程设计说明书: 课程结束后,上交课程设计说明书和源程序。课程设计说明书的内容参见提供的模板。四、指导教师和学生签字指导教师:_ 学生签名:_五、成绩六、教师评语目 录需求分析 4设计分析 4关键技术 6总结 8完整的源程序 8参考文献 11需求分析一个文本文件(file11_数据统计.txt)存储了若干位同学的数学成绩,文件中每行的内容按照顺序为:学号,班级,数学
3、成绩,姓名。要求:能够将文件中的内容全部显示在窗体上,并统计总人数。能够统计数学成绩的平均分。能够统计各个班级的平均分。设计分析(1) 基本原理:用Open语句打开文本文件,用EOF函数读取文件中的内容导入的自定义类型数组中,将文件中的内容全部显示在窗体上并进行数据统计。(2) 总体设计:(3)详细设计:关键技术1文本文件的读取与导入的代码如下Private Sub Command1_Click()Dim Count As IntegerOpen H:教师课件刘成课设VB数据file11_数据统计.txtFor Input As #1 打开文件;用于读取数据,文件号为1Do While Not
4、 EOF(1) 判断一号文件是否结束,若不结束则继 Line Input#1,LineData 从1号文件中读出一行 Print LineDataLoop Close #1 关闭文件 Print 总人数为:; CountEnd Sub 2自定义类型动态数组自定义类型的定义程序如下:Type studType studType为自定义类型名 ano As String * 12 aclass As String * 7 ascore As Integer aname As StringEnd Type Type studtype1 bclass As String * 7 bscore As I
5、nteger End Type自定义类型动态数组程序如下:Open H:教师课件刘成课设VB数据file11_数据统计.txt For Input As #1 Dim No As String, Class As String, Score As Integer, Name As String Dim Count As Integer, Sum As Integer, Average As Single Dim stud() As studType 声明动态数组 Do While Not EOF(1) 统计班级数,定义动态数组Input #1, No, Class, Score, NameCo
6、unt = Count + 1 Loop n = Count ReDim stud(n - 1) Close #1 Open H:教师课件刘成课设VB数据file11_数据统计.txt For Input As #1Do While Not EOF(1) 将每名学生的班级和分数导入数组 Input #1, No, Class, Score, Name With stud(i) .aclass = Class .ascore = Score End With i = i + 1 Loop Close #13算法计算各个班级的平均分时如何从全部班级中把不同的班级挑选出来。例如如何从(2、5、5、8
7、)四个数中把不同的数挑选出来,可以用后一个与前一个比较,若相同则舍去,若不同则挑选出来。稍微变一下数的排列顺序,挑选算法也要加以变化。例如变为(5、2、5、8),只用后一个与前一个相比较就挑选不出来了,可以先把(5、2、5、8)用冒泡法排序为(2、5、5、8)后再进行挑选。挑选班级也可以如此,把班级看作一个七位数,就可以用以上方法进行挑选。程序段如下:n = UBound(stud) For i = 0 To n 比较班级号的大小,使数组按班级号由小到大排列 imin = i For j = i + 1 To n - 1 If stud(imin).aclass stud(j).aclass
8、Then imin = j Next j m = stud(i).aclass: stud(i).aclass = stud(imin).aclass: stud(imin).aclass = m Next i Dim stud1(999) As studtype1 With stud1(0) .bclass = stud(0).aclass End With s = 0 For i = 1 To n 依次比较班级号,确定班级的个数 If stud1(s).bclass stud(i).aclass Then s = s + 1 stud1(s).bclass = stud(i).aclass
9、 End IfNext i总结这次课设我的题目是数据统计,通过这次课设让我对顺序文件的打开读取等语句和函数以及自定类型动态数组的应用更加熟练,我对算法有了更深的认识与理解。 在课设过程中,我遇到了重重困难,例如:如何把不同的班级从全部班级中挑选出来的算法。通过老师的指点和与同学的讨论,我克服了困难,顺利的完成了任务。 同时我也了解了VB的出现是一场技术革命,它在生活中各个方面都能发挥巨大的作用,所以,学好VB是社会发展的需要。完整的源程序Form1Private Sub Command1_Click()Dim Count As Integer Open H:教师课件刘成课设VB数据file11
10、_数据统计.txt For Input As #1 Do While Not EOF(1) Line Input #1, LineData Print LineData Count = Count + 1 Loop Close #1 Print 总人数为:; Count End SubPrivate Sub Command2_Click() Open H:教师课件刘成课设VB数据file11_数据统计.txt For Input As #1 Dim No As String, Class As String, Score As Integer, Name As String Dim Count
11、 As Integer, Sum As Integer, Average As Single Do While Not EOF(1) Input #1, No, Class, Score, Name Count = Count + 1 Sum = Sum + Score Loop Average = Sum / Count Print 总平均分为:; Average Close #1End SubPrivate Sub Command3_Click() Open H:教师课件刘成课设VB数据file11_数据统计.txt For Input As #1 Dim No As String, Cl
12、ass As String, Score As Integer, Name As String Dim Count As Integer, Sum As Integer, Average As Single Dim stud() As studType Do While Not EOF(1) Input #1, No, Class, Score, Name Count = Count + 1 Loop n = Count ReDim stud(n - 1) Close #1 Open H:教师课件刘成课设VB数据file11_数据统计.txt For Input As #1 Do While
13、Not EOF(1) Input #1, No, Class, Score, Name With stud(i) .aclass = Class .ascore = Score End With i = i + 1 Loop Close #1 n = UBound(stud) For i = 0 To n imin = i For j = i + 1 To n - 1 If stud(imin).aclass stud(j).aclass Then imin = j Next j m = stud(i).aclass: stud(i).aclass = stud(imin).aclass: s
14、tud(imin).aclass = m Next i Dim stud1(999) As studtype1 With stud1(0) .bclass = stud(0).aclass End With s = 0 For i = 1 To n If stud1(s).bclass stud(i).aclass Then s = s + 1 stud1(s).bclass = stud(i).aclass End If Next i Count = 0 Score = 0 For i = 0 To s For j = 0 To n If stud(j).aclass = stud1(i).
15、bclass Then Count = Count + 1 Score = Score + stud(j).ascore End If Next j Average = Score / Count Print stud1(i).bclass; 班的平均分为:; Average Count = 0 Score = 0 Next i End SubPrivate Sub Command4_Click() EndEnd SubPrivate Sub Command5_Click() ClsEnd SubModule1Type studType ano As String * 12 aclass As String * 7 ascore As Integer aname As StringEnd TypeType studtype1 bclass As String * 7 bscore As Integer End Type参考文献1 龚沛曾 杨志强 陆慰民Visual Basic程序设计教程北京:高等教育出版社,2007年3月第3版
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1