X 
微信扫码联系客服
获取报价、解决方案


李经理
13913191678
首页 > 知识库 > 学工管理系统> 用Python开发江西学生工作管理系统并生成PDF报告
学工管理系统在线试用
学工管理系统
在线试用
学工管理系统解决方案
学工管理系统
解决方案下载
学工管理系统源码
学工管理系统
源码授权
学工管理系统报价
学工管理系统
产品报价

用Python开发江西学生工作管理系统并生成PDF报告

2025-11-29 06:35

大家好,今天我来跟大家分享一下怎么用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的功能也方便了数据的整理和归档。

如果你对这个项目感兴趣,可以尝试自己动手写一写,看看能不能加上更多的功能,比如登录验证、权限管理、数据统计图表等。总之,这是一个很好的学习项目,适合初学者和进阶者一起探索。

好了,今天的分享就到这里。希望这篇文章对你有帮助!如果你有任何问题,欢迎留言交流。

本站知识库部分内容及素材来源于互联网,如有侵权,联系必删!