python3 简单选课系统

bin:

#启动
import os,sys
BaseDir = os.path.dirname(os.path.dirname(os.path.abspath(sys.argv[0])))
sys.path.append(BaseDir)
from core.main import home

if __name__ == "__main__":
home.show_home()
---------------------

python3 简单选课系统

bin:

  1.  
    #启动
  2.  
    import os,sys
  3.  
    BaseDir = os.path.dirname(os.path.dirname(os.path.abspath(sys.argv[0])))
  4.  
    sys.path.append(BaseDir)
  5.  
    from core.main import home
  6.  
     
  7.  
    if __name__ == "__main__":
  8.  
    home.show_home()

config:

  1.  
    #settings
  2.  
     
  3.  
    import os,sys
  4.  
     
  5.  
    BaseDir = os.path.dirname(os.path.dirname(os.path.abspath(sys.argv[0])))
  6.  
    sys.path.append(BaseDir)
  7.  
    school_db = os.path.join(BaseDir,'data',"school") #创建数据保存文件路径

module:

  1.  
    #班级类
  2.  
    class classes:
  3.  
     
  4.  
    def __init__(self,id,course):
  5.  
    self.id = id
  6.  
    self.course = course
  7.  
    self.course_student = {} #该门课程学生字典{学生名:学生实例}
  1.  
    #课程
  2.  
    class course:
  3.  
     
  4.  
    def __init__(self,name,period,price):
  5.  
    self.name = name
  6.  
    self.period = period
  7.  
    self.price = price
  1.  
    #学生类
  2.  
    class student:
  3.  
     
  4.  
    def __init__(self,name,age):
  5.  
    self.name = name
  6.  
    self.age = age
  1.  
    #老师类
  2.  
    class teacher:
  3.  
     
  4.  
    def __init__(self,name,salary):
  5.  
    self.name = name
  6.  
    self.salary = salary
  7.  
    self.classes = {} #一个老师可以对应多个班级
  8.  
     
  9.  
    def teacher_add_classes(self,classes_id,classes):
  10.  
    self.classes[classes_id] = classes #{班id:班级实例}
  1.  
    #学校类
  2.  
    from config import settings
  3.  
    from module.classes import classes
  4.  
    from module.teacher import teacher
  5.  
    from module.student import student
  6.  
    from module.course import course
  7.  
     
  8.  
    class school:
  9.  
     
  10.  
    def __init__(self,name,addr):
  11.  
    self.name = name
  12.  
    self.addr = addr
  13.  
    self.course = {} #{课程名:课程实例}
  14.  
    self.teacher = {} #{老师名:老师实例}
  15.  
    self.classes = {} #{班级名:班级实例}
  16.  
     
  17.  
    def create_classes(self,classes_id,course_obj):
  18.  
    classes_obj = classes(classes_id,course_obj) #班级的实例
  19.  
    self.classes[classes_id] = classes_obj #将班级实例放入班级的字典
  20.  
     
  21.  
    def show_classes(self): #显示班级关联课程
  22.  
    for key in self.classes:
  23.  
    classes_obj = self.classes[key]
  24.  
    print("班级:%s,关联课程:%s"%(classes_obj.id,classes_obj.course.name))
  25.  
     
  26.  
     
  27.  
    def show_classes_course(self): #显示班级课程信息
  28.  
    for key in self.classes:
  29.  
    classes_obj = self.classes[key]
  30.  
    course_obj = classes_obj.course
  31.  
    print("班级【%s】当前课程信息:\n课程:%s,课程周期:%s,课程价格:%s"%(classes_obj.id,course_obj.name,course_obj.period, course_obj.price))
  32.  
     
  33.  
    def create_course(self,name,period,price): #创建课程
  34.  
    course_obj = course(name,period,price)
  35.  
    self.course[name] = course_obj
  36.  
     
  37.  
    def show_course(self): #显示课程信息
  38.  
    for key in self.course:
  39.  
    course_obj = self.course[key]
  40.  
    print("课程:%s,课程周期:%s,课程价格:%s"%(course_obj.name,course_obj.period,course_obj.price))
  41.  
     
  42.  
    def create_teacher(self,teacher_name,teacher_salary,classes_id): #创建老师
  43.  
    teacher_obj = teacher(teacher_name,teacher_salary)
  44.  
    classes_obj = self.classes[classes_id]
  45.  
    teacher_obj.teacher_add_classes(classes_id,classes_obj) #将课程关联到老师
  46.  
    self.teacher[teacher_name] = teacher_obj
  47.  
     
  48.  
    def update_teacher(self,teacher_name,classes_id): #更新老师的课程信息
  49.  
    teacher_obj = self.teacher[teacher_name]
  50.  
    class_obj = self.classes[classes_id]
  51.  
    teacher_obj.teacher_add_classes(classes_id,class_obj)
  52.  
     
  53.  
    def show_teacher(self):
  54.  
    for key in self.teacher:
  55.  
    teacher_obj = self.teacher[key]
  56.  
    class_list = []
  57.  
    for key2 in teacher_obj.classes:
  58.  
    class_list.append(key2)
  59.  
    print("姓名:%s,薪资:%s,授课班级:%s" % (teacher_obj.name, teacher_obj.salary,class_list))
  60.  
     
  61.  
    def create_student(self,name,age,classes_id):
  62.  
    student_obj = student(name,age)
  63.  
    class_obj = self.classes[classes_id]
  64.  
    class_obj.course_student[name] = student_obj #将学生对象以名字为键添加到classes下面的学生信息字典中
  65.  
    self.classes[classes_id] = class_obj #将新的数据更新只self.classes中
  66.  
     
  67.  
    def show_teacher_classesinfo(self,teacher_name):
  68.  
    #该老师对应的实例
  69.  
    teacher_obj = self.teacher[teacher_name]
  70.  
    #获取老师授课班级的实例
  71.  
    for key in teacher_obj.classes:
  72.  
    class_obj = teacher_obj.classes[key]
  73.  
    student_list= []
  74.  
    for key2 in class_obj.course_student: #遍历学员信息
  75.  
    student_list.append(key2)
  76.  
    print("班级:%s,关联课程%s,学员:%s"%(class_obj.id,class_obj.course.name,student_list))

