范文健康探索娱乐情感热点
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

python超详细实现完整学生成绩管理系统

  读万卷书不如行万里路,只学书上的理论是远远不够的,只有在实战中才能获得能力的提升,本篇文章手把手带你用Python实现一个完整版学生成绩管理系统,大家可以在过程中查缺补漏,提升水平 学生成绩管理系统简介
  一个带有登录界面具有增减改查功能的学生成绩管理系统(面向对象思想,利用tkinter库进行制作,利用.txt文件进行存储数据)
  源代码
  仅供学习参考,最好还是自己多敲多练习(实践是检验真理的唯一标准)students.txt
  用于存储数据main.pyfrom tkinter import * from Login import * import tkinter as tk  root = tk.Tk() root.title("欢迎进入学生成绩管理系统") LoginPage(root) root.mainloop()Login.pyfrom tkinter import * from tkinter.messagebox import * from MenuPage import *   class LoginPage(object):     def __init__(self, master=None):         self.root = master  # 定义内部变量root         self.root.geometry("%dx%d" % (300, 180))  # 设置窗口大小         self.username = StringVar()         self.password = StringVar()         self.createPage()      def createPage(self):         self.page = Frame(self.root)  # 创建Frame         self.page.pack()         Label(self.page).grid(row=0, stick=W)         Label(self.page, text="账户: ").grid(row=1, stick=W, pady=10)         Entry(self.page, textvariable=self.username).grid(row=1, column=1, stick=E)         Label(self.page, text="密码: ").grid(row=2, stick=W, pady=10)         Entry(self.page, textvariable=self.password, show="*").grid(row=2, column=1, stick=E)         Button(self.page, text="登陆", command=self.loginCheck).grid(row=3, stick=W, pady=10)         Button(self.page, text="退出", command=self.page.quit).grid(row=3, column=1, stick=E)      def loginCheck(self):         name = self.username.get()         password = self.password.get()         if name == "hacker707" and password == "admin":             self.page.destroy()             MenuPage(self.root)         else:             showinfo(title="错误", message="账号或密码错误!")db.pyimport json   class StudentDB(object):     def __init__(self):         self.students = []         self._load_students_data()      def insert(self, student):         self.students.append(student)         print(self.students)      def all(self):         return self.students      def delete_by_name(self, name):  # 删除数据         for student in self.students:             if name == student["name"]:                 self.students.remove(student)                 break         else:             return False         return True      # 查询     def search_by_name(self, name):         for student in self.students:             if name == student["name"]:                 return student  # 姓名+成绩         else:             return False      # 修改     def update(self, stu):  # 修改数据         name = stu["name"]         for student in self.students:             if name == student["name"]:                 student.update(stu)                 return True         else:             return False      # 加载文件     def _load_students_data(self):         with open("students.txt", "r", encoding="utf-8") as f:             text = f.read()         if text:             self.students = json.loads(text)      # 保存数据     def save_data(self):         with open("students.txt", "w", encoding="utf-8") as f:             text = json.dumps(self.students, ensure_ascii=False)             f.write(text)   db = StudentDB()MenuPage.pyimport tkinter as tk from view import *   class MenuPage(object):     def __init__(self, master=None):         self.root = master         self.root.geometry("%dx%d" % (600, 400))         self.create_page()         self.input_page = InputFrame(self.root)         self.query_page = QuerryFrame(self.root)         self.delete_page = DeleteFrame(self.root)         self.update_page = UpdateFrame(self.root)         self.about_page = AboutFrame(self.root)         self.input_page.pack()      def create_page(self):         # 创建菜单对象         menubar = tk.Menu(self.root)         # add_command 添加         menubar.add_command(label="录入", command=self.input_data)  # label         menubar.add_command(label="查询", command=self.query_data)  # label         menubar.add_command(label="删除", command=self.delete_data)  # label         menubar.add_command(label="修改", command=self.update_data)  # label         menubar.add_command(label="关于", command=self.about_data)  # label         # 设置菜单栏         self.root.config(menu=menubar)      # 切换界面     def input_data(self):         self.input_page.pack()         self.update_page.pack_forget()         self.delete_page.pack_forget()         self.about_page.pack_forget()         self.query_page.pack_forget()      def query_data(self):         self.input_page.pack_forget()         self.query_page.pack()         self.update_page.pack_forget()         self.delete_page.pack_forget()         self.about_page.pack_forget()      def update_data(self):         self.input_page.pack_forget()         self.update_page.pack()         self.delete_page.pack_forget()         self.about_page.pack_forget()         self.query_page.pack_forget()      def delete_data(self):         self.input_page.pack_forget()         self.update_page.pack_forget()         self.delete_page.pack()         self.about_page.pack_forget()         self.query_page.pack_forget()      def about_data(self):         self.input_page.pack_forget()         self.update_page.pack_forget()         self.delete_page.pack_forget()         self.about_page.pack()         self.query_page.pack_forget()view.pyimport tkinter as tk from db import db from tkinter import ttk   # 录入类 class InputFrame(tk.Frame):     def __init__(self, master=None):         super().__init__(master)         self.root = master         self.name = tk.StringVar()         self.math = tk.StringVar()         self.chinese = tk.StringVar()         self.english = tk.StringVar()         self.status = tk.StringVar()         self.create_page()      def create_page(self):         tk.Label(self).grid(row=0, stick=tk.W, pady=10)         tk.Label(self, text="姓名:").grid(row=1, stick=tk.W, pady=10)         # 单行文本框 entry,textvariable绑定变量         tk.Entry(self, textvariable=self.name).grid(row=1, column=1, stick=tk.E)          tk.Label(self, text="数学:").grid(row=2, stick=tk.W, pady=10)         # 单行文本框 entry,textvariable绑定变量         tk.Entry(self, textvariable=self.math).grid(row=2, column=1, stick=tk.E)          tk.Label(self, text="语文:").grid(row=3, stick=tk.W, pady=10)         # 单行文本框 entry,textvariable绑定变量         tk.Entry(self, textvariable=self.chinese).grid(row=3, column=1, stick=tk.E)          tk.Label(self, text="英语:").grid(row=4, stick=tk.W, pady=10)         # 单行文本框 entry,textvariable绑定变量         tk.Entry(self, textvariable=self.english).grid(row=4, column=1, stick=tk.E)          tk.Button(self, text="录入", command=self.recode_student).grid(row=5, column=1, stick=tk.E, pady=10)         tk.Label(self, textvariable=self.status).grid(row=6, column=1, stick=tk.E, pady=10)      # 录入成绩     def recode_student(self):         student = {             "name": self.name.get(),             "math": self.math.get(),             "chinese": self.chinese.get(),             "english": self.english.get(),         }  # 一个学生的成绩         db.insert(student)         # get()得到值         # set()设置值         self.status.set("插入数据成功!")         self._clear_data()         db.save_data()      # 清空文本数据     def _clear_data(self):         self.name.set("")         self.math.set("")         self.chinese.set("")         self.english.set("")   # 查询类 class QuerryFrame(tk.Frame):     def __init__(self, master=None):         super().__init__(master)         self.root = master         self.create_page()      # 创建查询界面     def create_page(self):         self.create_tree_view()         self.show_data_frame()         # grid()         tk.Button(self, text="刷新数据", command=self.show_data_frame).pack(anchor=tk.E, pady=5)      # Treeview     def create_tree_view(self):         # 表头         columns = ("name", "chinese", "math", "english")         self.tree_view = ttk.Treeview(self, show="headings", columns=columns)         self.tree_view.column("name", width=80, anchor="center")         self.tree_view.column("chinese", width=80, anchor="center")         self.tree_view.column("math", width=80, anchor="center")         self.tree_view.column("english", width=80, anchor="center")         self.tree_view.heading("name", text="姓名")         self.tree_view.heading("chinese", text="语文")         self.tree_view.heading("math", text="数学")         self.tree_view.heading("english", text="英语")         self.tree_view.pack()      # 显示数据     def show_data_frame(self):         # 删除原节点 map(int,值)         for i in map(self.tree_view.delete, self.tree_view.get_children("")):             pass         # 拿到列表里面所有值、students[]         students = db.all()         # 同时拿到索引跟value值         for index, stu in enumerate(students):             self.tree_view.insert("", index, values=(stu["name"], stu["chinese"], stu             ["math"], stu["english"]))   class DeleteFrame(tk.Frame):     def __init__(self, master=None):         super().__init__(master)         tk.Label(self, text="删除数据").pack()         self.status = tk.StringVar()         self.de_name = tk.StringVar()  # 获取删除学生的姓名         self.create_page()      # 创建界面     def create_page(self):         tk.Label(self, text="根据姓名删除信息").pack(anchor=tk.W, padx=20)         e1 = tk.Entry(self, textvariable=self.de_name)         e1.pack(side=tk.LEFT, padx=20, pady=5)          tk.Button(self, text="删除", command=self._delete).pack(side=tk.RIGHT)         tk.Label(self, textvariable=self.status).pack()      # 删除     def _delete(self):         name = self.de_name.get()         print(name)         result = db.delete_by_name(name)         if result:             self.status.set(f"{name}已经被删")             self.de_name.set("")         else:             self.status.set(f"{name}不存在")   class UpdateFrame(tk.Frame):     def __init__(self, master=None):         super().__init__(master)         self.root = master         tk.Label(self, text="修改界面").pack()         self.change_frame = tk.Frame(self)         self.change_frame.pack()         self.name = tk.StringVar()         self.math = tk.StringVar()         self.chinese = tk.StringVar()         self.english = tk.StringVar()         self.status = tk.StringVar()         self.create_page()      def create_page(self):         tk.Label(self.change_frame).grid(row=0, stick=tk.W, pady=10)         tk.Label(self.change_frame, text="姓名:").grid(row=1, stick=tk.W, pady=10)         # 单行文本框 entry,textvariable绑定变量         tk.Entry(self.change_frame, textvariable=self.name).grid(row=1, column=1, stick=tk.E)          tk.Label(self.change_frame, text="数学:").grid(row=2, stick=tk.W, pady=10)         # 单行文本框 entry,textvariable绑定变量         tk.Entry(self.change_frame, textvariable=self.math).grid(row=2, column=1, stick=tk.E)          tk.Label(self.change_frame, text="语文:").grid(row=3, stick=tk.W, pady=10)         # 单行文本框 entry,textvariable绑定变量         tk.Entry(self.change_frame, textvariable=self.chinese).grid(row=3, column=1, stick=tk.E)          tk.Label(self.change_frame, text="英语:").grid(row=4, stick=tk.W, pady=10)         # 单行文本框 entry,textvariable绑定变量         tk.Entry(self.change_frame, textvariable=self.english).grid(row=4, column=1, stick=tk.E)          # 按钮         tk.Button(self.change_frame, text="查询", command=self._search).grid(row=6, column=0, stick=tk.W, pady=10)         tk.Button(self.change_frame, text="修改", command=self._change).grid(row=6, column=1, stick=tk.E, pady=10)          tk.Label(self.change_frame, textvariable=self.status).grid(row=7, column=1, stick=tk.E, pady=10)      # 查询     def _search(self):         name = self.name.get()         student = db.search_by_name(name)         if student:             self.math.set(student["math"])             self.chinese.set(student["chinese"])             self.english.set(student["english"])             self.status.set(f"查询到{name}同学的信息")         else:             self.status.set(f"没有查询到{name}同学的信息")      #  更改成绩     def _change(self):         name = self.name.get()         math = self.math.get()         chinese = self.chinese.get()         english = self.english.get()         stu = {             "name": name,             "math": math,             "chinese": chinese,             "english": english,         }         r = db.update(stu)         if r:             self.status.set(f"{name}同学的信息更新完毕")         else:             self.status.set(f"{name}同学的信息更新失败")   class AboutFrame(tk.Frame):     def __init__(self, master=None):         super().__init__(master)         self.root = master         self.create_page()      def create_page(self):         tk.Label(self, text="关于本作品(人生苦短,我用python)").pack(anchor=tk.W)
  原文链接:https://www.jb51.net/article/241166.htm

