〖Demo〗-- 选课系统

【选课系统】

1. 创建北京、上海 2 所学校
2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开
3. 课程包含,周期,价格,通过学校创建课程 
4. 通过学校创建班级, 班级关联课程、讲师
5. 创建学员时,选择学校,关联班级
5. 创建讲师角色时要关联学校, 
6. 提供两个角色接口
6.1 学员视图, 可以注册, 交学费, 选择班级,
6.2 讲师视图, 讲师可管理自己的班级, 上课时选择班级, 查看班级学员列表 , 修改所管理的学员的成绩 
6.3 管理视图,创建讲师, 创建班级,创建课程

7. 上面的操作产生的数据都通过pickle序列化保存到文件里

  1 import pickle
  2 
  3 class School(object):
  4     def __init__(self, addr):
  5         self.addr = addr
  6 
  7     def hire_teacher(self):
  8         '''
  9         保存老师信息
 10         :return:
 11         '''
 12         teacher_dict = pickle.load(open('teacher', 'rb'))
 13         T = 0
 14         while T>=0:
 15             name = input('请输入老师名')
 16             for key in teacher_dict:
 17                 if key == name:
 18                     print('此老师已存在,请重新输入')
 19                     T+=1
 20             T-=1
 21         age = input('请输入年龄')
 22         print('创建成功')
 23         teacher = Teacher(name, age, self.addr)
 24         teacher_dict[name] = teacher
 25         pickle.dump(teacher_dict, open('teacher', 'wb'))
 26 
 27     def create_course(self):
 28         '''
 29         保存课程信息
 30         :return:
 31         '''
 32         course_dict = pickle.load(open('course', 'rb'))
 33         name = input('请输入课程名')
 34         money = input('请输入课程价钱')
 35         cycle = input('请输入课程周期')
 36         course_dict[name] = Course(name, money, cycle)
 37         pickle.dump(course_dict, open('course', 'wb'))
 38 
 39     def create_class(self):
 40         '''
 41         创造班级,关联老师和课程
 42         :return:
 43         '''
 44         teacher_dict = pickle.load(open('teacher', 'rb'))
 45         course_dict = pickle.load(open('course', 'rb'))
 46         class_dict = pickle.load(open('class', 'rb'))
 47 
 48         name = input('请输入班级名:')
 49         for key in teacher_dict:
 50             print(key)
 51         teacher = input('请选择上课老师')
 52         for key in course_dict:
 53             print(key)
 54         course = input('请输入对应课程')
 55         if teacher in class_dict:
 56             class_dict [teacher].append(Classroom(name, course_dict[course], teacher_dict[teacher]))
 57         else:
 58             class_dict [teacher] = [Classroom(name, course_dict[course], teacher_dict[teacher])]
 59         print('创建成功')
 60         pickle.dump(class_dict, open('class', 'wb'))
 61 
 62 
 63 class Course (object):
 64     def __init__(self, course, money, cycle):
 65         self.course = course
 66         self.money = money
 67         self.cycle = cycle
 68 
 69     def show_course(self):
 70         print('课程名:%s; 价钱: %s; 上课周期:%s' % (self.course, self.money, self.cycle))
 71 
 72 class Classroom(object):
 73     def __init__(self, name, course, teacher):
 74         self.name = name
 75         self.course = course
 76         self.student = []
 77         self.teacher = teacher
 78 
 79     def show_classroom(self):
 80         self.teacher.show_teacher()
 81         print ('班级名: %s' %  self.name)
 82         self.course.show_course()
 83 
 84 
 85 class Student(object):
 86     def __init__(self, name):
 87         self.name = name
 88         self.account = 0
 89         self.sorce = 0
 90         self.course = []
 91 
 92 
 93 
 94 class Teacher(object):
 95     def __init__(self, name, age, addr):
 96         self.name = name
 97         self.age = age
 98         self.addr = addr
 99 
