Skip to content

关于学生管理系统GUI版本的实现

约 6052 字大约 20 分钟

python

2023-03-06

利用tkinter模块实现学生管理系统GUI版本(可视化桌面程序)

关于学生管理系统GUI版本的实现

参考文献: (14条消息) 使用Python中的tkinter模块实现GUI界面的学生信息管理系统_基于tkinter的学生信息管理系统_Marshal_A的博客-CSDN博客

目录:

[TOC]

1.实现登录界面

实现目标:确认登录者是管理员还是用户

包含:标签,单行文本框,确认按钮

相关代码
实现效果

image-20230306195253516

2.实现学生管理系统的界面

1.主窗口需要实现效果图

image-20230306200347862

需要按钮:添加学生信息,删除学生信息,需改学生信息,查询学生信息,显示学生信息,退出管理系统

需要标签: !!!用标签替代单行文本框,防止直接更改文本框的内容

2.添加学生信息窗口

效果图

image-20230307145436155

需要标签:学号,姓名,专业,年龄,班级,电话

需要单行文本框

需要按钮:确认,取消

3.删除学生信息窗口

效果图

image-20230307152359974

需要标签:提示信息,学号

需要单行文本框

需要按钮:确认,取消

4.修改学生信息窗口

效果图

image-20230307233336757

需要标签

需要单行文本框

需要按钮

5.查询学生信息窗口

效果图

image-20230307235140812

需要标签

需要单行文本框

需要按钮

3.相应功能的实现

1.判断姓名,学号是否符合规定
    #用于判断是否符合要求
    # 定于一个方法,用于检查学号是否规范
    def is_ID(self,ID):
        return len(ID) == 6 and ID.isdigit()

    # 定于一个方法,用于检查年龄是否规范
    def is_Age(self,age):
        return age.isdigit() and 17 <= int(age) and int(age) <= 25

    # 定于一个方法,用于检查班级是否规范
    def is_Class(self,_class):
        return _class.isdigit() and int(_class) > 0

    # 定于一个方法,用于检查电话是否规范
    def is_Telephone(self,phone):
        return len(phone) == 11 and phone.isdigit()
2.提示信息实现
3.添加学生信息功能实现
    def student_add(self):  #用于添加学生信息
        global Info
        if not self.is_ID(self.ID.get()):
            self.Tip_Add_ID()
            return

        if not self.is_Age():
            self.Tip_Add_Age()
            return

        if not self.is_Class():
            self.Tip_Add_Class()
            return

        if not self.is_Telephone():
            self.Tip_Add_Telephone()
            return

        for i in Info:
            if i['ID'] == self.ID.get():
                self.Tip_Add_ID_Repeat()
                return

        if account == '管理员':
            Info_dict = {'ID': self.ID.get(), 'Name': self.name.get(), 'Major': self.major.get(), 'Age': self.age.get()
                , 'Class': self._class.get(), 'Telephone': self.phone.get()}
            print('添加的学生信息是:', Info_dict)
            Info.append(Info_dict)
            with open('studentData.txt','w',encoding='utf-8')as f:
                for item in Info:
                    f.write(str(item)+'\n')
                self.Tip_Add()
                self.Show_window()
                self.add_window.destroy()
        else:
            messagebox.showwarning('警告','您不是管理员,无法添加学生信息')
4.删除学生信息
    def student_del(self,get_ID):  #用于删除学生信息
        global Info
        ID = get_ID
        flag = 0
        if not self.is_ID(ID):
            self.Tip_Add_ID()
            return

        if account == '管理员':
            for i in Info:
                if i['ID'] == ID:
                    Info.remove(i)
                    flag = 1
                    break
            if flag == 1:
                for i in Info:
                    with open('studentData.txt','w',encoding='utf-8')as f:
                        f.write(str(i)+'\n')
                self.Tip_Del()
                self.Show_window()
            else:
                self.Tip_Del_ID_None()
        else:
            messagebox.showwarning('警告','您不是管理员,无法删除学生信息')
5.修改学生信息

(相当于 先删除原有的学生信息,再添加新的学生信息进去)

    def student_mod(self,get_ID):  #用于更改学生信息
        global Info
        ID = get_ID
        if not self.is_ID(ID):
            self.Tip_Add_ID()
            return

        if account == '管理员':
            for i in Info:
                if i['ID'] == ID:
                    self.student_del(ID)
                    messagebox.showinfo('提示','要修改的信息已删除,请输入修改后的信息')
                    self.Add_window()
                    break
                else:
                    self.Tip_Del_ID_None()

        else:
            messagebox.showwarning('警告','您不是管理员,无法修改学生信息')
6.查找学生信息
7.显示学生信息

4.总代码

注意事项:

在一开始数据的读取: 建立一个空列表Info = [ ],之后读取文本时 f.readlines() ,读取到的是字符串item,所以一开始需要把字符串item利用eval转换成字典,再存入列表Info中 Info.append(eval(item)) ,方便后续的使用

在后面数据的储存时:将数据保存为字典的形式 Info_dict = {.....} ,然后再依次添加到列表Info中, Info.append(Info_dict) 最后保存时,利用循环读取Info列表,再依次将内容转换为字符串储存 f.write(str(item)+'\n') ##这是为了方便读取数据时,利用f.readlines()读取数据储存到列表Info中

在一开始的打开文件发现,r只能打开已有的文件,不方便用户使用

改进,将r改为w+,w+即当文件没有的时候,自动创建文件并可读写

image-20230325113849589

image-20230325114222305