【图形界面】学生宿舍信息管理系统,简单,模板框架,含完整代码

news2025/1/16 16:13:00

目录

开发一个学生宿舍管理系统

概述

开发环境

程序设计

功能展示

主菜单

添加学生信息界面

删除学生信息界面

修改学生信息界面

查询学生信息界面

5. 完整代码

6. 总结


开发一个学生宿舍管理系统

在本文中,我们将介绍如何使用Python和Tkinter库开发一个简单的学生宿舍信息管理系统。该系统包括添加、删除、修改和查询学生信息的功能,并提供了图形用户界面以便用户操作。

概述

学生宿舍管理系统是一个用于管理学生宿舍信息的应用程序。它允许用户执行各种操作,如添加新的学生信息、删除现有的学生信息、修改学生信息以及查询特定学生信息。

开发环境
  • Python编程语言
  • Tkinter图形用户界面库
程序设计

首先,我们定义了几个类来表示系统中的不同数据:

  • Student: 表示学生信息,包括学生ID、姓名、性别、年龄、院系和宿舍号。
  • Dormitory: 表示宿舍信息,包括宿舍号、容纳人数和当前人数。

然后,我们创建了一个名为StudentManagementSystem的类来实现系统的各项功能,包括添加、删除、修改和查询学生信息。该类使用Tkinter库来构建图形用户界面,使用户可以通过简单的界面与系统交互。

功能展示

主菜单

添加学生信息界面

在这个界面中,用户可以输入学生的各项信息,并点击保存按钮来添加新的学生信息。

删除学生信息界面

用户可以输入要删除的学生ID,并点击删除按钮来删除该学生的信息。

修改学生信息界面

用户可以输入要修改的学生ID,并点击查询按钮来查询该学生的信息,然后在新窗口中修改学生的信息。

查询学生信息界面

用户可以输入要查询的学生ID,并点击查询按钮来查询该学生的信息,并显示在界面上。

5. 完整代码

import tkinter as tk
from tkinter import messagebox

class Student:
    def __init__(self, id, name, gender, age, department, dormitory):
        self.id = id
        self.name = name
        self.gender = gender
        self.age = age
        self.department = department
        self.dormitory = dormitory

class Dormitory:
    def __init__(self, dormitory, capacity, current):
        self.dormitory = dormitory
        self.capacity = capacity
        self.current = current

