学生选课系统
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('登录失败')
清风深知杨柳意,啤酒龙虾难相聚。

浙公网安备 33010602011771号