Python实现班级档案管理系统实战指南
本文详细介绍如何利用Python编写一个班级档案管理系统。系统涵盖学生基本信息的录入、增删改查、终端交互菜单设计,并结合OpenPyXL库实现数据向Excel文件的持久化存储。附带逻辑修复与优化后的完整源代码,便于开发者直接部署与二次扩展。
功能设计与架构思路
该系统的核心目标是构建一个轻量级的命令行界面(CLI),用于集中管理班级学生的档案数据。为了满足日常教务或学习场景的需求,系统需具备以下关键特性:
- 数据模型:以字典列表为内存载体,每条记录包含学号、姓名、性别、年龄及备注字段。学号作为唯一标识键,需在前端录入环节进行重复性拦截。
- 身份校验:内置简易登录验证机制,通过比对账号格式与预设密码规则(学号后五位),保障系统入口安全。
- 核心业务:覆盖全生命周期的数据维护,包括新建档案、检索过滤、字段级动态修改、单条记录剔除,以及基于
openpyxl的 Excel 导出功能。 - 交互闭环:通过主循环绑定数字按键映射至具体函数,实现不间断的业务流转与异常选项容错。
运行环境准备
本项目完全基于标准 Python 生态开发,仅需安装第三方电子表格处理库即可满足文件导出需求。请在终端执行以下命令完成依赖部署:
pip install openpyxl
建议运行环境为 Python 3.6 及以上版本,以确保字符串格式化特性的兼容性。
核心代码实现步骤
第1步:初始化全局容器与登录验证模块
首先定义全局列表 s_information 模拟数据库,并编写校验函数。原稿中登录逻辑存在 while True and condition 导致的死跳隐患,此处修正为标准条件轮询结构,确保输入非法账号或密码时自动重试。
第2步:完善信息录入与批量显示逻辑
录入模块需严格校验学号唯一性。原稿循环判断后未做状态阻断,导致重复添加。重构后采用布尔标记位,仅在未命中现有学号时才拼接新字典并追加至容器。显示模块则遍历容器打印当前快照。
第3步:构建精确查询与动态修改功能
查询与修改均支持通过学号或姓名定位目标记录。修改逻辑引入子菜单映射,允许用户针对特定索引覆盖对应字段值。删除操作增加非空校验,防止误删或触发索引越界。
第4步:调用OpenPyXL实现Excel文件持久化
摒弃易丢失数据的纯文本保存方式,改用 Workbook 对象创建新工作簿。自动填充首行列名,通过遍历将内存字典值逐行写入单元格,最后调用 save() 固化至磁盘。
第5步:组装主控循环与终端交互接口
将上述离散函数聚合至 main_loop() 中。使用 while True: 维持服务常驻,配合 input() 捕获指令并分发。清理原稿中遗留的“图书管理”误注释,统一语义为档案管理。
以下是整合所有逻辑并修复已知缺陷的完整可运行代码:
import openpyxl
from openpyxl import Workbook
import sys
# 全局数据存储容器
s_information = [
{'学号':'202031108041','姓名':'小明','性别':'男','年龄':'20','备注':'优等生'},
{'学号':'202031108042','姓名':'小谷','性别':'女','年龄':'20','备注':'特长生'},
{'学号':'202031108043','姓名':'小啊','性别':'男','年龄':'21','备注':''},
]
def check_login():
"""身份校验模块:账号需大于5位,密码必须为账号后五位"""
print("------ 系统登陆 ------")
print("提示:账号为学号,密码为学号后五位")
while True:
key_word = input("账号:").strip()
if len(key_word) < 5:
print("账号长度不足,请重新输入")
continue
password = input("密码:").strip()
if password == key_word[-5:]:
print("登录成功,进入管理系统!")
break
print("密码错误,请核对后重试")
def show_menu():
print('-' * 40)
print('[1]: 学生基本信息录入')
print('[2]: 学生基本信息显示')
print('[3]: 学生基本信息保存')
print('[4]: 学生基本信息删除')
print('[5]: 学生基本信息修改')
print('[6]: 学生基本信息查询')
print('[7]: 退出系统')
print('-' * 40)
def add_information():
xuehao = input('请输入新学生的学号:').strip()
is_duplicate = False
for record in s_information:
if record['学号'] == xuehao:
is_duplicate = True
break
if is_duplicate:
print("错误:该学号已存在于系统中,请勿重复录入。")
return
new_record = {
'学号': xuehao,
'姓名': input('请输入姓名:').strip(),
'性别': input('请输入性别:').strip(),
'年龄': input('请输入年龄:').strip(),
'备注': input('请输入备注:').strip()
}
s_information.append(new_record)
print("录入成功!")
def show_information():
if not s_information:
print("当前暂无学生数据。")
return
for idx, record in enumerate(s_information, start=1):
print(f"[{idx}] {record}")
def delete_information():
target_name = input('请输入要删除的学生姓名:').strip()
original_len = len(s_information)
s_information[:] = [rec for rec in s_information if rec['姓名'] != target_name]
if len(s_information) == original_len:
print("未找到名为 '{}' 的学生记录,删除失败。".format(target_name))
else:
print("已成功移除对应记录。")
def modify_information():
search_key = input('请输入学号或姓名进行定位:').strip()
target_idx = None
for idx, record in enumerate(s_information):
if record['姓名'] == search_key or record['学号'] == search_key:
target_idx = idx
break
if target_idx is None:
print("查无此人,请核对输入的学号或姓名。")
return
print("--- 请选择要修改的字段 ---")
print("1. 学号\t2. 姓名\t3. 性别\t4. 年龄\t5. 备注")
field_choice = input("输入选项数字:").strip()
fields_map = {'1':'学号', '2':'姓名', '3':'性别', '4':'年龄', '5':'备注'}
if field_choice not in fields_map:
print("无效选项,修改已取消。")
return
current_value = s_information[target_idx][fields_map[field_choice]]
s_information[target_idx][fields_map[field_choice]] = input(f"请输入新值 (原值:{current_value}): ").strip()
print("字段更新完毕。")
def search_information():
query_val = input('请输入学号或姓名进行查询:').strip()
found_records = [r for r in s_information if query_val in r.values()]
if found_records:
for r in found_records:
print(r)
else:
print("未匹配到相关数据。")
def save_to_excel():
file_name = input('请输入保存的文件名 (无需后缀):').strip()
if not file_name:
print("文件名不能为空,保存已取消。")
return
wb = Workbook()
sheet = wb.active
sheet.title = "学生信息表"
headers = ['学号', '姓名', '性别', '年龄', '备注']
sheet.append(headers)
for record in s_information:
row_data = list(record.values())
sheet.append(row_data)
wb.save(f"{file_name}.xlsx")
print(f"数据已成功导出至 {file_name}.xlsx")
def main_loop():
check_login()
while True:
show_menu()
choice = input("请选择功能编号:").strip()
dispatch = {
'1': add_information,
'2': show_information,
'3': save_to_excel,
'4': delete_information,
'5': modify_information,
'6': search_information,
'7': lambda: sys.exit(0)
}
func = dispatch.get(choice)
if func:
func()
else:
print("输入有误,请返回主菜单重新选择。")
if __name__ == '__main__':
main_loop()
代码测试与避坑指南
运行脚本后,控制台会优先拦截未通过身份验证的请求。登录成功后,主循环将永久驻留直至手动输入 7 退出系统。测试时可重点关注以下边界情况:
- 学号防重:尝试录入已存在的学号,系统将抛出拦截提示且不改变内存状态。
- 精准删除与修改:若输入不存在的姓名,系统会明确反馈并放弃后续操作,避免静默失败。
- 文件导出路径:生成的
.xlsx默认位于 Python 解释器当前工作目录下,可在资源管理器中直接双击预览核对数据矩阵。
总结
本方案通过模块化拆分,将复杂的数据流管控收敛于简洁的控制台交互中。利用 Python 原生数据结构与轻量级 Excel 库的配合,能够以极低的代码成本达成企业级档案管理的雏形需求。开发者可根据实际业务场景,进一步接入 SQLite 数据库或 Web 前端框架进行平滑升级。以上就是利用Python开发班级档案管理系统的具体代码,更多关于Python实战项目的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









