aboutsummaryrefslogtreecommitdiff
path: root/comp3311/2/trans
blob: f53067623b746770ca5622ab6e90d43e1c5dfa24 (plain)
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()