学生选课系统项目开发
1.项目需求
- 1. 创建北京、上海 2 所学校
- 2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开
- 3. 课程包含,周期,价格,通过学校创建课程
- 4. 通过学校创建班级, 班级关联课程、讲师
- 5. 创建学员时,选择学校,关联班级
- 6. 创建讲师角色时要关联学校,
- 7. 提供两个角色接口,一个管理接口
复制代码 2.项目分析
- 各部分需要完成的任务
- 管理员视图:
- 1. 注册
- 2. 登录
- 3. 创建讲师
- 4. 创建学校
- 5. 创建学生
- 讲师视图:
- 1. 登录
- 2. 讲课
- 3. 查看学生成绩
- 学生视图:
- 1. 注册
- 2. 登录
- 3. 选择课程
- 4. 查看分数
复制代码 分析:
- 和上一个atm相似.本项目也是采用用户层. 接口层. 数据库层三层架构
- 代码中要用到面向对象编程写. 具体的代码逻辑如下图

文件夹结构预览:

3.代码部分
本文篇幅较长. 可使用导航栏点击标题部分查看:
bin文件夹
start.py- # -*- encoding:utf-8 -*-
- # @time: 2022/7/22 10:20
- # @author: Maxs_hu
- import os
- import sys
- BASE_PATH = os.path.dirname(os.path.dirname(__file__))
- sys.path.append(BASE_PATH) # 直接将项目根目录加上. 后面全部可以直接调用. 一劳永逸
- from core.src import run
- if __name__ == '__main__':
- run()
复制代码 conf文件夹
settings.py- # -*- encoding:utf-8 -*-
- # @time: 2022/7/22 10:36
- # @author: Maxs_hu
- import os
- BASE_PATH = os.path.dirname(os.path.dirname(__file__))
- DB_PATH = os.path.join(BASE_PATH, 'db')
- SCHOOL_DB_PATH = os.path.join(DB_PATH, 'school')
复制代码 core文件夹
<blockquote>admin.py
[code]# -*- encoding:utf-8 -*-# @time: 2022/7/22 10:37# @author: Maxs_hufrom interface import common_interface, admin_interfacefrom lib import common# 设置用户登录状态admin_status = { "name": None}def admin_register(): while True: print('管理员注册') username = input('请输入用户名>>>').strip() password = input('请输入密码>>>').strip() if password: flag, msg = admin_interface.admin_register_interface(username, password) # 调接口 if not flag: print(msg) else: print(msg) breakdef admin_login(): while True: print('管理员登录') username = input('请输入用户名>>>').strip() password = input('请输入密码>>>') if admin_status['name'] == username: print('已登录完成. 无需重复登录') break if password: flag, msg = common_interface.login_interface(username, password, 'admin') # 调接口 if not flag: print(msg) else: admin_status["name"] = username print(msg) break@common.auth_login(user_type='admin')def create_teacher(): print('创建讲师') teacher_name = input('请输入老师名称>>>').strip() teacher_password = input('请设置老师密码>>>').strip() if teacher_name: flag, msg = admin_interface.create_teacher_interface(admin_status['name'], teacher_name, teacher_password) if flag: print(msg) else: print(msg) else: print('老师名不能为空')@common.auth_login(user_type='admin')def create_school(): print('创建学校') school = input('请输入学校名称>>>').strip() addr = input('请输入学校地址>>>').strip() if school: flag, msg = admin_interface.create_school_interface(admin_status['name'], school, addr) if flag: print(msg) else: print(msg) else: print('学校名称不能为空')@common.auth_login(user_type='admin')def create_course(): while True: print('创建课程') # 先查看学校. 再创建课程. 最后在学校中添加课程 school_list = common_interface.check_school_interface() for i, school in enumerate(school_list): print("%s: %s" % (i+1, school)) choice = input('请输入需要选择的校区>>>').strip() course_name = input('请输入需要添加的课程>>>').strip() course_fee = input('请输入课程费用>>>').strip() if choice.isdigit(): choice = int(choice) if 0 < choice 之前的测试数据可能跟后期的不匹配程序健壮性问题: 一个程序可能有很多中报错的类型. 这就需要在编程的时候足够细心. 尽量将报错方式都想到. 实在不行可以使用try...except捕获异常
变量及程序命名问题: 如果命名出现相同可能会导致程序之间发生交叉调用. 我们要尽量避免这种命名相同. 让每一个变量都有自己的独特的含义
数据储存问题: 每一次调用到数据库中的类去改变数据之后不能仅仅只是表面上改变. 而要去调永db_handler中的save方法. 将数据保存到本地地址里面. 这样后面在使用的时候才会有记录
最后一个就是程序之间的调用一定要逻辑清晰. 稍有不慎可能就调错了类或者传错了名字. 这就需要程序命名可读性高. 编码的时候保持细心. 思路清晰.
</ol>
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |