【python 專案】選課系統
阿新 • • 發佈:2019-02-16
程式要求:
1.角色:學校,學生,講師
2.建立北京、上海兩所學校(通過學校例項)
3.建立Linux、python、go三個課程,Linux、python在北京開設,go在上海開設
4.課程包括週期、價格,通過學校建立課程
5.通過學校建立班級,班級關聯課程、講師
6.建立學生時,選擇學校,關聯班級
7.建立講師角色時要關聯學校
8.產生的資料通過pickle序列化儲存在檔案裡
分析
要實現三個角色(學生、老師、學校),那麼要有三個檢視介面,還要有一個初檢視讓使用者選擇要以哪個角色進入
學生檢視:
學生進入學生檢視,輸入要進入的學校,學生姓名,年齡,班級(由於班級與課程繫結,即哪個班級就是學習什麼科目已經事先訂好了,所以不用輸要學習的科目了),之後學生註冊成功
教師檢視:
教師進入教師檢視,先輸入教師姓名,之後可以查詢自己所帶的班級及學生等資訊
學校檢視:
學校管理人員進入學校檢視,先選擇管理哪個學校,之後可以建立班級,建立講師,建立課程
過程
一、目錄建立
二、main.py中一共有四個類,分別是初檢視與三個檢視介面
他們類下的每個方法分別實現我們剛才分析的功能,具體初始化和細節在模組中實現。
原始碼
start.py
import platform import os import sys if platform.system() == "Windows": BASE_DIR="\\".join(os.path.abspath(os.path.dirname(__file__)).split("\\")[:-1]) else: BASE_DIR = "/".join(os.path.abspath(os.path.dirname(__file__)).split("/")[:-1]) sys.path.insert(0,BASE_DIR)#新增環境變數 from core import main if __name__ == "__main__": obj= main.Manage_center() obj.run()
setings.py
import platform import os import sys if platform.system() == "Windows": BASE_DIR = "\\".join(os.path.abspath(os.path.dirname(__file__)).split("\\")[:-1]) database_path=os.path.join(BASE_DIR,"database") #資料庫路徑 else: BASE_DIR = "/".join(os.path.abspath(os.path.dirname(__file__)).split("/")[:-1]) database_path = os.path.join(BASE_DIR, "database") sys.path.insert(0, BASE_DIR) school_db_file=os.path.join(database_path,"school")
main.py
"""
主程式
"""
import sys
import os
import shelve
from conf import settings
from modules.school import School
"""初介面"""
class Manage_center(object):
def __init__(self):
pass
def run(self):
while True:
print(
"""
-------------歡迎進入選課系統---------------
1.學生檢視
2.教師檢視
3.學校檢視
e.退出選課系統
"""
)
user_choice=input("\033[34;0m請輸入要進入的檢視或e退出:\033[0m")
if user_choice=="1":
Manage_student()
elif user_choice=="2":
Manage_teacher()
elif user_choice=="3":
Manage_school()
elif user_choice=="e":
break
else:
print("\033[31;0m您輸入的選項錯誤,請重新輸入\033[0m")
"""學生檢視"""
class Manage_student(object):
def __init__(self):
if os.path.exists(settings.school_db_file+".dat"):
self.school_db=shelve.open(settings.school_db_file)#開啟資料庫
self.run_manage()
self.school_db.close()
else:
print("\033[31;0m請先建立學校\033[0m")
exit()
def run_manage(self):
print("--------------歡迎來到學生檢視---------------")
for k in self.school_db:
print("學校名:",k)
choice_school=input("\033[34;0m請選擇學校:\033[0m").strip()
if choice_school in self.school_db:
self.choice_school=choice_school
self.school_obj=self.school_db[choice_school]
student_name=input("\033[34;0m請輸入學生姓名:\033[0m").strip()
student_age = input("\033[34;0m請輸入學生年齡:\033[0m").strip()
self.school_obj.show_class_course()
class_choice=input("\033[34;0m請輸入班級:\033[0m").strip()
if class_choice in self.school_obj.school_class:
self.school_obj.creat_student(student_name,student_age,class_choice)
self.school_db.update({self.choice_school:self.school_obj})#更新資料庫
print("註冊成功")
else:
print("輸入的班級不存在")
else:
print("輸入的學校不存在")
"""教師檢視"""
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("\033[31;1m資料庫檔案不存在,請先建立學校\033[0m")
exit()
def run_manage(self):
for key in self.school_db:
print("學校名稱:", key)
choice_school = input("\33[34;0m輸入選擇學校名:\33[0m").strip()
if choice_school in self.school_db:
self.choice_school = choice_school
self.school_obj = self.school_db[choice_school]
teacher_name = input('''\033[34;0m輸入登入講師的姓名:\033[0m''').strip()
while True:
if teacher_name in self.school_obj.school_teacher:
print("-------------歡迎來到教師中心----------------\n"
"檢視班級 check_class\n"
"退出程式 exit" )
user_func = input('''\033[34;0m輸入要操作的命令:\033[0m''').strip()
if hasattr(self, user_func):
getattr(self, user_func)(teacher_name)
else:
print("\033[31;1m講師不存在\033[0m")
def check_class(self,teacher_name):
self.school_obj.show_teacher_classinfo(teacher_name)
def exit(self, *args):
self.school_db.close()
sys.exit("\033[32;1m歡迎下次使用選課系統\033[0m")
"""學校檢視"""
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("\33[31;1m系統資訊:初始化資料庫\33[0m")
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("\33[34;0m輸入選擇管理的學校名:\33[0m").strip()
if choice_school in self.school_db:
self.choice_school = choice_school
self.school_obj = self.school_db[choice_school]
while True:
print("\n歡迎來到老男孩%s校區\n"
"新增課程 add_course\n"
"增加班級 add_class\n"
"招聘講師 add_teacher\n"
"檢視課程 check_course\n"
"檢視班級 check_class\n"
"檢視講師 check_teacher\n"
"退出程式 exit"% 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("\33[31;1m輸入錯誤:請輸入正確的學校名\33[0m")
def add_course(self):
course_name = input('''\033[34;0m輸入要新增課程的名稱:\033[0m''').strip()
course_price = input('''\033[34;0m輸入要新增課程的價格:\033[0m''').strip()
course_time = input('''\033[34;0m輸入要新增課程的時長:\033[0m''').strip()
if course_name in self.school_obj.school_course: #判斷課程是否已經新增過
print("\33[32;1m課程存在\33[0m")
self.school_obj.create_course(course_name, course_price, course_time)
print("\33[32;1m課程更新完成\33[0m")
else:
self.school_obj.create_course(course_name,course_price,course_time)
print("\33[32;1m課程新增成功\33[0m")
self.school_db.update({self.choice_school: self.school_obj}) #更新資料庫資料
def add_class(self):
class_name = input('''\033[34;0m輸入要新增班級的名稱:\033[0m''').strip()
course_name = input('''\033[34;0m輸入要關聯的課程:\033[0m''').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("\33[32;1m班級建立成功\33[0m")
else:
print("\33[31;1m系統錯誤:關聯的課程不存在\33[0m")
else:
print("\33[31;1m系統錯誤:班級已經存在\33[0m")
def add_teacher(self):
teacher_name = input('''\033[34;0m輸入要招聘教師的名稱:\033[0m''').strip()
teacher_salary = input('''\033[34;0m輸入教師的薪資:\033[0m''').strip()
teacher_class = input('''\033[34;0m輸入要關聯的班級:\033[0m''').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("\33[32;1m新講師招聘成功\33[0m")
else:
self.school_obj.update_teacher(teacher_name, teacher_class, class_obj)
print("\33[32;1m講師已經存在,資訊更新完成\33[0m")
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")
classs.py
class Class(object):
'''班級類,包含名稱,課程,學生'''
def __init__(self,class_name,course_obj):
self.class_name = class_name
self.class_courese = course_obj
self.class_student = {} #學生字典
student.py
class Student(object):
'''學生類,包含姓名,年齡'''
def __init__(self,student_name,student_age):
self.student_name = student_name
self.student_age = student_age
course.py
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
teacher.py
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 = [] #班級列表 [s14,15]
def teacher_add_class(self,class_name,class_obj):
self.teacher_calss[class_name] = class_obj
school.py
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))