老男孩Day7作業:選課系統


1、作業需求:
角色:學校、學員、課程、講師

1. 創建北京、上海 2 所學校
2. 創建linux , python , go 3個課程 , linux\py 在北京開, go 在上海開
3. 課程包含,周期,價格,通過學校創建課程 
4. 通過學校創建班級, 班級關聯課程、講師
5. 創建學員時,選擇學校,關聯班級
5. 創建講師角色時要關聯學校, 
6. 提供兩個角色接口
7. 學員視圖, 可以注冊, 交學費, 選擇班級,
8. 講師視圖, 講師可管理自己的班級, 上課時選擇班級, 查看班級學員列表 ,修改所管理的學員的成績 
9. 管理視圖,創建講師, 創建班級,創建課程
10. 上面的操作產生的數據都通過pickle序列化保存到文件里

2、流程圖

3、目錄結構

 

4、代碼區

bin目錄下的start.py程序執行文件

# -*- coding:utf-8 -*-
# Author:D.Gray
import os,sys
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(BASE_DIR)
from core import main
if __name__ == '__main__':
    start = main.Count()
    start.run()
start.py

 conf目下的setting.py系統配置文件

# -*- coding:utf-8 -*-
# Author:D.Gray
import os,pickle
#數據處理路徑
#BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
BASE_DIR = "\\".join(os.path.abspath(os.path.dirname(__file__)).split("\\")[:-1])
data_path = os.path.join(BASE_DIR,"databases")
#print(data_path)

#數據文件名
school_file = os.path.join(data_path,"school")
#print(school_file)
setting.py

core目錄下的main.py主目錄程序文件

# -*- coding:utf-8 -*-
# Author:D.Gray
import os,shelve,sys
from conf import setting
from src.school import School
from src.classroom import Classroom
from src.course import Course
from src.student import Student
from src.teacher import Teacher

class Count(object):
    '''
    主目錄運行類
    '''
    exit_flag = False
    def run(self):
        menu = '''            1、學生視圖
            2、教師視圖
            3、學校視圖'''
        while True:
            print("\033[35;1m歡迎來的選課系統CRM\033[0m".center(50,"="))
            print(menu)
            user_option = input("\033[34;1m請選擇視圖...按Q退出>>>:\033[0m").strip()
            if user_option == "1":
                Student_view()
            elif user_option == "2":
                Teacher_view()
            elif user_option == "3":
                School_view()
            elif user_option.capitalize() == "Q":
                break
            else:
                print("\033[31;1m請選擇有效視圖\033[0m")

class Teacher_view(object):
    '''
    講師視圖類
    '''
    def __init__(self):
        if os.path.exists(setting.school_file + '.dat'):
            self.school_file = shelve.open(setting.school_file)
            self.teacher_manager()
            self.school_file.close()
        else:
            print("\033[31;1m無數據文件請先創建學校\033[0m")
            exit()

    def teacher_manager(self):
        '''
        定義一個講師管理模塊
        :return:
        '''
        while True:
            for sch_name in self.school_file:
                print("學校名稱【%s】"%sch_name)
            sch_option = input('請選擇管理的學校按b返回>>>:').strip()
            if sch_option in self.school_file:
                self.sch_option = sch_option
                self.sch_obj = self.school_file[sch_option]
                print("學校地址【%s】"%self.sch_obj.sch_addr)
                teaname_option = input('請輸入登錄講師姓名>>>:').strip()
                while True:
                    if teaname_option in self.sch_obj.sch_teacher:
                        menu = '''                        歡迎【%s】來到教師中心
                        1、查看講師信息  show_teacher
                        2、查看班級學員  show_classroom
                        3、退出    exit
                        '''%teaname_option
                        print(menu)
                        menu_option = input('請輸入操作命令按b返回>>>:').strip()
                        if hasattr(self,menu_option):
                            getattr(self,menu_option)(teaname_option)
                        elif menu_option == 'b':
                            break
                        else:
                            print('\033[31;1m請輸入有效操作命令\033[0m')
                    else:
                        print("\033[31;1m講師不存在請先創建\033[0m")
                        break
            elif sch_option == "b":
                break
            else:
                print('\033[31;1m請輸入有效學校名\033[0m')

    def show_teacher(self,*args):
        '''
        查看班級模塊
        :return:
        '''
        self.sch_obj.show_teacher(*args)
        if len(self.sch_obj.sch_classroom) == 0:
            print('\033[31;1m該講師暫無班級\033[0m')

    def show_classroom(self,teaname_option):
        self.sch_obj.show_tea_clsinfo(teaname_option)
        if len(self.sch_obj.sch_classroom) == 0:
            print('\033[31;1m該講師暫無班級\033[0m')

    def exit(self,*args):
        '''
        退出程序模塊
        :return:
        '''
        self.school_file.close()
        exit("\033[32;1m歡迎下次使用學員管理系統\033[0m")


