关于“学生信息管理系统”的基本思路和详细过程,请看V1.0版本:

Python实现学生信息管理系统V1.0_︶ㄣ释然的博客-CSDN博客本文是关于学生信息管理系统的简易版以及具体内容具体思路的详细讲解,简单易理解、纯逻辑实现、没有复杂的第三方库,适合新手小白练手https://blog.csdn.net/qq_60735796/article/details/125648838

关于“学生信息管理系统”的非GUI进阶版本,请看V2.0版本:

Python实现学生信息管理系统V2.0(读写文件操作)_︶ㄣ释然的博客-CSDN博客本文是关于学生信息管理系统的“进阶”,引入了文件句柄操作txt文件(读取和写入学生信息)https://blog.csdn.net/qq_60735796/article/details/125649281下面是GUI界面的V3.0版本,同时包含学生信息的写入文件。

先给大家展示的是GUI可视化的大致实现思路

本程序的GUI界面可视化是使用了python的tkinter库(下面称thinter为tk)

①下面介绍如何初始化GUI界面

界面主要是使用了tk.label 和 tk.entry(代码即注释)

# 关于gui的代码, 用方法封装比较困难,
#   此处利用if __name__ == '__main__' , 方便代码折叠, ”阅读”全局思路
if __name__ == '__main__':# 以下代码全部为gui界面的初始化# 第1步,实例化对象,建立窗口windowwindow = tk.Tk()# 第2步,给窗口的可视化起名字window.title('学生信息管理系统 V6.1')  # 学生信息管理系统6 - 1# 第3步,设定窗口的大小(长 * 宽)window.geometry('500x650')# tk.StringVar()用于接收用户输入result = tk.StringVar()result.set(" ")# ①关于姓名的 label 和 entrytextName = tk.StringVar()textName.set("")labelLine1 = tk.Label(window, text="姓     名:", font=('Arial', 15), width=10).place(x=75, y=50, anchor='nw')entryLine1 = tk.Entry(window, show=None, font=('宋体', 15), textvariable=textName, width=20)entryLine1.place(x=190, y=50, anchor='nw')  # 显示成明文形式# ②关于性别的 label 和 entrytextSex = tk.StringVar()textSex.set("")labelLine2 = tk.Label(window, text="性     别:", font=('Arial', 15), width=10)labelLine2.place(x=75, y=100, anchor='nw')entryLine2 = tk.Entry(window, show=None, font=('Arial', 15), textvariable=textSex, width=18)entryLine2.place(x=190, y=100, anchor='nw')# ③关于电话的 label 和 entrytextPhone = tk.StringVar()textPhone.set("")labelLine3 = tk.Label(window, text="电     话:", font=('Arial', 15), width=10).place(x=75, y=150, anchor='nw')entryLine3 = tk.Entry(window, show=None, font=('Arial', 15), textvariable=textPhone, width=18)entryLine3.place(x=190, y=150, anchor='nw')# 关于"添加"组件,此处绑定函数addStudentsMessage()用于添加学生信息button1_add = tk.Button(window, text='添   加', bg='silver', font=('Arial', 12), command=addStudentsMessage, width=8)button1_add.place(x=40, y=220, anchor='nw')# 关于"删除"组件,此处绑定函数deleteMessage()用于删除学生信息button2_delete = tk.Button(window, text='删   除', bg='silver', font=('Arial', 12), command=deleteMessage, width=8)button2_delete.place(x=150, y=220, anchor='nw')# 关于"修改"组件,此处绑定函数change()用于修改学生信息button3_change = tk.Button(window, text='修   改', bg='silver', font=('Arial', 12), command=change, width=8)button3_change.place(x=260, y=220, anchor='nw')# 关于"显示"组件,此处绑定函数show()用于显示学生信息button4_show = tk.Button(window, text='显   示', bg='silver', font=('Arial', 12), command=show, width=8)button4_show.place(x=370, y=220, anchor='nw')# 下边两行代码是在gui界面显示我的学号和姓名labelLine_Name = tk.Label(window, text="许梓璘", font=('宋体', 13), width=10).place(x=130, y=260, anchor='nw')labelLine_myID = tk.Label(window, text="2109059342", font=('宋体', 13), width=10).place(x=250, y=260, anchor='nw')show_result = tk.Label(window, bg="white", fg="black", font=("宋体", 12), bd='0', anchor='nw', textvariable=result)show_result.place(x="25", y="300", width="450", height="300")window.mainloop()

