前言(写于2022年5月17日)

这篇博客是我两年前大二时写的,一直放在草稿箱里,还没写完,现在快毕业了,突然翻出来了。虽然博客没写完,但早就写好了代码,可运行的exe文件以及文档。现在上传到gitee,代码以文档等地址为:https://gitee.com/zzg-gangan/StudentManagementSystem.git

以下写于2019年12月

版本1——学生信息的写入与读取是text格式(基础版)

其中部分思想实现来源于https://www.cnblogs.com/xy-ju24/p/9212855.html(该博客中缺陷是:学生信息管理系统增删改学生信息后,无法及时查看学生的信息,即要重新运行后才能查看到改动后的学生信息)

程序主要思想:界面切换是利用界面的摧毁与重建来实现。

使用的python第三方包

  1. from tkinter import *
  2. import tkinter.font as tkFont
  3. from tkinter import ttk
  4. import tkinter as tk
  5. from tkinter import messagebox

主控类

  1. LARGE_FONT= ("Verdana", 20) #全局变量用于控制字体,字体为宋体,20号
  2.  
  3. class Base_Page():

  4. def __init__(self,master):
  5. self.root=master
  6. self.root.config()
  7. self.root.title("九江学院————干干")
  8. self.root.geometry('200x200')
  9. Main_Page(self.root)

系统的主页面

  1. class Main_Page():

  2.   def __init__(self,master):
  3. self.master=master
  4. self.master.geometry('300x600')
  5. self.Main_Page=tk.Frame(self.master)
  6. self.Main_Page.pack()
  7. self.label=Label(self.Main_Page,text="学生信息管理系统", font=LARGE_FONT,bg='black',fg='SkyBlue')
  8. self.label.pack(pady=80)
  9. ft2 = tkFont.Font(size=20) # 指定字体大小
  10.  
  11. Button(self.Main_Page, text="添加学生信息", font=ft2, width=50, height=2,
  12. fg='white', bg='gray', activebackground='black',command=self.change,activeforeground='white').pack() # 主页面中“添加学生信息”按键
  13. Button(self.Main_Page, text="删除学生信息", font=ft2, width=50, height=2,command=self.go_delete_page).pack() # 主页面中“删除学生信息”按键
  14.    Button(self.Main_Page, text="修改学生信息", font=ft2, width=50, height=2, fg='white',
  15.             bg='gray', activebackground='black',command=self.go_modifypage, activeforeground='white').pack() # 主页面中“修改学生信息”按钮
  16.      Button(self.Main_Page, text="查询学生信息", font=ft2, width=50, height=2,command=self.go_query).pack() #主页面中“查询学生信息”按钮
  17.      Button(self.Main_Page, text='退出系统', height=2, font=ft2, width=50, fg='white',
  18.             bg='gray', activebackground='black', command=self.master.destroy, activeforeground='white').pack() #主页面中”退出系统“按钮

  19.    def change(self): #摧毁主页面,去往添加学生信息页面,即主页面摧毁后,建立添加学生信息的页面
  20. self.Main_Page.destroy()
  21. Add_Stu(self.master)
  22.  
  23. def go_query(self): #摧毁主页面,去往查询学生信息页面,即主页面摧毁后,建立查询学生信息的页面
  24. self.Main_Page.destroy()
  25. Query_Stu(self.master)
  26.  
  27. def go_delete_page(self): #摧毁主页面,去往删除学生信息的页面,即主页面摧毁后,建立删除学生信息的页面
  28. self.Main_Page.destroy()
  29. Delete_Stu(self.master)
  30.  
  31. def go_modifypage(self): #摧毁主页面,去往修改学生信息的页面,即主页面摧毁后,建立修改学生信息的页面
  32. self.Main_Page.destroy()
  33. Modify_Stu(self.master)

主页页面如下图所示:

添加学生信息页面

  1. class Add_Stu():
  2.  
  3. def __init__(self,master):
  4. self.tk=tk
  5. self.master=master
  6. self.master.geometry('300x600')
  7. self.Add_Stu = tk.Frame(self.master)
  8. self.Add_Stu.pack()
  9. label = Label(self.Add_Stu, text="添加学生信息", font=LARGE_FONT)
  10. label.pack(pady=100)
  11. ft3 = tkFont.Font(size=14)
  12. ft4 = tkFont.Font(size=12)
  13.  
  14. Label(self.Add_Stu, text='学生学号:', font=ft3).pack(side=TOP)
  15. global e1
  16. e1 = StringVar()
  17. # textvariable:文本框的值,是一个StringVar()对象
  18. Entry(self.Add_Stu,width=30, textvariable=e1, font=ft3, bg='Ivory').pack(side=TOP) # 单行文本框输入控件,此处靠e1承载学生学号
  19.  
  20. Label(self.Add_Stu,text='学生姓名:', font=ft3).pack(side=TOP)
  21. global e2
  22. e2 = StringVar()
  23. Entry(self.Add_Stu,width=30, textvariable=e2, font=ft3, bg='Ivory').pack(side=TOP) # 此处靠e2承载学生姓名
  24.  
  25. Label(self.Add_Stu,text='学生成绩:', font=ft3).pack(side=TOP)
  26. global e3
  27. e3 = StringVar()
  28. Entry(self.Add_Stu,width=30, textvariable=e3, font=ft3, bg='Ivory').pack(side=TOP) # 此处靠e3承载学生成绩
  29.  
  30. Button(self.Add_Stu,text="返回首页", width=8, font=ft4,command=self.back_mainPage).pack(pady=20) # 3个功能按钮
  31. Button(self.Add_Stu, text="确定保存", width=8, font=ft4, command=self.save).pack()
  32. Button(self.Add_Stu,text="查询信息", width=8, font=ft4,command=self.go_querypage).pack(pady=20)
  33.  
  34. def back_mainPage(self):
  35. self.Add_Stu.destroy()
  36. Main_Page(self.master)
  37. def go_querypage(self):
  38. self.Add_Stu.destroy()
  39. Query_Stu(self.master)
  40. def save(self):
  41. if e1.get()=="" or e2.get()=="" or e3.get()=="":
  42. self.tk.messagebox.showwarning(title="警告", message="学生的学号、姓名、成绩不能为空!") # 保存学生信息时存在为空警告
  43. else:
  44. #此处你可以事先创建一个txt文本,内容格式为:学生学号 学生姓名 学生成绩(三者中间有两个空格)
  45. with open('student_infor.txt', 'a+') as student_infor:
  46. num = str(e1.get()) # 将e1承载的学生学号转换成字符串类型,因为txt文本的写入字符串类型
  47. name = str(e2.get()) # 将e2承载的学生姓名转换成字符串类型
  48. score = str(e3.get()) # 将e3承载的学生成绩转换成字符串类型
  49. student_infor.write(num + ' ' + name + ' ' + score + '\n') # 将三种学生信息用空格隔开,写入txt文本中

添加学生信息页面如下图所示:

如果保存学生信息时存在有的学生信息为空,则系统就会提示,如下图所示:

删除学生信息界面

  1. class Delete_Stu():
  2. def __init__(self,master):
  3. self.tk=tk
  4. self.master=master
  5. self.master.geometry('300x600')
  6. self.Delete_Stu = tk.Frame(self.master)
  7. self.Delete_Stu.pack()
  8.  
  9. label = tk.Label(self.Delete_Stu, text="删除学生信息", font=LARGE_FONT)
  10. label.pack(pady=100)
  11.  
  12. ft3 = tkFont.Font(size=14)
  13. ft4 = tkFont.Font(size=12)
  14.  
  15. Label(self.Delete_Stu, text='请输入你要删除的学生学号:', font=ft3).pack(side=TOP)
  16. global e4
  17. e4 = StringVar() # 用于承载要删除的学生学号
  18. Entry(self.Delete_Stu, width=30, textvariable=e4, font=ft3, bg='Ivory').pack(side=TOP) #输入框,用于
  19. # 输入要删除的学生学号
  20. #“返回首页”,“确定删除”,“查询信息”的三个功能按钮
  21. Button(self.Delete_Stu, text="返回首页", width=8, font=ft4, command=self.back_mainpage).pack(pady=20)
  22. Button(self.Delete_Stu, text="确定删除", width=8, font=ft4, command=self.del1).pack()
  23. Button(self.Delete_Stu, text="查询信息", width=8, font=ft4, command=self.go_querypage).pack(pady=20)
  24.  
  25. def back_mainpage(self): # 摧毁添加学生信息页面,建立首页页面
  26. self.Delete_Stu.destroy()
  27. Main_Page(self.master)
  28.  
  29. def go_querypage(self): # 摧毁添加学生信息页面,建立查询学生信息页面
  30. self.Delete_Stu.destroy()
  31. Query_Stu(self.master)
  32.  
  33. def del1(self):
  34. if e4.get()=="":
  35. self.tk.messagebox.showwarning(title="警告", message="学生的学号不能为空!") #输入的学生学号为空警告
  36. num2 = e4.get()
  37.  
  38. with open('student_infor.txt', 'r') as f:
  39.  
  40. #将文件中的信息先读出来,然后不与输入学号匹配的
  41. #学生信息被重新写入文件中,及相当删除了含有输入学号的信息,这里就存在了一个Bug了,那就是如果另一个学生
  42. # 成绩中是指定删除的学号,则该学生的学号也就会被过滤掉。所以版本二,用Excel表格写入学生信息,就可以
  43. # 解决这个问题。因此,可以看版本二了解一下哦!!!
  44.  
  45. lines = f.readlines()
  46. with open('student_infor.txt', 'w') as f_w:
  47. for line in lines:
  48. if num2 in line:
  49. continue
  50.  
  51. f_w.write(line)