class School_view(object):
    '''
    學校管理視圖:根據校區創建課程、班級、教師信息
    '''
    def __init__(self):
        if os.path.exists(setting.school_file + ".dat"):
            self.school_file = shelve.open(setting.school_file)
            self.school_manager()
            self.school_file.close()
        else:
            print("\033[31;1m沒有數據文件請先創建\033[0m")
            self.init_school()
            self.school_manager()
            self.school_file.close()

    def init_school(self):
        '''
        創建學校的模塊
        :return:
        '''
        self.school_file = shelve.open(setting.school_file)
        self.school_file["北京"] = School('北京',"北京總校")
        self.school_file["上海"] = School("上海","上海分校")

    def school_manager(self):
        '''
        定義一個學校管理模塊
        :return:
        '''
        while True:
            for sch_name in self.school_file:
                print("學校名稱【%s】"%(sch_name))
            sch_option = input("請選擇管理校區按b返回>>>:").strip()
            if sch_option in self.school_file:
                self.sch_option = sch_option
                self.sch_obj = self.school_file[sch_option]
                print("學校地址【%s】"%self.sch_obj.sch_addr)
                while True:
                    menu = u'''                        歡迎來到老男孩【%s】校區
                        1、添加課程  add_course
                        2、添加班級  add_classroom
                        3、添加講師  add_teacher
                        4、查看班級  show_classroom
                        5、查看課程  show_course
                        6、查看講師  show_teacher
                        7、退出    exit
                    ''' %(self.sch_obj.sch_name)
                    print(menu)
                    menu_option = input("請選擇以上操作命令按b返回>>>:").strip()
                    if hasattr(self,menu_option):
                        getattr(self,menu_option)()
                    else:
                        print("\033[31;1m請輸入有效命令\033[0m")
            elif sch_option == 'b':
                break
            else:
                print('\033[31;1m請選擇正確的學校名\033[0m')

    def add_course(self):
        '''
        添加課程模塊
        :return:
        '''
        add_course_name = input("請輸入課程名稱>>>:")
        add_course_pice = input("請輸入課程價格>>>:")
        add_course_time = input('請輸入課程周期>>>:')
        if add_course_name in self.sch_obj.sch_course:
            print('\033[31;1m課程已存在\033[0m')
            # self.sch_obj.create_course(add_course_name,add_course_pice,add_course_time)
            # print("課程更新成功")
        else:
            self.sch_obj.create_course(add_course_name,add_course_pice,add_course_time)
            print('\033[32;1m課程添加成功\033[0m')
        self.school_file.update({self.sch_option:self.sch_obj})

    def add_classroom(self):
        '''
        添加教師模塊
        :return:
        '''
        add_cla_name = input("請輸入班級名稱>>>:")
        add_clacourse_name = input("請輸入關聯課程名稱>>>:")
        if add_cla_name not in self.sch_obj.sch_classroom:  #判斷需添加的教室名稱 不在學校教師方法中
            if add_clacourse_name in self.sch_obj.sch_course:   #判斷 需添加的教室課程名稱 在學校課程中
                class_course_obj = self.sch_obj.sch_course[add_clacourse_name]  #將需添加的課程名稱 添加到班級中
                self.sch_obj.create_classroom(add_cla_name,class_course_obj)
                print('\033[32;1m班級添加成功\033[0m')
                self.school_file.update({self.sch_option:self.sch_obj})
            else:
                print("\033[31;1m課程不存在\033[0m")
        else:
            print("\033[31;1m班級已存在\033[0m")

    def add_teacher(self):
        '''
        添加教師模塊
        :return:
        '''
        add_teacher_name = input('請輸入招聘老師姓名>>>:').strip()
        add_teacher_slary = input('請輸入老師薪資>>>:').strip()
        teacher_class_name = input('請輸入老師關聯班級>>>:').strip()
        if teacher_class_name in self.sch_obj.sch_classroom:   #判斷輸入的班級名稱是否在sch_classroom中
            teacher_class_obj = self.sch_obj.sch_classroom[teacher_class_name]  #將輸入的班級名稱添加到學校教師字典中
            if add_teacher_name not in self.sch_obj.sch_teacher: #判斷輸入講師名稱是否在sch_teacher中
                self.sch_obj.create_teacher(add_teacher_name,add_teacher_slary,teacher_class_name,teacher_class_obj)
                #在添加講師模塊中加入 add_teacher_name,add_teacher_salary,teacher_class_name,teacher_class_obj
                print("\33[32;1m新講師招聘成功\33[0m")
            else:
                self.sch_obj.update_teacher(add_teacher_name,teacher_class_name,teacher_class_obj)
                print("\33[32;1m講師已經存在,信息更新完成\33[0m")
            self.school_file.update({self.sch_option:self.sch_obj})
        else:
            print("\33[31;1m系統錯誤:關聯的班級不存在\33[0m")

    def show_course(self):
        '''
        查看課程模塊
        :return:
        '''
        self.sch_obj.show_course()
        if len(self.sch_obj.sch_course) == 0:
            print("\033[31;1m該校區暫無課程\033[0m")

    def show_classroom(self):
        '''
        查看教室模塊
        :return:
        '''
        self.sch_obj.show_classroom()
        if len(self.sch_obj.sch_classroom) == 0:
            print("\033[31;1m該校區暫無班級\033[0m")

    def show_teacher(self):
        '''
        查看教師模塊
        :return:
        '''
        self.sch_obj.show_teacher()
        if len(self.sch_obj.sch_teacher) == 0:
            print("\033[31;1m該校區暫無教師\033[0m")

    def exit(self):
        '''
        退出程序模塊
        :return:
        '''
        self.school_file.close()
        exit("\033[32;1m歡迎下次使用學員管理系統\033[0m")


