学工管理系统
小明:嘿,李老师,我最近在学习学工系统的开发,想做一个学生信息管理的模块,您有什么建议吗?
李老师:你好,小明。学工系统通常指的是学校用于管理学生和教职工信息的系统。学生信息管理是其中的核心部分之一。你打算用什么技术来实现呢?
小明:我想用Python,因为我觉得Python语法简单,而且有丰富的库支持。不过我对具体怎么实现还不太清楚。
李老师:很好,Python确实是一个不错的选择。我们可以使用Flask或者Django这样的Web框架来搭建系统。先从基础开始,比如创建一个学生信息表。
小明:那应该怎么做呢?数据库方面需要考虑什么?
李老师:数据库是必须的。我们可以用SQLite或者MySQL。这里我们以SQLite为例,因为它轻量,适合初学者。首先你需要定义一个学生表,包括学号、姓名、性别、专业、年级等字段。
小明:明白了,那我可以写一段SQL语句来建表吗?
李老师:当然可以。下面是一段示例代码:
CREATE TABLE students (
id INTEGER PRIMARY KEY AUTOINCREMENT,
student_id TEXT NOT NULL UNIQUE,
name TEXT NOT NULL,
gender TEXT,
major TEXT,
grade INTEGER
);
小明:这段代码看起来很清晰。那接下来是不是要连接数据库呢?
李老师:没错。在Python中,我们可以使用sqlite3库来操作数据库。下面是一个简单的连接和插入数据的例子:
import sqlite3
conn = sqlite3.connect('student.db')
cursor = conn.cursor()
# 创建表
cursor.execute('''
CREATE TABLE IF NOT EXISTS students (
id INTEGER PRIMARY KEY AUTOINCREMENT,
student_id TEXT NOT NULL UNIQUE,
name TEXT NOT NULL,
gender TEXT,
major TEXT,
grade INTEGER
)
''')
# 插入数据
cursor.execute('INSERT INTO students (student_id, name, gender, major, grade) VALUES (?, ?, ?, ?, ?)',
('2021001', '张三', '男', '计算机科学', 2))
conn.commit()
conn.close()
小明:这样就可以完成数据库的初始化了。那如果我要查询学生信息呢?
李老师:你可以使用SELECT语句。例如,查询所有学生信息:
cursor.execute('SELECT * FROM students')
results = cursor.fetchall()
for row in results:
print(row)
小明:这个例子挺直观的。那如果我要根据学号查找学生呢?
李老师:可以用WHERE子句,比如:
cursor.execute('SELECT * FROM students WHERE student_id = ?', ('2021001',))
result = cursor.fetchone()
print(result)
小明:看来数据库操作这部分我已经掌握了。接下来是不是要设计前端界面?
李老师:是的。我们可以用Flask来搭建一个简单的Web应用。首先安装Flask:
pip install flask
小明:然后怎么写一个简单的路由呢?
李老师:下面是一个示例代码:
from flask import Flask, render_template, request, redirect, url_for
app = Flask(__name__)
@app.route('/')
def index():
return "欢迎来到学工系统!"
if __name__ == '__main__':
app.run(debug=True)
小明:这只是一个首页。那如何显示学生信息呢?
李老师:我们可以创建一个模板,用来展示学生列表。首先在templates文件夹下创建一个index.html文件:

学生信息列表
{% for student in students %}
{{ student.name }} - {{ student.student_id }}
{% endfor %}
小明:然后在Python代码中读取数据并传递给模板:
李老师:是的,下面是示例代码:
@app.route('/students')
def show_students():
conn = sqlite3.connect('student.db')
cursor = conn.cursor()
cursor.execute('SELECT * FROM students')
students = cursor.fetchall()
conn.close()
return render_template('index.html', students=students)
小明:这样就能在网页上显示学生信息了。那如果我要添加学生呢?
李老师:我们可以创建一个表单页面,让用户输入信息,然后提交到后端进行处理。
小明:那表单应该怎么设计?
李老师:在templates文件夹下创建一个add_student.html文件:
添加学生信息
小明:然后在Python中处理表单提交:
李老师:是的,下面是示例代码:
@app.route('/add', methods=['GET', 'POST'])
def add_student():
if request.method == 'POST':
student_id = request.form['student_id']
name = request.form['name']
gender = request.form['gender']
major = request.form['major']
grade = request.form['grade']
conn = sqlite3.connect('student.db')
cursor = conn.cursor()
cursor.execute('INSERT INTO students (student_id, name, gender, major, grade) VALUES (?, ?, ?, ?, ?)',
(student_id, name, gender, major, grade))
conn.commit()
conn.close()
return redirect(url_for('show_students'))
return render_template('add_student.html')
小明:这样就完成了添加功能。那删除和修改功能该怎么实现呢?
李老师:删除功能可以通过传递学生ID,然后执行DELETE语句。例如:
@app.route('/delete/
def delete_student(id):
conn = sqlite3.connect('student.db')
cursor = conn.cursor()
cursor.execute('DELETE FROM students WHERE id = ?', (id,))
conn.commit()
conn.close()
return redirect(url_for('show_students'))
小明:那修改功能呢?
李老师:修改功能需要先获取学生信息,然后提供一个表单让用户修改,再执行UPDATE语句。例如:
@app.route('/edit/
def edit_student(id):
if request.method == 'POST':
student_id = request.form['student_id']
name = request.form['name']
gender = request.form['gender']
major = request.form['major']
grade = request.form['grade']
conn = sqlite3.connect('student.db')
cursor = conn.cursor()
cursor.execute('UPDATE students SET student_id=?, name=?, gender=?, major=?, grade=? WHERE id=?',
(student_id, name, gender, major, grade, id))
conn.commit()
conn.close()
return redirect(url_for('show_students'))
conn = sqlite3.connect('student.db')
cursor = conn.cursor()
cursor.execute('SELECT * FROM students WHERE id = ?', (id,))
student = cursor.fetchone()

conn.close()
return render_template('edit_student.html', student=student)
小明:看来这些功能都实现了。那现在整个系统已经可以运行了吗?
李老师:是的。你只需要将所有代码整合起来,并确保目录结构正确,就可以运行了。此外,还可以添加用户登录功能,提高安全性。
小明:用户登录功能该怎么实现呢?
李老师:可以创建一个用户表,存储用户名和密码,然后在登录时验证。也可以使用Flask-Login等扩展来简化流程。
小明:听起来不错。那我现在可以开始动手写了。
李老师:对,实践是最好的学习方式。如果你遇到问题,随时可以来问我。