[TOC]
# 第7章 作业,选课系统
当你看到这的时候,恭喜你,Python重要的基础课程已经学习完毕。而面向对象部分则是基础课程中的一个重要转折点。从面向对象开始,你要试着从面向对象的思想出发,来编写程序,尤其是将来开发一些功能复杂的系统。而本章的系统则是精心设计而成的。我们学过的内容都能在该系统中体现。所以,要用心完成本系统。
在完成系统的时候,请务必回顾之前章节所学,让我们在实现系统的过程中更加得心应手。
## 7.1 功能概述
“学生选课系统”,顾名思义,本系统必须实现的需求就是选课。
## 7.2 需求分析
既然我们主要实现的功能是“选课”,那么我们要实现的核心逻辑都要围着选课展开。
### 7.2.1 角色设计
首先我们来思考:学生选课,那么学生由谁来创建?课程由谁来创建?学生能否创建课程?很明显,从我们现实角度来说,学生只能选择课程而不能创建课程!那么,课程应该由那个“谁”来创建。而学生也不能是凭空而来的。这里我们也让那个“谁”来创建学生。所以,我们在这里可以确定三个角色:
- 可以选择课程的——学生
- 可供学生选择的——课程
- 可以创建学生和课程的那个“谁”——管理员
### 7.2.2 功能设计
这里考虑到大家都是初学者,所以,尽量的选择一些简单的功能实现。
- 登录,管理员和学生都可以登录,并且登录后可以自动区分身份。
- 选课,学生可以自由的浏览课程信息,并挑选课程。
- 信息的创建,无论是学生信息还是课程信息,或是其他的信息,都由管理员创建。
- 查看选课情况,学生可以查看自己的选课情况,而管理员可以查看所有的学生信息(包括选课情况)。
### 7.2.3 流程设计
有了角色和基本的功能,那么整个系统该是怎么样的一个呈现?先干什么后干什么?就是我们要考虑的事情了。
这个系统的流程可以是这样的:
- 登录,用户输入用户名和密码。
- 判断身份,在登录成功的时候,就应该可以直接判断出登录用户的身份,是学生还是管理员。
对于学生用户来说,登录之后有四个功能选项:
- 查看可选课程
- 选择课程
- 查看所选择的课程
- 退出程序
对于管理员用户来说,管理员除了要是实现基本的查看功能,还有很多创建工作要做。
- 创建课程
- 创建学生信息(创建学生账号)
- 查看可选课程信息
- 查看所有学生
- 查看所有学生的选课情况
- 退出程序
### 7.2.4 程序设计
对于相对的复杂的功能实现,我们优先选择使用面向对象编程,而选择面向对象编程之后,就要时刻思考如何设计类和对象的关系,让程序结构更加清晰明朗。
前面的分析中,我们需要实现三个角色。那么可以对应用三个类来实现。根据角色的不同,我们有针对性的为类设计属性和方法。
- 课程类,课程类并没有什么动作,只有一些必要的属性。
属性:课程名称、价格、周期。
方法:暂无
- 学生,学生就要有必要的属性和方法了。
属性:姓名、所选课程。
方法:查看可选课程、选择课程、查看选择的课程、退出程序。
- 管理员,管理员的属性可以仅有一个姓名就好了,其他的就是方法设计了。
属性:姓名。
方法:创建课程、创建学生信息(创建学生账号)、查看可选课程、查看所有学生、查看所有学生的选课情况、退出程序。
这里需要说明的是,课程属性缺少一个任教老师属性,但仔细分析你会发现,老师也是一个角色,为了不增加难度,这里课程属性这里,不再添加老师属性,但你可以当成一个升级功能来拓展实现。
### 7.2.5 流程图
根据上述分析,我们将主要功能汇总成流程图。
![7.1](M:/myclass/Python/PythonBook/assets/7.1.bmp)
上述流程图,晰的展示了程序的执行流程及具体的功能。所以,为了更方便系统的实现,请画出你的流程图。
### 7.2.6 数据库设计
现在,不得不考虑一个尴尬的事情了,当我们创建完学生或课程信息之后,存在哪?是的,目前我们没有学习数据库。所以,暂时我们只能想办法把数据存储到普通文件中。那么该怎么构建文件呢,我们在后面会详细说明。
## 7.3 搭建框架
首先,在展开讲解之前,让我们建立这样一个目录:
```python
student_electiive_sys/
├─ db/
│ ├─ course_info # 存放课程信息
│ ├─ student_info # 存放学生信息
│ └─ user_info # 存放用户信息
└─ main.py # 主逻辑文件
```
在`student_elective_sys`目录下有db目录,该目录内存放着所有的数据文件。我们只需要把db目录创建出来。然后再把`userinfo`文件创建出来即可,内容稍后填充。其他的数据文件我们无需手动创建,程序在运行中自动创建。而与db目录同级有一个main文件。该`main.py`文件为我们的主逻辑文件。
### 7.3.1 根据角色信息创建类
按照上述分析,首先我们在`main.py`中先完成三个类的创建。
```python
class Student:
def __init__(self, name):
self.name = name
class Manager:
def __init__(self, name):
self.name = name
class Course:
def __init__(self, name, price, period):
self.name = name
self.price = price
self.period = period
```
上例中,我们根据角色的属性创建三个类。其中需要说明的是,学生角色的课程信息之所以定义成一个空的列表,是因为考虑到一个学生可能选择多门课程。
### 7.3.2 完善角色信息
现在,各角色已经有了属性信息,还有方法需要完善。
```python
class Student:
def __init__(self, name):
self.name = name
self.courses = []
def show_courses(self):
'''查看可选课程'''
pass
def select_course(self):
'''选择课程'''
pass
def show_selected_course(self):
'''查看选择的课程'''
pass
def exit(self):
'''退出'''
pass
class Manager:
def __init__(self, name):
self.name = name
def create_course(self):
'''创建课程'''
pass
def create_student(self):
'''创建学生'''
pass
def show_courses(self):
'''查看可选课程'''
pass
def show_students(self):
'''查看所有学生'''
def show_students_courses(self):
'''查看所有学生选课情况'''
pass
def exit(self):
'''退出'''
pass
class Course:
def __init__(self, name, price, period):
self.name = name
self.price = price
self.period = period
```
上例中,每个方法对应每个角色所要实现的方法,这样一个整体的角色的框架搭建完毕,现在角色的属性和方法已经暂时告一段落,让我们进入下一阶段的代码设计。
### 7.3.3 设计程序的入口
现在,让我们再看一眼流程图,角色框架已经搭建完毕。那么从上到下开始执行,就要着手设计程序的入口,登录功能的实现。以及如何完成登录后完成自动身份识别。
在`main.py`中,首先添加程序的入口函数。但此时要思考,这个入口函数都是要干些什么?
当入口函数开始执行后,首先要进行登录认证,认证成功后才能根据身份判断来让不同的角色执行不�
没有合适的资源?快使用搜索试试~ 我知道了~
Python编程基础(视频讲解版)-配套源码.rar
共140个文件
py:86个
xml:18个
pyc:9个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 139 浏览量
2022-07-10
13:48:18
上传
评论
收藏 299KB RAR 举报
温馨提示
Python编程基础(视频讲解版)-配套源码.rar
资源推荐
资源详情
资源评论
收起资源包目录
Python编程基础(视频讲解版)-配套源码.rar (140个子文件)
a 18B
shelve_file.bak 17B
7.1.bmp 1.12MB
course_info 362B
shelve_file.dat 59B
shelve_file.dir 17B
第三章 函数.iml 442B
student_elective_sys.iml 441B
package.iml 398B
js_text 0B
test.log 564B
readme.md 95KB
a.md 0B
main7.3.py 14KB
类的内置方法.py 13KB
装饰器.py 9KB
main7.5.py 9KB
main7.4.py 8KB
C3算法.py 8KB
章节练习参考答案.py 7KB
反射.py 6KB
6.1.1初识类.py 5KB
函数的基础.py 5KB
time_module.py 5KB
迭代器.py 5KB
章节练习参考答案.py 5KB
collections_module.py 4KB
元类.py 4KB
单继承.py 4KB
property.py 4KB
章节练习参考答案.py 4KB
封装.py 3KB
列表练习作业.py 3KB
嵌套函数.py 3KB
生成器.py 3KB
接口类.py 3KB
多态.py 3KB
字符串的练习作业.py 2KB
字符串的常用方法.py 2KB
文件的增删改查.py 2KB
楔子.py 2KB
re_module.py 2KB
a.py 2KB
partial.py 2KB
闭包函数.py 2KB
内置函数.py 2KB
format.py 2KB
集合.py 2KB
流程控制语句.py 2KB
递归.py 2KB
demo.py 2KB
命名空间.py 2KB
functools_module.py 1KB
面向过程.py 1KB
json_module.py 1KB
classmethod.py 1KB
filter.py 1KB
字典练习题.py 1KB
作用域.py 1KB
test1.py 1KB
序列化.py 1KB
random_module.py 1KB
新式类与经典类.py 1KB
lambda.py 1KB
列表的性能.py 1KB
多继承.py 1KB
dict.py 1KB
函数和方法.py 1KB
test.py 1011B
zip.py 880B
settings.py 825B
文件操作.py 816B
shelve_module.py 719B
组合.py 697B
元组练习题.py 588B
c.py 547B
1.4.1 注释.py 542B
位运算代码.py 520B
staticmethod.py 491B
字符串的拼接.py 414B
os_module.py 380B
map.py 380B
isinstance.py 293B
issubclass.py 276B
字符编码之Python.py 225B
字符串的表示方法.py 220B
b.py 216B
打印圣诞树.py 197B
for循环打印圣诞树.py 189B
复合语句class.py 173B
type.py 165B
reduce.py 158B
a.py 119B
sys_module.py 118B
t1.py 88B
test2.py 76B
章节练习参考答案.py 48B
__init__.py 48B
__init__.py 48B
a.cpython-35.pyc 830B
共 140 条
- 1
- 2
资源评论
qq_38220914
- 粉丝: 605
- 资源: 4312
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- JSP Explorer 文件浏览器 v1.0-fileexplorer.zip
- JS+Flash让网页元素发光的插件 glow! 0.1-glow.zip
- JdonFramework开源框架 v5.1 Build20071025-jdonframework-5.1.zip
- 汽车行驶工况数据,excel,m文件
- Xshell6是一款功能强大的终端模拟器软件,主要用于远程管理和访问多种网络设备和服务器
- OPA548运放E/S脚使能后,输入电压为零时,输出电压为0.6V;电路如何设计才能使输出电压偏置为:0V
- MicrosoftRootCertificateAuthority2011.rar
- ISOSAE21434.D1-2020SAE美国汽车标准
- 奥比中光RGBD在JETSON ORIN NX的ROS程序
- SerialNumberUtil.java
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功