• 第六周作业——选课系统


    选课系统:

    角色:学校、学员、课程、讲师

    要求:

    1. 创建北京、上海 2 所学校

    2. 创建linux , python , go 3个课程 , linuxpy 在北京开, go 在上海开

    3. 课程包含,周期,价格,通过学校创建课程

    4. 通过学校创建班级, 班级关联课程、讲师

    5. 创建学员时,选择学校,关联班级

    5. 创建讲师角色时要关联学校,

    6. 提供两个角色接口

    6.1 学员视图, 可以注册, 交学费, 选择班级,

    6.2 讲师视图, 讲师可管理自己的班级, 上课时选择班级, 查看班级学员列表 , 修改所管理的学员的成绩

    6.3 管理视图,创建讲师, 创建班级,创建课程

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

    1、管理员默认帐号admin密码为admin
    2、所有现有学生,老师的用户名会自动显示清单,密码跟用户名一致
    如lzd,id也为lzd
    3、目录结构
    选课作业
    ├── zuoye #目录
    │ ├── bin # 执行文件 目录
    │ │ ├── start.py # 主程序 执行程序
    │ │
    │ ├── conf #配置文件
    │ │ └── settings.py
    │ ├── src #主要程序逻辑都 在这个目录 里
    │ │ ├── core.py #核心代码程序
    ----── db #数据库
    ├── class #班级文件
    └── course #课程文件
    └── school #学校文件
    └── student #学生文件
    └── teacher #老师文件

    start.py

    #!/usr/bin/env python
    #-*- coding:utf-8 -*-
    #Author:lzd
    
    import sys,os
    BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    sys.path.append(BASE_DIR)
    from src import core
    
    if __name__ == '__main__':
        core.func()

    setting.py

    #!/usr/bin/env python
    #-*- coding:utf-8 -*-
    #Author:lzd
    import os
    BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    
    STUDENTDB_PATH=BASE_DIR+r'dbstudent'
    TEACHERDB_PATH=BASE_DIR+r'db	eacher'
    COURSE_PATH=BASE_DIR+r'dbcourse'
    SCHOOL_PATH=BASE_DIR+r'dbschool'
    CLASS_PATH=BASE_DIR+r'dbclass'

    core.py

    #!/usr/bin/env python
    #-*- coding:utf-8 -*-
    #Author:lzd
    
    from src import models
    from conf import settings
    import pickle
    import os
    
    s1 = models.School('北京校区', '中国北京')
    s2 = models.School('上海校区', '中国上海')
    python = s1.create_course('Python', 19800, '6mons')
    linux = s1.create_course('Linux', 17800, '4mons')
    go = s2.create_course('Go', 9000, '4mons')
    school_obj=None
    
    def func():
        while True:
            print('欢迎进入LZD选课系统'.center(30,'*'),
                      '
    1.北京校区
    '
                      '2.上海校区
    '
                      '3.退出程序')
            res=input('请选择学校: ').strip()
            global school_obj
            if res == '1':
                school_obj=s1
            elif res == '2':
                school_obj=s2
            elif res == '3':
                break
            else:
                print('输入错误')
                continue
    
            while True:
                print('请选择视图'.center(30,'*'))
                cmd=input('1.学生视图
    '
                          '2.老师视图
    '
                          '3.管理员视图
    '
                          '4.返回上一级
    '
                          '5.退出选课系统: ').strip()
                if cmd == '1':
                    student_view()
                elif cmd == '2':
                    teacher_view()
                elif cmd == '3':
                    admin_view()
                elif cmd == '4':
                    break
                elif cmd == '5':
                    exit()
                else:
                    print('输入错误,请重新输入!')
                    continue
        # return school_obj
    
    def student_view():
        '''学生视图'''
        while True:
            tag = True
            print('欢迎进入学生视图,请选择功能'.center(30,'*'))
            cmd=input('1.注册信息
    '
                      '2.登录
    '                          #循环选择功能
                      '3.返回上级
    '
                      '4.退出系统: ').strip()
            if cmd == '1':
                while True:
                    print('欢迎注册学生信息'.center(30, '-'))
                    name=input('name: ').strip()
                    name_id=input('name_id: ').strip()      #注册信息
                    age=input('age: ').strip()
                    sex=input('sex: ').strip()
                    if not name:
                        print('姓名必填')
                        continue
                    break
                student_obj=models.Student(name,name_id,age,sex)
                student_obj.save()
                print("%s注册成功!"%name)
            elif cmd == '2':
                while tag:
                    print('请登录'.center(30, '-'))
                    res = os.listdir(settings.STUDENTDB_PATH)
                    print("当前所有学生用户名清单如下:")
                    for item in res:
                        file_path = r'%s\%s' % (settings.STUDENTDB_PATH, item)
                        with open(file_path, 'rb') as f:
                            student_obj = pickle.load(f)
                            print(student_obj.name)
    
                    name = input('请输入用户名: ')
                    name_id = input('请输入用户id: ')                #登录,如果数据库中有这个人的文件,继续,否则打印用户不存在
                    for item in res:
                        file_path = r'%s\%s' % (settings.STUDENTDB_PATH, item)
                        with open(file_path, 'rb') as f:
                            student_obj = pickle.load(f)
                            if name == student_obj.name and name_id == student_obj.user_id:
                                while tag:
                                    cmd=input('登录成功
    '
                                          '1.交学费
    '
                                          '2.选择班级
    '
                                          '3.返回上一级
    '
                                          '4.退出系统
    '
                                          '请选择功能: ').strip()
                                    if cmd == '1':          #交学费
                                        money = int(input('请输入缴纳金额: '))
                                        student_obj.tuition+=money
                                        print('缴纳成功,学费余额为%s' %student_obj.tuition)
                                        student_obj.save()
                                    elif cmd == '2':        #选择班级
                                        res = os.listdir(settings.CLASS_PATH)
                                        for item in res:
                                            file_path = r'%s\%s' % (settings.CLASS_PATH, item)
                                            with open(file_path, 'rb') as f:
                                                class_obj = pickle.load(f)
                                                print('班级名称:<%s> 班级所学课程<%s>' % (class_obj.name, class_obj.course))
                                        course_cmd = input('请选择班级:')
                                        res = os.listdir(settings.CLASS_PATH)
                                        for item in res:
                                            file_path = r'%s\%s' % (settings.CLASS_PATH, item)
                                            with open(file_path, 'rb') as f:
                                                class_obj = pickle.load(f)
                                            if course_cmd == class_obj.name:
                                                for i in class_obj.student:
                                                    if student_obj.id == i.id:
                                                        print('班级已有此人')         #如果班级里已有此人,则结束
                                                        tag=False
                                                    else:
                                                        class_obj.student.append(student_obj)
                                                        student_obj.student_class.append(class_obj)
                                                        student_obj.save()
                                                        class_obj.save()
                                                        print('班级添加成功')
                                                        student_obj.tell_info()
                                    elif cmd == '3':
                                        tag=False
                                    elif cmd == '4':
                                        exit()
                                    else:
                                        continue
                    else:
                        print('用户不存在')
                        tag = False
            elif cmd == '3':
                return
            elif cmd == '4':
                exit()
            else:continue
    
    def teacher_view():
        '''讲师视图'''
        tag = True  #添加一个标志位
        while tag:
    
            res = os.listdir(settings.TEACHERDB_PATH)
            print("当前所有老师用户名清单如下:")
            for item in res:
                file_path = r'%s\%s' % (settings.TEACHERDB_PATH, item)
                with open(file_path, 'rb') as f:
                    teacher_obj = pickle.load(f)
                    print(teacher_obj.name)
            print('请登录'.center(30, '-'))
            name = input('请输入用户名: ').strip()
            name_id = input('请输入用户id: ').strip()
            for item in res:
                file_path = r'%s\%s' % (settings.TEACHERDB_PATH, item)
                with open(file_path, 'rb') as f:
                    teacher_obj = pickle.load(f)
                    if name == teacher_obj.name and name_id == teacher_obj.user_id:
                        while tag:
                            print('欢迎进入讲师视图'.center(30,'*'))
                            cmd=input('1.显示老师当前信息
    '
                                      '2.选择上课班级
    '
                                      '3.修改学员成绩
    '
                                      '4.返回上一级
    '
                                      '5.退出系统
    '
                                      '请选择功能: ').strip()
                            if cmd == '1':
                                teacher_obj.tell_info()
                            elif cmd == '2':
                                res = os.listdir(settings.CLASS_PATH)
                                for item in res:
                                    file_path = r'%s\%s' % (settings.CLASS_PATH, item)
                                    with open(file_path, 'rb') as f:
                                        class_obj = pickle.load(f)
                                        print('班级名称:<%s> 班级所学课程<%s>' % (class_obj.name, class_obj.course))
                                class_cmd = input('请选择班级:')
                                res = os.listdir(settings.CLASS_PATH)
                                for item in res:
                                    file_path = r'%s\%s' % (settings.CLASS_PATH, item)
                                    with open(file_path, 'rb') as f:
                                        class_obj = pickle.load(f)
                                    if class_obj.name == class_cmd:
                                        class_obj.teacher.append(teacher_obj)
                                        teacher_obj.teacher_class.append(class_obj)
                                        teacher_obj.save()
                                        class_obj.save()
                                        teacher_obj.tell_info()
                            elif cmd == '3':
                                res = os.listdir(settings.STUDENTDB_PATH)
                                print("当前所有学生用户名清单如下:")
                                for item in res:
                                    file_path = r'%s\%s' % (settings.STUDENTDB_PATH, item)
                                    with open(file_path, 'rb') as f:
                                        student_obj = pickle.load(f)
                                        print(student_obj.name)
                                name=input('请输入想要修改的学生姓名:').strip()
                                name_id=input('请输入学生id: ').strip()
                                num=int(input('请输入要修改的成绩: ').strip())
                                res = os.listdir(settings.STUDENTDB_PATH)
                                for item in res:
                                    file_path = r'%s\%s' % (settings.STUDENTDB_PATH, item)
                                    with open(file_path, 'rb') as f:
                                        student_obj = pickle.load(f)
                                        if name == student_obj.name and name_id == student_obj.user_id:
                                            student_obj.grade+=num
                                            print('%s 的成绩已修改为 %s' %(student_obj.name,num))
                                            student_obj.save()
                            elif cmd == '4':
                                tag=False
                            elif cmd == '5':
                                exit()
                            else:
                                continue
            else:
                print("老师的id输入错误~")
    def admin_view():
        '''管理员视图'''
        print('请用管理员的身份登录,用户名:"admin",密码:"admin"'.center(30,'*'))  #管理员有固定的用户名密码
        name=input('请输入用户名: ')
        password=input('请输入密码: ')
        if name == 'admin' and password == 'admin':
            while True:
                print('欢迎进入管理员视图'.center(30,'-'))
                cmd=input('1.创建讲师
    '
                          '2.创建班级
    '
                          '3.创建课程
    '
                          '4.返回上一级
    '
                          '5.退出系统
    '
                          '请选择功能: ')
                if cmd == '1':
                    name=input('请输入讲师姓名: ').strip()
                    user_id=input('请输入讲师id: ').strip()
                    age=input('请输入讲师年纪: ').strip()
                    sex=input('请输入讲师性别: ').strip()
                    salary=input('请输入讲师薪资: ').strip()
                    if not name:
                        print('名字不能为空')
                        continue
                    teacher = school_obj.create_teacher(name,user_id,age,sex,salary)
                    teacher.save()
                    school_obj.save()
                    print('%s 老师的信息创建成功' %teacher.name)
                    teacher.tell_info()
                elif cmd == '2':
                    name = input('请输入班级名: ').strip()
                    course = input('请输入班级课程: ').strip()
                    if not name or not course:
                        print('输入错误')
                        continue
                    class_obj=school_obj.create_class(name,course)
                    class_obj.save()
                    school_obj.save()
                    print('%s 班级创建成功' %class_obj.name)
                    class_obj.tell_info()
                elif cmd == '3':
                    course = input('请输入课程名字: ').strip()
                    price = input('请输入课程价钱: ').strip()
                    period = input('请输入课程周期: ').strip()
                    if not course or not price or not period:
                        print('输入错误')
                        continue
                    course_obj = school_obj.create_course(course,price,period)
                    course_obj.save()
                    school_obj.save()
                    print('%s 课程创建成功' %course_obj.course)
                    course_obj.tell_course()
                elif cmd == '4':
                    return
                elif cmd == '5':
                    exit()
                else:
                    continue
        else:
            print('用户名密码错误')
    
    if __name__ == '__main__':
        func()

    models.py

    #!/usr/bin/env python
    #-*- coding:utf-8 -*-
    #Author:lzd
    
    from conf import settings
    import pickle
    import hashlib
    import os
    
    class School:
        '''学校类'''
        def __init__(self,school_name,school_site):
            self.school_name=school_name
            self.school_site=school_site
            self.school_courses=[]  #为学校所有的课程创建一个空列表
            self.school_terchers=[] #创建一个空列表存放老师
            self.school_class=[]    #创建一个空列表存放班级
    
        def create_class(self,name,course):
            '''创建班级'''
            class_obj=Class(name,course)
            self.school_class.append(class_obj)
            return class_obj
    
        def create_course(self,course,price,period):
            '''创建课程'''
            course_obj=Course(course,price,period)
            self.school_courses.append(course_obj)
            return course_obj
    
        def create_teacher(self,name,user_id,age,sex,salary):
            '''创建老师'''
            teacher_obj=Teacher(name,user_id,age,sex,salary)
            self.school_terchers.append(teacher_obj)
            return teacher_obj
    
        def create_student(self,name,user_id,age,sex,classroom):
            '''创建学生'''
            student_obj=Student(name,user_id,age,sex)
            classroom.student.append(student_obj)
            return student_obj
    
        def save(self):
            '''保存信息'''
            with open(r'%s\%s' %(settings.SCHOOL_PATH,self.school_name),'wb') as f:
                pickle.dump(self,f)
    
    class Class:
        '''班级类'''
        def __init__(self,name,course):
            self.name=name
            self.teacher=[]
            self.course=course
            self.student=[]
        def tell_info(self):
            '''查看班级信息'''
            print('''
            -------%s info---------
            name:%s
            teacher:%s
            course:%s
            student:%s
            ''' %(self.name,self.name,self.teacher,self.course,self.student))
        def save(self):
            '''保存班级信息'''
            with open(r'%s\%s' %(settings.CLASS_PATH,self.name),'wb') as f:
                pickle.dump(self,f)
    
    class Course:
        '''课程类'''
        def __init__(self,course,price,period):
            self.course=course
            self.price=price
            self.period=period
        def tell_course(self):
            '''查看课程信息'''
            print('''
            --------%s info---------
            COURSE:%s
            PRICE:%s
            PERIOD:%s
            ''' %(self.course,self.course,self.price,self.period))
        def save(self):
            '''保存课程信息'''
            with open(r'%s\%s' %(settings.COURSE_PATH,self.course),'wb') as f:
                pickle.dump(self,f)
    
    class People:
        def __init__(self,name,user_id,age,sex):
            self.user_id=user_id
            self.name=name
            self.age=age
            self.sex=sex
            self.courses=[]
            self.id=self.create_id()
    
        def tell_crouse(self):
            '''查看课程'''
            for obj in self.courses:
                obj.tell_crouse()
    
        def create_id(self):
            '''加密'''
            m = hashlib.md5()
            m.update(self.name.encode('utf-8'))
            m.update(str(self.user_id).encode('utf-8'))
            return m.hexdigest()
    
    class Teacher(People):
        def __init__(self,name,user_id,age,sex,salary):
            People.__init__(self,name,user_id,age,sex)
            self.salary=salary
            self.teacher_class=[]
    
        def tell_info(self):
            '''查看老师信息'''
            print('''
            --------%s info---------
            NAME:%s
            ID:%s
            AGE:%s
            SEX:%s
            SAL:%s
            CLASS:%s
            ''' %(self.name,self.name,self.user_id,self.age,self.sex,self.salary,self.teacher_class))
        def save(self):
            '''保存老师信息'''
            with open(r'%s\%s' % (settings.TEACHERDB_PATH, self.id), 'wb') as f:
                pickle.dump(self, f)
    
    class Student(People):
        def __init__(self,name,user_id,age,sex):
            People.__init__(self,name,user_id,age,sex)
            self.student_class=[]
            self.tuition=0
            self.grade=0
        def __str__(self):
            return self.name
        def tell_info(self):
            '''查看学生信息'''
            print('''
            ---------%s info----------
            NAME:%s
            ID:%s
            AGE:%s
            SEX:%s
            CLASS:%s
            TUITION:%s
            GRADE:%s
            ''' %(self.name,self.name,self.id,self.age,self.sex,self.student_class,
                  self.tuition,self.grade))
        def save(self):
            '''保存学生信息'''
            with open(r'%s\%s' %(settings.STUDENTDB_PATH,self.id),'wb') as f:
                pickle.dump(self,f)
  • 相关阅读:
    QT代理Delegates使用实例(三种代理控件)
    delphi中的各种文件类型介绍
    猎豹傅盛:老大老二打仗老三就没了 不要边缘化
    老调重弹,大学有没有意义(没有利用好时间,读什么都没有用)
    应聘linux/ARM嵌入式开发岗位
    气死人不偿命,Q_OBJECT导致的C++报错,而且还看不明白(#ifdef没控制好,导致什么都不认识了)
    坚果云创业团队访谈:我们 DIY 云存储(不要过度关注竞争对手,尤其当我们还是小公司的时候)
    中国版dropbox“坚果云”和它背后的团队故事(大的优势就在于他为用户提供了设定多个文件夹的权利)
    一个灵巧的Delphi多播实事件现方案
    雷军的B面:那些赔到血本无归的失败投资案例
  • 原文地址:https://www.cnblogs.com/itfat/p/7563449.html
Copyright © 2020-2023  润新知