python选课系统完整版

Posted linshuhui

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python选课系统完整版相关的知识,希望对你有一定的参考价值。

一、需求

角色:学校、学员、课程、讲师
要求:
1. 创建北京、上海 2 所学校
2. 创建linux , python , go 3个课程 , linuxpy 在北京开, go 在上海开
3. 课程包含,周期,价格,通过学校创建课程 
4. 通过学校创建班级, 班级关联课程、讲师
5. 创建学员时,选择学校,关联班级
5. 创建讲师角色时要关联学校, 
6. 提供两个角色接口
7. 学员视图, 可以注册, 交学费, 选择班级,
8. 讲师视图, 讲师可管理自己的班级, 上课时选择班级, 查看班级学员列表 , 修改所管理的学员的成绩 
9. 管理视图,创建讲师, 创建班级,创建课程

10. 上面的操作产生的数据都通过pickle序列化保存到文件里

 

二、代码

技术分享图片
import os, pickle

BASR_DIR = os.path.dirname(os.path.abspath(__file__))
__school_db = os.path.join(BASR_DIR, school_db)
__teacher_db = os.path.join(BASR_DIR, teacher_db)


def init_database():
    if not os.path.exists(__school_db):
        bj = School(北京, 北京沙河)
        sh = School(上海, 上海市)
        dic = {bj: [], sh: []}
        file_opration(__school_db, wb, dic)
    if not os.path.exists(__teacher_db):
        dic = {}
        file_opration(__teacher_db, wb, dic)


def file_opration(file, mode, *args):
    if mode == wb:
        with open(file, mode)as f:
            f.write(pickle.dumps(args[0]))
    if mode == rb:
        with open(file, mode) as f:
            return pickle.loads(f.read())


