python入门作业---选课系统

角色:学校、学员、课程、讲师 要求: 1. 创建北京、上海 2 所学校 2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开 3. 课程包含,周期,价格,通过学校创建课程 4. 通过学校创建班级, 班级关联课程、讲师 5. 创建学员时,选择学校,关联班级 5. 创建讲师角色时要关联学校, 6. 提供两个角色接口 6.1 学员视图, 可以注册, 交学费, 选择班级, 6.2 讲师视图, 讲师可管理自己的班级, 上课时选择班级, 查看班级学员列表 , 修改所管理的学员的成绩 6.3 管理视图,创建讲师, 创建班级,创建课程 7. 上面的操作产生的数据都通过pickle序列化保存到文件里
领域模型
领域模型是完成从需求分析到面向 对象设计的一座桥梁。
领域模型,顾名思义,就是需求所涉及的领域的一个建模,更通俗的讲法是业务模型。 参考百度百科(http://baike.baidu.cn/view/757895.htm ),领域模型定义如下:
从这个定义我们可以看出,领域模型有两个主要的作用:
- 发掘重要的业务领域概念
- 建立业务领域概念之间的关系
领域建模三字经
领域建模的方法就是“从用例中找名词”。 当然,找到名词后,为了能够更加符合面向对象的要求和特点,我们还需要对这些名词进一步完善,这就 是接下来的步骤:加属性,连关系!
最后我们总结出领域建模的三字经方法:找名词、加属性、连关系。
找名词
who : 学员、讲师、管理员
用例:
1. 管理员 创建了 北京 和 上海 两个校区
2. 管理员 创建了 Linux \ Python \ Go 3个课程
3. 管理员 创建了 北京校区的Python 16期, Go开发第一期,和上海校区的Linux 36期 班级
4. 管理员 创建了 北京校区的 学员 小晴 ,并将其 分配 在了 班级 python 16期
5. 管理员 创建了 讲师 Alex , 并将其分配 给了 班级 python 16期 和全栈脱产5期
6. 讲师 Alex 创建 了一条 python 16期的 上课纪录 Day6
7. 讲师 Alex 为Day6这节课 所有的学员 批了作业 ,小晴得了A, 李磊得了C-, 严帅得了B
8. 学员小晴 在 python 16 的 day6里 提交了作业
9. 学员李磊 查看了自己所报的所有课程
10 学员 李磊 在 查看了 自己在 py16期 的 成绩列表 ,然后自杀了
11. 学员小晴 跟 讲师 Alex 表白了
名词列表:
管理员、校区、课程、班级、上课纪录、作业、成绩、讲师、学员
加属性
连关系
有了类,也有了属性,接下来自然就是找出它们的关系了。
目录:

1 #!/usr/bin/env python3 2 #-*- coding:utf-8 -*- 3 ''' 4 Administrator 5 2018/7/27 6 ''' 7 8 class Student: 9 def __init__(self,name,age,classes): 10 self.name=name 11 self.age=age 12 self.classes=classes #报名的班级 13 14 class Teacher: 15 def __init__(self,name,age,classes): 16 self.name=name 17 self.age=age 18 self.classes=classes #关联的班级 19 20 class Classes: 21 def __init__(self,class_name,semester,course,sk_date,teacher): 22 self.class_name=class_name #班级名称 23 self.semester=semester #学期 24 self.course=course #课程 25 self.sk_date=sk_date #开课日期 26 self.teacher=teacher #班级讲师 27 28 class Course: 29 def __init__(self,name,school): 30 self.name=name 31 self.price=15000 32 self.outline='课程大纲' 33 self.course_time='周期是:6个月' 34 self.school=school 35 36 class School: 37 def __init__(self,name,address,city): 38 self.name=name 39 self.address=address 40 self.city=city 41 42 class ClassRecord: 43 def __init__(self,class_name,jc_name,sk_date): 44 self.class_name=class_name #班级 45 self.jc_name=jc_name #节次 46 self.sk_date=sk_date #上课日期 47 48 class StudyRecord: 49 def __init__(self,class_record,is_sign,sign_date,achievement): 50 self.class_record=class_record #上课记录 51 self.sign_in=is_sign #签到状态 52 self.sign_date=sign_date #签到日期 53 self.achievement=achievement #成绩 54 55 56 if __name__=="__main__": 57 beijing_school=School("北京培训中心","北京天安门城楼上","北京") 58 shanghai_school = School("上海培训中心", "上海外滩水底", "上海") 59 60 linux_course=Course("linux",beijing_school) 61 python_course=Course("python",beijing_school) 62 go_course=Course("go",shanghai_school)
知识回顾:
https://github.com/Mengchangxin/python_green_hand/blob/8.14/%E7%9F%A5%E8%AF%86%E5%9B%9E%E9%A1%BE.py

1 #!/usr/bin/env python3 2 #-*- coding:utf-8 -*- 3 ''' 4 Administrator 5 2018/8/14 6 ''' 7 import pickle,os,uuid 8 class School: 9 def __init__(self,name): 10 self.name=name 11 self.school_id=uuid.uuid1() 12 13 def save(self): 14 15 file_address=os.path.join(os.path.dirname(os.path.abspath(__file__)),"accounts","%s.txt"%self.school_id) 16 with open(file_address,"wb") as f: 17 pickle.dump(self,f) 18 #print(file_address) 19 # f=open(file_address,"wb") 20 # pickle.dump(self,f) 21 # f.close() 22 @staticmethod 23 def get_all(): 24 obj_list=[] 25 address=os.path.join(os.path.dirname(os.path.abspath(__file__)),"accounts") 26 for item in os.listdir(address): #/home/tom/下找所有的文件 27 item=os.path.join(address,item) 28 with open(item,"rb") as f: 29 obj=pickle.load(f) 30 obj_list.append(obj) 31 return obj_list 32 33 def __str__(self): 34 return "学校的名称是:%s"%self.name 35 36 37 # s1=School("上海") 38 # s1.save() 39 # #/home/tom/1 40 # s2=School("北京") 41 # s2.save() 42 #/home/tom/2 43 44 School_obj_list=School.get_all() 45 for obj in School_obj_list: 46 #print("学校名称:%s"%obj.name) 47 print(obj)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端