【课程设计】用Python开发学生信息管理系统(GUI),轻松上手!

创作不易,尊重原则。

完整源代码(功能扩展)厚台私信。

目录

一、为什么做这个案例?

二、功能需求有哪些?

三、代码过程

3.1、创建项目文件及基础配置

3.2、创建学生信息数据

3.3、增删改查(核心功能)

3.3.1、添加学生信息功能:

3.3.2、删除学生信息功能:

3.3.3、修改学生信息功能:

3.3.4、查询学生信息功能:

四、程序演示

4.1、添加学生信息:

4.2、删除学生信息:

4.3、修改学生信息:

4.4、查询学生信息:

4.5、排序学生信息:

五、写在最后



一、为什么做这个案例?

大学期间的一个python课程大作业,当时老师给给出很多的题目选择,个人感觉管理系统比较容易上手,因此选择做这个程序,现在做一个案例和大家分享交流。

二、功能需求有哪些?

  1. 开发图形用户界面(GUI)(这里用到python的tkinter库)
  2. 使用到python内置的os csv
  3. 登录功能
  4. 学生信息的增删改查功能
  5. 排序功能(按字段如:学号/姓名/年龄)
  6. 信息维护性(这里只演示“修改管理员的密码”)

三、代码过程

3.1、创建项目及基础配置

在桌面上创建了一个名为python_code的文件夹

新建一个main.py文件和users.txt文件

代码文件解释: 

main.py:主程序

users.txt:存储管理员的账号信息

在main.py文件中写入:

import tkinter as tk
from tkinter import messagebox
import os
import re

# 读取用户信息
def load_users():
    if not os.path.exists('users.txt'):
        return {}
    with open('users.txt', 'r') as file:
        lines = file.readlines()
    users = {}
    for line in lines:
        username, password = line.strip().split(':')
        users[username] = password
    return users

# 验证登录
def validate_login():
    username = entry_username.get()
    password = entry_password.get()
    users = load_users()
    
    if username in users and users[username] == password:
        messagebox.showinfo("成功", "登录成功")
        root.destroy()  # 关闭登录窗口
        student_management_page()  # 跳转到学生信息管理页面
    else:
        messagebox.showerror("错误", "用户名或密码错误")

# 登录界面
def login_page():
    global entry_username, entry_password, root
    root = tk.Tk()
    root.title("登录")
    root.geometry("300x150")

    label_username = tk.Label(root, text="用户名:")
    label_username.pack(pady=5)
    entry_username = tk.Entry(root)
    entry_username.pack(pady=5)

    label_password = tk.Label(root, text="密码:")
    label_password.pack(pady=5)
    entry_password = tk.Entry(root, show="*")
    entry_password.pack(pady=5)

    button_login = tk.Button(root, text="登录", command=validate_login)
    button_login.pack(pady=10)

    root.mainloop()

 在users.txt中写入以下内容:

admin:password

双击运行main.py文件。(需要将打开方式设置为Python-点击文件-右键-打开方式-Python)

看到这个运行界面,运行成功!

或者在项目目录下打开终端(cmd),执行命令:

python main.py

 

这种方式也一样可以运行。

3.2、创建学生信息数据

在项目目录下,创建一个students.csv文件

存储学生信息
文件格式:使用CSV文件,每行存储一个学生的记录。
字段:学号、姓名、性别、年龄、专业、班级。

接着创建一个generate_students.py文件,写入以下代码:

import csv

# 学生信息数据
students_data = [
    ["学号", "姓名", "性别", "年龄", "专业", "班级"],
    ["20210001", "张三", "男", 20, "计算机科学", "1班"],
    ["20210002", "李四", "女", 21, "电子信息工程", "2班"],
    ["20210003", "王五", "男", 19, "机械工程", "3班"],
    ["20210004", "赵六", "女", 20, "土木工程", "1班"],
    ["20210005", "孙七", "男", 22, "自动化", "2班"],
    ["20210006", "周八", "女", 21, "电气工程", "3班"],
    ["20210007", "吴九", "男", 20, "材料科学", "1班"],
    ["20210008", "郑十", "女", 19, "化学工程", "2班"],
    ["20210009", "冯十一", "男", 21, "生物医学工程", "3班"],
    ["20210010", "陈十二", "女", 20, "环境科学", "1班"],
    ["20210011", "杨十三", "男", 22, "数学", "2班"],
    ["20210012", "黄十四", "女", 21, "物理", "3班"],
    ["20210013", "张十五", "男", 20, "哲学", "1班"],
    ["20210014", "李十六", "女", 19, "历史", "2班"],
    ["20210015", "王十七", "男", 21, "文学", "3班"],
    ["20210016", "赵十八", "女", 20, "艺术", "1班"],
    ["20210017", "孙十九", "男", 22, "法学", "2班"],
    ["20210018", "周二十", "女", 21, "经济学", "3班"],
    ["20210019", "吴二十一", "男", 20, "管理学", "1班"],
    ["20210020", "郑二十二", "女", 19, "心理学", "2班"]
]

