مشروع بلغة python , يتكون من عدة classes and functions
Project Description
Suppose student course information is stored in text files. Develop a menu driven complete program that can perform the following options:
1- Adding Students to the class
2- Removing students from the class
3- Modifying student information
4- Show all students
5- Show top 10 students
6- Show students with largest absences
7- Terminate a program
The student’s information is stored in a file. Each line represents a student record. The record has the following information. Note the Total Marks are computed automatically.
كود المشروع كاملا:
class Student :
def __init__(self,ID,Firstname,Familyname,absence,Exam1,Exam2) :
"""initializes the student; Add new Student"""
self._ID = ID
self._FirstName = Firstname
self._FamilyName = Familyname
self._absences = absence
self._Exam1= Exam1
self._Exam2= Exam2
self._TotalGrade= int(Exam1)+int(Exam2)
def getID(self):
return self._ID
def get_name(self):
""" returns the student name"""
return self._FirstName+' '+self._FamilyName
def get_absence(self):
return self._absences
def get_exam1(self):
"""get exam1 grade """
return self._Exam1
def get_exam2(self):
"""get exam2 grade """
return self._Exam2
def set_ID(self,ID):
self._ID=ID
def set_name(self,Name):
""" set the student name"""
self._FirstName ,self._FamilyName = Name.split()
def set_absence(self,absence):
self._absences=absence
def set_exam1(self,Exam1):
"""set exam1 grade """
self._Exam1 = Exam1
def set_exam2(self,Exam2):
"""get exam2 grade """
self._Exam2 = Exam2
def calculate_total(self):
"""get exam2 grade """
return self._Exam1+self._Exam2
def PrintStudent(self):
print(self._FirstName+', '+self._FamilyName+', '+self._absences+', '+self._Exam1+', '+self._Exam2+', '+str(self._TotalGrade)+'\n')
class Class :
def __init__(self):
"""Sets up a class to hold and update students"""
self.students = []
def addStudent(self,ID,Firstname,Familyname,absence,Exam1,Exam2):
student = Student(ID,Firstname,Familyname,absence,Exam1,Exam2)
self.students.append(student)
def delStudent(self,student):
self.students.remove(student)
def getStudentByID(self,ID):
for student in self.students:
if student._ID == ID:
return student
def getStudentByName(self,FirstName):
StudentsByName = []
for student in self.students:
if student._FirstName == FirstName:
StudentsByName.append(student)
return StudentsByName
def modifyStudentID(self,Student,newID):
Student.set_ID(newID)
return Student
def modifyStudentName(self,Student,newName):
Student.set_name(newName)
return Student
def modifyStudentAbsence(self,Student,newAbsence):
Student.set_absence(newAbsence)
return Student
def modifyStudentExam1(self,student,newExam1):
student.set_exam1(newExam1)
return student
def modifyStudentExam2(self,student,newExam2):
student.set_exam2(newID)
return student
def modifyStudent(self,student):
EditedStudent = Student(student._ID,student._Firstname,student._Familyname,student._absence,student._Exam1,student._Exam2)
delStudent(student)
addStudent(EditedStudent)
def ShowByID(self):
return sorted(self.students, key= lambda e:e._ID)
def ShowByName(self):
return sorted(self.students, key= lambda e:e._FirstName)
def ShowByAbsences(self):
return sorted(self.students, key= lambda e:e._absences, reverse=True)
def ShowByTotal(self):
return sorted(self.students, key= lambda e:e._TotalGrade, reverse=True)
def GetStudentAbsences(self):
AbsentStudent= self.students[0]
for student in self.students:
if(student._absences>AbsentStudent._absences):
AbsentStudent=student
return AbsentStudent
def read_data(filename):
c = Class()
with open(filename, "r") as ClassStudents:
for line in ClassStudents:
ID,Firstname,Familyname,absence,Exam1,Exam2,total = line.strip().split(',')
c.addStudent(ID,Firstname,Familyname,absence,Exam1,Exam2)
return c
def Save_Quit(Students,filename):
f = open(filename, "w")
for student in Students:
line=student._ID+','+student._FirstName+','+student._FamilyName+','+student._absences+','+student._Exam1+','+student._Exam2+','+str(student._TotalGrade)+'\n'
f.write(line)
print('Students data Saved!')
f.close()
def TestAttribute(Att,type):
if Att == '':
return 'You cannot skip this attribute!\n'
if type == 'int':
if not Att.isnumeric():
return 'Enter only numeric values Please!'
elif type == 'str':
if not Att.replace(" ", "").isalpha():
if "'" not in Att:
return 'Enter only Alphabetic values Please!'
def add_new_student(c):
ID = input('Enter Student ID:')
while TestAttribute(ID,'int'):
print(TestAttribute(ID, 'int'))
ID = input('Enter Student ID:')
firstname = input('Enter Student Firstname:')
while TestAttribute(firstname,'str'):
print(TestAttribute(firstname, 'str'))
firstname = input('Enter Student Firstname:')
familyname = input('Enter Student Familyname:')
while TestAttribute(familyname,'str'):
print(TestAttribute(familyname, 'str'))
familyname = input('Enter Student Familyname:')
Absences = input('Enter Student Absences days:')
while TestAttribute(Absences,'int'):
print(TestAttribute(Absences, 'int'))
Absences = input('Enter Student Absences days:')
Exam1 = input('Enter Student Exam1 grade:')
while TestAttribute(Exam1,'int'):
print(TestAttribute(Exam1, 'str'))
Exam1 = input('Enter Student Exam1 grade:')
Exam2 = input('Enter Student Exam2 grade:')
while TestAttribute(Exam2,'int'):
print(TestAttribute(Exam2, 'int'))
Exam2 = input('Enter Student Exam2 grade:')
c.addStudent(ID,firstname,familyname,Absences,Exam1,Exam2)
print('Student added !')
def main_menu(c,filename):
print('Main Menu'.center(20))
fn_no = input('''1- Adding Students to the class
2- Removing students from the class
3- Modifying student information
4- Show all students
5- Show top 10 students
6- Show students with largest absences
7- Terminate a program
''')
if int(fn_no) in range(1, 8):
if fn_no == '1':
add_new_student(c)
main_menu(c,filename)
elif fn_no=='2':
del_by = input('''a. By ID
b. By Student Name
''')
if del_by == 'a':
ID=input('Enter ID of the Student you wish to remove,')
student=c.getStudentByID(ID)
c.delStudent(student)
print("Student removed!")
main_menu(c,filename)
elif del_by == 'b':
Name=input('Enter FirstName of the Student you wish to remove,')
students=c.getStudentByName(Name)
if students:
print("Records found under name ("+Name+')\n')
else:
print("No student with this name found!")
main_menu(c,filename)
for idx,student in enumerate(students):
print(str(idx) +': ')
student.PrintStudent()
index=input('Please select which record to remove:')
c.delStudent(students[int(index)])
print("Student removed!")
main_menu(c,filename)
else:
print("input not recognised. please try again...")
main_menu(c,filename)
elif fn_no == '3':
ID = input('a. Retrieve information by ID:')
student=c.getStudentByID(ID)
print("Choose what to edit ")
select = input('''a. ID
b. NAME
c. Absences
d. Exam1
e. Exam2
''')
if select == 'a':
newID = input('Please enter the new ID:')
while TestAttribute(newID,'int'):
print(TestAttribute(newID, 'int'))
newID = input('Please enter the new ID:')
c.modifyStudentID(student,newID)
print("Student Edited!")
main_menu(c,filename)
elif select == 'b':
newname = input('Please enter the new Name:')
while TestAttribute(newname,'str'):
print(TestAttribute(newname, 'str'))
newname = input('Please enter the new Name:')
c.modifyStudentName(student,newname)
print("Student Edited!")
main_menu(c,filename)
elif select == 'c':
newAbesences = input('Please enter the new Absence days:')
while TestAttribute(newAbesences,'int'):
print(TestAttribute(newAbesences, 'int'))
newAbesences = input('Please enter the new Absence days:')
c.modifyStudentAbsence(student,newAbesences)
print("Student Edited!")
main_menu(c,filename)
elif select == 'd':
newExam1 = input('Please enter the new grade for Exam1:')
while TestAttribute(newExam1,'int'):
print(TestAttribute(newExam1, 'int'))
newExam1 = input('Please enter the new grade for Exam1:')
c.modifyStudentExam1(student,newExam1)
print("Student Edited!")
main_menu(c,filename)
elif select == 'e':
newExam2 = input('Please enter the new Grade for Exam2:')
while TestAttribute(newExam2,'int'):
print(TestAttribute(newExam2, 'int'))
newExam2 = input('Please enter the new Grade for Exam2:')
c.modifyStudentExam2(student,newExam2)
print("Student Edited!")
main_menu(c,filename)
else:
print("input not recognised. please try again...")
main_menu(c,filename)
elif fn_no == '4':
select = input('''a. Sort by ID
b. Sort by Name
c. Sort by Total Marks
d. Sort by Absences
''')
if select == 'a':
students=c.ShowByID()
for student in students:
print(student._ID+': ')
student.PrintStudent()
main_menu(c,filename)
elif select == 'b':
students=c.ShowByName()
for student in students:
print(student._ID+': ')
student.PrintStudent()
main_menu(c,filename)
elif select == 'c':
students=c.ShowByTotal()
for student in students:
print(student._ID+': ')
student.PrintStudent()
main_menu(c,filename)
elif select == 'd':
students=c.ShowByAbsences()
for student in students:
print(student._ID+': ')
student.PrintStudent()
main_menu(c,filename)
else:
print("input not recognised. please try again...")
main_menu(c,filename)
elif fn_no == '5':
students=c.ShowByTotal()
print("The top 10 Students: \n")
for student in students[:9]:
print(student._ID+': ')
student.PrintStudent()
main_menu(c,filename)
elif fn_no == '6':
print("The Student who has the largest number of absences in the class:\n")
student=c.GetStudentAbsences()
print(student._ID+': ')
student.PrintStudent()
main_menu(c,filename)
elif fn_no == '7':
Save_Quit(c.students,filename)
else:
print("input not recognised. please try again...")
main_menu(c,filename)
filename='students.txt'
c=read_data(filename)
main_menu(c,filename)