用Python开发江西学生工作管理系统并生成PDF报告
大家好,今天我来跟大家分享一下怎么用Python做一个学生工作管理系统,而且还要能生成PDF报告。这个系统主要是给江西的一些学校或者教育机构用的,用来管理学生的各种信息,比如成绩、奖惩记录、活动参与情况等等。
首先,咱们得先说说这个系统的大概结构。一般来说,这种管理系统需要有用户登录、数据录入、数据查询、数据导出等功能。而我们要做的就是把这些功能用Python来实现,同时还要支持把数据以PDF格式输出,方便打印或者存档。
那咱们先从环境搭建开始吧。Python是一个很强大的语言,尤其是在做后端开发和自动化处理的时候。我们这里会用到几个库:一个是Flask,用来做Web框架;另一个是ReportLab,用来生成PDF;还有一个是SQLite,作为数据库存储数据。
接下来,我会一步步带你们写代码,从创建数据库表,到编写Flask应用,再到生成PDF报告。整个过程都是用口语化的表达方式,尽量不讲太专业的术语,让新手也能看懂。
1. 创建数据库
首先,我们需要在本地创建一个SQLite数据库,用来存储学生的信息。我们可以用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,
name TEXT NOT NULL,
student_id TEXT NOT NULL UNIQUE,
gender TEXT,
class TEXT,
grade TEXT,
phone TEXT,
email TEXT
)
''')
# 创建奖惩记录表
cursor.execute('''
CREATE TABLE IF NOT EXISTS rewards (
id INTEGER PRIMARY KEY AUTOINCREMENT,
student_id TEXT,
reward_type TEXT,
description TEXT,
date TEXT
)
''')
conn.commit()
conn.close()
这段代码的作用就是创建两个表:一个是students表,用来保存学生的基本信息;另一个是rewards表,用来记录学生的奖惩情况。如果这些表已经存在了,就不再重复创建。
2. 使用Flask构建Web应用
接下来,我们要用Flask来搭建一个简单的Web界面,让用户可以输入学生信息,并且查看和导出数据。
首先安装Flask:
pip install flask
然后创建一个简单的Flask应用,代码如下:
from flask import Flask, render_template, request, redirect, url_for
import sqlite3
app = Flask(__name__)
def get_db_connection():
conn = sqlite3.connect('student.db')
conn.row_factory = sqlite3.Row
return conn
@app.route('/')
def index():
conn = get_db_connection()
students = conn.execute('SELECT * FROM students').fetchall()
conn.close()
return render_template('index.html', students=students)
@app.route('/add', methods=['POST'])
def add_student():
name = request.form['name']
student_id = request.form['student_id']
gender = request.form['gender']
class_name = request.form['class']
grade = request.form['grade']
phone = request.form['phone']
email = request.form['email']
conn = get_db_connection()
conn.execute('INSERT INTO students (name, student_id, gender, class, grade, phone, email) VALUES (?, ?, ?, ?, ?, ?, ?)',
(name, student_id, gender, class_name, grade, phone, email))
conn.commit()
conn.close()
return redirect(url_for('index'))
if __name__ == '__main__':
app.run(debug=True)
这段代码创建了一个简单的Flask应用,有一个主页(/)显示所有学生信息,还有一个添加学生信息的路由(/add),通过POST方法接收表单数据并插入到数据库中。
3. 创建HTML模板
为了让页面看起来更美观,我们需要创建一个简单的HTML模板文件,放在templates目录下,命名为index.html。

<!DOCTYPE html>
<html>
<head>
<title>江西学生工作管理系统</title>
</head>
<body>
<h1>江西学生工作管理系统</h1>
<form action="/add" method="post">
<label>姓名:<input type="text" name="name"></label><br>
<label>学号:<input type="text" name="student_id"></label><br>
<label>性别:<input type="text" name="gender"></label><br>
<label>班级:<input type="text" name="class"></label><br>
<label>年级:<input type="text" name="grade"></label><br>
<label>电话:<input type="text" name="phone"></label><br>
<label>邮箱:<input type="text" name="email"></label><br>
<button type="submit">提交</button>
</form>
<h2>学生列表</h2>
<ul>
{% for student in students %}
<li>{{ student.name }} - {{ student.student_id }} - {{ student.class }} - {{ student.grade }}</li>
{% endfor %}
</ul>
</body>
</html>
这个页面包含一个表单,用户可以填写学生信息并提交,然后页面会显示所有已录入的学生信息。
4. 生成PDF报告
现在我们来重点讲一下如何将学生信息生成PDF文件。我们会用到ReportLab这个库,它可以帮助我们快速生成PDF文档。
首先安装ReportLab:
pip install reportlab
然后编写一个函数,用于将学生信息导出为PDF:
from reportlab.lib.pagesizes import letter
from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.lib import colors
def generate_pdf(students):
filename = "student_report.pdf"
doc = SimpleDocTemplate(filename, pagesize=letter)
styles = getSampleStyleSheet()
story = []
# 添加标题
title = Paragraph("江西学生工作管理系统 - 学生信息报告", styles['Title'])
story.append(title)
story.append(Spacer(1, 12))
# 准备表格数据
data = [["姓名", "学号", "性别", "班级", "年级", "电话", "邮箱"]]
for student in students:
data.append([
student['name'],
student['student_id'],
student['gender'],
student['class'],
student['grade'],
student['phone'],
student['email']
])
# 创建表格
table = Table(data)
table.setStyle(TableStyle([
('BACKGROUND', (0, 0), (-1, 0), colors.lightblue),
('TEXTCOLOR', (0, 0), (-1, 0), colors.whitesmoke),
('ALIGN', (0, 0), (-1, -1), 'CENTER'),
('FONTNAME', (0, 0), (-1, 0), 'Helvetica-Bold'),
('BOTTOMPADDING', (0, 0), (-1, 0), 12),
('BACKGROUND', (0, 1), (-1, -1), colors.beige),
('GRID', (0, 0), (-1, -1), 1, colors.black)
]))
story.append(table)
doc.build(story)
return filename
这段代码会创建一个PDF文件,里面包含学生信息的表格。表格的第一行是标题,背景颜色是浅蓝色,后面的行是灰色背景,字体居中对齐,边框用黑色线条表示。
5. 将PDF生成功能集成到Flask应用中
接下来,我们需要在Flask应用中添加一个路由,让用户可以点击按钮下载生成的PDF文件。
@app.route('/download-pdf')
def download_pdf():
conn = get_db_connection()
students = conn.execute('SELECT * FROM students').fetchall()
conn.close()
filename = generate_pdf(students)
return send_file(filename, as_attachment=True)
然后在HTML页面中添加一个链接,让用户可以点击下载PDF:
<a href="{{ url_for('download_pdf') }}">下载PDF报告</a>
这样,当用户访问主页时,就可以看到一个“下载PDF报告”的链接,点击后就能下载生成的PDF文件。
6. 总结
通过以上步骤,我们就完成了一个简单的学生工作管理系统,并且能够将学生信息导出为PDF格式。这个系统虽然简单,但已经具备了基本的功能,可以扩展更多模块,比如奖惩记录的导出、按条件筛选学生等。
对于江西地区的学校或教育机构来说,这样的系统可以帮助他们更好地管理学生信息,提高工作效率。同时,生成PDF的功能也方便了数据的整理和归档。
如果你对这个项目感兴趣,可以尝试自己动手写一写,看看能不能加上更多的功能,比如登录验证、权限管理、数据统计图表等。总之,这是一个很好的学习项目,适合初学者和进阶者一起探索。
好了,今天的分享就到这里。希望这篇文章对你有帮助!如果你有任何问题,欢迎留言交流。
本站知识库部分内容及素材来源于互联网,如有侵权,联系必删!