core:

  1.  
    #main
  2.  
    import shelve,os,sys,time
  3.  
    from config import settings
  4.  
    from module.school import school
  5.  
     
  6.  
    #启动Home
  7.  
    class home:
  8.  
     
  9.  
    #显示登录页面项目
  10.  
    @classmethod
  11.  
    def show_home(cls):
  12.  
    home = {
  13.  
    '1':manage_student,
  14.  
    '2':manage_teacher,
  15.  
    '3':manage_school,
  16.  
    'q':exit
  17.  
    }
  18.  
    while True:
  19.  
    print("\n\033[1m\033[36m社会大学选课系统\n\033[0m"
  20.  
    "\033[4m1.学生视图\n\033[0m"
  21.  
    "\033[4m2.老师视图\n\033[0m"
  22.  
    "\033[4m3.管理员视图\n\033[0m"
  23.  
    "\033[4mq.退出系统\n\033[0m")
  24.  
    inp = input("\033[34;0m输入访问页面id >>:\033[0m").strip()
  25.  
    if inp in home:
  26.  
    obj = home[inp]
  27.  
    obj() #执行功能
  28.  
    else:
  29.  
    print("\033[31m输入有误!请重新输入\033[0m")
  30.  
    continue
  31.  
     
  32.  
    #管理员创建学校,创建课程,创建老师,创建班级,创建学员,及查询信息信息功能
  33.  
    class manage_school:
  34.  
     
  35.  
    def __init__(self):
  36.  
    if os.path.exists(settings.school_db+".dat"):
  37.  
    self.school_db = shelve.open(settings.school_db)
  38.  
    self.run_manage()
  39.  
    self.school_db.close()
  40.  
    else:
  41.  
    print("初始化系统信息....")
  42.  
    self.initialize_school()
  43.  
    self.run_manage()
  44.  
    self.school_db.close()
  45.  
     
  46.  
    def initialize_school(self): #预设创建两所学校
  47.  
    self.school_db = shelve.open(settings.school_db)
  48.  
    sh = school("上海","上海市")
  49.  
    bj = school("北京","北京市")
  50.  
    self.school_db["北京"] = bj
  51.  
    self.school_db["上海"] = sh
  52.  
    # self.school_db.close() 初始化后不需要关闭,run_manage()运行操作
  53.  
     
  54.  
    def run_manage(self):
  55.  
     
  56.  
    while True:
  57.  
    # 显示已有学校
  58.  
    schs = []
  59.  
    for key in self.school_db:
  60.  
    print("名称:%s 坐标:%s" % (key, self.school_db[key].addr))
  61.  
    schs.append(key)
  62.  
    print("\033[32m添加学校,输入#\033[5m")
  63.  
    sch = input("\033[34;0m输入需要管理的学校名称,b.返回上一层>>:\033[0m").strip()
  64.  
    if sch == "#":
  65.  
    self.add_school()
  66.  
    elif sch in schs:
  67.  
    self.sch = sch #学校名称
  68.  
    self.sch_obj = self.school_db[sch] #获取学校实例 {'name': '北京', 'addr': '北京市', 'course': {}, 'teacher': {}, 'classes': {}}
  69.  
    # print(self.sch_obj.__dict__)
  70.  
    #管理员管理操作执行,字典操作
  71.  
    while True:
  72.  
    print("\033[32m\n社会大学%s校区管理后台\n\033[4m"
  73.  
    "\033[4m1.添加课程 \n\033[0m"
  74.  
    "\033[4m2.添加班级 \n\033[0m"
  75.  
    "\033[4m3.添加老师 \n\033[0m"
  76.  
    "\033[4m4.查看课程 \n\033[0m"
  77.  
    "\033[4m5.查看班级 \n\033[0m"
  78.  
    "\033[4m6.查看老师 \n\033[0m"
  79.  
    "\033[4mb.返回上一层\n\033[0m"
  80.  
    "\033[4mq.退出程序 \n\033[0m"%self.sch_obj.name
  81.  
    )
  82.  
     
  83.  
    operation_items = {
  84.  
    "1":self.add_course,
  85.  
    "2":self.add_classes,
  86.  
    "3":self.add_teacher,
  87.  
    "4":self.check_course,
  88.  
    "5":self.check_classes,
  89.  
    "6":self.check_teacher,
  90.  
    "q":exit
  91.  
    }
  92.  
    oper_id = input("\033[34;0m输入操作项序号:>>\033[0m").strip()
  93.  
    if oper_id in operation_items:
  94.  
    func = operation_items[oper_id]
  95.  
    func()
  96.  
    elif oper_id =="b":
  97.  
    break
  98.  
    else:
  99.  
    print("\033[31m输入有误,请重新输入!\033[0m")
  100.  
    elif sch == "b":
  101.  
    break
  102.  
    else:
  103.  
    print("\033[31m学校名称错误,请重新输入!\033[4m")
  104.  
     
  105.  
    def add_school(self):
  106.  
    sch_name = input("输入学校名称:>>").strip()
  107.  
    sch_addr = input("输入学校坐标:>>").strip()
  108.  
    if sch_name not in self.school_db:
  109.  
    self.school_db[sch_name] = school(sch_name,sch_addr)
  110.  
    print("\033[36m【%s】校区创建成功!\n\033[0m"%sch_name)
  111.  
    else:
  112.  
    print("\033[31m【%s】学校已经存在!\n\033[4m"%sch_name)
  113.  
     
  114.  
     
  115.  
    def add_course(self):
  116.  
    course_name = input("输入课程名称:>>").strip()
  117.  
    course_period = input("输入该课程的周期(月):>>").strip()
  118.  
    course_price = input ("输入该课程的价格(元):>>").strip()
  119.  
    self.sch_obj.create_course(course_name,course_period,course_price)
  120.  
    self.school_db[self.sch]=self.sch_obj
  121.  
    print("\033[36m【%s】课程创建成功!\n\033[0m" % course_name)
  122.  
     
  123.  
    def add_classes(self):
  124.  
    sch_course = self.sch_obj.course
  125.  
    classes_id = input("输入班级名称:>>").strip()
  126.  
    course_name = input("输入课程名字:>>").strip()
  127.  
    if sch_course:
  128.  
    if course_name in sch_course:
  129.  
    course_obj = sch_course[course_name]
  130.  
    self.sch_obj.create_classes(classes_id, course_obj)
  131.  
    self.school_db[self.sch] = self.sch_obj
  132.  
    print("\033[36m【%s】班级创建成功!\n\033[0m" % classes_id)
  133.  
    else:
  134.  
    print("\033[31m该课程不存在,请创建该课程\033[4m")
  135.  
    def add_teacher(self):
  136.  
    teacher_name = input("输入老师名字:>>").strip()
  137.  
    teacher_salary = input("薪水(元):>>").strip()
  138.  
    classes_id= input("输入授课班级名称:").strip()
  139.  
    if teacher_name not in self.sch_obj.teacher:
  140.  
    if classes_id in self.sch_obj.classes:
  141.  
    self.sch_obj.create_teacher(teacher_name,teacher_salary,classes_id)
  142.  
    self.school_db[self.sch] = self.sch_obj
  143.  
    print("\033[36m【%s】老师新增成功!\n\033[0m" % teacher_name)
  144.  
    else:
  145.  
    print("\033[31m输入班级不存在!\033[0m")
  146.  
    else:
  147.  
    print("\033[31m该老师已经存!\033[0m")
  148.  
    def check_course(self):
  149.  
    if not self.sch_obj.course:
  150.  
    print("\033[31m当前无课程!\033[0m")
  151.  
    else:
  152.  
    print("\033[42m所有课程信息:\033[0m")
  153.  
    for key in self.sch_obj.course:
  154.  
    course_obj = self.sch_obj.course[key]
  155.  
    print("课程:%s, 周期: %s月, 价格: %s元 "%(course_obj.name,course_obj.period,course_obj.price))
  156.  
     
  157.  
    def check_teacher(self):
  158.  
    if not self.sch_obj.teacher:
  159.  
    print("\033[31m当前无讲师!请添加!\033[0m")
  160.  
    else:
  161.  
    print("\033[42m所有老师信息:\033[0m")
  162.  
    for key in self.sch_obj.teacher:
  163.  
    teacher_obj = self.sch_obj.teacher[key]
  164.  
    teacher_classes_list = []
  165.  
    for key2 in teacher_obj.classes:
  166.  
    d={}
  167.  
    classes_obj = teacher_obj.classes[key2]
  168.  
    course_name = classes_obj.course.name
  169.  
    d[key2] =course_name
  170.  
    teacher_classes_list.append(d)
  171.  
    print("姓名:%s, 薪水:%s块/月,授课班级及对应课程: %s"%(teacher_obj.name,teacher_obj.salary,teacher_classes_list))
  172.  
     
  173.  
    #当前班级信息
  174.  
    def check_classes(self):
  175.  
    if not self.sch_obj.classes:
  176.  
    print("\033[31m当前无班级,请创建班级!\033[4m")
  177.  
    else:
  178.  
    print("\033[42m所有班级信息:\033[0m")
  179.  
    for key in self.sch_obj.classes:
  180.  
    classes_obj = self.sch_obj.classes[key]
  181.  
    for key2 in self.sch_obj.teacher:
  182.  
    teacher_obj = self.sch_obj.teacher[key2]
  183.  
    for key3 in teacher_obj.classes:
  184.  
    if classes_obj.id == teacher_obj.classes[key3].id:
  185.  
    print("班级:%s,关联课程:%s,周期:%s月,价格:%s,授课老师:%s"%(classes_obj.id,classes_obj.course.name,classes_obj.course.period,classes_obj.course.price,teacher_obj.name))
  186.  
    break
  187.  
    else:
  188.  
    continue
  189.  
     
  190.  
     
  191.  
    #学员视图,学员选择班级,学院缴费,学院注册
  192.  
    class manage_student:
  193.  
    def __init__(self):
  194.  
    if os.path.exists(settings.school_db+".dat"):
  195.  
    self.school_db = shelve.open(settings.school_db)
  196.  
    self.run_manage_student()
  197.  
    self.school_db.close()
  198.  
    else:
  199.  
    print("\033[31m系统管理员还未创建相应的学校,课程,老师,请联系系统管理员!\033[0m")
  200.  
     
  201.  
    #学员注册,选课一起进行
  202.  
    def regist_student(self):
  203.  
     
  204.  
    print("\n\033[34m当前校区开设课程:\33[0m")
  205.  
    for key in self.sch_obj.classes:
  206.  
    classes_obj = self.sch_obj.classes[key]
  207.  
    course_obj = classes_obj.course
  208.  
    print("班级:%s,课程:%s,周期:%s,价格:%s" % (key, course_obj.name, course_obj.period, course_obj.price))
  209.  
    student_name = input ("姓名:>>").strip()
  210.  
    student_age = input("年龄:>>").strip()
  211.  
    classes_id = input("选择需要培训的课程对应的班级:>>").strip()
  212.  
    if classes_id in self.sch_obj.classes:
  213.  
    classes_obj = self.sch_obj.classes[classes_id]
  214.  
    self.sch_obj.create_student(student_name,student_age,classes_obj.id)
  215.  
    self.school_db[self.sch] = self.sch_obj
  216.  
    # 提示注册成功后显示课程信息
  217.  
    print("恭喜%s学员注册成功!\n课程信息:%s,周期:%s,价格:%s" % (student_name,classes_obj.course.name,classes_obj.course.period,classes_obj.course.price))
  218.  
    else:
  219.  
    print("\033[31m班级输入错误!\033[0m")
  220.  
     
  221.  
    #查看学员信息
  222.  
    def check_student(self):
  223.  
    student_name = input("\033[34;0m输入要查看的学员名字:\033[0m>>").strip()
  224.  
    print("该学员信息:")
  225.  
    for key in self.sch_obj.classes:
  226.  
    classes_obj = self.sch_obj.classes[key]
  227.  
    if student_name in classes_obj.course_student:
  228.  
    for key2 in classes_obj.course_student:
  229.  
    if key2 == student_name:
  230.  
    classes_id = classes_obj.id
  231.  
    coures_name = classes_obj.course.name
  232.  
    course_period = classes_obj.course.period
  233.  
    course_price = classes_obj.course.price
  234.  
    for key4 in self.sch_obj.teacher:
  235.  
    for key3 in self.sch_obj.teacher[key4].classes:
  236.  
    if key3 ==classes_id:
  237.  
    classes_teacher = self.sch_obj.teacher[key4].name
  238.  
    print("\033[34m学员: %s\n班级: %s\n授课老师: %s\n课程: %s, 周期: %s月, 价格: %s元\033[0m"%(student_name,classes_id,classes_teacher,coures_name,course_period,course_price))
  239.  
    break
  240.  
    else:
  241.  
    print("\033[31m无该学员!\033[0m")
  242.  
     
  243.  
    def run_manage_student(self):
  244.  
    while True:
  245.  
    # 显示已有学校
  246.  
    schs = []
  247.  
    print("\n\033[34m所有校区:\033[0m")
  248.  
    for key in self.school_db:
  249.  
    print("校名:%s 位置:%s" % (key, self.school_db[key].addr))
  250.  
    schs.append(key)
  251.  
    # print("\033[32m添加学校,输入#\033[5m")
  252.  
    sch = input("\033[34;0m选择注册校区(b.返回上一层)>>:\033[0m").strip()
  253.  
    if sch in schs:
  254.  
    self.sch = sch #学校名称
  255.  
    self.sch_obj = self.school_db[sch] #获取学校实例 {'name': '北京', 'addr': '北京市', 'course': {}, 'teacher': {}, 'classes': {}}
  256.  
    # print(self.sch_obj.__dict__)
  257.  
    operation_items = {
  258.  
    "1": self.regist_student,
  259.  
    "2": self.check_student,
  260.  
    "q":exit
  261.  
    }
  262.  
    while True:
  263.  
    print("\033[32m选择操作项>\n\033[0m"
  264.  
    "\033[4m1.注册成为学员\n\033[0m"
  265.  
    "\033[4m2.查看学员信息\n\033[0m"
  266.  
    "\033[4mb.返回上一层\n\033[0m"
  267.  
    "\033[4mq.退出程序\n\033[0m")
  268.  
    oper = input("输入操作对应序号:>>").strip()
  269.  
    if oper in operation_items:
  270.  
    func = operation_items[oper]
  271.  
    func()
  272.  
    elif oper == "b":
  273.  
    break
  274.  
    else:
  275.  
    print("\033[31m输入有误,请重新输入!\033[0m")
  276.  
     
  277.  
    elif sch == "b":
  278.  
    break
  279.  
    else:
  280.  
    print("\033[31m输入有误,请重新输入!\033[0m")
  281.  
    continue
  282.  
     
  283.  
     
  284.  
    class manage_teacher:
  285.  
    def __init__(self):
  286.  
    if os.path.exists(settings.school_db+".dat"):
  287.  
    self.school_db = shelve.open(settings.school_db)
  288.  
    self.run_manage_teacher()
  289.  
    self.school_db.close()
  290.  
    else:
  291.  
    print("请创建相应学校课程班级!")
  292.  
    exit()
  293.  
     
  294.  
     
  295.  
    def run_manage_teacher(self):
  296.  
    while True:
  297.  
    # 显示已有学校
  298.  
    schs = []
  299.  
    print("\n\033[34m所有校区:\033[0m")
  300.  
    for key in self.school_db:
  301.  
    print("校名:%s 位置: %s" % (key, self.school_db[key].addr))
  302.  
    schs.append(key)
  303.  
    # print("\033[32m添加学校,输入#\033[5m")
  304.  
    sch = input("\033[34;0m选择校区(b.返回上一层)>>:\033[0m").strip()
  305.  
    if sch in schs:
  306.  
    self.sch = sch #学校名称
  307.  
    self.sch_obj = self.school_db[sch] #获取学校实例 {'name': '北京', 'addr': '北京市', 'course': {}, 'teacher': {}, 'classes': {}}
  308.  
    # print(self.sch_obj.__dict__)
  309.  
    operation_items = {
  310.  
    "1": self.check_teacher_classes,
  311.  
    "q": exit
  312.  
    }
  313.  
    while True:
  314.  
    print("\033[32m选择操作项>\n\033[0m"
  315.  
    "\033[4m1.查看授课班级信息\n\033[0m"
  316.  
    "\033[4mb.返回上一层\n\033[0m"
  317.  
    "\033[4mq.退出程序\n\033[0m"
  318.  
    )
  319.  
    oper = input("\033[34;0m输入操作项序号>>:\033[0m")
  320.  
    if oper in operation_items:
  321.  
    func = operation_items[oper]
  322.  
    func()
  323.  
    elif oper =="b":
  324.  
    break
  325.  
    else:
  326.  
    print("\033[31m输入有误,请重新输入!\033[0m")
  327.  
    elif sch == "q":
  328.  
    break
  329.  
    else:
  330.  
    print("\033[31m输入有误,请重新输入!\033[0m")
  331.  
     
  332.  
    #查看该老师名下的班级信息
  333.  
    def check_teacher_classes(self):
  334.  
    teacher_name = input("\033[34;0m输入老师名字>>:\033[0m")
  335.  
    print("\n\033[34m%s老师授课班级信息如下:\033[0m"%teacher_name)
  336.  
    if teacher_name in self.sch_obj.teacher:
  337.  
    teacher_obj = self.sch_obj.teacher[teacher_name]
  338.  
    for key in teacher_obj.classes:
  339.  
    classes_obj = teacher_obj.classes[key]
  340.  
    classes_name = classes_obj.id
  341.  
    course_name = classes_obj.course.name
  342.  
    student = []
  343.  
    for key2 in classes_obj.course_student:
  344.  
    student_obj = classes_obj.course_student[key2]
  345.  
    student_name = student_obj.name
  346.  
    student.append(student_name)
  347.  
    print("班级%s,课程: %s\n学员:%s\n"%(classes_name,course_name,student))
  348.  
    else:
  349.  
    print("\033[31m暂无该【%s】老师信息!\n\033[0m"%teacher_name)
  350.  
    if __name__ == "__main__":
  351.  
    home().show_home()

使用shelve保存数据,数据文件自动生成保存。

先执行管理员操作创建学员,老师,课程,班级后才能进行相应的老师和学生页面操作。

 

posted @ 2019-01-02 16:36  挖坑达人  阅读(10)  评论(0编辑  收藏  举报