python--面向對象編程之學生選課系統練習


1、系統目錄結構

文件夾注解:

bin--系統管理員和學生的主程序代碼

config--系統的配置文件

db--系統的數據文件

  admin--管理員的數據文件

  student--學生的數據文件

lib--系統的公共類文件

 

 1、admin.py

  主要用於管理員注冊、登錄系統、創建授課老師、創建課程等操作。

 

  1 #!/usr/bin/env python
  2 # -*- coding:utf-8 -*-
  3 """
  4 管理員可操作的方法
  5 """
  6 import os
  7 import sys
  8 sys.path.append(os.path.dirname(os.path.dirname(__file__)))
  9 import  pickle
 10 import os
 11 from lib import models
 12 from config import settings
 13 from lib.models import Course
 14 from lib.models import Teacher
 15 from lib.models import Admin
 16 
 17 
 18 def create_teacher(admin_obj):
 19     """
 20     管理員創建老師
 21     :param admin_obj:
 22     :return:
 23     """
 24     teacher_list = []
 25     while True:
 26         teacher_name = input("請輸入老師的姓名:(q退出)")
 27         if teacher_name == "q":
 28             break
 29         teacher_age = input("請輸入老師的年齡:")
 30         obj = models.Teacher(teacher_name, teacher_age, admin_obj)
 31         teacher_list.append(obj)
 32         if os.path.exists("teacher_list"): #判斷老師列表是否存在
 33             exists_list = pickle.load(open(settings.TEACHER_DB_DIR, 'rb'))
 34             teacher_list.extend(exists_list)
 35         pickle.dump(teacher_list, open(settings.TEACHER_DB_DIR, 'wb'))
 36 
 37 def create_course(admin_obj):
 38     """
 39     管理員創建課程
 40     :param admin_obj:
 41     :return:
 42     """
 43     teacher_list = pickle.load(open(settings.TEACHER_DB_DIR, 'rb'))
 44     for num, item in enumerate(teacher_list, 1):
 45         print(num, item.name, item.age, item.create_time, item.create_admin.username)
 46     course_list = []
 47     while True:
 48         name = input("請輸入課程名(q退出):")
 49         if name == "q":
 50             break
 51         cost = input("請輸入課時費:")
 52         num = input('請選擇老師(序號):')
 53         obj = models.Course(name, cost, teacher_list[int(num) - 1], admin_obj)
 54         course_list.append(obj)
 55     if os.path.exists(settings.COURSE_DB_DIR): #判斷課程列表是否存在
 56         exists_list = pickle.load(open(settings.COURSE_DB_DIR, 'rb'))
 57         course_list.extend(exists_list)
 58     pickle.dump(course_list, open(settings.COURSE_DB_DIR, 'wb'))
 59 
 60 def look_course():
 61     """
 62     管理員查看課程表
 63     :return:
 64     """
 65     course_list = pickle.load(open(settings.COURSE_DB_DIR, 'rb'))
 66     for num, item in enumerate(course_list, 1):
 67         print(num, item.course_name, item.cost, item.teacher.name, item.create_time, item.create_admin.username)
 68 
 69 def to_login(user, pwd):
 70     """
 71     管理員登錄的方法
 72     :param user:
 73     :param pwd:
 74     :return:
 75     """
 76     if os.path.exists(os.path.join(settings.BASE_ADMIN_DIR, user)):
 77         # 從文件中將管理員對象讀取出來(里面封裝了用戶信息以及提供了登錄訪求)
 78         admin_obj = pickle.load(open(os.path.join(settings.BASE_ADMIN_DIR, user), 'rb'))
 79         if admin_obj.login(user, pwd):
 80             print('登錄成功!')
 81             while True:
 82                 sel = input("1、創建老師;2、創建課程; 3、查看課程表(q退出程序) \n >>>>")
 83                 if sel == '1':  #創建老師
 84                     create_teacher(admin_obj)
 85                 elif sel == '2':  #創建課程
 86                     create_course(admin_obj)
 87                 elif sel == '3':
 88                     look_course()
 89                 else:
 90                     break
 91         else:
 92             return 1
 93     else:
 94         return 0
 95 
 96 def to_register(user, pwd):
 97     """
 98     管理員注冊的方法
 99     :param user:
100     :param pwd:
101     :return:
102     """
103     admin_obj = models.Admin()
104     admin_obj.register(user, pwd)
105 
106 def main():
107     inp = input("1、管理員登錄; 2、管理員注冊;\n >>>>>")
108     user = input('請輸入用戶名:')
109     pwd = input('請輸入密碼:')
110     if inp == '1':
111         ret = to_login(user, pwd)
112         if ret == 1:
113             print("密碼錯誤!")
114         elif ret == 0:
115             print("用戶不存在!")
116 
117     elif inp == '2':
118         to_register(user, pwd)
119 
120 
121 if __name__ == "__main__":
122     main()
admin.py

 

