python编程 基础入门练习题六——选课系统
本节内容
设计一个“选课系统”
角色:学校、课程、讲师、学员
要求:
1. 创建北京、上海 2 所学校
2. 创建linux , python , go 3个课程 : linux\py 在北京开, go 在上海开
3. (通过学校)创建课程,课程包含课程名,周期,价格
4. (通过学校)创建班级, 班级关联课程、讲师
5. 创建学员时,选择学校,关联班级
5. 创建讲师角色时,关联学校
6. 提供三个接口
1) 管理视图:创建学校,创建讲师, 创建班级,创建课程
2 )讲师视图:讲师可管理自己的班级, 上课时选择班级, 查看班级学员列表, 修改所管理学员的成绩
3) 学员视图:注册, 交学费, 选择课程,选择班级
7. 上面的操作产生的数据都通过pickle序列化保存到文件里
简单流程图:

代码:
入口程序:
#-*- coding:utf-8 -*- #Author:'Yang' import os import sys #当前模块目录 BASE_DIR=os.path.abspath(__file__) #主程序目录 core_dir=os.path.dirname(os.path.dirname(BASE_DIR)) #添加环境变量 sys.path.append(core_dir) from core import main if __name__=="__main__": main.smc()
主程序:
#-*- coding:utf-8 -*- #Author:'Yang' import sys import os import pickle #数据库文件路径 db_DIR = os.path.dirname(os.getcwd()) + r"\db" # db_school = db_DIR + r"\school" # db_teacher = db_DIR + r"\teacher" # db_student = db_DIR + r"\student" # db_classes = db_DIR + r"\classes" # db_course = db_DIR + r"\course" # db_admin = db_DIR + r"\admin" # db_class_record = db_DIR + r"\class_record" # db_class_grade = db_DIR + r"\class_grade" #创建基类 #文件的读取写入操作 class BaseClass(object): def __init__(self): pass def read_db(self,db_name): all_data=[] db_file=os.path.join(db_DIR,db_name) with open(db_file,"rb") as f: while True: try: pkf=pickle.load(f) all_data.append(pkf) except EOFError as e: #print(e.args[0]) break for i in all_data: print(i) def write_db(self,db_name,dict): db_file=os.path.join(db_DIR,db_name) with open(db_file,"ab") as f: pickle.dump(dict,f) #派生类:学校类 class School(object): '''校名、地址''' def __init__(self,school_name,school_address): self.school_name=school_name self.school_address=school_address def school_info(self): print("校名:%s,地址:%s。" %(self.school_name,self.school_address)) #派生类:课程类 class Course(BaseClass): def __init__(self,course_name,course_period,course_prices): BaseClass.__init__(self) self.course_name=course_name self.course_period=course_period self.course_prices=course_prices #派生类:讲师类 class Teacher(BaseClass): def __init__(self,teacher_name,teacher_salary,teacher_school): BaseClass.__init__(self) self.teacher_name=teacher_name self.teacher_salary=teacher_salary self.teacher_school=teacher_school #选课程 def choose_classes(self): print("\033[34;1m正在查看班级信息\033[0m") read_class=BaseClass() read_class.read_db("classes") #管理班级 def manage_classes(self): print("管理班级") #查看学员 def check_students(self): print("\033[34;1m正在查看学员信息\033[0m") read_stu=BaseClass() read_stu.read_db("students") #修改成绩 def change_records(self): print("修改成绩") #派生类:学员类 class Student(BaseClass): def __init__(self,student_name,student_sex,student_age): BaseClass.__init__(self) self.student_name=student_name self.student_sex=student_sex self.student_age=student_age #注册 def student_enroll(self): student_dict={} student_name=input("学生姓名:") student_sex=input("学生性别:") student_age=input("学生年龄:") s=Student(student_name,student_sex,student_age) student_dict["学生姓名"]=s.student_name student_dict["学生性别"]=s.student_sex student_dict["学生年龄"]=s.student_age BaseClass.write_db(self,"students",student_dict) print("\033[34;1m注册完成!\033[0m") #交学费 def pay(self): print("交学费") #选班级 def choose_classes(self): print("\033[34;1m正在查看班级信息\033[0m") read_class=BaseClass() read_class.read_db("classes") #选课程 def choose_course(self): print("\033[34;1m正在查看课程信息\033[0m") read_course=BaseClass() read_course.read_db("courses") #派生类:班级类 class Classes(BaseClass): def __init__(self,class_course,class_teacher): BaseClass.__init__(self) self.class_course=class_course self.class_teacher=class_teacher def class_info(self): print("班级信息:课程-%s,老师-%s" %(self.class_course,self.class_teacher)) #派生类:管理员类 —— 方法已完善 class Admin(BaseClass): def __init__(self): BaseClass.__init__(self) #继承了基类的构造函数 #创建学校 def create_school(self): school_dict={} school_name=input("校名:") school_address=input("地址:") sch=School(school_name,school_address) school_dict["校名"]=sch.school_name school_dict["地址"]=sch.school_address BaseClass.write_db(self,"schools",school_dict) #创建讲师 def create_teacher(self): teacher_dict={} teacher_name=input("教师姓名:") teacher_salary=input("薪水:") teacher_school=input("学校:") t=Teacher(teacher_name,teacher_salary,teacher_school) teacher_dict["教师姓名"]=t.teacher_name teacher_dict["薪水"]=t.teacher_salary teacher_dict["学校"]=t.teacher_school BaseClass.write_db(self,"teachers",teacher_dict) #创建班级 def create_classes(self): classes_dict={} class_course=input("课程:") class_teacher=input("讲师:") cla=Classes(class_course,class_teacher) classes_dict["课程"]=cla.class_course classes_dict["讲师"]=cla.class_teacher BaseClass.write_db(self,"classes",classes_dict) #创建课程 def create_course(self): course_dict={} course_name=input("课程名:") course_period=input("周期:") course_prices=input("价格:") c=Course(course_name,course_period,course_prices) course_dict["课程名"]=c.course_name course_dict["周期"]=c.course_period course_dict["价格"]=c.course_prices BaseClass.write_db(self,"courses",course_dict) #管理视图 def admin_view(obj): while True: print("\033[32;1m管理视图\033[0m".center(100,"#")) admin_choice=input("1.创建学校\n2.创建讲师\n3.创建班级\n4.创建课程\nb返回主界面\n>>") if admin_choice=="1": obj.create_school() elif admin_choice=="2": obj.create_teacher() elif admin_choice=="3": obj.create_classes() elif admin_choice=="4": obj.create_course() elif admin_choice=="b": break #讲师视图 def teacher_view(obj): while True: print("\033[32;1m讲师视图\033[0m".center(100,"#")) teacher_choice=input("1.选班级\n2.管理班级\n3.查看学员\n4.修改成绩\nb返回主界面\n>>") if teacher_choice=="1": obj.choose_classes() elif teacher_choice=="2": obj.manage_classes() elif teacher_choice=="3": obj.check_students() elif teacher_choice=="4": obj.change_records() elif teacher_choice=="b": break #学员视图 def student_view(obj): while True: print("\033[32;1m学员视图\033[0m".center(100,"#")) student_choice=input("1.注册\n2.交学费\n3.选班级\n4.选课程\nb返回主界面\n>>") if student_choice=="1": obj.student_enroll() elif student_choice=="2": obj.pay() elif student_choice=="3": obj.choose_classes() elif student_choice=="4": obj.choose_course() elif student_choice=="b": break #系统管理中心(system management center) def smc(): while True: print("\033[31;1m欢迎进入选课系统V1.0\033[0m".center(100,"#")) choice=input("1.管理员\n2.讲师\n3.学员\nq退出\n>>") if choice=="1": admin_obj=Admin() admin_view(admin_obj) elif choice=="2": teacher_obj=Teacher("游客","未知","未知") #未注册登录前,在讲师视图页面,默认为游客状态 teacher_view(teacher_obj) elif choice=="3": student_obj=Student("游客","未知",0) #未注册登录前,在学员视图页面,默认为游客状态 student_view(student_obj) elif choice=="q": print("\033[32;1m感谢您的使用!\033[0m".center(100,"#")) sys.exit() # smc()
说明:
角色: 学校、课程、讲师、学员 功能: 1. 创建北京、上海 2 所学校 2. 创建linux , python , go 3个课程 : linux\py 在北京开, go 在上海开 3. (通过学校)创建课程,课程包含课程名,周期,价格 4. (通过学校)创建班级, 班级关联课程、讲师(****未实现关联****) 5. 创建学员时,选择学校,关联班级(****未实现关联****) 5. 创建讲师角色时,关联学校 (****未实现关联****) 6. 提供三个接口 1) 管理视图:创建学校,创建讲师, 创建班级,创建课程 2 )讲师视图:讲师可管理自己的班级, 上课时选择班级, 查看班级学员列表, 修改所管理学员的成绩 3) 学员视图:注册, 交学费, 选择课程,选择班级 7. 上面的操作产生的数据都通过pickle序列化保存到文件里 注意事项: 1.理论上,学员未注册,不能进行交费,未交费不能进行班级、课程选择,这里相互依赖关系并未进行关联; 2.理论上,选择讲师、学员时,应该需要先登录后再操作,这里未进行登录验证; 3.管理视图:创建学校,存入db/schools 创建班级,存入db/classes 创建课程,存入db/courses 创建讲师,存入db/teachers 4.讲师视图:管理自己的班级,功能未实现 上课时选择班级,功能未完全实现,仅可查看班级信息 查看班级学员列表,功能未完全实现,现在查看的是整个学校学员信息 修改所管理学员的成绩,功能未实现 5.学员视图:注册,存入db/students 交学费,功能未实现 选课程,功能未完全实现,仅可查看课程信息 选班级,功能未完全实现,仅可查看班级信息
~
浙公网安备 33010602011771号