如何用Python实现学生信息

https://share.weiyun.com/6CdBA1Dj

#main.py
from tkinter import *
from LoginPage import *
  
root = Tk() 
root.title('学生管理系统') 
LoginPage(root) 
root.mainloop() 
#LoginPage.py
from tkinter import *
from tkinter.messagebox import *
from MainPage import *
from openpyxl import load_workbook

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() 
       secret = self.password.get() 
       
       excelPath = "python/students.xlsx"
       wb = load_workbook(filename = excelPath)
       ws = wb["users"]
       found = False
       pair = False
       for i in range(2,(ws.max_row)+1):
           if(name == ws['A'+str(i)].value):
               found=True
               if (secret == ws['B'+str(i)].value):
                   pair = True
               break
       wb.close()

       if (found == False):
           showerror("","用户名不存在")
       elif (pair == False):
           tk.messagebox.showerror("","密码错误")
       else:
           self.page.destroy() 
           MainPage(self.root) 
#MainPage.py
from tkinter import *
from view import * #菜单栏对应的各个子页面 
  
class MainPage(object): 
 def __init__(self, master=None): 
  self.root = master #定义内部变量root 
  self.root.geometry('%dx%d' % (600, 500)) #设置窗口大小 
  self.createPage() 
  
 def createPage(self): 
  self.queryPage = QueryFrame(self.root) #设置不同的frame
  self.countPage = CountFrame(self.root) 
  self.queryPage.pack() #默认显示数据录入界面 
  menubar = Menu(self.root) 
  menubar.add_command(label='学生管理', command = self.queryData)
  menubar.add_command(label='学生成绩统计', command = self.countData) 
  self.root['menu'] = menubar # 设置菜单栏 
  
 def queryData(self): 
  self.queryPage.pack() 
  self.countPage.pack_forget() 
  
 def countData(self): 
  self.queryPage.pack_forget() 
  self.countPage.pack() 
