python实现简单成绩录入系统


Posted in Python onSeptember 19, 2019

学了一个多月的python,做了一个小程序:python实现简单成绩录入系统,实验一下

menu部分

from tkinter import*#这是一个python模块,python3中都有
import tkinter.messagebox#这也是一个模块
from file_read import read
from file_write import write
 
class student_main():#定义一个学生类
 def __init__(self):
  self.name =''
  self.ID=''
  self.lessons={}
  self.sum=''
  self.average=''

stulist=read()
stu=student_main()

#登录页面--------------------------------------------------------------------
def seacharID(stulist,ID):#这是一个对是否重复id的检验
 for x in stulist:
 if x.ID==ID:
  return True
#这是一个成绩录入时的主要函数
def next():
 root_next=Tk()
 root_next.title('成绩录入')
 root_next.geometry('200x200+230+330')

 var_lesson=StringVar()
 var_score=StringVar()

 Label(root_next,text='课程名').place(x=20,y=50)
 Label(root_next,text='成绩').place(x=20,y=90)

 enter_lesson=Entry(root_next,textvariable=var_lesson,width=15)
 enter_lesson.place(x=70,y=50)
 enter_score=Entry(root_next,textvariable=var_score,width=15)
 enter_score.place(x=70,y=90)

 def btn3_login():
 x=var_lesson.get()
 y=var_score.get()
 if y.isdigit()==True:
  if int(y)>100:
  tkinter.messagebox.showerror('错误','请输入正确的成绩!!!')
  var_score.set('')
  elif int(y)<0:
  tkinter.messagebox.showerror('错误','请输入正确的成绩!!!')
  var_score.set('')
  else:
  stu.lessons[x]=y
  root_next.destroy()
  next()
 else:
  tkinter.messagebox.showwarning('提示','请输入数字')

 def btn4_login():
 x=var_lesson.get()
 y=var_score.get()
 stu.lessons[x]=y
 tkinter.messagebox.showinfo('录入成功')
 root_next.destroy()
  
 btn3=Button(root_next,text='录入新学科',bg='#5EAEFF',bd=0,command=btn3_login)
 btn3.place(y=130,width=99,height=20)
 btn4=Button(root_next,text='完成',bg='#FF6868',bd=0,command=btn4_login)
 btn4.place(x=101,y=130,width=99,height=20)
  #页面循环
 root_next.mainloop()
#核心函数
def entry():

 root_e=Tk()
 root_e.title("增")
 root_e.geometry('200x200+230+330')

 var_user=StringVar()
 var_ID=StringVar()

 Label(root_e,text='姓名').place(x=20,y=50)
 Label(root_e,text='ID').place(x=20,y=90)

 enter_user=Entry(root_e,textvariable=var_user,width=15)
 enter_user.place(x=70,y=50)
 enter_user.focus()
 enter_ID=Entry(root_e,textvariable=var_ID,width=15)
 enter_ID.place(x=70,y=90)

 def btn1_login():
 x=var_user.get()
 y=var_ID.get()
 pop=seacharID(stulist,y)
 if pop==True:
  tkinter.messagebox.showwarning('错误','该学号已存在')
  var_ID.set("")
  var_user.set("")
 else:
  if y.isdigit()==True:
  conunt=0
  sum_opp=0
  stu.name=x
  stu.ID=y
  root_e.destroy()
  next()
  
  for x in stu.lessons.values():
   sum_opp=sum_opp+int(x)
   conunt+=1

  stu.sum=str(sum_opp)
  average_opp=int(stu.sum)/conunt
  stu.average=str(average_opp)

  stulist.append(stu)
  
  write(stulist)

  menu()
  else:
  tkinter.messagebox.showwarning('提示','您输入了非数字的内容')
  var_ID.set(" ")

 def btn2_login():
 root_e.destroy()
 menu()

 btn1=Button(root_e,text='下一步',command=btn1_login,bd=0,bg='Silver')
 btn1.place(y=140,width=99,height=20)
 btn2=Button(root_e,text='取消',command=btn2_login,bd=0,bg='Silver')
 btn2.place(x=100,y=140,width=99,height=20)

 root_e.mainloop()