class School:
    def __init__(self, name, addr):
        self.name = name
        self.addr = addr

    def msg_display(self):
        print(校区名称:33[1;32m%s33[0m 校区位置:33[1;32m %s33[0m % (self.name, self.addr))

    def create_course(self, course_obj, school_dict, file):
        school_dict[self].append(course_obj)
        file_opration(file, wb, school_dict)


class Course:
    def __init__(self, name, price, time):
        self.name = name
        self.price = price
        self.time = time
        self.classes = {}

    def msg_display(self):
        print(【课程】:33[1;32m%s33[0m 【价格】:33[1;32m%s33[0m 【周期】:33[1;32m%s33[0m % (
        self.name, self.price, self.time))

    def create_class(self, class_obj):
        self.classes[class_obj.name] = class_obj


class Class:
    def __init__(self, name):
        self.name = name
        self.students = {}
        self.teachers = {}


class Teacher:
    def __init__(self, name):
        self.name = name


class Student:
    def __init__(self, name, age):
        self.name = name
        self.age = age


def main_center():
    flag = True
    while flag:
        print(********33[1;35m欢迎来到管理员系统33[0m!**********)
        choice = input(输入1:增加课程
输入2:增加班级
输入3:增加教师
输入4:返回
).strip()
        school_dict = file_opration(__school_db, rb)
        if choice == 1:
            for i in school_dict:
                i.msg_display()
            while 1:
                school_choice = input("请输入需要创建课程的校区名称:
")
                if school_choice == 北京 or school_choice == 上海:
                    for i in school_dict:
                        if i.name == school_choice:
                            school_obj = i
                    course_name = input("请输入课程名称
")
                    price = input("请输入课程价格
")
                    time = input("请输入课程周期
")
                    course_obj = Course(course_name, price, time)
                    school_obj.create_course(course_obj, school_dict, __school_db)
                    print("33[1;35m增加课程成功33[0m")
                    break
                else:
                    print("33[1;35m别瞎几把乱输!输入学校名称,懂??33[0m")

        elif choice == 2:
            for i in school_dict:
                i.msg_display()
            while flag:
                school_choice = input("请输入需要创建班级的校区名称:
")
                if school_choice == 北京 or school_choice == 上海:
                    for i in school_dict:
                        if i.name == school_choice:
                            school_obj = i
                    if not school_dict[school_obj]:
                        print("33[1;35m你脑袋在想啥?没建课程,就想创班级??33[0m")
                        break
                    print(******33[1;32m%s校区已有的课程如下:33[0m****** % (school_choice))
                    course_name_list = []
                    for i in school_dict[school_obj]:
                        course_name_list.append(i.name)
                        i.msg_display()
                    while 1:
                        course_name = input("请输入课程名称
")
                        if course_name in course_name_list:
                            for i in school_dict[school_obj]:
                                if i.name == course_name:
                                    if i.classes:
                                        print("%s课程已有的班级如下:" % (i.name))
                                        for j in i.classes:
                                            print(j)
                                    else:
                                        print("该课程该没有班级,请创建。")
                                    class_name = input("请输入要新建的班级名称:
")
                                    new_class_obj = Class(class_name)
                                    i.create_class(new_class_obj)
                                    file_opration(__school_db, wb, school_dict)
                                    print("33[1;32m创建成功!33[0m")
                                    flag = False
                                    break
                            break
                        else:
                            print("33[1;35m输入已有课程的名字!understand?33[0m")


                else:
                    print("33[1;35m别瞎几把乱输!输入学校名称,懂??33[0m")

        elif choice == 3:
            flag = True
            for i in school_dict:
                i.msg_display()
            while flag:
                school_choice = input("请输入需要招聘教师的校区名称:
")
                if school_choice == 北京 or school_choice == 上海:
                    for i in school_dict:
                        if i.name == school_choice:
                            school_obj = i
                    if not school_dict[school_obj]:
                        print("33[1;35m你脑袋在想啥?课程都没有,招老师去干吗??33[0m")
                        break
                    print(******33[1;32m%s校区已有的课程如下:33[0m****** % (school_choice))
                    course_name_list = []
                    for i in school_dict[school_obj]:
                        course_name_list.append(i.name)
                        i.msg_display()
                    flag2 = True
                    while flag2:
                        course_name = input("请输入需要招聘教师的课程名称
")
                        if course_name in course_name_list:
                            for i in school_dict[school_obj]:
                                if i.name == course_name:
                                    if i.classes:
                                        print("%s课程已有的班级如下:" % (i.name))
                                        for j in i.classes:
                                            print(j)
                                    else:
                                        print("该课程该没有班级,请创建后再进行教师招聘。")
                                        flag2 = False
                                        flag = False
                                        break
                                    while 1:
                                        class_name = input("请输入要招聘教师的班级名称:
").strip()
                                        teacher_name = input("请输入教师名字:
")
                                        teacher_obj = Teacher(teacher_name)
                                        if class_name in i.classes:
                                            i.classes[class_name].teachers[teacher_name] = teacher_obj
                                            file_opration(__school_db, wb, school_dict)
                                            print("33[1;32m招聘成功!33[0m")
                                        else:
                                            print("33[1;35m输入班级名称!!!33[0m")
                                        flag = False
                                        break
                            break
                        else:
                            print("33[1;35m输入已有课程的名字!understand?33[0m")


                else:
                    print("33[1;35m别瞎几把乱输!输入学校名称,懂??33[0m")
        elif choice == 4:
            break
        else:
            print("33[1;35m别瞎几把乱输!输入1、2、3,懂??33[0m")


def studet_center():
    print(********33[1;35m欢迎来到学生系统33[0m!**********)
    school_dict = file_opration(__school_db, rb)
    while 1:
        choice = input(输入1:报名
输入2:返回
).strip()
        if choice == 1:
            student_name = input("请输入您的姓名:
").strip()
            student_age = input("请输入您的年龄:
").strip()
            student_obj = Student(student_name, student_age)
            flag = True
            for i in school_dict:
                i.msg_display()
            while flag:
                school_choice = input("请输入需要要报名的校区名称:
")
                if school_choice == 北京 or school_choice == 上海:
                    for i in school_dict:
                        if i.name == school_choice:
                            school_obj = i
                    if not school_dict[school_obj]:
                        print("33[1;35m你脑袋在想啥?课程都没有,报啥名??33[0m")
                        break
                    print(******33[1;32m%s校区已有的课程如下:33[0m****** % (school_choice))
                    course_name_list = []
                    for i in school_dict[school_obj]:
                        course_name_list.append(i.name)
                        i.msg_display()
                    flag2 = True
                    while flag2:
                        course_name = input("请输入需要加入的课程名称
")
                        if course_name in course_name_list:
                            for i in school_dict[school_obj]:
                                if i.name == course_name:
                                    if i.classes:
                                        print("%s课程已有的班级如下:" % (i.name))
                                        for j in i.classes:
                                            print(j)
                                    else:
                                        print("该课程班级都没有,报啥子名,去哪上课??")
                                        flag2 = False
                                        flag = False
                                        break
                                    while 1:
                                        class_name = input("请输入加入的班级名称:
").strip()
                                        if class_name in i.classes:
                                            print("这门课要%s元,请确认你有钱吗?" % (i.price))
                                            stu_choice = input("这么贵你还要报名吗?Y/N
").strip()
                                            if stu_choice.lower() == y:
                                                i.classes[class_name].students[student_name] = student_obj
                                                file_opration(__school_db, wb, school_dict)
                                                print("33[1;32m报名成功!33[0m")
                                                flag = False
                                                break
                                            else:
                                                print("33[1;32m穷鬼!!33[0m
")
                                                flag = False
                                                break
                                        else:
                                            print("33[1;35m输入班级名称!!!33[0m")

                            break
                        else:
                            print("33[1;35m输入已有课程的名字!understand?33[0m")


                else:
                    print("33[1;35m别瞎几把乱输!输入学校名称,懂??33[0m")

        elif choice == 2:
            break
        else:
            print("33[1;35m别瞎几把乱输!输入1、2,懂??33[0m")


def teacher_center():
    print(********33[1;35m欢迎来到教师管理系统33[0m!**********)
    teacher_name = input("请输入您的姓名").strip()
    school_dict = file_opration(__school_db, rb)
    while 1:
        choice = input(输入1:查看学生信息  输入2:选择班级上课  输入3:返回
).strip()
        teacher_exit = False
        if choice == 1:
            for i in school_dict:
                for course_obj in school_dict[i]:
                    for class_obj in course_obj.classes.values():
                        if teacher_name in class_obj.teachers:
                            teacher_exit = True
                            print("***您的班级:33[1;35m%s33[0m,当前学生如下:" % (class_obj.name))
                            for i in class_obj.students:
                                print(i, end=  )
                            print()
            if teacher_exit == False:
                print("没有这个老师,请重新检查后再输入")
                break

        elif choice == 2:
            class_dic = {}
            for i in school_dict:
                for course_obj in school_dict[i]:
                    for class_obj in course_obj.classes.values():
                        if teacher_name in class_obj.teachers:
                            teacher_exit = True
                            class_dic[class_obj.name] = class_obj
            if teacher_exit == False:
                print("没有这个老师,请重新检查后再输入")
                break
            print("您当前授课的班级如下请输出班级名称:")
            for j in class_dic:
                print(j, end=‘‘)
            print()
            cls_choice = input(">>>:").strip()
            if cls_choice in class_dic:
                print("成功在33[1;32m%s33[0m上课" % (cls_choice))

        elif choice == 3:
            break

        else:
            print("33[1;35m别瞎几把乱输!输入1、2、3,懂??33[0m")


def main():
    print(********33[1;35m欢迎来到老男孩学生管理系统33[0m!**********)
    while 1:
        choice = input(输入1:学生登录
输入2:教师登录
输入3:管理员登录
输入q:退出
).strip()
        if choice == 1:
            studet_center()
        elif choice == 2:
            teacher_center()
        elif choice == 3:
            main_center()
        elif choice.upper() == Q:
            break
        else:
            print("33[1;35m别瞎几把乱输!输入学校名称,懂??33[0m")


if __name__ == __main__:
    init_database()
    main()
View Code

 

三、关于程序的相关说明

1、这个系统支持一个课程有多个班级,一个同学选择多门课程,一个老师任教多个班级。
2、系统功能基本实现,但是代码还很low,而且还没拆分程序,做文件目录。

 

 

三、测试

登录界面

技术分享图片

 增加课程

 技术分享图片

增加班级(选择学校会显示已有的课程,班级):

技术分享图片

 增加教师:

技术分享图片

 

学生报名:

技术分享图片

技术分享图片

 

 老师方法:

技术分享图片

技术分享图片

 

 注:这个系统支持一个课程有多个班级,一个同学选择多门课程,一个老师任教多个班级。以上代码仅是部分功能测试。

 












以上是关于python选课系统完整版的主要内容,如果未能解决你的问题,请参考以下文章

数据结构课设:学生信息管理系统(完整版)

Python学生成绩管理系统(完整版)

python学生成绩管理系统完整版

国内某Python大神自创完整版,系统性学习Python

Python:完整版 wc

数据挖掘导论 完整版+PPT+Python R代码