class Student_view(object):
    '''
    學生視圖
    '''
    def __init__(self):
        if os.path.exists(setting.school_file + '.dat'):
            self.school_file = shelve.open(setting.school_file)
            self.student_manager()
            self.school_file.close()
        else:
            exit('數據文件不存在請先創建學校')

    def student_manager(self):
        while True:
            for sch_name in self.school_file:
                print('學校名稱【%s】'%sch_name)
            sch_option = input("請選擇注冊學校按b返回>>>:").strip()
            if sch_option in self.school_file:
                self.sch_option = sch_option
                self.sch_obj = self.school_file[sch_option]
                print("學校地址:【%s】"%self.sch_obj.sch_addr)
                while True:
                    menu = '''                      歡迎來到【%s】校區
                    1、查看課程  show_course
                    2、查看班級  show_classroom
                    3、注冊班級課程    add_stu
                    4、查看學生班級    show_stu_classroom
                    5、退出    exit
                    '''%self.sch_obj.sch_name
                    print(menu)
                    menu_option = input('請輸入操作命令按b返回>>>:').strip()
                    if hasattr(self,menu_option):
                        getattr(self,menu_option)()
                    elif menu_option == 'b':
                        break
                    else:
                        print('\033[31;1m請輸入有效操作命令\033[0m')
            elif sch_option == 'b':
                break
            else:
                print('\033[31;1m學校不存在\033[0m')

    def add_stu(self):
        add_stu_name = input('請輸入注冊學生姓名>>>:').strip()
        add_stu_age = input('請輸入注冊學生年齡>>>:').strip()
        add_stu_sex = input('請輸入注冊學生性別>>>:').strip()
        add_stu = input('請輸入注冊班級>>>:').strip()
        if add_stu in self.sch_obj.sch_classroom:
            if add_stu_name not in self.sch_obj.sch_student:
                self.sch_obj.create_student(add_stu_name,add_stu_age,add_stu_sex,add_stu)
                print("\033[32;1m學生注冊成功\033[0m")
                self.school_file.update({self.sch_option:self.sch_obj})
            else:
                print("\033[31;1m該學生已注冊\033[0m")
        else:
            print("\033[31;1m該班級不存在\033[0m")

    def show_course(self):
        self.sch_obj.show_course()
        if len(self.sch_obj.sch_course) == 0:
            print('\033[31;1m該校區暫無課程\033[0m')

    def show_classroom(self):
        self.sch_obj.show_classroom()
        if len(self.sch_obj.sch_classroom) == 0:
            print('\033[31;1m該校區暫無班級\033[0m')

    def show_stu_classroom(self):
        self.sch_obj.show_stu_classroom()

    def exit(self):
        self.school_file.close()
        exit("歡迎下次繼續使用課程管理系統")