#删除页面------------------------------------------------------------------
def deling():
 root=Tk()
 root.title('删')
 root.geometry('200x200+230+330')

 Label(root,text='学号').place(x=40,y=50)

 def btn_ok():
 x=var_del.get()
 if x.isdigit()==True:
  count=0
  for i in stulist:
  if i.ID==x:
   stulist.remove(i)
   write(stulist)
   tkinter.messagebox.showinfo("提示",'成功删除该学生信息')
   root.destroy()
   menu()
  else:
   count+=1
  if count==len(stulist):
  tkinter.messagebox.showinfo(title='错误',message='不存在该账户!')
  var_del.set('')
 else:
  tkinter.messagebox.showerror('警告','请输入数字')

 def btn_cancel():
 x=tkinter.messagebox.askokcancel('提示','确定离开?')
 if x==True:
  root.destroy()
 menu()

 var_del=StringVar()
 entry_del=Entry(root,textvariable=var_del,width=10)
 entry_del.place(x=80,y=50)

 btn1=Button(root,bd=0,bg='Silver',command=btn_ok,text='确定')
 btn1.place(y=110,width=99,height=20)
 btn2=Button(root,bd=0,bg='Silver',command=btn_cancel,text='取消')
 btn2.place(x=101,y=110,width=99,height=20)

 root.mainloop()
#修改页面---------------------------------------------------------------
def change():
 root=Tk()
 root.title("改")
 root.geometry('200x200+230+330')

 Label(root,text='学号').place(x=40,y=50)

 var_change=StringVar()
 entry_change=Entry(root,textvariable=var_change,width=10)
 entry_change.place(x=80,y=50)

 def var_ok():
 x=var_change.get()
 if x.isdigit()==True:
  counton=0
  for i in stulist:
  if x==i.ID:
   stulist.remove(i)
   write(stulist)
   root.destroy()
   entry()
  else:
   counton+=1
  if counton==len(stulist):
  tkinter.messagebox.showerror('错误','不存在该账户!')
 else:
  tkinter.messagebox.showerror('警告','输入数字ID')

 def var_cancel():
 x=tkinter.messagebox.askokcancel('提示','确定离开')
 if x==True:
  root.destroy()


 btn1=Button(root,bd=0,bg='Silver',command=var_ok,text='确定')
 btn1.place(y=110,width=99,height=20)
 btn2=Button(root,bd=0,bg='Silver',command=var_cancel,text='取消')
 btn2.place(x=101,y=110,width=99,height=20)

 root.mainloop()
#查询页面------------------------------------------------------------------
def next_i(x):
 window=Tk()
 window.title('显示信息')
 window.geometry('400x200')

 counton=0
 for i in stulist:
 if i.ID==x:
  ai_name=i.name
  ai_ID=i.ID
  ai_lesson=str(i.lessons)
  ai_sum=i.sum
  ai_ave=i.average
 else:
  ai_name=' '
  ai_ID=' '
  ai_lesson='该学号不存在'
  ai_sum=' '
  ai_ave=' '
  
 Label(window,height=2,width=8,text=ai_name).pack()
 Label(window,height=2,width=8,text=ai_ID).pack()
 Label(window,height=2,width=100,text=ai_lesson).pack()
 Label(window,height=2,width=8,text=ai_sum).pack()
 Label(window,height=2,width=8,text=ai_ave).pack()

 window.mainloop()

def search():
 root=Tk()
 root.title('')
 root.geometry('200x200+230+330')

 Label(root,text='学号').place(x=40,y=50)

 def btn_ok():
 x=var_display.get()
 if x.isdigit()==True:
  next_i(x)
 else:
  tkinter.messagebox.showerror('警告','请输入数字ID')

 def btn_cancel():
 root.destroy()
 menu()

 var_display=StringVar()
 entry_display=Entry(root,textvariable=var_display,width=10)
 entry_display.place(x=80,y=50)

 btn1=Button(root,bd=0,bg='Silver',command=btn_ok,text='确定')
 btn1.place(y=110,width=99,height=20)
 btn2=Button(root,bd=0,bg='Silver',command=btn_cancel,text='返回主菜单')
 btn2.place(x=101,y=110,width=99,height=20)

 root.mainloop()
