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())