户外爱好者必备须眉涡轮六叶刀T6Pro新款多功能版剃须刀轻体验云瑞将军图文版权声明图文均属原创,版权所有,未经许可或授权,禁止转载或引用。人生,就是在不断感受,不断体验,不断修行!感谢在这一路上给予我帮助的老师和朋友们。最近须眉又出新品剃须刀IIHS提出辅助驾驶系统新评级标准拒绝滥用功能,加强司机注意力把控记者周纯粼编辑眼下,车辆辅助驾驶系统的水平和性能不断提升,而对于智能时代汽车的安全标准也在水涨船高。曾经的汽车安全评级系统仅仅是对车身结构刚度碰撞时的溃缩安全气囊启动与否碰撞假人受网络谣言粉碎机电池充电要充到100,对电池更好流言内容给手机充电时要彻底充满,这样能让电池寿命更持久。真相解读经常给手机充电至100,对手机中的锂离子电池并不好。因为这种电池之所以能够工作,靠的是锂离子在正负极之间的移动。而电2022年好用的网络电视盒子,打破我们的想象又是一个新的一年开始,新年新气象,小编在这里又要给大家推荐几款排名靠前的网络电视盒子,一直深受大家的推崇,并且是深深的喜爱,而且其中还有价格很优惠的,但是性能上也是很高的网络电视盒心级服务超级SIM卡,好处多多相信大家对手机里的SIM都不会陌生,从早期的按键手机到如今的智能手机,这个小小的芯片陪伴了我们很长很长的时间。一个芯片代表了一个号码,很多长情的人不喜欢更换手机号码,与此同时,手机网易试水AI音乐创作,可10秒定制一首拜年歌北京商报讯(记者魏蔚)1月25日,网易推出一站式音乐创作平台网易天音。用户只需在微信搜索网易天音拜年小程序,输入祝福对象祝福语,10秒就能搞定词曲编唱,定制一首拜年歌。量身定制的歌火链科技与浙江金赋水携手探索区块链工业生产应用新方向近日,海南火链科技有限公司(以下简称火链科技)与浙江金赋水数字科技有限公司(以下简称金赋水科技)围绕区块链技术赋能生态合成革产业达成战略合作,双方将区块链技术应用到产业互联网的大数推荐收藏!这几段祖传的Python代码拿来就用今天分享几段工作生活中常用的代码,都是最为基础的功能和操作,而且大多还都是出现频率比较高的,很多都是可以拿来直接使用或者简单修改就可以放到自己的项目当中。喜欢的记得收藏关注点赞。废Java定义的数据类型Java定义的数据类型一变量按照数据类型来分基本数据类型整形byteshortintlong浮点型floatdouble字符型char布尔型boolean引用数据类型类(class阿里P10是什么样的存在?阿里P10到底是什么样概念,我给你们一个直观的感受。阿里的集团副总裁是P11级,阿里盒马鲜生CEO侯毅是P11级。P12是阿里集团资深副总裁级,而前段时间闹的沸沸扬扬的阿里太子接班仙桃会发展起来吗?仙桃有四个优势。其一,彭场无纺布产业链全世界第一,无可替代。其二,毛嘴女裤占全世界的三分一,而且,产业链越来越完善。其三,雷军的小米产业链条在仙桃布局。去年投了约二十多个亿,今年会
芯片行业迎洗牌,国产巨头首发4nm芯片,华为劣势越来越大本文原创,请勿抄袭和搬运,违者必究手机,芯片市场行业已经向高端过渡了,常见的7nm工艺无法满足高消费人群的需求。而且7nm芯片的价格不断被压下,在千元机中也能看见搭载7nm芯片的手风靡欧洲的电踏车5G技术加持的可穿戴设备长三角科交会上哪些产品最酷炫?第四届长三角科技交易博览会的现场,设置了长三角技术交易区中国工程院院士专家成果区数字城市区前沿科技成果区和长三角城市区五大展区,面积超过20000平方米,线下参展企业超过150家。专访千锋教育副总裁陈川高校专注科研,企业新进员工都是小白,IT职业教育是出路吗?导读产业数字化正在成为我国经济发展新动能,一方面,我国东南部广东浙江等制造业发达的省份人口红利逐渐消失,逐渐出现招工难另一方面,数字化转型大潮中,市场对行业IT双栖人才的需求尤为明只要4799,联想小新Air14Plus2021锐龙版拿到手联想小新Air14Plus是联想产品线极具性价比的一款机型,锐龙版的高性能高素质的屏幕,还有人脸识别,日常价位段也就5000多,目前京东活动R55600U版本到手价只要4799元。2000元档是否值得选择?深入体验高能实力派vivoT1手机很多人在选择手机时都会考虑到一个很重要的因素,那就是价格因素,在自己期望的预算内选择一款适用于自己的手机还是很重要的,尤其是对于预算不太高的用户来讲,价格因素就更加重要,一款手机如印象中的第一款智能手机你用的第一款手机是什么现在还隐隐约约的记得智能手机刚刚出来的时候的市场情形,比如有三星华为中兴htl等等,不下10个品牌商。当时问题比较的是手机外观方方圆圆,颜色绝大部分是黑色,厚看完这个表是不是发现该换手机了,先别急看完再决定手机,现在大家都在追求玩最高大上的,都想体验最新的芯片,最新的功能,为了尝鲜多花几千块钱,对很多手机发烧友来说算不了什么。很多手机生产商也把握透了消费者这种心态,所以,他们为都抢着手机CPU工艺比电脑先进,但性能落后很多,为什么?文小伊评科技制约手机SOC性能发展的关键因素有三个集成度,板载面积和功耗。01。手机SOC的集成度更高手机上的那枚主控芯片其实不能笼统地叫做CPU,而应该叫做SOC(即System为什么有人会一直更换iPhone8,也不买新的手机?iPhone8这么强吗?感谢您的阅读!如果说到经典的iPhone手机的话,那么iPhone8一定是不可或缺的一款,对于我们来说iPhone8它的表现有着自己独特的优势,我们在这里和大家分享一下。首先,iP请携号转入电信的亲们,谈谈使用电信的感受啊?假设你要携号转网使用电信,首先要考虑的问题,无论是从另外两家运营商携号转网电信,两者之间的月租对比以及月租所赠送的流量语音通话时长是否有优势?或者是对比其,语音通话质量是否发生改变天玑9000首发机型已确认,你会购买吗?感谢您的阅读!1999只能买一颗天玑9000芯片?那首发这款芯片的手机到底有多贵?联发科最近大热的处理器,全球首款4nm工艺旗舰手机芯片天玑9000发布。并且,这款联发科的处理器首