VB程序
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
课程大作业
题目名称: 机械10905班学生成绩管理系统
班 级:_________机械10905班_____________
姓 名:____________王 琛_______________
班级序号:_______________30 ________________
课程教师: 李 宁
学 期: 2010-2011学年 第2学期
完成时间: 2011-5-29
VB程序设计
课程大作业
题目名称:机械10905班学生成绩管理系统
班 级: 机械10905班
姓 名: 王 琛
班级序号: 30
课程教师: 李 宁
学 期: 2010-2011学年 第2学期
完成时间: 2011—5—29
一.系统名称:
长江大学机械10905班学生成绩管理系统
二.程序摘要
先在记事本中创建2个文本文档,分别输入本班52名学生在本学期的5门考试课的成绩和课程名及其学分.在主函数中读入两个原始数据文件的内容,保存在对应的结构体数组中,计算出每个学生5门课的加权平均分,并按平均分排列名次.然后显示菜单,调用各个函数,完成以下功能:
1 用VB语言创建一个数据文件,文件名为:“成绩
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
”,用来存放班级的成绩表.
2 ①分别统计全班每名同学每门课的加权平均分和名次,并将其存放进一个文件名为成绩表的文件中。②统计每门课各分数段(90以上,80-90,70-80,60-70,60分以下)的学生数及平均分。将结果存放在一个新的数据文件中,文件名为“人数及平均分统计”。
3 打印每名学生成绩条,结果存放到用VB语言创建的一个数据文件中,文件名为:“成绩条”,成绩条格式为,学号,姓名,模拟电路,概率论,大学物理,机械工程导论,加权平均分,名次。
4 屏幕显示所有存在不及格课程的学生的名单(含学号,不及格课程名称,课程的学分及成绩)
5 屏幕显示所有优等生名单(含学号,5门课成绩,平均分,名次),优等生条件(只要满足三个中任一个就可以):
a) 平均分>=90分
b) 名次在本班位于前三名
c) 平均分>=85分,并且有两门课的成绩>=95分
三.系统设计
流程
快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计
图
SHAPE \* MERGEFORMAT
四.系统运行结果
1,登陆界面
2,求加权平均分及名次
3,成绩条
4,优等生名单
5,用“通用对话框”打开“文本文件”
五.相应程序代码
Option Base 1
Private Sub Form_load()
'下面程序用于读“成绩”和“课程”两个文件
Dim st1$(), str1$, zxf!, i%, j%
Open "C:\Documents and Settings\Administrator\桌面\课程.txt" For Input As #2
Line Input #2, str1
Do While Not EOF(2)
m = m + 1
ReDim Preserve ke(m)
Line Input #2, str1
str1 = Trim(str1)
str1 = space1(str1)
st1 = Split(str1, " ")
ke(m).kb = st1(0)
ke(m).kname = st1(1)
ke(m).kxf = st1(2)
zxf = zxf + ke(m).kxf
Loop
Close #2
Open "C:\Documents and Settings\Administrator\桌面\成绩.txt" For Input As #1
Line Input #1, str1
Do While Not EOF(1)
n = n + 1
ReDim Preserve stud(n)
Line Input #1, str1
str1 = Trim(str1)
str1 = space1(str1)
st1 = Split(str1, " ")
stud(n).snum = st1(0)
stud(n).sname = st1(1)
stud(n).a(1) = st1(2)
stud(n).a(2) = st1(3)
stud(n).a(3) = st1(4)
stud(n).a(4) = st1(5)
stud(n).a(5) = st1(6)
stud(n).aver = 0
stud(n).mc = 0
Loop
Close #1
'下面程序用于求每名学生的加权平均分
For i = 1 To n
For j = 1 To m
stud(i).aver = stud(i).aver + stud(i).a(j) * ke(j).kxf
Next j
stud(i).jqpjf = Format(stud(i).aver / zxf, "00.0")
Next i
'下面程序用于求每名学成的名次
For k = 1 To n
p = k
y = 1
For q = 1 To n
If stud(p).jqpjf < stud(q).jqpjf Then
y = y + 1
End If
Next q
stud(p).mc = y
Next k
'下面程序用于求每门课程的课程平均分
For i = 1 To m
For j = 1 To n
ke(i).kcpjf = ke(i).kcpjf + stud(j).a(i)
Next j
Next i
'下面程序用于求各分数段人数
fsd(1) = "[90,100]:": fsd(2) = "[80, 89]:": fsd(3) = "[70, 79]:": fsd(4) = "[60, 69]:": fsd(5) = "[0, 59]:"
For i = 1 To m
For j = 1 To n
If stud(j).a(i) >= 90 Then
assort(1, i) = assort(1, i) + 1
ElseIf stud(j).a(i) >= 80 And stud(j).a(i) <= 89 Then
assort(2, i) = assort(2, i) + 1
ElseIf stud(j).a(i) >= 70 And stud(j).a(i) <= 79 Then
assort(3, i) = assort(3, i) + 1
ElseIf stud(j).a(i) >= 60 And stud(j).a(i) <= 69 Then
assort(4, i) = assort(4, i) + 1
Else
assort(5, i) = assort(5, i) + 1
End If
Next j
Next i
'下面程序用于求每名学生成绩中大于95以上的科目数
For i = 1 To n
stud(i).dyjsf = 0
For j = 1 To m
If stud(i).a(j) >= 95 Then stud(i).dyjsf = stud(i).dyjsf + 1
Next j
Next i
End Sub
'子函数过程 实现用一个空格代替多个空格
Public Function space1(ByVal sss As String)
Dim x%
x = InStr(sss, " ")
Do While x > 0
sss = Replace(sss, " ", " ")
x = InStr(sss, " ")
Loop
space1 = sss
End Function
‘写文件“班级成绩表”
Private Sub output_Click()
Form1.Cls
Dim i As Integer, j As Integer
Open App.Path + "\班级成绩表.txt" For Output As #3
Print #3, " 学号 姓名 模拟电路 概率论 大学物理 机械工程导论 VB 加权平均分 名次"
Form1.Print " 学号 姓名 模拟电路 概率论 大学物理 机械工程导论 VB 加权平均分 名次"
For i = 1 To n
Print #3, stud(i).snum & Space(2) & stud(i).sname;
Form1.Print stud(i).snum & Space(2) & stud(i).sname;
For j = 1 To m
Print #3, stud(i).a(j); Space(12);
Form1.Print stud(i).a(j); Space(12);
Next j
Print #3, stud(i).jqpjf & Space(13) & stud(i).mc '写入“加权平均分”和“名次”
Form1.Print stud(i).jqpjf & Space(13) & stud(i).mc;
Print #3, '实现转行
Form1.Print '实现转行
Next i
Close #3
End Sub
Private Sub Form1_Click()
End Sub
'写文件“课程平均分及各分数段人数”
Private Sub pjfjrs_Click()
Form1.Cls
Dim g As Integer, h As Integer, l As Integer
Open App.Path + "\课程平均分及各分数段人数.txt" For Output As #4
Print #4, " 模拟电路 概率论 大学物理 机械工程导论 VB"
Form1.Print " 模拟电路 概率论 大学物理 机械工程导论 VB"
Print #4, "课程平均分"; Space(7);
Form1.Print "课程平均分"; Space(7);
For g = 1 To m
Print #4, Format(ke(g).kcpjf / n, "00.0"); Space(12);
Form1.Print Format(ke(g).kcpjf / n, "00.0"); Space(12);
Next g
Print #4, '实现转行
Form1.Print
'写入各分数段
For h = 1 To 5
Print #4, fsd(h); Space(8);
Form1.Print fsd(h); Space(8);
'写入各分数段人数
For l = 1 To 5
Print #4, assort(h, l); Space(13);
Form1.Print assort(h, l); Space(13);
Next l
Print #4, '实现转行
Form1.Print
Next h
Close #4
End Sub
'写文件“不及格学生名单”
Private Sub printbjgxsmd_Click()
Form1.Cls
Open App.Path + "\不及格学生名单.txt" For Output As #6
Print #6, "学号 姓名 不及格课程 课程学分 成绩"
Form1.Print "学号 姓名 不及格课程 课程学分 成绩"
'下面程序用于定位不及格的是第i名学生第j名课程
For i = 1 To n
For j = 1 To m
score(i, j) = stud(i).a(j)
Next j
Next i
For e = 1 To n
For f = 1 To m
If score(e, f) < 60 Then
Print #6, stud(e).snum; Space(3); stud(e).sname; Space(4); ke(f).kname; Space(8); ke(f).kxf; Space(10); stud(e).a(f);
Form1.Print stud(e).snum; Space(3); stud(e).sname; Space(4); ke(f).kname; Space(8); ke(f).kxf; Space(10); stud(e).a(f);
Print #6,
Form1.Print
End If
Next f
Next e
Close #6
End Sub
'写文件“成绩条”
Private Sub printcjt_Click()
Form1.Cls
Dim i As Integer, j As Integer
Open App.Path + "\成绩条.txt" For Output As #5
For i = 1 To n
Print #5, " 学号 姓名 模拟电路 概率论 大学物理 机械工程导论 VB 加权平均分 名次"
Form1.Print " 学号 姓名 模拟电路 概率论 大学物理 机械工程导论 VB 加权平均分 名次"
Print #5, stud(i).snum & Space(2) & stud(i).sname;
Form1.Print stud(i).snum & Space(2) & stud(i).sname;
For j = 1 To m
Print #5, stud(i).a(j); Space(12);
Form1.Print stud(i).a(j); Space(12);
Next j
Print #5, stud(i).jqpjf & Space(11) & stud(i).mc
Form1.Print stud(i).jqpjf & Space(11) & stud(i).mc;
Print #5,
Form1.Print
Print #5,
Form1.Print
Next i
Close #5
End Sub
'写文件“优等生名单”
Private Sub printydsmd_Click()
Form1.Cls
Open App.Path + "\优等生名单.txt" For Output As #7
Print #7, "学号 模拟电路 概率论 大学物理 机械工程导论 VB 加权平均分 名次"
Form1.Print "学号 模拟电路 概率论 大学物理 机械工程导论 VB 加权平均分 名次"
'下面程序用于判断谁是优等生
For i = 1 To n
If stud(i).jqpjf >= 90 Then
Print #7, stud(i).snum; Space(5); stud(i).a(1); Space(14); stud(i).a(2); Space(13); stud(i).a(3); Space(15); stud(i).a(4); Space(15); stud(i).a(5); Space(14); stud(i).jqpjf; Space(12); stud(i).mc;
Form1.Print stud(i).snum; Space(5); stud(i).a(1); Space(14); stud(i).a(2); Space(13); stud(i).a(3); Space(15); stud(i).a(4); Space(15); stud(i).a(5); Space(14); stud(i).jqpjf; Space(12); stud(i).mc;
Print #7, '实现转行
Form1.Print
ElseIf stud(i).mc <= 3 Then
Print #7, stud(i).snum; Space(5); stud(i).a(1); Space(14); stud(i).a(2); Space(13); stud(i).a(3); Space(15); stud(i).a(4); Space(15); stud(i).a(5); Space(14); stud(i).jqpjf; Space(12); stud(i).mc;
Form1.Print stud(i).snum; Space(5); stud(i).a(1); Space(14); stud(i).a(2); Space(13); stud(i).a(3); Space(15); stud(i).a(4); Space(15); stud(i).a(5); Space(14); stud(i).jqpjf; Space(12); stud(i).mc;
Print #7, '实现转行
Form1.Print
ElseIf stud(i).jqpjf >= 85 And stud(i).dyjsf >= 2 = ture Then
Print #7, stud(i).snum; Space(5); stud(i).a(1); Space(14); stud(i).a(2); Space(13); stud(i).a(3); Space(15); stud(i).a(4); Space(15); stud(i).a(5); Space(14); stud(i).jqpjf; Space(12); stud(i).mc;
Form1.Print stud(i).snum; Space(5); stud(i).a(1); Space(14); stud(i).a(2); Space(13); stud(i).a(3); Space(15); stud(i).a(4); Space(15); stud(i).a(5); Space(14); stud(i).jqpjf; Space(12); stud(i).mc;
Print #7, '实现转行
Form1.Print
Else
End If
Next i
Close #7
End Sub
实现用“通用对话框”打开“文本文件”
Private Sub open_Click()
CommonDialog1.DialogTitle = "打开"
CommonDialog1.Filter = "文本文件|*.txt"
CommonDialog1.ShowOpen
CommonDialog1.InitDir = Shell("C:\WINDOWS\system32\notepad.exe " & CommonDialog1.FileName, vbNormalFocus)
End Sub
实现用“通用对话框”保存“文本文件”
Private Sub save_Click()
CommonDialog1.DialogTitle = "保存"
CommonDialog1.Filter = "文本文件(*.txt)"
CommonDialog1.InitDir = "C:\"
CommonDialog1.ShowSave
End Sub
自定义“学生”数组
Type student
snum As String * 10
sname As String * 10
a(1 To 5) As Integer
aver As Single
jqpjf As Single
mc As Integer
dyjsf As Integer '用来存放每个学生大于等于95分的科目数
六.小结:
要完成该成绩管理系统,首先需要自定义“学生”和“课程”两个数组,通过自定义这两个数组的各项属性,可以将各相关数据读取并且在写文件的过程中进行引用。本次VB课程设计最关键的部分是读文件,在读文件过程中,会遇到“下标越界”、“类型不匹配”等问题,这些问题要通过设定变量的初始值,如利用“option base 1”、“n=0”等来解决,另外定义变量或数组类型时要注意是字符型还是数值型,不然在进行相应运算时就会出现“类型不匹配”提醒。
在定义变量时我们要分清哪个是过程变量,那个是全局变量,全局变量须定义在模块里面(利用public语句实现),而过程变量则定义在单个过程里面就行了(利用“dim”语句或“static”语句实现)
在程序运行结果过程中,会出现数据排列不对齐的情况,对于这种情况,我们在写程序代码时,只需在引用的变量间,添加上space 函数或tab函数,通过不断调试使数据排列变整齐。
我在求各分数段人数时,用到了二维数组,而且用一次还不行,我在打印出数据的过程中用到了数组的转置,即定义另外一个数组,将现有的数组实现再一次赋值。
在完成本次课设的过程中,我重复多次用到了“for”循环、“do while”循环等循环结构,另外在求名次的过程中用到了程序结构中的“选择结构”,在求各分数段人数和判断谁是优等生的过程中用到了“if….elseif…..elseif…..else”语句,在删除空格的过程中调用了子函数
最后,为了实现用“通用对话框”打开本程序运行产生的文本文件,需用到“shell”函数.
感谢李老师的悉心教导!
学生成绩管理系统
读文件
分析
定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析
与统计
打印与输出
成绩文件
课程文件
计算加权平均分
按平均分排名次
每名学生成
绩条
条
不及格学生数
优等生名单
用“通用对话框”打开生成的文本文件
各分数段人数及各科平均分
班级成绩表