#排序页面--------------------------------------------------------------
def display(x):
 window=Tk()
 window.title()
 contunt=0
 for i in x:
 contunt+=1
 all_list=['第'+str(contunt)+'名:']
 all_list.append('姓名:'+i.name+'\\')
 all_list.append('学号:'+i.ID+'\\')
 for m,n in i.lessons.items():
  all_list.append(m+":")
  all_list.append(n)
  all_list.append('\\')
 all_list.append('总分:'+i.sum+'\\')
 all_list.append('平均分:'+i.average)
 Label(window,bd=20,text=all_list).pack()

 window.mainloop()


def sorting():
 for i in range(len(stulist)-1):
 for j in range(i+1,len(stulist)):
  temp=student_main()
  if stulist[i].average<stulist[j].average:
  temp=stulist[i]
  stulist[i]=stulist[j]
  stulist[j]=temp
 display(stulist)

#菜单------------------------------------------------------
def menu():
 root=Tk()
 root.title('主视面')
 root.geometry('250x300+150+100')

 def var_one():
 root.destroy()
 entry()
 def var_two():
 root.destroy()
 deling()
 def var_three():
 root.destroy()
 change()
 def var_four():
 root.destroy()
 search()
 def var_five():
 sorting()
 def var_six():
 root.destroy()
 
 var0=Label(root,text='--------------菜单--------------',font=('Arial',13),width=30,height=1)
 var0.pack()
 var1=Button(root,text='1.添加界面',bg='Silver',font=('Arial',12),width=20,height=1,bd=0,command=var_one)
 var1.pack(pady=4)
 var2=Button(root,text='2.删除界面',bg='Silver',font=('Arial',12),width=20,height=1,bd=0,command=var_two)
 var2.pack(pady=4)
 var3=Button(root,text='3.更改界面',bg='Silver',font=('Arial',12),width=20,height=1,bd=0,command=var_three)
 var3.pack(pady=4)
 var4=Button(root,text='4.查询界面',bg='Silver',font=('Arial',12),width=20,height=1,bd=0,command=var_four)
 var4.pack(pady=4)
 var4=Button(root,text='5.成绩排序',bg='Silver',font=('Arial',12),width=20,height=1,bd=0,command=var_five)
 var4.pack(pady=4)
 var6=Button(root,text='退出',bg='Silver',font=('Arial',12),width=20,height=1,bd=0,command=var_six)
 var6.pack(pady=4)
 root.mainloop()

menu()

file_read模块部分

(file_read主要是将我储存在txt文件中的数据转化成stulist列表,来进行检验,防止录入同一个id)

class student_main():
 def __init__(self):
  self.name =''
  self.ID=''
  self.lessons={}
  self.sum=''
  self.average=''

def read():
 stulist=[]
 x=[]
 f=open('all_student.txt','r')
 t=open('all_lesson.txt','r')
 line=f.readlines()
 lene=t.readlines()
 for i in range(len(line)):
 if (i+1)%2==1:#这里主要是读取和储存是出现了莫名的空行,我只好多录入一个空行好方便读取
  y=student_main()
  x=line[i].split(" ")
  y.name=x[0]
  y.ID=x[1]
  j=int((i+1)/2)
  z=eval(lene[j])
  y.lessons=z
  y.sum=x[2]
  y.average=x[3]
  stulist.append(y)
 return stulist

file_write模块部分

(主要是将menu中获得的数据进行储存)

class student_main():
 def __init__(self):
  self.name =''
  self.ID=''
  self.lessons={}
  self.sum=''
  self.average=''

def write(stulist):
 f=open('all_student.txt','w')
 for i in stulist:
 f.write(i.name+' '+i.ID+' '+i.sum+' '+i.average)
 f.write('\n')
 f.close()

 t=open('all_lesson.txt','w')
 for i in stulist:
 t.write(str(i.lessons))
 t.write('\n')
 t.close()

还要自己建立两个TXT文本,一个叫all_lesson.txt,另一个叫all_student.txt。

