1. 程式人生 > >python3自學之路作業 選課系統

python3自學之路作業 選課系統

本節作業:選課系統

角色:學校、學員、課程、講師
要求:
1. 建立北京、上海 2 所學校
2. 建立linux , python , go 3個課程 , linux\py 在北京開, go 在上海開
3. 課程包含,週期,價格,通過學校建立課程
4. 通過學校建立班級, 班級關聯課程、講師
5. 建立學員時,選擇學校,關聯班級
5. 建立講師角色時要關聯學校,
6. 提供兩個角色介面
6.1 學員檢視, 可以註冊, 交學費, 選擇班級,
6.2 講師檢視, 講師可管理自己的班級, 上課時選擇班級, 檢視班級學員列表 , 修改所管理的學員的成績
6.3 管理檢視,建立講師, 建立班級,建立課程

7. 上面的操作產生的資料都通過pickle序列化儲存到檔案裡 

程式結構:

course.py

import pickle
import os

file_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
db_path = file_path + r'\db'
db_school = db_path + r'\school'
db_course = db_path + r'\course'

class File_operation(object):
    def __init__(self):
        pass
    
    """
    測試方法:
        # s1 = School('NJAU','浦口')
        # s1.creatcourse()    
    """
    def save(self,type,file_name,dict):
        '''
                儲存資料
        '''
        path = '%s\%s' %(db_path,type)
        file_path = '%s\%s' %(path,file_name)
        if not os.path.isdir(path):
            os.mkdir(path)
        if os.path.isdir(path):    
            with open(file_path,'wb') as f:
                f.write(pickle.dumps(dict))
                f.flush()
                print('-------------',type,'建立成功','-------------')
                for key in dict:
                    print(key,':\t',dict[key])
    
    def view_list(self,type):
        msg_list = []
        path = '%s\%s' %(db_path,type)
        if os.path.isdir(path):
            print('-------------',type,'列表','-------------')
            for filelist in os.listdir(path):
                #print(filelist)
                msg_list.append(filelist)
        return msg_list
    """
        測試方法:
    f1 = File_operation()
    print(f1.open('course'))
    """
    def open(self,type):
        '''
                讀取資料
        '''
        path = '%s\%s' %(db_path,type)
        data = []
        if os.path.isdir(path):
            for filelist in os.listdir(path):
                if os.path.isfile(os.path.join(path,filelist)):
                    db_file = os.path.join(path,filelist)
                    with open(db_file,'rb') as f:
                        file_dict = pickle.load(f)
                        data.append(file_dict)
        return data
'''課程類'''                
class Course(object):
    def __init__(self,name,period,price):
        self.name = name
        self.period = period
        self.price = price
'''學校成員類'''
class SchoolMember(object):
    def __init__(self,name,school):
        self.name = name
        self.school = school

'''講師類'''
class Teacher(SchoolMember): 
    def __init__(self,name,school,salary):
        super(Teacher,self).__init__(name,school)
        self.salary = salary
        
    def choose_grade(self):
        grade_list = File_operation.view_list(self, 'grade')
        print("歡迎進入講師選班系統")
        msg_grade = input('請輸入班級名:').strip()
        if msg_grade in grade_list:
            print("講師 %s 選擇%s班級成功 " %(self['name'],msg_grade))
            print(self['name'],msg_grade)
        else:
            print("講師 %s 選擇%s班級失敗 " %(self['name'],msg_grade))
            
    def view_studentList(self):
        student_list = File_operation.view_list(self, 'student')
        print(student_list)
        
    def change_studentscore(self):
        print("歡迎進入講師評閱系統") 
        msg_name = input('請輸入學生姓名:').strip()
        msg_score = input('請輸入學生分數:').strip()
        if msg_name in File_operation.view_list(self, 'student'):
            msg = File_operation.open(self, 'student')
            for bill in msg:
                if bill["name"] == msg_name:
                    bill["score"] = msg_score
                    #self.name
                    print('講師 %s 修改學生%s %s成績為%s' %(self['name'],msg_name,bill["grade"],msg_score))
                
        else:
            print("不存在名為  %s 的學生" %msg_name)
        
'''學生類'''        
class Student(SchoolMember):
    def __init__(self,name,sex,school,grade):
        super(Student,self).__init__(name,school)
        self.grade = grade
        self.sex = sex
    
    def register(self):
        stu_msg = {}
        print("歡迎進入學生註冊系統")
        stu_name = input('姓名:')
        stu_sex = input('性別:')
        stu_school = input('學校:')
        stu_grade = input('班級:')
        st = Student(stu_name,stu_sex,stu_school,stu_grade)
        stu_msg['name'] = st.name
        stu_msg['sex'] = st.sex
        stu_msg['school'] = st.school
        stu_msg['grade'] = st.grade
        stu_msg['score'] = 0
        File_operation.save(self, 'student',st.name,stu_msg)
     
    def pay(self):
        print("*********恭喜你繳費成功*********")
    
'''學校類'''
class School(object):
    def __init__(self,name,address,course):
        self.name = name
        self.address = address
        self.course = course
         
    def creatcourse(self):
        '''
                建立課程
        '''
        course_dict = {}
        print('--------------歡迎進入建立課程系統--------------')
        course_name = input("課程名:")
        course_period = input("週期:")
        course_price = input("價格:")
        course_test = Course(course_name,course_period,course_price)
        course_dict['course'] = course_test.name
        course_dict['period'] = course_test.period
        course_dict['price'] = course_test.price
        File_operation.save(self, 'course',course_test.name,course_dict)
        
    def creatgrade(self):
        '''
                建立班級
        '''
        grade_dict = {}
        print('--------------歡迎進入建立班級系統--------------')
        grade_name = input("班級名:")
        grade_course = input("所學課程:")
        grade_teacher = input("授課講師:")
        grade_test = Grade(grade_course,grade_name,grade_teacher)
        grade_dict['grade'] = grade_test.name
        grade_dict['course'] = grade_test.course
        grade_dict['teacher'] = grade_test.teacher
        File_operation.save(self, 'grade',grade_course,grade_dict)
        
'''班級類'''
class Grade(object):  
    def __init__(self,course,name,teacher):
        self.course = course
        self.name = name
        self.teacher = teacher


class Admin(object):
    def __init__(self):
        pass
    
    def create_teacher(self):
        teacher_dict = {}
        print('--------------歡迎進入講師註冊系統--------------')
        teacher_name = input("姓名:")
        teacher_school = input("學校:")
        teacher_salary = input("工資:")
        teacher_test = Teacher(teacher_name,teacher_school,teacher_salary)
        teacher_dict['name'] = teacher_test.name
        teacher_dict['school'] = teacher_test.school
        teacher_dict['salary'] = teacher_test.salary
        File_operation.save(self, 'teacher',teacher_test.name,teacher_dict)
        
    def create_grade(self):
        School.creatgrade(self)
    
    def create_course(self):    
        School.creatcourse(self)
        
    def create_school(self):
        school_dict = {}
        print('--------------歡迎進入學校建立系統--------------')
        school_name = input("校名:")
        school_address = input("地址:")
        school_course = input("課程:")
        school_test = School(school_name,school_address,school_course)
        school_dict['school'] = school_test.name
        school_dict['address'] = school_test.address
        school_dict['course'] = school_test.course
        File_operation.save(self, 'school',school_test.name,school_dict)        

class Student_view(Student):
    def __init__(self,name,sex,school,grade):
        super(Student_view,self).__init__(name,sex,school,grade)
    
    def login(self):
        msg = """
        --------------歡迎進入學生管理檢視--------------
        1、註冊
        2、繳費
        3、返回
        """
        msg_dist = {
                    '1':Student.register,
                    '2':Student.pay,
                    '3':"logout"
                    }
        if True:
            exit_flag = False
            while not exit_flag:
                print(msg)
                option = input('請選擇:').strip()
                if option in msg_dist:
                    if int(option) == 3:
                        exit_flag = True
                    else:
                        msg_dist[option](self)
                else:
                    print('--------------輸入錯誤--------------')
         
