本节作业:选课系统
角色:学校、学员、课程、讲师
要求:
1. 创建北京、上海 2 所学校
2. 创建linux , python , go 3个课程 , linuxpy 在北京开, go 在上海开
3. 课程包含,周期,价格,通过学校创建课程
4. 通过学校创建班级, 班级关联课程、讲师
5. 创建学员时,选择学校,关联班级
5. 创建讲师角色时要关联学校,
6. 提供两个角色接口
6.1 学员视图, 可以注册, 交学费, 选择班级,
6.2 讲师视图, 讲师可管理自己的班级, 上课时选择班级, 查看班级学员列表 , 修改所管理的学员的成绩
6.3 管理视图,创建讲师, 创建班级,创建课程
7. 上面的操作产生的数据都通过pickle序列化保存到文件里
程序:
1、README
作者:wangeq 版本:示例版本 v0.1 程序介绍: 实现选课系统 常用功能 功能全部用python的基础知识实现,用到了ossysjsonpickle函数模块类知识 程序:http://www.cnblogs.com/wangeq/p/6504644.html 程序结构: day06/ ├── course system #coure主程目录 ├── __init__.py ├── bin #course 执行文件 目录 │ ├── __init__.py │ ├── course.py #course system 执行程序 ├── core #主要程序逻辑都 在这个目录 里 │ ├── __init__.py │ ├── main.py #主要程序交互 │ ├── uid.py #生成uid信息 ├── db #用户数据存储的地方 ├── __init__.py └── admin #存管理员信息 └── classes #存班级信息 └── school #存学校信息 └── course #存课程信息 └── student #存学员信息 └── teacher #存讲师信息 └── class_grade #存讲师创建的学生成绩 └── class_record #存讲师创建的学生上课记录
2、程序目录结构
3、程序
执行文件入口 cource.py
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 #version:3.5.2 4 #author:wangeq 5 6 import sys,os 7 8 #程序主目录 9 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 10 #添加环境变量 11 sys.path.append(BASE_DIR) 12 13 from core import main 14 15 if __name__ == '__main__': 16 a =main.Run() 17 a.interactive()
主程序 main.py
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 #version:3.5.2 4 #author:wangeq 5 6 import sys,os 7 import json 8 import pickle 9 10 from bin import course 11 from core import uid 12 13 #数据库文件路径 14 db_DIR = course.BASE_DIR + r"db" 15 db_school = db_DIR + r"school" 16 db_teacher = db_DIR + r" eacher" 17 db_student = db_DIR + r"student" 18 db_classes = db_DIR + r"classes" 19 db_course = db_DIR + r"course" 20 db_admin = db_DIR + r"admin" 21 db_class_record = db_DIR + r"class_record" 22 db_class_grade = db_DIR + r"class_grade" 23 24 #基础类,主要包括文件的读写操作 25 class Baseclass(object): 26 def __init__(self): 27 pass 28 def save(self,type,dict): 29 filename = uid.create_md() 30 dict['uid'] = filename 31 file_path = "%s\%s" %(db_DIR,type) 32 ab_file = "%s\%s" %(file_path,filename) 33 if os.path.isdir(file_path): 34 with open(ab_file,"wb") as f: 35 f.write(pickle.dumps(dict)) 36 if True: 37 print( 38 "-------",type,"创建成功","-------") 39 for key in dict: 40 print(key,": ",dict[key]) 41 def seek_list(self,type,list): 42 filename = uid.create_md() 43 file_path = "%s\%s" %(db_DIR,type) 44 ab_file = "%s\%s" %(file_path,filename) 45 if os.path.isdir(file_path): 46 with open(ab_file,"wb") as f: 47 f.write(pickle.dumps(list)) 48 if True: 49 print( 50 "-------",type,"创建成功","-------") 51 for i in list: 52 for key in i: 53 print(key,i[key]) 54 print(" ") 55 return True 56 57 def open(self,type): 58 all_data = [] 59 db_path = "%s\%s" %(db_DIR,type) 60 for i in os.listdir(db_path): 61 if os.path.isfile(os.path.join(db_path,i)): 62 db_file = os.path.join(db_path,i) 63 with open(db_file,"rb") as f: 64 file_dict = pickle.load(f) 65 all_data.append(file_dict) 66 return all_data 67 68 #管理员类 69 class Admin(Baseclass): 70 def __init__(self): 71 Baseclass.__init__(self) 72 def create_school(self): 73 school_dict = {} 74 school_name = input("校名:") 75 school_address = input("地址:") 76 s1 = School(school_name, school_address) 77 school_dict["校名"] = s1.school_name 78 school_dict["地址"] = s1.school_address 79 Baseclass.save(self, "school", school_dict) 80 def create_teacher(self): 81 teacher_dict = {} 82 teacher_name = input("讲师姓名:") 83 teacher_salary = input("讲师工资:") 84 teacher_school = input("所属学校:") 85 t1 = Teacher(teacher_name, teacher_salary, teacher_school) 86 teacher_dict["姓名"] = t1.teacher_name 87 teacher_dict["工资"] = t1.teacher_salary 88 teacher_dict["所属学校"] = t1.teacher_school 89 print(teacher_dict) 90 Baseclass.save(self, "teacher", teacher_dict) 91 def create_student(self): 92 student_dict = {} 93 student_name = input("学员姓名:") 94 student_sex = input("学员性别:") 95 student_school = input("所属学校:") 96 student_classes = input("学员班级:") 97 st1 = Student(student_name, student_sex, student_school, student_classes) 98 student_dict["姓名"] = st1.student_name 99 student_dict["性别"] = st1.student_sex 100 student_dict["学校"] = st1.student_school 101 student_dict["班级"] = st1.student_classes 102 Baseclass.save(self, "student", student_dict) 103 def create_course(self): 104 course_dict = {} 105 course_name = input("课程名:") 106 course_period = input("周期:") 107 course_prices = input("价格:") 108 c1 = Course(course_name, course_period, course_prices) 109 course_dict["课程名"] = c1.course_name 110 course_dict["周期"] = c1.course_period 111 course_dict["价格"] = course_prices 112 Baseclass.save(self, "course", course_dict) 113 def create_classes(self): 114 classes_dict = {} 115 classes_name = input("班级名:") 116 classes_teachter = input("负责讲师:") 117 classes_course = input("所学课程:") 118 cs1 = Classes(classes_name, classes_teachter, classes_course) 119 classes_dict["班级名"] = cs1.classes_name 120 classes_dict["负责讲师"] = cs1.classes_teacher 121 classes_dict["课程"] = cs1.classes_course 122 Baseclass.save(self, "classes", classes_dict) 123 124 #学校类 125 class School(Baseclass): 126 def __init__(self,school_name,school_address): 127 Baseclass.__init__(self) 128 self.school_name = school_name 129 self.school_address = school_address 130 131 #讲师类 132 class Teacher(Baseclass): 133 def __init__(self,teacher_name,teacher_salary,teacher_school): 134 Baseclass.__init__(self) 135 self.teacher_name = teacher_name 136 self.teacher_salary = teacher_salary 137 self.teacher_school = teacher_school 138 def create_class_record(self): 139 class_record = [] 140 student_school = input("选择学校:") 141 student_classes = input("选择班级:") 142 student_times = input("课次:") 143 student_list = Baseclass.open(self,"student") 144 for i in student_list: 145 if i["学校"] == student_school and i["班级"] == student_classes: 146 student_name = i["姓名"] 147 student_status = input("%s 上课情况:" % student_name) 148 i["上课情况"] = student_status 149 i["课次"] = student_times 150 class_record.append(i) 151 Baseclass.seek_list(self,"class_record",class_record) 152 def create_class_grade(self): 153 class_grade = [] 154 student_school = input("选择学校:") 155 student_classes = input("选择班级:") 156 student_times = input("课次:") 157 student_list = Baseclass.open(self,"student") 158 for i in student_list: 159 if i["学校"] == student_school and i["班级"] == student_classes: 160 student_name = i["姓名"] 161 student_grade = input("%s 成绩:" % student_name) 162 i["成绩"] = student_grade 163 i["课次"] = student_times 164 class_grade.append(i) 165 Baseclass.seek_list(self,"class_grade",class_grade) 166 def teacher_view_grade(self): 167 grade_list = [] 168 student_school = input("校名:") 169 student_class = input("班级:") 170 student_times = input("课次:") 171 class_grade_list = Baseclass.open(self, "class_grade") 172 for i in class_grade_list: 173 for j in i: 174 if j["学校"] == student_school and j["班级"] == student_class and j["课次"] == student_times: 175 grade_list.append(j) 176 for i in grade_list: 177 for key in i: 178 print(key,i[key]) 179 print(" ") 180 181 def tacher_view_record(self): 182 record_list = [] 183 student_school = input("校名:") 184 student_class = input("班级:") 185 student_times = input("课次:") 186 class_record_list = Baseclass.open(self, "class_record") 187 for i in class_record_list: 188 for j in i: 189 if j["学校"] == student_school and j["班级"] == student_class and j["课次"] == student_times: 190 record_list.append(j) 191 for i in record_list: 192 for key in i: 193 print(key,i[key]) 194 print(" ") 195 196 #课程类 197 class Course(Baseclass): 198 def __init__(self,course_name,course_period,course_prices): 199 Baseclass.__init__(self) 200 self.course_name = course_name 201 self.course_period = course_period 202 self.course_prices = course_prices 203 204 #学员类 205 class Student(Baseclass): 206 207 def __init__(self,student_name,student_sex,student_school,student_classes): 208 Baseclass.__init__(self) 209 self.student_name = student_name 210 self.student_sex = student_sex 211 self.student_school = student_school 212 self.student_classes = student_classes 213 def student_registered(self): 214 student_dict = {} 215 print("欢迎进入学生注册系统") 216 student_name = input("注册姓名:") 217 student_sex = input("性别:") 218 student_school = input("学校:") 219 student_class = input("班级:") 220 st1 = Student(student_name,student_sex,student_school,student_class) 221 student_dict["姓名"] = st1.student_name 222 student_dict["性别"] = st1.student_sex 223 student_dict["学校"] = st1.student_school 224 student_dict["班级"] = st1.student_classes 225 Baseclass.save(self, "student", student_dict) 226 def student_pay_fees(self): 227 pass 228 def student_view_grade(self): 229 student_school = input("校名:") 230 student_class = input("班级:") 231 student_times = input("课次:") 232 student_name = input("姓名:") 233 class_grade_list = Baseclass.open(self,"class_grade") 234 for i in class_grade_list: 235 for j in i: 236 if j["学校"] == student_school and j["班级"] == student_class and j["课次"] == student_times 237 and j["姓名"] == student_name: 238 for key in j: 239 print(key,j[key]) 240 print(" ") 241 def student_view_record(self): 242 student_school = input("校名:") 243 student_class = input("班级:") 244 student_times = input("课次:") 245 student_name = input("姓名:") 246 class_record_list = Baseclass.open(self,"class_record") 247 for i in class_record_list: 248 for j in i: 249 if j["学校"] == student_school and j["班级"] == student_class and j["课次"] == student_times 250 and j["姓名"] == student_name: 251 for key in j: 252 print(key,j[key]) 253 print(" ") 254 255 #课程类 256 class Classes(Baseclass): 257 def __init__(self,classes_name,classes_teachter,classes_course): 258 Baseclass.__init__(self) 259 self.classes_name = classes_name 260 self.classes_teacher = classes_teachter 261 self.classes_course = classes_course 262 263 #管理员视图,继承Admin类 264 class Admin_view(Admin): 265 def __init__(self): 266 Admin.__init__(self) 267 def auth(self,username,password): 268 admin_file = "%s/%s.json" %(db_admin,username) 269 if os.path.isfile(admin_file): 270 with open(admin_file, 'r') as f: 271 admin_data = json.load(f) 272 if admin_data["name"] == username and admin_data["password"] == password: 273 return True 274 else: 275 print("用户名或密码错误") 276 def login(self): 277 menu = u''' 278 ------- 欢迎进入管理视图 --------- 279 33[32;1m 1. 校区管理 280 2. 讲师管理 281 3. 学员管理 282 4. 课程管理 283 5. 返回 284 33[0m''' 285 menu_dic = { 286 '1': Admin_view.school_manager, 287 '2': Admin_view.teacher_manager, 288 '3': Admin_view.student_manager, 289 '4': Admin_view.course_manager, 290 '5': "logout", 291 } 292 username = input("输入用户名:").strip() 293 password = input("输入密码:").strip() 294 auth = Admin_view.auth(self,username,password) 295 if auth: 296 exit_flag = False 297 while not exit_flag: 298 print(menu) 299 option = input("请选择:").strip() 300 if option in menu_dic: 301 if int(option) == 5: 302 exit_flag = True 303 else: 304 print(menu_dic[option]) 305 menu_dic[option](self) 306 else: 307 print("