2、students.py

  主要是學生注冊、登錄系統,選課等操作。

 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 """
 4 學生可操作的方法
 5 """
 6 import os
 7 import sys
 8 import pickle
 9 sys.path.append(os.path.dirname(os.path.dirname(__file__)))
10 
11 from lib.models import Course
12 from lib.models import Admin
13 from lib.models import Teacher
14 from config import settings
15 from lib import models
16 
17 def to_select_course(student_obj):
18     """
19     學生選課的方法
20     :param student_obj:
21     :return:
22     """
23     course_list = pickle.load(open(settings.COURSE_DB_DIR, 'rb'))
24     for num, item in enumerate(course_list, 1):
25         print(num, item.course_name, item.cost, item.teacher.name)
26     while True:
27         num = input("請選擇課程(q退出):")
28         if num == 'q':
29             break
30         select_course_obj = course_list[int(num) - 1]
31         if select_course_obj not in student_obj.course_list:
32             student_obj.course_list.append(select_course_obj)
33     pickle.dump(student_obj, open(os.path.join(settings.BASE_STUDENTS_DIR, student_obj.username), 'wb'))
34 
35 def course_info(student_obj):
36     """
37     查看學生已選擇的課程
38     :return:
39     """
40     for item in student_obj.course_list:
41         print(item.course_name, item.teacher.name)
42 
43 def to_register(user, pwd):
44     """
45     學生注冊
46     :param user:
47     :param pwd:
48     :return:
49     """
50     obj = models.Student()
51     obj.register(user, pwd)
52 
53 def to_login(user, pwd):
54     """
55     學生登錄
56     :param user:
57     :param pwd:
58     :return:
59     """
60     if os.path.exists(os.path.join(settings.BASE_STUDENTS_DIR, user)):
61         student_obj = pickle.load(open(os.path.join(settings.BASE_STUDENTS_DIR, user), 'rb'))
62         if student_obj.login(user, pwd):
63             inp = input('1、選課;2、上課;3、查看已選課程 \n >>>')
64             if inp == '1':
65                 to_select_course(student_obj)
66             elif inp == '3':
67                 course_info(student_obj)
68             elif inp == '2':
69                 pass
70         else:
71             print('密碼錯誤')
72     else:
73         print("學生用戶不存在")
74 
75 def main():
76     inp = input("1、學生登錄;2、學生注冊;\n >>>")
77     user = input("請輸入學生用戶名:")
78     pwd = input("請輸入登錄密碼:")
79     if inp == '1':
80         to_login(user, pwd)
81     elif inp == '2':
82         to_register(user, pwd)
83 
84 
85 if __name__ == "__main__":
86     main()
students.py

 

3、settings.py

  系統主要路徑參數的設置文件