mian.py

databases目錄下的數據庫文件(系統自動生成)

�csrc.school
School
q )�q}q(X
   sch_classroomq}q(X   s14qcsrc.classroom
Classroom
q)�q}q(X   cls_nameq    hX   cls_course_objq
csrc.course
Course
q)�q}q
(X   course_nameqX   pythonqX   course_priceqX   13000qX   course_timeqX       2018-2019qubX   cls_studentq}qubX   s15qh)�q}q(h    hh
hh}qubuX
   sch_courseq}qhhsX   sch_studentq}qX   sch_addrqX   北京總校qX   sch_teacherq }q!X   sch_nameq"X   北京q#ub.                                                        �csrc.school
School
q )�q}q(X
   sch_classroomq}qX
   sch_courseq}qX   sch_studentq}qX   sch_addrq    X   上海分校q
X   sch_teacherq}qX   sch_nameq
X   上海qub.                                                                                                                                                                                                                                                                                                                                           �csrc.school
School
q )�q}q(X   sch_studentq}qX   sch_addrqX   北京總校qX
   sch_classroomq}q(X   s15q    csrc.classroom
Classroom
q
)�q}q(X   cls_studentq
}qX   jayqcsrc.student
Student
q)�q}q(X   stu_ageqX   24qX   stu_nameqhX   stu_sexqX   男qubsX   cls_nameqh    X   cls_course_objqcsrc.course
Course
q)�q}q(X   course_timeqX       2018-2019qX   course_priceqX   13000q X   course_nameq!X   pythonq"ububX   s14q#h
)�q$}q%(h
}q&(X   maryq'h)�q(}q)(hX   32q*hh'hX   nvq+ubX   kyoq,h)�q-}q.(hX   23q/hh,hX   女q0ubuhh#hhubuX   sch_nameq1X   北京q2X
   sch_courseq3}q4h"hsX   sch_teacherq5}q6X   alexq7csrc.teacher