100     def show_teacher(self):
101         print('''老师姓名:%s \n老师年龄: %s\n老师所在学校:%s''' % (self.name, self.age,self.addr))
102 
103 
104 def set_student():
105     '''
106     学生登陆或注册,选课
107     :return:
108     '''
109     class_dict = pickle.load(open('class', 'rb'))
110     student_dict = pickle.load(open('student', 'rb'))
111     name = input('请输入学生姓名').capitalize()
112     obj = Student(name)
113     if name in student_dict:
114         print ('欢迎 %s' % name)
115     else:
116         print('注册成功')
117     while True:
118         for key in class_dict:
119             a = class_dict[key]
120             a[-1].show_classroom()
121             print('*' *30)
122         while True:
123             b = input('请选择课程对应的老师').capitalize()
124             if b in class_dict:
125                 c = class_dict[b][-1]
126                 break
127             else:
128                 print('没有该老师,请重新选择')
129         k = input('请确认付费,y = yes, 其他键 = 返回, q = 退出').lower()
130         if k == 'y':
131             while True:
132                 if obj.account >= int(c.course.money):
133                     obj.account -= int(c.course.money)
134                     print('扣费成功')
135                     obj.course.append(c)
136                     c.student.append(Student(name))
137                     y = input('请选择:1 继续选课, 其他键 = 退出')
138                     if y == '1':
139                         break
140                     else:
141                         obj.course.append(c)
142                         student_dict[name] = obj
143                         pickle.dump(class_dict, open('class', 'wb'))
144                         pickle.dump(student_dict, open('student', 'wb'))
145                         exit()
146                 else:
147                     charge = input('余额不足,y = 充值,q = 退出, 其他键返回').lower()
148                     if charge == 'y':
149                         mk = input('请输入充值金额')
150                         obj.account += int(mk)
151                     elif charge == 'q':
152                         exit()
153                     else:
154                         break
155         elif k == 'q':
156             exit()
157         else:
158             continue
159 
160 def check_student(name):
161     '''
162     老师上课,查看学生,或修改成绩
163     :param name:
164     :return:
165     '''
166 
167     class_dict = pickle.load(open('class', 'rb'))
168     a = class_dict[name]
169 
170     for k, i in enumerate(a,1):
171         print(k)
172         print('班级名:%s\n课程:%s'% (i.name, i.course.course))
173         print ("*" * 60)
174     c = input('请选择班级对应的数字')
175     while True:
176         if int(c)>0 and int(c)<=len(a):
177             e = input('请选择:1 上课; 2 查看班级成员,3 修改学员成绩,其他键 = 退出')
178             if e == '1':
179                 print ('开始上课...')
180             elif e == '2':
181                 d = a[int(c)-1].student
182                 for o in d:
183                     print ('学生姓名 %s' % o.name)
184             elif e == '3':
185                 d = a[int(c)-1].student
186                 for n, j in enumerate(d, 1):
187                     print ('%s. 学生姓名 %s, 分数 %s' % (n, j.name, j.sorce))
188                 f = input('请选择学生的对应数字')
189                 if int(f)>0 and int(f)<=len(d):
190                     sorce = input('修改的分数为')
191                     d[int(f)-1].sorce = sorce
192                     pickle.dump(class_dict,open('class', 'wb'))
193         else:
194             print ('输入有误')
195 
196 def manage():
197     '''
198     管理员菜单
199     :return:
200     '''
201     while True:
202         b = input('输入学校地址: 北京; 上海')
203         if b == '北京' or b =='上海':
204             obj = School(b)
205             break
206         else:
207             print('没有这地址')
208             continue
209     while True:
210         a = input('请选择: 1 创建老师, 2 创建课程, 3 创建班级, 4 返回')
211         if a == '1':
212             obj.hire_teacher()
213         elif a == '2':
214             obj.create_course()
215         elif a == '3':
216             obj.create_class()
217         elif a=='4':
218             break
219         else:
220             print ('输入有误')
221 
222 def main():
223     '''
224     主菜单
225     :return:
226     '''
227     while True:
228         a = input('请选择: 1 学生; 2 老师, 3 管理员, 其他键 退出')
229         if a == '1':
230             set_student()
231         elif a == '2':
232             name = input('请输入老师姓名').capitalize()
233             teacher_dict = pickle.load(open('teacher', 'rb'))
234             if name in teacher_dict:
235                 check_student(name)
236             else:
237                 print ('不是我们学校的老师,请重新输入')
238         elif a == '3':
239             manage()
240         else:
241             exit()
242 
243 
244 
245 main()

 

posted @ 2017-09-30 23:34  盛欣  阅读(588)  评论(0编辑  收藏  举报