python选课系统

start.py

import os
import sys
import platform

if platform.system() == "Windows":
    ##join 把后面列表的内容以“\”为分隔符 重新组成字符串
    BASE_DIR = "\\".join(os.path.abspath(os.path.dirname(__file__)).split("\\")[:-1])

else:
    BASE_DIR = "/".join(os.path.abspath(os.path.dirname(__file__)).split("/")[:-1])

sys.path.insert(0,BASE_DIR)#添加环境变量
#print(sys.path)

from core import main
from conf import settings

if __name__ == '__main__':
    obj = main.Manage_center()
    obj.run()

settings.py

#!/usr/bin/env python
# -*- coding:utf-8 -*-
#-Author-Lian

import os
import sys
import platform

if platform.system() == "Windows":
    #windows操作系统,数据库路径
    BASE_DIR = "\\".join(os.path.abspath(os.path.dirname(__file__)).split("\\")[:-1])
    #join 可以将元组、字符串、列表中的元素以指定的字符(分隔符)连接生成一个新的字符串
    #os.path.abspath
    database_path = os.path.join(BASE_DIR,"database")#数据库路径
    print('BASE_DIR'+BASE_DIR)

else:
    BASE_DIR = "/".join(os.path.abspath(os.path.dirname(__file__)).split("/")[:-1])
    database_path = os.path.join(BASE_DIR, "database")

school_db_file = os.path.join(database_path,"school")#会从第一个以”/”开头的参数开始拼接,之前的参数全部丢弃
print('__file__:  '+__file__)
print('os.path.dirname(__file__):  '+os.path.dirname(__file__))#获取文件所在目录的完整路径
print('os.path.abspath(__file__)  '+os.path.abspath(__file__))

print()
print(os.path.abspath(os.path.dirname(__file__)).split("\\")[:-1])#通过指定分隔符对字符串进行切片
print("\\".join(os.path.abspath(os.path.dirname(__file__)).split("\\")[:-1]))
print()

print('school_db_file:'+school_db_file)

main.py

import os
import sys
import shelve
from conf import settings
from modules.school import School


class Manage_center(object):
    def __init__(self):
        pass

    def run(self):
        while True:
            print("\n欢迎进入CLASS_SYSTEM系统\n"
                  "1 学生视图\n"
                  "2 讲师视图\n"
                  "3 管理视图\n"
                  "q 退出系统\n")
            user_choice = input("\033[34;0m请输入您要登录的视图:\033[0m")
            if user_choice == '1':
                Manage_student()
            elif user_choice == '2':
                Manage_teacher()
            elif user_choice == '3':
                Manage_school()
            elif user_choice == 'q':
                print("\033[34;1m感谢使用管理系统,退出\033[0m")
                break
            else:
                print("\033[31;1m请输入正确的选项\033[0m")

