選課系統開發


題目:選課系統開發,要求有四種角色:學校、學員、課程、講師

詳細要求:
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

 

 

 













免責聲明!

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



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