Python作業選課系統(第六周)


作業需求:

角色:學校、學員、課程、講師、完成下面的要求

1. 創建北京、上海 2 所學校

2. 創建linux , python , go 3個課程 , linux\py 在北京開, go 在上海開

3. 課程包含,周期,價格,通過學校創建課程

4. 通過學校創建班級, 班級關聯課程、講師

5. 創建學員時,選擇學校,關聯班級

5. 創建講師角色時要關聯學校,

6. 提供兩個角色接口

6.1 學員視圖, 可以注冊, 交學費, 選擇班級,

6.2 講師視圖, 講師可管理自己的班級, 上課時選擇班級, 查看班級學員列表 , 修改所管理的學員的成績

6.3 管理視圖,創建講師, 創建班級,創建課程

7. 上面的操作產生的數據都通過pickle序列化保存到文件里

 

思路(簡單整理)

關聯關系:

1.學校-班級

2. 班級-課程-講師

3.講師-學校

4.學生-學校-班級-(這里隱藏了一個關聯關系就是班級還關聯這-課程-講師)

分析后得出5個類,學校,課程,班級,講師,學生,創建這5個類,然后用學校類將關聯關系理清,然后用三個視圖調用不同對象進行操作。

 

簡單流程圖:

README:

作者:yaobin 版本:示例版本 v0.1 mmp版本 :( 程序介紹: 1. 創建北京、上海 2 所學校 2. 創建linux , python , go 3個課程 , linux\py 在北京開, go 在上海開 3. 課程包含,周期,價格,通過學校創建課程 4. 通過學校創建班級, 班級關聯課程、講師 5. 創建學員時,選擇學校,關聯班級 5. 創建講師角色時要關聯學校, 6. 提供兩個角色接口 6.1 學員視圖, 可以注冊, 交學費, 選擇班級, 6.2 講師視圖, 講師可管理自己的班級, 上課時選擇班級, 查看班級學員列表 , 修改所管理的學員的成績 6.3 管理視圖,創建講師, 創建班級,創建課程 7. 上面的操作產生的數據都通過pickle序列化保存到文件里 文件目錄 ---選課系統 #主程序目錄
│ README │ __init__.py │ ├─bin │ Course_Selecting.py #主程序__init__.py │ ├─conf │ │ setting.py #配置文件
│  │  __init__.py │ ├─core │ │ main.py #主邏輯交互程序
│  │  school_view.py    #學校視圖
│  │  student_view.py   #學生視圖
│  │  teacher_view.py   #老師視圖
│  │  __init__.py │ ├─db │ 1.py │ school.bak │ school.dat #數據db
│ school.dir │ ├─logs │ __init__.py │ ├─src │ │ class_classroom.py #教室類
│  │  class_course.py     #課程類
│  │  class_school.py     #學校類
│  │  class_student.py    #學生類
│  │  class_teacher.py    #老師類
│  │  __init__.py │ └─test __init__.py
View Code

 

代碼部分:

bin / Course_Selecting.py 

#!/usr/bin/env python # -*- coding:utf-8 -*- # Author: Colin Yao
import os,sys,logging,shelve BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.append(BASE_DIR) #添加環境變量
from conf import setting from core.main import Admin if __name__ == '__main__': Admin.run('')
View Code

conf / setting.py

#!/usr/bin/env python # -*- coding:utf-8 -*- # Author: Colin Yao
import os,time,shelve,sys from src.class_school import School BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.append(BASE_DIR) #添加環境變量
data_path = os.path.join(BASE_DIR+'\db') school_file = os.path.join(data_path,'school')
View Code

core / main.py

#!/usr/bin/env python # -*- coding:utf-8 -*- # Author: Colin Yao
import os,sys,logging,shelve BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.append(BASE_DIR) #添加環境變量
from conf import setting from core.school_view import School_view from core.teacher_view import Teacher_view from core.student_view import Student_view class Admin(object): def run(self): exit_flag =False menu = u''' \033[32;1m 1.學生視圖 2.老師視圖 3.學校視圖 4.退出\033[0m '''
        while not exit_flag: print(menu) user_option = input('請輸入要管理的視圖,輸入q退出>>>:\t') if user_option == '1': Student_view() elif user_option == '2': Teacher_view() elif user_option == '3': School_view() elif user_option == 'q' or user_option =='4': sys.exit() else: print('輸入的選項不正確,請重新輸入')
View Code

  school_view.py

#!/usr/bin/env python # -*- coding:utf-8 -*- # Author: Colin Yao
import os,sys,logging,shelve BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.append(BASE_DIR) #添加環境變量
from conf import setting from src.class_school import School 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_manger() self.school_file.close() else: print('沒有學校和班級的數據,請先創建') self.init_school() self.school_manger() self.school_file.close() def init_school(self): self.school_file = shelve.open(setting.school_file) self.school_file['北京'] = School('總校','北京') self.school_file['上海'] = School('總校','上海') def school_manger(self): while True: for school_name in self.school_file: print('學校名稱:%s'%school_name) school_option = input('請輸入要管理的學校名稱>>>:').strip() if school_option in self.school_file: self.school_option = school_option self.school_obj = self.school_file[school_option] ''' 如果是北京就等於self.school_obj[北京] file[北京] =School('總校','北京') 所以當下文出現了self.school_obj.school_course =School('總校','北京').school_course 等同於調用了School().school_course的屬性是 '''
            while True: menu = ''' 歡迎來到 Python%s校區 添加課程 add_course 添加班級 add_classroom 添加講師 add_teacher 查看班級 show_classroom 查看課程 show_classroom 查看講師 show_teacher 修改講師 add_teacher 退出 exit '''%school_option print(menu) user_choice = input('請選擇以上操作>>>:').strip() if hasattr(self,user_choice): getattr(self,user_choice)() else: print("沒有這個操作,請重新輸入!!!!") pass

    def add_course(self): course_name = input('請輸入課程名稱>>>:').strip() course_price = input('請輸入課程價格>>>:').strip() course_time = input('請輸入課程周期[默認為周]>>>:').strip() if course_name in self.school_obj.school_course: print('課程已經存在') else: self.school_obj.create_course(course_name, course_price, course_time) #相當於School.create_course(course_name, course_price, course_time)
            print('%s課程添加成功' % course_name) self.school_file.update({self.school_option:self.school_obj}) self.school_file.close() def add_classroom(self): class_name = input('請輸入班級名稱>>>:').strip() class_course = input('請輸入課程>>>:').strip() if class_name not in self.school_obj.sch_class_room:    #sch_class_room
            if class_name not in self.school_obj.school_course: course_obj = self.school_obj.school_course[class_course] self.school_obj.create_classroom(class_name,course_obj) self.school_file.update({self.school_option:self.school_obj}) self.school_file.close() print('班級創建成功') else: print('課程不存在') else: print('班級已經存在') def show_classroom(self): for classroom in self.school_obj.sch_class_room: class_obj = self.school_obj.sch_class_room[classroom] print('班級名稱:%s\t課程:%s'
                  % (class_obj.class_name,class_obj.course_obj.course_name)) def add_teacher(self): teacher_name = input('請輸入講師姓名>>>:') teacher_age = input('請輸入講師年齡>>>:') teacher_gender = input('請輸入講師性別>>>:') teacher_salary = input('請輸入講師薪水>>>:') class_name = input('請輸入授課班級>>>:') if class_name in self.school_obj.sch_class_room:  # sch_class_room
            class_obj = self.school_obj.sch_class_room[class_name] if teacher_name not in self.school_obj.sch_teacher: self.school_obj.create_teacher(teacher_name,teacher_age,teacher_gender,teacher_salary,class_name,class_obj) print('講師創建成功,請確認是否已經簽完合同') else: self.school_obj.modify_teacher({}) print('修改講師成功') self.school_file.update({self.school_option:self.school_obj}) self.school_file.close() else: print('請先創建班級') def show_teacher(self): for teacher_name in self.school_obj.sch_teacher: teacher_obj = self.school_obj.sch_teacher[teacher_name] for t in teacher_obj.teacher_classroom: class_obj = self.school_obj.sch_class_room[t] stu_list = [] for j in class_obj.class_student: stu_list.append(j) print('教師姓名:%s\t教師所在班級:%s\t教授課程:%s\t課程學員:%s' %(teacher_obj.teacher_name ,t,class_obj.course_obj.course_name,class_obj.class_student)) def exit(self): sys.exit('程序退出')
View Code

  student_view.py

#!/usr/bin/env python # -*- coding:utf-8 -*- # Author: Colin Yao
import os, sys, logging, shelve BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.append(BASE_DIR) # 添加環境變量
from conf import setting from src.class_school import School from core.school_view import School_view 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_manger() self.school_file.close() else: print('沒有數據,請聯系管理員選擇分校') sys.exit() def student_manger(self): while True: print('歡迎注冊IT學院我們的分校有:') for school_name in self.school_file: print('\tSean[%s]分校' %school_name) school_option = input('請輸入您要學習的分校地址>>>:').strip() if school_option in self.school_file: self.school_option = school_option self.school_obj = self.school_file[school_option] else: print('輸入有誤程序退出') sys.exit() for classroom in self.school_obj.sch_class_room: class_obj = self.school_obj.sch_class_room[classroom] print('歡迎來到%s分校我們的班級有:%s\t課程有:%s'
                      % (school_option, class_obj.class_name, class_obj.course_obj.course_name)) student_option = input('請輸入學生姓名進行操作[PS:注冊也在這里喲]>>>:').strip() if student_option in self.school_obj.sch_student: self.student_option = student_option self.student_obj = self.school_obj.sch_student[self.student_option] else: print('[%s]這位童鞋'%student_option,'您是否進行注冊?') user_choice = input('請注冊/退出(y/n)>>>:') if user_choice == 'y': self.student_option = student_option self.enroll() elif user_choice == 'n': sys.exit() else: print('輸入有誤,請重新開始 = 。= ') self.student_manger() while True: menu = ''' 歡迎來到 Python[%s]校區[%s]童鞋 繳納學費 pay 選擇教室/課程 choice_class 查看講師 view_teacher 退出 exit ''' %(school_option,student_option) print(menu) user_choice = input('請選擇以上操作>>>:').strip() if hasattr(self, user_choice): getattr(self, user_choice)() else: print("沒有這個操作,請重新輸入!!!!") pass

    '''注冊'''
    def enroll(self):  # 課程、班級
        student_name = self.student_option student_gender = input('%s童鞋請輸入性別>>>:' % student_name) student_age = input('%s童鞋請輸入年紀>>>:' % student_name) class_name = input('%s童鞋請輸入教室(PS:教室已經和課程關聯)>>>:' % student_name) student_score = None if class_name in self.school_obj.sch_class_room: class_obj = self.school_obj.sch_class_room[class_name] self.school_obj.create_student(student_name, student_gender, student_age, student_score, class_name) self.school_file.update({self.school_option: self.school_obj}) self.school_file.close() print('%s童鞋注冊成功,您選擇的課程是%s,教室為%s'
                  % (student_name, class_obj.course_obj.course_name, class_obj.class_name)) else: print('創建失敗教室不存在') '''繳納學費'''

    def pay(self):  # 根據教室繳納學費
        student_name = self.student_option class_name = input('%s童鞋請輸入您所在的教室(PS:教室已經和課程關聯)>>>:' % student_name) if class_name in self.school_obj.sch_class_room:  # sch_class_room
            class_obj = self.school_obj.sch_class_room[class_name] if class_obj.course_obj.course_name in self.school_obj.school_course: course_obj = self.school_obj.school_course[class_obj.course_obj.course_name] print('所在分校:%s\t課程名稱:%s\t課程價格:%s\t課程學習計划:%s周'
                  % (self.school_obj.school_addr, course_obj.course_name, course_obj.course_price, course_obj.course_time)) '''選擇班級'''
    def choice_class(self):  # 根據學習日期選擇班級
        student_name = self.student_option student_gender = self.student_obj.student_gender student_age = self.student_obj.student_age class_name = input('%s童鞋選擇教室(PS:教室已經和課程關聯)>>>:' % student_name) student_score = 0 # class_name ='room'
        if class_name in self.school_obj.sch_class_room:  # sch_class_room
            class_obj = self.school_obj.sch_class_room[class_name] self.school_obj.create_student(student_name, student_gender, student_age, student_score, class_name) self.school_file.update({self.school_option: self.school_obj}) self.school_file.close() print('%s更改教室成功,您選擇的課程是%s,教室為%s'
                  % (student_name, class_obj.course_obj.course_name, class_obj.class_name)) else: print('創建失敗教室不存在') '''查看講師'''
    def view_teacher(self): for teacher_name in self.school_obj.sch_teacher: teacher_obj = self.school_obj.sch_teacher[teacher_name] for t in teacher_obj.teacher_classroom: class_obj = self.school_obj.sch_class_room[t] stu_list = [] for j in class_obj.class_student: stu_list.append(j) print('教師姓名:%s\t教師所在班級:%s\t教授課程:%s\t學生有%s'
                      % (teacher_obj.teacher_name,t, class_obj.course_obj.course_name,stu_list)) '''退出'''
    def exit(self): sys.exit('感謝使用再見')
View Code

  teacher_view.py

#!/usr/bin/env python # -*- coding:utf-8 -*- # Author: Colin Yao
import os,sys,logging,shelve BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.append(BASE_DIR) #添加環境變量
from conf import setting from src.class_school import School 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_manger() self.school_file.close() else: print('沒有教師數據,請先創建學校') sys.exit() def teacher_manger(self): while True: print('歡迎進入IT學院講師視圖:') for school_name in self.school_file: print('講師分校名:%s' % school_name) school_option = input('請輸入您所在分校名>>>:').strip() if school_option in self.school_file: self.school_option = school_option self.school_obj = self.school_file[school_option] else: print('您的輸入有誤') break teacher_option = input('請輸入講師姓名進行管理>>>:').strip() if teacher_option in self.school_obj.sch_teacher: self.teacher_option = teacher_option self.teacher_obj = self.school_obj.sch_teacher[self.teacher_option] print('歡迎講師%s進入講師管理系統以下是您的講師信息:'
                      '\n講師姓名:%s\t講師年齡:%s\t講師性別:%s\t講師工資:%s'
                      %(self.teacher_obj.teacher_name,self.teacher_obj.teacher_name ,self.teacher_obj.teacher_age,self.teacher_obj.teacher_gender,self.teacher_obj.teacher_salary)) else: print('沒有[%s]這位講師'%teacher_option) sys.exit() while True: menu = ''' 歡迎來到 Python[%s]校區[%s]講師 選擇教室 management_class 查看班級 view_class 查看學員 view_student_list 修改成績 revise_student_grades 退出 exit ''' %(school_option,teacher_option) print(menu) user_choice = input('請選擇以上操作>>>:').strip() if hasattr(self, user_choice): getattr(self, user_choice)() else: print("沒有這個操作,請重新輸入!!!!") pass

    '''管理自己的班級'''
    def management_class(self): for classroom in self.teacher_obj.teacher_classroom: class_obj = self.teacher_obj.teacher_classroom[classroom] #教室對象
        print('%s您所在的班級為:%s\t教授的課程是%s:' % (self.teacher_obj.teacher_name, class_obj.class_name,class_obj.course_obj.course_name)) # 講師對應教室和課程
        user_choice = input('是否選擇要上課的教室y/n>>>:').strip() if user_choice  == 'y': class_name = input('請輸入要上課的教室>>>:').strip() class_obj = self.school_obj.sch_class_room[class_name] self.school_obj.create_teacher(self.teacher_obj.teacher_name, self.teacher_obj.teacher_age, self.teacher_obj.teacher_gender,self.teacher_obj.teacher_salary,class_name, class_obj) print('講師選擇教室對應的課程成功') self.school_file.update({self.school_option:self.school_obj}) self.school_file.close() elif user_choice  == 'n': print('不對班級進行管理....請重新選擇您的操作!!!>>>:') pass
        else: print('輸入不正確') pass

    '''上課選擇班級和管理班級'''
    def view_class(self):  # 上課選擇班級,
        for classroom in self.teacher_obj.teacher_classroom: class_obj = self.teacher_obj.teacher_classroom[classroom]  # 教室對象
        print('%s您所在的班級為:%s\t教授的課程是%s:' % (self.teacher_obj.teacher_name, class_obj.class_name, class_obj.course_obj.course_name)) # 講師對應教室和課程

    '''查看學員列表'''
    def view_student_list(self):  # 查看學員列表
        for classroom in self.teacher_obj.teacher_classroom: class_obj = self.teacher_obj.teacher_classroom[classroom]  # 教室對象
            stu_list = [] for j in class_obj.class_student: stu_list.append(j) print('%s您所在的班級為:%s\t教授的課程是%s\t您班級里的學生有%s:' % (self.teacher_obj.teacher_name, class_obj.class_name, class_obj.course_obj.course_name, stu_list)) # 講師對應教室和課程有問題
    '''修改成績'''
    def revise_student_grades(self): self.view_student_list() for classroom in self.teacher_obj.teacher_classroom: class_obj = self.school_obj.sch_class_room[classroom]  # 教室對象
            student_name = input('請講師修改成績的學生的姓名>>>:').strip() if student_name in class_obj.class_student: student_obj = class_obj.class_student[student_name] print('%s童鞋成績為%s\t課程:%s\t教室:%s'
                        %(student_name, student_obj.student_score, class_obj.course_obj.course_name, class_obj.class_name)) student_gender = student_obj.student_gender student_age = student_obj.student_age new_score = input('請講師修改成績>>>:').strip() self.school_obj.create_student\ (student_name, student_gender, student_age, new_score,class_obj.class_name) self.school_file.update({self.school_option: self.school_obj}) self.school_file.close() print('%s童鞋修改成功,他的成績為%s,他的課程是%s,教室為%s'
                      % (student_name, new_score, class_obj.class_name, class_obj.course_obj.course_name)) else: print('沒有這個童鞋>>>>>!!!!') def exit(self): sys.exit('[%s]講師感謝使用再見'%self.teacher_obj.teacher_name)
View Code

db

logs

src / class_classroom.py

#!/usr/bin/env python # -*- coding:utf-8 -*- # Author: Colin Yao
import time '''班級類'''
class Class_room(object): def __init__(self,class_name,course_obj): self.class_name = class_name self.course_obj = course_obj self.class_student = {}
View Code

  class_course.py

#!/usr/bin/env python # -*- coding:utf-8 -*- # Author: Colin Yao
'''課程類'''
import time 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
View Code

  class_school.py

#!/usr/bin/env python # -*- coding:utf-8 -*- # Author: Colin Yao
import time,os,shelve,sys BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.append(BASE_DIR) #添加環境變量
from src.class_teacher import Teacher from src.class_course import Course from src.class_classroom import Class_room from src.class_student import Student '''學校類'''
class School(object): def __init__(self,school_name,school_addr): self.school_name = school_name self.school_addr = school_addr self.school_course = {} self.sch_class_room ={} self.sch_teacher = {} self.sch_student = {} '''創建課程'''
    def create_course(self,course_name,course_price,course_time): course_obj = Course(course_name,course_price,course_time) #創建課程對象
        self.school_course[course_name] = course_obj  #根據課程名為key,課程對象為value創建對應關系傳進了init self.school_course

        '''展示課程'''
    def show_course(self): for course in self.school_course: course_obj = self.school_course[course] print(course_obj.__dict__)  #是否需要添加學校
            print('所在分校:%s\t課程名稱:%s\t課程價格:%s\t課程學習計划:%s周'
                  %(self.school_addr,course_obj.course_name,course_obj.course_price,course_obj.course_time)) '''修改課程'''
    def modify_course(self):  #可能會繼續追加、保留
        for course in self.school_course: course_obj = self.school_course[course] course_obj.course_name= input('修改課程名稱>>>:') course_obj.course_price = input('修改課程價格>>>:') course_obj.course_time = input('修改課程周期>>>:') '''創建教室'''
    def create_classroom(self,class_name,course_obj): #創建classroom、關聯課程
        class_obj = Class_room(class_name,course_obj) #創建課程對象
        self.sch_class_room[class_name] = class_obj  #根據教室名為key,課程對象為value創建對應關系傳進了init self.school_course

        '''展示教室'''
    def show_classroom(self): for classroom in self.sch_class_room: class_obj = self.sch_class_room[classroom] #應該是班級名稱、對應課程、對應老師、對應的student、保留
            print('班級名稱:%s\t課程:%s'
                  % (class_obj.class_name,class_obj.course_obj)) print(class_obj.__dict__) '''修改教室'''
    def modify_course(self):  #可能會繼續追加、保留
        for classroom in self.sch_class_room: class_obj = self.sch_class_room[classroom] x = time.strftime("%Y%m%d%H%M%S", time.localtime()) #按照根據時間修改教室省去輸入
            class_obj.course_obj = input('請慎重輸入課程名稱>>>:') y = time.strftime("%Y%m%d%H%M%S", time.localtime()) class_obj.class_name= (y+"_"+ class_obj.course_obj) '''創建教師'''
    def create_teacher(self,teacher_name,teacher_age,teacher_gender,teacher_salary,class_name,class_obj): teacher_obj = Teacher(teacher_name,teacher_age,teacher_gender,teacher_salary) teacher_obj.add_tech_classroom(class_name,class_obj) #講師關聯教室
        self.sch_teacher[teacher_name] = teacher_obj '''查看教師'''
    def show_teacher(self): for teacher_name in self.teacher: teacher_obj=self.teacher[teacher_name] print('老師姓名:%s','老師年齡:%s','老師性別:%s','老師工資:%s'
                  %(teacher_obj.teacher_name,teacher_obj.teacher_age,teacher_obj.teacher_gender,teacher_obj.teacher_salary)) '''修改老師'''
    def modify_teacher(self): for teacher_name in self.teacher: teacher_obj=self.teacher[teacher_name] teacher_obj.teacher_name = input('請輸入修改的老師姓名>>>:') teacher_obj.teacher_age = input('請輸入修改的老師年齡>>>:') teacher_obj.teacher_gender = input('請輸入修改的老師性別>>>:') teacher_obj.teacher_salary = input('請輸入修改的老師工資>>>:') '''創建學生'''
    def create_student(self,student_name,student_gender,student_age,student_score,class_name): #創建學生對象
       student_obj = Student(student_name,student_gender,student_age,student_score) self.sch_student[student_name] = student_obj #建立學生和班級的關聯關系
       class_obj = self.sch_class_room[class_name] class_obj.class_student[student_name] = student_obj #更新班級信息
       self.sch_class_room[class_name] =class_obj
View Code

  class_student.py

#!/usr/bin/env python # -*- coding:utf-8 -*- # Author: Colin Yao
class Student(object): def __init__(self,student_name,student_gender,student_age,student_score): #學生性命,性別,年齡,分數
        self.student_name = student_name self.student_gender = student_gender self.student_age = student_age self.student_score = student_score self.student_classroom = {}
View Code

  class_teacher.py

#!/usr/bin/env python # -*- coding:utf-8 -*- # Author: Colin Yao
class Teacher(object): def __init__(self,teacher_name,teacher_age,teacher_gender ,teacher_salary): self.teacher_name = teacher_name self.teacher_age = teacher_age self.teacher_gender = teacher_gender self.teacher_salary = teacher_salary self.teacher_classroom = {} def add_tech_classroom(self,class_name,class_obj): self.teacher_classroom[class_name] = class_obj
View Code

 

  

 

 


免責聲明!

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



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