class Manage_school(object):
    '''学校管理视图'''
    def __init__(self):
        if os.path.exists(settings.school_db_file+".dat"):      #shelve会生成三个文件,其中有.dat结尾
            self.school_db = shelve.open(settings.school_db_file)  #打开学校数据库文件
            self.run_manage()       #运行管理视图
            self.school_db.close()     #关闭数据库文件
        else:
            print("\33[31;1m系统信息:初始化数据库\33[0m")
            self.initialize_school()    #初始化数据库
            self.run_manage()
            self.school_db.close()

    def initialize_school(self):
        '''实例化课程包'''
        self.school_db = shelve.open(settings.school_db_file)
        self.school_db['中级课程包'] = School('中级课程包','中级')
        self.school_db['初级课程包'] = School('初级课程包','初级')

    def run_manage(self):
        '''运行学校管理视图 '''
        while True:
            for key in self.school_db:
                print("课程包名称:",key)

            choice_school = input("\33[34;0m输入选择管理的课程包名:\33[0m").strip()
            if choice_school in self.school_db:
                self.choice_school = choice_school
                self.school_obj = self.school_db[choice_school]
                while True:
                    print("\n欢迎来到%s\n"
                          "1 添加课程 add_course\n"
                          "2 增加班级 add_class\n"
                          "3 招聘讲师 add_teacher\n"
                          "4 查看课程 check_course\n"
                          "5 查看班级 check_class\n"
                          "6 查看讲师 check_teacher\n"
                          "7 返回主菜单"% self.school_obj.school_name)
                          # "7 退出程序 exit" % self.school_obj.school_name)
                    # user_func = input('''\033[34;0m输入要操作的命令:\033[0m''').strip()
                    user_func = input('''\033[34;0m输入要操作的命令:\033[0m''')
                    if user_func == '1':
                        self.add_course()
                    elif user_func == '2':
                        self.add_class()
                    elif user_func == '3':
                        self.add_teacher()
                    elif user_func == '4':
                        self.check_course()
                    elif user_func == '5':
                        self.check_class()
                    elif user_func == '6':
                        self.check_teacher()
                    elif user_func == '7':
                        print("\033[34;1m感谢使用管理系统,返回主菜单\033[0m")
                        self.school_db.close()
                        Manage_center.run(self)
                    if hasattr(self, user_func):
                        getattr(self, user_func)()
            else:
                print("\33[31;1m输入错误:请输入正确的课程包名\33[0m")

    def add_course(self):
        course_name = input('''\033[34;0m输入要添加课程的名称:\033[0m''').strip()
        course_object=input('''\033[34;0m输入要添加课程的目标:\033[0m''').strip()
        course_price = input('''\033[34;0m输入要添加课程的价格:\033[0m''').strip()
        course_time = input('''\033[34;0m输入要添加课程的时长:\033[0m''').strip()
        course_info = input('''\033[34;0m输入要添加课程的介绍:\033[0m''').strip()
        course_homework = input('''\033[34;0m输入要添加课程的作业:\033[0m''').strip()
        if course_name in self.school_obj.school_course:    #判断课程是否已经添加过
            print("\33[32;1m课程存在\33[0m")
            self.school_obj.create_course(course_name, course_info, course_object, course_price, course_time,
                                          course_homework)
            print("\33[32;1m课程更新完成\33[0m")
        else:
            self.school_obj.create_course(course_name, course_info, course_object, course_price, course_time,
                                          course_homework)
            print("\33[32;1m课程添加成功\33[0m")
        self.school_db.update({self.choice_school: self.school_obj})    #更新数据库数据

    def add_class(self):
        class_name = input('''\033[34;0m输入要添加班级的名称:\033[0m''').strip()
        course_name = input('''\033[34;0m输入要关联的课程:\033[0m''').strip()
        if class_name not in self.school_obj.school_class:
            if course_name in self.school_obj.school_course:
                course_obj = self.school_obj.school_course[course_name]
                self.school_obj.create_class(class_name,course_obj)
                self.school_db.update({self.choice_school: self.school_obj})  # 更新数据库数据
                print("\33[32;1m班级创建成功\33[0m")
            else:
                print("\33[31;1m系统错误:关联的课程不存在\33[0m")
        else:
            print("\33[31;1m系统错误:班级已经存在\33[0m")

    def add_teacher(self):
        teacher_name = input('''\033[34;0m输入要招聘教师的名称:\033[0m''').strip()
        teacher_salary = input('''\033[34;0m输入教师的薪资:\033[0m''').strip()
        teacher_class = input('''\033[34;0m输入要关联的班级:\033[0m''').strip()
        if teacher_class in self.school_obj.school_class:       #判断班级是否存在
            class_obj = self.school_obj.school_class[teacher_class]     #获取班级名对应的实例
            if teacher_name not in self.school_obj.school_teacher:      #判断招聘教师是否存在,不存在创建,存在更新
                self.school_obj.create_teacher(teacher_name,teacher_salary,teacher_class)
                print("\33[32;1m新讲师招聘成功\33[0m")
            else:
                self.school_obj.create_teacher(teacher_name, teacher_salary, teacher_class)
                print("\33[32;1m讲师已经存在,信息更新完成\33[0m")

            self.school_db.update({self.choice_school: self.school_obj})  # 更新数据库数据
        else:
            print("\33[31;1m系统错误:关联的班级不存在\33[0m")

    def check_course(self):
        self.school_obj.show_course()

    def check_class(self):
        self.school_obj.show_class()

    def check_teacher(self):
        self.school_obj.show_teacher()

    def exit(self):
        self.school_db.close()
        sys.exit("\033[32;1m欢迎下次使用学员管理系统\033[0m")



