Python 程序:选课系统

时间:2024-04-15 14:38:14

Python 程序:选课系统


角色:学校、学员、课程、讲师
要求:
1. 创建北京、上海 2 所学校
2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开
3. 课程包含,周期,价格,通过学校创建课程
4. 通过学校创建班级, 班级关联课程、讲师
5. 创建学员时,选择学校,关联班级
5. 创建讲师角色时要关联学校,
6. 提供两个角色接口
6.1 学员视图, 可以注册, 交学费, 选择班级,
6.2 讲师视图, 讲师可管理自己的班级, 上课时选择班级, 查看班级学员列表 , 修改所管理的学员的成绩
6.3 学校视图,创建讲师, 创建班级,创建课程
7. 上面的操作产生的数据都通过jison序列化保存到文件里


一、需求分析

程序最终目的是展示三个视图,每个视图有自己的功能:

需要定义的类:

二、目录结构

 

 三、程序

1 import sys,os
2 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) #程序主目录:/选课系统/
3 sys.path.append(BASE_DIR)  #添加环境变量
4 from core import main
5 if __name__ == \'__main__\':
6     a = main.run()
7     a.interactive()
run
  1 #!/usr/bin/env python
  2 # -*- coding:utf-8 -*-
  3 
  4 import sys,os,json
  5 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) #程序主目录:/选课系统/
  6 sys.path.append(BASE_DIR)  #添加环境变量
  7 db_DIR = BASE_DIR + r"\db"
  8 
  9 class base_class(object):
 10     \'\'\'基础类,用来进行文件的读写操作\'\'\'
 11     def write(self,dir_name,type,dict):
 12         filename = dir_name
 13         file_path = "%s\%s" %(db_DIR,type)
 14         ab_file = "%s\%s" %(file_path,filename)
 15         with open(ab_file, "w", encoding="UTF-8") as f:
 16             json.dump(dict, f)
 17             if True:
 18                 print("-------",type,"创建成功","-------")
 19                 for key in dict:
 20                     print(key,":\t",dict[key])
 21     def extend(self,dir_name,type,list):
 22         filename = dir_name
 23         file_path = "%s\%s" %(db_DIR,type)
 24         ab_file = "%s\%s" %(file_path,filename)
 25         with open(ab_file, "r", encoding="UTF-8") as f:
 26             file_list = json.load(f)
 27         file_list.extend(list)
 28         with open(ab_file, "w", encoding="UTF-8") as f:
 29             # json.dump(list, f)
 30             json.dump(file_list, f)
 31             if True:
 32                 print("-------",type,"创建成功","-------")
 33                 for i in list:
 34                     for key in i:
 35                         print(key,i[key])
 36                     print("\n")
 37         return True
 38     def read(self,type):
 39         data = []
 40         db_path = "%s\%s" %(db_DIR,type)
 41         for i in os.listdir(db_path):
 42             db_file = os.path.join(db_path,i)
 43             with open(db_file, "r", encoding="UTF-8") as f:
 44                 file_dict = json.load(f)
 45                 data.append(file_dict)
 46                 pass
 47         return data
 48 
 49 class admin(base_class):
 50     \'\'\'管理类:创建学校、招聘讲师、招收学员、创建班级、创建课程\'\'\'
 51     def __init__(self):
 52         pass
 53     def create_school(self):
 54         school_dict = {}
 55         school_name = input("校名:")
 56         school_address = input("地址:")
 57         school_dict["校名"] = school_name
 58         school_dict["地址"] = school_address
 59         print(school_dict)
 60         base_class.write(self,school_name, "school", school_dict)
 61     def read_school(self):
 62         list = base_class.read(self,"school")
 63         return list
 64     def create_teacher(self):
 65         teacher_dict = {}
 66         teacher_name = input("教师名字:")
 67         teacher_salary = input("工资:")
 68         teacher_course = input("教授课程:")
 69         teacher_school = input("所属学校:")
 70         teacher_dict["教师名字"] = teacher_name
 71         teacher_dict["工资"] = teacher_salary
 72         teacher_dict["教授课程"] = teacher_course
 73         teacher_dict["所属学校"] = teacher_school
 74         print(teacher_dict)
 75         base_class.write(self,teacher_name, "teacher", teacher_dict)
 76     def read_teacher(self):
 77         list = base_class.read(self,"teacher")
 78         return list
 79     def create_student(self):
 80         student_dict = {}
 81         student_name = input("学员姓名:")
 82         student_id = input("学员学号:")
 83         student_school = input("所属学校:")
 84         student_classes = input("学员班级:")
 85         student_course  = input("课程名:")
 86         student_dict["姓名"] = student_name
 87         student_dict["学号"] = student_id
 88         student_dict["学校"] = student_school
 89         student_dict["班级"] = student_classes
 90         student_dict["课程名"] = student_course
 91         base_class.write(self,student_name, "student", student_dict)
 92     def read_student(self):
 93         list = base_class.read(self,"student")
 94         return list
 95     def create_classes(self):
 96         classes_dict = {}
 97         classes_name = input("班级号:")
 98         classes_course = input("所学课程:")
 99         classes_student = input("学习的学员:")
100         classes_teacher = input("负责的讲师:")
101         classes_dict["班级名"] = classes_name
102         classes_dict["课程"] = classes_course
103         classes_dict["学习的学员"] = classes_student
104         classes_dict["负责讲师"] = classes_teacher
105         base_class.write(self,classes_name, "classes", classes_dict)
106     def read_classes(self):
107         list = base_class.read(self,"classes")
108         return list
109     def create_course(self):
110         course_dict = {}
111         course_name = input("课程名:")
112         course_price = input("价格:")
113         course_period = input("周期:")
114         course_dict["课程名"] = course_name
115         course_dict["价格"] = course_price
116         course_dict["周期"] = course_period
117         base_class.write(self,course_name, "course", course_dict)
118     def read_course(self):
119         list = base_class.read(self,"course")
120         return list
121 
122 class school(base_class):
123     \'\'\'学校类:名称、地址\'\'\'
124     def __init__(self,school_name,school_address):
125         self.school_name = school_name
126         self.school_address = school_address
127 
128 class teacher(base_class):
129     \'\'\'教师类:名称、工资、课程、创建学生成绩、创建上课记录、查看学生成绩、查看学生上课记录、查个人信息\'\'\'
130     def __init__(self,teacher_name,teacher_salary,teacher_course,teacher_school):
131         self.teacher_name =teacher_name
132         self.teacher_salary = teacher_salary
133         self.teacher_course = teacher_course
134         self.teacher_school = teacher_school
135     def create_class_record(self): #上课记录
136         class_record = []
137         student_school = input("选择学校:")
138         student_classes = input("选择班级:")
139         student_times = input("课次:")
140         student_list = base_class.read(self,"student")
141         for i in student_list:
142             if i["学校"] == student_school and i["班级"] == student_classes:
143                 student_name = i["姓名"]
144                 student_status = input("%s 上课情况:" % student_name)
145                 i["上课情况"] = student_status
146                 i["课次"] = student_times
147                 class_record.append(i)
148         base_class.extend(self,"class_record.json","class_record",class_record)
149     def create_student_results(self): #创建学生成绩
150         student_results = []
151         student_school = input("选择学校:")
152         student_classes = input("选择班级:")
153         student_times = input("课次:")
154         student_list = base_class.read(self,"student")
155         for i in student_list:
156             if i["学校"] == student_school and i["班级"] == student_classes:
157                 student_name = i["姓名"]
158                 student_grade = input("%s 成绩:" % student_name)
159                 i["成绩"] = student_grade
160                 i["课次"] = student_times
161                 student_results.append(i)
162         base_class.extend(self,"student_results.json","student_results",student_results)
163     def check_class_record(self): #查看上课记录
164         record_list = []
165         student_school = input("校名:")
166         student_class = input("班级:")
167         student_times = input("课次:")
168         class_record_list = base_class.read(self, "class_record")
169         for i in class_record_list:
170             for j in i:
171                 if j["学校"] == student_school and j["班级"] == student_class and j["课次"] == student_times:
172                     record_list.append(j)
173         for i in record_list:
174             for key in i:
175                 print(key,i[key])
176             print("\n")
177     def check_student_results(self): #查看学生成绩
178         grade_list = []
179         student_school = input("校名:")
180         student_class = input("班级:")
181         student_times = input("课次:")
182         student_results_list = base_class.read(self, "student_results")
183         for i in student_results_list:
184             for j in i:
185                 if j["学校"] == student_school and j["班级"] == student_class and j["课次"] == student_times:
186                     grade_list.append(j)
187         for i in grade_list:
188             for key in i:
189                 print(key,i[key])
190             print("\n")
191     def check_self_info(self): #查看个人信息
192         print(\'\'\'----info of Teacher:%s ----
193         Name:%s
194         Salary:%s
195         Course:%s
196         School:%s
197         \'\'\'%(self.teacher_name,self.teacher_name,self.teacher_salary,self.teacher_course,self.teacher_school)
198         )
199 
200 class student(base_class):
201     \'\'\'学生类:名称,id,注册,交学费、查成绩、查上课记录、查个人信息\'\'\'
202     def __init__(self,student_name,student_id,student_school, student_classes,student_course):
203         self.student_name =student_name
204         self.student_id = student_id
205         self.student_school = student_school
206         self.student_classes = student_classes
207         self.student_course = student_course
208 
209     def student_registered(self): #注册
210         student_dict = {}
211         student_dict["姓名"] = self.student_name
212         student_dict["学号"] = self.student_id
213         student_dict["学校"] = self.student_school
214         student_dict["班级"] = self.student_classes
215         student_dict["课程名"] = self.student_course
216         base_class.write(self,self.student_name, "student", student_dict)
217 
218     def pay_tuition(self): #交学费
219         course_list = base_class.read(self,"course")
220         print(course_list)
221         for i in course_list:
222             if i["课程名"] == self.student_course:
223                 print("课程价格为:¥%s"%i["价格"])
224                 money = input("提交金额:")
225                 if i["价格"] == money:
226                     print("%s has paid tuition for ¥%s"%(self.student_name,i["价格"]))
227                 else:
228                     print("金额错误!")
229 
230     def check_student_record(self): #查看学生上课记录
231         student_school = input("校名:")
232         student_class = input("班级:")
233         student_times = input("课次:")
234         student_name = input("姓名:")
235         class_record_list = base_class.read(self,"class_record")
236         for i in class_record_list:
237             for j in i:
238                 if j["学校"] == student_school and j["班级"] == student_class and j["课次"] == student_times \
239                     and j["姓名"] == student_name:
240                     for key in j:
241                         print(key,j[key])
242                     print("\n")
243 
244     def check_student_results(self): #查看学生成绩
245         student_school = input("校名:")
246         student_class = input("班级:")
247         student_times = input("课次:")
248         student_name = input("姓名:")
249         student_results_list = base_class.read(self,"student_results")
250         for i in student_results_list:
251             for j in i:
252                 if j["学校"] == student_school and j["班级"] == student_class and j["课次"] == student_times \
253                     and j["姓名"] == student_name:
254                     for key in j:
255                         print(key,j[key])
256                     print("\n")
257 
258 
259     def check_self_info(self): #查看个人信息
260         pass
261 
262 class classes(base_class):
263     \'\'\'班级类:名称,课程,学生,老师\'\'\'
264     def __init__(self,classes_name,classes_course,classes_student,classes_teacher):
265         self.classes_name = classes_name
266         self.classes_course = classes_course
267         self.classes_student = classes_student
268         self.classes_teacher = classes_teacher
269 
270 class course(base_class):
271     \'\'\'课程类:名称、价格、周期\'\'\'
272     def __init__(self,course_name,course_price,course_period):
273         self.course_name = course_name
274         self.course_price = course_price
275         self.course_period = course_period
276 
277 class school_view(admin):
278     \'\'\'学校管理视图\'\'\'
279     def auth(self,username,password):
280         if username == "admin" and password == "admin":
281             return True
282         else:
283             print("用户名或密码错误!")
284     def login(self):
285         menu = u\'\'\'
286         ------- 欢迎进入学校视图 ---------
287             \033[32;1m 1.  校区管理
288             2.  讲师管理
289             3.  学员管理
290             4.  课程管理
291             5.  返回
292             \033[0m\'\'\'
293         menu_dic = {
294             \'1\': school_view.school_manager,
295             \'2\': school_view.teacher_manager,
296             \'3\': school_view.student_manager,
297             \'4\': school_view.course_manager,
298             \'5\': "logout",
299         }
300         username = input("输入用户名:").strip()
301         password = input("输入密码:").strip()
302         auth = school_view.auth(self,username,password)
303         if auth:
304             exit_flag = False
305             while not exit_flag:
306                 print(menu)
307                 option = input("请选择:").strip()
308                 if option in menu_dic:
309                     if int(option) == 5:
310                         exit_flag = True
311                     else:
312                         menu_dic[option](self)
313                 else:
314                     print("\033[31;1m输入错误,重新输入\033[0m")
315     def school_manager(self):
316         exit_flag = False
317         while not exit_flag:
318             print("""
319                 ------- 欢迎进入校区管理 ---------
320                 \033[32;1m1、  创建校区
321                 2、  创建班级
322                 3、 查看学校
323                 4、 查看班级
324                 5、  返回
325                 \033[0m
326             """)
327             option = input("请选择:").strip()
328             if int(option) == 1:
329                 admin.create_school(self)
330             elif int(option) == 2:
331                 admin.create_classes(self)
332             elif int(option) == 3:
333                 list = admin.read_school(self)
334                 for i in list:
335                     print(i)
336             elif int(option) == 4:
337                 list = admin.read_classes(self)
338                 for i in list:
339                     print(i)
340             else:
341                 exit_flag = True
342     def teacher_manager(self):
343         exit_flag = False
344         while not exit_flag:
345             print("""
346                 ------- 欢迎进入讲师管理 ---------
347                 \033[32;1m 1.  创建讲师
348                 2.  查看讲师信息
349                 3.  返回
350                 \033[0m
351             """)
352             option = input("请选择:").strip()
353             if int(option) == 1:
354                 admin.create_teacher(self)
355             elif int(option) == 2:
356                 list = admin.read_teacher(self)
357                 for i in list:
358                     print(i)
359             else:
360                 exit_flag = True
361     def student_manager(self):
362         exit_flag = False
363         while not exit_flag:
364             print("""
365                 ------- 欢迎进入学员管理 ---------
366                 \033[32;1m 1.  创建学员
367                 2.  查看学员
368                 3.  返回
369                 \033[0m
370             """)
371             option = input("请选择:").strip()
372             if int(option) == 1:
373                 admin.create_student(self)
374             elif int(option) == 2:
375                 list = admin.read_student(self)
376                 for i in list:
377                     print(i)
378             else:
379                 exit_flag = True
380     def course_manager(self):
381         exit_flag = False
382         while not exit_flag:
383             print("""
384                 ------- 欢迎进入课程管理 ---------
385                 \033[32;1m 1.  创建课程
386                 2.  查看课程
387                 3.  返回
388                 \033[0m
389             """)
390             option = input("请选择:").strip()
391             if int(option) == 1:
392                 admin.create_course(self)
393             elif int(option) == 2:
394                 list = admin.read_course(self)
395                 for i in list:
396                     print(i)
397             else:
398                 exit_flag = True
399 
400 class teacher_view(object):
401     \'\'\'讲师视图\'\'\'
402     def auth(self,name):
403         list = admin.read_teacher(self)
404         for i in list:
405             if i["教师名字"] == name:
406                 return i
407     def login(self):
408         menu = u\'\'\'
409         ------- 欢迎进入讲师视图 ---------
410             \033[32;1m  1.  创建上课记录
411             2.  创建学员成绩
412             3.  查看学员上课记录
413             4.  查看学员成绩
414             5.  返回
415             \033[0m\'\'\'
416         name = input("教师名称:")
417         auth = teacher_view.auth(self,name)
418         if auth is not None:
419             teacher_name = auth["教师名字"]
420             teacher_salary = auth["工资"]
421             teacher_course = auth["教授课程"]
422             teacher_school = auth["所属学校"]
423             t1 = teacher(teacher_name,teacher_salary,teacher_course,teacher_school)
424             t1.check_self_info()
425             menu_dic = {
426             \'1\': t1.create_class_record,
427             \'2\': t1.create_student_results,
428             \'3\': t1.check_class_record,
429             \'4\': t1.check_student_results,
430             \'5\': "logout",
431             }
432             if True:
433                 exit_flag = False
434                 while not exit_flag:
435                     print(menu)
436                     option = input("请选择:").strip()
437                     if option in menu_dic:
438                         if int(option) == 5:
439                             exit_flag = True
440                         else:
441                             menu_dic[option]()
442                     else:
443                         print("\033[31;1m输入错误,重新输入\033[0m")
444         else:
445             print("不存在此教师")
446 
447 class student_view(object):
448     \'\'\'学生视图\'\'\'
449     def auth(self,name):
450         list = admin.read_student(self)
451         for i in list:
452             if i["姓名"] == name:
453                 return i
454     def login(self):
455         menu = u\'\'\'
456         ------- 欢迎进入学生管理视图 ---------
457         \033[32;1m 1.  交学费
458         2.  查看上课记录
459         3.  查看作业成绩
460         4.  返回
461         \033[0m\'\'\'
462         name = input("姓名:")
463         auth = student_view.auth(self,name)
464         if auth is not None:
465             print(auth)
466             student_name = auth["姓名"]
467             student_id = auth["学号"]
468             student_school = auth["学校"]
469             student_classes = auth["班级"]
470             student_course = auth["课程名"]
471             st1 = student(student_name,student_id,student_school,student_classes,student_course)
472             st1.check_self_info()
473             menu_dic = {
474             \'1\': st1.pay_tuition,
475             \'2\': st1.check_student_record,
476             \'3\': st1.check_student_results,
477             \'4\': "logout"}
478             if True:
479                 exit_flag = False
480                 while not exit_flag:
481                     print(menu)
482                     option = input("请选择:").strip()
483                     if option in menu_dic:
484                         if int(option) == 4:
485                             exit_flag = True
486                         else:
487                             menu_dic[option]()
488                     else:
489                         print("\033[31;1m输入错误,重新输入\033[0m")
490         else:
491             choice = input("\033[32;1m不存在此学生是否注册Y/N:\033[0m")
492             if choice == "Y":
493                 admin.create_student(self)
494             else:
495                 print("\033[31;1m谢谢使用!\033[0m")
496 
497 class run(object):
498     \'\'\'运行\'\'\'
499     def interactive(self):
500         menu = u\'\'\'
501 ------- 欢迎进入选课系统 ---------
502     \033[32;1m 1.  学生视图
503     2.  讲师视图
504     3.  学校视图
505     4.  退出
506         \033[0m\'\'\'
507         menu_dic = {
508             \'1\': student_view,
509             \'2\': teacher_view,
510             \'3\': school_view,
511             \'4\': "logout"}
512         exit_flag = False
513         while not exit_flag:
514             print(menu)
515             option_view = input("请选择视图:").strip()
516             if option_view in menu_dic:
517                 if int(option_view) == 4:
518                     exit_flag = True
519                 else:
520                     menu_dic[option_view].login(self)
521             else:
522                 print("\033[31;1m输入错误,重新输入\033[0m")
main