class Teacher_view(Teacher):
    def __init__(self,name,school,salary):
        super(Teacher_view,self).__init__(name,school,salary)     
    
    def login(self):
        msg = """
        --------------歡迎進入講師管理檢視--------------
        1、選擇班級
        2、檢視學員列表
        3、修改學員成績
        4、返回
        """
        msg_dist = {
                    '1':Teacher.choose_grade,
                    '2':Teacher.view_studentList,
                    '3':Teacher.change_studentscore,
                    '4':"logout"
                    } 
        if True:
            exit_flag = False
            while not exit_flag:
                print(msg)
                option = input('請選擇:').strip()
                if option in msg_dist:
                    if int(option) == 4:
                        exit_flag = True
                    else:
                        msg_dist[option](self)
                else:
                    print('--------------輸入錯誤--------------')

class Admin_view(Admin):
    def __init__(self):
        pass
    
    def login(self):
        msg = """
        --------------歡迎進入管理員檢視--------------
        1、建立講師
        2、建立班級
        3、建立課程
        4、返回
        """
        msg_dist = {
                    '1':Admin.create_teacher,
                    '2':Admin.create_grade,
                    '3':Admin.create_course,
                    '4':"logout"
                    } 
        if True:
            exit_flag = False
            while not exit_flag:
                print(msg)
                option = input('請選擇:').strip()
                if option in msg_dist:
                    if int(option) == 4:
                        exit_flag = True
                    else:
                        msg_dist[option](self)
                else:
                    print('--------------輸入錯誤--------------')

class run(object):
    def __init__(self):
        pass
    
    def check_msg(self):
        mms = {}
        name = input("請輸入您的姓名:").strip()
        type = input("請輸入您的身份:").strip() 
        if name in File_operation.view_list(self,type):
            msg = File_operation.open(self, type)
            for bill in msg:
                if bill["name"] == name:
                    print("驗證成功")
                    print(bill)
                    return bill,True
        else:
            print("******身份錯誤******")
            return False,False
 
    def interactive(self):
        msg = """
                --------------歡迎進入系統檢視--------------
                1、學員檢視
                2、講師檢視
                3、管理檢視
                4、退出
                """
        msg_dist = {
                    '1':Student_view,
                    '2':Teacher_view,
                    '3':Admin_view,
                    '4':"logout"
                    } 
        if True:
            exit_flag = False
            while not exit_flag:
                print(msg)
                option = input('請選擇:').strip()
                if option in msg_dist:
                    if int(option) == 4:
                        exit_flag = True
                    elif int(option) == 3:
                        msg_dist[option].login(self)
                    else:
                        account,check = run.check_msg(self)
                        if check:
                            print('驗證真的的成功了')
                            
                            msg_dist[option].login(account)
                        
                else:
                    print('--------------輸入錯誤--------------') 
main.py
import os,sys

file_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
core_path = file_path + r'\core'
sys.path.append(file_path)

from core import course



if __name__ == '__main__':
    start = course.run()
    start.interactive()
程式執行效果圖:
                --------------歡迎進入系統檢視--------------
                1、學員檢視
                2、講師檢視
                3、管理檢視
                4、退出
                
請選擇:2
請輸入您的姓名:hcl
請輸入您的身份:ln
******身份錯誤******

                --------------歡迎進入系統檢視--------------
                1、學員檢視
                2、講師檢視
                3、管理檢視
                4、退出
                