# 写入学生信息到文件
with open('students.csv', 'w', newline='', encoding='utf-8-sig') as file:
    writer = csv.writer(file)
    writer.writerows(students_data)

print("学生信息数据已生成并保存到 students.csv 文件中。")

代码解释: 

创建学生信息数据,并将其存储到students.csv文件当中。 

 演示:

比如一开始的students.csv是没有任何数据的。

双击运行generate_students.py文件。

此时打开students.csv会发现:

3.3、增删改查(核心功能)

3.3.1、添加功能

# 添加学生信息
def add_student():
    student_id = simpledialog.askstring("输入", "请输入学号:")
    if student_id is None:
        return
    name = simpledialog.askstring("输入", "请输入姓名:")
    if name is None:
        return
    gender = simpledialog.askstring("输入", "请输入性别:")
    if gender is None:
        return
    age = simpledialog.askinteger("输入", "请输入年龄:")
    if age is None:
        return
    major = simpledialog.askstring("输入", "请输入专业:")
    if major is None:
        return
    class_name = simpledialog.askstring("输入", "请输入班级:")
    if class_name is None:
        return
    new_student = [student_id, name, gender, str(age), major, class_name]
    students = load_students()
    students.append(new_student)
    save_students(students)
    messagebox.showinfo("成功", "学生信息添加成功")

3.3.2、删除功能

# 删除学生信息
def delete_student():
    student_id = simpledialog.askstring("输入", "请输入要删除的学号:")
    if student_id is None:
        return
    students = load_students()
    found = False
    for student in students[1:]:
        if student[0] == student_id:
            students.remove(student)
            found = True
            break
    if found:
        save_students(students)
        messagebox.showinfo("成功", "学生信息删除成功")
    else:
        messagebox.showerror("错误", "未找到该学号的学生信息")

3.3.3、修改功能

# 修改学生信息
def update_student():
    student_id = simpledialog.askstring("输入", "请输入要修改的学号:")
    if student_id is None:
        return
    students = load_students()
    found = False
    for student in students[1:]:
        if student[0] == student_id:
            found = True
            name = simpledialog.askstring("输入", "请输入新的姓名:", initialvalue=student[1])
            if name is None:
                return
            gender = simpledialog.askstring("输入", "请输入新的性别:", initialvalue=student[2])
            if gender is None:
                return
            age = simpledialog.askinteger("输入", "请输入新的年龄:", initialvalue=int(student[3]))
            if age is None:
                return
            major = simpledialog.askstring("输入", "请输入新的专业:", initialvalue=student[4])
            if major is None:
                return
            class_name = simpledialog.askstring("输入", "请输入新的班级:", initialvalue=student[5])
            if class_name is None:
                return
            student[1] = name
            student[2] = gender
            student[3] = str(age)
            student[4] = major
            student[5] = class_name
            break
    if found:
        save_students(students)
        messagebox.showinfo("成功", "学生信息修改成功")
    else:
        messagebox.showerror("错误", "未找到该学号的学生信息")

3.3.4、查询功能

# 查询学生信息
def query_student():
    query_type = simpledialog.askstring("输入", "请输入查询类型 (学号/姓名):")
    if query_type is None:
        return
    query_value = simpledialog.askstring("输入", f"请输入{query_type}:")
    if query_value is None:
        return
    students = load_students()
    found = False
    result = []
    for student in students[1:]:
        if (query_type == "学号" and student[0] == query_value) or (query_type == "姓名" and student[1] == query_value):
            found = True
            result.append(student)
    if found:
        result_text = "\n".join([", ".join(student) for student in result])
        messagebox.showinfo("查询结果", result_text)
    else:
        messagebox.showerror("错误", f"未找到{query_type}为 {query_value} 的学生信息")

在 main.py 中添加以下 change_password 函数:

# 修改密码
def change_password():
    current_password = simpledialog.askstring("输入", "请输入当前密码:")
    if current_password is None:
        return
    new_password = simpledialog.askstring("输入", "请输入新密码:")
    if new_password is None:
        return
    confirm_password = simpledialog.askstring("输入", "请确认新密码:")
    if confirm_password is None:
        return
    if new_password != confirm_password:
        messagebox.showerror("错误", "新密码和确认密码不一致")
        return
    users = load_users()
    if users['admin'] == current_password:
        users['admin'] = new_password
        with open('users.txt', 'w') as file:
            for username, password in users.items():
                file.write(f"{username}:{password}\n")
        messagebox.showinfo("成功", "密码修改成功")
    else:
        messagebox.showerror("错误", "当前密码错误")

四、程序演示

4.1、添加学生信息

4.2、删除学生信息

4.3、修改学生信息

4.4、查询学生信息

4.5、排序学生信息


 


五、写在最后

创作不易,期待你的点赞、收藏。

有需要完整代码的朋友,可以后台联系我~后台回复:学生信息管理系统

关注我,持续更新,了解更多实用的技术。 

今天是12月1日,24年的最后一个月,祝大家一切顺利。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十八朵郁金香

感恩前行路上有你相伴

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值