前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python面向对象编程小程序- 选课系统

python面向对象编程小程序- 选课系统

作者头像
小小咸鱼YwY
发布2019-07-24 16:42:08
1K0
发布2019-07-24 16:42:08
举报
文章被收录于专栏:python-爬虫

选课系统

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

1.程序框架

2.文件夹建立

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
'''
基类:
    保存


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

课程类:姓名、学生列表
    添加学生
    添加老师
'''
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

代码语言:javascript
复制
'''
基类:
    保存


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

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

学生类:姓名、密码、学校、课程列表、分数
    获取学校
    选择学校
    添加课程
'''
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(运行程序)

代码语言:javascript
复制
from core.src import run
if __name__ == '__main__':
    run()

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

代码语言:javascript
复制
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()
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-06-26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 选课系统
    • 1.程序框架
      • 2.文件夹建立
        • 3.api
          • 1.common_api.py
        • 4.bil
          • 1.common.py
        • 5.conf
          • 1.setting.py
        • 6.core
          • 1.admin.py
          • 2.src.py
          • 3.student.py
          • 4.teacher.py
        • 7.db
          • 1.common_modles.py
          • 2.modles.py
        • 8.starts.py(运行程序)
          • 9.test.py(生成第2里面的树状图)
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档