删除学生信息界面如下图所示:

输入的学号为空点击,确定删除警告如下图所示:

修改学生信息页面

  1. class Modify_Stu():
  2. def __init__(self,master):
  3. self.tk=tk
  4. self.master=master
  5. self.master.geometry('300x600')
  6. self.Modify_Stu=tk.Frame(self.master)
  7. self.Modify_Stu.pack()
  8. tk.Label(self.Modify_Stu, text="修改学生信息", font=LARGE_FONT).pack(pady=100)
  9.  
  10. ft3 = tkFont.Font(size=14)
  11. ft4 = tkFont.Font(size=12)
  12.  
  13. Label(self.Modify_Stu, text='请输入你要修改的学生学号:', font=ft3).pack(side=TOP)
  14. self.e5 = StringVar() # e5承载要修改的学生学号
  15. Entry(self.Modify_Stu, width=30, textvariable=self.e5, font=ft3, bg='Ivory').pack(side=TOP)
  16.  
  17. Label(self.Modify_Stu, text='修改后的学生姓名:', font=ft3).pack(side=TOP)
  18. self.e6 = StringVar() # e6用于承载修改后的学生姓名
  19. Entry(self.Modify_Stu, width=30, textvariable=self.e6, font=ft3, bg='Ivory').pack(side=TOP)
  20.  
  21. Label(self.Modify_Stu, text='修改后的学生成绩:', font=ft3).pack(side=TOP)
  22. self.e7 = StringVar() # e7用于承载修改后的学生成绩
  23. Entry(self.Modify_Stu, width=30, textvariable=self.e7, font=ft3, bg='Ivory').pack(side=TOP)
  24.  
  25. # “确定修改”,“查询信息”,“返回首页”三个功能按钮
  26. Button(self.Modify_Stu, text="确定修改", width=8, font=ft4, command=self.modify).pack(pady=20)
  27. Button(self.Modify_Stu, text="查询信息", width=8, font=ft4, command=self.go_querypage).pack()
  28. Button(self.Modify_Stu, text="返回首页", width=8, font=ft4, command=self.back_mainpage).pack(pady=20)
  29.  
  30. def back_mainpage(self): # 摧毁修改学生信息页面,建立功能主页面
  31. self.Modify_Stu.destroy()
  32. Main_Page(self.master)
  33.  
  34. def go_querypage(self): # 摧毁修改学生信息页面,建立查询学生信息页面
  35. self.Modify_Stu.destroy()
  36. Query_Stu(self.master)
  37.  
  38. def modify(self):
  39. num3 = str(self.e5.get())
  40. name3 = str(self.e6.get())
  41. score3 = str(self.e7.get())
  42. if self.e5.get()=="" or self.e6=="" or self.e7=="":
  43. self.tk.messagebox.showwarning(title="警告",message="学生的学号、姓名或成绩不能为空!") #为空警告!
  44. else:
  45. with open('student_infor.txt', 'r') as r_w: #先读出学生信息,再将修改后的信息以及未修改的信息重新写入
  46. lines1 = r_w.readlines()
  47. with open('student_infor.txt', 'w') as rr_w:
  48. for line1 in lines1:
  49. if num3 in line1:
  50. rr_w.write(num3 + ' ' + name3 + ' ' + score3 + '\n')
  51. continue
  52. rr_w.write(line1)
  1.  

