2022-4-5 08:48:42 [显示全部楼层]
1530浏览
查看: 1530|回复: 18

[教程] 用python制作成绩管理程序

[复制链接]
【创意起源】
班级年级在每次考试后都会记录成绩,现在双减了。年级考试成绩每次不允许公布,但是为了掌握自己在班级的学习的情况,以及为了老师管理成绩方便,我用python制作了这个成绩管理程序,虽然这个程序有些简单但是也花费了我很长时间。
图片1.png 图片2.png 图片3.png 图片4.png 图片5.png
【使用的库】
本程序中使用了tkinteros 库,其中【tkinter】是Python 的标准 GUI库。Python使用Tkinter可以快速的创建GUI应用程序。由于Tkinter是内置到python的安装包中、只要安装好 Python之后就能 import Tkinter ,本程序中就是使用其创建简单的图形界面。os】是与操作系统相关的标准库。如:文件,目录,执行系统命令等。我们的程序中使用它来在C盘下建立文件夹及数据文件。
【编程思路】
本程序主要由主界面、录入、删除、查看、修改界面构成,具体功能入下图6所示。
图片6.png
【配置编程环境】
打开Mind+软件,切换到Mind+软件的 Python 模式,Python 模式如下图7
图片7.png
切换到 Python 模式后,我们点击右侧文件目录,在“电脑中的文件” 中添加文件。点击位置如下图8数字序列①“添加本地文件夹”,我们在自己设定的路径下新建“原代码”文件夹用来存放 Python 程序和编程所需的素材。选中该文件夹后点击确定,建立一个python程序的编程环境。
图片8.png
之后,我们点击新建文件,即可在当前文件夹下创建 Python 程序 。我们这里创建了三个python程序,其名称为main.py(主程序界面),add.py(录入模块),chat.py(查看模块),dele.py(删除模块),modify.py(修改模块),empty.py(清空模块),leading.py(数据导入)如图9所示
图片9.png
【制作主界面】
实际上本次程序的图形界面主要是使用Tkinter库,而Tkinter程序GUI只需做三个步骤
第一步导入库:      from tkinter import *
第二步创建实体:    root = Tk()        
第三步创建事件循环:root.mainloop() # create an eventloop
在主界面上主要涉及到的控件是标签和按钮,我们使用标签控件制作了一个标题,使用5个按钮作为打开其它窗体的交互开关。标签的呢比较简单就是显示文本信息,Button 控件实现程序与用户交互。通过用户点击按钮的行为来执行回调函数,是 Button 控件的主要作用。首先自定义一个函数或者方法,然后将函数与按钮关联起来,最后,当用户按下这个按钮时,Tkinter 就会自动调用相关函数。按钮通过command参数回调函数。
使用标签控件来设置一个标题:
title = tkinter.Label(window, text='学生成绩管理系统', font = ('黑体', 40))
使用按钮控件来作为交互开关:
quit = tkinter.Button(window, text='退出, command=window.quit, width = 20, height = 1, font = ('宋体', 20))

主程序如下所示:
  1. import tkinter
  2. import os
  3. from add import *
  4. from dele import *
  5. from chat import *
  6. from modify import *
  7. #创建文件夹
  8. try:
  9.     os.makedirs('C:/Data')
  10. except:
  11.     pass
  12. #创建窗体设置基本属性
  13. window = tkinter.Tk()
  14. window.geometry("800x450")
  15. window.title("学生成绩管理系统")
  16. window.resizable(width=False, height=False)
  17. #标题
  18. title = tkinter.Label(window, text='学生成绩管理系统', font = ('黑体', 40))
  19. #按钮
  20. quit = tkinter.Button(window, text='退出, command=window.quit, width = 20, height = 1, font = ('宋体', 20))
  21. add = tkinter.Button(window, text='录入', command=add, width = 8, height = 1, font = ('宋体', 20))
  22. dele = tkinter.Button(window, text='删除', command=dele, width = 8, height = 1, font = ('宋体', 20))
  23. chat = tkinter.Button(window, text='查看', command=chat, width = 8, height = 1, font = ('宋体', 20))
  24. modify = tkinter.Button(window, text='修改', command=modify, width = 8, height = 1, font = ('宋体', 20))
  25. #标题按钮的位置
  26. title.place(x = 160, y = 40)
  27. quit.place(x=250, y=360)
  28. add.place(x=150, y = 260)
  29. dele.place(x = 500, y = 260)
  30. chat.place(x = 150, y = 160)
  31. modify.place(x = 500, y = 160)
  32. window.mainloop()
复制代码
【制作录入界面】
录入窗体上我们使用了标签、按钮、文本框,其主要作用是在文本框中输入学生基本信息(学号、姓名)及语数外三课成绩,程序对应在c:\data目录下新建5TXT文档用于存储上述基本信息。程序中是通过文本框获取输入信息通过add_content()函数将其写入到对应的文本文件中。
使用文本框控件创建一个输入窗体
idEntry = tkinter.Entry(addWindow, width=20)
输入界面程序如下
  1. import tkinter
  2. import tkinter.messagebox
  3. from leading import leading_in_content
  4. def add():
  5.     #创建窗体设置
  6.     addWindow = tkinter.Tk()
  7.     addWindow.title("添加界面")
  8.     addWindow.geometry("600x400")
  9.     addWindow.resizable(width=False, height=False)
  10.     #标签控件设置
  11.     idLabel = tkinter.Label(addWindow, text='学号', font=('宋体', 20))
  12.     nameLabel = tkinter.Label(addWindow, text = '姓名', font=('宋体',20))
  13.     achievementCLabel = tkinter.Label(addWindow, text='语文成绩', font=('宋体', 20))
  14.     achievementMLabel = tkinter.Label(addWindow, text='数学成绩', font=('宋体', 20))
  15.     achievementELabel = tkinter.Label(addWindow, text='英语成绩', font=('宋体', 20))   
  16. #文本框控件设置
  17. idEntry = tkinter.Entry(addWindow, width=20)
  18.     nameEntry = tkinter.Entry(addWindow,width = 20)
  19.     achievementCEntry = tkinter.Entry(addWindow, width=20)
  20.     achievementMEntry = tkinter.Entry(addWindow, width=20)
  21.     achievementEEntry = tkinter.Entry(addWindow, width=20)
  22.    
  23.     #添加记录
  24.     def add_content():
  25.         if nameEntry.get() != '' and achievementCEntry.get() != '' and achievementMEntry.get() != '' and achievementEEntry.get()  != '' and idEntry.get() != '':
  26.             #学号
  27.             data = open('C:/Data/Id.txt', "a", encoding="utf-8")
  28.             data.write(idEntry.get() + ',')
  29.             data.close()
  30.             #姓名
  31.             data = open('C:/Data/Name.txt', "a", encoding="utf-8")
  32.             data.write(nameEntry.get() + ',')
  33.             data.close()
  34.             #语文
  35.             data = open('C:/Data/AchievementC.txt', "a", encoding="utf-8")
  36.             data.write(achievementCEntry.get() + ',')
  37.             data.close()
  38.             #数学
  39.             data = open('C:/Data/AchievementM.txt', "a", encoding="utf-8")
  40.             data.write(achievementMEntry.get() + ',')
  41.             data.close()
  42.             #外语
  43.             data = open('C:/Data/AchievementE.txt', "a", encoding="utf-8")
  44.             data.write(achievementEEntry.get() + ',')
  45.             data.close()
  46.            
  47.             tkinter.messagebox.showinfo("信息","登记成功!")
  48.         else:
  49.             tkinter.messagebox.showerror("错误:","文本不能为空!")
  50.     #销毁窗体函数
  51.     def close():
  52.         addWindow.destroy()
  53.     #按钮控件设置
  54.     sure = tkinter.Button(addWindow,text='登记',command=add_content,width = 10, height = 1,font = ('宋体', 20))
  55.     back = tkinter.Button(addWindow,text='返回',command=close,width = 10, height = 1,font = ('宋体', 20))
  56.     #标签控件位置
  57.     idLabel.place(x = 100, y = 50)
  58.     nameLabel.place(x = 100, y = 90)
  59.     achievementCLabel.place(x = 100, y = 130)
  60.     achievementMLabel.place(x = 100, y = 170)
  61.     achievementELabel.place(x = 100, y = 210)
  62.     #文本框控件位置   
  63.     idEntry.place(x = 300, y = 50)
  64.     nameEntry.place(x = 300, y = 90)
  65.     achievementCEntry.place(x = 300, y = 130)
  66.     achievementMEntry.place(x = 300, y = 170)
  67.     achievementEEntry.place(x = 300, y = 210)
  68.     #按钮控件位置
  69.     sure.place(x = 50, y = 280)
  70.     back.place(x = 380, y = 280)
  71.     addWindow.mainloop()
复制代码
【制作查看界面】
打开chat.py输入下列程序,该部分程序界面使用了按钮和表格控件,通过函数leading_in_content(text):导入文件相关数据到表格中。按钮控件分别实现了以总分从大到小,从小到大,及输入时间的排序。
导入函数:
  1. def leading_in_content(text):#"""嵌套函数leading_in_content,用来导入单个文件,
  2.      data = open('C:/Data/'+ text + '.txt',encoding="utf-8")  # 拼接出完整的文件路径。
  3.         _list = data.readlines()  # 读取文件的所有内容。
  4.         _list = _list[0].split(",")  # 把读取的内容进行切片。
  5.         del _list[-1]  # 删除最后一个元素","。
  6.         return _list
复制代码

排序函数:
  1. def sortT():
  2.         nameList, achievementCList, achievementMList, achievementEList, idList = leading_in_content()  # 导入所有姓名,成绩,学号。
  3.         students_group = []  # 定义学生组列表。
  4.         for i in range(len(nameList)):  # 通过for循环往学生组列表里添加student元组。
  5.             student = (nameList[i], idList[i], int(achievementCList[i]), int(achievementMList[i]),int(achievementEList[i]))
  6.             students_group.append(student)
  7.         students_group = sorted(students_group, key=lambda x: x[2]+x[3]+x[4], reverse=True)
  8.         # 通过sorted函数进行排序。
  9.         x = tree.get_children()
  10.         for item in x:
  11.             tree.delete(item)
  12.         for i in range(len(nameList)):
  13.             student = students_group[i]
  14.             tree.insert("", "end", values=(student[0], student[1], student[2], student[3], student[4]))
  15.         tree.pack()
复制代码
【制作修改界面】
打开modiy.py输入下列程序,该部分程序界面使用了按钮和文本框控件,通过检测文本框中输入的数据姓名与列表中的姓名数据是否匹配从而判定是否对该条记录进行修改。(当然这里缺少对数据唯一性的判定!)
     
  1. if(nameList[i] == nameEntry.get()):
  2.                     isTrue = True
  3.                     achievementCList[i] = achievementCEntry.get()
  4.                     achievementMList[i] = achievementMEntry.get()
  5.                     achievementEList[i] = achievementEEntry.get()
  6.                     idList[i] = idEntry.get()
  7.                     empty()
  8.                     for j in range(len(nameList)):
  9.                         data = open('C:/Data/Name.txt', "a", encoding="utf-8")
  10.                         data.write(nameList[j] + ',')
  11.                         data.close()
复制代码

【制作删除界面】
打开dele.py输入相关程序,该部分程序界面中使用了按钮和文本框控件,通过检测输入文本框中的数据,从而定位到需要删除的记录,实现单条记录删除。另外也可以使用清空按钮实现文件中所有数据的清空,但无论那种删除都是使用了empty.py中的删除函数具体如下:
  1. def empty():"此函数的功能是清楚三个文件里的内容。"
  2. def __empty__(text):#
  3. """嵌套函数__empty__,用来删除单个文件。
  4.         text表示要清除的文件名"""
  5.         data = open('C:/Data/' + text + '.txt', "w", encoding="utf-8")  # 拼接出完整的文件路径。
  6.         data.write("")  # 清除该文件内容。
  7.         data.close()  # 关闭该文件。
  8.         return None
  9.     __empty__("achievementC")
  10.     __empty__("achievementM")
  11.     __empty__("achievementE")
  12.     __empty__("Name")
  13.     __empty__("Id")
复制代码


薛宇轩  初级技师

发表于 2022-4-5 09:01:58

emmm,我就想知道你是用的pygame还是什么,pygame我装不上(不想卸载)
回复

使用道具 举报

hnyzcj  版主
 楼主|

发表于 2022-4-5 13:41:49

TKINER
回复

使用道具 举报

小企鹅  高级技师

发表于 2022-4-5 14:41:38

厉害厉害
回复

使用道具 举报

赤星三春牛!  中级技匠

发表于 2022-4-7 23:02:42

厉害厉害
回复

使用道具 举报

赤星三春牛!  中级技匠

发表于 2022-4-7 23:03:48

6666666666666
回复

使用道具 举报

赤星三春牛!  中级技匠

发表于 2022-4-7 23:04:53

呵呵呵呵
回复

使用道具 举报

赤星三春牛!  中级技匠

发表于 2022-4-7 23:05:56

哈哈哈哈
回复

使用道具 举报

赤星三春牛!  中级技匠

发表于 2022-4-7 23:06:59

赞赞赞赞
回复

使用道具 举报

赤星三春牛!  中级技匠

发表于 2022-4-7 23:08:07

好好好好好
回复

使用道具 举报

赤星三春牛!  中级技匠

发表于 2022-4-7 23:09:14

非常实用!!
回复

使用道具 举报

赤星三春牛!  中级技匠

发表于 2022-4-7 23:10:18

tkinter库的。很好
回复

使用道具 举报

 初级技匠

发表于 2022-4-8 08:04:20

陈老师厉害啊
回复

使用道具 举报

hnyzcj  版主
 楼主|

发表于 2022-4-8 14:42:01

诩 发表于 2022-4-8 08:04
陈老师厉害啊

哈哈哈哈哈
回复

使用道具 举报

hnyzcj  版主
 楼主|

发表于 2022-4-8 14:42:23

诩 发表于 2022-4-8 08:04
陈老师厉害啊

是学生厉害
回复

使用道具 举报

 初级技匠

发表于 2022-4-8 15:47:03


吼吼
回复

使用道具 举报

DFHkyIODM2D  学徒

发表于 2022-4-12 17:53:32

厉害厉害
回复

使用道具 举报

百里  学徒

发表于 2022-5-6 22:25:42

为什么总是显示nameList没有定义呢?
NameError: name 'nameList' is not defined
回复

使用道具 举报

ku哥  学徒

发表于 2022-5-12 21:44:56

牛啊!!!!!!!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2022 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail