題目:選課系統開發,要求有四種角色:學校、學員、課程、講師
詳細要求:
1. 創建北京、上海2所學校
2. 創建linux,python,go3個課程,linux\py在北京開,go在上海開
3. 課程包含,周期,價格,通過學校創建課程
4. 通過學校創建班級,班級關聯課程、講師
5. 創建學員時,選擇學校,關聯班級
6. 創建講師角色時要關聯學校,
7. 提供兩個角色接口
8. 為學員、講師、管理員分別提供用戶界面,並提供對應功能:
8.1 學員視圖,可以注冊,交學費,選擇班級,
8.2 講師視圖,講師可管理自己的班級,上課時選擇班級,查看班級學員列表,修改所管理的學員的成績
8.3 管理視圖,創建講師,創建班級,創建課程
說明:
程序運行入口是:bin文件夾下的start.py
結構見流程圖

選課系統
bin目錄下
start.py
# -*- coding:utf-8 -*- #Author:Kris import os,sys BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.append(BASE_DIR) #print(sys.path) from core import main from conf import settings if __name__ == '__main__': obj = main.Manage_center() obj.run()
conf下的文件
settings
# -*- coding:utf-8 -*- #Author:Kris import os BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) database_path = os.path.join(BASE_DIR,"databases") #print(data_path) school_db_file = os.path.join(database_path,"school")
core下的文件
main.py
# -*- coding:utf-8 -*- #Author:Kris import os,sys,shelve from conf import settings from modules.school import School class Manage_center(object): def __init__(self): pass def run(self): while True: print("\033[31;0m歡迎進入選課系統\033[0m\n" "1 學生視圖\n" "2 教師視圖\n" "3 管理視圖\n" "4 退出學員管理系統(請按q)\n") user_choice = input("請輸入您要進入的視圖序號:") if user_choice == '1': Manage_student() elif user_choice == '2': Manage_teacher() elif user_choice == '3': Manage_school() elif user_choice == 'q': print("感謝使用學員管理系統") break else: print("請輸入正確的選項") class Manage_school(object): '''學校管理視圖''' def __init__(self): if os.path.exists(settings.school_db_file+".dat"): #shelve會生成三個文件,其中有.dat結尾 self.school_db = shelve.open(settings.school_db_file) #打開學校數據庫文件 self.run_manage() #運行管理視圖 self.school_db.close() #關閉數據庫文件 else: print("系統信息:初始化數據庫") self.initialize_school() #初始化數據庫 self.run_manage() self.school_db.close() def initialize_school(self): ##初始化兩所學校 self.school_db = shelve.open(settings.school_db_file) self.school_db['北京'] = School('北京', '中國.北京') self.school_db['上海'] = School('上海', '中國.上海') def run_manage(self): '''運行學校管理視圖 ''' while True: for key in self.school_db: print("學校名稱:",key) choice_school = input("輸入要管理的學校名:").strip() if choice_school in self.school_db: self.choice_school = choice_school self.school_obj = self.school_db[choice_school] #取出value值 while True: print("\n\033[31;0m歡迎來到老男孩%s校區\033[0m\n" "添加課程 add_course\n" "增加班級 add_class\n" "招聘講師 add_teacher\n" "查看課程 check_course\n" "查看班級 check_class\n" "查看講師 check_teacher\n" "退出程序 exit"% self.choice_school) ##也有可以self.school_obj.school_name user_func = input("輸入要操作的\033[34;0m英文\033[0m指令:").strip() if hasattr(self,user_func): getattr(self,user_func)() else: print("輸入錯誤:請輸入正確的學校名>>") 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("課程存在") self.school_obj.create_course(course_name, course_price, course_time) print("課程更新完成") else: self.school_obj.create_course(course_name,course_price,course_time) print("課程添加成功") self.school_db.update({self.choice_school: self.school_obj}) #更新數據庫數據 k:v def add_class(self): class_name = input("輸入要添加班級的名稱:").strip() course_name = input("輸入要關聯的課程:").strip() if class_name not in self.school_obj.school_class: if course_name in self.school_obj.school_course: course_obj = self.school_obj.school_course[course_name] self.school_obj.create_class(class_name,course_obj) self.school_db.update({self.choice_school: self.school_obj}) # 更新數據庫數據 print("班級創建成功") else: print("\33[31;1m系統錯誤:關聯的課程不存在\33[0m") else: print("\33[31;1m系統錯誤:班級已經存在\33[0m") def add_teacher(self): teacher_name = input("輸入要招聘教師的名稱:").strip() teacher_salary = input("輸入教師的薪資:").strip() teacher_class = input("輸入要關聯的班級:").strip() if teacher_class in self.school_obj.school_class: #判斷班級是否存在 class_obj = self.school_obj.school_class[teacher_class] #獲取班級名對應的實例 if teacher_name not in self.school_obj.school_teacher:#判斷招聘教師是否存在,不存在創建,存在更新 self.school_obj.create_teacher(teacher_name,teacher_salary,teacher_class,class_obj) print("新講師招聘成功") else: self.school_obj.update_teacher(teacher_name, teacher_class, class_obj) print("講師已經存在,信息更新完成") self.school_db.update({self.choice_school: self.school_obj}) # 更新數據庫數據 else: print("\33[31;1m系統錯誤:關聯的班級不存在\33[0m") def check_course(self): self.school_obj.show_course() def check_class(self): self.school_obj.show_class() def check_teacher(self): self.school_obj.show_teacher() def exit(self): self.school_db.close() sys.exit("\033[32;1m歡迎下次使用學員管理系統\033[0m") class Manage_student(object): '''學生視圖''' def __init__(self): if os.path.exists(settings.school_db_file + ".dat"): # shelve會生成三個文件,其中有.dat結尾 self.school_db = shelve.open(settings.school_db_file) # 打開學校數據庫文件 self.run_manage() # 運行管理視圖 self.school_db.close() # 關閉數據庫文件 else: print("數據庫文件不存在,請先創建學校") exit() def run_manage(self): print("\n歡迎進入學員視圖") for key in self.school_db: print("學校名稱:", key) choice_school = input("輸入選擇注冊的學校名:").strip() if choice_school in self.school_db: self.choice_school = choice_school self.school_obj = self.school_db[choice_school] student_name = input("輸入學生的姓名:").strip() student_age = input("輸入學生的年齡:").strip() self.school_obj.show_class_course() class_choice = input("輸入上課的班級:").strip() if class_choice in self.school_obj.school_class: self.school_obj.create_student(student_name,student_age,class_choice) self.school_db.update({self.choice_school: self.school_obj}) # 更新數據庫數據 print("學生注冊成功") else: print("\33[31;1m系統錯誤:輸入的班級不存在\33[0m") else: print("\33[31;1m系統錯誤:輸入的學校不存在\33[0m") class Manage_teacher(object): '''教師視圖''' def __init__(self): if os.path.exists(settings.school_db_file + ".dat"): # shelve會生成三個文件,其中有.dat結尾 self.school_db = shelve.open(settings.school_db_file) # 打開學校數據庫文件 self.run_manage() # 運行管理視圖 self.school_db.close() # 關閉數據庫文件 else: print("數據庫文件不存在,請先創建學校") exit() def run_manage(self): for key in self.school_db: print("學校名稱:", key) choice_school = input("輸入選擇學校名:").strip() if choice_school in self.school_db: self.choice_school = choice_school self.school_obj = self.school_db[choice_school] teacher_name = input("輸入登錄講師的姓名:").strip() while True: if teacher_name in self.school_obj.school_teacher: print("\033[31;0m歡迎來到教師中心\033[0m\n" "查看班級 check_class\n" "退出程序 exit\n" ) user_func = input("輸入要操作的命令:").strip() if hasattr(self, user_func): getattr(self, user_func)(teacher_name) else: print("講師不存在") def check_class(self,teacher_name): self.school_obj.show_teacher_classinfo(teacher_name) def exit(self,*args): self.school_db.close() sys.exit("歡迎下次使用學員管理系統")
databases下的文件
是pickle自動生成的數據庫文件
modules下的文件
class.py
# -*- coding:utf-8 -*- #Author:Kris class Class(object): '''班級類,包含名稱,課程,學生''' def __init__(self,class_name,course_obj): self.class_name = class_name self.class_course = course_obj self.class_student = {} #學生字典
course.py
# -*- coding:utf-8 -*- #Author:Kris class Course(): '''定義課程類,包含名稱,價格,周期''' def __init__(self,course_name,course_price,course_time): self.course_name = course_name self.course_price = course_price self.course_time = course_time
school.py
# -*- coding:utf-8 -*- #Author:Kris from modules.course import Course from modules.classs import Class from modules.teacher import Teacher from modules.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.school_class = {} self.school_teacher = {} #self.school_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 def show_course(self): '''查看課程信息''' for key in self.school_course: course_obj = self.school_course[key] print("\33[32;1m課程:%s\t價格:%s\t周期:%s個月\33[0m"%(course_obj.course_name,course_obj.course_price, course_obj.course_time,)) def create_class(self,class_name,courese_obj): '''創建班級''' class_obj = Class(class_name,courese_obj) self.school_class[class_name] = class_obj def show_class(self): for key in self.school_class: class_obj = self.school_class[key] print("\33[32;1m班級:%s\t關聯課程:%s\33[0m" % (class_obj.class_name, class_obj.class_courese.course_name)) def show_class_course(self): for key in self.school_class: class_obj = self.school_class[key] course_obj = class_obj.class_courese print("\33[32;1m班級:%s\t關聯課程:%s\t價格:%s\t周期:%s月\33[0m" % (class_obj.class_name, course_obj.course_name, course_obj.course_price,course_obj.course_time)) def create_teacher(self,teacher_name, teacher_salary,class_name,class_obj): '''創建講師''' teacher_obj = Teacher(teacher_name, teacher_salary) teacher_obj.teacher_add_class(class_name,class_obj) self.school_teacher[teacher_name] = teacher_obj def update_teacher(self,teacher_name,class_name,class_obj): '''更新教師信息''' teacher_obj = self.school_teacher[teacher_name] teacher_obj.teacher_add_class(class_name,class_obj) def show_teacher(self): '''查看講師信息''' for key in self.school_teacher: teacher_obj = self.school_teacher[key] class_list = [] for i in teacher_obj.teacher_calss: class_list.append(i) print("\33[32;1m講師:%s\t薪資:%s\t關聯班級:%s\33[0m" % (teacher_obj.teacher_name, teacher_obj.teacher_salary, class_list )) def create_student(self,student_name,student_age,class_choice): '''注冊學生''' student_obj = Student(student_name,student_age) #生成學生實例 class_obj = self.school_class[class_choice] #獲取學生所注冊班級的實例對象 class_obj.class_student[student_name]=student_obj #班級實例里添加學生信息 self.school_class[class_choice] = class_obj #學校班級字典更新 def show_teacher_classinfo(self,teacher_name): teacher_obj = self.school_teacher[teacher_name] for i in teacher_obj.teacher_calss: class_obj = self.school_class[i] student_list = [] for k in class_obj.class_student: student_list.append(k) print("\33[32;1m班級:%s\t關聯課程:%s\t學員:%s\33[0m" % (class_obj.class_name, class_obj.class_courese.course_name,student_list))
student.py
# -*- coding:utf-8 -*- #Author:Kris class Student(object): '''學生類,包含姓名,年齡''' def __init__(self,student_name,student_age): self.student_name = student_name self.student_age = student_age
teacher.py
# -*- coding:utf-8 -*- #Author:Kris class Teacher(object): '''講師類,定義teacher_name,teacher_salary,包含teacher_class''' def __init__(self, teacher_name, teacher_salary): self.teacher_name = teacher_name self.teacher_salary = teacher_salary self.teacher_calss = {} def teacher_add_class(self,class_name,class_obj): self.teacher_calss[class_name] = class_obj