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中内置的NotImplemented类型的用法
Mar 31 Python
详解Python编程中对Monkey Patch猴子补丁开发方式的运用
May 27 Python
浅谈Python类的__getitem__和__setitem__特殊方法
Dec 25 Python
使用Python对Csv文件操作实例代码
May 12 Python
浅谈使用Python内置函数getattr实现分发模式
Jan 22 Python
Python中矩阵创建和矩阵运算方法
Aug 04 Python
Python爬取商家联系电话以及各种数据的方法
Nov 10 Python
python实现浪漫的烟花秀
Jan 30 Python
Python如何处理大数据?3个技巧效率提升攻略(推荐)
Apr 15 Python
Python实现图片批量加入水印代码实例
Nov 30 Python
python 初始化一个定长的数组实例
Dec 02 Python
详解基于Scrapy的IP代理池搭建
Sep 29 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判断上传的Excel文件中是否有图片及PHPExcel库认识
2013/01/11 PHP
php实现的一个简单json rpc框架实例
2015/03/30 PHP
使用XHGui来测试PHP性能的教程
2015/07/03 PHP
64位windows系统下安装Memcache缓存
2015/12/06 PHP
在laravel中使用with实现动态添加where条件
2019/10/10 PHP
使用PHP开发留言板功能
2019/11/19 PHP
小议javascript 设计模式 推荐
2009/10/28 Javascript
对采用动态原型方式无法展示继承机制得思考
2009/12/04 Javascript
jquery下实现overlay遮罩层代码
2010/08/25 Javascript
用javascript对一个json数组深度赋值示例
2014/07/27 Javascript
jQuery表单域属性过滤器用法分析
2015/02/10 Javascript
jQuery插件jquery-barcode实现条码打印的方法
2015/11/25 Javascript
JavaScript实现99乘法表及隔行变色实例代码
2016/02/24 Javascript
深入理解jQuery之防止冒泡事件
2016/05/24 Javascript
vue监听滚动事件实现滚动监听
2017/04/11 Javascript
Vue单页面应用保证F5强刷不清空数据的解决方案
2018/01/31 Javascript
Vue实现base64编码图片间的切换功能
2019/12/04 Javascript
Python中lambda的用法及其与def的区别解析
2014/07/28 Python
Python搜索引擎实现原理和方法
2017/11/27 Python
python-OpenCV 实现将数组转换成灰度图和彩图
2020/01/09 Python
Python selenium 自动化脚本打包成一个exe文件(推荐)
2020/01/14 Python
基于python实现简单网页服务器代码实例
2020/09/14 Python
用gpu训练好的神经网络,用tensorflow-cpu跑出错的原因及解决方案
2021/03/03 Python
html5实现的便签特效(实战分享)
2013/11/29 HTML / CSS
Skyscanner加拿大:全球旅行搜索平台
2018/11/19 全球购物
XD健身器材:Kevlar球、Crossfit健身球
2019/03/26 全球购物
国际奢侈品品牌童装购物网站:Designer Childrenswear
2019/05/08 全球购物
Fanatics法国官网:美国体育电商
2019/08/27 全球购物
最新计算机专业自荐信
2013/10/16 职场文书
给护士表扬信
2014/01/19 职场文书
校园安全检查制度
2014/02/03 职场文书
毕业大学生自荐信
2014/06/17 职场文书
《中国梦我的梦》大学生演讲稿
2014/08/20 职场文书
社区党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
土木工程专业本科生求职信
2014/10/01 职场文书
民主生活会对照检查材料范文
2014/10/01 职场文书