def giveAssignmenttoStudent(self): ids = self.readStudentID() if not self._studentController.checkID(ids): raise myException("There is no student having this id! \n") ida = self.readAssignmentID() if not self._assignmentController.checkID(ida): raise myException("There is no assignment having this id! \n") self._gradeController.giveAssigmenttoStudent(ids, ida)
def giveAssignmenttoGroup(self): group = self.readStudentGroup() if not self._studentController.checkGroup(group): raise myException("This group does not exist! \n") ida = self.readAssignmentID() if not self._assignmentController.checkID(ida): raise myException("There is no assignment having this id! \n") self._gradeController.giveAssigmenttoGroup(group, ida)
def s3(self): #l = list(filter(lambda x: self.getAverage(x.getID()) != -1 , self._studentList.getAll())) l = my_filter(self._studentList.getAll(), self.f3) if len(l) == 0: raise myException("No student was graded! \n") my_sort(l, self.cmp3) return l
def s1(self,ida): #l = list(filter(lambda x: x.getAssignmentID() == ida and x.getGrade() != -1 , self._gradeList.getAll())) l = my_filter(self._gradeList.getAll(), self.f1, ida) if(len(l)) == 0: raise myException("There is no student graded at this assignment! \n") my_sort(l, self.cmp1) return l
def s4(self): #l = list(filter(lambda x: self.getAverage(x.getID()) != -1 , self._assignmentList.getAll())) l = my_filter(self._assignmentList.getAll(), self.f4) if len(l) == 0: raise myException("There are no graded assignments! \n") my_sort(l, self.cmp4) return l
def updateStudent(self): id = self.readStudentID() if not self._studentController.checkID(id): raise myException("There is no student havin this id! \n") print("Enter the new data: \n") idn = self.readStudentID() name = self.readStudentName() group = self.readStudentGroup() self._studentController.updateStudent(id, idn, name, group)
def updateAssignment(self): id = self.readAssignmentID() if not self._assignmentController.checkID(id): raise myException("There is no assignment having this id! \n") print("Enter the new data: \n") idn = self.readAssignmentID() desc = self.readAssignmentDescription() deadline = self.readAssignmentDeadline() self._assignmentController.updateAssignment(id, idn, desc, deadline)
def addAssignment(self,id,desc,deadline): va = Validator(id,desc,deadline) va.assignmentValidator() if self.checkID(id): raise myException("This id is used by another assignment! \n") undo = FunctionCall(self.removeAssignment,id) redo = FunctionCall(self.addAssignment,id, desc, deadline) oper = Operation(undo,redo) self._undoController.addOperation(oper) self._assignmentList.addObject(Assignment(id,desc,deadline))
def addStudent(self,id,name,group): vs = Validator(id,name,group) vs.studentValidator() if self.checkID(id): raise myException("This id is used by another student! \n") undo = FunctionCall(self.removeStudent,id) redo = FunctionCall(self.addStudent,id, name, group) oper = Operation(undo,redo) self._undoController.addOperation(oper) self._studentList.addObject(Student(id,name,group))
def s1(self): ida = self.readAssignmentID() if not self._assignmentController.checkID(ida): raise myException("There is no assignment having this id! \n") newList = self._gradeController.s1(ida) for p in newList: i = self._studentController.getIndex(p.getStudentID()) print( str(p.getGrade()) + " " + str(self._studentController.getList().getObject(i)))
def s2(self): cd = self.readCurrentDeadline() if type(cd) != int or cd < 1: raise myException( "The current date must be an integer greater than 1!") newList = self._assignmentController.s2(cd) for p in newList: i = self._studentController.getIndex(p.getStudentID()) print( str(p.getAssignmentID()) + " " + str(self._studentController.getList().getObject(i)))
def redo(self): #print (self._index) #if self._index>= len(self._operations) or self._index == -1: #return False if self._index == len(self._operations) - 1: raise myException("No more redos!") #if you only have one operations and the lenght is 1 than the lenght is self._index += 1 self._duringUndo = True self._operations[self._index].redo() self._duringUndo = False
def giveGrade(self,ids,ida,grade): vg = Validator(grade) vg.gradeValidator() for i in range(len(self._gradeList)): if self._gradeList.getObject(i).getStudentID() == ids and self._gradeList.getObject(i).getAssignmentID() == ida: if self._gradeList.getObject(i).getGrade() == -1: undo = FunctionCall(self.giveGradeUndo, ids, ida) redo = FunctionCall(self.giveGrade,ids, ida, grade) oper = Operation(undo,redo) self._undoController.addOperation(oper) self._gradeList.getObject(i).setGrade(grade) else: raise myException("This student has already been graded for this assignment! \n")
def assignmentValidator(self): s = "" if type(self._c1) != int or self._c1 < 1: s += "The assignment's id must be a positive integer! \n" k = True for letter in self._c2: if not letter.isalpha() and not letter.isspace(): k = False if not k: s += "The assignment's description must contain only letters! \n" if type(self._c3) != int or self._c3 < 1: s += "The assignment's deadline must be a positive integer corresponding to a week! \n" if len(s) != 0: raise myException(s) return None
def removeAssignment(self,id): if not self.checkID(id): raise myException("There is no assignment having this id! \n") index = self.getIndex(id) undo = FunctionCall(self.addAssignment,id,self._assignmentList.getObject(index).getDescription(),self._assignmentList.getObject(index).getDeadline()) redo = FunctionCall(self.removeAssignment,id) oper = Operation(undo,redo) self._undoController.addOperation(oper) self._assignmentList.removeObject(index) i = 0 while i < len(self._gradeList): if self._gradeList.getObject(i).getAssignmentID() == id: self._gradeList.removeObject(i) i -= 1 i += 1
def studentValidator(self): s = "" if type(self._c1) != int or self._c1 < 1: s += "The student's id must be a positive integer! \n" k = True for letter in self._c2: if not letter.isalpha() and not letter.isspace(): k = False if not k: s += "The student's name must contain only letters! \n" if type(self._c3) != int or self._c3 < 1: s += "The student's group must be a positive integer! \n" if len(s) != 0: raise myException(s) return None
def updateStudent(self,oldID,id,name,group): vs = Validator(id,name,group) vs.studentValidator() if self.checkID(id) and id != oldID: raise myException("There already is a student having this id! \n") index = self.getIndex(oldID) undo = FunctionCall(self.updateStudent,id ,oldID, self._studentList.getObject(index).getName(),self._studentList.getObject(index).getGroup()) redo = FunctionCall(self.updateStudent,oldID, id, name, group) oper = Operation(undo,redo) self._undoController.addOperation(oper) self._studentList.getObject(index).setID(id) self._studentList.getObject(index).setName(name) self._studentList.getObject(index).setGroup(group) for i in range(len(self._gradeList)): if self._gradeList.getObject(i).getStudentID() == oldID: self._gradeList.getObject(i).setStudentID(id)
def updateAssignment(self,oldID,id,desc,deadline): va = Validator(id, desc, deadline) va.assignmentValidator() if self.checkID(id) and id != oldID: raise myException("There already is an assignment having this id! \n") index = self.getIndex(oldID) undo = FunctionCall(self.updateAssignment , id,oldID, self._assignmentList.getObject(index).getDescription(), self._assignmentList.getObject(index).getDeadline()) redo = FunctionCall(self.updateAssignment,oldID, id, desc, deadline) oper = Operation(undo,redo) self._undoController.addOperation(oper) self._assignmentList.getObject(index).setID(id) self._assignmentList.getObject(index).setDescription(desc) self._assignmentList.getObject(index).setDeadline(deadline) for i in range(len(self._gradeList)): if self._gradeList.getObject(i).getAssignmentID() == oldID: self._gradeList.getObject(i).setAssignmentID(id)
def undo(self): ''' first it checks the index when we want to undo, we take the operation at index 0 then we decrease the index ''' self._duringUndo = True #print(self._duringUndo) #print(self._index) if self._index == -1: raise myException("No more undos!") #return False #no more undos self._operations[self._index].undo() self._duringUndo = False #print(self._duringUndo) self._index = self._index - 1 #print(self._index) return True
def s2(self,cd): #l = list(filter(lambda x: x.getDeadline()< cd, self._assignmentList.getAll())) l = my_filter(self._assignmentList.getAll(), self.f21, cd) #l1 = list(filter(lambda x: x.getGrade() == -1,self._gradeList.getAll())) l1 = my_filter(self._gradeList.getAll(), self.f22) if len(l) == 0 or len(l1) == 0: raise myException("There are no late students in handing their assignments! \n") i = 0 while i<len(l1): k = False j = 0 while j < len(l): if l1[i].getAssignmentID() == l[j].getID(): k = True j += 1 if not k: l1.pop(i) i -= 1 i += 1 return l1
def gradeValidator(self): if type(self._c1) != float or self._c1 < 1 or self._c1 > 10: raise myException( "The grade must be a positive value between 1 and 10! \n")
def removeStudent(self): id = self.readStudentID() if not self._studentController.checkID(id): raise myException("There is no student having this id! \n") self._studentController.removeStudent(id)