#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
class Students(object):
def __init__(self):
self.all = self.read()
def add(self, oid, surname, firstname, patronymic, age, sex, birthplace, residence):
'''
Добавление нового студента.
'''
student = {}
student["surname"] = surname
student["firstname"] = firstname
student["patronymic"] = patronymic
student["age"] = age
student["sex"] = sex
student["birthplace"] = birthplace
student["residence"] = residence
self.all[oid] = student
def get(self, oid):
'''
Получение информации о конкретном студенте по его идентификатору.
'''
print "[{}] {} {} {}\n\tВозраст: {}\n\tПол: {}\n\tМесто рождения: {}\n\tМесто жительства: {}\n\n".format(oid, self.all[oid]["surname"], self.all[oid]["firstname"], self.all[oid]["patronymic"], self.all[oid]["age"], self.all[oid]["sex"], self.all[oid]["birthplace"], self.all[oid]["residence"])
def getAll(self):
'''
Вывод информации по всем студентам.
'''
for oid, student in self.all.items():
print "[{}] {} {} {}\n\tВозраст: {}\n\tПол: {}\n\tМесто рождения: {}\n\tМесто жительства: {}\n\n".format(oid, student["surname"], student["firstname"], student["patronymic"], student["age"], student["sex"], student["birthplace"], student["residence"])
def read(self):
'''
Системный метод. Читает из файла информацию о студентах.
'''
studentfile = open("./students.csv").read()
studentsRaw = studentfile.split("\n")
allStudents = {}
for studentRaw in studentsRaw:
studentList = studentRaw.split(";")
if len(studentList) != 8:
continue
student = {}
oid, student["surname"], student["firstname"], student["patronymic"], student["age"], student["sex"], student["birthplace"], student["residence"] = studentList
allStudents[oid] = student
if len(allStudents):
return allStudents
else:
return {}
def remove(self, oid):
'''
Удаляет из списка студента по его идентификатору.
'''
self.all.pop(oid)
def save(self):
'''
Сохраняет все внесенные изменения в файл.
'''
studentfile = open("./students.csv", "w")
for oid, student in self.all.items():
studentfile.write(oid + ";" + ";".join([student["surname"], student["firstname"], student["patronymic"], student["age"], student["sex"], student["birthplace"], student["residence"]]) + "\n")
studentfile.close()
def saveObj(self, oid, filename):
'''
Сохраняет информацию о студенте по его идентификатору.
'''
savefile = open(filename, "w")
savefile.write("[{}] {} {} {}\n\tВозраст: {}\n\tПол: {}\n\tМесто рождения: {}\n\tМесто жительства: {}\n\n".format(oid, self.all[oid]["surname"], self.all[oid]["firstname"], self.all[oid]["patronymic"], self.all[oid]["age"], self.all[oid]["sex"], self.all[oid]["birthplace"], self.all[oid]["residence"]))
savefile.close()
def oldest(self):
'''
Возвращает возраст самого старшего студента.
'''
return max([data["age"] for oid, data in self.all.items()])
def main(argv):
help = """Список возможных команд:
add - Добавить нового студента.
Входные параметры: id, фамилия, имя, отчество, возраст, пол, место рожденея, местро жительства
remove - Удалить студента из списка.
Входные параметры: id
get - Вывести информацию о студенте.
Входные параметры: id
getAll - Вывести информацию о всех студентах.
oldest - Выводит возраст самого взрослого студента.
save - Сохранить все внесенные изменения.
saveObj - Сохранить информацию о студенте в файл.
Входные параметры: id, путь до файла\n
help - Вывод этого сообщения.
"""
print help
students = Students()
while True:
user_command = raw_input("\nВведите команду: ")
args = None
if user_command.count(" "):
user_command, args = user_command.split(" ")[0], user_command.lstrip(user_command.split(" ")[0] + " ").split(", ")
if user_command == "add":
if args[0] in students.all:
print "Такой id уже существует!"
continue
try:
students.add(*args)
print "Студент добавлен."
except Exception, e:
print "Ошибкка при добавлении студента. ({})".format(e)
elif user_command == "remove":
try:
students.remove(*args)
print "Студент удален."
except Exception, e:
print "Ошибкка при удалении студента. ({})".format(e)
elif user_command == "get":
try:
students.get(*args)
except Exception, e:
print "Ошибкка при выводе информации о студенте. ({})".format(e)
elif user_command == "getAll":
try:
students.getAll()
except Exception, e:
print "Ошибкка при выводе информации о студентах. ({})".format(e)
elif user_command == "oldest":
try:
print "Возраст самого взрослого студента: {}".format(students.oldest())
except Exception, e:
print "Ошибкка при выводе информации о возрасте самого взрослого студента. ({})".format(e)
elif user_command == "save":
try:
students.save()
print "Все изменения сохранены."
except Exception, e:
print "Ошибкка при сохранении изменений. ({})".format(e)
elif user_command == "saveObj":
try:
students.saveObj(*args)
print "Информация о студенте сохранена."
except Exception, e:
print "Ошибкка при сохранении информации о студенте в файл. ({})".format(e)
elif user_command == "help":
print help
else:
print user_command, args
print "Такой команды не существует!"
return 1
if __name__ == "__main__":
main(sys.argv)