用Python编写一个学生成绩管理系统

该文章已生成可运行项目,

 欢迎各位大佬的到来,这个系统呢,就是在上课无聊做的一个简易的学生学籍管理,做的比较简陋,有需要的朋友可以参考一下。

因为我也是刚接触这个软件不久,有些操作不熟,源代码在资源包里,大家可以自由下载,希望可以帮助到大家!

哦对,后面顺便做了一个双语言版本,中文和英文自由转换,缺点就是可能有一些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. 数据备份与恢复(功能开发中):目前这两个功能仅提示正在开发中,未来将为数据安全提供保障。

 三、总结

本学生学籍管理系统功能丰富,从登录注册到学生全方位信息管理,再到毕业相关操作以及系统设置等一应俱全。其界面设计美观,交互体验友好,数据存储管理合理。尽管部分功能仍在完善,但已具备较高的实用价值,有望成为教育管理工作中的得力助手,有效提升管理效率与质量,助力教育管理数字化进程的推进。

本文章已经生成可运行项目
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值