pythonywy

选课系统

花了一晚上写的,可能还存在不足

1.程序框架

2.文件夹建立

D:/选课系统
|___api
|    |___common_api.py
|___bil
|    |___common.py
|___conf
|    |___setting.py
|___core
|    |___admin.py
|    |___src.py
|    |___student.py
|    |___teacher.py
|___db
|    |___common_modles.py
|    |___modles.py
|___starts.py
|___test.py
|___选课系统.jpg
#写的思路,先写视图,再根据功能需求写接口,路径什么的都丢入setting.py,生成的人物的类丢modles.py,公共的课程学习等类丢入common_modles.py,后面写功能就是写逻辑了

3.api

1.common_api.py

import pickle
import os
def save_obj(obj):

    path = os.path.dirname(os.path.dirname(__file__))
    file_path = os.path.join(path,\'db\',obj.__class__.__name__)

    if not os.path.exists(file_path):
        os.mkdir(file_path)
    obj_path = os.path.join(file_path,f\'{obj.name}.pkl\')

    if not os.path.exists(obj_path):
        with open(obj_path,\'wb\') as fw:
            pickle.dump(obj,fw)
        return True
    with open(obj_path, \'wb\') as fw:
        pickle.dump(obj, fw)
    return False

4.bil

1.common.py

from conf.setting import LONG_DICT
import pickle
import os

def user(user):

    def login_deco(func):

        def wrapper(*args, **kwargs):

            if LONG_DICT[user]: func()
            else: print(\'请先登入\')

        return wrapper

    return login_deco



def read_obj(objtype,name):

    path = os.path.dirname(os.path.dirname(__file__))
    file_path = os.path.join(path,\'db\',objtype)

    if not os.path.exists(file_path):
        os.mkdir(file_path)
    obj_path = os.path.join(file_path,f\'{name}.pkl\')

    if  os.path.exists(obj_path):
        with open(obj_path, \'rb\') as fr:
            read_obj = pickle.load(fr)
        return read_obj
    return False

5.conf

1.setting.py

import os
LONG_DICT = {\'student\':None,\'teacher\':None,\'admin\':None}

PATH = os.path.dirname(os.path.dirname(__file__))
STUDENT_FILE_PATH = os.path.join(PATH,\'db\',\'student\')
TEACHER_FILE_PATH = os.path.join(PATH,\'db\',\'teacher\')
ADMIN_FILE_PATH = os.path.join(PATH,\'db\',\'admin\')
COURSE_FILE_PATH = os.path.join(PATH,\'db\',\'course\')
SCHOOL_FILE_PATH = os.path.join(PATH,\'db\',\'school\')

6.core

1.admin.py

from conf.setting import *
from bil.common import user,read_obj
from db.modles import Admin,Teacher,Course,School

#注册功能
def register():
    print(\'欢迎使用注册功能\')
    while True:
        print(\'输入Q退出\')
        register_name = input(\'请输入你的名字\')
        register_pwd = input(\'请输入你的密码\')

        if register_name==\'Q\' or register_pwd ==\'Q\':
            print(\'退出成功\')
            return False

        admin = Admin(register_name,register_pwd)

        if admin.save():
            print(\'注册成功\')
            return True
        else:
            print(\'账户已存在\')
            continue

#登入功能
def login():
    print(\'欢迎使用登入功能\')
    while True:
        print(\'输入Q退出\')
        login_name = input(\'请输入你的名字\')
        login_pwd = input(\'请输入你的密码\')

        if login_name == \'Q\' or login_pwd == \'Q\':
            print(\'退出成功\')
            return False

        if not os.path.exists(ADMIN_FILE_PATH):
            os.mkdir(ADMIN_FILE_PATH)

        path = os.path.join(ADMIN_FILE_PATH,f\'{login_name}.pkl\')
        if not os.path.exists(path):
            print(\'账号不存在\')
            continue

        info_obj = read_obj(\'admin\',login_name)

        if info_obj.pwd == login_pwd:
            print(\'登入成功\')
            LONG_DICT[\'admin\'] = login_name

            return True
        else:
            print(\'密码错误\')
            continue



#创建学习功能
@user(\'admin\')
def found_school():
    print(\'欢迎使用创建学校功能\')
    while True:

        print(\'输入Q退出\')
        name = input(\'请输入学校的名字\')
        pwd = input(\'请输入学校的地址\')

        if name == \'Q\' or pwd == \'Q\':
            print(\'退出成功\')
            return False

        obj = School(name, pwd)

        if obj.save():
            print(\'创建成功\')
            return True
        else:
            print(\'账户已存在\')
            continue

#创建老师功能
@user(\'admin\')
def found_teacher():
    print(\'欢迎使用创建老师功能\')
    while True:

        print(\'输入Q退出\')
        name = input(\'请输入老师的名字\')
        pwd = input(\'请输入你的密码\')

        if name==\'Q\' or pwd ==\'Q\':
            print(\'退出成功\')
            return False

        obj = Teacher(name,pwd)

        if obj.save():
            print(\'创建成功\')
            return True
        else:
            print(\'账户已存在\')
            continue

#创建课程功能
@user(\'admin\')
def found_course():
    print(\'欢迎使用创建课程功能\')
    while True:

        print(\'输入Q退出\')
        name = input(\'请输课程的名字\')


        if name == \'Q\' :
            print(\'退出成功\')
            return False

        obj = Course(name)

        if obj.save():
            print(\'创建成功\')
            return True
        else:
            print(\'已存在\')
            continue

#功能字典
action ={
    \'1\':register,
    \'2\':login,
    \'3\':found_school,
    \'4\':found_teacher,
    \'5\':found_course,
}

#终端显示功能字典
msg = \'\'\'
------------------
|    1:注册账号   |
|    2:登入账号   |
|    3:创建学校   |
|    4:创建老师   |
|    5:创建课程   |
|    Q:退出功能   |
------------------
\'\'\'


#管理员视图运行
def admin_action():
    while True:

        print(msg)
        chiose = input(\'请选择\')

        if chiose == \'Q\': print(\'退出成功\') ; break
        elif chiose in action: action[chiose]()
        else:print(\'请好好输入\') ; continue


2.src.py

from core.student import student_action
from core.teacher import teacher_action
from core.admin import admin_action
action ={
    \'1\':student_action,
    \'2\':teacher_action,
    \'3\':admin_action,
}

#终端显示功能字典
msg = \'\'\'
------------------
|    1:学生       |
|    2:老师       |
|    3:管理员     |
|    Q:退出功能   |
------------------
\'\'\'


#主界面视图运行
def run():
    while True:

        print(msg)
        chiose = input(\'请选择\')

        if chiose == \'Q\': print(\'退出成功\') ; break
        elif chiose in action: action[chiose]()
        else:print(\'请好好输入\') ; continue

3.student.py

from conf.setting import *
from bil.common import user,read_obj
from db.modles import Student,Course

#注册功能
def register():
    print(\'欢迎使用注册功能\')
    while True:
        print(\'输入Q退出\')
        register_name = input(\'请输入你的名字\')
        register_pwd = input(\'请输入你的密码\')

        if register_name==\'Q\' or register_pwd ==\'Q\':
            print(\'退出成功\')
            return False

        obj = Student(register_name,register_pwd)

        if obj.save():
            print(\'注册成功\')
            return True
        else:
            print(\'账户已存在\')
            continue
#登入功能
def login():
    print(\'欢迎使用登入功能\')
    while True:
        print(\'输入Q退出\')
        login_name = input(\'请输入你的名字\')
        login_pwd = input(\'请输入你的密码\')

        if login_name == \'Q\' or login_pwd == \'Q\':
            print(\'退出成功\')
            return False

        if not os.path.exists(STUDENT_FILE_PATH):
            os.mkdir(STUDENT_FILE_PATH)

        path = os.path.join(STUDENT_FILE_PATH, f\'{login_name}.pkl\')
        if not os.path.exists(path):
            print(\'账号不存在\')
            continue

        info_obj = read_obj(\'student\', login_name)

        if info_obj.pwd == login_pwd:
            print(\'登入成功\')
            LONG_DICT[\'student\'] = login_name

            return True
        else:
            print(\'密码错误\')
            continue

#选择学校功能
@user(\'student\')
def choose_school():
    print(\'欢迎使用选择学校功能\')
    while True:
        print(\'输入Q退出\')

        if not os.path.exists(SCHOOL_FILE_PATH):
            os.mkdir(SCHOOL_FILE_PATH)

        lis = os.listdir(SCHOOL_FILE_PATH)
        if lis == []:
            print(\'没有学校,请让管理员创建学校\')
            return False

        while True:
            print(\'学校名称:\')
            for school_name in lis:
                print(f\'\t\t{school_name[:-4]}\')

            name = input(\'请输入学校的名字\')

            if name == \'Q\':
                print(\'退出成功\')
                return False

            if read_obj(\'school\',name):

                obj_student = read_obj(\'student\',LONG_DICT[\'student\'])
                obj_student.school = name
                obj_student.save()
                print(\'选择学校成功\')
                return True

            else:
                print(\'学校不存在\')
                continue


#选择课程功能
@user(\'student\')
def choose_course():
    print(\'欢迎使用选择课程功能\')
    print(\'输入Q退出\')

    if not os.path.exists(COURSE_FILE_PATH):
        os.mkdir(COURSE_FILE_PATH)

    lis = os.listdir(COURSE_FILE_PATH)
    if lis == []:
        print(\'没有课程,请让管理员创建课程\')
        return False

    while True:
        print(\'课程名字:\')
        for course_name in lis:
            print(f\'\t\t{course_name[:-4]}\')

        name = input(\'请输入学校的名字\')

        if name == \'Q\':
            print(\'退出成功\')
            return False

        if read_obj(\'course\', name):

            obj_student = read_obj(\'student\', LONG_DICT[\'student\']) #type:Student
            obj_student.course.append(name)
            obj_student.save()

            course_obj = read_obj(\'course\', name) #type:Course
            obj_student.add_course(course_obj)
            course_obj.save()

            print(\'选择课程成功\')
            return True

        else:
            print(\'学校不存在\')
            continue

#查看成绩功能
@user(\'student\')
def check_score():
    print(\'欢迎使用查看成绩功能\')
    obj_student = read_obj(\'student\', LONG_DICT[\'student\']) #type:Student

    if obj_student.score :
        print(f\'你的成绩是{obj_student.score }\')
        return True
    print(\'你没有成绩\')

#功能字典
action ={
    \'1\':register,
    \'2\':login,
    \'3\':choose_school,
    \'4\':choose_course,
    \'5\':check_score,
}

#终端显示功能字典
msg = \'\'\'
------------------
|    1:注册账号   |
|    2:登入账号   |
|    3:选择学校   |
|    4:选择课程   |
|    5:查看成绩   |
|    Q:退出功能   |
------------------
\'\'\'


#学生视图运行
def student_action():
    while True:

        print(msg)
        chiose = input(\'请选择\')

        if chiose == \'Q\': print(\'退出成功\') ; break
        elif chiose in action: action[chiose]()
        else:print(\'请好好输入\') ; continue


if __name__ == \'__main__\':
    student_action()

4.teacher.py

from conf.setting import *
from bil.common import user,read_obj
from db.modles import Student,Course


#登入功能
def login():
    print(\'欢迎使用登入功能\')
    while True:
        print(\'输入Q退出\')
        login_name = input(\'请输入你的名字\')
        login_pwd = input(\'请输入你的密码\')

        if login_name == \'Q\' or login_pwd == \'Q\':
            print(\'退出成功\')
            return False

        if not os.path.exists(TEACHER_FILE_PATH):
            os.mkdir(TEACHER_FILE_PATH)

        path = os.path.join(TEACHER_FILE_PATH, f\'{login_name}.pkl\')
        if not os.path.exists(path):
            print(\'账号不存在\')
            continue

        info_obj = read_obj(\'teacher\', login_name)

        if info_obj.pwd == login_pwd:
            print(\'登入成功\')
            LONG_DICT[\'teacher\'] = login_name

            return True
        else:
            print(\'密码错误\')
            continue

#查看学生
@user(\'teacher\')
def check_student():
    print(\'欢迎使用查看学生功能\')

    print(\'输入Q退出\')

    if not os.path.exists(STUDENT_FILE_PATH):
        os.mkdir(STUDENT_FILE_PATH)

    lis = os.listdir(STUDENT_FILE_PATH)
    if lis == []:
        print(\'没有学生\')
        return False

    while True:
        print(\'学生账号:\')
        for course_name in lis:
            print(f\'\t\t{course_name[:-4]}\')

        name = input(\'请输入学生的名字\')

        if name == \'Q\':
            print(\'退出成功\')
            return False

        if read_obj(\'student\', name):
            student_obj = read_obj(\'student\', name) #type:Student
            print(f\'学生账号:{student_obj.name}\n\'
                  f\'学生密码:{student_obj.pwd}\n\'
                  f\'学生学校:{student_obj.school}\n\'
                  f\'学生课程:{student_obj.course}\n\'
                  f\'学生成绩:{student_obj.score}\n\')
            return True
        else:
            print(\'学生账号不存在\')


#查看课程
@user(\'teacher\')
def check_course():
    print(\'欢迎使用查看课程功能\')


    if not os.path.exists(COURSE_FILE_PATH):
        os.mkdir(COURSE_FILE_PATH)

    lis = os.listdir(COURSE_FILE_PATH)
    if lis == []:
        print(\'没有课程\')
        return False
    else:
        print(\'课程名称:\')
        for course_name in lis:
            print(f\'\t\t{course_name[:-4]}\')

    wait = input(\'输入任意键退出\n\')

#选择课程功能
@user(\'teacher\')
def choose_course():
    print(\'欢迎使用选择课程功能\')

    print(\'输入Q退出\')

    if not os.path.exists(COURSE_FILE_PATH):
        os.mkdir(COURSE_FILE_PATH)

    lis = os.listdir(COURSE_FILE_PATH)
    if lis == []:
        print(\'没有课程\')
        return False
    else:
        print(\'课程名称:\')
        for course_name in lis:
            print(f\'\t\t{course_name[:-4]}\')

    name = input(\'请输入课程的名字\')

    if name == \'Q\':
        print(\'退出成功\')
        return False

    if read_obj(\'course\', name):

        obj_teacher = read_obj(\'teacher\', LONG_DICT[\'teacher\'])
        obj_teacher.course.append(name)
        obj_teacher.save()

        course_obj = read_obj(\'course\', name)  # type:Course
        obj_teacher.add_course(course_obj)
        course_obj.save()

        print(\'课程选择成功\')

    else:
        print(\'课程不存在\')


#修改成绩
@user(\'teacher\')
def revision_score():
    print(\'欢迎使用修改成绩功能\')

    print(\'输入Q退出\')

    if not os.path.exists(STUDENT_FILE_PATH):
        os.mkdir(STUDENT_FILE_PATH)

    lis = os.listdir(STUDENT_FILE_PATH)
    if lis == []:
        print(\'没有学生\')
        return False
    else:
        print(\'学生名称:\')
        for course_name in lis:
            print(f\'\t\t{course_name[:-4]}\')

    name = input(\'请输入学生的名字\')

    if name == \'Q\':
        print(\'退出成功\')
        return False

    if read_obj(\'student\', name):

        student_obj = read_obj(\'student\', name)   #type:Student

        score = input(\'请输入学生的成绩\')

        student_obj.score =  score

        student_obj.save()

    else:
        print(\'学生不存在\')
#功能字典
action ={
    \'1\':login,
    \'2\':check_student,
    \'3\':check_course,
    \'4\':choose_course,
    \'5\':revision_score,
}

#终端显示功能字典
msg = \'\'\'
------------------
|    1:登入账号   |
|    2:查看学生   |
|    3:查看课程   |
|    4:选择课程   |
|    5:修改成绩   |
|    Q:退出功能   |
------------------
\'\'\'


#老师视图运行
def teacher_action():
    while True:

        print(msg)

        chiose = input(\'请选择\')

        if chiose == \'Q\': print(\'退出成功\') ; break
        elif chiose in action: action[chiose]()
        else:print(\'请好好输入\') ; continue

7.db

1.common_modles.py

\'\'\'
基类:
	保存


学校类:姓名、地址、课程列表
	添加课程

课程类:姓名、学生列表
	添加学生
	添加老师
\'\'\'
from api.common_api import save_obj

#基类
class Base:

    #存对象
    def save(self):
        return save_obj(self)



#定义学校
class School(Base):

    def __init__(self,name,addr):
        self.name = name
        self.addr = addr
        self.course = []
        self.teacher = []
        self.student = []

    def add_course(self,Course):
        self.course.append(Course)

#定义课程
class Course(Base):

    def __init__(self, name):
        self.name = name
        self.studet_list = []
        self.teacher_list = []

    def add_studet(self,Student):
        self.studet_list.append(Student)

    def add_teacher(self,Teacher):
        self.teacher_list.append(Teacher)

2.modles.py

\'\'\'
基类:
	保存


管理员类:姓名、密码
	创建学校
	创建课程
	创建老师

老师类:姓名、密码、课程列表
	添加课程
	修改分数

学生类:姓名、密码、学校、课程列表、分数
	获取学校
	选择学校
	添加课程
\'\'\'
from db.common_modles import *

#创建学生
class Student(Base):

    def __init__(self,name,pwd):
        self.name = name
        self.pwd = pwd
        self.school = None
        self.course = []
        self.score = None

    def check_school(self):
        return self.school

    def choose_school(self,obj):
        self.school = obj.name

    def add_course(self,Course):
        Course.add_studet(self)


class Teacher(Base):

    def __init__(self,name,pwd):
        self.name = name
        self.pwd = pwd
        self.course = []
        self.school = None



    def revision_score(self,Student,score):
        Student.score = score

    def add_course(self,Course):
        Course.add_teacher(self)


class Admin(Base):

    def __init__(self,name,pwd):
        self.name = name
        self.pwd = pwd

    def found_school(self,name,addr):
        School(name,addr)

    def found_teacher(self,name,pwd):
        Teacher(name,pwd)

    def found_course(self,name):
        Course(name)

8.starts.py(运行程序)

from core.src import run
if __name__ == \'__main__\':
    run()

9.test.py(生成第2里面的树状图)

import os
def dirsTree():
    PATH = os.path.dirname(__file__)
    print(PATH)
    lis = os.listdir(PATH)
    if lis != None:
        for a in lis:
            print(f\'|___{a}\')
            if \'.\' not in a:
                a_path = os.path.join(PATH,a)
                lis_2 = os.listdir(a_path)
                if lis_2 != None:
                    for b in lis_2:
                        if b != \'__pycache__\':
                            print(f\'|    |___{b}\')
dirsTree()

分类:

技术点:

相关文章: