python----选课系统

一、系统目录
在这里插入图片描述
二、实现代码
2.1 bin
2.1.1 run.py
程序的入口

from src import main

if __name__ == '__main__':

    main.main()

2.2 confg
2.2.1 settings
配置文件

import os
import sys


#path路径
BASIC_PATH = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(BASIC_PATH)
db_path = os.path.join(BASIC_PATH,'db')
teacher_path = os.path.join(db_path,'teacher_db')

#define类型
db_type={
    1:'teacher_db',
    2:'les_db',
    3:'students_db',
    4:'class_db'
}

auth_type = {
    1:'学生',
    2:'管理员'
}

#string
condition = False

manager_name = 'admin'
manager_passwd = '1234'

welcome = '''
-------------------------%s-------------------------------
'''

welcome1 = welcome%'欢迎登录选课系统'
welcome2 = welcome%'欢迎进入选课系统'

admin_choice = '''
作为管理员,您有以下选择:
   1、添加新老师
   2、添加新课程
   3、添加新班级
   4、退出登陆
'''

noteach_choice = '''
   1、添加新教师
   2、查看现有教师
'''

students_choice ={1:'''
   1、学员注册
   2、学员登陆
   3、返回上一级
''',
                  2:'''
    1、选择班级
    2、查看班级详情
    3、查看课程情况
    4、退出登录
                  '''
                  }

main_choice =  '''
    1、管理员
    2、学生
'''

2.3 db
以一个对象为一个文件的方式存放类对象,名称为该对象的id号
例:
在这里插入图片描述
2.3.1 class_db
2.3.2 les_db
2.3.3 studengts_db
2.3.4 teacher_db

2.4 lib
2.4.1 common
存放常用且通用的函数

import uuid
from confg import settings
import os
import pickle

#获得唯一ID号
def get_id():
    m = str(uuid.uuid1())
    return m

#db_type:对象类别,db_id:对象id号,读取db包下相应的类对象,并返回
def db_fileopen_read(db_type,db_id):
    path = os.path.join(settings.db_path,db_type,db_id)
    f = open(path,'rb')
    m = pickle.load(f)
    f.close()
    return m

#将db_type类型的对象db_write,以其id号为名称存入相应数据库包中
def db_fileopen_write(db_type,db_id,db_write):
    path = os.path.join(settings.db_path,db_type,db_id)
    f = open(path,'wb')
    f.seek(0)
    f.truncate()
    pickle.dump(db_write,f)
    f.close()

#以列表的形式返回某db_type类型下所有文件的id号
def get_id_list(db_type):
    path = os.path.join(settings.db_path,db_type)
    db_list = os.listdir(path)
    n = 0
    for i in db_list:
        if i == '__init__.py':
            del db_list[n]
        n += 1
    return db_list

#以列表形式返回某db_type类型下的所有类对象
def get_object(db_type):
    db_list = get_id_list(db_type)
    b = []
    for i in db_list:
        obj =db_fileopen_read(db_type,i)
        b.append(obj)
    return b

#以列表形式返回某db_type类型下所有对象的名字
def get_obj_name(db_type):
    m = get_object(db_type)
    # print(m)
    obj_name=[]
    for i in m:
        obj_name.append(i.name)
    return obj_name

#展示列表信息
def show_list(li):
    for i in li:
        print(i)

#通过类对象的名字返回类对象本身
def name_obj(db_type,name):
    obj = get_object(db_type)
    for i in obj:
        if name == i.name:
            return i
        else:
            return False

#验证密码是否正确
def athu(db_passwd,passwd):
    if db_passwd == passwd:
        settings.condition =True
        print(settings.welcome1)
        return True
    else:
        return False

2.4.2 modle
定义类,类中常有的静态方法:

get_all:得到该类下的所有对象

get_name:得到该类下的所有对象名称

普通方法:

introduction:介绍类对象的基本情况

from confg import settings
from lib import common

    class Teacher:
        def __init__(self,name,sex,age):
            self.name = name
            self.age = age
        self.sex = sex
        self.id = common.get_id()
    @staticmethod
    def get_all():
        a= common.get_object(settings.db_type[1])
        return a
    @staticmethod
    def get_name():
        b = common.get_obj_name(settings.db_type[1])
        return b

class Classes:
    def __init__(self,name,lesson):
        self.name = name
        self.lesson = lesson
        self.id = common.get_id()
    @staticmethod
    def get_all():
        a= common.get_object(settings.db_type[4])
        return a
    @staticmethod
    def get_name():
        b = common.get_obj_name(settings.db_type[4])
        return b
    def introduction(self):
        print('班级名称:%s'
              %self.name)
        print('班级应上的课程有:')
        for i in self.lesson:
            print(i.name)
    def lesson_list(self):
        les_name_list = []
        for i in self.lesson:
            les_name_list.append(i.name)
        return les_name_list


class Student:
    def __init__(self,name,passwd,sex,age):
        self.name = name
        self.passwd = passwd
        self.sex = sex
        self.age = age
        self.id = common.get_id()
        self.cls = None

class Lessons:
    def __init__(self,name,time,cost,teacher):
        self.name = name
        self.time = time
        self.cost = cost
        self.teacher = teacher
        self.id = common.get_id()
    @staticmethod
    def get_all():
        b = common.get_object(settings.db_type[2])
        return b
    @staticmethod
    def get_name():
        a = common.get_obj_name(settings.db_type[2])
        return a
    def introduction(self):
        print('''课程详情:
                 课程名称:%s
                 上课时间:%s
                 上课老师:%s'''%(self.name,self.time,self.teacher.name))

2.5 src
2.5.1 admin.py
管理员视图

from confg import settings
from lib import modle,common

def create_tea():
    while 1:
        name  = input('请输入新加入老师的姓名:')
        sex = input('请输入%s老师的性别:'%name)
        age = input('请输入%s老师的年龄:'%name)
        new_teacher = modle.Teacher(name,sex,age)
        common.db_fileopen_write(settings.db_type[1],new_teacher.id,new_teacher)
        print('成功录入新老师%s'%name)
        m = int(input('继续录入新老师?(是:1;否:0)'))
        if m == 0:
            break
        return new_teacher

def create_les():
    while 1:
        name = input('请输入新课程的名称:')
        time = input('新课程的开课时间:')
        cost = input('一学期的费用:')
        tea = modle.Teacher.get_all()
        tea_name = input('请输入授课老师:')
        teanamelist = modle.Teacher.get_name()
        if tea_name not in teanamelist:
            print('系统中没有%s老师的记录,您有以下选择:%s'%(tea_name,settings.noteach_choice))
            c1 = input('请选择:')
            if c1 == '1':
                new_tea = create_tea()
                new_les = modle.Lessons(name,time,cost,new_tea)
                common.db_fileopen_write(settings.db_type[2],new_les.id,new_les)
                print('成功添加新课程')
            elif c1 == '2':
                print('有%s位老师可以选择,如下:'%len(tea))
                for i in teanamelist:
                    print(i)
                tea_choice = input('请选择:')
                teacher = modle.Teacher.get_all()
                cho_tea = teacher[tea_choice]
                new_les = modle.Lessons(name,time,cost,cho_tea)
                common.db_fileopen_write(settings.db_type[2],new_les.id,new_les)
                print('成功添加新课程')
        else:
            for i in tea:
                if tea_name == i.name:
                    common.db_fileopen_write(settings.db_type[2],i.id,i)
                    print('成功添加新课程')
        m = int(input('继续添加新课程?(是:1;否:0)'))
        if m == 0:
            break

def creat_class():
    while 1:
        cls_name = input('请输入新班级的名字')
        print('有以下课程可供选择:')
        les_name = modle.Lessons.get_name()
        common.show_list(les_name)
        les_list = []
        while 1:
            les_choice = input('请选择(输入exit退出):')
            if les_choice == 'exit':
                break
            else:
                if les_choice in les_name:
                    les_list.append(les_choice)
                else:
                    print('%s课程还未存在。'%les_choice)
        les_obj_list = modle.Lessons.get_all()
        cls_les_list = []
        for i in les_obj_list:
            if i.name in les_list:
                cls_les_list.append(i)
        new_cls = modle.Classes(cls_name,cls_les_list)
        common.db_fileopen_write(settings.db_type[4],new_cls.id,new_cls)
        print('成功添加班级!')
        m = int(input('继续添加班级?(是:1;否:0)'))
        if m == 0:
            break

def admin_main():
    settings.condition = True
    print(settings.welcome1)
    while 1 :
        print(settings.admin_choice)
        m=int(input('请选择:'))
        if m == 1:
            create_tea()
        elif m == 2:
            create_les()
        elif m == 3:
            creat_class()
        elif m == 4:
            settings.condition = False
            break