class StudentManagementSystem:
    def __init__(self, root):
        self.root = root
        self.root.title("学生宿舍管理系统")
        
        self.create_widgets()
    
    def create_widgets(self):
        self.label_title = tk.Label(self.root, text="学生宿舍管理系统", font=("Helvetica", 20))
        self.label_title.pack(pady=10)

        self.add_button = tk.Button(self.root, text="添加学生信息", command=self.add_student)
        self.add_button.pack()

        self.delete_button = tk.Button(self.root, text="删除学生信息", command=self.delete_student)
        self.delete_button.pack()

        self.modify_button = tk.Button(self.root, text="修改学生信息", command=self.modify_student)
        self.modify_button.pack()

        self.query_button = tk.Button(self.root, text="查询学生信息", command=self.query_student)
        self.query_button.pack()

    def add_student(self):
        self.add_window = tk.Toplevel(self.root)
        self.add_window.title("添加学生信息")
        
        self.id_label = tk.Label(self.add_window, text="学生ID:")
        self.id_label.grid(row=0, column=0)
        self.id_entry = tk.Entry(self.add_window)
        self.id_entry.grid(row=0, column=1)

        self.name_label = tk.Label(self.add_window, text="姓名:")
        self.name_label.grid(row=1, column=0)
        self.name_entry = tk.Entry(self.add_window)
        self.name_entry.grid(row=1, column=1)

        self.gender_label = tk.Label(self.add_window, text="性别:")
        self.gender_label.grid(row=2, column=0)
        self.gender_entry = tk.Entry(self.add_window)
        self.gender_entry.grid(row=2, column=1)

        self.age_label = tk.Label(self.add_window, text="年龄:")
        self.age_label.grid(row=3, column=0)
        self.age_entry = tk.Entry(self.add_window)
        self.age_entry.grid(row=3, column=1)

        self.department_label = tk.Label(self.add_window, text="院系:")
        self.department_label.grid(row=4, column=0)
        self.department_entry = tk.Entry(self.add_window)
        self.department_entry.grid(row=4, column=1)

        self.dormitory_label = tk.Label(self.add_window, text="宿舍号:")
        self.dormitory_label.grid(row=5, column=0)
        self.dormitory_entry = tk.Entry(self.add_window)
        self.dormitory_entry.grid(row=5, column=1)

        self.save_button = tk.Button(self.add_window, text="保存", command=self.save_student)
        self.save_button.grid(row=6, column=0, columnspan=2)

    def save_student(self):
        id = self.id_entry.get()
        name = self.name_entry.get()
        gender = self.gender_entry.get()
        age = self.age_entry.get()
        department = self.department_entry.get()
        dormitory = self.dormitory_entry.get()

        if id and name and gender and age and department and dormitory:
            with open("students.txt", "a") as file:
                file.write(f"{id} {name} {gender} {age} {department} {dormitory}\n")
            messagebox.showinfo("提示", "学生信息已添加。")
            self.add_window.destroy()
        else:
            messagebox.showwarning("警告", "请输入完整的学生信息。")

    def delete_student(self):
        self.delete_window = tk.Toplevel(self.root)
        self.delete_window.title("删除学生信息")

        self.id_label = tk.Label(self.delete_window, text="要删除的学生ID:")
        self.id_label.pack()

        self.id_entry = tk.Entry(self.delete_window)
        self.id_entry.pack()

        self.delete_button = tk.Button(self.delete_window, text="删除", command=self.delete_student_entry)
        self.delete_button.pack()

    def delete_student_entry(self):
        id = self.id_entry.get()
        if id:
            with open("students.txt", "r") as file:
                lines = file.readlines()
            with open("students.txt", "w") as file:
                for line in lines:
                    if not line.startswith(f"{id} "):
                        file.write(line)
            messagebox.showinfo("提示", "学生信息已删除。")
            self.delete_window.destroy()
        else:
            messagebox.showwarning("警告", "请输入要删除的学生ID。")

    def modify_student(self):
        self.modify_window = tk.Toplevel(self.root)
        self.modify_window.title("修改学生信息")

        self.id_label = tk.Label(self.modify_window, text="要修改的学生ID:")
        self.id_label.pack()

        self.id_entry = tk.Entry(self.modify_window)
        self.id_entry.pack()

        self.search_button = tk.Button(self.modify_window, text="查询", command=self.search_student_for_update)
        self.search_button.pack()

    def search_student_for_update(self):
        id = self.id_entry.get()
        if id:
            with open("students.txt", "r") as file:
                for line in file:
                    student_info = line.split()
                    if student_info[0] == id:
                        self.show_update_window(student_info)
                        return
            messagebox.showwarning("警告", "未找到该学生信息。")
        else:
            messagebox.showwarning("警告", "请输入要修改的学生ID。")

    def show_update_window(self, student_info):
        self.update_window = tk.Toplevel(self.root)
        self.update_window.title("修改学生信息")

        self.name_label = tk.Label(self.update_window, text="姓名:")
        self.name_label.grid(row=0, column=0)
        self.name_entry = tk.Entry(self.update_window)
        self.name_entry.insert(0, student_info[1])  # Fill the current name
        self.name_entry.grid(row=0, column=1)

        self.gender_label = tk.Label(self.update_window, text="性别:")
        self.gender_label.grid(row=1, column=0)
        self.gender_entry = tk.Entry(self.update_window)
        self.gender_entry.insert(0, student_info[2])  # Fill the current gender
        self.gender_entry.grid(row=1, column=1)

        self.age_label = tk.Label(self.update_window, text="年龄:")
        self.age_label.grid(row=2, column=0)
        self.age_entry = tk.Entry(self.update_window)
        self.age_entry.insert(0, student_info[3])  # Fill the current age
        self.age_entry.grid(row=2, column=1)

        self.department_label = tk.Label(self.update_window, text="院系:")
        self.department_label.grid(row=3, column=0)
        self.department_entry = tk.Entry(self.update_window)
        self.department_entry.insert(0, student_info[4])  # Fill the current department
        self.department_entry.grid(row=3, column=1)

        self.dormitory_label = tk.Label(self.update_window, text="宿舍号:")
        self.dormitory_label.grid(row=4, column=0)
        self.dormitory_entry = tk.Entry(self.update_window)
        self.dormitory_entry.insert(0, student_info[5])  # Fill the current dormitory
        self.dormitory_entry.grid(row=4, column=1)

        self.save_button = tk.Button(self.update_window, text="保存", command=self.save_updated_student)
        self.save_button.grid(row=5, column=0, columnspan=2)

    def save_updated_student(self):
        id = self.id_entry.get()
        name = self.name_entry.get()
        gender = self.gender_entry.get()
        age = self.age_entry.get()
        department = self.department_entry.get()
        dormitory = self.dormitory_entry.get()

        if id and name and gender and age and department and dormitory:
            with open("students.txt", "r") as file:
                lines = file.readlines()
            with open("students.txt", "w") as file:
                for line in lines:
                    if not line.startswith(f"{id} "):
                        file.write(line)
                    else:
                        file.write(f"{id} {name} {gender} {age} {department} {dormitory}\n")
            messagebox.showinfo("提示", "学生信息已修改。")
            self.update_window.destroy()
        else:
            messagebox.showwarning("警告", "请输入完整的学生信息。")


    def search_student(self):
        id = self.id_entry.get()
        if id:
            with open("students.txt", "r") as file:
                for line in file:
                    student_info = line.split()
                    if student_info[0] == id:
                        self.show_query_result(student_info)
                        return
            messagebox.showwarning("警告", "未找到该学生信息。")
        else:
            messagebox.showwarning("警告", "请输入要查询的学生ID。")

    def show_query_result(self, student_info):
        self.query_window = tk.Toplevel(self.root)
        self.query_window.title("查询结果")

        self.id_label = tk.Label(self.query_window, text=f"学生ID: {student_info[0]}")
        self.id_label.pack()

        self.name_label = tk.Label(self.query_window, text=f"姓名: {student_info[1]}")
        self.name_label.pack()

        self.gender_label = tk.Label(self.query_window, text=f"性别: {student_info[2]}")
        self.gender_label.pack()

        self.age_label = tk.Label(self.query_window, text=f"年龄: {student_info[3]}")
        self.age_label.pack()

        self.department_label = tk.Label(self.query_window, text=f"院系: {student_info[4]}")
        self.department_label.pack()

        self.dormitory_label = tk.Label(self.query_window, text=f"宿舍号: {student_info[5]}")
        self.dormitory_label.pack()

    def query_student(self):
        self.query_window = tk.Toplevel(self.root)
        self.query_window.title("查询学生信息")

        self.id_label = tk.Label(self.query_window, text="要查询的学生ID:")
        self.id_label.pack()

        self.id_entry = tk.Entry(self.query_window)
        self.id_entry.pack()

        self.search_button = tk.Button(self.query_window, text="查询", command=self.search_student)
        self.search_button.pack()

