python小项目——选课系统
程序名称: python选课系统
角色:学校、学员、课程、讲师
要求:
1. 创建北京、上海 2 所学校
2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开
3. 课程包含,周期,价格,通过学校创建课程
4. 通过学校创建班级, 班级关联课程、讲师
5. 创建学员时,选择学校,关联班级
6. 创建讲师角色时要关联学校,
7. 提供两个角色接口
8. 学员视图, 可以注册, 交学费, 选择班级,
9. 讲师视图, 讲师可管理自己的班级, 上课时选择班级, 查看班级学员列表 , 修改所管理的学员的成绩
10. 管理视图,创建讲师, 创建班级,创建课程
11. 上面的操作产生的数据都通过pickle序列化保存到文件里
框架
1、视图:三个视图,管理员视图、讲师视图、学员视图
2、角色分类:学校、课程、班级、讲师、学员
3、课程、班级、讲师、学员都要通过管理员进行创建
4、关联关系:教师关联班级,班级关联课程。创建讲师时,要有关联班级的信息,创建班级时,要关联对应课程
5、视图功能:管理视图:添加查看更新课程、班级、讲师、学员信息
讲师视图:查看自己的学员
学员视图:注册缴费
数据库:使用shelve模块,存储在database
项目目录架构

代码
bin中start.py
1 #!/usr/bin/env python 2 #-*- coding:utf-8 -*- 3 #Author:SiWen 4 5 import os 6 import sys 7 import platform 8 9 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 10 sys.path.insert(0,BASE_DIR) 11 #print(sys.path) 12 13 from core import main 14 from config import settings 15 16 if __name__ == '__main__': 17 obj = main.Main() 18 obj.run()
config下setting.py
1 #!/usr/bin/env python 2 #-*- coding:utf-8 -*- 3 #Author:SiWen 4 5 import os 6 import sys 7 import platform 8 9 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 10 database_path = os.path.join(BASE_DIR,"database") 11 12 school_db_file = os.path.join(database_path,"school")
core中main主函数
1 #!/usr/bin/env python 2 #-*- coding:utf-8 -*- 3 #Author:SiWen 4 import os 5 import sys 6 import shelve 7 from config import settings 8 from modules.school import School 9 10 11 class Main(object): 12 def __init__(self): 13 pass 14 15 def run(self): 16 while True: 17 print('''_______欢迎进入选课系统_______ 18 1.学生视图 19 2.讲师视图 20 3.学校视图 21 q.返回主界面''') 22 user_choice = input('请输入您的选择:') 23 if user_choice == '1': 24 Manage_student() 25 if user_choice == '2': 26 Manage_teacher() 27 if user_choice == '3': 28 Manage_school() 29 if user_choice == 'q': 30 print('您已退出系统,返回主界面') 31 break 32 else: 33 print('请输入正确选项') 34 35 36 class Manage_school(object): 37 # 学校视图 38 def __init__(self): 39 if os.path.exists(settings.school_db_file + '.dat'): 40 self.school_db = shelve.open(settings.school_db_file) # 打开数据库 41 self.run_manage() 42 self.school_db.close() # 关闭数据库 43 44 else: 45 print('初始化数据库') 46 self.initialize_school() 47 self.run_manage() 48 self.school_db.close() 49 50 def initialize_school(self): 51 self.school_db = shelve.open(settings.school_db_file) 52 self.school_db['北京'] = School('中国*北京', '北京') 53 self.school_db['上海'] = School('中国*上海', '上海') 54 55 def run_manage(self): 56 while True: 57 for key in self.school_db: 58 print('学校名称:', key) 59 school_choice = input('请选择学校名称:').strip() 60 self.school_choice = school_choice 61 if school_choice in self.school_db: 62 self.school_obj = self.school_db[school_choice] 63 64 while True: 65 print("\n欢迎来到老男孩%s校区\n" 66 "添加课程 add_course\n" 67 "增加班级 add_class\n" 68 "招聘讲师 add_teacher\n" 69 "查看课程 check_course\n" 70 "查看班级 check_class\n" 71 "查看讲师 check_teacher\n" 72 "退出程序 exit" % self.school_obj.school_name) 73 user_func = input('请输入要进行的操作:').strip() 74 if hasattr(self, user_func): 75 getattr(self, user_func)() 76 else: 77 print('Please input right school name') 78 79 def add_course(self): 80 course_name = input('请输入课程名称').strip() 81 course_price = input('请输入课程价格').strip() 82 course_time = input('请输入课程3' 83 '周期').strip() 84 if course_name in self.school_obj.school_course: 85 print('课程已存在') 86 self.school_obj.create_course(course_name, course_price, course_time) 87 print("课程更新完成") 88 else: 89 self.school_obj.create_course(course_name, course_price, course_time) 90 print("课程添加成功") 91 92 self.school_db.update({self.school_choice: self.school_obj}) 93 94 def add_teacher(self): 95 teacher_name = input('请输入讲师名字').strip() 96 teacher_salary = input('请输入讲师工资').strip() 97 teacher_class = input('请输入讲师的班级').strip() 98 if teacher_class in self.school_obj.school_class: 99 class_obj = self.school_obj.school_class[teacher_class] 100 if teacher_name not in self.school_obj.school_teacher: 101 self.school_obj.create_teacher(teacher_name, teacher_salary, teacher_class.class_obj) 102 print('新讲师聘用成功') 103 else: 104 self.school_obj.update_teacher(teacher_name, teacher_salary, teacher_class.class_obj) 105 print('讲师信息更新成功') 106 else: 107 print('关联课程不存在,请输入正确班级') 108 self.school_db.update({self.school_choice: self.school_obj}) # 更新数据库 109 110 def add_class(self): 111 class_name = input('请输入班级名称').strip() 112 course_name = input('请输入开设课程').strip() 113 if class_name not in self.school_obj.school_class: 114 if course_name in self.school_obj.school_course: 115 course_obj = self.school_obj.school_course[course_name] 116 self.school_obj,creat_class(class_name,course_obj) 117 self.school_db.update({self.school_choice: self.school_obj}) # 更新数据库 118 print('课程添加成功') 119 else: 120 print ('系统错误,课程不存在') 121 else: 122 print('系统错误,班级已存在') 123 124 def check_course(self): 125 self.school_obj.show_course() 126 127 def check_class(self): 128 self.school_obj.show_class() 129 130 def check_teacher(self): 131 self.school_obj.show_teacher() 132 133 def exit(self): 134 self.school_db.close() 135 sys.exit("\033[32;1m欢迎下次使用学员管理系统\033[0m") 136 class Manage_teacher(object): 137 def __init__(self): 138 if os.path.exists(settings.school_db_file + ".dat"): # shelve会生成三个文件,其中有.dat结尾 139 self.school_db = shelve.open(settings.school_db_file) # 打开学校数据库文件 140 self.run_manage() # 运行管理视图 141 self.school_db.close() # 关闭数据库文件 142 else: 143 print("\033[31;1m数据库文件不存在,请先创建学校\033[0m") 144 exit() 145 146 def run_manage(self): 147 print('欢迎进入讲师视图') 148 for key in self.school_db: 149 print("学校名称:", key) 150 choice_school = input("\33[34;0m输入选择学校名:\33[0m").strip() 151 self.school_choice = choice_school 152 if self.school_choice in self.school_db: 153 self.school_obj = self.school_db[choice_school] 154 teacher_name = input('请输入讲师姓名') 155 while True: 156 if teacher_name in self.school_obj.school_teacher: 157 print('''欢迎进入讲师视图 158 查看班级 check_class 159 退出 exit''') 160 user_func = input('请选择所需操作') 161 if hasattr(self,user_func): 162 getattr(self,user_func)() 163 164 else: 165 print('教师不存在') 166 break 167 168 def check_class(self, teacher_name): 169 self.school_obj.show_teacher_classinfo(teacher_name) 170 171 def exit(self, *args): 172 self.school_db.close() 173 sys.exit("\033[32;1m欢迎下次使用学员管理系统\033[0m") 174 175 class Manage_student(object): 176 def __init__(self): 177 if os.path.exists(settings.school_db_file + ".dat"): # shelve会生成三个文件,其中有.dat结尾 178 self.school_db = shelve.open(settings.school_db_file) # 打开学校数据库文件 179 self.run_manage() # 运行管理视图 180 self.school_db.close() # 关闭数据库文件 181 else: 182 print("\033[31;1m数据库文件不存在,请先创建学校\033[0m") 183 exit() 184 185 def run_manage(self): 186 print('欢迎来到学员视图') 187 school_choice = input('请选择学校') 188 if school_choice in self.school_db: 189 self.school_choice = school_choice 190 self.school_obj = self.school_db[school_choice] 191 student_name = input('''\033[34;0m输入学生的姓名:\033[0m''').strip() 192 student_age = input('''\033[34;0m输入学生的年龄:\033[0m''').strip() 193 self.school_obj.show_class_course() 194 class_choice = input('''\033[34;0m输入上课的班级:\033[0m''').strip() 195 if class_choice in self.school_obj.school_class: 196 self.school_obj.create_student(student_name, student_age, class_choice) 197 self.school_db.update({self.choice_school: self.school_obj}) # 更新数据库数据 198 print("\33[32;1m学生注册成功\33[0m") 199 else: 200 print("\33[31;1m系统错误:输入的班级不存在\33[0m") 201 else: 202 print("\33[31;1m系统错误:输入的学校不存在\33[0m")
modules中school.py
1 #!/usr/bin/env python 2 #-*- coding:utf-8 -*- 3 #Author:SiWen 4 5 from modules.course import Course 6 from modules.classs import Class 7 from modules.teacher import Teacher 8 from modules.student import Student 9 10 class School(object): 11 '''学校类,包含名称,地址,课程,班级,教师''' 12 def __init__(self,school_name,school_addr): 13 self.school_name = school_name 14 self.school_addr = school_addr 15 self.school_course = {} #学校所有的课程实例 16 self.school_class = {} 17 self.school_teacher = {} 18 #self.school_student = {} 19 20 def create_course(self,course_name,course_price,course_time): 21 '''创建课程''' 22 course_obj = Course(course_name,course_price,course_time) 23 self.school_course[course_name] = course_obj 24 25 def show_course(self): 26 '''查看课程信息''' 27 for key in self.school_course: 28 course_obj = self.school_course[key] 29 print("\33[32;1m课程:%s\t价格:%s\t周期:%s月\33[0m"%(course_obj.course_name,course_obj.course_price, 30 course_obj.course_time,)) 31 32 def create_class(self,class_name,courese_obj): 33 '''创建班级''' 34 class_obj = Class(class_name,courese_obj) 35 self.school_class[class_name] = class_obj 36 37 def show_class(self): 38 for key in self.school_class: 39 class_obj = self.school_class[key] 40 print("\33[32;1m班级:%s\t关联课程:%s\33[0m" % (class_obj.class_name, class_obj.class_courese.course_name)) 41 42 def show_class_course(self): 43 for key in self.school_class: 44 class_obj = self.school_class[key] 45 course_obj = class_obj.class_courese 46 print("\33[32;1m班级:%s\t关联课程:%s\t价格:%s\t周期:%s月\33[0m" % (class_obj.class_name, course_obj.course_name, 47 course_obj.course_price,course_obj.course_time)) 48 49 def create_teacher(self,teacher_name, teacher_salary,class_name,class_obj): 50 '''创建讲师''' 51 teacher_obj = Teacher(teacher_name, teacher_salary) 52 teacher_obj.teacher_add_class(class_name,class_obj) 53 self.school_teacher[teacher_name] = teacher_obj 54 55 def update_teacher(self,teacher_name,class_name,class_obj): 56 '''更新教师信息''' 57 teacher_obj = self.school_teacher[teacher_name] 58 teacher_obj.teacher_add_class(class_name,class_obj) 59 60 def show_teacher(self): 61 '''查看讲师信息''' 62 for key in self.school_teacher: 63 teacher_obj = self.school_teacher[key] 64 class_list = [] 65 for i in teacher_obj.teacher_calss: 66 class_list.append(i) 67 print("\33[32;1m讲师:%s\t薪资:%s\t关联班级:%s\33[0m" % (teacher_obj.teacher_name, teacher_obj.teacher_salary, 68 class_list )) 69 def create_student(self,student_name,student_age,class_choice): 70 '''注册学生''' 71 student_obj = Student(student_name,student_age) #生成学生实例 72 class_obj = self.school_class[class_choice] #获取学生所注册班级的实例对象 73 class_obj.class_student[student_name]=student_obj #班级实例里添加学生信息 74 self.school_class[class_choice] = class_obj #学校班级字典更新 75 76 def show_teacher_classinfo(self,teacher_name): 77 teacher_obj = self.school_teacher[teacher_name] 78 for i in teacher_obj.teacher_calss: 79 class_obj = self.school_class[i] 80 student_list = [] 81 for k in class_obj.class_student: 82 student_list.append(k) 83 print("\33[32;1m班级:%s\t关联课程:%s\t学员:%s\33[0m" % (class_obj.class_name, class_obj.class_courese.course_name, 84 student_list))
modules中classs.py
1 #!/usr/bin/env python 2 #-*- coding:utf-8 -*- 3 #Author:SiWen 4 5 class Class(object): 6 '''班级类,包含名称,课程,学生''' 7 def __init__(self,class_name,course_obj): 8 self.class_name = class_name 9 self.class_courese = course_obj 10 self.class_student = {} #学生字典
modules中course.py
1 #!/usr/bin/env python 2 #-*- coding:utf-8 -*- 3 #Author:SiWen 4 5 class Course(): 6 '''定义课程类,包含名称,价格,周期''' 7 def __init__(self,course_name,course_price,course_time): 8 self.course_name = course_name 9 self.course_price = course_price 10 self.course_time = course_time
modules中teacher.py
1 #!/usr/bin/env python 2 #-*- coding:utf-8 -*- 3 #Author:SiWen 4 5 class Teacher(object): 6 '''讲师类,定义teacher_name,teacher_salary,包含teacher_class''' 7 def __init__(self, teacher_name, teacher_salary): 8 self.teacher_name = teacher_name 9 self.teacher_salary = teacher_salary 10 self.teacher_calss = [] #班级列表 [s14,15] 11 12 def teacher_add_class(self,class_name,class_obj): 13 self.teacher_calss[class_name] = class_obj
modules中student.py
1 #!/usr/bin/env python 2 #-*- coding:utf-8 -*- 3 #Author:SiWen 4 5 class Student(object): 6 '''学生类,包含姓名,年龄''' 7 def __init__(self,student_name,student_age): 8 self.student_name = student_name 9 self.student_age = student_age

浙公网安备 33010602011771号