class Manage_student(object):
    '''学生视图'''
    def __init__(self):
        if os.path.exists(settings.school_db_file + ".dat"):  # shelve会生成三个文件,其中有.dat结尾
            self.school_db = shelve.open(settings.school_db_file)  # 打开学校数据库文件
            self.run_manage()  # 运行管理视图
            self.school_db.close()  # 关闭数据库文件
        else:
            print("\033[31;1m数据库文件不存在,请先创建课程包\033[0m")
            Manage_center.run(self)

    def run_manage(self):
        print("\n欢迎进入学员视图")
        for key in self.school_db:
            print("课程包名称:", key)
        choice_school = input("\33[34;0m输入选择注册的课程包名:\33[0m").strip()# strip()去除首尾空格
        if choice_school in self.school_db:
            self.choice_school = choice_school
            self.school_obj = self.school_db[choice_school]
            student_name = input('''\033[34;0m输入学生的姓名:\033[0m''').strip()
            student_age = input('''\033[34;0m输入学生的年龄:\033[0m''').strip()
            self.school_obj.show_class_course()
            class_choice = input('''\033[34;0m输入上课的班级:\033[0m''').strip()
            print(globals())
            if class_choice in self.school_obj.school_class:
                self.school_obj.create_student(student_name,student_age,class_choice)
                self.school_db.update({self.choice_school: self.school_obj})  # 更新数据库数据
                print("\33[32;1m学生注册成功\33[0m")
            else:
                print("\33[31;1m系统错误:输入的班级不存在\33[0m")
        else:
            print("\33[31;1m系统错误:输入的课程包不存在\33[0m")
        self.school_db.close()
        Manage_center.run(self)

class Manage_teacher(object):
    '''教师视图'''
    def __init__(self):
        if os.path.exists(settings.school_db_file + ".dat"):  # shelve会生成三个文件,其中有.dat结尾
            self.school_db = shelve.open(settings.school_db_file)  # 打开学校数据库文件
            self.run_manage()  # 运行管理视图
            self.school_db.close()  # 关闭数据库文件
        else:
            print("\033[31;1m数据库文件不存在,请先创建课程包\033[0m")
            Manage_center.run(self)

    def run_manage(self):
        for key in self.school_db:
            print("学校名称:", key)
        choice_school = input("\33[34;0m输入选择课程包名:\33[0m").strip()
        if choice_school in self.school_db:
            self.choice_school = choice_school
            self.school_obj = self.school_db[choice_school]
            teacher_name = input('''\033[34;0m输入登录讲师的姓名:\033[0m''').strip()
            while True:
                if teacher_name in self.school_obj.school_teacher:
                    print("\n欢迎来到教师中心\n"
                          "1 查看班级 check_class\n"
                          "2 返回主菜单" )
                    user_func = input('''\033[34;0m输入要操作的命令:\033[0m''').strip()
                    # user_func = input('''\033[34;0m输入要操作的命令:\033[0m''')
                    if user_func == '1':
                        self.check_class(teacher_name)
                    if user_func == '2':
                        print("\033[34;1m感谢使用管理系统,返回主菜单\033[0m")
                        self.school_db.close()
                        Manage_center.run(self)
                    if hasattr(self, user_func):
                        getattr(self, user_func)(teacher_name)
                else:
                    print("\033[31;1m讲师不存在\033[0m")
                    break

    def check_class(self, teacher_name):
        self.school_obj.show_teacher_classinfo(teacher_name)

    def exit(self, *args):
        self.school_db.close()
        sys.exit("\033[32;1m欢迎下次使用学员管理系统\033[0m")
classs.py
class Class(object):
    '''班级类,包含名称,课程,学生'''
    def __init__(self, class_name, course_obj):
        self.class_name = class_name
        self.class_course = course_obj
        self.class_student = {}         #学生字典
course.py
class Course(object):
    '''定义课程类,包含名称,价格,周期,课程简介,目标,作业'''
    def __init__(self, course_name, course_info, course_object, course_price, course_time, course_homework):
        self.course_name = course_name
        self.course_info = course_info
        self.course_object = course_object
        self.course_price = course_price
        self.course_time = course_time
        self.course_homework = course_homework
        # self.course_score=course_score