python实现学生信息管理系统——界面版的更多相关文章

  1. python 04 学生信息管理系统

    今天任务不多,做了学生信息管理系统1.0,使用字典存储学生个体信息,列表存储学生字典.注意dict定义要在循环体内,若定义成全局变量或循环体外,则旧数据会被新数据覆盖.dict属于可变类型数据,内容改 ...

  2. 1、纯python编写学生信息管理系统

    1.效果图 2.python code: class studentSys(object): ''' _init_(self) 被称为类的构造函数或初始化方法, self 代表类的实例,self 在定 ...

  3. python之学生信息管理系统

    1 #!usr/bin/python 2 #encoding=utf-8 3 4 #1. 打印学生管理系统界面 5 def printStd(): 6 print ("*"*50) ...

  4. Python基础案例练习:制作学生信息管理系统

    一.前言 学生信息管理系统,相信大家或多或少都有做过 最近看很多学生作业都是制作一个学生信息管理系统 于是,今天带大家做一个简单的学生信息管理系统 二.开发环境: 我用到的开发环境 Python 3. ...

  5. Python学生信息管理系统的开发

    # 第一题:设计一个全局变量,来保存很多个学生信息:学生(学号, 姓名,年龄):思考要用怎样的结构来保存:# 第二题:在第一题基础上,完成:让用户输入一个新的学生信息(学号,姓名,年龄):你将其保存在 ...

  6. 【python免费代码】设计一个简单的学生信息管理系统

    文章目录 前言 一.理解 二.部分截图展示 三.代码 四.总结 前言 设计一个简单的学生信息管理系统,实现以下功能(bug) : 录入学生信息,信息以文件方式存储 以学生学号或者学生姓名为条件查询该学 ...

  7. 【Python3.6+Django2.0+Xadmin2.0系列教程之二】学生信息管理系统(入门篇)

    上一篇我们已经创建好了一个Xadmin的基础项目,现在我们将在此基础上构建一个同样很基础的学生信息管理系统. 一.创建模型 模型是表示我们的数据库表或集合类,并且其中所述类的每个属性是表或集合的字段, ...

  8. python3 简陋的学生信息管理系统

    # 编写一个“学生信息管理系统”# 输入序号:1. 输入学生信息,学生信息包括:id,name,age,gender(用什么数据类型保存?)# 2. 查询:输入学生姓名和id,显示学生个人信息# 3. ...

  9. 基于数组或链表的学生信息管理系统(小学期C语言程序实训)

    1.基于数组的学生信息管理系统 实验内容: 编写并调试程序,实现学校各专业班级学生信息的管理.定义学生信息的结构体类型,包括:学号.姓名.专业.班级.3门成绩. 实验要求: (1) main函数:以菜 ...

  10. 基于数据库MySQL的简易学生信息管理系统

    通过这几天学习Mysql数据库,对其也有了基本的了解,为了加深印象,于是就写了一个最简易的学生信息管理系统. 一:基本要求 1.通过已知用户名和密码进行登录: 2.可以显示菜单: 3.可以随时插入学生 ...

随机推荐

  1. web服务器应答状态代码(status)及其含义

    Web服务器响应浏览器或其他客户程序的请求时,其应答一般由以下几个部分组成:一个状态行,几个应答 头,一个空行,内容文档.下面是一个最简单的应答   : 状态行包含HTTP版本.状态代码.与状态代码对 ...

  2. cnblogs.com/linycat

    核心技术 Java MySQL SSM SpringBoot MyBatisPlus Redis RabbitMQ Git Google ChatGPT 分布式架构 分布式会话 单点登录 分布式锁 读 ...

  3. KingbaseES V8R3集群维护案例之---pcp_node_refresh应用

    案例说明: 在一次KingbaseES V8R3集群切换分析中,运维人员执行了pcp_node_refresh,导致集群发生了failover的切换.此文档对pcp_node_refresh工具做了应 ...

  4. 【服务器数据恢复】ZFS文件系统下ZPOOL下线的数据恢复案例

    服务器数据恢复环境:SUN ZFS系列某型号存储阵列:40块磁盘组建的存储池(其中4块磁盘用作全局热备盘),池内划分出若干空间映射到服务器使用:服务器使用Windows操作系统. 服务器故障:服务器在 ...

  5. 本地部署一套k8s集群

    我这里准备三台本地vmware虚拟机,版本号centos7.9,一台master节点,一台node1,一台node2 kubeadm方式部署.Kubeadm 是一个 K8s 部署工具,提供 kubea ...

  6. 【git】2.1 获取git仓库

    资料来源 (1) https://git-scm.com/book/zh/v2/Git-%E5%9F%BA%E7%A1%80-%E8%8E%B7%E5%8F%96-Git-%E4%BB%93%E5%B ...

  7. dev随笔记录

    gridcontrolbandedGridviewPrintHeader = false(不显示列头)#region 勾选框全选或反选 List<string> islockList = ...

  8. 使用myBadboy(python自主开发工具)启动谷歌浏览器并自动录制jmeter脚本

    一.源代码下载 https://gitee.com/rmtic/mybadboy 说明:因现有的录制方法有不能定制等不足之处,所以自力更生,自动生成对应jmeter脚本,减少维护成本 二.操作说明 1 ...

  9. 全链路压测SOP

    压测模型构建:人工 线上(大促)流量数据 (数据脱敏) 日常流量数据 业务方新的特性产生的变更数据 友商做过的事情 压测模型构建:自动 流程包括:录制-清洗-回放 (目前能做好的公司非常少) 压测标准 ...

  10. 将freeswitch加入CentOS7的systemctl

    cd /usr/local/src/freeswitch/build cp freeswitch.service /usr/lib/systemd/system/ cp freeswitch.sysc ...