1 #!/usr/bin/env python3 2 #-*- coding:utf-8 -*- 3 ''' 4 Administrator 5 2018/8/14 6 ''' 7 import pickle,os,uuid 8 class School: 9 def __init__(self,name): 10 self.name=name 11 self.school_id=uuid.uuid1() 12 13 def save(self): 14 15 file_address=os.path.join(os.path.dirname(os.path.abspath(__file__)),"accounts","db_school","%s.txt"%self.school_id) 16 with open(file_address,"wb") as f: 17 pickle.dump(self,f) 18 @staticmethod 19 def get_all(): 20 obj_list=[] 21 address=os.path.join(os.path.dirname(os.path.abspath(__file__)),"accounts","db_school") 22 for item in os.listdir(address): #/home/tom/下找所有的文件 23 item=os.path.join(address,item) 24 with open(item,"rb") as f: 25 obj=pickle.load(f) 26 if type(obj) is School:#里面存的数据多。如果是学校类型,则筛选出来 27 obj_list.append(obj) 28 # obj_list.append(obj) 29 return obj_list 30 31 def __str__(self): 32 return "学校的名称是:%s"%self.name 33 34 35 class Classes: 36 def __init__(self,name): 37 self.name=name 38 self.nid=uuid.uuid1() 39 def save(self): 40 file_address=os.path.join(os.path.dirname(os.path.abspath(__file__)),"accounts","db_classes","%s.txt"%self.nid) 41 with open(file_address,"wb") as f: 42 pickle.dump(self,f) 43 @staticmethod 44 def get_all(): 45 obj_list = [] 46 address = os.path.join(os.path.dirname(os.path.abspath(__file__)), "accounts","db_classes") 47 for item in os.listdir(address): # /home/tom/下找所有的文件 48 item = os.path.join(address, item) 49 with open(item, "rb") as f: 50 obj = pickle.load(f) 51 if type(obj) is Classes: # 里面存的数据多。如果是学校类型,则筛选出来 52 obj_list.append(obj) 53 return obj_list 54 def __str__(self): 55 return "班级:%s"%self.name 56 57 58 class Student: 59 def __init__(self,name,classes_obj): 60 self.name=name 61 # 班级名称可能存在重复,我们需要唯一字段,所以这里改成班级对象。这是唯一的。 62 #如果保存班级,程序中,班级对象保存了两次。 63 self.classesObj=classes_obj 64 self.student_id=uuid.uuid1() 65 def save(self):#此处班级对象保存了两次。数据安全性 66 file_address = os.path.join(os.path.dirname(os.path.abspath(__file__)), "accounts","db_student","%s.txt" % self.student_id) 67 with open(file_address, "wb") as f: 68 pickle.dump(self, f) 69 70 @staticmethod 71 def get_all(): 72 obj_list = [] 73 address = os.path.join(os.path.dirname(os.path.abspath(__file__)), "accounts", "db_student") 74 for item in os.listdir(address): # /home/tom/下找所有的文件 75 item = os.path.join(address, item) 76 with open(item, "rb") as f: 77 obj = pickle.load(f) 78 if type(obj) is Student: # 里面存的数据多。如果是学校类型,则筛选出来 79 obj_list.append(obj) 80 return obj_list 81 82 def __str__(self): 83 return "姓名:%s, %s" % (self.name,self.classesObj.get_obj_by_nid()) 84 85 class Nid: 86 def __init__(self,class_nid): 87 self.nid=class_nid 88 def get_obj_by_nid(self): 89 address = os.path.join(os.path.dirname(os.path.abspath(__file__)), "accounts") 90 flag = True 91 for i in os.listdir(address): 92 file_address=os.path.join(address,i) 93 if flag: 94 for j in os.listdir(file_address): 95 file_name=os.path.splitext(j)[0] #拿到文件名,不带扩展名 96 if file_name==str(self.nid): 97 new_address=os.path.join(file_address,j) 98 with open(new_address,"rb") as f: 99 data=pickle.load(f) 100 return data 101 102 103 # s1=School("上海") 104 # s1.save() 105 # # # #/home/tom/1 106 # s2=School("北京") 107 # s2.save() 108 # #/home/tom/2 109 110 # School_obj_list=School.get_all() 111 # for obj in School_obj_list: 112 # #print("学校名称:%s"%obj.name) 113 # print(obj) 114 # c1=Classes("全栈1班") 115 # c1.save() 116 # c2=Classes("全栈2班") 117 # c2.save() 118 119 # Classes_obj_list=Classes.get_all() 120 # for i in Classes_obj_list: 121 # #print("学校名称:%s"%obj.name) 122 # print(i) 123 # 124 # School_obj_list=School.get_all() 125 # for obj in School_obj_list: 126 # #print("学校名称:%s"%obj.name) 127 # print(obj) 128 ##########创建学员############ 129 # classes_obj_list=Classes.get_all() 130 # print("chakan ",classes_obj_list) 131 # for i,j in enumerate(classes_obj_list,1): 132 # print(i,">>>>",j) 133 # # print(classes_obj_list[0]) 134 # 135 # sel=input("请输入班级索引号:") 136 # name=input("请输入学生姓名:") 137 # if sel.isdigit(): 138 # sel=int(sel) 139 # if sel>0 and sel<=len(classes_obj_list): 140 # class_obj=classes_obj_list[sel-1] 141 # student_obj=Student(name,Nid(class_obj.nid))#chuanjian 142 # print(student_obj) 143 # student_obj.save() 144 145 # Nid(class_obj.nid).get_obj_by_nid() 146 # obj.classesObj.get_obj_by_nid() 147 148 Student_obj_list=Student.get_all() 149 for obj in Student_obj_list: 150 #print("学校名称:%s"%obj.name) 151 print(obj) 152 # print(obj.classesObj.get_obj_by_nid())