②实现可视化之后,原来V1.0和V2.0版本输出(print)的提示信息和获取用户输入(input),不再适用,此时要采用tk.StringVar().set()设置GUI界面的文本框展示信息以及tk.StringVar().get()获取用户在GUI界面输入的文本内容

(注意此处获取到的文本内容,均为StringVar类型而并非String,这是不可变数据类型),其余实现思路均类似于V2.0版本(此处以“修改学生信息”功能为例)

# 3、修改学生信息
def change():if LIST is None:result.set("没有信息,无法修改")return Noneif len(LIST) == 0:result.set("没有信息,无法修改")return Noneif len(LIST) != 0:inputName = textName.get()for i in range(0, len(LIST)):if LIST[i]["name"] == inputName:LIST[i]["sex"] = textSex.get()LIST[i]["phone"] = textSex.get()writeTxt_wMode(LIST)result.set("修改成功")delete_Gui_StudentMessage()return

③展示GUI界面实现结果


最后,附上完整代码,其中附有详细注释:

# -*- coding: utf-8 -*-
# @Author:︶ㄣ释然
# @Time: 2022/7/6 22:08import tkinter as tk# 定义一个全局变量接收学生信息并进行更新
LIST = []# 定义一个方法用于使用w模式写入文件:传入已经存好变更好信息的列表,然后遍历写入txt文档
def writeTxt_wMode(studentList):#     w:只写入模式,文件不存在则建立,将文件里边的内容先删除再写入with open("test.txt", "w", encoding="utf-8") as f:for i in range(0, len(studentList)):DICT = studentList[i]if i == len(studentList) - 1:f.write("{0}\t{1}\t{2}".format(DICT["name"], DICT["sex"], DICT["phone"]))else:f.write("{0}\t{1}\t{2}\n".format(DICT["name"], DICT["sex"], DICT["phone"]))# 定义一个方法用于读取文件:
def readTxt() -> list:emptyList1 = []emptyList2 = []# 打开同目录下的txt文件f = open("./test.txt", 'r', encoding='UTF-8')# 把txt文件中的每一行学生信息,存储为新列表emptyList1的元素,for i in f:a = str(i)b = a.replace('\n', '')emptyList1.append(b.split("\t"))# 依次将emptyList的三种学生信息字典,存入列表while len(emptyList2) < len(emptyList1):for j in range(0, len(emptyList1)):name = emptyList1[j][0]sex = emptyList1[j][1]phone = emptyList1[j][2]Dict = {"name": name, "sex": sex, "phone": phone}# 把该字典作为emptyList2的一个元素,依次存入。emptyList2.append(Dict)f.close()# 最后结束方法,返回存储信息完成的列表return emptyList2# 定义一个方法,检查输入的电话号码是否符合规范,返回布尔值
def checkPhoneNumber_Boolean(phone):if phone.isdigit():return Trueelse:result.set("电话号码输入不是纯数字")return False# 定义一个方法,去除字符串左右两端的空格,并返回处理之后的字符串
def trim(strings):# 获取从偏移为0的字符一直到偏移为1的字符串,不包括偏移为1的字符串#     (该功能用于去除字符串左边的空格)while strings[:1] == ' ':strings = strings[1:]# 获取从偏移为-1的字符一直到偏移为最后一位的字符串,不包括偏移为最后一位的字符串#     (该功能用于去除字符串右边的空格)while strings[-1:] == ' ':strings = strings[:-1]# 左右两端空格去除完成,返回stringsreturn strings# 定义方法查找同名
def checkTheSameName(enterName):flagList = []  # 存的是名字的索引List = []returnList = []date = 1# 开始遍历查找for i in range(0, len(LIST)):if LIST[i]["name"] == enterName:# 把找到的名字对应的索引,添加进列表flagList.append(int(i))if len(flagList) == 1:# 说明信息中只存在一个这样的名字return date  # 返回1表示不重名if len(flagList) > 1:for i in flagList:List.append(LIST[i])# 此时,List的长度等于flagListreturnList.append(List)returnList.append(flagList)return returnList  # 第一个元素是列表,第二个元素是存储重复名字的索引的 列表# 定义方法显示所有重复的学生信息
def show_ofTheSameName(list_ofTheSameName):# 定义一个字符串用于存储想要输出显示的内容str_out = ""str_out += "出现同名,同名学生信息显示如下:\n"# 打印头部标题 并进行格式化str_out += ("{:^9}".format("学生序号") +"{:^9}".format("学生姓名") +"{:^9}".format("学生性别") +"{:^11}".format("电话号码") +"\n")for i in range(0, len(list_ofTheSameName)):# 格式化字符串str_out += ("{:<11}".format(i + 1, chr(12288)) +"{:<11}".format(list_ofTheSameName[i].get("name"), chr(12288)) +"{:^9}".format(list_ofTheSameName[i].get("sex"), chr(12288)) +"{:>15}".format(list_ofTheSameName[i].get("phone"), chr(12288)) +"\n")str_out += "\n请在上方输入详细学生信息,进行精准删除"result.set(str_out)# 定义方法清除gui界面的三个学生信息
def delete_Gui_StudentMessage():textName.set("")textSex.set("")textPhone.set("")# 1、添加学生信息
def addStudentsMessage():# 在gui界面输入的学生姓名,使用get()方法,获取entry中输入的内容#    并且用name接收name = textName.get()# 判断是否为空,并在gui界面进行提示if not name:result.set("学生姓名不能为空")return# 调用自定义的方法,去除字符串两端的空格再进行比较,如果去除空格之后为空,则说明键入的字符串只有空格if trim(name) == "":result.set("学生姓名不能为空")return# 判断性别输入是否正确#   在gui界面输入的学生性别,使用get()方法,获取entry中输入的内容#      并且用sex接收sex = textSex.get()if sex == "F" or sex == "M":passelse:# 如果输入的性别不符合规范,则在gui界面进行提示result.set("性别输入格式有误")return# 判断电话输入是否正确#   在gui界面输入的学生电话号码,使用get()方法,获取entry中输入的内容#      并且用phone接收phone = textPhone.get()# 调用自定义的检查方法,返回布尔类型,如果符合要求,则返回TrueresultBoolean = checkPhoneNumber_Boolean(phone)if resultBoolean:passelse:returnDict = {"name": name, "sex": sex, "phone": phone}LIST.append(Dict)result.set("学生已添加")# 调用自定义方法清除gui界面的学生信息delete_Gui_StudentMessage()writeTxt_wMode(LIST)return# 2、删除学生信息
def deleteMessage() -> list:# 定义信号位flag = TrueenterName = textName.get()for i in range(0, len(LIST)):if LIST[i]["name"] == enterName:flag = Falsebreakif flag:result.set("学生不存在")# 学生不存在则没有必要查找是否同名return LIST# 开始遍历查找accept = checkTheSameName(enterName)  # 接收查找同名方法的返回值if accept == 1:for i in range(0, len(LIST)):if LIST[i]["name"] == enterName:del LIST[i]result.set("删除成功")writeTxt_wMode(LIST)delete_Gui_StudentMessage()# 删除成功直接返回,结束该方法returnelse:# 此时出现同名,accept[0]和accept[1]都是列表对象# accept[0]存储的是同名学生信息show_ofTheSameName(accept[0])for i in range(0, len(LIST)):if LIST[i]["name"] == textName.get():if LIST[i]["sex"] == textSex.get():if LIST[i]["phone"] == textPhone.get():del LIST[i]result.set("删除成功")writeTxt_wMode(LIST)delete_Gui_StudentMessage()return# 3、修改学生信息
def change():if LIST is None:result.set("没有信息,无法修改")return Noneif len(LIST) == 0:result.set("没有信息,无法修改")return Noneif len(LIST) != 0:inputName = textName.get()for i in range(0, len(LIST)):if LIST[i]["name"] == inputName:LIST[i]["sex"] = textSex.get()LIST[i]["phone"] = textSex.get()writeTxt_wMode(LIST)result.set("修改成功")delete_Gui_StudentMessage()return# 4、显示所有学生信息
def show():# 定义一个字符串用于存储想要输出显示的内容str_out = ""if LIST is None:result.set("无学生信息")returnif len(LIST) == 0:result.set("无学生信息")returnif len(LIST) != 0:str_out += "学生信息如下:\n"# 打印头部标题 并进行格式化str_out += ("{:^9}".format("学生序号") +"{:^9}".format("学生姓名") +"{:^9}".format("学生性别") +"{:^11}".format("电话号码") +"\n")for i in range(0, len(LIST)):# 格式化字符串str_out += ("{:<11}".format(i + 1, chr(12288)) +"{:<11}".format(LIST[i].get("name"), chr(12288)) +"{:^9}".format(LIST[i].get("sex"), chr(12288)) +"{:>15}".format(LIST[i].get("phone"), chr(12288)) +"\n")# 在gui界面更新显示最新的字符串strresult.set(str_out)# 把文件里边的学生信息添加到LIST1里边,如果发现文件里边的学生信息为空,则继续执行后面的程序
try:for i in readTxt():LIST.append(i)
except:pass# 关于gui的代码, 用方法封装比较困难,
#   此处利用if __name__ == '__main__' , 方便代码折叠, ”阅读”全局思路
if __name__ == '__main__':# 以下代码全部为gui界面的初始化# 第1步,实例化对象,建立窗口windowwindow = tk.Tk()# 第2步,给窗口的可视化起名字window.title('学生信息管理系统 V3.0')  # 学生信息管理系统6 - 1# 第3步,设定窗口的大小(长 * 宽)window.geometry('500x650')# tk.StringVar()用于接收用户输入result = tk.StringVar()result.set(" ")# ①关于姓名的 label 和 entrytextName = tk.StringVar()textName.set("")labelLine1 = tk.Label(window, text="姓     名:", font=('Arial', 15), width=10).place(x=75, y=50, anchor='nw')entryLine1 = tk.Entry(window, show=None, font=('宋体', 15), textvariable=textName, width=20)entryLine1.place(x=190, y=50, anchor='nw')  # 显示成明文形式# ②关于性别的 label 和 entrytextSex = tk.StringVar()textSex.set("")labelLine2 = tk.Label(window, text="性     别:", font=('Arial', 15), width=10)labelLine2.place(x=75, y=100, anchor='nw')entryLine2 = tk.Entry(window, show=None, font=('Arial', 15), textvariable=textSex, width=18)entryLine2.place(x=190, y=100, anchor='nw')# ③关于电话的 label 和 entrytextPhone = tk.StringVar()textPhone.set("")labelLine3 = tk.Label(window, text="电     话:", font=('Arial', 15), width=10).place(x=75, y=150, anchor='nw')entryLine3 = tk.Entry(window, show=None, font=('Arial', 15), textvariable=textPhone, width=18)entryLine3.place(x=190, y=150, anchor='nw')# 关于"添加"组件,此处绑定函数addStudentsMessage()用于添加学生信息button1_add = tk.Button(window, text='添   加', bg='silver', font=('Arial', 12), command=addStudentsMessage, width=8)button1_add.place(x=40, y=220, anchor='nw')# 关于"删除"组件,此处绑定函数deleteMessage()用于删除学生信息button2_delete = tk.Button(window, text='删   除', bg='silver', font=('Arial', 12), command=deleteMessage, width=8)button2_delete.place(x=150, y=220, anchor='nw')# 关于"修改"组件,此处绑定函数change()用于修改学生信息button3_change = tk.Button(window, text='修   改', bg='silver', font=('Arial', 12), command=change, width=8)button3_change.place(x=260, y=220, anchor='nw')# 关于"显示"组件,此处绑定函数show()用于显示学生信息button4_show = tk.Button(window, text='显   示', bg='silver', font=('Arial', 12), command=show, width=8)button4_show.place(x=370, y=220, anchor='nw')# 下边两行代码是在gui界面显示我的作者信息labelLine_Name = tk.Label(window, text="@Author:", font=('宋体', 13), width=10).place(x=130, y=260, anchor='nw')labelLine_myID = tk.Label(window, text="︶ㄣ释然", font=('宋体', 13), width=10).place(x=250, y=260, anchor='nw')show_result = tk.Label(window, bg="white", fg="black", font=("宋体", 12), bd='0', anchor='nw', textvariable=result)show_result.place(x="25", y="300", width="450", height="300")window.mainloop()

