欢迎各位大佬的到来,这个系统呢,就是在上课无聊做的一个简易的学生学籍管理,做的比较简陋,有需要的朋友可以参考一下。
因为我也是刚接触这个软件不久,有些操作不熟,源代码在资源包里,大家可以自由下载,希望可以帮助到大家!
哦对,后面顺便做了一个双语言版本,中文和英文自由转换,缺点就是可能有一些bug(我也没仔细检查,主要功能是都能实现的,可能就是一些图标显示错位,这个自己修改就行)
目录
这是几组效果图展示。



一、开始界面实现
本系统运用 Python 的 Tkinter 库构建界面,界面设计紧跟现代 UI 潮流。以下是部分界面样式设置代码示例:
class ModernUI:
COLORS = {
'primary': '#2196F3',
'primary_dark': '#1976D2',
'primary_light': '#BBDEFB',
'secondary': '#FFFFFF',
'background': '#FFFFFF',
'surface': '#FFFFFF',
'text': '#212121',
'text_secondary': '#757575',
'border': '#E0E0E0',
'hover': '#F5F5F5',
'success': '#4CAF50',
'warning': '#FFC107',
'error': '#F44336',
'shadow': '#0000001A'
}
@staticmethod
def style():
style = ttk.Style()
style.theme_use('clam')
# 主窗口样式
style.configure('Main.TFrame',
background=ModernUI.COLORS['background'])
# 按钮样式
style.configure('Modern.TButton',
background=ModernUI.COLORS['primary'],
foreground='white',
padding=(20, 10),
font=('Microsoft YaHei UI', 9),
relief='flat')
style.map('Modern.TButton',
background=[('active', ModernUI.COLORS['primary_dark'])])
通过上述代码,系统定义了丰富的颜色变量,并应用于各类组件样式设置,如`Main.TFrame`主窗口背景色设置为白色,`Modern.TButton`按钮背景色为蓝色等,使界面视觉效果统一且美观。
二、核心功能模块
(一)登录与注册
系统启动时先呈现登录/注册界面,从`users.json`读取用户数据验证身份。注册时,如下列代码所示,先获取用户名、密码及确认密码:
def register_and_login(self):
username = self.username_entry.get().strip()
password = self.password_entry.get().strip()
confirm = self.confirm_entry.get().strip()
然后检查信息完整性与密码一致性,若用户名不存在则创建新用户并保存数据:
if username in self.users:
# 如果用户已存在,尝试登录
if self.users[username].password == password:
self.login_success = True
self.root.destroy()
else:
messagebox.showerror("错误", "用户名已存在且密码错误!")
self.password_entry.delete(0, tk.END)
self.confirm_entry.delete(0, tk.END)
self.password_entry.focus()
else:
# 创建新用户
user = User(username, password)
self.users[username] = user
self.save_users()
self.login_success = True
messagebox.showinfo("成功", "注册成功!")
self.root.destroy()
(二)学生管理
1. 信息操作
- 添加学生信息时,通过`DialogBuilder`创建对话框,如:
DialogBuilder.create_dialog(self.root, "添加学生")
并在对话框中为各字段创建表单,如学号字段:
entries[field_name] = DialogBuilder.create_form_field(
main_frame, label_text, field_type)
- 修改与删除操作类似,修改时先获取选中学生信息,再在对话框中修改并保存。删除时先选中学生,弹出确认框后删除并更新数据:
def delete_student(self):
selected = self.student_tree.selection()
if not selected:
messagebox.showerror(
self.get_text('error'),
self.get_text('select_student_first')
)
return
values = self.student_tree.item(selected[0])['values']
if not values:
messagebox.showerror(
self.get_text('error'),
self.get_text('cannot_get_student_info')
)
return
student_id = str(values[0])
student = self.students.get(student_id)
if messagebox.askyesno(
self.get_text('confirm'),
f"{self.get_text('confirm_delete_student')} {student.name}?\n{self.get_text('cannot_undo')}"
):
del self.students[student_id]
self.save_data()
self.refresh_student_list()
messagebox.showinfo(
self.get_text('success'),
self.get_text('student_deleted')
)
2. 信息搜索:可按姓名、学号、班级搜索,以下是搜索部分代码:
def search_students(self):
search_text = self.search_var.get().strip().lower()
search_option = self.search_option.get()
if not search_text:
self.refresh_student_list()
return
# 清空现有项目
for item in self.student_tree.get_children():
self.student_tree.delete(item)
# 根据选项搜索
for student in self.students.values():
match = False
if search_option == "姓名":
match = search_text in student.name.lower()
elif search_option == "学号":
match = search_text in student.student_id.lower()
elif search_option == "班级":
match = search_text in student.class_name.lower()
if match:
self.student_tree.insert('', 'end', values=(
student.student_id,
student.name,
student.gender,
student.class_name,
student.status))
(三)成绩管理
1. 成绩录入与删除
- 录入成绩时,先创建对话框并生成学生选择、学期选择、课程与成绩输入等表单字段:
def delete_score(self):
selected = self.score_tree.selection()
if not selected:
messagebox.showerror("错误", "请先选择要删除的成绩记录!")
return
# 获取选中的成绩信息
values = self.score_tree.item(selected[0])['values']
if not values or len(values) < 5: # 确保有完整的值
messagebox.showerror("错误", "无法获取成绩信息!")
return
student_id = str(values[0])
student_name = values[1]
semester_text = values[2]
course = values[3]
# 从学期文本中提取数字
try:
semester = semester_text.replace("第", "").replace("学期", "")
except:
messagebox.showerror("错误", "无法解析学期信息!")
return
# 获取学生信息
student = self.students.get(student_id)
if not student:
messagebox.showerror("错误", "未找到学生信息!")
return
# 确认删除
if messagebox.askyesno("确认", f"确定要删除 {student_name} 的 {course} 成绩吗?\n此操作不可恢复!"):
try:
# 删除成绩
if semester in student.scores and course in student.scores[semester]:
del student.scores[semester][course]
# 如果该学期没有其他成绩了,删除整个学期
if not student.scores[semester]:
del student.scores[semester]
self.save_data()
self.refresh_score_list()
messagebox.showinfo("成功", "成绩记录已删除!")
else:
messagebox.showerror("错误", "未找到相应的成绩记录!")
except Exception as e:
messagebox.showerror("错误", f"删除成绩失败:{str(e)}")
2. 成绩搜索(部分功能开发中):可按姓名、学号、课程搜索成绩,代码逻辑与学生信息搜索类似,根据搜索选项和文本匹配成绩数据并展示。
(四)学籍管理
1. 学籍状态变更:在学籍管理界面选中学生记录后,弹出对话框展示学生信息并提供新状态选择和变更原因填写,如下是创建对话框及部分组件代码:
dialog, main_frame = DialogBuilder.create_dialog(
self.root,
self.get_text('change_status'),
"600x700"
)
# 显示学生信息
info_frame = ttk.Frame(main_frame, style='Card.TFrame')
info_frame.pack(fill=tk.X, padx=40, pady=10)
ttk.Label(info_frame,
text=f"{self.get_text('student_id')}:",
style='Modern.TLabel',
font=('Microsoft YaHei UI', 11)).grid(row=0, column=0, padx=10, pady=8, sticky='e')
ttk.Label(info_frame,
text=student.student_id,
style='Modern.TLabel',
font=('Microsoft YaHei UI', 11, 'bold')).grid(row=0, column=1, padx=10, pady=8, sticky='w')
确认后保存新状态并更新数据。
2. 学籍状态查看:以表格形式展示学生学籍状态信息,通过`status_tree`组件展示,代码如下:
self.status_tree = ttk.Treeview(table_frame,
columns=columns,
show='headings',
style='Modern.Treeview')
(五)毕业管理
1. 毕业资格审核:在毕业管理界面点击审核按钮,系统按照预设标准(如所需学分、最低平均绩点)审核学生是否具备毕业资格,以下是审核部分代码:
def start_graduation_check(self, tree):
# 清空现有数据
for item in tree.get_children():
tree.delete(item)
# 审核标准
REQUIRED_CREDITS = 120
MINIMUM_GPA = 2.0
# 遍历所有学生进行审核
for student in self.students.values():
# 计算总学分和平均绩点
total_credits = 0
total_grade_points = 0
for semester in student.scores.values():
for course, score in semester.items():
# 假设每门课为 3 学分
credits = 3
total_credits += credits
# 计算绩点 (简单转换示例)
if score >= 90: grade_point = 4.0
elif score >= 80: grade_point = 3.0
elif score >= 70: grade_point = 2.0
elif score >= 60: grade_point = 1.0
else: grade_point = 0.0
total_grade_points += grade_point * credits
# 计算 GPA
gpa = total_grade_points / total_credits if total_credits > 0 else 0
# 判断是否具备毕业资格
eligible = "是" if (total_credits >= REQUIRED_CREDITS and
gpa >= MINIMUM_GPA and
student.status == "在读") else "否"
# 添加到表格
tree.insert('', 'end', values=(
student.student_id,
student.name,
f"{total_credits}",
f"{gpa:.2f}",
student.status,
eligible
))
messagebox.showinfo("完成", "毕业资格审核已完成!")
2. 审核结果导出:审核完成后可将结果导出为 CSV 文件,如下是导出代码:
def export_graduation_check(self, tree):
try:
filename = f"graduation_check_{datetime.now().strftime('%Y%m%d')}.csv"
with open(filename, 'w', encoding='utf-8-sig', newline='') as f:
writer = csv.writer(f)
# 写表头
headers = ['学号', '姓名', '已修学分', '平均绩点', '学籍状态', '是否具备毕业资格']
writer.writerow(headers)
# 写入数据
for item in tree.get_children():
writer.writerow(tree.item(item)['values'])
messagebox.showinfo("成功", f"审核结果已导出到:{filename}")
except Exception as e:
messagebox.showerror("错误", f"导出失败:{str(e)}")
(六)系统设置
1. 语言切换:通过`change_language`方法切换语言,改变`current_language`变量后刷新整个界面:
def change_language(self, language):
self.current_language = 'zh_CN' if language == '中文' else 'en_US'
self.refresh_interface()
messagebox.showinfo(
self.get_text('success'),
self.get_text('language_changed') if 'language_changed' in self.translations[self.current_language]
else "Language settings have been updated!"
)
2. 数据备份与恢复(功能开发中):目前这两个功能仅提示正在开发中,未来将为数据安全提供保障。
三、总结
本学生学籍管理系统功能丰富,从登录注册到学生全方位信息管理,再到毕业相关操作以及系统设置等一应俱全。其界面设计美观,交互体验友好,数据存储管理合理。尽管部分功能仍在完善,但已具备较高的实用价值,有望成为教育管理工作中的得力助手,有效提升管理效率与质量,助力教育管理数字化进程的推进。

219

被折叠的 条评论
为什么被折叠?