2.5.2 student.py
学生视图

from confg import settings
from lib import modle,common
import re


def student_zhuce():
    while 1 :
        name= input('请输入您的姓名:')
        passwd1 = input('请输入您的密码:')
        n = 3
        m = 0
        while n>0:
            passwd2 = input('请再次输入您的密码:')
            if passwd1 == passwd2:
                xinxi = input('请输入您的基本信息:性别以及年龄,请以‘,’分隔')
                sex,age = re.split(r',',xinxi)
                new_student = modle.Student(name,passwd1,sex,age)
                common.db_fileopen_write(settings.db_type[3],new_student.id,new_student)
                m = 1
                print('注册成功!')
                break
            else:
                print('输入错误')
                n -= 1
        if m == 1:
            break

def auth_stu():
    if settings.condition is not False:
        print('您已登录')
    else:
        stu_name = input('请输入您的名字:')
        stu_passwd = input('请输入您的密码')
        obj = common.name_obj(settings.db_type[3],stu_name)
        if obj is not False:
            passwd = obj.passwd
            stu = common.athu(passwd,stu_passwd)
            if stu:
                print('登陆成功')
                settings.condition = True
                return obj
            else:
                print('登陆失败')
                return False
        else:
            print('登录失败')
            return False


def stu_cls(stu):
     if stu.cls is None:
            print('现有以下班级:')
            cls_list = modle.Classes.get_name()
            for i in cls_list:
                print(i)
            choice_cls = ''
            while 1:
                choice_cls = input('请输入选择的班级')
                if choice_cls not in cls_list:
                    print('输入错误,请重新输入')
                else:
                    break
            cls = common.name_obj(settings.db_type[4],choice_cls)
            stu.cls = cls
            common.db_fileopen_write(settings.db_type[3],stu.id,stu)
            print('选择成功')
     else:
            print('您已经在%s班级中了'%stu.cls.name)

def see_lesson(stu):
    print('您所要上的课程:')
    for i in stu.cls.lesson:
        print(i.name)
    while 1:
        see_les = input('请输入您想要查看的课程:(输入exit退出)')
        less_name_list = stu.cls.lesson_list()
        if see_les == 'exit':
            break
        elif see_les in less_name_list:
            see_les_obj = common.name_obj(settings.db_type[2],see_les)
            see_les_obj.introduction()
            break
        else:
            print('输入错误')

def student_main():
    while 1:
        print('作为学生,您有以下选择:%s'%settings.students_choice[1])
        stu_choice = int(input('请输入您的选择:'))
        if stu_choice == 1:
            student_zhuce()
        elif stu_choice == 2:
            stu = auth_stu()
            if stu is not False:
                while 1:
                    print('你有以下选择:%s'%settings.students_choice[2])
                    stu_choice2 = int(input('请选择:'))
                    if stu_choice2 == 1:
                        stu_cls(stu)
                    elif stu_choice2 == 2:
                        if stu.cls is not None:
                            stu.cls.introduction()
                        else:
                            print('您还未选择班级')
                    elif stu_choice2 == 3:
                        if stu.cls is not None:
                            see_lesson(stu)
                        else:
                            print('您还未选择班级,无法查看课程')
                    elif stu_choice2 == 4:
                        settings.condition = False
                        break
                    else:
                        print('输入错误')

        elif stu_choice == 3:
            break
        else:
            print('输入错误')

2.5.3 main.py
主逻辑视图

from src import admin
from src import student
from confg import settings

def main():
    print(settings.welcome2)
    while 1:
        print(settings.main_choice)
        shengfen = int(input('您的身份是:'))
        if shengfen == 1:
            admin.admin_main()
        elif shengfen == 2:
            student.student_main()

三、运行结果
主界面
在这里插入图片描述
3.1 管理员视图
在这里插入图片描述

3.1.1 添加新老师
在这里插入图片描述

3.1.2 添加新课程
在这里插入图片描述

3.1.3 添加新班级
在这里插入图片描述

3.2 学生视图
在这里插入图片描述

3.2.1 学员注册

3.2.2 学员登录
在这里插入图片描述

3.2.3 选择班级
在这里插入图片描述

3.2.4 查看班级详情
在这里插入图片描述

3.2.5 查看课程情况
在这里插入图片描述

3.3 返回上一级
在这里插入图片描述

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值