全部博文(298)
分类: Python/Ruby
2012-02-21 10:59:21
学校学分绩点计算-awk实现
学生成绩原始数据格式:
1 20072488 周 3143344 计算机控制系统 限 3 63 正考 2011 1
2 20072488 周 3143345 计算机控制系统实验 限 1 70 正考 2011 1
3 20072488 周 3143326 计算机网络工程实验A 必 1 63 正考 2011 1
4 20072488 周 3243560 通信与测控技术 限 2 76 正考 2011 1
5 20072488 周 3143342 网络化控制系统理论与应用 限 3 70 正考 2011 1
6 20072488 周 3143341 现代控制理论A 限 2 66 正考 2011 1
7 20072488 周 3045400 智能控制 限 2 90 正考 2011 1
8 20072488 周 473011 专业英语(自动化) 限 2 76 正考 2011 1
9 20082479 某健 3143344 计算机控制系统 限 3 67 正考 2011 1
10 20082479 某健 3143345 计算机控制系统实验 限 1 70 正考 2011 1
11 20082479 某健 3143326 计算机网络工程实验A 必 1 66 正考 2011 1
12 20082479 某健 3243560 通信与测控技术 限 2 78 正考 2011 1
13 20082479 某健 3143342 网络化控制系统理论与应用 限 3 70 正考 2011 1
14 20082479 某健 3143341 现代控制理论A 限 2 80 正考 2011 1
15 20082479 某健 3045400 智能控制 限 2 80 正考 2011 1
16 20082479 某健 473011 专业英语(自动化) 限 2 60 正考 2011 1
137 20082501 谢致 3143344 计算机控制系统 限 3 61 正考 2011 1
138 20082501 谢致 3143345 计算机控制系统实验 限 1 90 正考 2011 1
139 20082501 谢致 3143326 计算机网络工程实验A 必 1 82 正考 2011 1
140 20082501 谢致 3243560 通信与测控技术 限 2 85 正考 2011 1
141 20082501 谢致 3143342 网络化控制系统理论与应用 限 3 86 正考 2011 1
142 20082501 谢致 3143341 现代控制理论A 限 2 88 正考 2011 1
143 20082501 谢致 3045400 智能控制 限 2 81 正考 2011 1
144 20082501 谢致 473011 专业英语(自动化) 限 2 60 正考 2011 1
需要计算的科目为:计算机控制系统;计算机控制系统实验;计算机网络工程实验A ;通信与测控技术;网络化控制系统理论与应用;现代控制理论A;智能控制 限;专业英语(自动化)
窗体顶端 课程学分绩点=∑(课程学分×课程类型系数×课程绩点)/该学期规定修读课程的学分总数 | ||||||||||||||||||||||||||||||||||||||||||
其中实验课程的类型系数和课程学分3分及其以上的算1.2 | ||||||||||||||||||||||||||||||||||||||||||
说明: | ||||||||||||||||||||||||||||||||||||||||||
窗体底端 |
shell脚本清单:
#! /bin/bash
echo "" | awk -f "xuefen.awk" | sort -k3,3 -r
awk脚本清单:
BEGIN{
OFMT="%.4f"
}
function kechengjidian(score)
{
if(score >= 90)
return 4.0
else if(score >= 85)
return 3.7
else if(score >= 82)
return 3.3
else if(score >= 78)
return 3.0
else if(score >= 75)
return 2.7
else if(score >= 72)
return 2.3
else if(score >= 68)
return 2.0
else if(score >= 66)
return 1.7
else if(score >= 64)
return 1.3
else if(score >= 60)
return 1.0
else if(score >= 0)
return 0
else
return -1
}
function kechengxishu(name)
{
xishu["专业英语(自动化)"] = 1.0
xishu["计算机控制系统"] = 1.2
xishu["计算机控制系统实验"] = 1.2
xishu["网络化控制系统理论与应用"] = 1.2
xishu["通信与测控技术"] = 1.0
xishu["计算机网络工程实验A"] = 1.2
xishu["智能控制"] = 1.0
xishu["现代控制理论A"] = 1.0
if(name in xishu)
{
return xishu[name]
}
}
function kechengxuefen(name)
{
xuefen["专业英语(自动化)"] = 2
xuefen["计算机控制系统"] = 3
xuefen["计算机控制系统实验"] = 1
xuefen["网络化控制系统理论与应用"] = 3
xuefen["通信与测控技术"] = 2
xuefen["计算机网络工程实验A"] = 1
xuefen["智能控制"] = 2
xuefen["现代控制理论A"] = 2
if(name in xuefen)
{
return xuefen[name]
}
else
{
return 0
}
}
{
#data = "/root/scripts/chengji"
data = "chengji"
xingming = ""
number = ""
while(("cat "data) | getline)
{
#print $0
#print xingming,xuefenjidian/totalxuefen,totalxuefen
if(kechengxuefen($5))
{
xingming = xingming == "" ? $3 : xingming;
number = number == "" ? $2 : number;
if(xingming != $3)
{
print number,xingming,xuefenjidian/totalxuefen,totalxuefen
xingming = $3
number = $2
xuefenjidian = 0
totalxuefen = 0
#system("sleep 3 ")
}
totalxuefen += $7
xuefenjidian += $7*kechengxishu($5)*kechengjidian($8)
#xuefenjidian += $7*kechengxishu("$5")*kechengjidian($8)
}
}
print number,xingming,xuefenjidian/totalxuefen,totalxuefen
close(data)
}