school.py

#!/usr/bin/env python
# -*- coding:utf-8 -*-
#-Author-Lian
from modules.course import Course
from modules.classs import Class
from modules.teacher import Teacher
from modules.student import Student

class School(object):
    '''学校类,包含名称,地址,课程,班级,教师'''
    def __init__(self,school_name,school_addr):
        self.school_name = school_name
        self.school_addr = school_addr
        self.school_course = {}             #学校所有的课程实例
        self.school_class = {}
        self.school_teacher = {}
        #self.school_student = {}

    def create_course(self,course_name, course_info, course_object, course_price, course_time, course_homework):
        '''创建课程'''
        course_obj = Course(course_name, course_info, course_object, course_price, course_time, course_homework)
        self.school_course[course_name] = course_obj

    def show_course(self):
        '''查看课程信息'''
        for key in self.school_course:
            course_obj = self.school_course[key]
            print("\33[32;1m课程:%s\t价格:%s\t周期:%s月\33[0m"%(course_obj.course_name,course_obj.course_price,
                                         course_obj.course_time,))

    def create_class(self,class_name,courese_obj):
        '''创建班级'''
        class_obj = Class(class_name,courese_obj)
        self.school_class[class_name] = class_obj

    def show_class(self):
        for key in self.school_class:
            class_obj = self.school_class[key]
            print("\33[32;1m班级:%s\t关联课程:%s\33[0m" % (class_obj.class_name, class_obj.class_course.course_name))

    def show_class_course(self):
        for key in self.school_class:
            class_obj = self.school_class[key]
            course_obj = class_obj.class_course
            print("\33[32;1m班级:%s\t关联课程:%s\t价格:%s\t周期:%s月\33[0m" % (class_obj.class_name, course_obj.course_name,
                                                                    course_obj.course_price,course_obj.course_time))

    def create_teacher(self,teacher_name, teacher_salary,class_name):
        '''创建讲师'''
        teacher_obj = Teacher(teacher_name, teacher_salary,class_name)
        #teacher_obj.teacher_add_class(class_name,class_obj)
        self.school_teacher[teacher_name] = teacher_obj

    # def update_teacher(self,teacher_name,class_name,class_obj):
    #     '''更新教师信息'''
    #     teacher_obj = self.school_teacher[teacher_name]
    #     teacher_obj.teacher_add_class(class_name,class_obj)

    def show_teacher(self):
        '''查看讲师信息'''
        for key in self.school_teacher:
            teacher_obj = self.school_teacher[key]

            print("\33[32;1m讲师:%s\t薪资:%s\t关联班级:%s\33[0m" % (teacher_obj.teacher_name, teacher_obj.teacher_salary,
                                                            teacher_obj.teacher_class))
    def create_student(self,student_name,student_age,class_choice):
        '''注册学生'''
        student_obj = Student(student_name,student_age)     #生成学生实例
        class_obj = self.school_class[class_choice]         #获取学生所注册班级的实例对象
        class_obj.class_student[student_name]=student_obj   #班级实例里添加学生信息
        self.school_class[class_choice] = class_obj         #学校班级字典更新

    def show_teacher_classinfo(self,teacher_name):
        teacher_obj = self.school_teacher[teacher_name]
        class_name = teacher_obj.teacher_class
        class_obj = self.school_class[class_name]
        print("\33[32;1m老师:%s\t班级:%s\33[0m" % (teacher_obj.teacher_name, teacher_obj.teacher_class))
        i = class_obj.class_student
        for key in i.keys():
            print("\33[32;1m学员:%s\33[0m" % key)

student.py

class Student(object):
    '''学生类,包含姓名,年龄'''
    def __init__(self, student_name, student_age):
        self.student_name = student_name
        self.student_age = student_age
        # self.student_score = student_score
        # self.student_course = student_course

teacher.py

class Teacher(object):
    '''讲师类,定义teacher_name,teacher_salary,包含teacher_class'''
    def __init__(self, teacher_name, teacher_salary, teacher_class):
        self.teacher_name = teacher_name
        self.teacher_salary = teacher_salary
        self.teacher_class = teacher_class

    def teacher_add_class(self, class_name, class_obj):
        self.teacher_class[class_name] = class_obj

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值