因为student类中的lesson是用字典储存的,我实在找不到怎么把他完整的读出来的语句只好分开存储了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python打开网页和暂停实例
Sep 30 Python
详解python脚本自动生成需要文件实例代码
Feb 04 Python
window下eclipse安装python插件教程
Apr 24 Python
python selenium自动上传有赞单号的操作方法
Jul 05 Python
Django2.1.3 中间件使用详解
Nov 26 Python
Python实现监控Nginx配置文件的不同并发送邮件报警功能示例
Feb 26 Python
python 中的列表生成式、生成器表达式、模块导入
Jun 19 Python
对python while循环和双重循环的实例详解
Aug 23 Python
python中通过selenium简单操作及元素定位知识点总结
Sep 10 Python
python 利用jinja2模板生成html代码实例
Oct 10 Python
基于python实现百度语音识别和图灵对话
Nov 02 Python
详解pycharm连接远程linux服务器的虚拟环境的方法
Nov 13 Python
淘宝秒杀python脚本 扫码登录版
Sep 19 #Python
基于python的selenium两种文件上传操作实现详解
Sep 19 #Python
Python分割训练集和测试集的方法示例
Sep 19 #Python
python Dijkstra算法实现最短路径问题的方法
Sep 19 #Python
PHP统计代码行数的小代码
Sep 19 #Python
Python实现代码统计工具
Sep 19 #Python
python实现统计代码行数的小工具
Sep 19 #Python
You might like
配置最新的PHP加MYSQL服务器
2006/10/09 PHP
纯php打造的tab选项卡效果代码(不用js)
2010/12/29 PHP
php版微信公众平台开发之验证步骤实例详解
2016/09/23 PHP
JavaScript 新手24条实用建议[TUTS+]
2009/06/21 Javascript
jquery移除、绑定、触发元素事件使用示例详解
2014/04/10 Javascript
javascript实现避免页面按钮重复提交
2015/01/08 Javascript
jQuery中replaceAll()方法用法实例
2015/01/16 Javascript
jQuery弹出层插件Lightbox_me使用指南
2015/04/21 Javascript
javascript鼠标滑动评分控件完整实例
2015/05/13 Javascript
6种javascript显示当前系统时间代码
2015/12/01 Javascript
JavaScript中定义类的方式详解
2016/01/07 Javascript
JavaScript中将数组进行合并的基本方法讲解
2016/03/07 Javascript
解析AngularJS中get请求URL出现的跨域问题
2016/12/01 Javascript
纯js三维数组实现三级联动效果
2017/02/07 Javascript
关于Vue实现组件信息的缓存问题
2017/08/23 Javascript
vue2.0 自定义组件的方法(vue组件的封装)
2018/06/05 Javascript
基于webpack4搭建的react项目框架的方法
2018/06/30 Javascript
JavaScript设计模式之建造者模式实例教程
2018/07/02 Javascript
ECharts地图绘制和钻取简易接口详解
2019/07/12 Javascript
layui实现图片虚拟路径上传,预览和删除的例子
2019/09/25 Javascript
微信小程序获取公众号文章列表及显示文章的示例代码
2020/03/10 Javascript
[33:19]完美世界DOTA2联赛PWL S2 PXG vs InkIce 第一场 11.26
2020/11/30 DOTA
python友情链接检查方法
2015/07/08 Python
Python selenium实现微博自动登录的示例代码
2018/05/16 Python
对python for 文件指定行读写操作详解
2018/12/29 Python
opencv 查找连通区域 最大面积实例
2020/06/04 Python
Python爬虫之Selenium中frame/iframe表单嵌套页面
2020/12/04 Python
澳大利亚Mocha官方网站:包、钱包、珠宝和配饰
2019/07/18 全球购物
西部世纪面试题
2014/12/05 面试题
教师自我鉴定范文
2013/11/10 职场文书
草船借箭教学反思
2014/02/03 职场文书
信息技术培训感言
2014/03/06 职场文书
委托培训协议书
2014/11/17 职场文书
《风不能把阳光打败》读后感3篇
2020/01/06 职场文书
PHP新手指南
2021/04/01 PHP
用Python爬取英雄联盟的皮肤详细示例
2021/12/06 Python