Untitled
unknown
plain_text
2 years ago
3.6 kB
15
Indexable
#!/usr/bin/python3
# COMP3311 22T3 Ass2 ... print a transcript for a given student
import sys
import psycopg2
import re
from helpers import getStudent
# define any local helper functions here
### set up some globals
usage = f"Usage: {sys.argv[0]} zID"
db = None
string = "{CourseCode} {Term} {SubjectTitle:<32s}{Mark:>3} {Grade:>2s} {UOC:2}"
uocPass = {'A', 'B', 'C', 'D', 'A+', 'B+', 'C+', 'D+', 'A-', 'B-', 'C-', 'D-', 'HD', 'DN', 'CR', 'PS', 'XE', 'T', 'SY', 'EC', 'RC'}
toWam = {'HD', 'DN', 'CR', 'PS', 'AF', 'FL', 'UF', 'E', 'F'}
fail = {'AF', 'FL', 'UF', 'E', 'F'}
unrs = {'AS', 'AW', 'PW', 'NA', 'RD', 'NF', 'NC', 'LE', 'PE', 'WD', 'WJ'}
### 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=ass2")
stuInfo = getStudent(db,zid)
if not stuInfo:
print(f"Invalid student ID {zid}")
exit()
print(str(stuInfo[1]) + ' ' + stuInfo[2] + ', ' + stuInfo[3]) # debug
# Print transcript for Student
# ... add your code here ...
cur = db.cursor()
qry = """select MAX(t.starting), pe.id
from Terms t
join Program_enrolments pe on pe.term = t.id
join Programs p on pe.program = p.id
where pe.student = %s
group by pe.id, t.starting
order by t.starting desc"""
cur.execute(qry, [stuInfo[0]])
qry1 = """select *
from Programs p
where pe.student = %s"""
tup = cur.fetchone()
qry2 = """select sub.code, t.code, sub.title, pe.id, ce.mark, ce.grade, sub.uoc
from Courses c
join Course_enrolments ce on ce.course = c.id
join Subjects sub on sub.id = c.subject
join Students s on s.id = ce.student
join Program_enrolments pe on pe.student = s.id
join Terms t on c.term = t.id
where pe.id = %s
order by t.code, sub.code"""
cur.execute(qry2, [tup[1]])
qry3 = """select s.code, p.code, p.name
from Programs p
join Program_enrolments pe on pe.program = p.id
join Stream_enrolments se on se.part_of = pe.id
join Streams s on s.id = se.stream
where pe.id = %s"""
cur.execute(qry3, [tup[1]])
codes = cur.fetchone()
print(codes[1] + ' ' + codes[0] + ' ' + codes[2])
cur.execute(qry2, [tup[1]])
attemptUoc = 0;
achvUoc = 0;
totWam = 0;
for course in cur.fetchall():
truncString = (course[2])[0:31]
mark = course[4]
if mark == None:
mark = '-'
else:
mark = course[4]
grade = course[5]
uocString = ''
if grade in fail:
uocString = 'fail'
elif grade in unrs:
uocString = 'unrs'
else:
uocString = str(course[6]) + 'uoc'
print(string.format(CourseCode = course[0], Term = course[1], SubjectTitle = truncString, Mark = mark, Grade = grade, UOC = uocString))
if course[5] in uocPass:
achvUoc += course[6]
if course[5] in toWam:
attemptUoc += course[6]
if mark != '-':
totWam += mark * course[6]
finalWam = totWam / attemptUoc
print('UOC = ' + str(achvUoc) + ', WAM = ' + str(round(finalWam, 1)))
except Exception as err:
print("DB error: ", err)
finally:
if db:
db.close()
Editor is loading...
Leave a Comment