#view.py
from tkinter import *
from tkinter.messagebox import *
from openpyxl import load_workbook
from tkinter import ttk
import matplotlib.pyplot as plt
import matplotlib as mpl
 
  
class QueryFrame(Frame): # 继承Frame类 
  def __init__(self, master=None): 
    Frame.__init__(self, master) 
    self.root = master #定义内部变量root 
    self.sid = StringVar()
    self.sclass = StringVar()
    self.sname = StringVar()
    self.sex = StringVar()
    self.sbirthday = StringVar()
    self.dataTreeview = ttk.Treeview()
    self.excelPath = "python/students.xlsx"
    self.createPage() 
  
  def createPage(self): 
    Label(self,text='信息管理',font=('宋体',15)).pack(side=TOP,fill='x')
    
    nameItems= ('sid','sclass','sname','sex','sbirthday')
    headingItems = ('学号','班级','姓名','性别','出生日期')
    self.dataTreeview=ttk.Treeview(self,show='headings',column=nameItems)
    for item in zip(nameItems,headingItems):
      self.dataTreeview.column(item[0], width=100, anchor="center")
      self.dataTreeview.heading(item[0],text=item[1])
    self.dataTreeview.pack()
  
    fr = Frame(self)
    Label(fr,text='学号').grid(row=0)
    Entry(fr, textvariable=self.sid).grid(row=0, column=1)
    Label(fr,text='班级').grid(row=1)
    Entry(fr,textvariable=self.sclass).grid(row=1, column=1)
    Label(fr,text='姓名').grid(row=2)
    Entry(fr, textvariable=self.sname).grid(row=2, column=1)
    Label(fr,text='性别').grid(row=3)
    Entry(fr, textvariable=self.sex).grid(row=3, column=1)
    Label(fr,text='出生日期').grid(row=4)
    Entry(fr, textvariable=self.sbirthday).grid(row=4, column=1)
    fr.pack()
  
    
    bottomFrame = Frame(self)

    insButton=Button(bottomFrame,text="添加",command=self.add)
    insButton.grid(row=0,column=0)
    delButton=Button(bottomFrame,text="删除",command=self.delete)
    delButton.grid(row=0,column=1)
    updButton=Button(bottomFrame,text="修改",command=self.update)
    updButton.grid(row=1,column=0)
    selButton=Button(bottomFrame,text="查询",command=self.search)
    selButton.grid(row=1,column=1)#定位式布局,即坐标
    Button(bottomFrame,text="显示所有学生",command=self.show).grid(row=2)
    bottomFrame.pack()
  
  def add(self):
    sid = self.sid.get()
    sclass = self.sclass.get()
    sname = self.sname.get()
    sex = self.sex.get()
    sdate = self.sbirthday.get()
    
    wb = load_workbook(filename = self.excelPath)
    ws = wb["students"]
    for i in range(2,(ws.max_row)+1):
      if(sid==ws['A'+str(i)].value):
        Found=True
        break
      else:
        Found = False
    
    if(Found==True):
      messagebox.showinfo("Error", "用户名已存在!")
                
    else:
      messagebox.showinfo("Success", "新记录已添加")
      ws.append([sid,sclass,sname,sex,sdate])
      ws.append(['1','2','3'])
      print(sid)
    wb.save(self.excelPath)
    
  def update(self):
    sid = self.sid.get()
    sclass = self.sclass.get()
    sname = self.sname.get()
    sex = self.sex.get()
    sdate = self.sbirthday.get()
    
    wb = load_workbook(filename = self.excelPath)
    ws = wb["students"]
    editRow = 0
    for i in range(2,(ws.max_row)+1):
      if(sid==ws['A'+str(i)].value):
          Found=True
          editRow = i
          break
      else:
          Found = False
    if(Found==False):
      messagebox.showinfo("Error","不存在该用户")
    else:
      ws['A'+str(editRow)].value = sid
      ws['B'+str(editRow)].value = sclass
      ws['C'+str(editRow)].value = sname
      ws['D'+str(editRow)].value = sex
      ws['E'+str(editRow)].value = sdate       
    wb.save(self.excelPath)
    
  def delete(self):
    sid = self.sid.get()

    wb = load_workbook(filename = self.excelPath)
    ws = wb["students"]
    editRow = 0
    for i in range(2,(ws.max_row)+1):
      if(sid==ws['A'+str(i)].value):
        Found=True
        editRow = i
        break
      else:
        Found = False
    
    if(Found==False):
      messagebox.showinfo("Error", "用户名不存在!")
    else:
      ws.delete_rows(editRow)
      messagebox.showinfo("Success", "记录已删除")
    wb.save(self.excelPath)
    
  def search(self):
    sid = self.sid.get()
    wb = load_workbook(filename = self.excelPath)
    ws = wb["students"]
    editRow = 0
    for i in range(2,(ws.max_row)+1):
      if(sid==ws['A'+str(i)].value):
        Found=True
        editRow = i
        break
      else:
        Found = False
    if(Found==False):
      messagebox.showinfo("Error", "用户名不存在!")
    else:
      value=[]
      for cell in ws[editRow]:
        value.append(cell.value)
      self.dataTreeview.insert('', 0, values=value)
      
  def show(self):
    wb = load_workbook(filename = self.excelPath)
    ws = wb["students"]
    ws.delete_rows(0)
    for row in ws.rows:
      value=[]
      for cell in row:
        value.append(cell.value)
      self.dataTreeview.insert('', 1, values=value)
    
    
class CountFrame(Frame): # 继承Frame类 
  def __init__(self, master=None): 
     Frame.__init__(self, master) 
     self.root = master #定义内部变量root 
     self.info = StringVar()
     self.dataTreeview = ttk.Treeview(self)
     self.createPage() 
   
  def createPage(self): 
    Label(self, text='统计界面').pack() 
    headingItems = ['课程','优','良','中','及格','不及格','总人数']
    nameItems= ('sid','sclass','sname','sex','sbirthday','test1','test2')
    self.dataTreeview=ttk.Treeview(self,show='headings',column=nameItems)
    for item in zip(nameItems,headingItems):
      self.dataTreeview.column(item[0], width=80, anchor="center")
      self.dataTreeview.heading(item[0],text=item[1])
    self.dataTreeview.pack()
    Button(self, text='统计',command=self.cal).pack()
    Button(self, text='画图', command=self.chart).pack()
    
  def cal(self):
    excelPath = "python/students.xlsx"
    wb = load_workbook(filename = excelPath)
    ws = wb["grade"]
    ws.delete_cols(0)
    for col in ws.columns:
      A,B,C,D,E=0,0,0,0,0
      for cell in col[1:ws.max_row]:
        grade = cell.value
        
        if (grade>90):
          A = A+1
        elif (grade>80):
          B = B+1
        elif (grade>70):
          C = C+1
        elif (grade>60):
          D = D+1
        else:
          E = E+1
      li = [col[0].value, A, B, C, D, E, ws.max_row-1]  
      self.dataTreeview.insert('', 0, values=li)
      

    
    
   

一些细节没调

还没画图功能(没看懂要画啥样的图)

读取excel的库有限制吗?

界面随便设计吗