1 #!/usr/bin/env python
2 # -*- coding:utf-8 -*-
3 import os
4 #定義路徑變量
5 BASE_DIR = os.path.dirname(os.path.dirname(__file__))
6 BASE_ADMIN_DIR = os.path.join(BASE_DIR, "db", "admin")
7 BASE_STUDENTS_DIR = os.path.join(BASE_DIR, "db", "students")
8 TEACHER_DB_DIR = os.path.join(BASE_DIR, "db", "teacher_list")
9 COURSE_DB_DIR = os.path.join(BASE_DIR, "db", "course_list")
settings.py

 

4、models.py

  系統公共類的代碼實現

  1 #!/usr/bin/env python
  2 # -*- coding:utf-8 -*-
  3 """
  4 用於存儲老師、管理員、學生類
  5 """
  6 
  7 import time
  8 import  pickle
  9 from config import settings
 10 import os
 11 
 12 
 13 #定義老師類
 14 class Teacher:
 15     """
 16     封裝老師的相關信息
 17     """
 18     def __init__(self, name, age, admin):
 19         self.name = name
 20         self.age = age
 21         self.__assets = 0
 22         self.create_time = time.strftime('%Y-%m-%d %H:%M:%S')
 23         self.create_admin = admin
 24 
 25     def gain(self, cost):
 26         """
 27         增加資產
 28         :param cost: 增加的數量
 29         :return:
 30         """
 31         self.__assets += cost
 32 
 33     def decrease(self, cost):
 34         """
 35         減少資產
 36         :param cost: 減少的數量
 37         :return:
 38         """
 39         self.__assets -= cost
 40 
 41 #定義課程類
 42 class Course:
 43     """
 44     課程相關信息
 45     """
 46     def __init__(self, course_name, cost, teacher_obj, admin):
 47         self.course_name = course_name
 48         self.cost = cost
 49         self.teacher = teacher_obj
 50         self.create_time = time.strftime('%Y-%m-%d %H:%M:%S')
 51         self.create_admin = admin
 52 
 53 #定義管理員類
 54 class Admin:
 55     """
 56     封裝管理員
 57     """
 58     def __init__(self):
 59         self.username = None
 60         self.password = None
 61 
 62     def login(self, user, pwd):
 63         """
 64         管理員登錄
 65         :param user:
 66         :param pwd:
 67         :return:
 68         """
 69         if self.username == user and self.password == pwd:
 70             return True
 71         else:
 72             return False
 73 
 74     def register(self, user, pwd):
 75         """
 76         管理員注冊
 77         :param user:
 78         :param pwd:
 79         :return:
 80         """
 81         self.username = user
 82         self.password= pwd
 83 
 84         path = os.path.join(settings.BASE_ADMIN_DIR, self.username)
 85         pickle.dump(self, open(path, 'xb'))
 86 
 87 #定義學生類
 88 class Student:
 89     """
 90     學生相關信息
 91     """
 92     def __init__(self):
 93         self.username = None
 94         self.password = None
 95 
 96         self.course_list = []
 97         self.study_dict = {}
 98 
 99     def select_course(self, course_obj):
100         """
101         學生選課
102         :param course_obj:
103         :return:
104         """
105         self.course_list.append(course_obj)
106 
107     def register(self, user, pwd):
108         """
109         學生注冊
110         :param user:
111         :param pwd:
112         :return:
113         """
114         self.username = user
115         self.password = pwd
116         path = os.path.join(settings.BASE_STUDENTS_DIR, self.username)
117         pickle.dump(self, open(path, 'xb'))
118 
119     def login(self, user, pwd):
120         """
121         學生登錄
122         :param user:
123         :param pwd:
124         :return:
125         """
126         if self.username == user and self.password == pwd:
127             return True
128         else:
129             return False
130 
131     def study(self, course_obj):
132         """
133         學生上課
134         :param course_obj:
135         :return:
136         """
137         class_result = course_obj.have_lesson()
138         if course_obj in self.study_dict.keys():
139             self.study_dict[course_obj].append(class_result)
140         else:
141              self.study_dict[course_obj] = [class_result,]
models.py

 


免責聲明!

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



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