Python选课系统
总是感觉写的很繁琐,请看到的各位帮忙分析下。
需求:
1. 创建北京、上海 2 所学校
2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开
3. 课程包含,周期,价格,通过学校创建课程
4. 通过学校创建班级, 班级关联课程、讲师
5. 创建学员时,选择学校,关联班级
5. 创建讲师角色时要关联学校,
6. 提供两个角色接口
6.1 学员视图, 可以注册, 交学费, 选择班级,
6.2 讲师视图, 讲师可管理自己的班级, 上课时选择班级, 查看班级学员列表 , 修改所管理的学员的成绩
6.3 管理视图,创建讲师, 创建班级,创建课程
7. 上面的操作产生的数据都通过pickle序列化保存到文件里
分析:
1.找名词(类)
学校,课程,班级,讲师,学员
2.找动作(类的属性)
学校: 名称,校区,创建/显示课程/班级/讲师/学员
课程:名称,周期,学费
班级:名称
讲师:姓名,薪水
学员:姓名,年龄
3.组织关系
课程关联学校
班级关联课程
讲师关联班级
学员关联班级
1.模块设计

2.执行过程部分

3.代码
import os import sys sys.path.append(os.path.dirname(os.path.dirname(__file__))) import pickle from config import settings from lib.modules import School class Manage_center: def __init__(self): school_list = {} school_name1 = '北京' school_obj1 = School(school_name1) school_name2 = '上海' school_obj2 = School(school_name2) school_list.update({school_name1:school_obj1,school_name2:school_obj2}) pickle.dump(school_list,open(settings.SCHOOL_FILE,'wb')) self.school_location_view = '''\033[33;0m 1-北京 2-上海 \033[0m''' def run(self): print('欢迎进入SLITOBO开发学院') print(self.school_location_view) school_obj_dict = pickle.load(open(settings.SCHOOL_FILE, 'rb')) user_choice = input('请选择校区:') if user_choice == '1': school_obj = school_obj_dict['北京'] elif user_choice == '2': school_obj = school_obj_dict['上海'] print('\033[34;1m欢迎进入 <%s> <%s>校区\033[0m' % (school_obj.name, school_obj.location)) while True: menu_view = ('''\033[32;0m 1:学校视图 2:讲师视图 3:学员视图 4:退出 \033[0m''' ) print(menu_view) menu_dict = { '1': School_view, '2': Teacher_view, '3': Student_view, } user_choice = input("请选择登陆的视图序号:").strip() if user_choice == '4': break try: menu_dict[user_choice](school_obj).run() except KeyError as e : print('无效输入') class School_view: def __init__(self,school_obj): self.school_obj = school_obj self.school_menu_view = ( '''\033[32;0m 1:创建讲师 2:查看讲师 3:创建课程 4:查看课程 5:创建班级 6:查看班级 7:返回首页 \033[0m''') self.school_menu_dict = { '1':self.create_teacher, '2':self.show_teacher, '3':self.create_course, '4':self.show_course, '5':self.create_class, '6':self.show_class, } def run(self): while True: print('\033[34;1m欢迎进入 <%s> <%s>校区\033[0m' % (self.school_obj.name, self.school_obj.location)) print('--------------------------------------------------------') print(self.school_menu_view) user_choice = input("请选择操作的序号:").strip() if user_choice == '7': break try: self.school_menu_dict[user_choice]() except KeyError as e: print("\33[31;1m无效输入\33[0m") def create_teacher(self): teacher_name = input("请输入老师的名字:") teacher_salary = input("请输入老师的薪水:") class_name = input("请输入关联的班级:") if os.path.exists(settings.CLASSES_FILE): class_obj_dict = pickle.load(open(settings.CLASSES_FILE, 'rb')) else: class_obj_dict = self.school_obj.school_class if os.path.exists(settings.TEACHER_FILE): teacher_obj_dict = pickle.load(open(settings.TEACHER_FILE, 'rb')) else: teacher_obj_dict = self.school_obj.school_teacher if class_name in class_obj_dict: class_obj = class_obj_dict[class_name] if teacher_name not in teacher_obj_dict: self.school_obj.create_teacher(teacher_name, teacher_salary, class_name, class_obj) else: user_choice = input("\33[31;1m讲师已经存在,是否要更新(y/n)?\33[0m") if user_choice == 'y': self.school_obj.update_teacher(teacher_name, class_name, class_obj) print("\33[31;1m讲师已经存在,属性已更新\33[0m") else: print("\33[31;1m未更新\33[0m") else: print("\33[31;1m班级不存在,不能关联讲师\33[0m") def show_teacher(self): self.school_obj.show_teacher() def create_course(self): course_name = input('请创建课程:') if os.path.exists(settings.COURSE_FILE): course_obj_dict = pickle.load(open(settings.COURSE_FILE, 'rb')) if course_name not in course_obj_dict: course_cost = input('请输入课程费用:') course_cycle = input("请输入课程周期:") self.school_obj.create_course(course_name, course_cost, course_cycle) else: print("\33[31;1m课程已经存在\33[0m") else: course_cost = input('请输入课程费用:') course_cycle = input("请输入课程周期:") self.school_obj.create_course(course_name, course_cost, course_cycle) def show_course(self): self.school_obj.show_course() def create_class(self): class_name = input("请创建班级名称:") course_name = input("请输入班级的课程:") if os.path.exists(settings.COURSE_FILE): course_obj_dict = pickle.load(open(settings.COURSE_FILE, 'rb')) else: course_obj_dict = self.school_obj.school_course if os.path.exists(settings.CLASSES_FILE): class_obj_dict = pickle.load(open(settings.CLASSES_FILE, 'rb')) else: class_obj_dict = self.school_obj.school_class if class_name not in class_obj_dict: if course_name in course_obj_dict: course_obj = course_obj_dict[course_name] self.school_obj.create_class(class_name,course_obj) else: print("\33[31;1m没有这个课程\33[0m") else: print("\33[31;1m班级已经存在\33[0m") def show_class(self): self.school_obj.show_class() class Teacher_view: def __init__(self,school_obj): self.school_obj = school_obj self.school_menu_view = ( '''\033[32;0m 1:查看开班信息 2.查看班级学员列表 3.批改成绩 4:返回首页 \033[0m''') self.school_menu_dict = { '1': self.show_class, '2': self.show_class_student, '3': self.check_grades, } def run(self): while True: print('\033[34;1m欢迎进入 <%s> <%s>校区\033[0m' % (self.school_obj.name, self.school_obj.location)) print('--------------------------------------------------------') print(self.school_menu_view) user_choice = input("请选择操作的序号:").strip() if user_choice == '4': break try: self.school_menu_dict[user_choice]() except KeyError as e: print("\33[31;1m无效输入\33[0m") def show_class(self): teacher_name = input("请输入教师姓名:") teacher_obj_dict = pickle.load(open(settings.TEACHER_FILE,'rb')) teacher_obj = teacher_obj_dict[teacher_name] class_list = [] for i in teacher_obj.teacher_classes: if self.school_obj.location == teacher_obj.teacher_classes[i].class_course.school_obj.location: class_list.append(i) print(teacher_obj.teacher_name, teacher_obj.teacher_salary, class_list) def show_class_student(self): teacher_name = input('请输入老师名字:') self.school_obj.show_teacher_classinfo(teacher_name) def check_grades(self): pass class Student_view: def __init__(self,school_obj): self.school_obj = school_obj self.student_menu_view = ( '''\033[32;0m 1.查看班级 2:选择班级(缴费) 3.查看班级学员 4:返回首页 \033[0m''') self.student_menu_dict = { '1': self.show_class, '2': self.select_class, '3': self.show_stu_in_class } def run(self): while True: print('\033[34;1m欢迎进入 <%s> <%s>校区\033[0m' % (self.school_obj.name, self.school_obj.location)) print('--------------------------------------------------------') print(self.student_menu_view) user_choice = input("请选择操作的序号:").strip() if user_choice == '4' or user_choice == 'q': break try: self.student_menu_dict[user_choice]() except KeyError as e: print("\33[31;1m无效输入\33[0m") def show_class(self): self.school_obj.show_class() def select_class(self): stu_name = input("请输入学员姓名:") stu_age = input("请输入学员年龄") class_name= input("请输入要加入的班级:") self.school_obj.create_student(stu_name, stu_age, class_name) def show_stu_in_class(self): self.school_obj.show_stu_in_class() if __name__ == '__main__': obj = Manage_center() obj.run()
import os,sys sys.path.append(os.path.dirname(os.path.dirname(__file__))) import time import pickle from config import settings # class Admin: # ''' # login做判断 # register注册用户,存储admin_obj在文件中 # ''' # def __init__(self): # self.username = None # self.password = None # # def login(self,user,pwd): # if self.username == user and self.password == pwd: # return True # else: # return False # # def register(self,user,pwd): # self.username = user # self.password = pwd # # admin_file = os.path.join(settings.BASE_ADMIN_DIR,self.username) # pickle.dump(self,open(admin_file,'ab',0)) class School: name = 'SLITOBO开发学院' def __init__(self,location): self.location = location # self.create_admin = admin_obj self.create_time = time.strftime('%Y-%m-%d %H:%M:%S') self.school_course = {} self.school_class = {} self.school_teacher = {} #创建课程 def create_course(self,course_name,course_cost,course_cycle): # 如果文件中有课程,先导入 if os.path.exists(settings.COURSE_FILE): course_dict = pickle.load(open(settings.COURSE_FILE, 'rb')) self.school_course.update(course_dict) course_obj = Course(self,course_name,course_cost,course_cycle) self.school_course[course_name] = course_obj pickle.dump(self.school_course,open(settings.COURSE_FILE,'wb'),0) def show_course(self): try: course_dict = pickle.load(open(settings.COURSE_FILE,'rb')) except FileNotFoundError: print("还没有课程") else: for key in course_dict: course_obj = course_dict[key] if self.location == course_obj.school_obj.location: print(course_obj.school_obj.location,course_obj.course_name,course_obj.course_cost,course_obj.course_cycle) #创建班级 def create_class(self,class_name,course_obj): if os.path.exists(settings.CLASSES_FILE): class_obj_dict = pickle.load(open(settings.CLASSES_FILE,'rb')) self.school_class.update(class_obj_dict) class_obj = Classes(class_name,course_obj) self.school_class[class_name] = class_obj pickle.dump(self.school_class,open(settings.CLASSES_FILE,'wb')) def show_class(self): try: class_obj_dict = pickle.load(open(settings.CLASSES_FILE, 'rb')) except FileNotFoundError: print("还没有班级") else: for key in class_obj_dict: class_obj = class_obj_dict[key] if self.location == class_obj.class_course.school_obj.location: print(class_obj.class_name, class_obj.class_course.course_name) #创建老师 def create_teacher(self,teacher_name,teacher_salay,class_name,class_obj): if os.path.exists(settings.TEACHER_FILE): teacher_obj_dict = pickle.load(open(settings.TEACHER_FILE,'rb')) self.school_teacher.update(teacher_obj_dict) teacher_obj = Teacher(teacher_name,teacher_salay) self.school_teacher[teacher_name] = teacher_obj teacher_obj.teacher_add_classes(class_name,class_obj) pickle.dump(self.school_teacher, open(settings.TEACHER_FILE, 'wb')) # 更新老师信息 def update_teacher(self,teacher_name,class_name,class_obj): teacher_obj_dict = pickle.load(open(settings.TEACHER_FILE, 'rb')) self.school_teacher.update(teacher_obj_dict) teacher_obj = self.school_teacher[teacher_name] teacher_obj.teacher_add_classes(class_name,class_obj) pickle.dump(self.school_teacher, open(settings.TEACHER_FILE, 'wb')) # 显示老师信息 def show_teacher(self): try: teacher_obj_dict = pickle.load(open(settings.TEACHER_FILE, 'rb')) except FileNotFoundError: print("还没有讲师") else: for key in teacher_obj_dict: teacher_obj = teacher_obj_dict[key] class_list = [] for i in teacher_obj.teacher_classes: if self.location == teacher_obj.teacher_classes[i].class_course.school_obj.location: class_list.append(i) print(teacher_obj.teacher_name, teacher_obj.teacher_salary, class_list) # 创建学生,添加到班级中 def create_student(self,stu_name,stu_age,class_name): stu_obj = Student(stu_name, stu_age) class_obj_dict = pickle.load(open(settings.CLASSES_FILE,'rb')) self.school_class.update(class_obj_dict) class_obj = class_obj_dict[class_name] class_obj.class_student[stu_name] = stu_obj self.school_class[class_name] = class_obj pickle.dump(self.school_class, open(settings.CLASSES_FILE, 'wb')) def show_stu_in_class(self): class_obj_dict = pickle.load(open(settings.CLASSES_FILE, 'rb')) for key in class_obj_dict: class_obj = class_obj_dict[key] class_list = [] for i in class_obj.class_student: if self.location == class_obj.class_course.school_obj.location: class_list.append(i) print(class_obj.class_name,class_list) def show_teacher_classinfo(self,teacher_name): # teacher_obj_dict拿到的是学生未创建的老的班级信息 teacher_obj_dict = pickle.load(open(settings.TEACHER_FILE, 'rb')) teacher_obj = teacher_obj_dict[teacher_name] class_obj_dict = pickle.load(open(settings.CLASSES_FILE, 'rb')) for key in class_obj_dict: class_obj = class_obj_dict[key] student_list = [] for num in class_obj.class_student: if self.location == class_obj.class_course.school_obj.location: student_list.append(num) print(teacher_obj.teacher_name, class_obj.class_name, class_obj.class_course.course_name, student_list) class Course: def __init__(self, school_obj,course_name, course_cost, course_cycle): self.course_name = course_name self.course_cost = course_cost self.course_cycle = course_cycle self.school_obj = school_obj class Teacher: def __init__(self,teacher_name,teacher_salary): self.teacher_salary = teacher_salary self.teacher_name = teacher_name self.teacher_classes = {} def teacher_add_classes(self,class_name,class_obj): self.teacher_classes[class_name] = class_obj class Classes: def __init__(self,class_name,course_obj): self.class_name = class_name self.class_course = course_obj self.class_student = {} class Student: def __init__(self,stu_name,stu_age): self.stu_name = stu_name self.stu_age = stu_age self.stu_class = {}
import os # 程序基本目录 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__ ))) # admin 目录 BASE_ADMIN_DIR = os.path.join(BASE_DIR,'db','admin') # school 目录 BASE_SCHOOL_DIR = os.path.join(BASE_DIR,'db','school') SCHOOL_FILE = os.path.join(BASE_SCHOOL_DIR,'school_list') # classes目录 BASE_CLASSES_DIR = os.path.join(BASE_DIR,'db','classes') CLASSES_FILE = os.path.join(BASE_CLASSES_DIR,'classes_list') #学员目录 BASE_STD_DIR = os.path.join(BASE_DIR,'db','students') # 讲师目录 BASE_TEAH_DIR = os.path.join(BASE_DIR,'db','teacher') TEACHER_FILE = os.path.join(BASE_TEAH_DIR,'teacher_list') # 课程目录 BASE_COURSE_DIR = os.path.join(BASE_DIR,'db','course') COURSE_FILE = os.path.join(BASE_COURSE_DIR,'course_list')

浙公网安备 33010602011771号