- 确定功能需求
在开发学生成绩管理系统之前,需要明确该系统的功能需求,包括以下几个方面:
- 学生信息管理:包括添加学生信息、修改学生信息、删除学生信息和查看学生信息等操作。
- 成绩管理:包括添加成绩信息、修改成绩信息、删除成绩信息和查看成绩信息等操作。
-
统计分析:包括对学生成绩的统计和分析,如计算总分、平均分、最高分、最低分、排名等。
-
搭建环境
在python中实现学生成绩管理系统,需要先安装必要的开发环境和相关依赖库。可以通过以下命令来安装:
pip install flask
pip install flask_sqlalchemy
- 创建数据库
学生成绩管理系统需要保存学生信息和成绩信息,可以使用关系型数据库来存储,如MySQL、SQLite等。这里以SQLite为例,在Python中创建数据库的代码为:
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///student.db'
db = SQLAlchemy(app)
这段代码的作用是创建一个名为student.db的SQLite数据库,并创建一个名为db的SQLAlchemy对象,用于对数据库进行操作。
- 创建模型
在Python中,可以使用ORM(对象关系映射)工具来操作数据库,将数据库中的表映射为Python中的类,操作起来更加方便。可以根据学生成绩管理系统的需求,创建如下模型类:
class Student(db.Model):
__tablename__ = 'students'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(64), nullable=False)
gender = db.Column(db.Enum('男', '女'), nullable=False)
class_name = db.Column(db.String(64), nullable=False)
scores = db.relationship('Score', backref='student', lazy=True)
class Score(db.Model):
__tablename__ = 'scores'
id = db.Column(db.Integer, primary_key=True)
course_name = db.Column(db.String(64), nullable=False)
score = db.Column(db.Float, nullable=False)
student_id = db.Column(db.Integer, db.ForeignKey('students.id'))
这段代码定义了两个表,一个是存储学生信息的students表,另一个是存储成绩信息的scores表。在students表中,每个学生有一个唯一的id、姓名name、性别gender、班级class_name和该学生的成绩信息scores。在scores表中,每个成绩有一个唯一的id、课程名称course_name、成绩score和该成绩所属的学生id。
- 创建视图
视图是用户操作的界面,可以通过Flask框架来创建视图。可以创建如下视图:
@app.route('/')
def index():
students = Student.query.all()
return render_template('index.html', students=students)
@app.route('/add_student', methods=['GET', 'POST'])
def add_student():
if request.method == 'POST':
name = request.form['name']
gender = request.form['gender']
class_name = request.form['class_name']
student = Student(name=name, gender=gender, class_name=class_name)
db.session.add(student)
db.session.commit()
return redirect(url_for('index'))
return render_template('add_student.html')
@app.route('/add_score', methods=['GET', 'POST'])
def add_score():
if request.method == 'POST':
course_name = request.form['course_name']
score = float(request.form['score'])
student_id = int(request.form['student_id'])
score_obj = Score(course_name=course_name, score=score, student_id=student_id)
db.session.add(score_obj)
db.session.commit()
return redirect(url_for('index'))
students = Student.query.all()
return render_template('add_score.html', students=students)
这段代码中定义了三个视图,分别是显示学生信息的index视图、添加学生信息的add_student视图和添加成绩信息的add_score视图。在add_student和add_score视图中,使用表单来获取用户输入的信息,保存到数据库中,并重定向到index视图来展示修改后的学生信息。
- 创建模板
为了展示视图中的数据和用户界面,需要使用HTML模板。可以创建如下两个模板文件:
index.html
<!doctype html>
<html>
<head>
<title>学生成绩管理系统</title>
</head>
<body>
<table>
<thead>
<tr>
<th>姓名</th>
<th>性别</th>
<th>班级</th>
<th>总分</th>
<th>平均分</th>
<th>操作</th>
</tr>
</thead>
<tbody>
{% for student in students %}
<tr>
<td>{{ student.name }}</td>
<td>{{ student.gender }}</td>
<td>{{ student.class_name }}</td>
<td>{{ student.sum_scores }}</td>
<td>{{ student.avg_scores }}</td>
<td><a href="{{ url_for('add_score', student_id=student.id) }}">添加成绩</a></td>
</tr>
{% endfor %}
</tbody>
</table>
</body>
</html>
add_student.html
<!doctype html>
<html>
<head>
<title>添加学生信息</title>
</head>
<body>
<form method="POST" action="{{ url_for('add_student') }}">
<label>姓名:</label><input type="text" name="name" /><br />
<label>性别:</label><input type="radio" name="gender" value="男" checked />男 <input type="radio" name="gender" value="女" />女<br />
<label>班级:</label><input type="text" name="class_name" /><br />
<input type="submit" value="保存" />
</form>
</body>
</html>
这段代码展示了两个HTML模板,一个是index.html,用于展示学生信息,另一个是add_student.html,用于添加学生信息。在index.html中,使用了Jinja2模板引擎的语法来循环获取到的学生信息,并计算每个学生的总分和平均分。在add_student.html中,使用HTML表单来获取用户输入的学生信息。
示例1:添加学生信息
假设我们要添加一个名为张三、性别为男、班级为一年级一班的学生,可以按照如下步骤操作:
- 打开链接 http://127.0.0.1:5000/add_student
- 输入姓名、性别、班级,点击保存
- 系统自动保存学生信息,并重定向到http://127.0.0.1:5000/ 页面
示例2:添加成绩信息
假设我们要给张三添加一门语文成绩(90分),可以按照如下步骤操作:
- 打开链接 http://127.0.0.1:5000/ 页面
- 找到张三所在的行,点击“添加成绩”链接
- 在跳转的页面中,选择课程名称、输入成绩,点击保存
- 系统自动保存成绩信息,并重定向到http://127.0.0.1:5000/ 页面
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python实现简单的学生成绩管理系统 - Python技术站