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基础知识_浅谈用户交互
May 31 Python
python方向键控制上下左右代码
Jan 20 Python
Python基于多线程实现ping扫描功能示例
Jul 23 Python
Empty test suite.(PyCharm程序运行错误的解决方法)
Nov 30 Python
OpenCV搞定腾讯滑块验证码的实现代码
May 18 Python
python切片的步进、添加、连接简单操作示例
Jul 11 Python
Django的models模型的具体使用
Jul 15 Python
Python Django框架模板渲染功能示例
Nov 08 Python
python 使用shutil复制图片的例子
Dec 13 Python
tensorflow 实现自定义梯度反向传播代码
Feb 10 Python
Python类成员继承重写的实现
Sep 16 Python
Django contrib auth authenticate函数源码解析
Nov 12 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里的JS打印函数
2006/10/09 PHP
数字转英文
2006/12/06 PHP
php删除一个路径下的所有文件夹和文件的方法
2018/02/07 PHP
javascript 二维数组的实现与应用
2010/03/16 Javascript
如何获取JQUERY AJAX返回的JSON结果集实现代码
2012/12/10 Javascript
14款NodeJS Web框架推荐
2014/07/11 NodeJs
jquery实现可自动判断位置的弹出层效果代码
2015/10/12 Javascript
详解JS数据类型的值拷贝函数(深拷贝)
2017/07/13 Javascript
JS改变页面颜色源码分享
2018/02/24 Javascript
Vue分页效果与购物车功能
2019/12/13 Javascript
JavaScript实现简单计算器功能
2019/12/19 Javascript
jquery传参及获取方式(两种方式)
2020/02/13 jQuery
vue element ui validate 主动触发错误提示操作
2020/09/21 Javascript
[56:35]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第一局
2016/03/06 DOTA
Python二维码生成库qrcode安装和使用示例
2014/12/16 Python
详解Python的Django框架中的Cookie相关处理
2015/07/22 Python
Python中functools模块的常用函数解析
2016/06/30 Python
python+opencv实现动态物体识别
2018/01/09 Python
pycharm 取消默认的右击运行unittest的方法
2018/11/29 Python
python广度优先搜索得到两点间最短路径
2019/01/17 Python
通过cmd进入python的实例操作
2019/06/26 Python
Python序列化与反序列化pickle用法实例
2019/11/11 Python
pyautogui自动化控制鼠标和键盘操作的步骤
2020/04/01 Python
canvas如何实现多张图片编辑的图片编辑器
2020/03/10 HTML / CSS
非洲NO.1网上商店:Jumia肯尼亚
2016/08/18 全球购物
Born鞋子官网:Born Shoes
2017/04/06 全球购物
Blue Nile蓝色尼罗河香港官网:世界最大在线钻石珠宝销售商
2020/05/07 全球购物
大专生工程监理求职信
2013/10/04 职场文书
小学运动会口号
2014/06/07 职场文书
自愿离婚协议书范本
2014/09/13 职场文书
十佳少年事迹材料
2014/12/25 职场文书
招标保密承诺书
2015/01/20 职场文书
python迷宫问题深度优先遍历实例
2021/06/20 Python
Java Optional<Foo>转换成List<Bar>的实例方法
2021/06/20 Java/Android
Python制作动态字符画的源码
2021/08/04 Python
php png失真的原因及解决办法
2021/11/17 PHP