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()
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)
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("歡迎下次繼續使用課程管理系統")
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 hh}qubuX sch_courseq}qhhsX 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}qX 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.
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 = {}
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
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))
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
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
