学工管理系统
小明:最近我们学校要进行迎新工作,我听说你们技术部在开发一个学工管理系统?
小李:是的,我们正在设计一个学工管理系统,用于管理新生信息、分配宿舍、安排课程等。你对这个系统有什么想法吗?
小明:我觉得如果能和迎新流程结合起来就更好了。比如,新生报到的时候,系统能自动处理他们的信息,减少人工操作。
小李:没错,这正是我们需要优化的地方。我们可以用Python来编写这个系统,因为它的灵活性和强大的库支持非常适合这类任务。
小明:那你能给我讲讲具体的实现方式吗?有没有什么代码可以参考?
小李:当然可以。我们可以从一个简单的数据结构开始,比如使用字典来存储学生信息。然后,再结合一些数据库操作,比如使用SQLite来持久化数据。
小明:听起来不错。那能不能举个例子?比如,如何读取新生的信息并进行初步处理?
小李:好的,我来写一段代码,展示如何读取CSV文件中的新生信息,并将其插入到数据库中。
小明:这段代码看起来很清晰。那接下来呢?如何实现迎新的自动化流程?比如,根据学生的专业自动分配宿舍?
小李:这是一个典型的逻辑判断问题。我们可以根据学生的专业和年级,设置一些规则来分配宿舍。比如,计算机专业的学生可能需要特定的宿舍楼。
小明:那我可以把这段逻辑也写成函数吗?这样方便以后维护。
小李:当然可以。我们可以将分配逻辑封装成一个函数,这样不仅便于测试,也方便后续扩展。
小明:那我现在想看看整个系统的结构是什么样的?有没有模块化的设计?
小李:是的,我们采用模块化的设计,主要包括以下几个部分:数据输入模块、数据处理模块、数据库操作模块、用户界面模块。
小明:用户界面模块?是不是需要图形界面?
小李:目前我们先用命令行界面,后期可以考虑使用Tkinter或者Web框架来实现更友好的交互。
小明:明白了。那现在我来试着写一个简单的程序,用来读取学生信息并输出到控制台。
小李:好的,你可以先创建一个学生类,然后用列表来保存多个学生对象。
小明:那我来试试看。
class Student:
def __init__(self, name, student_id, major):
self.name = name
self.student_id = student_id
self.major = major
def display_info(self):
print(f"姓名: {self.name}, 学号: {self.student_id}, 专业: {self.major}")
# 示例数据
students = [
Student("张三", "2023001", "计算机科学"),
Student("李四", "2023002", "软件工程"),
Student("王五", "2023003", "人工智能")
]
# 显示所有学生信息
for student in students:
student.display_info()
小明:这段代码运行后,就能显示学生的信息了。那如果我要把这些信息存入数据库呢?
小李:我们可以使用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
)
''')
# 插入学生信息
cursor.execute("INSERT INTO students (name, student_id, major) VALUES (?, ?, ?)",
("张三", "2023001", "计算机科学"))
cursor.execute("INSERT INTO students (name, student_id, major) VALUES (?, ?, ?)",
("李四", "2023002", "软件工程"))
cursor.execute("INSERT INTO students (name, student_id, major) VALUES (?, ?, ?)",
("王五", "2023003", "人工智能"))
# 提交事务
conn.commit()
# 查询数据
cursor.execute("SELECT * FROM students")
rows = cursor.fetchall()
for row in rows:
print(row)
# 关闭连接
conn.close()
小明:太好了!这样就可以把数据保存下来了。那接下来,我们怎么实现迎新的自动化呢?比如,根据专业自动分配宿舍?
小李:我们可以定义一个分配宿舍的函数,根据学生的专业返回对应的宿舍编号。
小明:那这个函数应该怎么写?
小李:下面是一个简单的示例,展示了如何根据专业分配宿舍。
def assign_dormitory(major):
if major == "计算机科学":
return "A栋"
elif major == "软件工程":
return "B栋"
elif major == "人工智能":
return "C栋"
else:
return "未分配"
# 测试函数
print(assign_dormitory("计算机科学")) # 输出: A栋
print(assign_dormitory("人工智能")) # 输出: C栋
小明:这个函数看起来很简单,但确实能完成任务。那如果我想把这些信息也存入数据库呢?

小李:我们可以修改插入语句,添加一个dormitory字段。
小明:那我来试一下。
# 修改表结构,添加dormitory字段
cursor.execute("ALTER TABLE students ADD COLUMN dormitory TEXT")
# 更新学生宿舍信息
cursor.execute("UPDATE students SET dormitory = ? WHERE student_id = ?", ("A栋", "2023001"))
cursor.execute("UPDATE students SET dormitory = ? WHERE student_id = ?", ("B栋", "2023002"))
cursor.execute("UPDATE students SET dormitory = ? WHERE student_id = ?", ("C栋", "2023003"))
# 提交事务
conn.commit()
# 查询更新后的数据
cursor.execute("SELECT * FROM students")
rows = cursor.fetchall()
for row in rows:
print(row)
小明:这样就把宿舍信息也存进去了。那接下来,我们怎么实现迎新的流程自动化呢?比如,自动生成报到单?
小李:我们可以生成一个文本文件,包含学生的详细信息,包括姓名、学号、专业和宿舍。
小明:那代码应该怎么写?
小李:下面是一个示例,演示如何将学生信息写入文件。
with open("check_in_list.txt", "w") as file:
for student in students:
file.write(f"姓名: {student.name}\n")
file.write(f"学号: {student.student_id}\n")
file.write(f"专业: {student.major}\n")
file.write(f"宿舍: {student.dormitory}\n")
file.write("-" * 30 + "\n")
print("报到单已生成,保存为 check_in_list.txt")
小明:这样就能生成一份完整的报到单了。看来我们的系统已经初具雏形了。
小李:是的,这只是第一步。接下来我们可以加入更多功能,比如批量导入学生信息、自动发送通知邮件、生成二维码等。
小明:那这些功能该怎么实现?
小李:比如,批量导入可以用CSV文件,使用pandas库读取;发送邮件可以用email库;生成二维码可以用qrcode库。
小明:那我可以尝试写一个自动发送邮件的代码吗?
小李:当然可以。下面是一个简单的示例,展示如何发送一封邮件。
import smtplib
from email.mime.text import MIMEText
# 邮件内容
msg = MIMEText("欢迎加入我们学校!请按时报到。")
msg['Subject'] = '迎新通知'
msg['From'] = 'school@example.com'
msg['To'] = 'student@example.com'
# 发送邮件
with smtplib.SMTP('smtp.example.com', 587) as server:
server.starttls()
server.login('school@example.com', 'password')
server.sendmail('school@example.com', ['student@example.com'], msg.as_string())
print("邮件已发送!")
小明:这段代码看起来很实用。那如果我们要生成二维码,该怎么做?
小李:我们可以使用qrcode库,生成一个包含学生信息的二维码。
小明:那代码应该怎么写?
小李:下面是一个简单的示例。
import qrcode
# 生成二维码
qr = qrcode.make("姓名: 张三, 学号: 2023001, 专业: 计算机科学, 宿舍: A栋")
qr.save("student_qr.png")
print("二维码已生成,保存为 student_qr.png")
小明:太棒了!这样一来,迎新的流程就基本完成了。
小李:是的,我们现在有一个基本的学工管理系统,能够处理迎新流程中的大部分任务。未来还可以继续扩展,比如增加权限管理、多语言支持、移动端适配等。
小明:谢谢你,今天学到了很多东西!
小李:不客气!如果你有其他问题,随时来找我。