Teacher
q8)�q9}q:(X   tea_nameq;h7X   tea_salq<X   40000q=X       tea_classq>}q?(X   s15q@hX   s14qAh$uubsub.
school.dat

src目錄下的教室類文件

# -*- coding:utf-8 -*-
# Author:D.Gray
class Classroom(object):
    def __init__(self,cls_name,cls_course_obj):
        self.cls_name = cls_name
        self.cls_course_obj = cls_course_obj
        self.cls_student = {}
classroom.py

src目錄下的課程類文件

# -*- coding:utf-8 -*-
# Author:D.Gray
class Course(object):
    def __init__(self,course_name,course_price,course_time):
        self.course_name = course_name
        self.course_price = course_price
        self.course_time = course_time
course.py

src目錄下的學校類文件

# -*- coding:utf-8 -*-
# Author:D.Gray
import os
from src.course import Course
from src.classroom import Classroom
from src.teacher import Teacher
from src.student import Student

class School(object):
    def __init__(self,sch_name,sch_addr):
        self.sch_name = sch_name
        self.sch_addr = sch_addr
        self.sch_teacher = {}
        self.sch_classroom = {}
        self.sch_course = {}
        self.sch_student = {}

    def create_course(self,course_name,course_price,course_time):
        #創建課程對象
        #根據課程名稱為key,課程對象為value來建立對應關系
        sch_course_obj = Course(course_name,course_price,course_time)
        self.sch_course[course_name] = sch_course_obj

    def show_course(self):
        '''
        查看課程
        :return:
        '''
        for course_key in self.sch_course:
            show_course_obj = self.sch_course[course_key]
            print("\033[32;1m課程名稱【%s】\t課程價格【%s】\t課程周期【%s】\033[0m"
                  % (show_course_obj.course_name,show_course_obj.course_price,show_course_obj.course_time))

    # def modify_course(self,**kwargs):
    # 根據key取出課程對象
    # for course in self.sch_course:
    #     course_obj = self.sch_course[course]
    # 修改course_obj的每個值
    # 保存

    def create_classroom(self,claroom_name,course_obj):
        #添加教師
        sch_classroom_obj = Classroom(claroom_name,course_obj)
        self.sch_classroom[claroom_name] = sch_classroom_obj

    def show_classroom(self):
        #查看教師
        for claroom_key in self.sch_classroom:
            show_claroom_obj = self.sch_classroom[claroom_key]
        for teacher_key in self.sch_teacher:
            teacher_name_obj = self.sch_teacher[teacher_key]
            print("\033[32;1m班級名稱【%s】\t班級課程【%s】\t主講教師【%s】\033[0m"%(show_claroom_obj.cls_name,
                                                    show_claroom_obj.cls_course_obj.course_name
                                                                   ,teacher_name_obj.tea_name))

    def create_teacher(self,sch_tea_name,sch_tea_sal,tea_class_name,class_obj):
        '''
        添加老師
        :param sch_tea_name:
        :param sch_tea_sal:
        :param tea_class_name:
        :param class_obj:
        :return:
        '''
        sch_teacher_obj = Teacher(sch_tea_name,sch_tea_sal)
        sch_teacher_obj.add_tea_class(tea_class_name,class_obj)
        self.sch_teacher[sch_tea_name] = sch_teacher_obj

    def show_teacher(self,*args):
        '''
        查看教師信息
        :return:
        '''
        for show_teacher_key in self.sch_teacher:
            show_teacher_obj = self.sch_teacher[show_teacher_key]
            class_list = []
            for tea_class_key in show_teacher_obj.tea_class:
                class_list.append(tea_class_key)
            print("\033[32;1m講師名稱【%s】講師薪資【%s】關聯班級【%s】\033[0m"
                  %(show_teacher_obj.tea_name,
                    show_teacher_obj.tea_sal,class_list))

    def update_teacher(self,update_tea_name,update_class_name,update_class_obj):
        '''
        更新教師信息
        :param update_tea_name: 更新教師姓名
        :param update_class_name: 更新教師班級名稱
        :param update_class_obj: 更新教師班級內容
        :return:
        '''
        update_teacher_obj = self.sch_teacher[update_tea_name]
        update_teacher_obj.add_tea_class(update_class_name,update_class_obj)

    def create_student(self,sch_stu_name,sch_stu_age,sch_stu_sex,cls_name):
        '''
        創建學生
        :param sch_stu_name:學生姓名
        :param sch_stu_age: 學生年齡
        :param sch_stu_sex: 學生性別
        :param cls_name: 班級名稱
        :return:
        '''
        sch_stu_obj = Student(sch_stu_name,sch_stu_age,sch_stu_sex)
        stu_class_obj = self.sch_classroom[cls_name]
        stu_class_obj.cls_student[sch_stu_name] = sch_stu_obj
        self.sch_classroom[cls_name] = stu_class_obj

    def show_stu_classroom(self):
        #學生視圖查看班級學員信息
        for classroom_name_key in self.sch_classroom:
            cls_name_obj = self.sch_classroom[classroom_name_key]
            stu_list = []
            for cls_stu_name in cls_name_obj.cls_student:
                stu_list.append(cls_stu_name)
            print("\033[32;1m班級名稱【%s】\t班級課程【%s】\t學員【%s】\033[0m"
                  %(cls_name_obj.cls_name,cls_name_obj.cls_course_obj.course_name,stu_list))

    def show_tea_clsinfo(self,tea_name):
        '''
        教師視圖查看班級 學員信息
        :param tea_name:
        :return:
        '''
        show_teainfo_obj = self.sch_teacher[tea_name]
        for cls_info in show_teainfo_obj.tea_class:
            cls_info_obj = self.sch_classroom[cls_info]
            stu_list = []
            for stu_info in cls_info_obj.cls_student:
                stu_list.append(stu_info)
            print('\033[32;1m班級【%s】\t關聯課程【%s】\t學員【%s】\033[0m'%(cls_info_obj.cls_name,
                                              cls_info_obj.cls_course_obj.course_name,stu_list))
school.py

src目錄下的學生類文件

# -*- coding:utf-8 -*-
# Author:D.Gray
class Student(object):
    def __init__(self,stu_name,stu_age,stu_sex):
        self.stu_name = stu_name
        self.stu_age = stu_age
        self.stu_sex = stu_sex
student.py

src目錄下的講師類文件

# -*- coding:utf-8 -*-
# Author:D.Gray
class Teacher(object):
    def __init__(self,tea_name,tea_sal):
        self.tea_name = tea_name
        self.tea_sal = tea_sal
        self.tea_class = {}

    def add_tea_class(self,tea_class_name,tea_class_obj):
        self.tea_class[tea_class_name] = tea_class_obj
teacher.py

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM