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()
course_system.py

主程序:

#-*- 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()
main.py

说明:

角色:
学校、课程、讲师、学员

功能:
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
            交学费,功能未实现
            选课程,功能未完全实现,仅可查看课程信息
            选班级,功能未完全实现,仅可查看班级信息
README

 

posted on 2017-06-21 16:26  奔跑的蜗牛~~  阅读(286)  评论(0)    收藏  举报

导航