这也是一个python基础必做项目,拿来练手+1,这个选课系统里主要是运用面向对象的思想进行设计。
ATM+购物车
这个主要是锻炼除面向对象以外全部python基础(函数+模块+文件)的一个练手项目。
进度:
角色: 学校、学员、课程、讲师、管理员
要求:
- 创建滨海、河西、小黑屋 3 所学校 —> 管理员创建学校
- 创建前端、后端、算法、AI 4个课程 ,AI在滨海开,后端在河西开,前端和算法在小黑屋开
- 课程包含,周期,价格,通过学校创建课程
- 创建讲师
- 创建学员时,选择学校,关联班级
- 创建讲师
- 提供三个角色接口
7.1 学员视图, 可以注册,选择课程(等同于选择班级)
7.2 讲师视图, 讲师可管理自己的课程, 上课时选择班级,
查看班级学员列表 , 修改所管理的学员的成绩
7.3 管理视图,创建讲师, 创建班级,创建课程- 上面的操作产生的数据都通过pickle序列化保存到文件里
- pickle 可以帮我们保存对象
1.客户提出需求,公司派人(一般一个前端、一个后端)和用户商谈,确定项目功能、开发周期、价格等
2.公司内部开会,得到一个开发文档,进行架构设计。
3.交给不同岗位的程序员开发
4.测试
5.上线
UI界面设计:
前端:
后端:
测试:
运维:
- 管理视图
- 1.注册
- 2.登录
- 3.创建学校
- 4.创建课程(先选择学校)
- 5.创建讲师
- 学员视图
- 1.注册
- 2.登录功能
- 3.选择校区
- 4.选择课程(先选择校区,再选择校区中的某一门课程)
- 学生选择课程,课程也选择学生
- 5.查看分数
- 讲师视图
- 1.登录
- 2.查看教授课程
- 3.选择教授课程
- 4.查看课程下学生
- 5.修改学生分数
- 用户视图层
- 用于与用户进行交互的
- 小的逻辑判断,比如注册功能中两次密码是否一致的校验
- 逻辑接口层
- 核心业务逻辑的处理
- 数据处理层
- 做数据的处理,比如数据的 增、删、查、改
start.py:项目执行文件
README.txt:项目需求以及如何用等文本信息
core:项目的核心模块,内有src.py实现核心逻辑,对应着视图层
conf:项目的配置信息模块,内有settings.py存储项目配置信息
db:项目的数据处理模块,内有db_handler.py对数据进行增删改查,对应着数据处理层
lib:项目的公共模块,内有common.py,功能供项目任何地方使用(在ATM+购物车中有记录流水这一功能,详情请看本文文首)
interface:项目的接口模块,内有各种接口,对应着接口层
核心逻辑分析
搭建各个视图有点像重复做一件事
一点小细节:
导入模块分为相对导入和绝对导入,相对导入仅限于包内模块互相导入,绝对导入通用性更大
但绝对导入是以执行文件的sys.path为基准进行搜索的,鉴于此,我将start.py移动到bin目录下,更好的理解这个点。
conf下的setting.py增加:
import os
#文件根路径
BASE_PATH = os.path.dirname(os.path.dirname(__file__))
bin下start.py
import sys
from conf import settings
sys.path.append(settings.BASE_PATH)
from core import src
if __name__ == '__main__':
src.run()
'''
主视图层
'''
from core import admin
from core import student
from core import teacher
#功能字典
func_dic = {
'0':['退出',None],
'1':['学生功能',student.stu_view],
'2':['管理功能',admin.admin_view],
'3':['教师功能',teacher.tea_view],
}
def run():
while True:
#1.打印主视图功能
print('Welcome to my CourseSystem!'.center(50,'='))
for k,v in func_dic.items():
print(k,v[0])
print('THE END'.center(50, '='))
#2.接受用户输入,选择身份
choice = input('请输入您想要的功能:').strip()
#3.若用户输入0,退出系统
if choice == '0':
break
#4.检验用户输入的合法性
if choice not in ['0','1','2','3']:
print('请输入0-3数字!')
continue
else:
func_dic[choice][1]()
'''
学生视图层
'''
'''
学员视图
- 1.注册
- 2.登录功能
- 3.选择校区
- 4.选择课程(先选择校区,再选择校区中的某一门课程)
- 学生选择课程,课程也选择学生
- 5.查看分数
'''
#1.注册
def register():
...
#2.登录功能
def login():
...
#3.选择校区
def choose_school():
...
#4.选择课程(先选择校区,再选择校区中的某一门课程)
def choose_course():
...
#学生选择课程,课程也选择学生
#5.查看分数'''
def check_score():
...
#学生功能字典
func_dic = {
'0':['退出',None],
'1':['注册',register],
'2':['登录',login],
'3':['选择校区',choose_school],
'4':['选择课程',choose_course],
'5':['查看分数',check_score],
}
#学生视图
def stu_view():
while True:
print('View of student'.center(50,'='))
for k,v in func_dic.items():
print(k,v[0])
print('THE END'.center(50, '='))
#2.接受用户输入,选择身份
choice = input('请输入您想要的功能:').strip()
#3.若用户输入0,退出系统
if choice == '0':
break
#4.检验用户输入的合法性
if choice not in ['0','1','2','3','4','5']:
print('请输入0-3数字!')
continue
else:
func_dic[choice][1]()
'''
管理视图层
'''
'''
管理视图
- 1.注册
- 2.登录
- 3.创建学校
- 4.创建课程(先选择学校)
- 5.创建讲师
'''
# - 1.注册
def register():
...
# - 2.登录
def login():
...
# - 3.创建学校
def creat_school():
...
# - 4.创建课程(先选择学校)
def creat_course():
...
# - 5.创建讲师
def creat_teacher():
...
#管理员功能字典
func_dic = {
'0':['退出',None],
'1':['注册',register],
'2':['登录',login],
'3':['创建学校',creat_school],
'4':['创建课程',creat_course],
'5':['创建教师',creat_teacher]
}
#学生视图
def admin_view():
while True:
print('View of administer'.center(50,'='))
for k,v in func_dic.items():
print(k,v[0])
print('THE END'.center(50, '='))
#2.接受用户输入,选择身份
choice = input('请输入您想要的功能:').strip()
#3.若用户输入0,退出系统
if choice == '0':
break
#4.检验用户输入的合法性
if choice not in ['0','1','2','3','4','5']:
print('请输入0-3数字!')
continue
else:
func_dic[choice][1]()
'''
教师视图层
'''
'''
讲师视图
- 1.登录
- 2.查看教授课程
- 3.选择教授课程
- 4.查看课程下学生
- 5.修改学生分数
'''
# - 1.登录
def login():
...
# - 2.查看教授课程
def check_course():
...
# - 3.选择教授课程
def choose_course():
...
# - 4.查看课程下学生
def check_student():
...
# - 5.修改学生分数
def change_sorce():
...
#教师功能字典
func_dic = {
'0':['退出',None],
'1':['登录',login],
'2':['查看教授课程',login],
'3':['选择教授课程',choose_course],
'4':['查看课程下学生',check_course],
'5':['修改学生分数',change_sorce],
}
#学生视图
def tea_view():
while True:
print('View of teacher'.center(50,'='))
for k,v in func_dic.items():
print(k,v[0])
print('THE END'.center(50, '='))
#2.接受用户输入,选择身份
choice = input('请输入您想要的功能:').strip()
#3.若用户输入0,退出系统
if choice == '0':
break
#4.检验用户输入的合法性
if choice not in ['0','1','2','3','4','5']:
print('请输入0-3数字!')
continue
else:
func_dic[choice][1]()