Python实现学生信息管理系统V3.0(GUI界面)相关推荐

  1. python的gui界面文件管理_【Python】学生信息管理系统_开发(GUI界面)

    学生信息管理系统的开发 模块:  1. 系统登录界面   -->   logingui.py 2. 系统主界面     -->    maingui.py 3. 学生明细界面  --> ...

  2. python学生信息管理系统1.0

    目录 具体需求:实现一个学生信息管理系统 一.数据结构的设计: 二.菜单界面及按钮的设置: 三.各个模块的具体实现 1.定义一个字典,用于存放学生信息 2.查询学生信息模块: 3.添加学生信息模块: ...

  3. 教你如何运用python实现学生信息管理系统

    这篇文章主要为大家详细介绍了使用python实现学生信息管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 本文实例为大家分享了python实现学生信息管理系统的具 ...

  4. python批量录入学生信息_利用Python实现学生信息管理系统的完整实例

    项目要求: 读完题目,首先我们要确定程序思路 我们要全部通过类去实现 也就是 我们要实现管理员.学生.讲师.课程.教师五个类 管理员类 class Administration(object): de ...

  5. 赶紧进来看看--用C语言实现学生信息管理系统(1.0静态版)

    本文介绍了用C语言实现学生信息管理系统设计,主要包括对学生信息增删查改.分类统计.排序等功能,文章最后有全部源码展示- C语言实现学生信息管理系统--1.0静态版 一.学生信息管理系统介绍 二.实现学 ...

  6. 赶紧进来看看---C语言实现学生信息管理系统(3.0文件存储版)

    本文主要介绍了将学生信息管理系统改造为文件存储版本- 主要涉及文件操作函数–将学生信息导入文件和从文件读取学生信息到程序中,从而达到数据持久化的效果 文章最后有源码展示 学生信息管理系统1.0静态版- ...

  7. python学生名片系统_基于python的学生信息管理系统!听说好多人的作业都是这个...

    完整代码 import pymysqlindex=''' +---------------------+ 首页 欢迎来到学生信息管理系统 1.登陆 2.注册 3.quit(按任意键退出) +----- ...

  8. 学生信息管理系统V1.0

    需求: 将学生信息存储起来并能进行相关的增删改查 思路: 将学生信息存放在字典中,然后在将所有学生信息存放到列表中,通过对列表进行操作来达到对学生信息的增删改查等操作 说明: 此版本只是一个简单的列表 ...

  9. 学生信息管理系统V2.0

    需求 将学生信息存储起来(数据能多次使用)并能进行相关的增删改查 思路 将学生信息存放在字典中,然后在将所有学生信息存放到文件中,通过对文件进行操作来达到对学生信息的增删改查等操作 说明 这个版本只是 ...

最新文章

  1. Ubuntu管理开机自启动程序
  2. [转载]安装openssl,windows版
  3. python发明者叫什么-python是怎么被发明的
  4. vc 时间字符串转时间戳_Instant(时间戳)
  5. 树莓派开启samba服务
  6. ubuntu 下 apache2 查看 已加载的模块 命令
  7. 想自学HCIE,有什么好的书籍推荐吗?
  8. 计算机算法设计与分析(1-6章 复习笔记)
  9. 点击图片放大功能 jquery
  10. 史上最全的程序员常用英语词汇 珍藏版
  11. 甲乙丙丁四个人去商店每人买了一台计算机,2016国考行测备考:巧用矛盾速解题...
  12. 创建AWS个人账户享用一年免费套餐
  13. android功能机,诺基亚正式发布了4款安卓智能手机和一款能上网的功能机
  14. 将数字0-9转为中文大写数字
  15. 南昌师范学院同学会05级计算机,返校感言|故事初始,是回归,回到南昌师范学院的TA们,说了这些……...
  16. sql练习题归纳总结中(2)
  17. gbase 8a mysql_Gbase8a Reader
  18. 【数分书单】分析思维《一本小小的蓝色逻辑书》第五章小结
  19. 4Rs营销理论(The Marketing Theory of 4Rs)
  20. 电磁兼容(EMC)设计如何融入产品研发流程~系统流程法

热门文章

  1. 京东面试(日常实习生)
  2. 法国Pleiades高分卫星/遥感影像/卫星影像/高分二号影像
  3. TiDB x CAPCOM | 为在线游戏提供灵活、可靠、可扩展的数据库服务
  4. 导出多个表格到EXCEL或者ET的JavaScript代码
  5. 常用的法律检索类网站
  6. 走了索引为啥还像蜗牛一样?
  7. Android弹幕功能实现,模仿斗鱼直播的弹幕效果,跪了
  8. 共享奢侈品平台潜力大 但真正要规模化赚钱还远着呢!
  9. 大逃杀最多100人服务器,疑《使命召唤15》大逃杀模式截图曝光 人数不到100人
  10. 详细讲解:零知识证明 之 zk-SNARK 开篇