1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
#!/usr/bin/python3
# COMP3311 21T3 Ass2 ... print a transcript for a given student
import sys
import psycopg2
import re
from helpers import getStudent, getStudentCourses, doesGradeAddRule
from helpers import doesGradeAddUOC, doesGradeAddWAM, getGradeString
# define any local helper functions here
### set up some globals
usage = f"Usage: {sys.argv[0]} zID"
db = None
### process command-line args
argc = len(sys.argv)
if argc < 2:
print(usage)
exit(1)
zid = sys.argv[1]
if zid[0] == 'z':
zid = zid[1:8]
digits = re.compile("^\d{7}$")
if not digits.match(zid):
print(f"Invalid student ID {zid}")
exit(1)
# manipulate database
try:
db = psycopg2.connect("dbname=mymyunsw")
stuInfo = getStudent(db,zid)
if not stuInfo:
print(f"Invalid student ID {zid}")
exit()
student = getStudent(db, zid)
print(f"{zid} {student[1]}, {student[2]}")
total_uoc = 0;
total_wam_num = 0;
total_wam_den = 0;
for (CourseCode, Term, SubjectTitle, Mark, Grade, UOC) in getStudentCourses(db, zid):
total_uoc += UOC if doesGradeAddUOC(Grade) else 0
total_wam_num += UOC * (Mark if Mark != None else 0)
total_wam_den += UOC if doesGradeAddWAM(Grade) else 0
mark_str = Mark if Mark != None else "-"
uoc_str = " " + getGradeString(Grade) if getGradeString(Grade) != "Xuoc" else f"{UOC:2d}uoc"
print(f"{CourseCode} {Term} {SubjectTitle :<32s}{mark_str :>3} {Grade :>2s} {uoc_str}")
# Avoid division by zero.
print(f"UOC = {total_uoc}, WAM = {total_wam_num / total_wam_den if total_wam_den != 0 else 0 :.1f}");
except Exception as err:
print("DB error: ", err)
finally:
if db:
db.close()
|