Okay... Quick look (and guessing at purpose since I don't read
Maybe not quite what you want, and done in english (I couldn't
even find translations on Babelfish). A few extra functions, and never
enter a "," for the data <G> I ran out of time to implement a few other
functions, and I haven't tested out all the functions. (I'm afraid I got
a bit carried away)
I used an old style class declaration, and deprecated string
exceptions.
A short test did have the data save and load working.
-=-=-=-=-=-=-=-=-=-=-
students_by_name = {}
students_by_number = {}
class Student:
def __init__(self, Name, Number=None, Address=None):
self.name = Name
self.number = Number
self.address = Address
self.grade_list = []
if not self.name:
raise "Missing_Name"
else:
if students_by_name.has_key(self.name):
raise "Name_In_Use"
else:
students_by_name[self.name] = self
if self.number:
if students_by_number.has_key(self.number):
raise "Number_In_Use"
else:
students_by_number[self.number] = self
def display(self, grades = False):
print ""
print "Name: %s" % self.name
print "Number: %s" % self.number
print "Address: %s" % self.address
if grades:
print "Grades: ",
for grade in self.grade_list:
print grade,
print "\n"
def change_name(self, name):
if not name:
raise "Missing_Name"
else:
if students_by_name.has_key(name):
raise "Name_In_Use"
else:
del students_by_name[self.name]
self.name = name
students_by_name[self.name] = self
def change_number(self, number):
if students_by_number.has_key(number):
raise "Number_In_Use"
else:
if self.number:
del students_by_number[self.number]
self.number = number
if self.number:
students_by_number[self.number] = self
def change_address(self, address):
self.address = address
def delete(self):
print "Deleting:"
self.display()
ans = raw_input("Confirm deletion (y/N)> ")
if ans == "Y" or ans == "y":
del students_by_name[self.name]
if self.number:
del students_by_number[self.number]
del self
def List_by_Name():
print "\n***\tStudents, numbers, addresses\n"
names = students_by_name.keys()
names.sort()
for name in names:
students_by_name[name].display()
def List_by_Number():
print "\n***\tNumbers, students, addresses\n"
numbers = students_by_number.keys()
numbers.sort()
for number in numbers:
students_by_number[number].display()
def Find_by_Name(name):
try:
student_by_name[name].display()
except:
print "\n*** Name not in use: %s\n" % name
def Find_by_Number(number):
try:
student_by_number[number].display()
except:
print "\n*** Number not in use: %s\n" % number
def Delete_by_Name(name):
try:
student_by_name[name].delete()
except:
print "\n*** Name not in use: %s\n" % name
def Delete_by_Number(number):
try:
student_by_number[number].delete()
except:
print "\n*** Number not in use: %s\n" % number
def Load_Students(filename):
fin = open(filename, "r")
for ln in fin:
ln = ln[:-1]
ln_data = ln.split(",")
name = ln_data[0]
if ln_data[1] == "" or ln_data[1] == " ":
number = None
else:
number = ln_data[1]
if ln_data[2] == "" or ln_data[2] == " ":
address = None
else:
address = ln_data[2]
try:
student = Student(name, number, address)
for grade in ln_data[3:]:
student.grade_list.append(int(grade))
except "Missing_Name":
print "No name in record:"
print ln
print ""
except "Name_In_Use":
print "Duplicate name in record:"
print ln
print ""
except "Number_In_Use":
print "Duplicate number in record:"
print ln
print ""
fin.close()
def Save_Students(filename):
fout = open(filename, "w")
for student in students_by_name.values():
fout.write("%s" % student.name)
if student.number:
fout.write(",%s" % student.number)
else:
fout.write(",")
if student.address:
fout.write(",%s" % student.address)
else:
fout.write(",")
for grade in student.grade_list:
fout.write(",%s" % grade)
fout.write("\n")
fout.close()
if __name__ == "__main__":
while True:
print """
1. Display directory by name
2. Display directory by number*
3. Add a new student
4. Delete a student by name
5. Delete a student by number*
6. Find a student by name
7. Find a student by number*
8. Load student data file
9. Save student data file
10. Add grade to student by name*
11. Change student name by name*
12. Change student number by name*
13. Change student address by name*
14. Display student grades by name*
0. EXIT
"""
choice = int(raw_input("Enter a selection (1 - 14, 0)> "))
if choice == 1:
List_by_Name()
elif choice == 2:
List_by_Number()
elif choice == 3:
print "Adding a new student"
name = raw_input("Student name> ")
number = raw_input("Number> ")
address = raw_input("Address> ")
if number == "" or number == " ":
number = None
if address == "" or address == " ":
address = None
try:
student = Student(name, number, address)
except "Missing_Name":
print "No name supplied: %s" % name
print ""
except "Name_In_Use":
print "Duplicate name: %s" % name
students_by_name[name].display()
except "Number_In_Use":
print "Duplicate number: %s" % number
students_by_number[number].display()
elif choice == 4:
print "Deleting student by name"
name = raw_input("Student name> ")
try:
students_by_name[name].delete()
except:
print "No student found for %s" % name
print ""
elif choice == 5:
print "Deleting student by number"
number = raw_input("Number> ")
try:
students_by_number[number].delete()
except:
print "No student found for %s" % number
print ""
elif choice == 6:
print "Display student by name"
name = raw_input("Student name> ")
try:
students_by_name[name].display()
except:
print "No student found for %s" % name
print ""
elif choice == 7:
print "Display student by number"
number = raw_input("Number")
try:
students_by_number[number].display()
except:
print "No student found for %s" % number
print ""
elif choice == 8:
fid = raw_input("Enter the name of the student data file to
load> ")
Load_Students(fid)
elif choice == 9:
fid = raw_input("Enter the name of the student data file to
be saved> ")
Save_Students(fid)
elif choice == 10:
print "Adding a grade to student record"
name = raw_input("Student name> ")
try:
students_by_name[name].grade_list.append(
int(raw_input("Enter the grade to be added> ")))
except:
print "No student found for %s" % name
print ""
elif choice == 14:
print "Display student grades by name"
name = raw_input("Student name> ")
try:
students_by_name[name].display(True)
except:
print "No student found for %s" % name
print ""
elif choice == 0:
break
else:
print "Menu option %s has not been implemented yet"
--