python实现简单成绩录入系统

学了一个多月的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是用字典储存的,我实在找不到怎么把他完整的读出来的语句只好分开存储了。

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

时间: 2019-09-19

Python学生成绩管理系统简洁版

讲起学生成绩管理系统,从大一C语言的课程设计开始,到大二的C++课程设计都是这个题,最近在学树莓派,好像树莓派常用Python编程,于是学了一波Python,看了一点基本的语法想写点东西练下手. 开发环境:Ubuntu+Python2.7 代码如下: #coding=utf-8 #保存学生信息 studentList=[] def addInfo(name,addr): tempInfo={} tempInfo['name']=name tempInfo['addr']=addr student

Python实现学生成绩管理系统

本文实例为大家分享了Python实现学生成绩管理系统的具体代码,供大家参考,具体内容如下 基本功能: 输入并存储学生的信息:通过输入学生的学号.姓名.和分数,然后就可以把数据保存在建立的student文件里面. 打印学生的所有信息:通过一个打印函数就可以把所有的信息打印在屏幕上. 修改学生信息:这个功能首先通过查询功能查询出该学生是否存在,如果存在就对该学生的信息进行修改,如果不存在则返回到主界面. 删除学生信息:该功能是对相应的学生进行删除操作,如果学生存在就查找到进行删除. 按学生成绩进行排

Python根据成绩分析系统浅析

案例:该数据集的是一个关于每个学生成绩的数据集,接下来我们对该数据集进行分析,判断学生是否适合继续深造 数据集特征展示 1 GRE 成绩 (290 to 340) 2 TOEFL 成绩(92 to 120) 3 学校等级 (1 to 5) 4 自身的意愿 (1 to 5) 5 推荐信的力度 (1 to 5) 6 CGPA成绩 (6.8 to 9.92) 7 是否有研习经验 (0 or 1) 8 读硕士的意向 (0.34 to 0.97) 1.导入包 import numpy as np impo

Python 输入一个数字判断成绩分数等级的方法

成绩分数等级为: 100-90 A 90-80 B 80-70 C 70-60 D 60以下 F 实现判断分数等级是一个很简单的数学问题,只要你输入的这个数字介于两个数字之间既可以判断出这个分数的等级. 代码如下: a=eval(input()) if a>=90: print("A") elif 90>a>=80: print("B") elif 80>a>=70: print("C") elif 70>a&

python输入一个水仙花数(三位数) 输出百位十位个位实例

我就废话不多说了,大家还是直接看代码吧! # python输入一个水仙花数(三位数) 输出百位十位个位 """ 从控制台输入一个三位数num, 如果是水仙花数就打印num是水仙花数, 否则打印num不是水仙花数 """ """ 任务: 1.定义变量num用于存放用户输入的数值 2.定义变量gw.sw.bw分别用于存放输入的三位数的个位,十位,百位 3.定义变量total,用于存放各位数字立方和 4.用if语句判断各位

java 输入一个数字组成的数组(输出该数组的最大值和最小值)

一.需求分析: 1.输入一个数组----------------------------------------->程序要接收一组输入的数组,没有明确这组数组有多大 2.一个数字组成的数组-------------------------------->接收到的数组只能是数字 3.输出接收到数组的最大值和最小值-------------->得到最大和最小值 二.技术难点 1.怎么从用户输入获取到一个数字数组? 可以用BufferedReader类:从字符输入流中读取文本,缓冲各个字符,从

java 输入一个数字,反转输出这个数字的值(实现方法)

如下所示: package 第四天; import java.util.Scanner; public class 数字反转 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入一个整数:"); int num=sc.nextInt(); int result=0;//存反转的数字 while(true) { int n=num%10

使用Python实现一个栈判断括号是否平衡

栈(Stack)在计算机领域是一个被广泛应用的集合,栈是线性集合,访问都严格地限制在一段,叫做顶(top). 举个例子,栈就想一摞洗干净的盘子,你每次取一个新盘子,都是放在这一摞盘子的最上头,当你往里面添加盘子的时候,也是放在最上面,处在底部的盘子,你可能永远也用不到. 栈的最常见操作,有如下两个: push(a) # 压入,将a压入的栈中 pop() # 弹出,将栈的最后一个元素弹出 可是使用Python的列表数据结构,来模拟栈的操作,使用 append 来模拟 push ,使用列表的 pop

在Python中输入一个以空格为间隔的数组方法

很多时候要从键盘连续输入一个数组,并用空格隔开,Python中的实现方法如下: >>> str_in = input('请以空格为间隔连续输入一个数组:') 然后在键盘中输入比如:123 456 789 111 222 以回车结束输入 得到的str_in为一个字符串,要将其转为一个列表有两种方法 方法一: >>> num = [int(n) for n in str_in.split()] 注意,因为int函数不能对列表操作,只能对的单个字符操作,另外,如果以其他字符为

C++对cin输入字符的判断及分段函数处理方法示例

本文实例讲述了C++对cin输入字符的判断及分段函数处理方法.分享给大家供大家参考,具体如下: 这两个本来也不是什么问题,然而真正遇到还是有地方可以研究的.首先是C++对于cin输入的判断,有时候你定义了一个整形,然后就是有些人就喜欢给你乱输个字符串进去,你必须处理一下,这里不像Java用抛出异常处理用户输入,也不像JavaScript用isNaN来判断,对此可参考前面的一篇<JavaScript对数字的判断与处理实例分析>.C++是用cin.fail()来判断. 至于分段函数的处理,比如要你

python实现写数字文件名的递增保存文件方法

如下所示: col = [] img = "test1" img1 = "test2" col.append(img) col.append(img1) data=np.array(col) np.savetxt('/public/home/student6/test/test.csv',data,fmt='%s') col=[] img2 = "test3" img3 = "test4" col.append(img2) c

python输入整条数据分割存入数组的方法

通过手动输入数据,将数据分成几部分存入数组中 import os import sys def test(): brick = raw_input("input:") brick = brick.split(",") print brick test() 输入的数据是用逗号分割开的,所以直接使用"split(",")"拆分. 以上这篇python输入整条数据分割存入数组的方法就是小编分享给大家的全部内容了,希望能给大家一个参考

python创建一个最简单http webserver服务器的方法

本文实例讲述了python创建一个最简单http webserver服务器的方法.分享给大家供大家参考.具体实现方法如下: import sys import BaseHTTPServer from SimpleHTTPServer import SimpleHTTPRequestHandler Handler = SimpleHTTPRequestHandler Server = BaseHTTPServer.HTTPServer Protocol = "HTTP/1.0" if s