学生选课系统

  1 import os
  2 import sys
  3 import pickle
  4 
  5 student_info = 'student_info'
  6 course_info = 'course_info'
  7 userinfo = 'userinfo'
  8 
  9 
 10 class Base:
 11     def __str__(self):
 12         return self.name
 13 
 14 
 15 class Course(Base):
 16     def __init__(self, name, price, period, teacher):
 17         self.name = name
 18         self.price = price
 19         self.period = period
 20         self.teacher = teacher
 21 
 22     def __repr__(self):
 23         return ' '.join([self.name, self.price, self.period, self.teacher])
 24 
 25 
 26 class Person:
 27     @staticmethod
 28     def get_from_pickle(path):
 29         with open(path, 'rb')as f:
 30             while True:
 31                 try:
 32                     stu_obj = pickle.load(f)
 33                     yield stu_obj
 34                 except EOFError:
 35                     break
 36 
 37     def show_courses(self):
 38         for count, course in enumerate(self.get_from_pickle(course_info), 1):
 39             print(count, repr(course))
 40 
 41     def dump_obj(self, path, obj):
 42         with open(path, 'ab')as f:
 43             pickle.dump(obj, f)
 44 
 45 
 46 class Student(Person, Base):
 47     operate_lst = [('查看所有课程', 'show_courses'),
 48                    ('选择课程', 'select_course'),
 49                    ('查看已选课程', 'check_selected_course'),
 50                    ('退出', 'exit')]
 51 
 52     def __init__(self, name):
 53         self.name = name
 54         self.courses = []
 55 
 56     def __repr__(self):
 57         course_name = [course.name for course in self.courses]
 58         return '%s %s' % (self.name, '所选课程%s' % '|'.join(course_name))
 59 
 60     def select_course(self):
 61         self.show_courses()
 62         num = int(input('请输入要选择课程的序号:'))
 63         for count, course in enumerate(self.get_from_pickle(course_info), 1):
 64             if count == num:
 65                 self.courses.append(course)
 66                 print('您选择了%s课程' % course)
 67                 break
 68         else:
 69             print('没有您要找的课程')
 70 
 71     def check_selected_course(self):
 72         for course in self.courses:
 73             print(course.name, course.teacher)
 74 
 75     def exit(self):
 76         with open(student_info+'_bak', 'wb')as f2:
 77             for stu in self.get_from_pickle(student_info):
 78                 if stu.name == self.name:
 79                     pickle.dump(self, f2)
 80                 else:
 81                     pickle.dump(stu, f2)
 82         os.remove(student_info)
 83         os.rename(student_info+'_bak', student_info)
 84         exit()
 85 
 86     @classmethod
 87     def init(cls, name):
 88         for stu in cls.get_from_pickle(student_info):
 89             if stu.name == name:
 90                 return stu
 91         else:
 92             print('没有这个学生')
 93 
 94 
 95 class Manager(Person):
 96     operate_lst = [('创建课程', 'create_course'),
 97                    ('创建学生', 'create_student'),
 98                    ('查看所有课程', 'show_courses'),
 99                    ('查看所有学生', 'show_students'),
100                    ('查看所有学生的选课情况', 'show_student_course'),
101                    ('退出', 'exit')]
102 
103     def __init__(self,name):
104         self.name = name
105 
106     def create_course(self):
107         name = input('请输入课程名:')
108         price = input('请输入课程价格:')
109         period = input('请输入课程周期:')
110         teacher = input('请输入执教老师:')
111         course_obj = Course(name, price, period, teacher)
112         self.dump_obj(course_info, course_obj)
113         print('%s课程创建成功' % course_obj.name)
114 
115     def create_student(self):
116         stu_name = input('请输入学生名字:')
117         stu_pwd = input('请输入初始密码:')
118         stu_auth = '%s|%s|Student\n' % (stu_name, stu_pwd)
119         stu_obj = Student(stu_name)
120         with open(userinfo, 'a', encoding='utf-8')as f:
121             f.write(stu_auth)
122         self.dump_obj(student_info, stu_obj)
123         print('%s学生创建成功' % stu_obj.name)
124 
125     def show_students(self):
126         for count, stu in enumerate(self.get_from_pickle(student_info), 1):
127             print(count, stu)
128 
129     def show_student_course(self):
130         for stu in self.get_from_pickle(student_info):
131             print(repr(stu))
132 
133     def exit(self):
134         exit()
135 
136     @classmethod
137     def init(cls,name):
138         return cls(name)
139 
140 def login():
141     name = input('请输入用户名:')
142     pwd = input('请输入密码:')
143     with open(userinfo, encoding='utf-8')as f:
144         for line in f:
145             usr,pwd1, identify = line.strip().split('|')
146             if usr == name and pwd == pwd1:
147                 return {'result': True, 'name': name, 'id': identify}
148         else:
149             return {'result': False, 'name': name}
150 
151 
152 ret = login()
153 if ret['result']:
154     print('\033[1;45;33m登陆成功\033[0m')   #\033[1;x;xm  换颜色 \033[0m换回原来的
155     if hasattr(sys.modules[__name__], ret['id']):
156         cls = getattr(sys.modules[__name__], ret['id'])
157         obj = cls.init(ret['name'])
158         while True:
159             for id, item in enumerate(cls.operate_lst, 1):
160                 print(id, item[0])
161             func_str = cls.operate_lst[int(input('>>'))-1][1]
162             print(func_str)
163             if hasattr(obj, func_str):
164                 getattr(obj, func_str)()
165 else:
166     print('登录失败')

 

posted @ 2018-09-06 20:34  .why  阅读(506)  评论(0)    收藏  举报
Live2D