- 27th Jan 2024
- 14:51 pm
You are required to develop and test a Python program and then write up a report about your solution. Students should complete the task based on the scenario chosen and provide evidence to meet all the criteria. Evidence must be provided to show key elements of this assessment:
- Analysis of the scenario and the application of computational thinking skills.
- Technical understanding of the data structures, algorithms, functions, and data types.
- Development of a programming solution in Python.
- The testing and evaluation of the solution during the development process and at the end of the development.
FC308 Program Specification
Robert works in the admin department for an international college. He has been asked by the manager to create a program to manage the results from the students’ assessments. The system should be used by both students and teachers. Each student has a unique identifier which can be used to identify the students in the college.
Robert wants to create a user interface that that allows him to log into the system and carry out the necessary administration such as add assessment results etc.
Information Technology - FC308 - Get Assignment Solution
Please note that this is a sample assignment solved by our Python Programmers. These solutions are intended to be used for research and reference purposes only. If you can learn any concepts by going through the reports and code, then our Python Tutors would be very happy.
- Option 1 - To download the complete solution along with Code, Report and screenshots - Please visit our Python Assignment Sample Solution page
- Option 2 - Reach out to our Python Tutors to get online tutoring related to this assignment and get your doubts cleared
- Option 3 - You can check the partial solution for this assignment in this blog below
Free Assignment Solution - Information Technology - FC308
In every educational institution, different engagements are going on between students and the administration. Often these engagements are handled manually and therefore take a significant but unnecessary amount of time because of the advent of different technologies related to computers and programming. Therefore, in this project, the basic and primitive working functionalities of the student management system are developed with the help of Python programming language in which the user will operate using a command line interface.
The SMS will have two different roles 1. User and 2. Admin. Users will be able to see his/her grades which admin will have different accesses discussed ahead. SMS should be easy to operate, robust and fast.
Technical Overview
The programming language used in this project is Python. The user engagement will happen through the command line interface. Since the approach is a procedural and functional programming paradigm, hence at a time single student/admin can use the system. The initial data about students and admin is stored in the Python list first and then dumped into a pickle file to be loaded later.
Built-in Python functions and libraries used:
- Copy: This library is used to deepcopy the “user” dictionary because after the assignment of values “user” dictionary will not remain empty. So, to keep the original dictionary unchanged a new copy of the same dictionary is leveraged to store the corresponding values of a new user.
- Pickle: It is used to dump or retrieve values to make the runtime values persistent even after the end of runtime.
- Random: This library is used to get random dummy values to store as grade for a student.
- PrettyTable: This is used to represent the dictionary values in tabular format.
Python Code
import copy
import pickle
import random
from prettytable import PrettyTable
# Student Task 3: Add pickle code to read and write users
# Emtpy template for a student.
user = {'User Name': '', 'Password': '', 'Name': '', 'Student': True}
courses = {'FC308': {'Ass 1': {'Grade': -1, 'weighting': 0.1},
'Ass 2': {'Grade': -1, 'weighting': 0.4},
'Exam': {'Grade': -1, 'weighting': 0.5}},
'FC315': {'Ass 1': {'Grade': -1, 'weighting': 0.4},
'Ass 2': {'Grade': -1, 'weighting': 0.6}},
'FC311': {'Ass 1': {'Grade': -1, 'weighting': 0.1},
'Ass 2': {'Grade': -1, 'weighting': 0.4},
'Exam': {'Grade': -1, 'weighting': 0.5}},
'EXTPRJ': {'Ass 1': {'Grade': -1, 'weighting': 0.4},
'Ass 2': {'Grade': -1, 'weighting': 0.6}},
'FC300': {'Ass 1': {'Grade': -1, 'weighting': 0.1},
'Ass 2': {'Grade': -1, 'weighting': 0.5},
'Presentation': {'Grade': -1, 'weighting': 0.4}}}
# Copy and paste additional users here from the console window
# OR generate them by hand from table above by copy, paste and modifying
# existing users.
users = [{'User Name': 'si2', 'Password': 'SC1000', 'Name': 'Simon Cambers', 'Student': False,
'Courses': {'FC308': {'Ass 1': {'Grade': 60, 'weighting': 0.1},
'Ass 2': {'Grade': 70, 'weighting': 0.4},
'Exam': {'Grade': 80, 'weighting': 0.5}},
'FC315': {'Ass 1': {'Grade': 59, 'weighting': 0.4},
'Ass 2': {'Grade': 89, 'weighting': 0.6}}}},
{'User Name': 'beanie123', 'Password': 'SG1000', 'Name': 'Steve Gadd', 'Student': True,
'Courses': {'FC300': {'Ass 1': {'Grade': 27, 'weighting': 0.1},
'Ass 2': {'Grade': 40, 'weighting': 0.5},
'Presentation': {'Grade': 23, 'weighting': 0.4}},
'FC311': {'Ass 1': {'Grade': 34, 'weighting': 0.1},
'Ass 2': {'Grade': 10, 'weighting': 0.4},
'Exam': {'Grade': 24, 'weighting': 0.5}},
'EXTPRJ': {'Ass 1': {'Grade': 34, 'weighting': 0.4},
'Ass 2': {'Grade': 25, 'weighting': 0.6}}}},
{'User Name': 'aisha123', 'Password': 'AK1000', 'Name': 'Aisha Kauser', 'Student': True,
'Courses': {'FC315': {'Ass 1': {'Grade': -1, 'weighting': 0.4},
'Ass 2': {'Grade': -1, 'weighting': 0.6}},
'FC300': {'Ass 1': {'Grade': -1, 'weighting': 0.1},
'Ass 2': {'Grade': -1, 'weighting': 0.5},
'Presentation': {'Grade': -1, 'weighting': 0.4}},
'FC311': {'Ass 1': {'Grade': -1, 'weighting': 0.1},
'Ass 2': {'Grade': -1, 'weighting': 0.4},
'Exam': {'Grade': -1, 'weighting': 0.5}}}},
{'User Name': 'hashim123', 'Password': 'HA1000', 'Name': 'Hashim Alsadiq', 'Student': True,
'Courses': {'FC308': {'Ass 1': {'Grade': -1, 'weighting': 0.1},
'Ass 2': {'Grade': -1, 'weighting': 0.4},
'Exam': {'Grade': -1, 'weighting': 0.5}},
'FC315': {'Ass 1': {'Grade': -1, 'weighting': 0.4},
'Ass 2': {'Grade': -1, 'weighting': 0.6}},
'EXTPRJ': {'Ass 1': {'Grade': -1, 'weighting': 0.4},
'Ass 2': {'Grade': -1, 'weighting': 0.6}}}},
{'User Name': 'nawaf123', 'Password': 'NA1000', 'Name': 'Nawaf Ali', 'Student': True,
'Courses': {'FC315': {'Ass 1': {'Grade': -1, 'weighting': 0.4},
'Ass 2': {'Grade': -1, 'weighting': 0.6}},
'FC300': {'Ass 1': {'Grade': -1, 'weighting': 0.1},
'Ass 2': {'Grade': -1, 'weighting': 0.5},
'Presentation': {'Grade': -1, 'weighting': 0.4}},
'FC311': {'Ass 1': {'Grade': -1, 'weighting': 0.1},
'Ass 2': {'Grade': -1, 'weighting': 0.4},
'Exam': {'Grade': -1, 'weighting': 0.5}}}},
{'User Name': 'Jane123', 'Password': 'JS1000', 'Name': 'Jane Smith', 'Student': True,
'Courses': {'FC300': {'Ass 1': {'Grade': -1, 'weighting': 0.1},
'Ass 2': {'Grade': -1, 'weighting': 0.5},
'Presentation': {'Grade': -1, 'weighting': 0.4}},
'FC308': {'Ass 1': {'Grade': -1, 'weighting': 0.1},
'Ass 2': {'Grade': -1, 'weighting': 0.4},
'Exam': {'Grade': -1, 'weighting': 0.5}},
'FC311': {'Ass 1': {'Grade': -1, 'weighting': 0.1},
'Ass 2': {'Grade': -1, 'weighting': 0.4},
'Exam': {'Grade': -1, 'weighting': 0.5}}}},
{'User Name': 'matbat', 'Password': 'mat182', 'Name': 'Mathew', 'Student': True,
'Courses': {'FC315': {'Ass 1': {'Grade': random.randint(0, 100), 'weighting': 0.4},
'Ass 2': {'Grade': random.randint(0, 100), 'weighting': 0.6}},
'FC300': {'Ass 1': {'Grade': random.randint(0, 100), 'weighting': 0.1},
'Ass 2': {'Grade': random.randint(0, 100), 'weighting': 0.5},
'Presentation': {'Grade': random.randint(0, 100), 'weighting': 0.4}},
'FC311': {'Ass 1': {'Grade': random.randint(0, 100), 'weighting': 0.1},
'Ass 2': {'Grade': random.randint(0, 100), 'weighting': 0.4},
'Exam': {'Grade': random.randint(0, 100), 'weighting': 0.5}}}},
{'User Name': 'miller', 'Password': 'millerkiller', 'Name': 'John Miller', 'Student': False,
'Courses': {'FC315': {'Ass 1': {'Grade': random.randint(0, 100), 'weighting': 0.4},
'Ass 2': {'Grade': random.randint(0, 100), 'weighting': 0.6}},
'FC308': {'Ass 1': {'Grade': random.randint(0, 100), 'weighting': 0.1},
'Ass 2': {'Grade': random.randint(0, 100), 'weighting': 0.5},
'Presentation': {'Grade': random.randint(0, 100), 'weighting': 0.4}}}},
{'User Name': 'Nicholas', 'Password': 'nico3402', 'Name': 'Tom Nicholas', 'Student': True,
'Courses': {'FC315': {'Ass 1': {'Grade': random.randint(0, 100), 'weighting': 0.4},
'Ass 2': {'Grade': random.randint(0, 100), 'weighting': 0.6}},
'FC300': {'Ass 1': {'Grade': random.randint(0, 100), 'weighting': 0.1},
'Ass 2': {'Grade': random.randint(0, 100), 'weighting': 0.5},
'Presentation': {'Grade': random.randint(0, 100), 'weighting': 0.4}},
'EXTPRJ': {'Ass 1': {'Grade': random.randint(0, 100), 'weighting': 0.1},
'Ass 2': {'Grade': random.randint(0, 100), 'weighting': 0.4},
'Exam': {'Grade': random.randint(0, 100), 'weighting': 0.5}}}},
{'User Name': 'aisha123', 'Password': 'AK1000', 'Name': 'Aisha Kauser', 'Student': True,
'Courses': {'FC315': {'Ass 1': {'Grade': random.randint(0, 100), 'weighting': 0.4},
'Ass 2': {'Grade': random.randint(0, 100), 'weighting': 0.6}},
'FC300': {'Ass 1': {'Grade': random.randint(0, 100), 'weighting': 0.1},
'Ass 2': {'Grade': random.randint(0, 100), 'weighting': 0.5},
'Presentation': {'Grade': random.randint(0, 100), 'weighting': 0.4}},
'FC311': {'Ass 1': {'Grade': random.randint(0, 100), 'weighting': 0.1},
'Ass 2': {'Grade': random.randint(0, 100), 'weighting': 0.4},
'Exam': {'Grade': random.randint(0, 100), 'weighting': 0.5}}}},
{'User Name': 'aisha123', 'Password': 'AK1000', 'Name': 'Aisha Kauser', 'Student': True,
'Courses': {'FC315': {'Ass 1': {'Grade': random.randint(0, 100), 'weighting': 0.4},
'Ass 2': {'Grade': random.randint(0, 100), 'weighting': 0.6}},
'FC300': {'Ass 1': {'Grade': random.randint(0, 100), 'weighting': 0.1},
'Ass 2': {'Grade': random.randint(0, 100), 'weighting': 0.5},
'Presentation': {'Grade': random.randint(0, 100), 'weighting': 0.4}},
'FC311': {'Ass 1': {'Grade': random.randint(0, 100), 'weighting': 0.1},
'Ass 2': {'Grade': random.randint(0, 100), 'weighting': 0.4},
'Exam': {'Grade': random.randint(0, 100), 'weighting': 0.5}}}},
{'User Name': 'aisha123', 'Password': 'AK1000', 'Name': 'Aisha Kauser', 'Student': True,
'Courses': {'FC315': {'Ass 1': {'Grade': random.randint(0, 100), 'weighting': 0.4},
'Ass 2': {'Grade': random.randint(0, 100), 'weighting': 0.6}},
'FC300': {'Ass 1': {'Grade': random.randint(0, 100), 'weighting': 0.1},
'Ass 2': {'Grade': random.randint(0, 100), 'weighting': 0.5},
'Presentation': {'Grade': random.randint(0, 100), 'weighting': 0.4}},
'FC311': {'Ass 1': {'Grade': random.randint(0, 100), 'weighting': 0.1},
'Ass 2': {'Grade': random.randint(0, 100), 'weighting': 0.4},
'Exam': {'Grade': random.randint(0, 100), 'weighting': 0.5}}}},
{'User Name': 'aisha123', 'Password': 'AK1000', 'Name': 'Aisha Kauser', 'Student': True,
'Courses': {'FC315': {'Ass 1': {'Grade': random.randint(0, 100), 'weighting': 0.4},
'Ass 2': {'Grade': random.randint(0, 100), 'weighting': 0.6}},
'FC300': {'Ass 1': {'Grade': random.randint(0, 100), 'weighting': 0.1},
'Ass 2': {'Grade': random.randint(0, 100), 'weighting': 0.5},
'Presentation': {'Grade': random.randint(0, 100), 'weighting': 0.4}},
'FC311': {'Ass 1': {'Grade': random.randint(0, 100), 'weighting': 0.1},
'Ass 2': {'Grade': random.randint(0, 100), 'weighting': 0.4},
'Exam': {'Grade': random.randint(0, 100), 'weighting': 0.5}}}},
{'User Name': 'aisha123', 'Password': 'AK1000', 'Name': 'Aisha Kauser', 'Student': True,
'Courses': {'FC315': {'Ass 1': {'Grade': random.randint(0, 100), 'weighting': 0.4},
'Ass 2': {'Grade': random.randint(0, 100), 'weighting': 0.6}},
'FC300': {'Ass 1': {'Grade': random.randint(0, 100), 'weighting': 0.1},
'Ass 2': {'Grade': random.randint(0, 100), 'weighting': 0.5},
'Presentation': {'Grade': random.randint(0, 100), 'weighting': 0.4}},
'FC311': {'Ass 1': {'Grade': random.randint(0, 100), 'weighting': 0.1},
'Ass 2': {'Grade': random.randint(0, 100), 'weighting': 0.4},
'Exam': {'Grade': random.randint(0, 100), 'weighting': 0.5}}}},
{'User Name': 'aisha123', 'Password': 'AK1000', 'Name': 'Aisha Kauser', 'Student': True,
'Courses': {'FC315': {'Ass 1': {'Grade': random.randint(0, 100), 'weighting': 0.4},
'Ass 2': {'Grade': random.randint(0, 100), 'weighting': 0.6}},
'FC300': {'Ass 1': {'Grade': random.randint(0, 100), 'weighting': 0.1},
'Ass 2': {'Grade': random.randint(0, 100), 'weighting': 0.5},
'Presentation': {'Grade': random.randint(0, 100), 'weighting': 0.4}},
'FC311': {'Ass 1': {'Grade': random.randint(0, 100), 'weighting': 0.1},
'Ass 2': {'Grade': random.randint(0, 100), 'weighting': 0.4},
'Exam': {'Grade': random.randint(0, 100), 'weighting': 0.5}}}},
{'User Name': 'aisha123', 'Password': 'AK1000', 'Name': 'Aisha Kauser', 'Student': True,
'Courses': {'FC315': {'Ass 1': {'Grade': random.randint(0, 100), 'weighting': 0.4},
'Ass 2': {'Grade': random.randint(0, 100), 'weighting': 0.6}},
'FC300': {'Ass 1': {'Grade': random.randint(0, 100), 'weighting': 0.1},
'Ass 2': {'Grade': random.randint(0, 100), 'weighting': 0.5},
'Presentation': {'Grade': random.randint(0, 100), 'weighting': 0.4}},
'FC311': {'Ass 1': {'Grade': random.randint(0, 100), 'weighting': 0.1},
'Ass 2': {'Grade': random.randint(0, 100), 'weighting': 0.4},
'Exam': {'Grade': random.randint(0, 100), 'weighting': 0.5}}}},
{'User Name': 'aisha123', 'Password': 'AK1000', 'Name': 'Aisha Kauser', 'Student': True,
'Courses': {'FC315': {'Ass 1': {'Grade': random.randint(0, 100), 'weighting': 0.4},
'Ass 2': {'Grade': random.randint(0, 100), 'weighting': 0.6}},
'FC300': {'Ass 1': {'Grade': random.randint(0, 100), 'weighting': 0.1},
'Ass 2': {'Grade': random.randint(0, 100), 'weighting': 0.5},
'Presentation': {'Grade': random.randint(0, 100), 'weighting': 0.4}},
'FC311': {'Ass 1': {'Grade': random.randint(0, 100), 'weighting': 0.1},
'Ass 2': {'Grade': random.randint(0, 100), 'weighting': 0.4},
'Exam': {'Grade': random.randint(0, 100), 'weighting': 0.5}}}},
{'User Name': 'aisha123', 'Password': 'AK1000', 'Name': 'Aisha Kauser', 'Student': True,
'Courses': {'FC315': {'Ass 1': {'Grade': random.randint(0, 100), 'weighting': 0.4},
'Ass 2': {'Grade': random.randint(0, 100), 'weighting': 0.6}},
'FC300': {'Ass 1': {'Grade': random.randint(0, 100), 'weighting': 0.1},
'Ass 2': {'Grade': random.randint(0, 100), 'weighting': 0.5},
'Presentation': {'Grade': random.randint(0, 100), 'weighting': 0.4}},
'FC311': {'Ass 1': {'Grade': random.randint(0, 100), 'weighting': 0.1},
'Ass 2': {'Grade': random.randint(0, 100), 'weighting': 0.4},
'Exam': {'Grade': random.randint(0, 100), 'weighting': 0.5}}}},
{'User Name': 'aisha123', 'Password': 'AK1000', 'Name': 'Aisha Kauser', 'Student': True,
'Courses': {'FC315': {'Ass 1': {'Grade': random.randint(0, 100), 'weighting': 0.4},
'Ass 2': {'Grade': random.randint(0, 100), 'weighting': 0.6}},
'FC300': {'Ass 1': {'Grade': random.randint(0, 100), 'weighting': 0.1},
'Ass 2': {'Grade': random.randint(0, 100), 'weighting': 0.5},
'Presentation': {'Grade': random.randint(0, 100), 'weighting': 0.4}},
'FC311': {'Ass 1': {'Grade': random.randint(0, 100), 'weighting': 0.1},
'Ass 2': {'Grade': random.randint(0, 100), 'weighting': 0.4},
'Exam': {'Grade': random.randint(0, 100), 'weighting': 0.5}}}},
{'User Name': 'aisha123', 'Password': 'AK1000', 'Name': 'Aisha Kauser', 'Student': True,
'Courses': {'FC315': {'Ass 1': {'Grade': random.randint(0, 100), 'weighting': 0.4},
'Ass 2': {'Grade': random.randint(0, 100), 'weighting': 0.6}},
'FC300': {'Ass 1': {'Grade': random.randint(0, 100), 'weighting': 0.1},
'Ass 2': {'Grade': random.randint(0, 100), 'weighting': 0.5},
'Presentation': {'Grade': random.randint(0, 100), 'weighting': 0.4}},
'FC311': {'Ass 1': {'Grade': random.randint(0, 100), 'weighting': 0.1},
'Ass 2': {'Grade': random.randint(0, 100), 'weighting': 0.4},
'Exam': {'Grade': random.randint(0, 100), 'weighting': 0.5}}}}
]
# store users data
f = open('studManSys.bin', 'wb')
pickle.dump(users, f)
f.close()
# read the users data
f = open('studManSys.bin', 'rb')
users = pickle.load(f)
f.close()
assert len(users) == 20, "Users not loaded successfully"
#Enter details of a user
def enterUser():
while True:
newCourse = {}
newUser = copy.deepcopy(user)
newUser['User Name'] = input('Enter user name: ')
newUser['Password'] = input('Enter password: ')
newUser['Name'] = input('Enter name: ')
if input('(S)tudent/(T)utor?: ') == 'T':
newUser['Student'] = False
while True:
course = input('Enter course title (Type \'end\' when finished): ')
if course.lower() != 'end':
newCourse[course] = (courses[course])
else:
break
print(newCourse) # debug
newUser['Courses'] = newCourse
users.append(newUser)
# print(users)
if input('Enter another user (y/n)? ') == 'n':
break
# Returns the record of the specified Student
def getUser(userName):
for i in range(len(users)):
if users[i]['User Name'] == userName:
return users[i], True
return {}, False
# See courses of the student
def seeCourses():
while True:
user = {}
userFound = False
print('See Courses')
userName = input('Enter student user name: ')
if userName == 'end':
break
user, userFound = getUser(userName)
if userFound:
courses = user['Courses']
print(courses)
else:
print('user not found')
# Add Grades to the student
def addGrades():
while True:
print('Add Grades')
userName = input('Enter student user name: ')
if userName == 'end':
break
user, userFound = getUser(userName)
if userFound:
for c in user['Courses']:
for a in user['Courses'][c]:
print(f'enter grade for {a} on {c}: ', end='')
g = int(input())
user['Courses'][c][a]['Grade'] = g
print(user['Courses'])
else:
print('user not found')
# show Student under specified module
def showStSpMod():
choice = int(input(
'Choose the module for which you want to see students:\n[1]: Ass 1\n[2]: Ass 2\n[3]: Exam\n[4]: Presentation\n'))
module = ""
if choice == 1:
module = "Ass 1"
elif choice == 2:
module = "Ass 2"
elif choice == 3:
module = "Exam"
elif choice == 4:
module = "Presentation"
print("Students in this chosen module: ")
for user in users:
for course in user['Courses']:
try:
if user['Courses'][course]['Exam'] and user['Student'] == True:
print(user['Name'])
except:
break
# show student having grades less than 40%
def stLtftPer():
for user in users:
if user["Student"]:
name = user["Name"]
courses = user["Courses"]
total_weighted_grade = 0
total_weighting = 0
for course, assessments in courses.items():
course_weighted_grade = 0
course_weighting = 0
for assessment, grade_weighting in assessments.items():
grade = grade_weighting["Grade"]
weighting = grade_weighting["weighting"]
if grade >= 0:
course_weighted_grade += grade * weighting
course_weighting += weighting
if course_weighting > 0:
course_average = course_weighted_grade / course_weighting
total_weighted_grade += course_average * course_weighting
total_weighting += course_weighting
if total_weighting > 0:
overall_average = total_weighted_grade / total_weighting
if overall_average < 40:
print(name)
# Show student not graded yet
def showStnotGraded():
for user in users:
if user["Student"]:
name = user["Name"]
courses = user["Courses"]
total_weighted_grade = 0
total_weighting = 0
for course, assessments in courses.items():
course_weighted_grade = 0
course_weighting = 0
for assessment, grade_weighting in assessments.items():
grade = grade_weighting["Grade"]
weighting = grade_weighting["weighting"]
course_weighted_grade += grade * weighting
course_weighting += weighting
if course_weighting > 0:
course_average = course_weighted_grade / course_weighting
total_weighted_grade += course_average * course_weighting
total_weighting += course_weighting
if total_weighting > 0:
overall_average = total_weighted_grade / total_weighting
if overall_average < 0:
print(name)
# Login a user
def login():
while True:
userFound = False
currentUser = {}
logName = input('Enter login name: ')
for i in range(len(users)):
if users[i]['User Name'] == logName:
currentUser = users[i]
userFound = True
if userFound:
logPass = input('Enter Login password: ')
break
else:
print('user not found')
return (currentUser)
# logout a user
def logout():
# save the latest database
f = open('studManSys.bin', 'wb')
pickle.dump(users, f)
f.close()
# print user in columnar format
def prettyprint(users):
table = PrettyTable()
table.field_names = ["User Name", "Name", "Student", "Courses"]
for user in users:
courses = user["Courses"]
courses_str = "\n".join([f"{course}: {values}" for course, values in courses.items()])
table.add_row([user["User Name"], user["Name"], user["Student"], courses_str])
print(table)
# Start of code here. User Logs in. After succesful login.
# if teacher then Displays menu and facilitates use of functions above
# else if student dispay grades for that student
while True:
curUser = login()
if curUser['Student']:
# Student Task 1: Display the grades for student logged in.
print('Display grades for the student that just logged in')
continue
else:
print()
while True:
print('---- Student Management System ----')
print('''
Press 1 to enter new student.
Press 2 to see a students courses.
Press 3 to show all users.
press 4 to add student grades.
press 5 to see Students on a specified module.
press 6 to see students under 40% grade average.
press 7 to show students not yet graded.
Press 8 to logout.
''')
choice = input()
if choice == '1':
enterUser()
elif choice == '2':
seeCourses()
elif choice == '3':
# Student Task 2: extract from 'users' the 'user name' and actual name
# and display neatly in columns
prettyprint(users)
elif choice == '4':
addGrades()
elif choice == '5':
showStSpMod()
elif choice == '6':
stLtftPer()
elif choice == '7':
showStnotGraded()
elif choice == '8':
logout()
break
else:
print('Invalid input \n')
Get the best Python assignment help and tutoring services from our experts now!
About The Author - Alex Carter
Alex Carter, a seasoned IT professional with a passion for imparting knowledge, presents insights in "Information Technology - FC308 - Free Assignment Solution." Backed by extensive experience, Alex is dedicated to facilitating understanding and mastery of Information Technology concepts. Through comprehensive guidance, Alex empowers students to navigate the complexities of FC308, fostering a deeper understanding of IT principles and practices.