学工管理系统
嘿,朋友们!今天咱们来聊聊怎么用Python和SQLite做个学工管理系统,而且是跟泉州有关的。别看这标题有点技术味儿,其实我就是想给大家讲讲,怎么从零开始写一个能管理学生信息的小系统,还顺便教你怎么把数据存到.doc文件里。听起来是不是有点意思?那咱们就一步步来。

首先,什么是“学工管理系统”呢?简单来说,就是一个用来管理学生信息、成绩、班级、老师等信息的系统。在泉州这样的城市,很多学校可能都用过类似的系统,但大多数都是比较传统的,比如用Excel或者Word来记录,这样效率低、容易出错。所以,我们今天的目标就是用Python和SQLite做一个更高效、更灵活的系统。
先说一下我们的开发环境。我们需要安装Python,还有SQLite数据库。如果你对这些不太熟悉也没关系,我会一步一步带你们走。另外,我们还会用到一些Python库,比如sqlite3(这个是Python自带的),还有pywin32,因为它可以帮助我们操作.doc文件。
那么,为什么选Python呢?因为Python语法简单,上手快,而且有很多现成的库可以使用。对于初学者来说,是个很好的选择。而SQLite是一个轻量级的数据库,不需要复杂的配置,非常适合做小型项目。再加上.doc文件,它是一种常见的文档格式,适合做数据导出或报告生成。
现在,我们先来创建一个简单的数据库结构。假设我们要管理的是学生的基本信息,包括学号、姓名、性别、班级、出生日期、联系方式等。那么,我们可以先建一个表,叫student_info。这个表的字段应该包括id(主键)、student_id(学号)、name(姓名)、gender(性别)、class(班级)、birthday(出生日期)、phone(电话)。
为了方便,我们可以先用Python代码来创建这个表。下面是一段示例代码:
import sqlite3
# 连接数据库,如果不存在则创建
conn = sqlite3.connect('quanzhou_student.db')
cursor = conn.cursor()
# 创建学生信息表
cursor.execute('''
CREATE TABLE IF NOT EXISTS student_info (
id INTEGER PRIMARY KEY AUTOINCREMENT,
student_id TEXT NOT NULL UNIQUE,
name TEXT NOT NULL,
gender TEXT,
class TEXT,
birthday DATE,
phone TEXT
)
''')
# 提交更改
conn.commit()
这段代码很简单,就是连接数据库,然后创建一个表。注意,这里用了`IF NOT EXISTS`,这样就不会重复创建了。同时,我们给student_id加了一个唯一约束,防止重复录入。
接下来,我们再写一段代码,用来添加学生信息到数据库中。比如说,我们有一个学生,学号是20230101,姓名是张三,性别是男,班级是高一(1)班,生日是2005-05-05,电话是13800000000。我们可以这样插入数据:
def add_student(student_id, name, gender, class_name, birthday, phone):
conn = sqlite3.connect('quanzhou_student.db')
cursor = conn.cursor()
cursor.execute('''
INSERT INTO student_info (student_id, name, gender, class, birthday, phone)
VALUES (?, ?, ?, ?, ?, ?)
''', (student_id, name, gender, class_name, birthday, phone))
conn.commit()
conn.close()
这里用到了参数化查询,避免SQL注入的问题。然后我们调用这个函数,把数据插入进去。
然后,我们还可以写一个查询功能,比如根据学号查询学生信息:
def get_student_by_id(student_id):
conn = sqlite3.connect('quanzhou_student.db')
cursor = conn.cursor()
cursor.execute('SELECT * FROM student_info WHERE student_id = ?', (student_id,))
result = cursor.fetchone()
conn.close()
return result
这样,我们就有了基本的数据增删改查功能。不过,这只是基础,后面我们还可以扩展更多功能,比如批量导入数据、导出到.doc文件等等。
现在,我们来聊一下怎么把数据导出到.doc文件。因为.doc是微软Word的格式,我们可以用pywin32库来操作。首先,你需要安装这个库,可以用pip install pywin32。
举个例子,如果我们想要把所有学生的数据导出到一个.doc文件中,我们可以这样做:
import win32com.client as win32
def export_to_doc():
# 创建Word应用程序
word = win32.Dispatch('Word.Application')
doc = word.Documents.Add()
# 添加表格
table = doc.Tables.Add(doc.Range(0, 0), 7, 6) # 7行6列
table.Cell(1, 1).Range.Text = "学号"
table.Cell(1, 2).Range.Text = "姓名"
table.Cell(1, 3).Range.Text = "性别"
table.Cell(1, 4).Range.Text = "班级"
table.Cell(1, 5).Range.Text = "出生日期"
table.Cell(1, 6).Range.Text = "电话"
# 查询所有学生
conn = sqlite3.connect('quanzhou_student.db')
cursor = conn.cursor()
cursor.execute('SELECT * FROM student_info')
rows = cursor.fetchall()
conn.close()
# 填充数据
for i, row in enumerate(rows, start=2):
for j in range(6):
table.Cell(i, j+1).Range.Text = str(row[j])
# 保存文档
doc.SaveAs(r'C:\students.doc')
doc.Close()
word.Quit()
这段代码会创建一个新的Word文档,然后添加一个表格,把学生信息填进去,最后保存为students.doc。当然,你也可以根据需要修改表格样式、字体等。
不过,需要注意的是,pywin32依赖于Windows系统,如果你是在Linux或者Mac上运行,可能需要换一种方式,比如用python-docx库,它支持跨平台。那我们就用另一个例子来演示一下。
使用python-docx库的话,可以这样写:
from docx import Document
def export_to_docx():
doc = Document()
doc.add_heading('学生信息表', 0)
table = doc.add_table(rows=1, cols=6)
hdr_cells = table.rows[0].cells
hdr_cells[0].text = '学号'
hdr_cells[1].text = '姓名'
hdr_cells[2].text = '性别'
hdr_cells[3].text = '班级'
hdr_cells[4].text = '出生日期'
hdr_cells[5].text = '电话'
conn = sqlite3.connect('quanzhou_student.db')
cursor = conn.cursor()
cursor.execute('SELECT * FROM student_info')
rows = cursor.fetchall()
conn.close()
for row in rows:
row_cells = table.add_row().cells
row_cells[0].text = row[1]
row_cells[1].text = row[2]
row_cells[2].text = row[3]
row_cells[3].text = row[4]
row_cells[4].text = row[5]
row_cells[5].text = row[6]
doc.save('students.docx')
这样就可以生成一个.docx文件了,而且不依赖Windows系统。如果你是用Windows的话,两种方法都可以用,如果是其他系统,推荐用python-docx。
说到这里,我觉得咱们可以把这个系统做得更完善一点。比如增加一个图形界面,让用户更容易操作。我们可以用Tkinter来做前端,虽然不是特别炫酷,但够用。
比如,我们可以做一个简单的窗口,里面有输入框和按钮,用户输入学生信息,点击“添加”按钮,就会把数据存入数据库。然后再加一个“导出”按钮,点击之后就把数据导出到.doc文件。
下面是一个简单的Tkinter示例:
import tkinter as tk
from tkinter import messagebox
def add_student():
student_id = entry_id.get()
name = entry_name.get()
gender = entry_gender.get()
class_name = entry_class.get()
birthday = entry_birthday.get()
phone = entry_phone.get()
if not all([student_id, name, gender, class_name, birthday, phone]):
messagebox.showerror("错误", "请填写所有字段")
return
try:
add_student(student_id, name, gender, class_name, birthday, phone)
messagebox.showinfo("成功", "学生信息已添加")
except Exception as e:
messagebox.showerror("错误", f"添加失败: {e}")
def export_data():
try:
export_to_docx()
messagebox.showinfo("成功", "数据已导出到students.docx")
except Exception as e:
messagebox.showerror("错误", f"导出失败: {e}")
root = tk.Tk()
root.title("泉州学工管理系统")
tk.Label(root, text="学号:").grid(row=0, column=0)
entry_id = tk.Entry(root)
entry_id.grid(row=0, column=1)
tk.Label(root, text="姓名:").grid(row=1, column=0)
entry_name = tk.Entry(root)
entry_name.grid(row=1, column=1)
tk.Label(root, text="性别:").grid(row=2, column=0)
entry_gender = tk.Entry(root)
entry_gender.grid(row=2, column=1)
tk.Label(root, text="班级:").grid(row=3, column=0)
entry_class = tk.Entry(root)
entry_class.grid(row=3, column=1)
tk.Label(root, text="出生日期:").grid(row=4, column=0)
entry_birthday = tk.Entry(root)
entry_birthday.grid(row=4, column=1)
tk.Label(root, text="电话:").grid(row=5, column=0)
entry_phone = tk.Entry(root)
entry_phone.grid(row=5, column=1)
btn_add = tk.Button(root, text="添加", command=add_student)
btn_add.grid(row=6, column=0)
btn_export = tk.Button(root, text="导出到.docx", command=export_data)
btn_export.grid(row=6, column=1)
root.mainloop()
这个界面看起来挺简单的,但是确实能实现基本的功能。你可以通过这个界面输入学生信息,然后点击“添加”,数据就会被存到数据库里。再点“导出到.docx”,就能生成一个文档。
当然,这只是一个小系统,还有很多地方可以优化。比如,可以加入数据验证,防止用户输入错误;可以添加搜索功能,方便查找特定学生;还可以加入删除和修改功能,让系统更完整。
另外,如果你是泉州本地的开发者,或者学校正在寻找一个低成本的学工管理系统,这样的系统可以作为一个起点。你可以根据实际需求进一步扩展,比如接入微信小程序、网页端、甚至移动端。
总结一下,今天我们用Python和SQLite搭建了一个简单的学工管理系统,还学会了如何将数据导出到.doc文件中。虽然只是基础版本,但它已经具备了基本的数据管理能力,而且代码简单易懂,适合初学者学习和实践。
如果你对这个项目感兴趣,建议多动手试试,看看能不能加入更多功能。毕竟,编程最重要的就是实践。希望这篇文章对你有帮助,也欢迎你在评论区留言,分享你的想法或者遇到的问题。我们一起进步,一起探索更多的可能性!
最后,如果你觉得这个文章不错,记得点赞、收藏,或者转发给需要的朋友。感谢大家的阅读,我们下期再见!