請選擇:	2
請輸入您的姓名:hcl
請輸入您的身份:teacher
------------- teacher 列表 -------------
驗證成功
{'name': 'hcl', 'school': 'njau', 'salary': '10000'}
驗證真的的成功了

        --------------歡迎進入講師管理檢視--------------
        1、選擇班級
        2、檢視學員列表
        3、修改學員成績
        4、返回
        
請選擇:1
------------- grade 列表 -------------
歡迎進入講師選班系統
請輸入班級名:python
講師 hcl 選擇python班級失敗 

        --------------歡迎進入講師管理檢視--------------
        1、選擇班級
        2、檢視學員列表
        3、修改學員成績
        4、返回
        
請選擇:2
------------- student 列表 -------------
['ln']

        --------------歡迎進入講師管理檢視--------------
        1、選擇班級
        2、檢視學員列表
        3、修改學員成績
        4、返回
        
請選擇:	3
歡迎進入講師評閱系統
請輸入學生姓名:ln
請輸入學生分數:100
------------- student 列表 -------------
講師 hcl 修改學生ln 電氣成績為100

        --------------歡迎進入講師管理檢視--------------
        1、選擇班級
        2、檢視學員列表
        3、修改學員成績
        4、返回
        
請選擇:	4

                --------------歡迎進入系統檢視--------------
                1、學員檢視
                2、講師檢視
                3、管理檢視
                4、退出
                
請選擇:	2
請輸入您的姓名:hcl
請輸入您的身份:teacher
------------- teacher 列表 -------------
驗證成功
{'name': 'hcl', 'school': 'njau', 'salary': '10000'}
驗證真的的成功了

        --------------歡迎進入講師管理檢視--------------
        1、選擇班級
        2、檢視學員列表
        3、修改學員成績
        4、返回
        
請選擇:	4

                --------------歡迎進入系統檢視--------------
                1、學員檢視
                2、講師檢視
                3、管理檢視
                4、退出
                
請選擇:1
請輸入您的姓名:ln
請輸入您的身份:student
------------- student 列表 -------------
驗證成功
{'name': 'ln', 'sex': '女', 'school': 'NAUU', 'grade': '電氣', 'score': 0}
驗證真的的成功了

        --------------歡迎進入學生管理檢視--------------
        1、註冊
        2、繳費
        3、返回
        
請選擇:	2
*********恭喜你繳費成功*********

        --------------歡迎進入學生管理檢視--------------
        1、註冊
        2、繳費
        3、返回
        
請選擇:	3

                --------------歡迎進入系統檢視--------------
                1、學員檢視
                2、講師檢視
                3、管理檢視
                4、退出
                
請選擇:3

        --------------歡迎進入管理員檢視--------------
        1、建立講師
        2、建立班級
        3、建立課程
        4、返回
        
請選擇:1
--------------歡迎進入講師註冊系統--------------
姓名:hn
學校:NJAU
工資:20000
------------- teacher 建立成功 -------------
name :	 hn
school :	 NJAU
salary :	 20000

        --------------歡迎進入管理員檢視--------------
        1、建立講師
        2、建立班級
        3、建立課程
        4、返回
        
請選擇:2
--------------歡迎進入建立班級系統--------------
班級名:Linux
所學課程:linux
授課講師:hcl
------------- grade 建立成功 -------------
grade :	 Linux
course :	 linux
teacher :	 hcl

        --------------歡迎進入管理員檢視--------------
        1、建立講師
        2、建立班級
        3、建立課程
        4、返回
        
請選擇:	3
--------------歡迎進入建立課程系統--------------
課程名:linux
週期:2
價格:200
------------- course 建立成功 -------------
course :	 linux
period :	 2
price :	 200

        --------------歡迎進入管理員檢視--------------
        1、建立講師
        2、建立班級
        3、建立課程
        4、返回
        
請選擇:	4

                --------------歡迎進入系統檢視--------------
                1、學員檢視
                2、講師檢視
                3、管理檢視
                4、退出
                
請選擇:4


能實現大部分功能 但存在缺陷

額.........忘記建立學校了