if __name__ == "__main__":
    root = tk.Tk()
    app = StudentManagementSystem(root)
    root.mainloop()
6. 总结

通过本文的学习,我们了解了如何使用Python和Tkinter库开发一个简单的学生宿舍管理系统,并展示了系统的各项功能界面。这个系统可以作为学生信息管理的基础框架,可以根据实际需求进行扩展和定制。

希望本文对初学者理解Python和Tkinter的图形用户界面编程以及学生信息管理系统的开发有所帮助。如果您有任何问题或建议,请在评论中留言,我会尽力解答。

文章作者:命运之光

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1519144.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

P1149 [NOIP2008 提高组] 火柴棒等式

题目描述 给你 �n 根火柴棍,你可以拼出多少个形如 ���ABC 的等式?等式中的 �A、�B、�C 是用火柴棍拼出的整数(若该数非零,则最高位不能是 00&…

【MySQL】4. 表的操作

表的操作 1. 创建表 语法: CREATE TABLE table_name ( field1 datatype, field2 datatype, field3 datatype ) character set 字符集 collate 校验规则 engine 存储引擎;说明: field 表示列名 datatype 表示列的类型 character set 字符集&#xff0c…

iOS面试题锦集

1. 问:一张图片所占内存大小跟什么有关? 图片所占内存大小,与图片的宽高有关 我们平时看到的png、jpg、webp这些图片格式,其实都是图片压缩格式。通过对应的算法来优化了大小以节省网络传输与本地保存所需的资源。 但是当我们加…

Nuxt3配置本地访问链接 -- Network: use --host to expose

这种表示没有在线访问本地链接 在nuxt.config.ts里面 export default defineNuxtConfig({// 配置本地访问链接devServer: {host: 192.168.1.41,//自己电脑的Ipport: 3000,}, }) 复制到浏览器就可以访问,给别人使用必须是局域网,同一个网络

FreeRTOS学习第10篇--队列使用示例

FreeRTOS学习第10篇–队列使用示例 本文目标:FreeRTOS学习第10篇–队列使用示例 按照本文的描述,可以进行简单的使用队列。 本文实验条件:拥有C语言基础,装有编译和集成的开发环境,比如:Keil uVision5 …

独家授权!广东盈世获网易邮箱反垃圾服务的独家授权,邮件反垃圾更全面

近日,广东盈世计算机科技有限公司(以下简称“Coremail”)成功获得了网易(杭州)网络有限公司(以下简称“网易”)授予的网易邮箱反垃圾服务独家使用权。这一授权使得Coremail能够在邮件安全产品上…

创建出色用户界面的五个关键技巧,助您实现用户体验的提升!

易于理解的用户界面通常很容易阅读,它们有美丽的布局和完美的颜色组合,通过提供简单和直观的选项,告诉用户应用程序可以做什么。 因此,在创建用户界面时,(UI)当时,UI设计师往往优先…

人大金仓大小写敏感处理

人大金仓安装的时候,不管是否选择大小写敏感;查询的时候加和不加双引号,查询出来的都是小写 针对人大金仓大小写,我们实际引用全是大写的情况,解决方案如下 添加配置,将查询结果全都转成大写 1、本地打开…

FastAPI 是什么?深入解析

FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建基于 Python 的 API。它是一个开源项目,基于 Starlette 和 Pydantic 库构建而成,提供了强大的功能和高效的性能。 FastAPI 官网地址:fastapi.tiango…

npm WARN config init.license Use `--init-license` instead.

背景:近期升级本地node版本(v14.15.4 --> v18.19.1),npm -v报警 npm WARN config init.license Use --init-license instead. npm WARN config init.author.name Use --init-author-name instead. 分析: npm高版本…

使用pgadmin备份数据库

本人菜鸟, 在使用PostgreSQL数据库的时候, 经常会用到这个pgadmin的可视化工具 这个工具提供了很简单的备份和还原方法, 操作如下 备份 (1)首先鼠标右键选中你要备份的数据库,如图的 LBSYS (2)然后点击 backup (…

【SVG】前端-不依靠第三方包怎么画连线???

如何用SVG实现连线功能 在Web开发中,我们经常会遇到需要在页面上绘制图形或者实现一些图形交互的场景。SVG(Scalable Vector Graphics)作为一种用于描述二维图形的XML标记语言,在这方面提供了极大的便利。本文将以一个具体的例子…

WordPress网站启用cloudflare的CDN加速后,网站出现多重定向无法访问

这是一个使用Hostease的Linux虚拟主机的客户反馈的问题,Hostease的虚拟主机使用的也是cPanel面板,客户使用的是cPanel的softaculous安装的WordPress,但是在安装完成后,并且解析了域名之后,发现网站无法访问&#xff0c…

高校实验室科研仪器开放共享存在的问题及对策建议

随着科技的迅速发展和高校科研水平的提高,高校实验室科研仪器的开放共享已经成为推动科研进步和创新发展的重要手段。然而,在实际操作中,我们也面临着诸多问题和挑战。本文将分析高校实验室科研仪器开放共享存在的问题,并提出相应…

java复健-接口的开发及参数校验

遇到的问题以及解决方案 Q1. 开发接口的流程 A1: 明确需求阅读接口文档思路分析开发测试 Q2. 开发时用到的技术 A2: LomBok:Data,自动为我们的实体类创建构造方法,set(),get&am…

8. C++对象模型

1. 普通类对象是什么布局? struct Base {Base() default;~Base() default;void Func() {}int a;int b; };int main() {Base a;return 0; }2. 带虚函数的类对象是什么布局? struct Base {Base() default;virtual ~Base() default;void FuncA() {}v…

Uni-app跟学笔记(五):uni-ui组件库的使用、项目打包(小程序、h5、APP)

文章目录 1)uni-ui组件库的使用2)项目打包1:微信小程序打包2:h5打包3:安卓打包 本博客为 uni-app 此门课的跟学笔记,目的是便于个人复习和对知识快速索引,源码素材可在均可在视频评论区找到 1&a…

Vue2 父子组件某一属性的双向绑定

原本&#xff1a;父组件使用props传值给孩子组件初始化&#xff0c;触发事件子组件使用$emit传值给父组件&#xff0c;很麻烦后来&#xff1a;使用computed和$event例子代码&#xff1a; <template><div class"box">grandpa <el-input v-model"…

‍❄️Unity 官方免费资源大放送!森林、沙漠、北极等 350+逼真的自然纹理 Megapack等你来拿

&#x1f333;350自然纹理 Megapack&#xff0c;免费获取&#xff01;&#x1f381; 你是否热爱游戏开发&#xff0c;却被昂贵的资源库所困扰&#xff1f;你是否渴望创造出令人惊叹的自然场景&#xff0c;却被有限的纹理素材所束缚&#xff1f;如果你的答案是肯定的&#xff0c…

01- Java概述

第1章 Java概述 1.1 Java语言发展历史&#xff08;记关键点&#xff09; Java诞生于SUN&#xff08;Stanford University Network&#xff09;&#xff0c;09年SUN被Oracle&#xff08;甲骨文&#xff09;收购。 Java之父是詹姆斯.高斯林(James Gosling)。 1996年发布JDK1.…