小明:最近我在学习编程,想做一个学工管理系统,你觉得可行吗?
小李:当然可以!学工管理系统在职业院校中非常实用,可以用来管理学生信息、成绩、考勤等。你打算用什么语言来开发呢?
小明:我想用Python,因为它的语法简单,而且有很多库可以使用。
小李:那是个好选择。Python确实非常适合做这种系统。我们可以从数据库开始设计,然后逐步搭建前端和后端。
小明:数据库应该用什么?MySQL还是SQLite?
小李:如果只是小型系统,SQLite足够用了,它不需要额外的服务器配置。不过如果是大型系统,MySQL或PostgreSQL会更合适。
小明:明白了。那我先从创建数据库开始吧,你能给我一些代码示例吗?
小李:当然可以。下面是一个简单的SQLite数据库创建代码,用于存储学生信息:
import sqlite3
conn = sqlite3.connect('student.db')
cursor = conn.cursor()
# 创建学生表
cursor.execute('''
CREATE TABLE IF NOT EXISTS students (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
student_id TEXT NOT NULL UNIQUE,
major TEXT NOT NULL,
class TEXT NOT NULL,
enrollment_date DATE NOT NULL
)
''')
# 提交更改并关闭连接
conn.commit()
conn.close()
小明:这段代码看起来很清晰,我可以直接复制过来使用。那接下来是不是要写一些增删改查的功能?

小李:没错,这是核心功能。我们先来看插入数据的部分。下面是一个添加学生的函数:
def add_student(name, student_id, major, class_name, enrollment_date):
conn = sqlite3.connect('student.db')
cursor = conn.cursor()
cursor.execute('INSERT INTO students (name, student_id, major, class, enrollment_date) VALUES (?, ?, ?, ?, ?)',
(name, student_id, major, class_name, enrollment_date))
conn.commit()
conn.close()
小明:这个函数可以让我方便地添加学生信息。那查询功能呢?比如根据学生ID查找信息。
小李:查询功能也很简单,下面是一个根据学生ID查询的函数:
def get_student_by_id(student_id):
conn = sqlite3.connect('student.db')
cursor = conn.cursor()
cursor.execute('SELECT * FROM students WHERE student_id = ?', (student_id,))
result = cursor.fetchone()
conn.close()
return result
小明:这样就能返回一个学生的全部信息了。那删除和更新功能呢?
小李:删除功能如下,可以根据学生ID删除记录:
def delete_student(student_id):
conn = sqlite3.connect('student.db')
cursor = conn.cursor()
cursor.execute('DELETE FROM students WHERE student_id = ?', (student_id,))
conn.commit()
conn.close()
小明:好的,那更新功能呢?比如修改学生的专业信息。
小李:更新功能可以用以下代码实现:
def update_student_major(student_id, new_major):
conn = sqlite3.connect('student.db')
cursor = conn.cursor()
cursor.execute('UPDATE students SET major = ? WHERE student_id = ?', (new_major, student_id))
conn.commit()
conn.close()
小明:这些功能已经很完整了。接下来是不是要考虑前端界面?
小李:是的。你可以使用Flask或者Django这样的Web框架来构建前端页面。比如用Flask搭建一个简单的网页,让用户输入学生信息。
小明:那我应该怎么开始呢?有没有什么推荐的模板?
小李:你可以先安装Flask,然后创建一个简单的路由,比如“/add”来处理添加学生请求。下面是一个简单的Flask示例:
from flask import Flask, request, render_template
import sqlite3
app = Flask(__name__)
@app.route('/add', methods=['GET', 'POST'])
def add():
if request.method == 'POST':
name = request.form['name']
student_id = request.form['student_id']
major = request.form['major']
class_name = request.form['class']
enrollment_date = request.form['enrollment_date']
add_student(name, student_id, major, class_name, enrollment_date)
return "学生信息已成功添加!"
return render_template('add_student.html')
小明:这样用户就可以通过网页提交学生信息了。那HTML页面该怎么写呢?
小李:HTML部分很简单,只需要几个输入框和一个提交按钮。下面是一个简单的例子:
<form method="post">
姓名:<input type="text" name="name"><br>
学号:<input type="text" name="student_id"><br>
专业:<input type="text" name="major"><br>
班级:<input type="text" name="class"><br>
入学日期:<input type="date" name="enrollment_date"><br>
<input type="submit" value="提交">
</form>
小明:这样就完成了基本的前后端交互。那接下来是不是可以考虑权限管理?比如管理员和普通用户的不同操作权限?
小李:是的,权限管理是系统安全的重要部分。你可以设计一个用户表,包含用户名、密码和角色(如管理员、教师、学生)。
小明:那怎么实现登录功能呢?
小李:我们可以用Flask的session来管理用户登录状态。下面是一个简单的登录示例:
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
conn = sqlite3.connect('student.db')
cursor = conn.cursor()
cursor.execute('SELECT * FROM users WHERE username = ? AND password = ?', (username, password))
user = cursor.fetchone()
conn.close()
if user:
session['user'] = user[0] # 假设第一个字段是用户ID
return "登录成功!"
else:
return "用户名或密码错误!"
return render_template('login.html')
小明:这确实能控制用户的访问权限。那权限验证该怎么实现呢?比如只有管理员才能删除学生信息。
小李:可以在每个需要权限的函数中检查用户的角色。例如,在删除学生之前,判断用户是否为管理员:
def delete_student(student_id):
if not is_admin():
return "您没有权限执行此操作!"
conn = sqlite3.connect('student.db')
cursor = conn.cursor()
cursor.execute('DELETE FROM students WHERE student_id = ?', (student_id,))
conn.commit()
conn.close()
小明:这样就能防止非管理员误删数据了。看来这个系统已经越来越完善了。
小李:是的,这只是基础版本。你还可以添加更多功能,比如成绩管理、考勤统计、通知公告等。
小明:听起来很有挑战性,但也很有成就感。我会继续努力的!
小李:加油!学工管理系统对职业院校来说非常重要,你的项目一定会很有价值。
